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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html