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
next 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.