On Thu, May 9, 2024 at 2:22 PM H.J. Lu wrote: > From: Sergei Trofimovich > > make-4.4 will add long flags to MAKEFLAGS variable: > > * WARNING: Backward-incompatibility! > 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. > > This causes locale builds to fail when long options are used: > > $ make --shuffle > ... > make -C localedata install-locales > make: invalid shuffle mode: '1662724426r' > > The change fixes it by passing eash option via whitespace and dashes. > That way option is appended to both single-word form and whitespace > separated form. > > While at it fixed --silent mode detection in $(MAKEFLAGS) by filtering > out --long-options. Otherwise options like --shuffle flag enable silent > mode unintentionally. $(silent-make) variable consolidates the checks. > > Resolves: BZ# 29564 > > CC: Paul Smith > CC: Siddhesh Poyarekar > Signed-off-by: Sergei Trofimovich > Reviewed-by: Siddhesh Poyarekar > (cherry picked from commit 2d7ed98add14f75041499ac189696c9bd3d757fe) > --- > Makeconfig | 18 +++++++++++++++++- > Makerules | 4 ++-- > elf/rtld-Rules | 2 +- > 3 files changed, 20 insertions(+), 4 deletions(-) > > diff --git a/Makeconfig b/Makeconfig > index f252842979..6adb65fca4 100644 > --- a/Makeconfig > +++ b/Makeconfig > @@ -42,6 +42,22 @@ else > objdir must be defined by the build-directory Makefile. > endif > > +# Did we request 'make -s' run? "yes" or "no". > +# Starting from make-4.4 MAKEFLAGS now contains long > +# options like '--shuffle'. To detect presence of 's' > +# we pick first word with short options. Long options > +# are guaranteed to come after whitespace. We use '-' > +# prefix to always have a word before long options > +# even if no short options were passed. > +# Typical MAKEFLAGS values to watch for: > +# "rs --shuffle=42" (silent) > +# " --shuffle" (not silent) > +ifeq ($(findstring s, $(firstword -$(MAKEFLAGS))),) > +silent-make := no > +else > +silent-make := yes > +endif > + > # Root of the sysdeps tree. > sysdep_dir := $(..)sysdeps > export sysdep_dir := $(sysdep_dir) > @@ -892,7 +908,7 @@ endif > # umpteen zillion filenames along with it (we use `...' instead) > # but we don't want this echoing done when the user has said > # he doesn't want to see commands echoed by using -s. > -ifneq "$(findstring s,$(MAKEFLAGS))" "" # if -s > +ifeq ($(silent-make),yes) # if -s > +cmdecho := echo >/dev/null > else # not -s > +cmdecho := echo > diff --git a/Makerules b/Makerules > index 1e9c18f0d8..e07a42e20c 100644 > --- a/Makerules > +++ b/Makerules > @@ -805,7 +805,7 @@ endif > # Maximize efficiency by minimizing the number of rules. > .SUFFIXES: # Clear the suffix list. We don't use suffix rules. > # Don't define any builtin rules. > -MAKEFLAGS := $(MAKEFLAGS)r > +MAKEFLAGS := $(MAKEFLAGS) -r > > # Generic rule for making directories. > %/: > @@ -822,7 +822,7 @@ MAKEFLAGS := $(MAKEFLAGS)r > .PRECIOUS: $(foreach l,$(libtypes),$(patsubst %,$(common-objpfx)$l,c)) > > # Use the verbose option of ar and tar when not running silently. > -ifeq "$(findstring s,$(MAKEFLAGS))" "" # if not -s > +ifeq ($(silent-make),no) # if not -s > verbose := v > else # -s > verbose := > diff --git a/elf/rtld-Rules b/elf/rtld-Rules > index 7e0254cc41..3b73937d4d 100644 > --- a/elf/rtld-Rules > +++ b/elf/rtld-Rules > @@ -52,7 +52,7 @@ $(objpfx)rtld-libc.a: $(foreach dir,$(rtld-subdirs),\ > mv -f $@T $@ > > # Use the verbose option of ar and tar when not running silently. > -ifeq "$(findstring s,$(MAKEFLAGS))" "" # if not -s > +ifeq ($(silent-make),no) # if not -s > verbose := v > else # -s > verbose := > -- > 2.45.0 > > LGTM Reviewed-by: Sunil K Pandey --Sunil