bsd.obj.mk revision 35789
1178481Sjb# $Id: bsd.obj.mk,v 1.23 1998/03/14 14:08:29 bde Exp $ 2178481Sjb# 3178481Sjb# The include file <bsd.obj.mk> handles creating the 'obj' directory 4178481Sjb# and cleaning up object files, etc. 5178481Sjb# 6178481Sjb# Under construction: it also contains the _SUBDIR target (which is used 7178481Sjb# by most `mk' files to recurse into subdirectories) and defaults for the 8178481Sjb# cleandepend, depend and tags targets. It may eventually be merged with 9178481Sjb# with bsd.subdir.mk. 10178481Sjb# 11178481Sjb# +++ variables +++ 12178481Sjb# 13178481Sjb# CLEANDIRS Additional directories to remove for the clean target. 14178481Sjb# 15178481Sjb# CLEANFILES Additional files to remove for the clean target. 16178481Sjb# 17178481Sjb# MAKEOBJDIR A pathname for the directory where the targets 18178481Sjb# are built. Note: MAKEOBJDIR is an *enviroment* variable 19178481Sjb# and works properly only if set as an enviroment variable, 20178481Sjb# not as a global or command line variable! 21178481Sjb# 22178481Sjb# E.g. use `env MAKEOBJDIR=temp-obj make' 23178481Sjb# 24178481Sjb# MAKEOBJDIRPREFIX Specifies somewhere other than /usr/obj to root the object 25178481Sjb# tree. Note: MAKEOBJDIRPREFIX is an *enviroment* variable 26178481Sjb# and works properly only if set as an enviroment variable, 27178481Sjb# not as a global or command line variable! 28178481Sjb# 29178481Sjb# E.g. use `env MAKEOBJDIRPREFIX=/somewhere/obj make' 30178481Sjb# 31178481Sjb# NOOBJ Do not create object directories. This should not be set 32178481Sjb# if anything is built. 33178481Sjb# 34178481Sjb# OBJLINK Create a symbolic link from ${.CURDIR}/obj to 35178481Sjb# ${CANONICALOBJDIR}. Note: this BREAKS the read-only source 36178481Sjb# tree rule! 37178481Sjb# 38178481Sjb# +++ targets +++ 39178481Sjb# 40249656Sed# clean: 41249656Sed# remove ${CLEANFILES}; remove ${CLEANDIRS} and all contents. 42178481Sjb# 43178481Sjb# cleandir: 44178481Sjb# remove the build directory (and all its contents) created by obj 45178481Sjb# 46178481Sjb# obj: 47178481Sjb# create build directory. 48178481Sjb# 49178481Sjb 50178481Sjb.if defined(MAKEOBJDIRPREFIX) 51178481SjbCANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR} 52178481Sjb.else 53178481SjbCANONICALOBJDIR:=/usr/obj${.CURDIR} 54178481Sjb.endif 55178481Sjb 56178481Sjb# 57178481Sjb# Warn of unorthodox object directory 58178481Sjb# 59178481Sjbobjwarn: 60178481Sjb.if !defined(NOOBJ) && ${.OBJDIR} != ${CANONICALOBJDIR} 61178481Sjb.if ${.OBJDIR} == ${.CURDIR} 62178481Sjb @${ECHO} "Warning: Object directory not changed from original ${.CURDIR}" 63178481Sjb.elif !defined(MAKEOBJDIR) && !defined(MAKEOBJDIRPREFIX) && !defined(OBJLINK) 64178481Sjb @${ECHO} "Warning: Using ${.OBJDIR} as object directory instead of\ 65178481Sjb canonical ${CANONICALOBJDIR}" 66178481Sjb.endif 67178481Sjb.endif 68178481Sjb 69178546Sjb.if !target(obj) 70178481Sjb.if defined(NOOBJ) 71178481Sjbobj: 72178481Sjb.else 73178481Sjb.if !defined(OBJLINK) 74178481Sjbobj: _SUBDIR 75178481Sjb @if ! test -d ${CANONICALOBJDIR}/; then \ 76178481Sjb mkdir -p ${CANONICALOBJDIR}; \ 77178481Sjb if ! test -d ${CANONICALOBJDIR}/; then \ 78178481Sjb ${ECHO} "Unable to create ${CANONICALOBJDIR}."; \ 79178481Sjb exit 1; \ 80178481Sjb fi; \ 81178481Sjb ${ECHO} "${CANONICALOBJDIR} created for ${.CURDIR}"; \ 82178481Sjb fi 83178481Sjb.else 84178481Sjbobj: _SUBDIR 85178481Sjb @if ! test -d ${CANONICALOBJDIR}/; then \ 86178481Sjb mkdir -p ${CANONICALOBJDIR}; \ 87178481Sjb if ! test -d ${CANONICALOBJDIR}/; then \ 88178481Sjb ${ECHO} "Unable to create ${CANONICALOBJDIR}."; \ 89178481Sjb exit 1; \ 90178481Sjb fi; \ 91178481Sjb rm -f ${.CURDIR}/obj; \ 92178481Sjb ln -s ${CANONICALOBJDIR} ${.CURDIR}/obj; \ 93178481Sjb ${ECHO} "${.CURDIR} -> ${CANONICALOBJDIR}"; \ 94178481Sjb fi 95178481Sjb.endif 96178481Sjb.endif 97178481Sjb.endif 98178481Sjb 99178481Sjb.if !target(objlink) 100178481Sjbobjlink: _SUBDIR 101178481Sjb @if test -d ${CANONICALOBJDIR}/; then \ 102178481Sjb rm -f ${.CURDIR}/obj; \ 103178481Sjb ln -s ${CANONICALOBJDIR} ${.CURDIR}/obj; \ 104178481Sjb else \ 105178481Sjb echo "No ${CANONICALOBJDIR} to link to - do a make obj."; \ 106178481Sjb fi 107178546Sjb.endif 108178481Sjb 109178481Sjb# 110178481Sjb# where would that obj directory be? 111178481Sjb# 112178481Sjb.if !target(whereobj) 113178481Sjbwhereobj: 114249656Sed @cd ${.CURDIR}; ${MAKE} -V .OBJDIR 115178481Sjb.endif 116178481Sjb 117178481Sjbcleanobj: 118178481Sjb @if [ -d ${CANONICALOBJDIR}/ ]; then \ 119178481Sjb rm -rf ${CANONICALOBJDIR}; \ 120178481Sjb else \ 121178481Sjb cd ${.CURDIR} && ${MAKE} clean cleandepend; \ 122178481Sjb fi 123178481Sjb @if [ -h ${.CURDIR}/obj ]; then rm -f ${.CURDIR}/obj; fi 124178481Sjb 125178481Sjb.if !target(clean) 126178481Sjbclean: _SUBDIR 127178481Sjb.if defined(CLEANFILES) && !empty(CLEANFILES) 128178481Sjb rm -f ${CLEANFILES} 129178481Sjb.endif 130178481Sjb.if defined(CLEANDIRS) && !empty(CLEANDIRS) 131249656Sed rm -rf ${CLEANDIRS} 132178481Sjb.endif 133178481Sjb.endif 134178481Sjb 135178481Sjb.if !target(checkdpadd) 136178481Sjbcheckdpadd: _SUBDIR 137178481Sjb.if (defined(DPADD) || defined(LDADD)) 138178481Sjbcheckdpadd: 139178481Sjb.if ${BINFORMAT} != aout 140178481Sjb @ldadd=`echo \`for lib in ${DPADD} ; do \ 141178481Sjb echo $$lib | sed 's;^/usr/lib/lib\(.*\)\.a;-l\1;' ; \ 142178481Sjb done \`` ; \ 143178481Sjb ldadd1=`echo ${LDADD}` ; \ 144178481Sjb if [ "$$ldadd" != "$$ldadd1" ] ; then \ 145178481Sjb echo ${.CURDIR} ; \ 146178481Sjb echo "DPADD -> $$ldadd" ; \ 147178481Sjb echo "LDADD -> $$ldadd1" ; \ 148178481Sjb fi 149178481Sjb.else 150178481Sjb @dpadd=`echo \`ld -Bstatic -f ${LDDESTDIR} ${LDADD}\`` ; \ 151178481Sjb if [ "$$dpadd" != "${DPADD}" ] ; then \ 152178546Sjb echo ${.CURDIR} ; \ 153178481Sjb echo "LDADD -> $$dpadd" ; \ 154178481Sjb echo "DPADD = ${DPADD}" ; \ 155178481Sjb fi 156178481Sjb.endif 157178481Sjb.endif 158178481Sjb.endif 159178481Sjb 160178481Sjbcleandir: cleanobj _SUBDIR 161178481Sjb 162178481Sjb.for __target in cleandepend depend tags 163178481Sjb.if !target(${__target}) 164178481Sjb${__target}: _SUBDIR 165178481Sjb.endif 166178481Sjb.endfor 167178481Sjb 168178481Sjb_SUBDIR: .USE 169178481Sjb.if defined(SUBDIR) && !empty(SUBDIR) 170178481Sjb @for entry in ${SUBDIR}; do \ 171178481Sjb (${ECHODIR} "===> ${DIRPRFX}$$entry"; \ 172178481Sjb if test -d ${.CURDIR}/$${entry}.${MACHINE}; then \ 173178481Sjb cd ${.CURDIR}/$${entry}.${MACHINE}; \ 174178481Sjb else \ 175178481Sjb cd ${.CURDIR}/$${entry}; \ 176178481Sjb fi; \ 177178481Sjb ${MAKE} ${.TARGET:S/realinstall/install/:S/.depend/depend/} DIRPRFX=${DIRPRFX}$$entry/); \ 178178481Sjb done 179178481Sjb.endif 180178481Sjb