2
2
3
3
# Define V=1 to have a more verbose compile.
4
4
#
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
+ #
5
9
6
10
GIT-VERSION-FILE : .FORCE-GIT-VERSION-FILE
7
11
@$(SHELL_PATH ) ./GIT-VERSION-GEN
8
12
-include GIT-VERSION-FILE
9
13
14
+ uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
10
15
uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
11
16
12
17
SCRIPT_SH = git-gui.sh
18
+ GITGUI_MAIN := git-gui
13
19
GITGUI_BUILT_INS = git-citool
14
- ALL_PROGRAMS = $(GITGUI_BUILT_INS ) $(patsubst % .sh,% ,$(SCRIPT_SH ) )
15
20
ALL_LIBFILES = $(wildcard lib/* .tcl)
16
21
PRELOAD_FILES = lib/class.tcl
22
+ NONTCL_LIBFILES = \
23
+ lib/git-gui.ico \
24
+ $(wildcard lib/win32_* .js) \
25
+ # end NONTCL_LIBFILES
17
26
18
27
ifndef SHELL_PATH
19
28
SHELL_PATH = /bin/sh
@@ -31,7 +40,7 @@ ifndef INSTALL
31
40
INSTALL = install
32
41
endif
33
42
34
- RM_F ?= rm -f
43
+ RM_RF ?= rm -rf
35
44
RMDIR ?= rmdir
36
45
37
46
INSTALL_D0 = $(INSTALL ) -d -m755 # space is required here
@@ -40,22 +49,25 @@ INSTALL_R0 = $(INSTALL) -m644 # space is required here
40
49
INSTALL_R1 =
41
50
INSTALL_X0 = $(INSTALL ) -m755 # space is required here
42
51
INSTALL_X1 =
52
+ INSTALL_A0 = find # space is required here
53
+ INSTALL_A1 = | cpio -pud
43
54
INSTALL_L0 = rm -f # space is required here
44
55
INSTALL_L1 = && ln # space is required here
45
56
INSTALL_L2 =
46
57
INSTALL_L3 =
47
58
48
59
REMOVE_D0 = $(RMDIR ) # space is required here
49
60
REMOVE_D1 = || true
50
- REMOVE_F0 = $(RM_F ) # space is required here
61
+ REMOVE_F0 = $(RM_RF ) # space is required here
51
62
REMOVE_F1 =
52
63
CLEAN_DST = true
53
64
54
65
ifndef V
55
66
QUIET = @
56
- QUIET_GEN = $(QUIET)echo ' ' GEN $@ &&
57
- QUIET_BUILT_IN = $(QUIET)echo ' ' BUILTIN $@ &&
67
+ QUIET_GEN = $(QUIET)echo ' ' GEN '$@' &&
58
68
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'
59
71
QUIET_2DEVNULL = 2>/dev/null
60
72
61
73
INSTALL_D0 = dir=
@@ -64,6 +76,8 @@ ifndef V
64
76
INSTALL_R1 = && echo ' ' INSTALL 644 `basename $$src` && $(INSTALL) -m644 $$src
65
77
INSTALL_X0 = src=
66
78
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
67
81
68
82
INSTALL_L0 = dst=
69
83
INSTALL_L1 = && src=
@@ -74,51 +88,133 @@ ifndef V
74
88
REMOVE_D0 = dir=
75
89
REMOVE_D1 = && echo ' ' REMOVE $$dir && test -d "$$dir" && $(RMDIR) "$$dir" || true
76
90
REMOVE_F0 = dst=
77
- REMOVE_F1 = && echo ' ' REMOVE `basename "$$dst"` && $(RM_F ) "$$dst"
91
+ REMOVE_F1 = && echo ' ' REMOVE `basename "$$dst"` && $(RM_RF ) "$$dst"
78
92
endif
79
93
80
94
TCL_PATH ?= tclsh
81
95
TCLTK_PATH ?= wish
96
+ TKFRAMEWORK = /Library/Frameworks/Tk.framework/Resources/Wish.app
82
97
83
98
ifeq ($(findstring $(MAKEFLAGS ) ,s) ,s)
84
99
QUIET_GEN =
85
- QUIET_BUILT_IN =
86
100
endif
87
101
102
+ -include config.mak
103
+
88
104
DESTDIR_SQ = $(subst ','\'',$(DESTDIR ) )
89
105
gitexecdir_SQ = $(subst ','\'',$(gitexecdir ) )
90
106
SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH ) )
91
107
TCL_PATH_SQ = $(subst ','\'',$(TCL_PATH ) )
92
108
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH ) )
109
+ TCLTK_PATH_SED = $(subst ','\'',$(subst \,\\,$(TCLTK_PATH ) ) )
93
110
94
111
gg_libdir ?= $(sharedir ) /git-gui/lib
95
112
libdir_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
96
180
97
- exedir = $(dir $(gitexecdir ) ) share/git-gui/lib
98
- exedir_SQ = $(subst ','\'',$(exedir ) )
181
+ git-gui : windows/git-gui.sh
182
+ cp $< $@
183
+ endif
99
184
100
- $(patsubst % .sh, % , $( SCRIPT_SH ) ) : % : % .sh
185
+ $(GITGUI_MAIN ) : git-gui .sh GIT-VERSION-FILE GIT-GUI-VARS
101
186
$(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 && \
109
187
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)' \' ' |' \
111
190
-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 > $@ + && \
115
194
chmod +x $@ + && \
116
195
mv $@ + $@
117
196
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 )
120
216
121
- lib/tclIndex : $(ALL_LIBFILES )
217
+ lib/tclIndex : $(ALL_LIBFILES ) GIT-GUI-VARS
122
218
$(QUIET_INDEX ) if echo \
123
219
$(foreach p,$(PRELOAD_FILES ) ,source $p\;) \
124
220
auto_mkindex lib ' *.tcl' \
@@ -132,16 +228,13 @@ lib/tclIndex: $(ALL_LIBFILES)
132
228
echo >> $@ ; \
133
229
fi
134
230
135
- # These can record GITGUI_VERSION
136
- $(patsubst % .sh,% ,$(SCRIPT_SH ) ) : GIT-VERSION-FILE GIT-GUI-VARS
137
- lib/tclIndex : GIT-GUI-VARS
138
-
139
231
TRACK_VARS = \
140
232
$(subst ','\'',SHELL_PATH='$(SHELL_PATH_SQ ) ') \
141
233
$(subst ','\'',TCL_PATH='$(TCL_PATH_SQ ) ') \
142
234
$(subst ','\'',TCLTK_PATH='$(TCLTK_PATH_SQ ) ') \
143
235
$(subst ','\'',gitexecdir='$(gitexecdir_SQ ) ') \
144
236
$(subst ','\'',gg_libdir='$(libdir_SQ ) ') \
237
+ GITGUI_MACOSXAPP=$(GITGUI_MACOSXAPP ) \
145
238
# end TRACK_VARS
146
239
147
240
GIT-GUI-VARS : .FORCE-GIT-GUI-VARS
@@ -151,24 +244,49 @@ GIT-GUI-VARS: .FORCE-GIT-GUI-VARS
151
244
echo 1> $@ " $$ VARS" ; \
152
245
fi
153
246
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 )
155
254
156
255
install : all
157
256
$(QUIET )$(INSTALL_D0 ) ' $(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL_D1 )
158
257
$(QUIET )$(INSTALL_X0 ) git-gui $(INSTALL_X1 ) ' $(DESTDIR_SQ)$(gitexecdir_SQ)'
159
258
$(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
160
262
$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(INSTALL_D1)
161
263
$(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
163
271
164
272
uninstall :
165
273
$(QUIET )$(CLEAN_DST ) ' $(DESTDIR_SQ)$(gitexecdir_SQ)'
166
274
$(QUIET )$(REMOVE_F0 ) ' $(DESTDIR_SQ)$(gitexecdir_SQ)' /git-gui $(REMOVE_F1 )
167
275
$(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
168
279
$(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(libdir_SQ)'
169
280
$(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
171
288
$(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(REMOVE_D1)
289
+ $(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(msgsdir_SQ)' $(REMOVE_D1)
172
290
$(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(REMOVE_D1)
173
291
$(QUIET)$(REMOVE_D0)`dirname '$(DESTDIR_SQ)$(libdir_SQ)'` $(REMOVE_D1)
174
292
@@ -177,8 +295,14 @@ dist-version:
177
295
@echo $(GITGUI_VERSION ) > $(TARDIR ) /version
178
296
179
297
clean ::
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
182
306
183
307
.PHONY : all install uninstall dist-version clean
184
308
.PHONY : .FORCE-GIT-VERSION-FILE
0 commit comments