git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Shawn O. Pearce" <shawn.o.pearce@bankofamerica.com>
To: Junio C Hamano <gitster@pobox.com>, Paul Mackerras <paulus@samba.org>
Cc: git@vger.kernel.org
Subject: [PATCH] Allow gitk to start on Cygwin with native Win32 Tcl/Tk
Date: Sat, 22 Sep 2007 01:04:47 -0400	[thread overview]
Message-ID: <20070922050446.GA28467@spearce.org> (raw)

If TCLTK_PATH points at a pure Win32 Tcl/Tk implementation but you
are running git (and thus gitk) from within Cygwin the value of
$0 is a UNIX style Cygwin path which the native Tcl/Tk is unable
to open and parse.  In such a situation we need to switch to using
the Windows style path by running $0 through cygpath.

This doesn't have a negative impact when using the Cygwin based
Tcl/Tk build as that is still close enough to a native Win32
application that it can read the Windows style path when sourcing
gitk.  On any other platform we don't want gitk to do anything
different so we keep argv0=$0.

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

 Yes, I admit this is an odd patch.  I can certainly carry it in
 my own tree (I already carry some other patches) but I wonder if
 we shouldn't include it as some users may actually try to do this,
 just like I did.  Latest git-gui `master` already has changes to its
 Makefile and shell startup boilerplate to handle this weird case.

 Makefile |    6 +++++-
 gitk     |    3 ++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 0055eef..4fc6eb3 100644
--- a/Makefile
+++ b/Makefile
@@ -386,6 +386,7 @@ EXTLIBS =
 #
 # Platform specific tweaks
 #
+gitk_argv0 := $$0
 
 # We choose to avoid "if .. else if .. else .. endif endif"
 # because maintaining the nesting to match is a pain.  If
@@ -443,6 +444,7 @@ ifeq ($(uname_O),Cygwin)
 	NO_MMAP = YesPlease
 	NO_IPV6 = YesPlease
 	X = .exe
+	gitk_argv0 := `cygpath --windows --absolute "$(gitk_argv0)"`
 endif
 ifeq ($(uname_S),FreeBSD)
 	NEEDS_LIBICONV = YesPlease
@@ -763,7 +765,9 @@ strip: $(PROGRAMS) git$X
 
 gitk-wish: gitk GIT-GUI-VARS
 	$(QUIET_GEN)$(RM) $@ $@+ && \
-	sed -e '1,3s|^exec .* "$$0"|exec $(subst |,'\|',$(TCLTK_PATH_SQ)) "$$0"|' <gitk >$@+ && \
+	sed -e '1,30s|^argv0=$$0|argv0=$(gitk_argv0)|' \
+	    -e '1,4s|^exec .* "$$argv0"|exec $(subst |,'\|',$(TCLTK_PATH_SQ)) "$$argv0"|' \
+	    <gitk >$@+ && \
 	chmod +x $@+ && \
 	mv -f $@+ $@
 
diff --git a/gitk b/gitk
index 300fdce..2366911 100755
--- a/gitk
+++ b/gitk
@@ -1,6 +1,7 @@
 #!/bin/sh
 # Tcl ignores the next line -*- tcl -*- \
-exec wish "$0" -- "$@"
+argv0=$0; \
+exec wish "$argv0" -- "$@"
 
 # Copyright (C) 2005-2006 Paul Mackerras.  All rights reserved.
 # This program is free software; it may be used, copied, modified
-- 
1.5.3.2.1036.gcd14a

             reply	other threads:[~2007-09-22  5:05 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-22  5:04 Shawn O. Pearce [this message]
2007-10-20 11:39 ` [PATCH] Allow gitk to start on Cygwin with native Win32 Tcl/Tk Paul Mackerras
2007-10-20 18:47   ` Mark Levedahl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070922050446.GA28467@spearce.org \
    --to=shawn.o.pearce@bankofamerica.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).