bsd.obj.mk revision 68151
11573Srgrimes# $FreeBSD: head/share/mk/bsd.obj.mk 68151 2000-11-01 07:09:38Z obrien $ 21573Srgrimes# 31573Srgrimes# The include file <bsd.obj.mk> handles creating the 'obj' directory 41573Srgrimes# and cleaning up object files, etc. 51573Srgrimes# 61573Srgrimes# Under construction: it also contains the _SUBDIR target (which is used 71573Srgrimes# by most `mk' files to recurse into subdirectories) and defaults for the 8227753Stheraven# cleandepend, depend and tags targets. It may eventually be merged with 9227753Stheraven# with bsd.subdir.mk. 10227753Stheraven# 11227753Stheraven# +++ variables +++ 12227753Stheraven# 131573Srgrimes# CLEANDIRS Additional directories to remove for the clean target. 141573Srgrimes# 151573Srgrimes# CLEANFILES Additional files to remove for the clean target. 161573Srgrimes# 171573Srgrimes# MAKEOBJDIR A pathname for the directory where the targets 181573Srgrimes# are built. Note: MAKEOBJDIR is an *enviroment* variable 191573Srgrimes# and works properly only if set as an enviroment variable, 201573Srgrimes# not as a global or command line variable! 21249808Semaste# 221573Srgrimes# E.g. use `env MAKEOBJDIR=temp-obj make' 231573Srgrimes# 241573Srgrimes# MAKEOBJDIRPREFIX Specifies somewhere other than /usr/obj to root the object 251573Srgrimes# tree. Note: MAKEOBJDIRPREFIX is an *enviroment* variable 261573Srgrimes# and works properly only if set as an enviroment variable, 271573Srgrimes# not as a global or command line variable! 281573Srgrimes# 291573Srgrimes# E.g. use `env MAKEOBJDIRPREFIX=/somewhere/obj make' 301573Srgrimes# 311573Srgrimes# NOOBJ Do not create object directories. This should not be set 321573Srgrimes# if anything is built. 331573Srgrimes# 341573Srgrimes# +++ targets +++ 351573Srgrimes# 361573Srgrimes# clean: 371573Srgrimes# remove ${CLEANFILES}; remove ${CLEANDIRS} and all contents. 381573Srgrimes# 391573Srgrimes# cleandir: 401573Srgrimes# remove the build directory (and all its contents) created by obj 4192986Sobrien# 4292986Sobrien# obj: 431573Srgrimes# create build directory. 441573Srgrimes# 451573Srgrimes 461573Srgrimes.if defined(MAKEOBJDIRPREFIX) 471573SrgrimesCANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR} 481573Srgrimes.else 491573SrgrimesCANONICALOBJDIR:=/usr/obj${.CURDIR} 5071579Sdeischen.endif 511573Srgrimes 521573Srgrimes# 5387113Sfenner# Warn of unorthodox object directory 54234531Sdas# 551573Srgrimesobjwarn: 5687490Sphantom.if !defined(NOOBJ) && ${.OBJDIR} != ${CANONICALOBJDIR} 5787113Sfenner.if ${.OBJDIR} == ${.CURDIR} 5887113Sfenner @${ECHO} "Warning: Object directory not changed from original ${.CURDIR}" 591573Srgrimes.elif !defined(MAKEOBJDIR) && !defined(MAKEOBJDIRPREFIX) 601573Srgrimes @${ECHO} "Warning: Using ${.OBJDIR} as object directory instead of\ 611573Srgrimes canonical ${CANONICALOBJDIR}" 62103633Stjr.endif 63153486Sphk.endif 641573Srgrimes 651573Srgrimes.if !target(obj) 66227753Stheraven.if defined(NOOBJ) 6771579Sdeischenobj: 681573Srgrimes.else 6971579Sdeischenobj: _SUBDIR 701573Srgrimes @if ! test -d ${CANONICALOBJDIR}/; then \ 711573Srgrimes mkdir -p ${CANONICALOBJDIR}; \ 72180104Sdas if ! test -d ${CANONICALOBJDIR}/; then \ 731573Srgrimes ${ECHO} "Unable to create ${CANONICALOBJDIR}."; \ 74227753Stheraven exit 1; \ 75227753Stheraven fi; \ 76187369Sdas ${ECHO} "${CANONICALOBJDIR} created for ${.CURDIR}"; \ 77103633Stjr fi 7816586Sjraynard.endif 79187277Sdas.endif 80187277Sdas 81187277Sdas.if !target(objlink) 82187582Sdasobjlink: _SUBDIR 83187582Sdas @if test -d ${CANONICALOBJDIR}/; then \ 84187582Sdas rm -f ${.CURDIR}/obj; \ 85187582Sdas ln -s ${CANONICALOBJDIR} ${.CURDIR}/obj; \ 86187582Sdas else \ 87187582Sdas echo "No ${CANONICALOBJDIR} to link to - do a make obj."; \ 88187582Sdas fi 89187582Sdas.endif 90187582Sdas 911573Srgrimes# 92187582Sdas# where would that obj directory be? 93187582Sdas# 94187582Sdas.if !target(whereobj) 95187582Sdaswhereobj: 96187582Sdas @echo ${.OBJDIR} 97227753Stheraven.endif 98187582Sdas 99187582Sdascleanobj: 100187582Sdas @if [ -z "${MAKEOBJDIRPREFIX}" -a -d ${CANONICALOBJDIR}/ ]; then \ 101227753Stheraven rm -rf ${CANONICALOBJDIR}; \ 102187582Sdas else \ 103187582Sdas cd ${.CURDIR} && ${MAKE} clean cleandepend; \ 104187582Sdas fi 105187582Sdas @if [ -h ${.CURDIR}/obj ]; then rm -f ${.CURDIR}/obj; fi 106187582Sdas 107187582Sdas.if !target(clean) 108187582Sdasclean: _SUBDIR 109187582Sdas.if defined(CLEANFILES) && !empty(CLEANFILES) 110187582Sdas rm -f ${CLEANFILES} 111187582Sdas.endif 112187582Sdas.if defined(CLEANDIRS) && !empty(CLEANDIRS) 113187582Sdas rm -rf ${CLEANDIRS} 114187582Sdas.endif 115187582Sdas.endif 116187582Sdas 117187582Sdas.if !target(checkdpadd) 118187582Sdascheckdpadd: _SUBDIR 119187582Sdas.if (defined(DPADD) || defined(LDADD)) 120187582Sdascheckdpadd: 121187582Sdas.if ${OBJFORMAT} != aout 122187582Sdas @ldadd=`echo \`for lib in ${DPADD} ; do \ 123187582Sdas echo $$lib | sed 's;^/usr/lib/lib\(.*\)\.a;-l\1;' ; \ 124187582Sdas done \`` ; \ 125187582Sdas ldadd1=`echo ${LDADD}` ; \ 126227753Stheraven if [ "$$ldadd" != "$$ldadd1" ] ; then \ 127187582Sdas echo ${.CURDIR} ; \ 128187582Sdas echo "DPADD -> $$ldadd" ; \ 129187582Sdas echo "LDADD -> $$ldadd1" ; \ 130227753Stheraven fi 131187582Sdas.else 132187582Sdas @dpadd=`echo \`ld -Bstatic -f ${LDDESTDIR} ${LDADD}\`` ; \ 133187582Sdas if [ "$$dpadd" != "${DPADD}" ] ; then \ 134187582Sdas echo ${.CURDIR} ; \ 135187582Sdas echo "LDADD -> $$dpadd" ; \ 136187582Sdas echo "DPADD = ${DPADD}" ; \ 137187582Sdas fi 138187582Sdas.endif 139187582Sdas.endif 140227753Stheraven.endif 141187582Sdas 142227753Stheravencleandir: cleanobj _SUBDIR 143187582Sdas 144187582Sdas.for __target in cleandepend depend tags 145187582Sdas.if !target(${__target}) 146187582Sdas${__target}: _SUBDIR 147187582Sdas.endif 148187582Sdas.endfor 149187582Sdas 150187582Sdas_SUBDIR: .USE 151187582Sdas.if defined(SUBDIR) && !empty(SUBDIR) 1521573Srgrimes @for entry in ${SUBDIR}; do \ 1531573Srgrimes (${ECHODIR} "===> ${DIRPRFX}$$entry"; \ 1541573Srgrimes if test -d ${.CURDIR}/$${entry}.${MACHINE_ARCH}; then \ 1551573Srgrimes cd ${.CURDIR}/$${entry}.${MACHINE_ARCH}; \ 156227753Stheraven else \ 1571573Srgrimes cd ${.CURDIR}/$${entry}; \ 15871579Sdeischen fi; \ 1591573Srgrimes ${MAKE} ${.TARGET:S/realinstall/install/:S/.depend/depend/} DIRPRFX=${DIRPRFX}$$entry/); \ 1601573Srgrimes done 1611573Srgrimes.endif 1621573Srgrimes