Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4

Since GNU make 4.4 the semantics of the $(MAKEFLAGS) variable has
changed in a backward-incompatible way, as its "NEWS" file notes:

  Previously only simple (one-letter) options were added to the MAKEFLAGS
  variable that was visible while parsing makefiles.  Now, all options are
  available in MAKEFLAGS.  If you want to check MAKEFLAGS for a one-letter
  option, expanding "$(firstword -$(MAKEFLAGS))" is a reliable way to return
  the set of one-letter options which can be examined via findstring, etc.

This upstream change meant that e.g.:

	make man

Would become very noisy, because in shared.mak we rely on extracting
"s" from the $(MAKEFLAGS), which now contains long options like
"--jobserver-auth=fifo:<path>", which we'll conflate with the "-s"

So, let's change this idiom we've been carrying since [1], [2] and [3]
as the "NEWS" suggests.

Note that the "-" in "-$(MAKEFLAGS)" is critical here, as the variable
will always contain leading whitespace if there are no short options,
but long options are present. Without it e.g. "make --debug=all" would
yield "--debug=all" as the first word, but with it we'll get "-" as
intended. Then "-s" for "-s", "-Bs" for "-s -B" etc.

1. 0c3b4aac8e (git-gui: Support of "make -s" in: do not output
   anything of the build itself, 2007-03-07)
2. b777434383 (Support of "make -s": do not output anything of the
   build itself, 2007-03-07)
3. bb2300976b (Documentation/Makefile: make most operations "quiet",

Signed-off-by: Ævar Arnfjörð Bjarmason <>
Signed-off-by: Junio C Hamano <>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2022-11-30 09:23:49 +01:00 committed by Junio C Hamano
parent 9f95c7aefa
commit 67b36879fc
2 changed files with 3 additions and 3 deletions

View File

@ -116,7 +116,7 @@ ifeq ($(uname_S),Darwin)
TKEXECUTABLE = $(shell basename "$(TKFRAMEWORK)" .app)
ifeq ($(findstring $(MAKEFLAGS),s),s)
ifeq ($(findstring $(firstword -$(MAKEFLAGS)),s),s)

View File

@ -37,13 +37,13 @@ space := $(empty) $(empty)
QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir
ifneq ($(findstring w,$(MAKEFLAGS)),w)
ifneq ($(findstring w,$(firstword -$(MAKEFLAGS))),w)
PRINT_DIR = --no-print-directory
else # "make -w"
ifneq ($(findstring s,$(MAKEFLAGS)),s)
ifneq ($(findstring s,$(firstword -$(MAKEFLAGS))),s)
ifndef V
## common
QUIET_SUBDIR0 = +@subdir=