[RFC] Increase Minimal GNU Make version for Linux Kernel from 3.80 to 3.81
From: Masahiro Yamada
Date: Wed May 03 2017 - 02:46:29 EST
Hello Linus and Kbuild developers.
Documentation/process/changes.rst says the minimal version
of GNU Make is 3.80, but actually building the kernel
with this version has been broken for a long time.
Specifically, it got broken by commit c8589d1e9e01 (i.e. Linux 3.18).
Sorry, it's me who broke it.
Here is my excuse:
- It is almost 3 years since then, but nobody complained about it.
- GNU Make 3.80 is almost 15 years old.
(Even GNU Make 3.81 was released in 2006.)
- People seldom test their makefiles on such old GNU Make version,
so they often use some features that are not supported by version 3.80.
We would have to make efforts if we wanted to get back
availability of GNU Make 3.80.
 multi_depend in scripts/Makefile.lib does not work on GNU Make 3.80
I fiddled with it for a while, but I could not find a workaround,
except reverting the following 4 commits:
I do not want to revert them because we would lose many cleanups.
 "else ifeq" is not supported by GNU Make 3.80
'make help' on GNU Make 3.80 reports error:
./Documentation/Makefile.sphinx:25: Extraneous text after `else' directive
./Documentation/Makefile.sphinx:31: *** only one `else' per conditional. Stop.
make: *** [help] Error 2
We could rewrite the makefile, but nested if directives
would make the code unreadable.
 $(realpath ...) and $(abspath ...) are not supported by GNU Make 3.80
These two functions are only supported by 3.81 or later,
but they are already used here and there.
 semi-colon (;) is treated differently in $(warning ...) by GNU Make 3.80
'make ARCH=arm64 defconfig' does not work on GNU Make 3.80
$ make ARCH=arm64 defconfig
arch/arm64/Makefile:43: *** unterminated call to function `warning':
missing `)'. Stop.
I could not find a solution to make it work for both 3.80 and 3.81 (or later).
We would not be able to use a semi-colon in $(warning ...).
>From the above, I'd like to propose to increase the minimal version of
GNU Make to 3.81.
Comments are appreciated.