* [PATCH] Makefules: fix MAKEFLAGS assignment for upcoming make-4.4 @ 2022-09-09 11:50 Sergei Trofimovich 2022-09-12 20:27 ` Siddhesh Poyarekar 0 siblings, 1 reply; 6+ messages in thread From: Sergei Trofimovich @ 2022-09-09 11:50 UTC (permalink / raw) To: libc-alpha; +Cc: 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. Signed-off-by: Sergei Trofimovich <slyich@gmail.com> --- Makerules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makerules b/Makerules index d1e139d03c..17c16fdada 100644 --- a/Makerules +++ b/Makerules @@ -794,7 +794,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. %/: -- 2.37.2 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Makefules: fix MAKEFLAGS assignment for upcoming make-4.4 2022-09-09 11:50 [PATCH] Makefules: fix MAKEFLAGS assignment for upcoming make-4.4 Sergei Trofimovich @ 2022-09-12 20:27 ` Siddhesh Poyarekar 2022-09-12 21:27 ` [PATCH v2] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4 [BZ# 29564] Sergei Trofimovich 0 siblings, 1 reply; 6+ messages in thread From: Siddhesh Poyarekar @ 2022-09-12 20:27 UTC (permalink / raw) To: Sergei Trofimovich, libc-alpha On 2022-09-09 07:50, Sergei Trofimovich via Libc-alpha wrote: > 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. > > Signed-off-by: Sergei Trofimovich <slyich@gmail.com> > --- Thanks, that's the right direction IMO but allowing word form flags will break this check too: ifeq "$(findstring s,$(MAKEFLAGS))" "" # if not -s which is present in Makerules, Makeconfig and elf/rtld-Rules since the s will also match, e.g. --shuffle. Those checks need to be fixed too. Thanks, Siddhesh ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4 [BZ# 29564] 2022-09-12 20:27 ` Siddhesh Poyarekar @ 2022-09-12 21:27 ` Sergei Trofimovich 2022-09-12 22:47 ` Paul Smith 0 siblings, 1 reply; 6+ messages in thread From: Sergei Trofimovich @ 2022-09-12 21:27 UTC (permalink / raw) To: libc-alpha; +Cc: Sergei Trofimovich, psmith, Siddhesh Poyarekar 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. CC: psmith@gnu.org CC: Siddhesh Poyarekar <siddhesh@gotplt.org> Signed-off-by: Sergei Trofimovich <slyich@gmail.com> --- Change since v1: - Fixed $(MAKEFLAGS) introspection to avoid false positives on long options. - Fixed 'Makefules' typo in the subject line. Makeconfig | 16 +++++++++++++++- Makerules | 4 ++-- elf/rtld-Rules | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Makeconfig b/Makeconfig index f8164a0025..b47dcea251 100644 --- a/Makeconfig +++ b/Makeconfig @@ -43,6 +43,20 @@ else $(error 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 filter out long options first and then check +# for 's' in short options. +# Typical MAKEFLAGS values to watch for: +# "rs --shuffle=42" (silent) +# " --shuffle" (not silent) +ifeq ($(findstring s, $(filter-out --% , $(MAKEFLAGS))),) +silent-make := no +else +silent-make := yes +endif + # Root of the sysdeps tree. sysdep_dir := $(..)sysdeps export sysdep_dir := $(sysdep_dir) @@ -917,7 +931,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 d1e139d03c..09c0cf8357 100644 --- a/Makerules +++ b/Makerules @@ -794,7 +794,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. %/: @@ -811,7 +811,7 @@ MAKEFLAGS := $(MAKEFLAGS)r .PRECIOUS: $(foreach l,$(libtypes),$(patsubst %,$(common-objpfx)$l,c)) \f # 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 ca00dd1fe2..3c5e273f2b 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.37.2 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4 [BZ# 29564] 2022-09-12 21:27 ` [PATCH v2] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4 [BZ# 29564] Sergei Trofimovich @ 2022-09-12 22:47 ` Paul Smith 2022-09-12 23:07 ` [PATCH v3] " Sergei Trofimovich 0 siblings, 1 reply; 6+ messages in thread From: Paul Smith @ 2022-09-12 22:47 UTC (permalink / raw) To: Sergei Trofimovich, libc-alpha; +Cc: Siddhesh Poyarekar On Mon, 2022-09-12 at 22:27 +0100, Sergei Trofimovich wrote: > +ifeq ($(findstring s, $(filter-out --% , $(MAKEFLAGS))),) A more reliable, and guaranteed correct, way to do this is: ifeq ($(findstring s,$(firstword -$(MAKEFLAGS)),) GNU make guarantees that all options which can possibly be represented as single-letter options will always appear in the first word of MAKEFLAGS (even if the user used the long option on make's command line). It also guarantees that there will be a space before any non-short options, including if there are no short options given. In that case "-$(MAKEFLAGS)" would expand to "- --shuffle=random" (for example) and firstword would give you just "-". The filter-out is not as reliable, as it could be possible, someday, to not filter out something and match incorrectly. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4 [BZ# 29564] 2022-09-12 22:47 ` Paul Smith @ 2022-09-12 23:07 ` Sergei Trofimovich 2022-09-13 14:21 ` Siddhesh Poyarekar 0 siblings, 1 reply; 6+ messages in thread From: Sergei Trofimovich @ 2022-09-12 23:07 UTC (permalink / raw) To: libc-alpha; +Cc: Sergei Trofimovich, Paul Smith, Siddhesh Poyarekar 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. CC: Paul Smith <psmith@gnu.org> CC: Siddhesh Poyarekar <siddhesh@gotplt.org> Signed-off-by: Sergei Trofimovich <slyich@gmail.com> --- Change since v2: - Used more robust '$(firstword' for suggested by Paul Smith. Change since v1: - Fixed $(MAKEFLAGS) introspection to avoid false positives on long options. - Fixed 'Makefules' typo in the subject line. Makeconfig | 18 +++++++++++++++++- Makerules | 4 ++-- elf/rtld-Rules | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Makeconfig b/Makeconfig index f8164a0025..842f49eb58 100644 --- a/Makeconfig +++ b/Makeconfig @@ -43,6 +43,22 @@ else $(error 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) @@ -917,7 +933,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 d1e139d03c..09c0cf8357 100644 --- a/Makerules +++ b/Makerules @@ -794,7 +794,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. %/: @@ -811,7 +811,7 @@ MAKEFLAGS := $(MAKEFLAGS)r .PRECIOUS: $(foreach l,$(libtypes),$(patsubst %,$(common-objpfx)$l,c)) \f # 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 ca00dd1fe2..3c5e273f2b 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.37.2 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4 [BZ# 29564] 2022-09-12 23:07 ` [PATCH v3] " Sergei Trofimovich @ 2022-09-13 14:21 ` Siddhesh Poyarekar 0 siblings, 0 replies; 6+ messages in thread From: Siddhesh Poyarekar @ 2022-09-13 14:21 UTC (permalink / raw) To: Sergei Trofimovich, libc-alpha; +Cc: Paul Smith On 2022-09-12 19:07, Sergei Trofimovich wrote: > 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. > > CC: Paul Smith <psmith@gnu.org> > CC: Siddhesh Poyarekar <siddhesh@gotplt.org> > Signed-off-by: Sergei Trofimovich <slyich@gmail.com> > --- LGTM. I'll commit this in a while. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org> > Change since v2: > - Used more robust '$(firstword' for suggested by Paul Smith. > Change since v1: > - Fixed $(MAKEFLAGS) introspection to avoid false positives on long > options. > - Fixed 'Makefules' typo in the subject line. > Makeconfig | 18 +++++++++++++++++- > Makerules | 4 ++-- > elf/rtld-Rules | 2 +- > 3 files changed, 20 insertions(+), 4 deletions(-) > > diff --git a/Makeconfig b/Makeconfig > index f8164a0025..842f49eb58 100644 > --- a/Makeconfig > +++ b/Makeconfig > @@ -43,6 +43,22 @@ else > $(error 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) > @@ -917,7 +933,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 d1e139d03c..09c0cf8357 100644 > --- a/Makerules > +++ b/Makerules > @@ -794,7 +794,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. > %/: > @@ -811,7 +811,7 @@ MAKEFLAGS := $(MAKEFLAGS)r > .PRECIOUS: $(foreach l,$(libtypes),$(patsubst %,$(common-objpfx)$l,c)) > \f > # 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 ca00dd1fe2..3c5e273f2b 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 := ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-09-13 14:21 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-09-09 11:50 [PATCH] Makefules: fix MAKEFLAGS assignment for upcoming make-4.4 Sergei Trofimovich 2022-09-12 20:27 ` Siddhesh Poyarekar 2022-09-12 21:27 ` [PATCH v2] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4 [BZ# 29564] Sergei Trofimovich 2022-09-12 22:47 ` Paul Smith 2022-09-12 23:07 ` [PATCH v3] " Sergei Trofimovich 2022-09-13 14:21 ` Siddhesh Poyarekar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).