diff mbox series

[1/1] package/glibc: fix make-4.4 compatibility

Message ID 20221010003515.796446-1-james.hilliard1@gmail.com
State Accepted
Headers show
Series [1/1] package/glibc: fix make-4.4 compatibility | expand

Commit Message

James Hilliard Oct. 10, 2022, 12:35 a.m. UTC
Backport a patch fixing compatibility with upcoming make 4.4.

Fixes:
 - http://autobuild.buildroot.net/results/5a3/5a3f6414d75fbc8a272258bf3bdb6f4fe7e6da34
 - http://autobuild.buildroot.net/results/481/481c4617813da031beddaf00b97440071f646809
 - http://autobuild.buildroot.net/results/cf1/cf152e7a95bec3b6ebd0209dd716cbec56f9d477

Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
---
 ...KEFLAGS-assignment-for-upcoming-make.patch | 117 ++++++++++++++++++
 1 file changed, 117 insertions(+)
 create mode 100644 package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch

Comments

Yann E. MORIN Oct. 14, 2022, 8:26 p.m. UTC | #1
James, All,

On 2022-10-09 18:35 -0600, James Hilliard spake thusly:
> Backport a patch fixing compatibility with upcoming make 4.4.
> 
> Fixes:
>  - http://autobuild.buildroot.net/results/5a3/5a3f6414d75fbc8a272258bf3bdb6f4fe7e6da34
>  - http://autobuild.buildroot.net/results/481/481c4617813da031beddaf00b97440071f646809
>  - http://autobuild.buildroot.net/results/cf1/cf152e7a95bec3b6ebd0209dd716cbec56f9d477
> 
> Signed-off-by: James Hilliard <james.hilliard1@gmail.com>

Applied to master, thanks.

I'm afraid we'll get more packages that will suffer from that, but it
at least looks like our own Makefile is immune to it:

    QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q)

which seems to be the only place we act on MAKEFLAGS.

Hmm Or maybe not, after all. Can we have somthing like:

    --some-option=some-string
which can be written as:
    --some-option some-string

in which case our code would hit the "some-string" and interpret it as
silent...

Regards,
Yann E. MORIN.

> ---
>  ...KEFLAGS-assignment-for-upcoming-make.patch | 117 ++++++++++++++++++
>  1 file changed, 117 insertions(+)
>  create mode 100644 package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch
> 
> diff --git a/package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch b/package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch
> new file mode 100644
> index 0000000000..0c82d7abbe
> --- /dev/null
> +++ b/package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch
> @@ -0,0 +1,117 @@
> +From 2d7ed98add14f75041499ac189696c9bd3d757fe Mon Sep 17 00:00:00 2001
> +From: Sergei Trofimovich <slyich@gmail.com>
> +Date: Tue, 13 Sep 2022 13:39:13 -0400
> +Subject: [PATCH] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4
> + [BZ# 29564]
> +
> +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 <psmith@gnu.org>
> +CC: Siddhesh Poyarekar <siddhesh@gotplt.org>
> +Signed-off-by: Sergei Trofimovich <slyich@gmail.com>
> +Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
> +Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
> +[james.hilliard1@gmail.com: backport from upstream commit
> +2d7ed98add14f75041499ac189696c9bd3d757fe]
> +---
> + 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))
> + 
> + # 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.34.1
> +
> -- 
> 2.34.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
James Hilliard Oct. 15, 2022, 1:16 a.m. UTC | #2
On Fri, Oct 14, 2022 at 4:26 PM Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>
> James, All,
>
> On 2022-10-09 18:35 -0600, James Hilliard spake thusly:
> > Backport a patch fixing compatibility with upcoming make 4.4.
> >
> > Fixes:
> >  - http://autobuild.buildroot.net/results/5a3/5a3f6414d75fbc8a272258bf3bdb6f4fe7e6da34
> >  - http://autobuild.buildroot.net/results/481/481c4617813da031beddaf00b97440071f646809
> >  - http://autobuild.buildroot.net/results/cf1/cf152e7a95bec3b6ebd0209dd716cbec56f9d477
> >
> > Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
>
> Applied to master, thanks.
>
> I'm afraid we'll get more packages that will suffer from that, but it
> at least looks like our own Makefile is immune to it:
>
>     QUIET := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-q)
>
> which seems to be the only place we act on MAKEFLAGS.
>
> Hmm Or maybe not, after all. Can we have somthing like:
>
>     --some-option=some-string
> which can be written as:
>     --some-option some-string
>
> in which case our code would hit the "some-string" and interpret it as
> silent...

This should fix any issues with QUIET:
https://patchwork.ozlabs.org/project/buildroot/patch/20221014230905.3091021-1-james.hilliard1@gmail.com/

Also MAKE1 is broken, this should fix it:
https://patchwork.ozlabs.org/project/buildroot/patch/20221015005611.4054933-1-james.hilliard1@gmail.com/

>
> Regards,
> Yann E. MORIN.
>
> > ---
> >  ...KEFLAGS-assignment-for-upcoming-make.patch | 117 ++++++++++++++++++
> >  1 file changed, 117 insertions(+)
> >  create mode 100644 package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch
> >
> > diff --git a/package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch b/package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch
> > new file mode 100644
> > index 0000000000..0c82d7abbe
> > --- /dev/null
> > +++ b/package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch
> > @@ -0,0 +1,117 @@
> > +From 2d7ed98add14f75041499ac189696c9bd3d757fe Mon Sep 17 00:00:00 2001
> > +From: Sergei Trofimovich <slyich@gmail.com>
> > +Date: Tue, 13 Sep 2022 13:39:13 -0400
> > +Subject: [PATCH] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4
> > + [BZ# 29564]
> > +
> > +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 <psmith@gnu.org>
> > +CC: Siddhesh Poyarekar <siddhesh@gotplt.org>
> > +Signed-off-by: Sergei Trofimovich <slyich@gmail.com>
> > +Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
> > +Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
> > +[james.hilliard1@gmail.com: backport from upstream commit
> > +2d7ed98add14f75041499ac189696c9bd3d757fe]
> > +---
> > + 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))
> > +
> > + # 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.34.1
> > +
> > --
> > 2.34.1
> >
> > _______________________________________________
> > buildroot mailing list
> > buildroot@buildroot.org
> > https://lists.buildroot.org/mailman/listinfo/buildroot
>
> --
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'
diff mbox series

Patch

diff --git a/package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch b/package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch
new file mode 100644
index 0000000000..0c82d7abbe
--- /dev/null
+++ b/package/glibc/0002-Makerules-fix-MAKEFLAGS-assignment-for-upcoming-make.patch
@@ -0,0 +1,117 @@ 
+From 2d7ed98add14f75041499ac189696c9bd3d757fe Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyich@gmail.com>
+Date: Tue, 13 Sep 2022 13:39:13 -0400
+Subject: [PATCH] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4
+ [BZ# 29564]
+
+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 <psmith@gnu.org>
+CC: Siddhesh Poyarekar <siddhesh@gotplt.org>
+Signed-off-by: Sergei Trofimovich <slyich@gmail.com>
+Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
+Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
+[james.hilliard1@gmail.com: backport from upstream commit
+2d7ed98add14f75041499ac189696c9bd3d757fe]
+---
+ 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))
+ 
+ # 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.34.1
+