Skip to content

Commit fcfe606

Browse files
committed
Merge branch 'master' of https://github.com/j6t/git-gui
* 'master' of https://github.com/j6t/git-gui: git-gui: wire up support for the Meson build system git-gui: stop including GIT-VERSION-FILE file git-gui: extract script to generate macOS app git-gui: extract script to generate macOS wrapper git-gui: extract script to generate "tclIndex" git-gui: extract script to generate "git-gui" git-gui: drop no-op GITGUI_SCRIPT replacement git-gui: make output of GIT-VERSION-GEN source'able git-gui: prepare GIT-VERSION-GEN for out-of-tree builds git-gui: replace GIT-GUI-VARS with GIT-GUI-BUILD-OPTIONS
2 parents 6ab5693 + 61f8788 commit fcfe606

12 files changed

+453
-102
lines changed

git-gui/.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ git-gui.sh encoding=UTF-8
44
/po/*.po encoding=UTF-8
55
/GIT-VERSION-GEN eol=lf
66
Makefile whitespace=!indent,trail,space
7+
meson.build whitespace=space

git-gui/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
config.mak
33
Git Gui.app*
44
git-gui.tcl
5+
GIT-GUI-BUILD-OPTIONS
56
GIT-VERSION-FILE
6-
GIT-GUI-VARS
77
git-gui
88
lib/tclIndex

git-gui/GIT-GUI-BUILD-OPTIONS.in

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
GITGUI_GITEXECDIR=@GITGUI_GITEXECDIR@
2+
GITGUI_LIBDIR=@GITGUI_LIBDIR@
3+
GITGUI_RELATIVE=@GITGUI_RELATIVE@
4+
SHELL_PATH=@SHELL_PATH@
5+
TCLTK_PATH=@TCLTK_PATH@
6+
TCL_PATH=@TCL_PATH@
7+
TKEXECUTABLE=@TKEXECUTABLE@

git-gui/GIT-VERSION-GEN

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,33 @@
11
#!/bin/sh
22

3-
GVF=GIT-VERSION-FILE
43
DEF_VER=0.21.GITGUI
54

65
LF='
76
'
87

8+
if test "$#" -ne 2
9+
then
10+
echo >&2 "usage: $0 <SOURCE_DIR> <OUTPUT>"
11+
exit 1
12+
fi
13+
14+
SOURCE_DIR="$1"
15+
OUTPUT="$2"
16+
17+
# Protect us from reading Git version information outside of the Git directory
18+
# in case it is not a repository itself, but embedded in an unrelated
19+
# repository.
20+
GIT_CEILING_DIRECTORIES="$SOURCE_DIR/.."
21+
export GIT_CEILING_DIRECTORIES
22+
923
tree_search ()
1024
{
1125
head=$1
1226
tree=$2
13-
for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null)
27+
for p in $(git -C "$SOURCE_DIR" rev-list --parents --max-count=1 $head 2>/dev/null)
1428
do
15-
test $tree = $(git rev-parse $p^{tree} 2>/dev/null) &&
16-
vn=$(git describe --abbrev=4 $p 2>/dev/null) &&
29+
test $tree = $(git -C "$SOURCE_DIR" rev-parse $p^{tree} 2>/dev/null) &&
30+
vn=$(git -C "$SOURCE_DIR" describe --abbrev=4 $p 2>/dev/null) &&
1731
case "$vn" in
1832
gitgui-[0-9]*) echo $vn; break;;
1933
esac
@@ -34,22 +48,22 @@ tree_search ()
3448
# If we are at the toplevel or the merge assumption fails
3549
# try looking for a gitgui-* tag.
3650

37-
if test -f version &&
38-
VN=$(cat version)
51+
if test -f "$SOURCE_DIR"/version &&
52+
VN=$(cat "$SOURCE_DIR"/version)
3953
then
4054
: happy
41-
elif prefix="$(git rev-parse --show-prefix 2>/dev/null)"
55+
elif prefix="$(git -C "$SOURCE_DIR" rev-parse --show-prefix 2>/dev/null)"
4256
test -n "$prefix" &&
43-
head=$(git rev-list --max-count=1 HEAD -- . 2>/dev/null) &&
44-
tree=$(git rev-parse --verify "HEAD:$prefix" 2>/dev/null) &&
57+
head=$(git -C "$SOURCE_DIR" rev-list --max-count=1 HEAD -- . 2>/dev/null) &&
58+
tree=$(git -C "$SOURCE_DIR" rev-parse --verify "HEAD:$prefix" 2>/dev/null) &&
4559
VN=$(tree_search $head $tree)
4660
case "$VN" in
4761
gitgui-[0-9]*) : happy ;;
4862
*) (exit 1) ;;
4963
esac
5064
then
5165
VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g');
52-
elif VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
66+
elif VN=$(git -C "$SOURCE_DIR" describe --abbrev=4 HEAD 2>/dev/null) &&
5367
case "$VN" in
5468
gitgui-[0-9]*) : happy ;;
5569
*) (exit 1) ;;
@@ -60,21 +74,21 @@ else
6074
VN="$DEF_VER"
6175
fi
6276

63-
dirty=$(sh -c 'git diff-index --name-only HEAD' 2>/dev/null) || dirty=
77+
dirty=$(git -C "$SOURCE_DIR" diff-index --name-only HEAD 2>/dev/null) || dirty=
6478
case "$dirty" in
6579
'')
6680
;;
6781
*)
6882
VN="$VN-dirty" ;;
6983
esac
7084

71-
if test -r $GVF
85+
if test -r "$OUTPUT"
7286
then
73-
VC=$(sed -e 's/^GITGUI_VERSION = //' <$GVF)
87+
VC=$(sed -e 's/^GITGUI_VERSION=//' <"$OUTPUT")
7488
else
7589
VC=unset
7690
fi
7791
test "$VN" = "$VC" || {
78-
echo >&2 "GITGUI_VERSION = $VN"
79-
echo "GITGUI_VERSION = $VN" >$GVF
92+
echo >&2 "GITGUI_VERSION=$VN"
93+
echo "GITGUI_VERSION=$VN" >"$OUTPUT"
8094
}

git-gui/Makefile

Lines changed: 29 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@ all::
99
#
1010

1111
GIT-VERSION-FILE: FORCE
12-
@$(SHELL_PATH) ./GIT-VERSION-GEN
13-
ifneq ($(MAKECMDGOALS),clean)
14-
-include GIT-VERSION-FILE
15-
endif
12+
@$(SHELL_PATH) ./GIT-VERSION-GEN . $@
1613

1714
uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
1815
uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
@@ -76,7 +73,6 @@ ifndef V
7673
QUIET_INDEX = $(QUIET)echo ' ' INDEX $(dir $@) &&
7774
QUIET_MSGFMT0 = $(QUIET)printf ' MSGFMT %12s ' $@ && v=`
7875
QUIET_MSGFMT1 = 2>&1` && echo "$$v" | sed -e 's/fuzzy translations/fuzzy/' | sed -e 's/ messages*//g'
79-
QUIET_2DEVNULL = 2>/dev/null
8076

8177
INSTALL_D0 = dir=
8278
INSTALL_D1 = && echo ' ' DEST $$dir && $(INSTALL) -d -m 755 "$$dir"
@@ -114,7 +110,8 @@ ifeq ($(uname_S),Darwin)
114110
TKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish\ Shell.app
115111
endif
116112
endif
117-
TKEXECUTABLE = $(shell basename "$(TKFRAMEWORK)" .app)
113+
TKEXECUTABLE = $(TKFRAMEWORK)/Contents/MacOS/$(shell basename "$(TKFRAMEWORK)" .app)
114+
TKEXECUTABLE_SQ = $(subst ','\'',$(TKEXECUTABLE))
118115
endif
119116

120117
ifeq ($(findstring $(firstword -$(MAKEFLAGS)),s),s)
@@ -128,21 +125,17 @@ gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
128125
SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
129126
TCL_PATH_SQ = $(subst ','\'',$(TCL_PATH))
130127
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
131-
TCLTK_PATH_SED = $(subst ','\'',$(subst \,\\,$(TCLTK_PATH)))
132128

133129
gg_libdir ?= $(sharedir)/git-gui/lib
134130
libdir_SQ = $(subst ','\'',$(gg_libdir))
135-
libdir_SED = $(subst ','\'',$(subst \,\\,$(gg_libdir_sed_in)))
136131
exedir = $(dir $(gitexecdir))share/git-gui/lib
137132

138-
GITGUI_SCRIPT := $$0
139133
GITGUI_RELATIVE :=
140134
GITGUI_MACOSXAPP :=
141135

142136
ifeq ($(exedir),$(gg_libdir))
143137
GITGUI_RELATIVE := 1
144138
endif
145-
gg_libdir_sed_in := $(gg_libdir)
146139
ifeq ($(uname_S),Darwin)
147140
ifeq ($(shell test -d $(TKFRAMEWORK) && echo y),y)
148141
GITGUI_MACOSXAPP := YesPlease
@@ -159,41 +152,15 @@ endif
159152
ifdef GITGUI_MACOSXAPP
160153
GITGUI_MAIN := git-gui.tcl
161154

162-
git-gui: GIT-VERSION-FILE GIT-GUI-VARS
163-
$(QUIET_GEN)rm -f $@ $@+ && \
164-
echo '#!$(SHELL_PATH_SQ)' >$@+ && \
165-
echo 'if test "z$$*" = zversion ||' >>$@+ && \
166-
echo ' test "z$$*" = z--version' >>$@+ && \
167-
echo then >>$@+ && \
168-
echo ' 'echo \'git-gui version '$(GITGUI_VERSION)'\' >>$@+ && \
169-
echo else >>$@+ && \
170-
echo ' libdir="$${GIT_GUI_LIB_DIR:-$(libdir_SQ)}"' >>$@+ && \
171-
echo ' 'exec \"'$$libdir/Git Gui.app/Contents/MacOS/$(subst \,,$(TKEXECUTABLE))'\" \
172-
'"$$0" "$$@"' >>$@+ && \
173-
echo fi >>$@+ && \
174-
chmod +x $@+ && \
175-
mv $@+ $@
176-
177-
Git\ Gui.app: GIT-VERSION-FILE GIT-GUI-VARS \
155+
git-gui: generate-macos-wrapper.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS
156+
$(QUIET_GEN)$(SHELL_PATH) generate-macos-wrapper.sh "$@" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE
157+
158+
Git\ Gui.app: GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS \
178159
macosx/Info.plist \
179160
macosx/git-gui.icns \
180161
macosx/AppMain.tcl \
181-
$(TKFRAMEWORK)/Contents/MacOS/$(TKEXECUTABLE)
182-
$(QUIET_GEN)rm -rf '$@' '$@'+ && \
183-
mkdir -p '$@'+/Contents/MacOS && \
184-
mkdir -p '$@'+/Contents/Resources/Scripts && \
185-
cp '$(subst ','\'',$(subst \,,$(TKFRAMEWORK)/Contents/MacOS/$(TKEXECUTABLE)))' \
186-
'$@'+/Contents/MacOS && \
187-
cp macosx/git-gui.icns '$@'+/Contents/Resources && \
188-
sed -e 's/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \
189-
-e 's/@@GITGUI_TKEXECUTABLE@@/$(TKEXECUTABLE)/g' \
190-
macosx/Info.plist \
191-
>'$@'+/Contents/Info.plist && \
192-
sed -e 's|@@gitexecdir@@|$(gitexecdir_SQ)|' \
193-
-e 's|@@GITGUI_LIBDIR@@|$(libdir_SED)|' \
194-
macosx/AppMain.tcl \
195-
>'$@'+/Contents/Resources/Scripts/AppMain.tcl && \
196-
mv '$@'+ '$@'
162+
$(TKEXECUTABLE)
163+
$(QUIET_GEN)$(SHELL_PATH) generate-macos-app.sh . "$@" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE
197164
endif
198165

199166
ifdef GITGUI_WINDOWS_WRAPPER
@@ -203,18 +170,8 @@ git-gui: windows/git-gui.sh
203170
cp $< $@
204171
endif
205172

206-
$(GITGUI_MAIN): git-gui.sh GIT-VERSION-FILE GIT-GUI-VARS
207-
$(QUIET_GEN)rm -f $@ $@+ && \
208-
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
209-
-e 's|@@SHELL_PATH@@|$(SHELL_PATH_SQ)|' \
210-
-e '1,30s|^ argv0=$$0| argv0=$(GITGUI_SCRIPT)|' \
211-
-e '1,30s|^ exec wish | exec '\''$(TCLTK_PATH_SED)'\'' |' \
212-
-e 's/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \
213-
-e 's|@@GITGUI_RELATIVE@@|$(GITGUI_RELATIVE)|' \
214-
-e '$(GITGUI_RELATIVE)s|@@GITGUI_LIBDIR@@|$(libdir_SED)|' \
215-
git-gui.sh >$@+ && \
216-
chmod +x $@+ && \
217-
mv $@+ $@
173+
$(GITGUI_MAIN): git-gui.sh GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS
174+
$(QUIET_GEN)$(SHELL_PATH) generate-git-gui.sh "$<" "$@" ./GIT-GUI-BUILD-OPTIONS ./GIT-VERSION-FILE
218175

219176
XGETTEXT ?= xgettext
220177
ifdef NO_MSGFMT
@@ -239,35 +196,21 @@ update-po:: $(PO_TEMPLATE)
239196
$(ALL_MSGFILES): %.msg : %.po
240197
$(QUIET_MSGFMT0)$(MSGFMT) --statistics --tcl -l $(basename $(notdir $<)) -d $(dir $@) $< $(QUIET_MSGFMT1)
241198

242-
lib/tclIndex: $(ALL_LIBFILES) GIT-GUI-VARS
243-
$(QUIET_INDEX)if echo \
244-
$(foreach p,$(PRELOAD_FILES),source $p\;) \
245-
auto_mkindex lib $(patsubst lib/%,%,$(sort $(ALL_LIBFILES))) \
246-
| $(TCL_PATH) $(QUIET_2DEVNULL); then : ok; \
247-
else \
248-
echo >&2 " * $(TCL_PATH) failed; using unoptimized loading"; \
249-
rm -f $@ ; \
250-
echo '# Autogenerated by git-gui Makefile' >$@ && \
251-
echo >>$@ && \
252-
$(foreach p,$(PRELOAD_FILES) $(sort $(ALL_LIBFILES)),echo '$(subst lib/,,$p)' >>$@ &&) \
253-
echo >>$@ ; \
254-
fi
255-
256-
TRACK_VARS = \
257-
$(subst ','\'',SHELL_PATH='$(SHELL_PATH_SQ)') \
258-
$(subst ','\'',TCL_PATH='$(TCL_PATH_SQ)') \
259-
$(subst ','\'',TCLTK_PATH='$(TCLTK_PATH_SQ)') \
260-
$(subst ','\'',gitexecdir='$(gitexecdir_SQ)') \
261-
$(subst ','\'',gg_libdir='$(libdir_SQ)') \
262-
GITGUI_MACOSXAPP=$(GITGUI_MACOSXAPP) \
263-
#end TRACK_VARS
264-
265-
GIT-GUI-VARS: FORCE
266-
@VARS='$(TRACK_VARS)'; \
267-
if test x"$$VARS" != x"`cat $@ 2>/dev/null`" ; then \
268-
echo >&2 " * new locations or Tcl/Tk interpreter"; \
269-
echo >$@ "$$VARS"; \
270-
fi
199+
lib/tclIndex: $(ALL_LIBFILES) generate-tclindex.sh GIT-GUI-BUILD-OPTIONS
200+
$(QUIET_INDEX)$(SHELL_PATH) generate-tclindex.sh . ./GIT-GUI-BUILD-OPTIONS $(ALL_LIBFILES)
201+
202+
GIT-GUI-BUILD-OPTIONS: FORCE
203+
@sed \
204+
-e 's|@GITGUI_GITEXECDIR@|$(gitexecdir_SQ)|' \
205+
-e 's|@GITGUI_LIBDIR@|$(libdir_SQ)|' \
206+
-e 's|@GITGUI_RELATIVE@|$(GITGUI_RELATIVE)|' \
207+
-e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
208+
-e 's|@TCLTK_PATH@|$(TCLTK_PATH_SQ)|' \
209+
-e 's|@TCL_PATH@|$(TCL_PATH_SQ)|' \
210+
-e 's|@TKEXECUTABLE@|$(TKEXECUTABLE_SQ)|' \
211+
$@.in >$@+
212+
@if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo "Unsubstituted build options in $@" >&2 && exit 1; fi
213+
@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi
271214

272215
ifdef GITGUI_MACOSXAPP
273216
all:: git-gui Git\ Gui.app
@@ -317,13 +260,13 @@ endif
317260
$(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(REMOVE_D1)
318261
$(QUIET)$(REMOVE_D0)`dirname '$(DESTDIR_SQ)$(libdir_SQ)'` $(REMOVE_D1)
319262

320-
dist-version:
263+
dist-version: GIT-VERSION-FILE
321264
@mkdir -p $(TARDIR)
322-
@echo $(GITGUI_VERSION) > $(TARDIR)/version
265+
@sed 's|^GITGUI_VERSION=||' <GIT-VERSION-FILE >$(TARDIR)/version
323266

324267
clean::
325268
$(RM_RF) $(GITGUI_MAIN) lib/tclIndex po/*.msg $(PO_TEMPLATE)
326-
$(RM_RF) GIT-VERSION-FILE GIT-GUI-VARS
269+
$(RM_RF) GIT-VERSION-FILE GIT-GUI-BUILD-OPTIONS
327270
ifdef GITGUI_MACOSXAPP
328271
$(RM_RF) 'Git Gui.app'* git-gui
329272
endif

git-gui/generate-git-gui.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
if test "$#" -ne 4
6+
then
7+
echo >&2 "usage: $0 <INPUT> <OUTPUT> <BUILD_OPTIONS> <VERSION_FILE>"
8+
exit 1
9+
fi
10+
11+
INPUT="$1"
12+
OUTPUT="$2"
13+
BUILD_OPTIONS="$3"
14+
VERSION_FILE="$4"
15+
16+
. "${BUILD_OPTIONS}"
17+
. "${VERSION_FILE}"
18+
19+
rm -f "$OUTPUT" "$OUTPUT+"
20+
sed \
21+
-e "1s|#!.*/sh|#!$SHELL_PATH|" \
22+
-e "s|@@SHELL_PATH@@|$SHELL_PATH|" \
23+
-e "1,30s|^ exec wish | exec '$TCLTK_PATH' |" \
24+
-e "s|@@GITGUI_VERSION@@|$GITGUI_VERSION|g" \
25+
-e "s|@@GITGUI_RELATIVE@@|$GITGUI_RELATIVE|" \
26+
-e "${GITGUI_RELATIVE}s|@@GITGUI_LIBDIR@@|$GITGUI_LIBDIR|" \
27+
"$INPUT" >"$OUTPUT"+
28+
chmod +x "$OUTPUT"+
29+
mv "$OUTPUT"+ "$OUTPUT"

git-gui/generate-macos-app.sh

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
SOURCE_DIR="$1"
6+
OUTPUT="$2"
7+
BUILD_OPTIONS="$3"
8+
VERSION_FILE="$4"
9+
10+
. "$BUILD_OPTIONS"
11+
. "$VERSION_FILE"
12+
13+
rm -rf "$OUTPUT" "$OUTPUT+"
14+
15+
mkdir -p "$OUTPUT+/Contents/MacOS"
16+
mkdir -p "$OUTPUT+/Contents/Resources/Scripts"
17+
18+
cp "$TKEXECUTABLE" "$OUTPUT+/Contents/MacOS"
19+
cp "$SOURCE_DIR/macosx/git-gui.icns" "$OUTPUT+/Contents/Resources"
20+
sed \
21+
-e "s/@@GITGUI_VERSION@@/$GITGUI_VERSION/g" \
22+
-e "s/@@GITGUI_TKEXECUTABLE@@/$(basename "$TKEXECUTABLE")/g" \
23+
"$SOURCE_DIR/macosx/Info.plist" \
24+
>"$OUTPUT+/Contents/Info.plist"
25+
sed \
26+
-e "s|@@gitexecdir@@|$GITGUI_GITEXECDIR|" \
27+
-e "s|@@GITGUI_LIBDIR@@|$GITGUI_LIBDIR|" \
28+
"$SOURCE_DIR/macosx/AppMain.tcl" \
29+
>"$OUTPUT+/Contents/Resources/Scripts/AppMain.tcl"
30+
mv "$OUTPUT+" "$OUTPUT"

0 commit comments

Comments
 (0)