939d5a3dd8
don't remove a.out explicitly. a.out should only be generated for libraries and is removed in the non-default rule in bsd.lib.mk. Removed undocumented cleanfiles target. It was the same as the default clean target except it didn't descend into subdirs. It was different from special clean targets in other ways. This feature hasn't been missed for more important targets. Removed unused default cleandepend target. bsd.dep.mk has a better version which is always used. Use a better rule for checkdpadd in the BINFORMAT=aout case. This mainly checks that ld -f is working correctly. The old rule is still available via `make BINFORMAT=foo checkdpadd' and should be used to check for regressions under 2.2 where ld -f is not available.
148 lines
3.6 KiB
Makefile
148 lines
3.6 KiB
Makefile
# $Id: bsd.obj.mk,v 1.20 1997/04/30 17:04:11 bde Exp $
|
|
#
|
|
# The include file <bsd.obj.mk> handles creating the 'obj' directory
|
|
# and cleaning up object files, etc.
|
|
#
|
|
#
|
|
# +++ variables +++
|
|
#
|
|
# CLEANFILES Additional files to remove for the clean and cleandir targets.
|
|
#
|
|
# MAKEOBJDIR A pathname for the directory where the targets
|
|
# are built. Note: MAKEOBJDIR is an *enviroment* variable
|
|
# and works properly only if set as an enviroment variable,
|
|
# not as a global or command line variable!
|
|
#
|
|
# E.g. use `env MAKEOBJDIR=temp-obj make'
|
|
#
|
|
# MAKEOBJDIRPREFIX Specifies somewhere other than /usr/obj to root the object
|
|
# tree. Note: MAKEOBJDIRPREFIX is an *enviroment* variable
|
|
# and works properly only if set as an enviroment variable,
|
|
# not as a global or command line variable!
|
|
#
|
|
# E.g. use `env MAKEOBJDIRPREFIX=/somewhere/obj make'
|
|
#
|
|
# NOOBJ Do not create object directories. This should not be set
|
|
# if anything is built.
|
|
#
|
|
# OBJLINK Create a symbolic link from ${.CURDIR}/obj to
|
|
# ${CANONICALOBJDIR}. Note: this BREAKS the read-only source
|
|
# tree rule!
|
|
#
|
|
# +++ targets +++
|
|
#
|
|
# clean:
|
|
# remove ${CLEANFILES}
|
|
#
|
|
# cleandir:
|
|
# remove the build directory (and all its contents) created by obj
|
|
#
|
|
# obj:
|
|
# create build directory.
|
|
#
|
|
|
|
.if defined(MAKEOBJDIRPREFIX)
|
|
CANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR}
|
|
.else
|
|
CANONICALOBJDIR:=/usr/obj${.CURDIR}
|
|
.endif
|
|
|
|
#
|
|
# Warn of unorthodox object directory
|
|
#
|
|
objwarn:
|
|
.if !defined(NOOBJ) && ${.OBJDIR} != ${CANONICALOBJDIR}
|
|
.if ${.OBJDIR} == ${.CURDIR}
|
|
@${ECHO} "Warning: Object directory not changed from original ${.CURDIR}"
|
|
.elif !defined(MAKEOBJDIR) && !defined(MAKEOBJDIRPREFIX) && !defined(OBJLINK)
|
|
@${ECHO} "Warning: Using ${.OBJDIR} as object directory instead of\
|
|
canonical ${CANONICALOBJDIR}"
|
|
.endif
|
|
.endif
|
|
|
|
.if !target(obj)
|
|
.if defined(NOOBJ)
|
|
obj:
|
|
.else
|
|
.if !defined(OBJLINK)
|
|
obj: _SUBDIR
|
|
@if ! test -d ${CANONICALOBJDIR}/; then \
|
|
mkdir -p ${CANONICALOBJDIR}; \
|
|
if ! test -d ${CANONICALOBJDIR}/; then \
|
|
${ECHO} "Unable to create ${CANONICALOBJDIR}."; \
|
|
exit 1; \
|
|
fi; \
|
|
${ECHO} "${CANONICALOBJDIR} created for ${.CURDIR}"; \
|
|
fi
|
|
.else
|
|
obj: _SUBDIR
|
|
@if ! test -d ${CANONICALOBJDIR}/; then \
|
|
mkdir -p ${CANONICALOBJDIR}; \
|
|
if ! test -d ${CANONICALOBJDIR}/; then \
|
|
${ECHO} "Unable to create ${CANONICALOBJDIR}."; \
|
|
exit 1; \
|
|
fi; \
|
|
rm -f ${.CURDIR}/obj; \
|
|
ln -s ${CANONICALOBJDIR} ${.CURDIR}/obj; \
|
|
${ECHO} "${.CURDIR} -> ${CANONICALOBJDIR}"; \
|
|
fi
|
|
.endif
|
|
.endif
|
|
.endif
|
|
|
|
.if !target(objlink)
|
|
objlink: _SUBDIR
|
|
@if test -d ${CANONICALOBJDIR}/; then \
|
|
rm -f ${.CURDIR}/obj; \
|
|
ln -s ${CANONICALOBJDIR} ${.CURDIR}/obj; \
|
|
else \
|
|
echo "No ${CANONICALOBJDIR} to link to - do a make obj."; \
|
|
fi
|
|
.endif
|
|
|
|
#
|
|
# where would that obj directory be?
|
|
#
|
|
.if !target(whereobj)
|
|
whereobj:
|
|
@cd ${.CURDIR}; ${MAKE} -V .OBJDIR
|
|
.endif
|
|
|
|
cleanobj:
|
|
@if [ -d ${CANONICALOBJDIR}/ ]; then \
|
|
rm -rf ${CANONICALOBJDIR}; \
|
|
else \
|
|
cd ${.CURDIR} && ${MAKE} clean cleandepend; \
|
|
fi
|
|
@if [ -h ${.CURDIR}/obj ]; then rm -f ${.CURDIR}/obj; fi
|
|
|
|
.if !target(clean)
|
|
clean: _SUBDIR
|
|
.if defined(CLEANFILES) && !empty(CLEANFILES)
|
|
rm -f ${CLEANFILES}
|
|
.endif
|
|
.endif
|
|
|
|
.if !target(checkdpadd)
|
|
checkdpadd: _SUBDIR
|
|
.if (defined(DPADD) || defined(LDADD))
|
|
checkdpadd:
|
|
.if ${BINFORMAT} != aout
|
|
@if [ "${DPADD:S;^/usr/lib/lib;-l;S;.a$;;}" != "${LDADD}" ] ; then \
|
|
echo ${.CURDIR} ; \
|
|
echo "DPADD -> " ${DPADD:S;^/usr/lib/lib;-l;S;.a$;;} ; \
|
|
echo "LDADD = " ${LDADD} ; \
|
|
fi
|
|
.else
|
|
@dpadd=`echo \`ld -Bstatic -f ${LDDESTDIR} ${LDADD}\`` ; \
|
|
if [ "$$dpadd" != "${DPADD}" ] ; then \
|
|
echo ${.CURDIR} ; \
|
|
echo "LDADD -> " $$dpadd ; \
|
|
echo "DPADD = " ${DPADD} ; \
|
|
fi
|
|
.endif
|
|
.endif
|
|
.endif
|
|
|
|
cleandir: cleanobj _SUBDIR
|