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 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).