22
33# Define V=1 to have a more verbose compile.
44#
5+ # Define NO_MSGFMT if you do not have msgfmt from the GNU gettext
6+ # package and want to use our rough pure Tcl po->msg translator.
7+ # TCL_PATH must be vaild for this to work.
8+ #
59
610GIT-VERSION-FILE : .FORCE-GIT-VERSION-FILE
711 @$(SHELL_PATH ) ./GIT-VERSION-GEN
812-include GIT-VERSION-FILE
913
14+ uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
1015uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
1116
1217SCRIPT_SH = git-gui.sh
18+ GITGUI_MAIN := git-gui
1319GITGUI_BUILT_INS = git-citool
14- ALL_PROGRAMS = $(GITGUI_BUILT_INS ) $(patsubst % .sh,% ,$(SCRIPT_SH ) )
1520ALL_LIBFILES = $(wildcard lib/* .tcl)
1621PRELOAD_FILES = lib/class.tcl
22+ NONTCL_LIBFILES = \
23+ lib/git-gui.ico \
24+ $(wildcard lib/win32_* .js) \
25+ # end NONTCL_LIBFILES
1726
1827ifndef SHELL_PATH
1928 SHELL_PATH = /bin/sh
@@ -31,7 +40,7 @@ ifndef INSTALL
3140 INSTALL = install
3241endif
3342
34- RM_F ?= rm -f
43+ RM_RF ?= rm -rf
3544RMDIR ?= rmdir
3645
3746INSTALL_D0 = $(INSTALL ) -d -m755 # space is required here
@@ -40,22 +49,25 @@ INSTALL_R0 = $(INSTALL) -m644 # space is required here
4049INSTALL_R1 =
4150INSTALL_X0 = $(INSTALL ) -m755 # space is required here
4251INSTALL_X1 =
52+ INSTALL_A0 = find # space is required here
53+ INSTALL_A1 = | cpio -pud
4354INSTALL_L0 = rm -f # space is required here
4455INSTALL_L1 = && ln # space is required here
4556INSTALL_L2 =
4657INSTALL_L3 =
4758
4859REMOVE_D0 = $(RMDIR ) # space is required here
4960REMOVE_D1 = || true
50- REMOVE_F0 = $(RM_F ) # space is required here
61+ REMOVE_F0 = $(RM_RF ) # space is required here
5162REMOVE_F1 =
5263CLEAN_DST = true
5364
5465ifndef V
5566 QUIET = @
56- QUIET_GEN = $(QUIET)echo ' ' GEN $@ &&
57- QUIET_BUILT_IN = $(QUIET)echo ' ' BUILTIN $@ &&
67+ QUIET_GEN = $(QUIET)echo ' ' GEN '$@' &&
5868 QUIET_INDEX = $(QUIET)echo ' ' INDEX $(dir $@) &&
69+ QUIET_MSGFMT0 = $(QUIET)printf ' MSGFMT %12s ' $@ && v=`
70+ QUIET_MSGFMT1 = 2>&1` && echo "$$v" | sed -e 's/fuzzy translations/fuzzy/' | sed -e 's/ messages//g'
5971 QUIET_2DEVNULL = 2>/dev/null
6072
6173 INSTALL_D0 = dir=
@@ -64,6 +76,8 @@ ifndef V
6476 INSTALL_R1 = && echo ' ' INSTALL 644 `basename $$src` && $(INSTALL) -m644 $$src
6577 INSTALL_X0 = src=
6678 INSTALL_X1 = && echo ' ' INSTALL 755 `basename $$src` && $(INSTALL) -m755 $$src
79+ INSTALL_A0 = src=
80+ INSTALL_A1 = && echo ' ' INSTALL ' ' `basename "$$src"` && find "$$src" | cpio -pud
6781
6882 INSTALL_L0 = dst=
6983 INSTALL_L1 = && src=
@@ -74,51 +88,133 @@ ifndef V
7488 REMOVE_D0 = dir=
7589 REMOVE_D1 = && echo ' ' REMOVE $$dir && test -d "$$dir" && $(RMDIR) "$$dir" || true
7690 REMOVE_F0 = dst=
77- REMOVE_F1 = && echo ' ' REMOVE `basename "$$dst"` && $(RM_F ) "$$dst"
91+ REMOVE_F1 = && echo ' ' REMOVE `basename "$$dst"` && $(RM_RF ) "$$dst"
7892endif
7993
8094TCL_PATH ?= tclsh
8195TCLTK_PATH ?= wish
96+ TKFRAMEWORK = /Library/Frameworks/Tk.framework/Resources/Wish.app
8297
8398ifeq ($(findstring $(MAKEFLAGS ) ,s) ,s)
8499QUIET_GEN =
85- QUIET_BUILT_IN =
86100endif
87101
102+ -include config.mak
103+
88104DESTDIR_SQ = $(subst ','\'',$(DESTDIR ) )
89105gitexecdir_SQ = $(subst ','\'',$(gitexecdir ) )
90106SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH ) )
91107TCL_PATH_SQ = $(subst ','\'',$(TCL_PATH ) )
92108TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH ) )
109+ TCLTK_PATH_SED = $(subst ','\'',$(subst \,\\,$(TCLTK_PATH ) ) )
93110
94111gg_libdir ?= $(sharedir ) /git-gui/lib
95112libdir_SQ = $(subst ','\'',$(gg_libdir ) )
113+ libdir_SED = $(subst ','\'',$(subst \,\\,$(gg_libdir ) ) )
114+ exedir = $(dir $(gitexecdir ) ) share/git-gui/lib
115+
116+ GITGUI_SCRIPT := $$0
117+ GITGUI_RELATIVE :=
118+ GITGUI_MACOSXAPP :=
119+
120+ ifeq ($(exedir ) ,$(gg_libdir ) )
121+ GITGUI_RELATIVE := 1
122+ endif
123+
124+ ifeq ($(uname_O ) ,Cygwin)
125+ GITGUI_SCRIPT := `cygpath --windows --absolute "$(GITGUI_SCRIPT)"`
126+ ifeq ($(GITGUI_RELATIVE),)
127+ gg_libdir := $(shell cygpath --windows --absolute "$(gg_libdir)")
128+ endif
129+ endif
130+ ifeq ($(uname_S ) ,Darwin)
131+ ifeq ($(shell test -d $(TKFRAMEWORK) && echo y),y)
132+ GITGUI_MACOSXAPP := YesPlease
133+ endif
134+ endif
135+ ifneq (,$(findstring MINGW,$(uname_S ) ) )
136+ NO_MSGFMT=1
137+ GITGUI_WINDOWS_WRAPPER := YesPlease
138+ endif
139+
140+ ifdef GITGUI_MACOSXAPP
141+ GITGUI_MAIN := git-gui.tcl
142+
143+ git-gui : GIT-VERSION-FILE GIT-GUI-VARS
144+ $(QUIET_GEN ) rm -f $@ $@ + && \
145+ echo ' #!$(SHELL_PATH_SQ)' > $@ + && \
146+ echo ' if test "z$$*" = zversion ||' >> $@ + && \
147+ echo ' test "z$$*" = z--version' >> $@ + && \
148+ echo then >> $@ + && \
149+ echo ' ' echo \' git-gui version ' $(GITGUI_VERSION)' \' >> $@ + && \
150+ echo else >> $@ + && \
151+ echo ' ' exec \' ' $(libdir_SQ)/Git Gui.app/Contents/MacOS/Wish' \' \
152+ ' "$$0" "$$@"' >> $@ + && \
153+ echo fi >> $@ + && \
154+ chmod +x $@ + && \
155+ mv $@ + $@
156+
157+ Git\ Gui.app : GIT-VERSION-FILE GIT-GUI-VARS \
158+ macosx/Info.plist \
159+ macosx/git-gui.icns \
160+ macosx/AppMain.tcl \
161+ $(TKFRAMEWORK ) /Contents/MacOS/Wish
162+ $(QUIET_GEN ) rm -rf ' $@' ' $@' + && \
163+ mkdir -p ' $@' +/Contents/MacOS && \
164+ mkdir -p ' $@' +/Contents/Resources/Scripts && \
165+ cp ' $(subst ' ,' \' ' ,$(TKFRAMEWORK))/Contents/MacOS/Wish' \
166+ ' $@' +/Contents/MacOS && \
167+ cp macosx/git-gui.icns ' $@' +/Contents/Resources && \
168+ sed -e ' s/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \
169+ macosx/Info.plist \
170+ > ' $@' +/Contents/Info.plist && \
171+ sed -e ' s|@@gitexecdir@@|$(gitexecdir_SQ)|' \
172+ -e ' s|@@GITGUI_LIBDIR@@|$(libdir_SED)|' \
173+ macosx/AppMain.tcl \
174+ > ' $@' +/Contents/Resources/Scripts/AppMain.tcl && \
175+ mv ' $@' + ' $@'
176+ endif
177+
178+ ifdef GITGUI_WINDOWS_WRAPPER
179+ GITGUI_MAIN := git-gui.tcl
96180
97- exedir = $(dir $(gitexecdir ) ) share/git-gui/lib
98- exedir_SQ = $(subst ','\'',$(exedir ) )
181+ git-gui : windows/git-gui.sh
182+ cp $< $@
183+ endif
99184
100- $(patsubst % .sh, % , $( SCRIPT_SH ) ) : % : % .sh
185+ $(GITGUI_MAIN ) : git-gui .sh GIT-VERSION-FILE GIT-GUI-VARS
101186 $(QUIET_GEN ) rm -f $@ $@ + && \
102- GITGUI_RELATIVE= && \
103- if test ' $(exedir_SQ)' = ' $(libdir_SQ)' ; then \
104- if test " $( uname_O) " = Cygwin; \
105- then GITGUI_RELATIVE= ; \
106- else GITGUI_RELATIVE=1; \
107- fi ; \
108- fi && \
109187 sed -e ' 1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
110- -e ' s|^ exec wish "$$0"| exec $(subst |,' \| ' ,$(TCLTK_PATH_SQ)) "$$0"|' \
188+ -e ' 1,30s|^ argv0=$$0| argv0=$(GITGUI_SCRIPT)|' \
189+ -e ' 1,30s|^ exec wish | exec ' \' ' $(TCLTK_PATH_SED)' \' ' |' \
111190 -e ' s/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \
112- -e ' s|@@GITGUI_RELATIVE@@|' $$ GITGUI_RELATIVE' |' \
113- -e $$ GITGUI_RELATIVE' s|@@GITGUI_LIBDIR@@|$(libdir_SQ )|' \
114- $@ .sh > $@ + && \
191+ -e ' s|@@GITGUI_RELATIVE@@|$( GITGUI_RELATIVE) |' \
192+ -e ' $( GITGUI_RELATIVE) s|@@GITGUI_LIBDIR@@|$(libdir_SED )|' \
193+ git-gui .sh > $@ + && \
115194 chmod +x $@ + && \
116195 mv $@ + $@
117196
118- $(GITGUI_BUILT_INS ) : git-gui
119- $(QUIET_BUILT_IN ) rm -f $@ && ln git-gui $@
197+ XGETTEXT ?= xgettext
198+ ifdef NO_MSGFMT
199+ MSGFMT ?= $(TCL_PATH) po/po2msg.sh
200+ else
201+ MSGFMT ?= msgfmt
202+ endif
203+
204+ msgsdir = $(gg_libdir ) /msgs
205+ msgsdir_SQ = $(subst ','\'',$(msgsdir ) )
206+ PO_TEMPLATE = po/git-gui.pot
207+ ALL_POFILES = $(wildcard po/* .po)
208+ ALL_MSGFILES = $(subst .po,.msg,$(ALL_POFILES ) )
209+
210+ $(PO_TEMPLATE ) : $(SCRIPT_SH ) $(ALL_LIBFILES )
211+ $(XGETTEXT ) -kmc -LTcl -o $@ $(SCRIPT_SH ) $(ALL_LIBFILES )
212+ update-po :: $(PO_TEMPLATE )
213+ $(foreach p, $(ALL_POFILES ) , echo Updating $p ; msgmerge -U $p $(PO_TEMPLATE ) ; )
214+ $(ALL_MSGFILES ) : % .msg : % .po
215+ $(QUIET_MSGFMT0 )$(MSGFMT ) --statistics --tcl $< -l $(basename $(notdir $< ) ) -d $(dir $@ ) $(QUIET_MSGFMT1 )
120216
121- lib/tclIndex : $(ALL_LIBFILES )
217+ lib/tclIndex : $(ALL_LIBFILES ) GIT-GUI-VARS
122218 $(QUIET_INDEX ) if echo \
123219 $(foreach p,$(PRELOAD_FILES ) ,source $p\;) \
124220 auto_mkindex lib ' *.tcl' \
@@ -132,16 +228,13 @@ lib/tclIndex: $(ALL_LIBFILES)
132228 echo >> $@ ; \
133229 fi
134230
135- # These can record GITGUI_VERSION
136- $(patsubst % .sh,% ,$(SCRIPT_SH ) ) : GIT-VERSION-FILE GIT-GUI-VARS
137- lib/tclIndex : GIT-GUI-VARS
138-
139231TRACK_VARS = \
140232 $(subst ','\'',SHELL_PATH='$(SHELL_PATH_SQ ) ') \
141233 $(subst ','\'',TCL_PATH='$(TCL_PATH_SQ ) ') \
142234 $(subst ','\'',TCLTK_PATH='$(TCLTK_PATH_SQ ) ') \
143235 $(subst ','\'',gitexecdir='$(gitexecdir_SQ ) ') \
144236 $(subst ','\'',gg_libdir='$(libdir_SQ ) ') \
237+ GITGUI_MACOSXAPP=$(GITGUI_MACOSXAPP ) \
145238# end TRACK_VARS
146239
147240GIT-GUI-VARS : .FORCE-GIT-GUI-VARS
@@ -151,24 +244,49 @@ GIT-GUI-VARS: .FORCE-GIT-GUI-VARS
151244 echo 1> $@ " $$ VARS" ; \
152245 fi
153246
154- all :: $(ALL_PROGRAMS ) lib/tclIndex
247+ ifdef GITGUI_MACOSXAPP
248+ all :: git-gui Git\ Gui.app
249+ endif
250+ ifdef GITGUI_WINDOWS_WRAPPER
251+ all :: git-gui
252+ endif
253+ all :: $(GITGUI_MAIN ) lib/tclIndex $(ALL_MSGFILES )
155254
156255install : all
157256 $(QUIET )$(INSTALL_D0 ) ' $(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL_D1 )
158257 $(QUIET )$(INSTALL_X0 ) git-gui $(INSTALL_X1 ) ' $(DESTDIR_SQ)$(gitexecdir_SQ)'
159258 $(QUIET )$(foreach p,$(GITGUI_BUILT_INS ) , $(INSTALL_L0 ) '$(DESTDIR_SQ )$(gitexecdir_SQ ) /$p' $(INSTALL_L1 ) '$(DESTDIR_SQ )$(gitexecdir_SQ ) /git-gui' $(INSTALL_L2 ) '$(DESTDIR_SQ )$(gitexecdir_SQ ) /$p' $(INSTALL_L3 ) &&) true
259+ ifdef GITGUI_WINDOWS_WRAPPER
260+ $(QUIET)$(INSTALL_R0)git-gui.tcl $(INSTALL_R1) '$(DESTDIR_SQ)$(gitexecdir_SQ)'
261+ endif
160262 $(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(INSTALL_D1)
161263 $(QUIET)$(INSTALL_R0)lib/tclIndex $(INSTALL_R1) '$(DESTDIR_SQ)$(libdir_SQ)'
162- $(QUIET )$(foreach p,$(ALL_LIBFILES ) , $(INSTALL_R0 ) $p $(INSTALL_R1 ) '$(DESTDIR_SQ )$(libdir_SQ ) ' &&) true
264+ ifdef GITGUI_MACOSXAPP
265+ $(QUIET)$(INSTALL_A0)'Git Gui.app' $(INSTALL_A1) '$(DESTDIR_SQ)$(libdir_SQ)'
266+ $(QUIET)$(INSTALL_X0)git-gui.tcl $(INSTALL_X1) '$(DESTDIR_SQ)$(libdir_SQ)'
267+ endif
268+ $(QUIET)$(foreach p,$(ALL_LIBFILES) $(NONTCL_LIBFILES), $(INSTALL_R0)$p $(INSTALL_R1) '$(DESTDIR_SQ)$(libdir_SQ)' &&) true
269+ $(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(msgsdir_SQ)' $(INSTALL_D1)
270+ $(QUIET)$(foreach p,$(ALL_MSGFILES), $(INSTALL_R0)$p $(INSTALL_R1) '$(DESTDIR_SQ)$(msgsdir_SQ)' &&) true
163271
164272uninstall :
165273 $(QUIET )$(CLEAN_DST ) ' $(DESTDIR_SQ)$(gitexecdir_SQ)'
166274 $(QUIET )$(REMOVE_F0 ) ' $(DESTDIR_SQ)$(gitexecdir_SQ)' /git-gui $(REMOVE_F1 )
167275 $(QUIET )$(foreach p,$(GITGUI_BUILT_INS ) , $(REMOVE_F0 ) '$(DESTDIR_SQ )$(gitexecdir_SQ ) '/$p $(REMOVE_F1 ) &&) true
276+ ifdef GITGUI_WINDOWS_WRAPPER
277+ $(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(gitexecdir_SQ)'/git-gui.tcl $(REMOVE_F1)
278+ endif
168279 $(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(libdir_SQ)'
169280 $(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/tclIndex $(REMOVE_F1)
170- $(QUIET )$(foreach p,$(ALL_LIBFILES ) , $(REMOVE_F0 ) '$(DESTDIR_SQ )$(libdir_SQ ) '/$(notdir $p) $(REMOVE_F1 ) &&) true
281+ ifdef GITGUI_MACOSXAPP
282+ $(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)/Git Gui.app' $(REMOVE_F1)
283+ $(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/git-gui.tcl $(REMOVE_F1)
284+ endif
285+ $(QUIET)$(foreach p,$(ALL_LIBFILES) $(NONTCL_LIBFILES), $(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/$(notdir $p) $(REMOVE_F1) &&) true
286+ $(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(msgsdir_SQ)'
287+ $(QUIET)$(foreach p,$(ALL_MSGFILES), $(REMOVE_F0)'$(DESTDIR_SQ)$(msgsdir_SQ)'/$(notdir $p) $(REMOVE_F1) &&) true
171288 $(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(REMOVE_D1)
289+ $(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(msgsdir_SQ)' $(REMOVE_D1)
172290 $(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(REMOVE_D1)
173291 $(QUIET)$(REMOVE_D0)`dirname '$(DESTDIR_SQ)$(libdir_SQ)'` $(REMOVE_D1)
174292
@@ -177,8 +295,14 @@ dist-version:
177295 @echo $(GITGUI_VERSION ) > $(TARDIR ) /version
178296
179297clean ::
180- rm -f $(ALL_PROGRAMS ) lib/tclIndex
181- rm -f GIT-VERSION-FILE GIT-GUI-VARS
298+ $(RM_RF ) $(GITGUI_MAIN ) lib/tclIndex po/* .msg
299+ $(RM_RF ) GIT-VERSION-FILE GIT-GUI-VARS
300+ ifdef GITGUI_MACOSXAPP
301+ $(RM_RF) 'Git Gui.app'* git-gui
302+ endif
303+ ifdef GITGUI_WINDOWS_WRAPPER
304+ $(RM_RF) git-gui
305+ endif
182306
183307.PHONY : all install uninstall dist-version clean
184308.PHONY : .FORCE-GIT-VERSION-FILE
0 commit comments