Use :Q to deal with the case that CLEANFILES or CLEANDIRFILES

contains quoted substrings (such as file names with spaces).
Problem reported by Joseph Koshy, who also provided the
important part of the fix.
This commit is contained in:
apb 2011-11-22 18:25:48 +00:00
parent 2ef75c3a2d
commit 6c03a4739d

View File

@ -1,4 +1,4 @@
# $NetBSD: bsd.clean.mk,v 1.4 2011/10/05 12:34:04 apb Exp $
# $NetBSD: bsd.clean.mk,v 1.5 2011/11/22 18:25:48 apb Exp $
# <bsd.clean.mk>
#
@ -44,18 +44,27 @@ __docleandir: .PHONY .MADE __cleanuse CLEANDIRFILES
# If the list of files is empty, then the commands
# reduce to "true", with an "@" prefix to prevent echoing.
#
# The use of :M* is needed to handle the case that CLEANFILES
# or CLEANDIRFILES is not completely empty but contains spaces.
# This can easily happen when CLEANFILES or CLEANDIRFILES is set
# from other variables that happen to be empty.)
#
# The use of :Q is needed to handle the case that CLEANFILES
# or CLEANDIRFILES contains quoted strings, such as
# CLEANFILES = "filename with spaces".
#
__cleanuse: .USE
.if 0 # print "# clean CLEANFILES" for debugging
${"${.ALLSRC:@v@${${v}:M*}@}" == "":?@true:${_MKMSG} \
${"${.ALLSRC:@v@${${v}:M*}@:Q}" == "":?@true:${_MKMSG} \
"clean" ${.ALLSRC} }
.endif
.for _d in ${"${.OBJDIR}" == "${.CURDIR}" || "${MKCLEANSRC}" == "no" \
:? ${.OBJDIR} \
: ${.OBJDIR} ${.CURDIR} }
${"${.ALLSRC:@v@${${v}:M*}@}" == "":?@true: \
${"${.ALLSRC:@v@${${v}:M*}@:Q}" == "":?@true: \
(cd ${_d} && rm -f ${.ALLSRC:@v@${${v}}@} || true) }
.if "${MKCLEANVERIFY}" == "yes"
@${"${.ALLSRC:@v@${${v}:M*}@}" == "":?true: \
@${"${.ALLSRC:@v@${${v}:M*}@:Q}" == "":?true: \
bad="\$(cd ${_d} && ls -d ${.ALLSRC:@v@${${v}}@} 2>/dev/null)"; \
if test -n "\$bad"; then \
echo "Failed to remove files from ${_d}:" ; \