bsd.obj.mk revision 33815
133815Sbde#	$Id: bsd.obj.mk,v 1.21 1997/12/19 18:48:45 bde Exp $
215353Swosch#
318566Sbde# The include file <bsd.obj.mk> handles creating the 'obj' directory
431859Sbde# and cleaning up object files, etc.
515353Swosch#
615353Swosch#
715353Swosch# +++ variables +++
815353Swosch#
933815Sbde# CLEANDIRS	Additional directories to remove for the clean target.
1015948Swosch#
1133815Sbde# CLEANFILES	Additional files to remove for the clean target.
1233815Sbde#
1318566Sbde# MAKEOBJDIR 	A pathname for the directory where the targets 
1418566Sbde#		are built.  Note: MAKEOBJDIR is an *enviroment* variable
1518566Sbde#		and works properly only if set as an enviroment variable,
1618566Sbde#		not as a global or command line variable!
1715353Swosch#
1818566Sbde#		E.g. use `env MAKEOBJDIR=temp-obj make'
1918566Sbde#
2018566Sbde# MAKEOBJDIRPREFIX  Specifies somewhere other than /usr/obj to root the object
2118566Sbde#		tree.  Note: MAKEOBJDIRPREFIX is an *enviroment* variable
2218566Sbde#		and works properly only if set as an enviroment variable,
2318566Sbde#		not as a global or command line variable!
2418566Sbde#
2518340Sswallace#		E.g. use `env MAKEOBJDIRPREFIX=/somewhere/obj make'
2615948Swosch#
2718566Sbde# NOOBJ		Do not create object directories.  This should not be set
2818566Sbde#		if anything is built.
2915353Swosch#
3018566Sbde# OBJLINK	Create a symbolic link from ${.CURDIR}/obj to
3118566Sbde#		${CANONICALOBJDIR}.  Note: this BREAKS the read-only source
3218566Sbde#		tree rule!
3315353Swosch#
3415353Swosch# +++ targets +++
3515353Swosch#
3615353Swosch#	clean:
3733815Sbde#		remove ${CLEANFILES}; remove ${CLEANDIRS} and all contents.
3815353Swosch#
3915353Swosch#	cleandir:
4016663Sjkh#		remove the build directory (and all its contents) created by obj
4115353Swosch#
4215353Swosch#	obj:
4316663Sjkh#		create build directory.
4415353Swosch#
4514801Swosch
4618340Sswallace.if defined(MAKEOBJDIRPREFIX)
4718340SswallaceCANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR}
4818340Sswallace.else
4918340SswallaceCANONICALOBJDIR:=/usr/obj${.CURDIR}
5018340Sswallace.endif
5114801Swosch
5218340Sswallace#
5318340Sswallace# Warn of unorthodox object directory
5418340Sswallace#
5518340Sswallaceobjwarn:
5618566Sbde.if !defined(NOOBJ) && ${.OBJDIR} != ${CANONICALOBJDIR}
5718340Sswallace.if ${.OBJDIR} == ${.CURDIR}
5818373Speter	@${ECHO} "Warning: Object directory not changed from original ${.CURDIR}"
5918566Sbde.elif !defined(MAKEOBJDIR) && !defined(MAKEOBJDIRPREFIX) && !defined(OBJLINK)
6018373Speter	@${ECHO} "Warning: Using ${.OBJDIR} as object directory instead of\
6118340Sswallace		canonical ${CANONICALOBJDIR}"
6218340Sswallace.endif
6318340Sswallace.endif
6418340Sswallace
6514801Swosch.if !target(obj)
6614801Swosch.if defined(NOOBJ)
6714801Swoschobj:
6814801Swosch.else
6916663Sjkh.if !defined(OBJLINK)
7016663Sjkhobj:	_SUBDIR
7125316Sbde	@if ! test -d ${CANONICALOBJDIR}/; then \
7218340Sswallace		mkdir -p ${CANONICALOBJDIR}; \
7325316Sbde		if ! test -d ${CANONICALOBJDIR}/; then \
7418340Sswallace			${ECHO} "Unable to create ${CANONICALOBJDIR}."; \
7516663Sjkh			exit 1; \
7616663Sjkh		fi; \
7718340Sswallace		${ECHO} "${CANONICALOBJDIR} created for ${.CURDIR}"; \
7816663Sjkh	fi
7915353Swosch.else
8016663Sjkhobj:	_SUBDIR
8125316Sbde	@if ! test -d ${CANONICALOBJDIR}/; then \
8218340Sswallace		mkdir -p ${CANONICALOBJDIR}; \
8325316Sbde		if ! test -d ${CANONICALOBJDIR}/; then \
8418340Sswallace			${ECHO} "Unable to create ${CANONICALOBJDIR}."; \
8516663Sjkh			exit 1; \
8616663Sjkh		fi; \
8718051Sbde		rm -f ${.CURDIR}/obj; \
8818340Sswallace		ln -s ${CANONICALOBJDIR} ${.CURDIR}/obj; \
8918340Sswallace		${ECHO} "${.CURDIR} -> ${CANONICALOBJDIR}"; \
9014801Swosch	fi
9114801Swosch.endif
9214801Swosch.endif
9315353Swosch.endif
9414801Swosch
9516663Sjkh.if !target(objlink)
9616663Sjkhobjlink: _SUBDIR
9725316Sbde	@if test -d ${CANONICALOBJDIR}/; then \
9818051Sbde		rm -f ${.CURDIR}/obj; \
9918340Sswallace		ln -s ${CANONICALOBJDIR} ${.CURDIR}/obj; \
10016663Sjkh	else \
10118340Sswallace		echo "No ${CANONICALOBJDIR} to link to - do a make obj."; \
10216663Sjkh	fi
10316663Sjkh.endif
10416663Sjkh
10515166Swosch#
10617116Spst# where would that obj directory be?
10717116Spst#
10817116Spst.if !target(whereobj)
10917116Spstwhereobj:
11018426Sbde	@cd ${.CURDIR}; ${MAKE} -V .OBJDIR
11117116Spst.endif
11217116Spst
11316663Sjkhcleanobj:
11425316Sbde	@if [ -d ${CANONICALOBJDIR}/ ]; then \
11518340Sswallace		rm -rf ${CANONICALOBJDIR}; \
11616663Sjkh	else \
11716663Sjkh		cd ${.CURDIR} && ${MAKE} clean cleandepend; \
11816663Sjkh	fi
11916663Sjkh	@if [ -h ${.CURDIR}/obj ]; then rm -f ${.CURDIR}/obj; fi
12015166Swosch
12131859Sbde.if !target(clean)
12231859Sbdeclean: _SUBDIR
12331859Sbde.if defined(CLEANFILES) && !empty(CLEANFILES)
12431859Sbde	rm -f ${CLEANFILES} 
12516663Sjkh.endif
12633815Sbde.if defined(CLEANDIRS) && !empty(CLEANDIRS)
12733815Sbde	rm -rf ${CLEANDIRS}
12815166Swosch.endif
12933815Sbde.endif
13015166Swosch
13118427Sbde.if !target(checkdpadd)
13218427Sbdecheckdpadd: _SUBDIR
13318427Sbde.if (defined(DPADD) || defined(LDADD))
13418427Sbdecheckdpadd:
13531859Sbde.if ${BINFORMAT} != aout
13618427Sbde	@if [ "${DPADD:S;^/usr/lib/lib;-l;S;.a$;;}" != "${LDADD}" ] ; then \
13718427Sbde		echo ${.CURDIR} ; \
13818427Sbde		echo "DPADD -> " ${DPADD:S;^/usr/lib/lib;-l;S;.a$;;} ; \
13918427Sbde		echo "LDADD =  " ${LDADD} ; \
14018427Sbde	fi
14131859Sbde.else
14231859Sbde	@dpadd=`echo \`ld -Bstatic -f ${LDDESTDIR} ${LDADD}\`` ; \
14331859Sbde	if [ "$$dpadd" != "${DPADD}" ] ; then \
14431859Sbde		echo ${.CURDIR} ; \
14531859Sbde		echo "LDADD -> " $$dpadd ; \
14631859Sbde		echo "DPADD =  " ${DPADD} ; \
14731859Sbde	fi
14818427Sbde.endif
14918427Sbde.endif
15031859Sbde.endif
15118427Sbde
15216663Sjkhcleandir: cleanobj _SUBDIR
153