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

[PATCH] Allow gitk to start on Cygwin with native Win32 Tcl/Tk

From
SPShawn O. Pearce <shawn.o.pearce@bankofamerica.com>
Date
Sep 22, 2007, 05:04 UTC
Message-ID
<20070922050446.GA28467@spearce.org>

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
Next: Paul Mackerras
Message 1 of 3 in “Allow gitk to start on Cygwin with native Win32 Tcl/Tk”
  1. Allow gitk to start on Cygwin with native Win32 Tcl/TkShawn O. Pearce, Sep 22, 2007
  2. Paul MackerrasOct 20, 2007
  3. Mark LevedahlOct 20, 2007

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.