Improvements on the 'make realclean' target. Some are style improvements,
but the biggest issue is that there are situatons when ${.OBJDIR} == ${.SRCDIR}, and in those situations the previous version would happily remove all your /usr/src while it was cleaning out the objects. Not that *you* would be happy about it... Thanks to bde for immediately noticing this serious possibility. More improvements will be made to this target, but I wanted to commit this safer version right now, before anyone lost their /usr/src due to it. Reviewed by: bde MFC after: 10 days
This commit is contained in:
parent
57f22bd4af
commit
1a974787f9
41
Makefile
41
Makefile
@ -104,19 +104,34 @@ buildworld: upgrade_checks
|
||||
.endif
|
||||
|
||||
#
|
||||
# This 'realclean' target is not included in TGTS, because it is not
|
||||
# a recursive target. All of the work for it is done right here.
|
||||
# The first 'rm' will usually remove all files and directories. If
|
||||
# it does not, then there are probably some files with chflags set.
|
||||
# Unset all special chflags, and try the 'rm' a second time.
|
||||
realclean :
|
||||
-rm -Rf ${.OBJDIR}/* 2>/dev/null
|
||||
@-if [ "`echo ${.OBJDIR}/*`" != "${.OBJDIR}/*" ] ; then \
|
||||
echo "chflags -R 0 ${.OBJDIR}/*" ; \
|
||||
chflags -R 0 ${.OBJDIR}/* ; \
|
||||
echo "rm -Rf ${.OBJDIR}/*" ; \
|
||||
rm -Rf ${.OBJDIR}/* ; \
|
||||
fi
|
||||
# This 'realclean' target is not included in TGTS, because it is not a
|
||||
# recursive target. All of the work for it is done right here. It is
|
||||
# expected that BW_CANONICALOBJDIR == the CANONICALOBJDIR as would be
|
||||
# created by bsd.obj.mk, except that we don't want to .include that file
|
||||
# in this makefile.
|
||||
#
|
||||
# In the following, the first 'rm' in a series will usually remove all
|
||||
# files and directories. If it does not, then there are probably some
|
||||
# files with chflags set, so this unsets them and tries the 'rm' a
|
||||
# second time. There are situations where this target will be cleaning
|
||||
# some directories via more than one method, but that duplication is
|
||||
# needed to correctly handle all the possible situations.
|
||||
#
|
||||
BW_CANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR}
|
||||
realclean:
|
||||
.if ${.CURDIR} == ${.OBJDIR} || ${.CURDIR}/obj == ${.OBJDIR}
|
||||
.if exists(${BW_CANONICALOBJDIR}/)
|
||||
-rm -rf ${BW_CANONICALOBJDIR}/*
|
||||
chflags -R 0 ${BW_CANONICALOBJDIR}
|
||||
rm -rf ${BW_CANONICALOBJDIR}/*
|
||||
.endif
|
||||
# To be safe in this case, fall back to a 'make cleandir'
|
||||
@cd ${.CURDIR}; ${_MAKE} cleandir
|
||||
.else
|
||||
-rm -rf ${.OBJDIR}/*
|
||||
chflags -R 0 ${.OBJDIR}
|
||||
rm -rf ${.OBJDIR}/*
|
||||
.endif
|
||||
|
||||
#
|
||||
# Handle the user-driven targets, using the source relative mk files.
|
||||
|
Loading…
Reference in New Issue
Block a user