The glibc Makerules file contains this: # Don't define any builtin rules. MAKEFLAGS := $(MAKEFLAGS)r This is not a valid way to modify the MAKEFLAGS variable. GNU make always ensures that all options which have single-letter forms are used as the first argument, however there are options to GNU make which do NOT have single-letter forms and those are added after the single-letter forms in MAKEFLAGS. If you use the above structure, the "r" is just appended to the end of whatever the last option happens to be, which will result in an error if the person invoking make provided a long option without a single-letter form. This should be: MAKEFLAGS := $(MAKEFLAGS) -r or probably even better: MAKEFLAGS += -r
Completely agree. I proposed very similar patch in https://sourceware.org/pipermail/libc-alpha/2022-September/141926.html. I'll try to submit a form of it with a few changes proposed to handle other places introspecting $(MAKEFLAGS) by using $(firstword $(MAKEFLAGS)) instead or similar.
Thanks for working on this! Please also quote this bug number in the patch when you submit the updated one.
Fixed. https://sourceware.org/git/?p=glibc.git;a=commit;h=2d7ed98add14f75041499ac189696c9bd3d757fe author Sergei Trofimovich <slyich@gmail.com> Tue, 13 Sep 2022 17:39:13 +0000 (13:39 -0400) committer Siddhesh Poyarekar <siddhesh@sourceware.org> Tue, 13 Sep 2022 17:45:32 +0000 (13:45 -0400) commit 2d7ed98add14f75041499ac189696c9bd3d757fe tree 2f9d6695d288f31666f7aaad5c52add48b8a6470 tree parent a30e960328fc60e066967d1224ecd5b6e173cda3 commit | diff 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>