150476Speter# $FreeBSD$
215353Swosch#
318566Sbde# The include file <bsd.obj.mk> handles creating the 'obj' directory
431859Sbde# and cleaning up object files, etc.
515353Swosch#
615353Swosch# +++ variables +++
715353Swosch#
833815Sbde# CLEANDIRS	Additional directories to remove for the clean target.
915948Swosch#
1033815Sbde# CLEANFILES	Additional files to remove for the clean target.
1133815Sbde#
12139761Skrion# MAKEOBJDIR 	A pathname for the directory where the targets
1399202Sru#		are built.  Note: MAKEOBJDIR is an *environment* variable
1499202Sru#		and works properly only if set as an environment variable,
1518566Sbde#		not as a global or command line variable!
1615353Swosch#
1718566Sbde#		E.g. use `env MAKEOBJDIR=temp-obj make'
1818566Sbde#
1918566Sbde# MAKEOBJDIRPREFIX  Specifies somewhere other than /usr/obj to root the object
2099202Sru#		tree.  Note: MAKEOBJDIRPREFIX is an *environment* variable
2199202Sru#		and works properly only if set as an environment variable,
2218566Sbde#		not as a global or command line variable!
2318566Sbde#
2418340Sswallace#		E.g. use `env MAKEOBJDIRPREFIX=/somewhere/obj make'
2515948Swosch#
26139103Sru# NO_OBJ	Do not create object directories.  This should not be set
2718566Sbde#		if anything is built.
2815353Swosch#
2915353Swosch# +++ targets +++
3015353Swosch#
3115353Swosch#	clean:
3233815Sbde#		remove ${CLEANFILES}; remove ${CLEANDIRS} and all contents.
3315353Swosch#
3415353Swosch#	cleandir:
3516663Sjkh#		remove the build directory (and all its contents) created by obj
3615353Swosch#
3715353Swosch#	obj:
3816663Sjkh#		create build directory.
3915353Swosch#
4014801Swosch
4194940Sru.if !target(__<bsd.obj.mk>__)
4294940Sru__<bsd.obj.mk>__:
4394940Sru.include <bsd.own.mk>
4494940Sru
4564784Ssheldonh.if defined(MAKEOBJDIRPREFIX)
4618340SswallaceCANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR}
47252048Ssjg.elif defined(MAKEOBJDIR) && ${MAKEOBJDIR:M/*} != ""
48252048SsjgCANONICALOBJDIR:=${MAKEOBJDIR}
4918340Sswallace.else
5018340SswallaceCANONICALOBJDIR:=/usr/obj${.CURDIR}
5118340Sswallace.endif
5214801Swosch
5318340Sswallace#
5476896Sru# Warn of unorthodox object directory.
5518340Sswallace#
5676896Sru# The following directories are tried in order for ${.OBJDIR}:
5776896Sru#
5876896Sru# 1.  ${MAKEOBJDIRPREFIX}/`pwd`
5976896Sru# 2.  ${MAKEOBJDIR}
6076896Sru# 3.  obj.${MACHINE}
6176896Sru# 4.  obj
6276896Sru# 5.  /usr/obj/`pwd`
6376896Sru# 6.  ${.CURDIR}
6476896Sru#
6576896Sru# If ${.OBJDIR} is constructed using canonical cases 1 or 5, or
6676896Sru# case 2 (using MAKEOBJDIR), don't issue a warning.  Otherwise,
6776896Sru# issue a warning differentiating between cases 6 and (3 or 4).
6876896Sru#
6918340Sswallaceobjwarn:
70139103Sru.if !defined(NO_OBJ) && ${.OBJDIR} != ${CANONICALOBJDIR} && \
7176896Sru    !(defined(MAKEOBJDIRPREFIX) && exists(${CANONICALOBJDIR}/)) && \
7276896Sru    !(defined(MAKEOBJDIR) && exists(${MAKEOBJDIR}/))
7318340Sswallace.if ${.OBJDIR} == ${.CURDIR}
7418373Speter	@${ECHO} "Warning: Object directory not changed from original ${.CURDIR}"
7576896Sru.elif exists(${.CURDIR}/obj.${MACHINE}/) || exists(${.CURDIR}/obj/)
7618373Speter	@${ECHO} "Warning: Using ${.OBJDIR} as object directory instead of\
7718340Sswallace		canonical ${CANONICALOBJDIR}"
7818340Sswallace.endif
7918340Sswallace.endif
8018340Sswallace
81139103Sru.if !defined(NO_OBJ)
8298546Sru.if !target(obj)
83128188Sruobj: .PHONY
8425316Sbde	@if ! test -d ${CANONICALOBJDIR}/; then \
8518340Sswallace		mkdir -p ${CANONICALOBJDIR}; \
8625316Sbde		if ! test -d ${CANONICALOBJDIR}/; then \
8718340Sswallace			${ECHO} "Unable to create ${CANONICALOBJDIR}."; \
8816663Sjkh			exit 1; \
8916663Sjkh		fi; \
9018340Sswallace		${ECHO} "${CANONICALOBJDIR} created for ${.CURDIR}"; \
9116663Sjkh	fi
9214801Swosch.endif
9314801Swosch
9444922Sbde.if !target(objlink)
9595306Sruobjlink:
9644922Sbde	@if test -d ${CANONICALOBJDIR}/; then \
9744922Sbde		rm -f ${.CURDIR}/obj; \
9844922Sbde		ln -s ${CANONICALOBJDIR} ${.CURDIR}/obj; \
9944922Sbde	else \
10044922Sbde		echo "No ${CANONICALOBJDIR} to link to - do a make obj."; \
10144922Sbde	fi
10244922Sbde.endif
103144893Sharti.endif # !defined(NO_OBJ)
10444922Sbde
10515166Swosch#
10617116Spst# where would that obj directory be?
10717116Spst#
10817116Spst.if !target(whereobj)
10917116Spstwhereobj:
11036641Speter	@echo ${.OBJDIR}
11117116Spst.endif
11217116Spst
113124061Sgreen.if ${CANONICALOBJDIR} != ${.CURDIR} && exists(${CANONICALOBJDIR}/)
11416663Sjkhcleanobj:
11576021Sru	@rm -rf ${CANONICALOBJDIR}
11676021Sru.else
117124061Sgreencleanobj: clean cleandepend
11876021Sru.endif
119102660Skris	@if [ -L ${.CURDIR}/obj ]; then rm -f ${.CURDIR}/obj; fi
12015166Swosch
121252048Ssjg# Tell bmake not to look for generated files via .PATH
122252048Ssjg.if !empty(CLEANFILES)
123252048Ssjg.NOPATH: ${CLEANFILES}
124252048Ssjg.endif
125252048Ssjg
12631859Sbde.if !target(clean)
12795306Sruclean:
12831859Sbde.if defined(CLEANFILES) && !empty(CLEANFILES)
129139761Skrion	rm -f ${CLEANFILES}
13016663Sjkh.endif
13133815Sbde.if defined(CLEANDIRS) && !empty(CLEANDIRS)
13233815Sbde	rm -rf ${CLEANDIRS}
13315166Swosch.endif
13433815Sbde.endif
13515166Swosch
13695306Srucleandir: cleanobj
13735789Sbde
13895306Sru.include <bsd.subdir.mk>
13935789Sbde
140144893Sharti.endif # !target(__<bsd.obj.mk>__)
141