1include ../config.mak
2
3CFLAGS= $(OPTFLAGS) $(GTKINC) \
4		-DGDK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED \
5		-DGTK_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_DEPRECATED \
6		-DG_DISABLE_SINGLE_INCLUDES \
7		-DGSEAL_ENABLE \
8		-DHIME_BIN_DIR=\"$(HIME_BIN_DIR)\" \
9		-DHIME_DEFAULT_ICON_DIR=\"$(HIME_DEFAULT_ICON_DIR)\" \
10		-DHIME_OGG_DIR=\"$(HIME_OGG_DIR)\" \
11		-DHIME_SCRIPT_DIR=\"$(HIME_SCRIPT_DIR)\" \
12		-DHIME_TABLE_DIR=\"$(HIME_TABLE_DIR)\" \
13		-DHIME_VERSION=\"$(HIME_VERSION)\" \
14		-DDOC_DIR=\"$(DOC_DIR)\" \
15		-DSYS_ICON_DIR=\"$(SYS_ICON_DIR)\" \
16		-DFREEBSD=$(FREEBSD) \
17		-I./IMdkit/include -I./im-client
18
19OBJ_IMSRV = hime-crypt.o im-addr.o im-dispatch.o im-srv.o
20
21hime_pho_o  = pho-dbg.o pho-sym.o pho-util.o pho.o \
22			table-update.o win-pho.o
23hime_gtab_o = gtab-buf.o gtab-list.o gtab-util.o gtab.o win-gtab.o
24
25
26OBJS      = $(hime_pho_o) $(hime_gtab_o) hime.o \
27			about.o cache.o eve.o fullchar.o \
28			gtab-init.o gtab-tsin-fname.o gtab-use-count.o gtk_bug_fix.o \
29			hime-common.o hime-conf.o hime-exec-script.o hime-icon.o \
30			hime-module-cb.o hime-module.o hime-settings.o \
31			lang.o locale.o \
32			pho-kbm-name.o pho-play.o pho2pinyin.o \
33			phrase-save-menu.o phrase.o \
34			pinyin.o \
35			statistic.o t2s-lookup.o tsin-scan.o \
36			unix-exec.o util.o \
37			win-inmd-switch.o win-kbm.o win-message.o win-pho-near.o \
38			win-save-phrase.o win-sym.o
39
40OBJS_TSLEARN = hime-tslearn.o \
41			fullchar.o \
42			gtab-init.o gtab-list.o gtab-tsin-fname.o gtab-util.o \
43			hime-common.o hime-conf.o hime-icon.o hime-settings.o \
44			lang.o locale.o \
45			pho-dbg.o pho-sym.o pho-util.o pho2pinyin.o \
46			pinyin.o \
47			table-update.o tsin-util.o unix-exec.o util.o
48
49OBJS_TS_EDIT = hime-ts-edit.o \
50			fullchar.o \
51			gtab-init.o gtab-list.o gtab-tsin-fname.o gtab-util.o \
52			hime-common.o hime-conf.o hime-icon.o hime-settings.o \
53			lang.o locale.o \
54			pho-dbg.o pho-sym.o pho-util.o pho2pinyin.o \
55			pinyin.o \
56			table-update.o tsin-util.o unix-exec.o util.o
57
58OBJS_JUYIN_LEARN = hime-juyin-learn.o \
59			hime-common.o hime-conf.o hime-icon.o hime-settings.o \
60			locale.o \
61			pho-dbg.o pho-sym.o pho-util.o pho2pinyin.o \
62			pinyin.o \
63			table-update.o util.o
64
65OBJS_hime-sim2trad = hime-sim2trad.o \
66			hime-common.o hime-conf.o hime-icon.o hime-settings.o \
67			locale.o \
68			pho2pinyin.o pinyin.o \
69			t2s-lookup.o util.o
70
71OBJS_hime-phod2a = hime-phod2a.o \
72			hime-common.o hime-conf.o hime-settings.o \
73			locale.o \
74			pho-dbg.o pho-sym.o pho-util.o pho2pinyin.o \
75			pinyin.o \
76			table-update.o util.o
77
78OBJS_hime-tsa2d32 = hime-tsa2d32.o \
79			hime-common.o hime-conf.o hime-settings.o \
80			locale.o \
81			pho-dbg.o pho-lookup.o pho-sym.o pho2pinyin.o \
82			pinyin.o \
83			util.o
84
85OBJS_hime-phoa2d = hime-phoa2d.o \
86			hime-common.o hime-conf.o hime-settings.o \
87			locale.o \
88			pho-dbg.o pho-lookup.o pho-sym.o pho2pinyin.o \
89			pinyin.o \
90			util.o
91
92OBJS_kbmcv = kbmcv.o \
93			locale.o pho-sym.o util.o
94
95OBJS_hime-tsd2a32 = hime-tsd2a32.o \
96			gtab-dbg.o \
97			hime-common.o hime-conf.o hime-settings.o \
98			locale.o \
99			pho-dbg.o pho-sym.o pho2pinyin.o \
100			pinyin.o \
101			util.o
102
103OBJS_cin2gtab     = hime-cin2gtab.o gtab-util.o locale.o util.o
104OBJS_gtab2cin     = hime-gtab2cin.o gtab-util.o locale.o util.o
105OBJS_gtab_merge   = hime-gtab-merge.o gtab-util.o locale.o util.o
106OBJS_hime_setup   = hime-setup.o \
107					about.o \
108					gtab-list.o \
109					hime-common.o hime-conf.o hime-exec-script.o hime-icon.o \
110					hime-module-cb.o hime-settings.o hime-setup-appearance.o \
111					hime-setup-gtab.o hime-setup-list.o hime-setup-pho.o \
112					lang.o locale.o \
113					pho-kbm-name.o pho2pinyin.o pinyin.o \
114					util.o
115
116OBJS_hime_gb_toggle  = hime-gb-toggle.o \
117					hime-common.o hime-conf.o hime-settings.o \
118					locale.o \
119					pho2pinyin.o pinyin.o\
120					util.o
121
122OBJS_hime_message    = hime-message.o \
123					hime-common.o hime-conf.o hime-settings.o \
124					locale.o \
125					pho2pinyin.o pinyin.o \
126					util.o
127
128OBJS_pin_juyin       = pin-juyin.o locale.o pho-lookup.o pho-sym.o util.o
129
130OBJS_tsin2gtab_phrase = hime-tsin2gtab-phrase.o \
131						gtab-dbg.o \
132						hime-common.o hime-conf.o hime-settings.o \
133						lang.o locale.o \
134						pho-dbg.o pho-sym.o pho2pinyin.o \
135						pinyin.o \
136						util.o
137
138
139ifeq ($(USE_XIM),Y)
140IMdkitLIB   = IMdkit/lib/libXimd.a
141CFLAGS     += -DUSE_XIM=1
142OBJS       += IC.o
143endif
144
145ifeq ($(USE_SYSTEM_TRAY),Y)
146CFLAGS     += -DTRAY_ENABLED=1
147OBJS       += tray.o tray-double.o
148ifeq ($(GTK),gtk+-2.0)
149OBJS       += gdkpixbuf-drawable.o
150endif
151ifeq ($(USE_UNITY_TRAY),Y)
152CFLAGS     += -DTRAY_UNITY=1
153OBJS       += tray-appindicator.o
154endif
155endif
156
157ifeq ($(USE_I18N),Y)
158CFLAGS     += -DHIME_I18N_MESSAGE=1
159endif
160
161ifeq ($(USE_TSIN),Y)
162hime_tsin_o = tsin.o tsin-util.o win0.o win1.o tsin-parse.o
163CFLAGS     += -DUSE_TSIN=1
164OBJS       += $(hime_tsin_o)
165endif
166
167# Temporary workaround to turn off Tsin, will be fixed later
168ifeq ($(USE_TSIN),N)
169OBJS       += tsin.o tsin-util.o win0.o win1.o tsin-parse.o
170endif
171
172ifeq ($(GIT_HAVE),Y)
173CFLAGS     += -DGIT_HASH=\"$(GIT_HASH)\" -DGIT_HAVE=1
174endif
175
176PROGS     = hime \
177	hime-tsd2a32 hime-tsa2d32 hime-phoa2d hime-phod2a \
178	hime-tslearn hime-setup hime-cin2gtab hime-gtab2cin \
179	hime-juyin-learn hime-sim2trad hime-gb-toggle hime-message \
180	hime-gtab-merge hime-tsin2gtab-phrase hime-ts-edit
181
182PROGS_SYM = hime-trad2sim hime-exit hime-sim hime-trad hime-kbm-toggle
183
184PROGS_CV  = kbmcv pin-juyin
185
186.SUFFIXES:  .c .o .E .pico .cpp
187
188.cpp.o:
189	@echo "  $< -> $@"
190	$(CCX) $(CPPFLAGS) $(CFLAGS) -c $<
191.c.o:
192	@echo "  $< -> $@"
193	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
194.c.pico:
195	@echo "  $< -> $@"
196	$(CC) $(CPPFLAGS) $(CFLAGS) -c -fpic -o $@ $<
197.cpp.pico:
198	@echo "  $< -> $@"
199	$(CCX) $(CPPFLAGS) $(CFLAGS) -c -fpic -o $@ $<
200.c.E:
201	@echo "  $< -> $@"
202	$(CC) $(CPPFLAGS) $(CFLAGS) -E -o $@ $<
203.cpp.E:
204	@echo "  $< -> $@"
205	$(CCX) $(CPPFLAGS) $(CFLAGS) -E -o $@ $<
206
207.PHONY: all
208all: $(PROGS) $(PROGS_SYM) $(DATA) $(PROGS_CV)
209	$(MAKE) -C modules
210	if [ $(GTK_IM) = 'Y' ]; then $(MAKE) -C gtk-im; fi
211	if [ $(GTK3_IM) = 'Y' ]; then $(MAKE) -C gtk3-im; fi
212	if [ $(QT5_IM) = 'Y' ]; then $(MAKE) -C qt5-im; fi
213
214$(IMdkitLIB):
215	@echo "building $@ ..."
216	$(MAKE) -C IMdkit/lib
217
218im-client/libhime-im-client.so:
219	@echo "building $@ ..."
220	$(MAKE) -C im-client
221
222hime: $(OBJS) $(IMdkitLIB) $(OBJ_IMSRV)
223	@echo "linking $@ ..."
224ifeq ($(FREEBSD), 0)
225	$(CCLD) $(gcc_ld_run_path) -o $@ $(OBJS) $(IMdkitLIB) $(OBJ_IMSRV) \
226		-lXtst $(LDFLAGS) -L/usr/X11R6/$(LIB)
227else
228	$(CCLD) $(gcc_ld_run_path) -o $@ $(OBJS) $(IMdkitLIB) $(OBJ_IMSRV) \
229		-lXtst $(LDFLAGS) -L/usr/local/$(LIB)
230endif
231	@rm -f core.* vgcore.*
232
233hime-tslearn: $(OBJS_TSLEARN) im-client/libhime-im-client.so
234	@echo "linking $@ ..."
235	$(CCLD) $(gcc_ld_run_path) -o $@ $^ -L./im-client -lhime-im-client \
236		$(LDFLAGS)
237
238hime-ts-edit: $(OBJS_TS_EDIT) im-client/libhime-im-client.so
239	@echo "linking $@ ..."
240	$(CCLD) $(gcc_ld_run_path) -o $@ $^ -L./im-client -lhime-im-client \
241		$(LDFLAGS)
242
243hime-juyin-learn: $(OBJS_JUYIN_LEARN)
244	@echo "linking $@ ..."
245	$(CCLD) -o $@ $^ $(LDFLAGS)
246	@rm -f core.*
247
248hime-sim2trad: $(OBJS_hime-sim2trad)
249	@echo "linking $@ ..."
250	$(CC) $(gcc_ld_run_path) -o $@ $^ $(LDFLAGS)
251	@rm -f core.*
252
253hime-trad2sim:  hime-sim2trad
254	ln -sf hime-sim2trad $@
255
256hime-setup: $(OBJS_hime_setup) im-client/libhime-im-client.so
257	@echo "linking $@ ..."
258	@rm -f core.*
259	$(CCLD) $(gcc_ld_run_path) -o $@ $^ -L./im-client -lhime-im-client \
260		$(LDFLAGS)
261
262hime-phoa2d: $(OBJS_hime-phoa2d) im-client/libhime-im-client.so
263	@echo "linking $@ ..."
264	$(CCLD) $(gcc_ld_run_path) -o $@ $^ -L./im-client -lhime-im-client \
265		$(LDFLAGS)
266
267hime-phod2a: $(OBJS_hime-phod2a)
268	@echo "linking $@ ..."
269	$(CCLD) -lX11 -o $@ $^ $(LDFLAGS)
270
271hime-tsa2d32:  $(OBJS_hime-tsa2d32) im-client/libhime-im-client.so
272	@echo "linking $@ ..."
273	$(CCLD) $(gcc_ld_run_path) -o $@ $^ -L./im-client -lhime-im-client \
274		$(LDFLAGS)
275
276hime-tsd2a32: $(OBJS_hime-tsd2a32)
277	@echo "linking $@ ..."
278	$(CCLD) -o $@ $^ $(LDFLAGS)
279
280hime-cin2gtab: $(OBJS_cin2gtab)
281	@echo "linking $@ ..."
282	$(CCLD) -o $@ $^ $(LDFLAGS)
283	@rm -f data/*.gtab
284
285hime-gtab2cin: $(OBJS_gtab2cin)
286	@echo "linking $@ ..."
287	$(CCLD) -o $@ $^ $(LDFLAGS)
288
289hime-gtab-merge: $(OBJS_gtab_merge)
290	@echo "linking $@ ..."
291	$(CCLD) -o $@ $^ $(LDFLAGS)
292
293kbmcv: $(OBJS_kbmcv)
294	@echo "linking $@ ..."
295	$(CCLD) -o $@ $^ $(LDFLAGS)
296
297hime-gb-toggle: $(OBJS_hime_gb_toggle) im-client/libhime-im-client.so
298	@echo "linking $@ ..."
299	$(CCLD) $(gcc_ld_run_path) -o $@ $^ -L./im-client -lhime-im-client \
300		$(LDFLAGS)
301
302hime-kbm-toggle: hime-gb-toggle
303	ln -sf hime-gb-toggle $@
304
305hime-exit: hime-gb-toggle
306	ln -sf hime-gb-toggle $@
307
308hime-trad: hime-gb-toggle
309	ln -sf hime-gb-toggle $@
310
311hime-sim: hime-gb-toggle
312	ln -sf hime-gb-toggle $@
313
314hime-message: $(OBJS_hime_message) im-client/libhime-im-client.so
315	@echo "linking $@ ..."
316	$(CCLD) $(gcc_ld_run_path) -o $@ $^ -L./im-client -lhime-im-client \
317		$(LDFLAGS)
318
319pin-juyin: $(OBJS_pin_juyin)
320	@echo "linking $@ ..."
321	$(CCLD) -o $@ $^ $(LDFLAGS)
322
323hime-tsin2gtab-phrase: $(OBJS_tsin2gtab_phrase)
324	@echo "linking $@ ..."
325	$(CCLD) -o $@ $^ $(LDFLAGS)
326
327.PHONY: install
328install:
329	install -d "$(bindir)"
330	install $(PROGS) "$(bindir)"
331	rm -f "$(bindir)/hime-trad2sim"; ln -sf hime-sim2trad "$(bindir)/hime-trad2sim"
332	rm -f "$(bindir)/hime-exit"; ln -sf hime-gb-toggle "$(bindir)/hime-exit"
333	rm -f "$(bindir)/hime-trad"; ln -sf hime-gb-toggle "$(bindir)/hime-trad"
334	rm -f "$(bindir)/hime-sim"; ln -sf hime-gb-toggle "$(bindir)/hime-sim"
335	rm -f "$(bindir)/hime-kbm-toggle"; ln -sf hime-gb-toggle "$(bindir)/hime-kbm-toggle"
336	install -d "$(himelibdir)"
337	install -d "$(includedir)"
338	install -m 644 im-client/hime-im-client.h im-client/hime-im-client-attr.h "$(includedir)"
339	$(MAKE) -C im-client install
340	$(MAKE) -C modules install
341	if [ $(GTK_IM) = 'Y' ]; then $(MAKE) -C gtk-im install; fi
342	if [ $(GTK3_IM) = 'Y' ]; then $(MAKE) -C gtk3-im install; fi
343	if [ $(QT5_IM) = 'Y' ]; then $(MAKE) -C qt5-im install; fi
344
345.PHONY: uninstall
346uninstall:
347	cd $(bindir) && rm -f $(PROGS) $(PROGS_SYM)
348	cd $(includedir) && rm -f hime-im-client.h hime-im-client-attr.h
349	$(MAKE) -C im-client uninstall
350	$(MAKE) -C modules uninstall
351	if [ $(GTK_IM) = 'Y' ]; then $(MAKE) -C gtk-im uninstall; fi
352	if [ $(GTK3_IM) = 'Y' ]; then $(MAKE) -C gtk3-im uninstall; fi
353	if [ $(QT5_IM) = 'Y' ]; then $(MAKE) -C qt5-im uninstall; fi
354	rmdir --ignore-fail-on-non-empty $(bindir)
355	rmdir --ignore-fail-on-non-empty $(himelibdir)
356	rmdir --ignore-fail-on-non-empty $(includedir)
357
358.PHONY: clean
359clean:
360	@echo "clean up"
361	$(MAKE) -C IMdkit clean
362	$(MAKE) -C im-client clean
363	$(MAKE) -C modules clean
364	if [ $(GTK_IM) = 'Y' ]; then $(MAKE) -C gtk-im clean; fi
365	if [ $(GTK3_IM) = 'Y' ]; then $(MAKE) -C gtk3-im clean; fi
366	if [ $(QT5_IM) = 'Y' ]; then $(MAKE) -C qt5-im clean; fi
367	@rm -f *.o *.E *.db *.pico *.so tags $(PROGS) $(PROGS_CV) \
368		$(DATA) .depend $(PROGS_SYM) hime.log hime-fedora.spec
369	@find . '(' -name '.ted*' -o -name '*~' -o -name 'core.*' -o -name 'vgcore.*' ')' -exec rm {} \;
370
371.depend:
372	@echo "building $@ ..."
373	$(CCX) $(CPPFLAGS) $(CFLAGS) -MM *.c > $@
374
375
376include .depend
377