Code

git-gui: Correctly install to /usr/bin on Cygwin
authorShawn O. Pearce <spearce@spearce.org>
Tue, 19 Jun 2007 14:48:09 +0000 (10:48 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Thu, 21 Jun 2007 03:22:49 +0000 (23:22 -0400)
Mark Levedahl <mlevedahl@gmail.com> noted that installation on Cygwin
to /usr/bin can cause problems with the automatic guessing of our
library location.  The problem is that installation to /usr/bin
means we actually have:

  /usr/bin   = c:\cygwin\bin
  /usr/share = c:\cygwin\usr\share

So git-gui guesses that its library should be found within the
c:\cygwin\share directory, as that is where it should be relative
to the script itself in c:\cygwin\bin.

In my first version of this patch I tried to use `cygpath` to resolve
/usr/bin and /usr/share to test that they were in the same relative
locations, but that didn't work out correctly as we were actually
testing /usr/share against itself, so it always was equal, and we
always used relative paths.  So my original solution was quite wrong.

Mark suggested we just always disable relative behavior on Cygwin,
because of the complexity of the mount mapping problem, so that's
all I'm doing.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Makefile

index 3de0de1a2341eedd67de5210fbf216d62fe9e464..9d99f670466ca03215ae81268584468d8e46a779 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,6 +7,8 @@ GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
        @$(SHELL_PATH) ./GIT-VERSION-GEN
 -include GIT-VERSION-FILE
 
+uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
+
 SCRIPT_SH = git-gui.sh
 GITGUI_BUILT_INS = git-citool
 ALL_PROGRAMS = $(GITGUI_BUILT_INS) $(patsubst %.sh,%,$(SCRIPT_SH))
@@ -58,8 +60,12 @@ exedir_SQ = $(subst ','\'',$(exedir))
 
 $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
        $(QUIET_GEN)rm -f $@ $@+ && \
+       GITGUI_RELATIVE= && \
        if test '$(exedir_SQ)' = '$(libdir_SQ)'; then \
-               GITGUI_RELATIVE=1; \
+               if test "$(uname_O)" = Cygwin; \
+               then GITGUI_RELATIVE= ; \
+               else GITGUI_RELATIVE=1; \
+               fi; \
        fi && \
        sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
                -e 's|^exec wish "$$0"|exec $(subst |,'\|',$(TCLTK_PATH_SQ)) "$$0"|' \