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