Rework the 'make -n -n' feature such that '-n' recurses and '-N' does not.

Bmake has a documented feature of '-N' to skip executing commands which is
specifically intended for debugging top-level builds and not recursing into
sub-directories.  This matches the older 'make -n' behavior we added which made
'-n -n' the recursing target and '-n' a non-recursing target.

Removing the '-n -n' feature allows the build to work as documented in
the bmake manpage with '-n' and '-N'.  The older '-n -n' feature was also
not documented anywhere that I could see.

Note that the ${_+_} var is still needed as currently bmake incorrectly
executes '+' commands when '-N' is specified.

The '-n' and '-n -n' features were broken for several reasons prior to this.
r251748 made '_+_' never expand with '-n -n' which resulted in many
sub-directories not being visited until fixed 2 years later in r288391, and
many targets were given .MAKE over the past few years which resulted in
non-sub-make commands, such as rm and ln and mtree, to be executed.

This should also allow removing some indirection hacks in bsd.subdir.mk and
other cases of .USE that have a .MAKE by using '+'.

Sponsored by:	EMC / Isilon Storage Division
Discussed on:	arch@ (mostly silence)
This commit is contained in:
bdrewery 2015-10-17 16:42:54 +00:00
parent b5af77bf9f
commit d506826439
3 changed files with 13 additions and 14 deletions

View File

@ -243,14 +243,8 @@ cleanworld:
# Handle the user-driven targets, using the source relative mk files. # Handle the user-driven targets, using the source relative mk files.
# #
.if !(!empty(.MAKEFLAGS:M-n) && ${.MAKEFLAGS:M-n} == "-n")
# skip this for -n to avoid changing previous behavior of
# 'make -n buildworld' etc. Using -n -n will run it.
${TGTS}: .MAKE
tinderbox toolchains kernel-toolchains: .MAKE tinderbox toolchains kernel-toolchains: .MAKE
.endif ${TGTS}: .PHONY .MAKE
${TGTS}: .PHONY
${_+_}@cd ${.CURDIR}; ${_MAKE} ${.TARGET} ${_+_}@cd ${.CURDIR}; ${_MAKE} ${.TARGET}
# The historic default "all" target creates files which may cause stale # The historic default "all" target creates files which may cause stale

View File

@ -31,6 +31,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11.x IS SLOW:
disable the most expensive debugging functionality run disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".) "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
20151017:
The build previously allowed using 'make -n' to not recurse into
sub-directories while showing what commands would be executed, and
'make -n -n' to recursively show commands. Now 'make -n' will recurse
and 'make -N' will not.
20151012: 20151012:
If you specify SENDMAIL_MC or SENDMAIL_CF in make.conf, mergemaster If you specify SENDMAIL_MC or SENDMAIL_CF in make.conf, mergemaster
and etcupdate will now use this file. A custom sendmail.cf is now and etcupdate will now use this file. A custom sendmail.cf is now

View File

@ -145,13 +145,12 @@ ECHODIR ?= true
.endif .endif
.endif .endif
.if defined(.PARSEDIR) .if ${.MAKEFLAGS:M-N}
# _+_ appears to be a workaround for the special src .MAKE not working. # bmake -N is supposed to skip executing anything but it does not skip
# setting it to + interferes with -N # exeucting '+' commands. The '+' feature is used where .MAKE
_+_ ?= # is not safe for the entire target. -N is intended to skip building sub-makes
.elif !empty(.MAKEFLAGS:M-n) && ${.MAKEFLAGS:M-n} == "-n" # so it executing '+' commands is not right. Work around the bug by not
# the check above matches only a single -n, so -n -n will result # setting '+' when -N is used.
# in _+_ = +
_+_ ?= _+_ ?=
.else .else
_+_ ?= + _+_ ?= +