[PATCH v2] build: avoid possible confusion between GNU/XPG4 make on Solaris
From: Stefano Lattarini <hidden>
Date: 2016-06-15 22:53:12
Subsystem:
kernel build + files below scripts/ (unless maintained elsewhere), the rest · Maintainers:
Nathan Chancellor, Nicolas Schier, Linus Torvalds
On a Solaris 10 system with Solaris XPG4 make installed as /usr/xpg4/bin/make,
GNU make installed as /usr/local/bin/make, and with /usr/local/bin appearing
in $PATH *before* /usr/xpg4/bin, I was seeing errors like this upon invoking
"make all":
SUBDIR perl
make: Warning: Ignoring DistributedMake -o option
Usage : make [ -f makefile ][ -K statefile ]...
make: Fatal error: Unknown option `-C'
This happens because the Git's Makefiles, when running on Solaris, sanitize
$PATH by prepending /usr/xpg6/bin and /usr/xpg4/bin to it, but in the setup
described above such a behaviour has the unintended consequence of forcing
the use of Solaris make in recursive make invocations, even if the $(MAKE)
macro is being correctly used in them; this happens because, in that setup,
the original GNU make process was invoked simply as "make".
To avoid such an issue, we instruct our Makefile to redefine $(MAKE) to
point to the absolute path of the originally-invoked make program.
Helped-by: Thomas Rast [off-list ref]
Signed-off-by: Stefano Lattarini <redacted>
---
Makefile | 15 +++++++++++++++
1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
index e4f8e0e..e71d688 100644
--- a/Makefile
+++ b/Makefile@@ -303,6 +303,21 @@ ifdef MSVC uname_O := Windows endif +# This Makefile will possibly sanitize PATH by prepending system-specific +# directories to it (e.g., /usr/xpg4/bin on Solaris). This can become +# problematic for recursive make invocations, if one of those directories +# contains a "make" program and the user has called GNU make by simply +# invoking "make" (this can happen e.g. when GNU make has been installed +# as /usr/local/bin/make). To avoid such issues, we redefine $(MAKE) to +# point to the absolute path of the originally-invoked make program. +original_MAKE := $(MAKE) +MAKE := $(shell command -v $(firstword $(original_MAKE)) 2>/dev/null) +ifeq ($(MAKE),) + MAKE := $(original_MAKE) +else + MAKE += $(wordlist 2,$(words $(original_MAKE)),$(original_MAKE)) +endif + # CFLAGS and LDFLAGS are for the users to override from the command line. CFLAGS = -g -O2 -Wall
--
1.7.9