git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC/PATCH] build: avoid possible confusion between GNU/XPG4 make on Solaris
@ 2012-03-02  9:13 Stefano Lattarini
  2012-03-02  9:34 ` Thomas Rast
  2012-03-02 18:35 ` [RFC/PATCH] " Junio C Hamano
  0 siblings, 2 replies; 12+ messages in thread
From: Stefano Lattarini @ 2012-03-02  9:13 UTC (permalink / raw)
  To: git; +Cc: Stefano Lattarini

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

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-03-09 21:59 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-02  9:13 [RFC/PATCH] build: avoid possible confusion between GNU/XPG4 make on Solaris Stefano Lattarini
2012-03-02  9:34 ` Thomas Rast
2012-03-02  9:41   ` Stefano Lattarini
2012-03-02 10:18     ` [PATCH v2] " Stefano Lattarini
2012-03-02 18:35 ` [RFC/PATCH] " Junio C Hamano
2012-03-02 19:00   ` Stefano Lattarini
2012-03-02 19:46     ` Junio C Hamano
2012-03-09 12:43   ` [PATCH] configure: allow user to prevent $PATH "sanitization" " Stefano Lattarini
2012-03-09 16:29     ` Junio C Hamano
2012-03-09 19:46     ` Junio C Hamano
2012-03-09 21:46       ` Stefano Lattarini
2012-03-09 21:59         ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).