[RFC/PATCH] 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.
---
The implementation is still rough and not completely portable, but before
investing more time in refining it I'd like to know if you gitsters think
the idea behind it is sound.
Regards,
Stefano
Makefile | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
index e4f8e0e..8cba6e8 100644
--- a/Makefile
+++ b/Makefile@@ -303,6 +303,19 @@ 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. +# FIXME: this is ugly, and which(1) is quite unportable. Find a better +# way to obtain the same effect. +MAKE := $(shell set $(MAKE); m1=$$1; shift; \ + m2=`which $$m1 2>/dev/null` && test -n "$$m2" || m2=$$m1; \ + echo "$$m2 $$*") + # CFLAGS and LDFLAGS are for the users to override from the command line. CFLAGS = -g -O2 -Wall
--
1.7.9