Bug 29564 - Incorrect way to change MAKEFLAGS in Makerules
Summary: Incorrect way to change MAKEFLAGS in Makerules
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: build (show other bugs)
Version: unspecified
: P2 normal
Target Milestone: 2.37
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-09-11 17:18 UTC by Paul Smith
Modified: 2024-02-07 22:10 UTC (History)
5 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Smith 2022-09-11 17:18:30 UTC
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
Comment 1 Sergei Trofimovich 2022-09-12 20:35:55 UTC
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.
Comment 2 Siddhesh Poyarekar 2022-09-12 20:38:31 UTC
Thanks for working on this!  Please also quote this bug number in the patch when you submit the updated one.
Comment 3 Siddhesh Poyarekar 2022-09-13 17:59:48 UTC
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>