[Buildroot] [PATCH] linux: workaround make-4.1 bug
Peter Korsgaard
peter at korsgaard.com
Sat Aug 29 08:51:32 UTC 2020
>>>>> "Yann" == Yann E MORIN <yann.morin.1998 at free.fr> writes:
> On Ubuntu 18.04, make-4.1 emits spurious, incorrect "entering/leaving"
> messages, which end up in the LINUX_VERSION_PROBED variable:
> printf 'probed linux version: "%s"\n' "$(LINUX_VERSION_PROBED)"
> probed linux version: "make[1]: Entering directory '/home/buildroot'
> 4.19.78-linux4sam-6.2
> make[1]: Leaving directory '/home/buildroot/output/build/linux-linux4sam_6.2'"
> First, the messages are displayed even though we do explicitly pass
> --no-print-directory -s.
> Second, the entering and leaving messages are not about the same
> directory!
> This *only* occurs in the following conditions:
> - the user has the correct 0022 umask,
> - top-level parallel is used (with or without PPD),
> - initial -C is specified as well.
> $ umask 0022
> $ make -j16 -C $(pwd)
> [...]
> depmod: ERROR: Bad version passed make[1]:
> [...]
> (yes, 'make[1]:' is the string depmod is trying, and fails, to parse as
> a version string).
> If any of the three conditions above is removed, the problem no longer
> occurs. Here's a table of the MAKEFLAGS:
> | 0002 | 0022 |
> ----+-------+------------------------------------------------+--------------------------+
> | no-j | --no-print-directory -- | |
> noC | +------------------------------------------------+--------------------------+
> | -j16 | -j --jobserver-fds=3,4 --no-print-directory -- | -j --jobserver-fds=3,4 |
> ----+-------+------------------------------------------------+--------------------------+
> | no-j | --no-print-directory -- | w |
> -C | +------------------------------------------------+--------------------------+
> | -j16 | -j --jobserver-fds=3,4 --no-print-directory -- | w -j --jobserver-fds=3,4 |
> ----+-------+------------------------------------------------+--------------------------+
> 0002: umask == 0002
> 0022: umask == 0022
> no-j: no -j flag
> -j16: -j16 flag
> noC: no -C flag
> -C : -C /path/of/buildroot/
> Only the bottom-right-most case fails...
> This behaviour goes against what is documented:
> https://www.gnu.org/software/make/manual/make.html#g_t_002dw-Option
> 5.7.4 The ‘--print-directory’ Option
> [...]
> you do not need to specify this option because ‘make’ does it for
> you: ‘-w’ is turned on automatically when you use the ‘-C’ option,
> and in sub-makes. make will not automatically turn on ‘-w’ if you
> also use ‘-s’, which says to be silent, or if you use
> ‘--no-print-directory’ to explicitly disable it.
> So this exactly describes our situation; yet 'w' is added to MAKEFLAGS.
> Getting rid of the 'w' flag makes the build succeed again, so that's
> what we do here (bleark, icky)...
> Furthermore, the documented way to override MAKEFLAGS is to do so as a
> make parameter:
> https://www.gnu.org/software/make/manual/make.html#Options_002fRecursion
> 5.7.3 Communicating Options to a Sub-make
> [...]
> If you do not want to pass the other flags down, you must change the
> value of MAKEFLAGS, like this:
> subsystem:
> cd subdir && $(MAKE) MAKEFLAGS=
> However, doing so does not fix the issue. So we resort to pass the
> modified MAKEFLAGS via the environment (bleark, icky)...
> Fixes: #13141
> Reported-by: Laurent <laurent at neko-labs.eu>
> Reported-by: Asaf Kahlon <asafka7 at gmail.com>
> Signed-off-by: Yann E. MORIN <yann.morin.1998 at free.fr>
> Cc: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
Committed to 2020.02.x and 2020.05.x, thanks.
--
Bye, Peter Korsgaard
More information about the buildroot
mailing list