1 1.51 christos # $NetBSD: bsd.obj.mk,v 1.51 2016/12/10 23:12:39 christos Exp $ 2 1.44 lukem 3 1.44 lukem .if !defined(_BSD_OBJ_MK_) 4 1.44 lukem _BSD_OBJ_MK_=1 5 1.17 lukem 6 1.17 lukem .include <bsd.own.mk> 7 1.1 mycroft 8 1.29 tv __curdir:= ${.CURDIR} 9 1.29 tv 10 1.16 lukem .if ${MKOBJ} == "no" 11 1.1 mycroft obj: 12 1.1 mycroft .else 13 1.24 itohy .if defined(MAKEOBJDIRPREFIX) || defined(MAKEOBJDIR) 14 1.23 sjg .if defined(MAKEOBJDIRPREFIX) 15 1.34 tv __objdir:= ${MAKEOBJDIRPREFIX}${__curdir} 16 1.23 sjg .else 17 1.23 sjg __objdir:= ${MAKEOBJDIR} 18 1.23 sjg .endif 19 1.23 sjg # MAKEOBJDIR and MAKEOBJDIRPREFIX are env variables supported 20 1.23 sjg # by make(1). We simply mkdir -p the specified path. 21 1.23 sjg # If that fails - we do a mkdir to get the appropriate error message 22 1.23 sjg # before bailing out. 23 1.23 sjg obj: 24 1.37 jmc .if defined(MAKEOBJDIRPREFIX) 25 1.37 jmc @if [ ! -d ${MAKEOBJDIRPREFIX} ]; then \ 26 1.37 jmc echo "MAKEOBJDIRPREFIX ${MAKEOBJDIRPREFIX} does not exist, bailing..."; \ 27 1.37 jmc exit 1; \ 28 1.41 lukem fi; 29 1.37 jmc .endif 30 1.30 tv @if [ ! -d ${__objdir} ]; then \ 31 1.23 sjg mkdir -p ${__objdir}; \ 32 1.30 tv if [ ! -d ${__objdir} ]; then \ 33 1.23 sjg mkdir ${__objdir}; exit 1; \ 34 1.23 sjg fi; \ 35 1.45 lukem ${_MKSHMSG} " objdir ${__objdir}"; \ 36 1.23 sjg fi 37 1.23 sjg .else 38 1.32 tv PAWD?= /bin/pwd 39 1.32 tv 40 1.51 christos __objdirsuffix= ${OBJMACHINE:D.${MACHINE}${OBJMACHINE_ARCH:D-${MACHINE_ARCH}}} 41 1.50 christos __objdir= obj${__objdirsuffix} 42 1.3 cgd 43 1.33 tv __usrobjdir= ${BSDOBJDIR}${USR_OBJMACHINE:D.${MACHINE}} 44 1.50 christos __usrobjdirpf= ${USR_OBJMACHINE:D:U${__objdirsuffix}} 45 1.32 tv 46 1.40 thorpej .if defined(BUILDID) 47 1.40 thorpej __objdir:= ${__objdir}.${BUILDID} 48 1.40 thorpej __usrobjdirpf:= ${__usrobjdirpf}.${BUILDID} 49 1.40 thorpej __need_objdir_target=yes 50 1.40 thorpej .endif 51 1.40 thorpej 52 1.35 tv .if defined(OBJHOSTMACHINE) && (${MKHOSTOBJ:Uno} != "no") 53 1.32 tv # In case .CURDIR has been twiddled by a .mk file and is now relative, 54 1.32 tv # make it absolute again. 55 1.34 tv .if ${__curdir:M/*} == "" 56 1.49 christos __curdir!= cd "${__curdir}" && ${PAWD} 57 1.3 cgd .endif 58 1.3 cgd 59 1.32 tv __objdir:= ${__objdir}.${HOST_OSTYPE} 60 1.32 tv __usrobjdirpf:= ${__usrobjdirpf}.${HOST_OSTYPE} 61 1.40 thorpej __need_objdir_target=yes 62 1.40 thorpej .endif 63 1.40 thorpej 64 1.40 thorpej .if defined(__need_objdir_target) 65 1.48 lukem # Get make to change its internal definition of .OBJDIR 66 1.32 tv .OBJDIR: ${__objdir} 67 1.32 tv .endif 68 1.18 kim 69 1.12 mycroft obj: 70 1.49 christos @cd "${__curdir}"; \ 71 1.30 tv here=`${PAWD}`/; subdir=$${here#${BSDSRCDIR}/}; \ 72 1.31 tv if [ "$$here" != "$$subdir" ]; then \ 73 1.30 tv if [ ! -d ${__usrobjdir} ]; then \ 74 1.27 mrg echo "BSDOBJDIR ${__usrobjdir} does not exist, bailing..."; \ 75 1.27 mrg exit 1; \ 76 1.27 mrg fi; \ 77 1.30 tv subdir=$${subdir%/}; \ 78 1.30 tv dest=${__usrobjdir}/$$subdir${__usrobjdirpf}; \ 79 1.46 lukem if [ -x ${TOOL_STAT} ] && \ 80 1.46 lukem ttarg=`${TOOL_STAT} -qf '%Y' $${here}${__objdir}` && \ 81 1.42 lukem [ "$$dest" = "$$ttarg" ]; then \ 82 1.42 lukem : ; \ 83 1.22 sommerfe else \ 84 1.45 lukem ${_MKSHMSG} " objdir $$dest"; \ 85 1.22 sommerfe rm -rf ${__objdir}; \ 86 1.22 sommerfe ln -s $$dest ${__objdir}; \ 87 1.22 sommerfe fi; \ 88 1.30 tv if [ ! -d $$dest ]; then \ 89 1.1 mycroft mkdir -p $$dest; \ 90 1.1 mycroft else \ 91 1.1 mycroft true; \ 92 1.1 mycroft fi; \ 93 1.1 mycroft else \ 94 1.1 mycroft true ; \ 95 1.31 tv dest=$${here}${__objdir} ; \ 96 1.30 tv if [ ! -d ${__objdir} ] || [ -h ${__objdir} ]; then \ 97 1.45 lukem ${_MKSHMSG} " objdir $$dest"; \ 98 1.22 sommerfe rm -f ${__objdir}; \ 99 1.1 mycroft mkdir $$dest; \ 100 1.1 mycroft fi ; \ 101 1.1 mycroft fi; 102 1.23 sjg .endif 103 1.1 mycroft .endif 104 1.14 tv 105 1.15 tv print-objdir: 106 1.14 tv @echo ${.OBJDIR} 107 1.43 lukem 108 1.43 lukem .include <bsd.sys.mk> 109 1.44 lukem 110 1.44 lukem .endif # !defined(_BSD_OBJ_MK_) 111