xref: /illumos-gate/usr/src/cmd/localedef/Makefile (revision ff7af0d3beb1bddf8bb93afc2e9042dc3828be3d)
1#
2# This file and its contents are supplied under the terms of the
3# Common Development and Distribution License ("CDDL"), version 1.0.
4# You may only use this file in accordance with the terms of version
5# 1.0 of the CDDL.
6#
7# A full copy of the text of the CDDL should have accompanied this
8# source.  A copy of the CDDL is also available via the Internet at
9# http://www.illumos.org/license/CDDL.
10#
11
12#
13# Copyright 2017 Nexenta Systems, Inc.
14# Copyright 2011 EveryCity Ltd. All rights reserved.
15# Copyright 2013 DEY Storage Systems, Inc.
16# Copyright 2016 Joyent, Inc.
17#
18
19PROG=localedef
20
21NDIR=native
22NPROG=$(NDIR)/localedef
23
24include ../Makefile.cmd
25
26OBJS = 	charmap.o collate.o ctype.o messages.o monetary.o numeric.o time.o \
27	scanner.o localedef.o wide.o parser.tab.o
28NOBJS = $(OBJS:%.o=native/%.o) native/avl.o native/mkdirp.o
29
30HDRS	= localedef.h
31
32SRCS   = $(OBJS:%.o=%.c)
33
34CPPFLAGS	+= -I $(SRC)/lib/libc/port/locale
35NATIVE_CPPFLAGS	+= -I $(SRC)/lib/libc/port/locale -DNATIVE
36CERRWARN	+= -_gcc=-Wno-unused-label
37LDLIBS		+= -lgen
38LDLIBS 		+= -lavl
39
40NATIVELDLIBS=
41
42YFLAGS		= -d -b parser
43
44CLEANFILES	= $(NOBJS) $(OBJS) parser.tab.c parser.tab.h
45CLEANFILES	+= \
46		UTF-8.cm UTF-8.ct \
47		8859-1.cm 8859-2.cm 8859-3.cm 8859-4.cm \
48		8859-5.cm 8859-5.cm 8859-6.cm 8859-7.cm \
49		8859-8.cm 8859-9.cm 8859-9.cm 8859-10.cm \
50		8859-11.cm 8859-13.cm 8859-14.cm 8859-15.cm \
51		8859-16.cm \
52		KOI8-R.cm
53CLOBBERFILES	= $(PROG) $(NPROG) $(POFILE) \
54		GB18030.cm UTF-8.cm
55
56PIFILES		= $(OBJS:%.o=%.i)
57POFILE		= localedef_cmd.po
58
59ISO8859_1_LOCALES	= \
60		da_DK \
61		de_CH de_DE \
62		en_AU en_CA en_GB en_NZ en_US \
63		es_AR es_BO es_CL es_CO es_EC es_ES es_GT es_MX es_NI es_PA \
64		es_PE es_SV es_UY es_VE \
65		fr_CA fr_CH fr_FR \
66		is_IS \
67		it_CH it_IT \
68		sv_SE
69
70ISO8859_2_LOCALES	= \
71		cs_CZ \
72		hr_HR \
73		hu_HU \
74		pl_PL \
75		sq_AL
76
77ISO8859_5_LOCALES	= \
78		bg_BG \
79		mk_MK \
80		ru_RU
81
82ISO8859_6_LOCALES	=
83
84ISO8859_7_LOCALES	= \
85		el_GR
86
87ISO8859_9_LOCALES	= \
88		tr_TR
89
90ISO8859_11_LOCALES	= \
91		th_TH
92
93ISO8859_13_LOCALES	= \
94		lt_LT \
95		lv_LV
96
97ISO8859_15_LOCALES	= \
98		ca_ES \
99		da_DK \
100		de_AT de_DE \
101		en_GB en_IE en_US \
102		es_ES \
103		fi_FI \
104		fr_BE fr_FR \
105		it_IT \
106		nl_BE nl_NL \
107		pt_PT \
108		sv_FI sv_SE
109
110KOI8_R_LOCALES		= \
111		ru_RU
112
113GB18030_LOCALES		= \
114		zh_CN
115
116#
117# All new locales should be in UTF-8 form.
118#
119UTF_8_LOCALES		= \
120		af_ZA \
121		ar_AE ar_BH ar_DZ ar_EG ar_IQ ar_JO ar_KW ar_LB ar_LY ar_MA \
122		ar_OM ar_QA ar_SA ar_TN ar_YE \
123		as_IN \
124		az_AZ \
125		be_BY \
126		bg_BG \
127		bn_BD bn_IN \
128		bo_CN bo_IN \
129		bs_BA \
130		ca_ES \
131		cs_CZ \
132		da_DK \
133		de_AT de_BE de_CH de_DE de_LI de_LU \
134		el_CY el_GR \
135		en_AU en_BW en_BZ en_CA en_GB en_HK en_IE en_IN en_JM en_MH \
136		en_MT en_NA en_NZ en_PH en_PK en_SG en_TT en_US en_ZA en_ZW \
137		es_AR es_BO es_CL es_CO es_CR es_DO es_EC es_ES es_GQ es_GT \
138		es_HN es_MX es_NI es_PA es_PE es_PR es_PY es_SV es_US es_UY \
139		es_VE \
140		et_EE \
141		fi_FI \
142		fil_PH \
143		fr_BE fr_CA fr_CF fr_CH fr_FR fr_GN fr_LU fr_MC fr_MG fr_ML \
144		fr_NE fr_SN \
145		ga_IE \
146		gu_IN \
147		he_IL \
148		hi_IN \
149		hr_HR \
150		hu_HU \
151		hy_AM \
152		id_ID \
153		ii_CN \
154		is_IS \
155		it_CH it_IT \
156		ja_JP \
157		ka_GE \
158		kk_KZ \
159		km_KH \
160		kn_IN \
161		ko_KR \
162		kok_IN \
163		lt_LT \
164		lv_LV \
165		mk_MK \
166		ml_IN \
167		mn_CN mn_MN \
168		mr_IN \
169		ms_MY \
170		mt_MT \
171		ne_IN ne_NP \
172		nl_BE nl_NL \
173		nb_NO \
174		nn_NO \
175		or_IN \
176		pa_IN pa_PK \
177		pl_PL \
178		pt_BR pt_GW pt_MZ pt_PT \
179		ro_MD ro_RO \
180		ru_MD ru_RU ru_UA \
181		sa_IN \
182		si_LK \
183		sk_SK \
184		sl_SI \
185		sq_AL \
186		sr_BA sr_ME sr_RS \
187		sv_FI sv_SE \
188		ta_IN ta_LK \
189		te_IN \
190		th_TH \
191		tr_TR \
192		uk_UA \
193		ug_CN \
194		ur_IN ur_PK \
195		vi_VN \
196		zh_CN zh_HK zh_MO zh_SG zh_TW \
197		zz_AA
198
199UTF8SRCS	= $(UTF_8_LOCALES:%=data/%.UTF-8.src)
200
201LOCNAMES	= \
202		$(ISO8859_1_LOCALES:%=%.ISO8859-1) \
203		$(ISO8859_2_LOCALES:%=%.ISO8859-2) \
204		$(ISO8859_5_LOCALES:%=%.ISO8859-5) \
205		$(ISO8859_6_LOCALES:%=%.ISO8859-6) \
206		$(ISO8859_7_LOCALES:%=%.ISO8859-7) \
207		$(ISO8859_9_LOCALES:%=%.ISO8859-9) \
208		$(ISO8859_11_LOCALES:%=%.ISO8859-11) \
209		$(ISO8859_13_LOCALES:%=%.ISO8859-13) \
210		$(ISO8859_15_LOCALES:%=%.ISO8859-15) \
211		$(KOI8_R_LOCALES:%=%.KOI8-R) \
212		$(GB18030_LOCALES:%=%.GB18030) \
213		$(UTF_8_LOCALES:%=%.UTF-8)
214
215LOCDIRS		= $(LOCNAMES:%=locale/%)
216
217STAMPFILES	= $(LOCDIRS:%=%/stamp)
218
219CATDIRS		= \
220		$(LOCDIRS:%=%/LC_COLLATE) \
221		$(LOCDIRS:%=%/LC_CTYPE) \
222		$(LOCDIRS:%=%/LC_MESSAGES) \
223		$(LOCDIRS:%=%/LC_MONETARY) \
224		$(LOCDIRS:%=%/LC_NUMERIC) \
225		$(LOCDIRS:%=%/LC_TIME)
226
227DATA		= $(CATDIRS:%=%/LCL_DATA)
228
229.PARALLEL:
230# The output from yacc must be emitted serially
231.NO_PARALLEL: parser.tab.c parser.tab.h
232
233DCOLL		= LC_COLLATE/LCL_DATA
234DCTYPE		= LC_CTYPE/LCL_DATA
235DMSGS		= LC_MESSAGES/LCL_DATA
236DMON		= LC_MONETARY/LCL_DATA
237DNUM		= LC_NUMERIC/LCL_DATA
238DTIME		= LC_TIME/LCL_DATA
239
240ROOTLOCDIRS	= $(LOCDIRS:%=$(ROOTLIB)/%)
241ROOTCATDIRS	= $(CATDIRS:%=$(ROOTLIB)/%)
242ROOTDATA	= $(DATA:%=$(ROOTLIB)/%)
243
244#
245# This is a list of locales that happen to have translations for them
246# present in the gate.
247#
248TRANSDIR	= translations
249TRANSLOCS	= \
250		zz_AA.UTF-8
251TRANSMOS	= $(TRANSLOCS:%=$(TRANSDIR)/%.mo)
252
253OSTMOFILE	= LC_MESSAGES/SUNW_OST_OSLIB.mo
254
255PRIVTRANSLOCS	= \
256		zz_AA.UTF-8
257PRIVFILE	= LC_MESSAGES/priv_names
258
259ROOTTRANSLATIONS = $(TRANSLOCS:%=$(ROOTLIB)/locale/%/$(OSTMOFILE))
260ROOTPRIVTRANS = $(PRIVTRANSLOCS:%=$(ROOTLIB)/locale/%/$(PRIVFILE))
261
262$(ROOTDATA)	:= FILEMODE=0444
263
264.KEEP_STATE:
265
266all: $(PROG) $(DATA)
267
268translate: $(ROOTTRANSLATIONS) $(ROOTPRIVTRANS)
269
270install: all $(ROOTPROG) $(ROOTDATA) $(ROOTTRANSLATIONS) $(ROOTPRIVTRANS)
271
272$(NDIR):
273	-@mkdir -p $@
274
275$(NDIR)/%.o: %.c
276	$(NATIVECC) $(NATIVE_CFLAGS) $(NATIVE_CPPFLAGS) -o $@ -c $<
277
278$(NDIR)/avl.o : ../../common/avl/avl.c
279	$(NATIVECC) $(NATIVE_CFLAGS) $(NATIVE_CPPFLAGS) -o $@ -c \
280	  ../../common/avl/avl.c
281
282$(NDIR)/mkdirp.o : ../../lib/libgen/common/mkdirp.c
283	$(NATIVECC) $(NATIVE_CFLAGS) $(NATIVE_CPPFLAGS) -o $@ -c \
284	  ../../lib/libgen/common/mkdirp.c
285
286$(NPROG): $(NDIR) .WAIT $(NOBJS)
287	$(LINK.c) $(NOBJS) -o $@ $(NATIVELDLIBS)
288	$(POST_PROCESS)
289
290$(PROG): $(OBJS)
291	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
292	$(POST_PROCESS)
293
294$(OBJS) $(NOBJS):	parser.tab.h
295
296parser.tab.c parser.tab.h: parser.y $(HDRS)
297	$(YACC) $(YFLAGS) parser.y
298
299lint:	$(SRCS)
300	$(LINT.c) $(CPPFLAGS) $(SRCS)
301
302clean:
303	$(RM) $(CLEANFILES)
304	$(RM) $(STAMPFILES)
305
306clobber: clean
307	$(RM) $(CLOBBERFILES)
308	$(RM) -r $(LOCDIRS)
309	$(RM) -r $(NDIR)
310	$(RM) $(TRANSMOS)
311
312$(POFILE):	$(PIFILES)
313	$(RM) $@
314	$(RM) messages.po
315	$(XGETTEXT) -s $(PIFILES)
316	$(SED) -e '/domain/d' messages.po > $@
317	$(RM) $(PIFILES) messages.po
318
319locale $(ROOTLOCDIRS) $(ROOTCATDIRS):
320	$(INS.dir)
321
322$(ROOTBIN)/%: $(ROOTBIN) %
323	$(INS.file)
324
325# Strip LC_CTYPE contents for UTF-8 locales and replace them
326# with UTF-8.ct we compiled
327locale/%.UTF-8/stamp:		data/%.UTF-8.src UTF-8.cm \
328				UTF-8.ct locale $(NPROG)
329	$(SED) '/^LC_CTYPE/,/^END LC_CTYPE/d;$$r UTF-8.ct' $< | \
330		./$(NPROG) -U -w data/widths.txt -f UTF-8.cm $(@D)
331	$(TOUCH) $@
332# Convert EURO_SIGN to CURRENCY_SIGN for the ISO8859-1 locales
333locale/%.ISO8859-1/stamp:	data/%.UTF-8.src 8859-1.cm locale $(NPROG)
334	sed 's/EURO_SIGN/CURRENCY_SIGN/' $< > $<.tmp
335	./$(NPROG) -U -w data/widths.txt -i $<.tmp -f 8859-1.cm $(@D)
336	rm -f $<.tmp
337	$(TOUCH) $@
338locale/%.ISO8859-2/stamp:	data/%.UTF-8.src 8859-2.cm locale $(NPROG)
339	./$(NPROG) -U -w data/widths.txt -i $< -f 8859-2.cm $(@D)
340	$(TOUCH) $@
341locale/%.ISO8859-5/stamp:	data/%.UTF-8.src 8859-5.cm locale $(NPROG)
342	./$(NPROG) -U -w data/widths.txt -i $< -f 8859-5.cm $(@D)
343	$(TOUCH) $@
344locale/%.ISO8859-7/stamp:	data/%.UTF-8.src 8859-7.cm locale $(NPROG)
345	./$(NPROG) -U -w data/widths.txt -i $< -f 8859-7.cm $(@D)
346	$(TOUCH) $@
347locale/%.ISO8859-6/stamp:	data/%.UTF-8.src 8859-6.cm locale $(NPROG)
348	./$(NPROG) -U -w data/widths.txt -i $< -f 8859-6.cm $(@D)
349	$(TOUCH) $@
350locale/%.ISO8859-9/stamp:	data/%.UTF-8.src 8859-9.cm locale $(NPROG)
351	./$(NPROG) -U -w data/widths.txt -i $< -f 8859-9.cm $(@D)
352	$(TOUCH) $@
353locale/%.ISO8859-11/stamp:	data/%.UTF-8.src 8859-11.cm locale $(NPROG)
354	./$(NPROG) -U -w data/widths.txt -i $< -f 8859-11.cm $(@D)
355	$(TOUCH) $@
356locale/%.ISO8859-13/stamp:	data/%.UTF-8.src 8859-13.cm locale $(NPROG)
357	./$(NPROG) -U -w data/widths.txt -i $< -f 8859-13.cm $(@D)
358	$(TOUCH) $@
359locale/%.ISO8859-15/stamp:	data/%.UTF-8.src 8859-15.cm locale $(NPROG)
360	./$(NPROG) -U -w data/widths.txt -i $< -f 8859-15.cm $(@D)
361	$(TOUCH) $@
362locale/%.KOI8-R/stamp:		data/%.UTF-8.src KOI8-R.cm locale $(NPROG)
363	./$(NPROG) -U -w data/widths.txt -i $< -f KOI8-R.cm $(@D)
364	$(TOUCH) $@
365locale/%.GB18030/stamp:		data/%.UTF-8.src GB18030.cm locale $(NPROG)
366	./$(NPROG) -U -w data/widths.txt -i $< -f GB18030.cm $(@D)
367	$(TOUCH) $@
368
369locale/%/$(DCOLL):	locale/%/stamp
370locale/%/$(DCTYPE):	locale/%/stamp
371locale/%/$(DMSGS):	locale/%/stamp
372locale/%/$(DMON):	locale/%/stamp
373locale/%/$(DNUM):	locale/%/stamp
374locale/%/$(DTIME):	locale/%/stamp
375
376UTF-8.cm: data/UTF-8.cm
377	$(LN) -sf data/UTF-8.cm  $@
378
379UTF-8.ct: data/ctype.sh data/manual-input.UTF-8 $(UTF8SRCS)
380	$(SH) data/ctype.sh $(UTF8SRCS) > $@
381
382GB18030.cm: data/GB18030.cm
383	$(LN) -sf data/GB18030.cm  $@
384
385%.cm: data/%.TXT UTF-8.cm
386	$(RM) $@
387	$(PERL) data/convert_map.pl $< > $@
388
389$(ROOTDATA):	$(ROOTLOCDIRS) $(ROOTCATDIRS) $(DATA)
390	$(RM) $@
391	$(CP) $(@:$(ROOTLIB)/%=%) $@
392	$(CHMOD) 0444 $@
393
394%.mo: %.po
395	$(MSGFMT) -o $@ $<
396
397$(ROOTLIB)/locale/%/$(OSTMOFILE): $(TRANSDIR)/%.mo
398	$(INS.rename)
399	$(CHMOD) 0444 $@
400
401$(ROOTLIB)/locale/%/$(PRIVFILE): $(TRANSDIR)/%.priv
402	$(INS.rename)
403	$(CHMOD) 0444 $@
404