git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: shell compatibility issues with SunOS 5.10

From
Junio C Hamano <gitster@pobox.com>
Date
May 7, 2009, 01:14 UTC
Message-ID
<7vab5pu321.fsf@alter.siamese.dyndns.org>
In-Reply-To
<vmGwFm-7sqyeL1D7WrJ-qBXW02LwMMHQ7rLy7XbfdUutAtORXrswbw@cipher.nrlssc.navy.mil>
Brandon Casey <casey@nrlssc.navy.mil> writes:
Show 9 quoted lines
> /usr/xpg*/bin is where Sun puts the POSIX compliant versions of standard
> system utilities.
>
> The binaries in /bin/ retain their historical Solaris behavior.
>
> Check out the XPG4 man page on a sun.
>
> Not sure about the best route to take here.  /usr/xpg4/bin should probably
> be in the user's PATH when git is executed too.
I doubt it is limited to git.

My experience from the days I had to do things on Solaris boxes several years ago was that it was the only way to have a workable environment to have /usr/xpg*/bin on my PATH.

If the contents of the stock /usr/bin has been frozen at the historical state while the outside world made progress, I would imagine that the situation has gotten worse for people who still use tools from /usr/bin and expect their scripts to be portable with anybody else.

On Solaris, I expect everybody to build git with SHELL_PATH set to something other than /bin/sh, and binary packaged one (I do not know Solaris have such a packaging system, though) would also be set to avoid the broken /bin/sh. I suspect you could do something like this...

 Makefile        |   13 +++++++++++++
 git-sh-setup.sh |    2 ++
 2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
index 6e21643..081f06a 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,11 @@ all::
 
 # Define V=1 to have a more verbose compile.
 #
+# Define SHELL_PATH to a POSIX shell if your /bin/sh is broken.
+#
+# Define SANE_TOOL_PATH to a colon-separated list of paths to prepend
+# to PATH if your tools in /usr/bin are broken.
+#
 # Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf()
 # or vsnprintf() return -1 instead of number of characters which would
 # have been written to the final string if enough space had been available.
@@ -694,6 +699,7 @@ ifeq ($(uname_S),SunOS)
 	NEEDS_SOCKET = YesPlease
 	NEEDS_NSL = YesPlease
 	SHELL_PATH = /bin/bash
+	SANE_TOOL_PATH = /usr/xpg5/bin:/usr/xpg4/bin
 	NO_STRCASESTR = YesPlease
 	NO_MEMMEM = YesPlease
 	NO_HSTRERROR = YesPlease
@@ -852,6 +858,12 @@ endif
 -include config.mak.autogen
 -include config.mak
 
+ifdef SANE_TOOL_PATH
+BROKEN_PATH_FIX = s|^. @@PATH@@|PATH=$(SANE_TOOL_PATH)|
+else
+BROKEN_PATH_FIX = d
+endif
+
 ifeq ($(uname_S),Darwin)
 	ifndef NO_FINK
 		ifeq ($(shell test -d /sw/lib && echo y),y)
@@ -1251,6 +1263,7 @@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
 	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
 	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
 	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
+	    -e '/^# @@PATH@@/$(BROKEN_PATH_FIX)' \
 	    $@.sh >$@+ && \
 	chmod +x $@+ && \
 	mv $@+ $@
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index 8382339..7802581 100755
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -11,6 +11,8 @@
 # exporting it.
 unset CDPATH
 
+# @@PATH@@:$PATH
+
 die() {
 	echo >&2 "$@"
 	exit 1
Previous: Brandon CaseyNext: Brandon Casey
Message 30 of 31 in “shell compatibility issues with SunOS 5.10”
  1. Nguyen Thai Ngoc DuyMay 6, 2009
  2. Junio C HamanoMay 6, 2009
  3. Nguyen Thai Ngoc DuyMay 6, 2009
  4. Nguyen Thai Ngoc DuyMay 7, 2009
  5. Johannes SixtMay 6, 2009
  6. Nguyen Thai Ngoc DuyMay 6, 2009
  7. Ralf WildenhuesMay 6, 2009
  8. Johannes SchindelinMay 6, 2009
  9. Nguyen Thai Ngoc DuyMay 6, 2009
  10. Jeff KingMay 6, 2009
  11. Brandon CaseyMay 6, 2009
  12. 0/4 workaround some Solaris sed issuesBrandon Casey, May 6, 2009
  13. 1/4 t4118: add missing '&&'Brandon Casey, May 6, 2009
  14. 2/4 t4118: avoid sed invocation on file without terminating newlineBrandon Casey, May 6, 2009
  15. 3/4 t/annotate-tests.sh: avoid passing a non-newline terminated file to sedBrandon Casey, May 6, 2009
  16. 4/4 t4200: avoid passing a non-newline terminated file to sedBrandon Casey, May 6, 2009
  17. Junio C HamanoMay 6, 2009
  18. Brandon CaseyMay 6, 2009
  19. Junio C HamanoMay 6, 2009
  20. 1/2 t4200: remove two unnecessary linesBrandon Casey, May 6, 2009
  21. 2/2 t4200: convert sed expression which operates on non-text file to perlBrandon Casey, May 6, 2009
  22. Nguyen Thai Ngoc DuyMay 6, 2009
  23. Nguyen Thai Ngoc DuyMay 7, 2009
  24. Brandon CaseyMay 7, 2009
  25. Junio C HamanoMay 7, 2009
  26. Johannes SixtMay 7, 2009
  27. Brandon CaseyMay 7, 2009
  28. Nguyen Thai Ngoc DuyMay 6, 2009
  29. Brandon CaseyMay 7, 2009
  30. Junio C HamanoMay 7, 2009
  31. Brandon CaseyMay 7, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.