bsd.obj.mk revision 252048
155714Skris# $FreeBSD: stable/9/share/mk/bsd.obj.mk 252048 2013-06-20 22:50:08Z sjg $ 255714Skris# 355714Skris# The include file <bsd.obj.mk> handles creating the 'obj' directory 455714Skris# and cleaning up object files, etc. 555714Skris# 655714Skris# +++ variables +++ 755714Skris# 855714Skris# CLEANDIRS Additional directories to remove for the clean target. 955714Skris# 1055714Skris# CLEANFILES Additional files to remove for the clean target. 1155714Skris# 1255714Skris# MAKEOBJDIR A pathname for the directory where the targets 1355714Skris# are built. Note: MAKEOBJDIR is an *environment* variable 1455714Skris# and works properly only if set as an environment variable, 1555714Skris# not as a global or command line variable! 1655714Skris# 1755714Skris# E.g. use `env MAKEOBJDIR=temp-obj make' 1855714Skris# 1955714Skris# MAKEOBJDIRPREFIX Specifies somewhere other than /usr/obj to root the object 2055714Skris# tree. Note: MAKEOBJDIRPREFIX is an *environment* variable 2155714Skris# and works properly only if set as an environment variable, 2255714Skris# not as a global or command line variable! 2355714Skris# 2455714Skris# E.g. use `env MAKEOBJDIRPREFIX=/somewhere/obj make' 2555714Skris# 2655714Skris# NO_OBJ Do not create object directories. This should not be set 2755714Skris# if anything is built. 2855714Skris# 2955714Skris# +++ targets +++ 3055714Skris# 3155714Skris# clean: 3255714Skris# remove ${CLEANFILES}; remove ${CLEANDIRS} and all contents. 3355714Skris# 3455714Skris# cleandir: 3555714Skris# remove the build directory (and all its contents) created by obj 3655714Skris# 3755714Skris# obj: 3855714Skris# create build directory. 3955714Skris# 4055714Skris 4155714Skris.if !target(__<bsd.obj.mk>__) 4255714Skris__<bsd.obj.mk>__: 4355714Skris.include <bsd.own.mk> 4455714Skris 4555714Skris.if defined(MAKEOBJDIRPREFIX) 4655714SkrisCANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR} 4755714Skris.elif defined(MAKEOBJDIR) && ${MAKEOBJDIR:M/*} != "" 4855714SkrisCANONICALOBJDIR:=${MAKEOBJDIR} 4955714Skris.else 5055714SkrisCANONICALOBJDIR:=/usr/obj${.CURDIR} 5155714Skris.endif 5255714Skris 5355714Skris# 5455714Skris# Warn of unorthodox object directory. 5555714Skris# 5655714Skris# The following directories are tried in order for ${.OBJDIR}: 5755714Skris# 5855714Skris# 1. ${MAKEOBJDIRPREFIX}/`pwd` 5955714Skris# 2. ${MAKEOBJDIR} 6055714Skris# 3. obj.${MACHINE} 6155714Skris# 4. obj 6255714Skris# 5. /usr/obj/`pwd` 6355714Skris# 6. ${.CURDIR} 6455714Skris# 6555714Skris# If ${.OBJDIR} is constructed using canonical cases 1 or 5, or 6655714Skris# case 2 (using MAKEOBJDIR), don't issue a warning. Otherwise, 6755714Skris# issue a warning differentiating between cases 6 and (3 or 4). 6855714Skris# 6955714Skrisobjwarn: 7055714Skris.if !defined(NO_OBJ) && ${.OBJDIR} != ${CANONICALOBJDIR} && \ 7155714Skris !(defined(MAKEOBJDIRPREFIX) && exists(${CANONICALOBJDIR}/)) && \ 7255714Skris !(defined(MAKEOBJDIR) && exists(${MAKEOBJDIR}/)) 7355714Skris.if ${.OBJDIR} == ${.CURDIR} 7455714Skris @${ECHO} "Warning: Object directory not changed from original ${.CURDIR}" 7555714Skris.elif exists(${.CURDIR}/obj.${MACHINE}/) || exists(${.CURDIR}/obj/) 7655714Skris @${ECHO} "Warning: Using ${.OBJDIR} as object directory instead of\ 7755714Skris canonical ${CANONICALOBJDIR}" 7855714Skris.endif 7955714Skris.endif 8055714Skris 8155714Skris.if !defined(NO_OBJ) 8255714Skris.if !target(obj) 8355714Skrisobj: .PHONY 8455714Skris @if ! test -d ${CANONICALOBJDIR}/; then \ 8555714Skris mkdir -p ${CANONICALOBJDIR}; \ 8655714Skris if ! test -d ${CANONICALOBJDIR}/; then \ 8755714Skris ${ECHO} "Unable to create ${CANONICALOBJDIR}."; \ 8855714Skris exit 1; \ 8955714Skris fi; \ 9055714Skris ${ECHO} "${CANONICALOBJDIR} created for ${.CURDIR}"; \ 9155714Skris fi 9255714Skris.endif 9355714Skris 9455714Skris.if !target(objlink) 9555714Skrisobjlink: 9655714Skris @if test -d ${CANONICALOBJDIR}/; then \ 9755714Skris rm -f ${.CURDIR}/obj; \ 9855714Skris ln -s ${CANONICALOBJDIR} ${.CURDIR}/obj; \ 99 else \ 100 echo "No ${CANONICALOBJDIR} to link to - do a make obj."; \ 101 fi 102.endif 103.endif # !defined(NO_OBJ) 104 105# 106# where would that obj directory be? 107# 108.if !target(whereobj) 109whereobj: 110 @echo ${.OBJDIR} 111.endif 112 113.if ${CANONICALOBJDIR} != ${.CURDIR} && exists(${CANONICALOBJDIR}/) 114cleanobj: 115 @rm -rf ${CANONICALOBJDIR} 116.else 117cleanobj: clean cleandepend 118.endif 119 @if [ -L ${.CURDIR}/obj ]; then rm -f ${.CURDIR}/obj; fi 120 121# Tell bmake not to look for generated files via .PATH 122.if !empty(CLEANFILES) 123.NOPATH: ${CLEANFILES} 124.endif 125 126.if !target(clean) 127clean: 128.if defined(CLEANFILES) && !empty(CLEANFILES) 129 rm -f ${CLEANFILES} 130.endif 131.if defined(CLEANDIRS) && !empty(CLEANDIRS) 132 rm -rf ${CLEANDIRS} 133.endif 134.endif 135 136cleandir: cleanobj 137 138.include <bsd.subdir.mk> 139 140.endif # !target(__<bsd.obj.mk>__) 141