freebsd-dev/share/mk/bsd.obj.mk
Bruce Evans 939d5a3dd8 Only remove ${CLEANFILES} in the default clean rule. In particular,
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.
1997-12-19 18:48:45 +00:00

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