[PATCH 1/2] Makerules: fix MAKEFLAGS assignment for upcoming make-4.4 [BZ# 29564]

Sunil Pandey skpgkp2@gmail.com
Fri May 10 01:11:11 GMT 2024


On Thu, May 9, 2024 at 2:22 PM H.J. Lu <hjl.tools@gmail.com> wrote:

> From: Sergei Trofimovich <slyich@gmail.com>
>
> 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>
> (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 <skpgkp2@gmail.com>

--Sunil


More information about the Libc-stable mailing list