Googler | 262be5a | 2020-02-12 09:01:32 -0800 | [diff] [blame^] | 1 | # Copyright (C) 1997-2014 Free Software Foundation, Inc. |
| 2 | # This file is part of the GNU C Library. |
| 3 | |
| 4 | # The GNU C Library is free software; you can redistribute it and/or |
| 5 | # modify it under the terms of the GNU Lesser General Public |
| 6 | # License as published by the Free Software Foundation; either |
| 7 | # version 2.1 of the License, or (at your option) any later version. |
| 8 | |
| 9 | # The GNU C Library is distributed in the hope that it will be useful, |
| 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 12 | # Lesser General Public License for more details. |
| 13 | |
| 14 | # You should have received a copy of the GNU Lesser General Public |
| 15 | # License along with the GNU C Library; if not, see |
| 16 | # <http://www.gnu.org/licenses/>. |
| 17 | |
| 18 | # |
| 19 | # Makefile for iconv data and code. |
| 20 | # |
| 21 | subdir := iconvdata |
| 22 | |
| 23 | # Names of all the shared objects which implement the transformations. |
| 24 | modules := ISO8859-1 ISO8859-2 ISO8859-3 ISO8859-4 ISO8859-5 \ |
| 25 | ISO8859-6 ISO8859-7 ISO8859-8 ISO8859-9 ISO8859-10 \ |
| 26 | ISO8859-11 ISO8859-13 ISO8859-14 ISO8859-15 ISO8859-16 \ |
| 27 | T.61 ISO_6937 SJIS KOI-8 HP-ROMAN8 HP-ROMAN9 EBCDIC-AT-DE \ |
| 28 | EBCDIC-AT-DE-A EBCDIC-CA-FR EUC-KR UHC JOHAB libJIS libKSC \ |
| 29 | BIG5 EUC-JP libGB EUC-CN libCNS EUC-TW ISO646 EBCDIC-DK-NO \ |
| 30 | EBCDIC-DK-NO-A EBCDIC-ES EBCDIC-ES-A EBCDIC-ES-S EBCDIC-FI-SE \ |
| 31 | EBCDIC-FI-SE-A EBCDIC-FR EBCDIC-IS-FRISS EBCDIC-IT EBCDIC-PT \ |
| 32 | EBCDIC-UK EBCDIC-US IBM037 IBM038 IBM274 IBM275 IBM423 \ |
| 33 | IBM500 IBM870 IBM871 IBM891 IBM903 IBM904 IBM905 IBM1047 \ |
| 34 | IBM874 CP737 CP775 ISO-2022-KR HP-TURKISH8 HP-THAI8 HP-GREEK8 \ |
| 35 | KOI8-R LATIN-GREEK LATIN-GREEK-1 IBM256 IBM273 IBM277 IBM278 \ |
| 36 | IBM280 IBM281 IBM284 IBM285 IBM290 IBM297 IBM420 IBM424 \ |
| 37 | IBM437 IBM850 IBM851 IBM852 IBM855 IBM857 IBM860 IBM861 \ |
| 38 | IBM862 IBM863 IBM864 IBM865 IBM868 IBM869 IBM875 IBM880 \ |
| 39 | IBM866 CP1258 IBM922 IBM1124 IBM1129 IBM932 IBM943 \ |
| 40 | IBM856 IBM930 IBM933 IBM935 IBM937 IBM939 IBM1046 \ |
| 41 | IBM1132 IBM1133 IBM1160 IBM1161 IBM1162 IBM1163 IBM1164 \ |
| 42 | IBM918 IBM1004 IBM1026 CP1125 CP1250 CP1251 CP1252 CP1253 \ |
| 43 | CP1254 CP1255 CP1256 CP1257 ISO-2022-JP MACINTOSH IEC_P27-1 \ |
| 44 | ASMO_449 ANSI_X3.110 CSN_369103 CWI DEC-MCS ECMA-CYRILLIC \ |
| 45 | GOST_19768-74 GREEK-CCITT GREEK7 GREEK7-OLD INIS INIS-8 \ |
| 46 | INIS-CYRILLIC ISO_6937-2 ISO_2033 ISO_5427 ISO_5427-EXT \ |
| 47 | ISO_5428 ISO_10367-BOX MAC-IS MAC-UK NATS-DANO NATS-SEFI \ |
| 48 | SAMI-WS2 ISO-IR-197 TIS-620 KOI8-U GBK ISIRI-3342 GBGBK \ |
| 49 | ISO-2022-CN libISOIR165 UTF-16 UNICODE UTF-32 UTF-7 BIG5HKSCS \ |
| 50 | GB18030 ISO-2022-CN-EXT VISCII GBBIG5 CP10007 KOI8-T \ |
| 51 | GEORGIAN-PS GEORGIAN-ACADEMY ISO-IR-209 MAC-SAMI ARMSCII-8 \ |
| 52 | TCVN5712-1 libJISX0213 EUC-JISX0213 SHIFT_JISX0213 \ |
| 53 | ISO-2022-JP-3 TSCII IBM866NAV CP932 EUC-JP-MS PT154 RK1048 \ |
| 54 | IBM1025 IBM1122 IBM1137 IBM1153 IBM1154 IBM1155 IBM1156 \ |
| 55 | IBM1157 IBM1158 IBM803 IBM901 IBM902 IBM921 IBM1008 \ |
| 56 | IBM1008_420 IBM1097 IBM1112 IBM1123 IBM1130 IBM1140 IBM1141 \ |
| 57 | IBM1142 IBM1143 IBM1144 IBM1145 IBM1146 IBM1147 IBM1148 \ |
| 58 | IBM1149 IBM1166 IBM1167 IBM4517 IBM4899 IBM4909 IBM4971 \ |
| 59 | IBM5347 IBM9030 IBM9066 IBM9448 IBM12712 IBM16804 \ |
| 60 | IBM1364 IBM1371 IBM1388 IBM1390 IBM1399 ISO_11548-1 MIK BRF \ |
| 61 | MAC-CENTRALEUROPE KOI8-RU ISO8859-9E \ |
| 62 | CP770 CP771 CP772 CP773 CP774 |
| 63 | |
| 64 | modules.so := $(addsuffix .so, $(modules)) |
| 65 | |
| 66 | include ../Makeconfig |
| 67 | |
| 68 | ifeq (yes,$(build-shared)) |
| 69 | tests = bug-iconv1 bug-iconv2 tst-loading tst-e2big tst-iconv4 bug-iconv4 \ |
| 70 | tst-iconv6 bug-iconv5 bug-iconv6 tst-iconv7 bug-iconv8 bug-iconv9 |
| 71 | ifeq ($(have-thread-library),yes) |
| 72 | tests += bug-iconv3 |
| 73 | endif |
| 74 | |
| 75 | test-srcs := tst-table-from tst-table-to |
| 76 | |
| 77 | bug-iconv6-ENV = LOCPATH=$(common-objpfx)localedata |
| 78 | tst-iconv7-ENV = LOCPATH=$(common-objpfx)localedata |
| 79 | endif |
| 80 | |
| 81 | # No code here is in libc.so. |
| 82 | CPPFLAGS += -DNOT_IN_libc |
| 83 | |
| 84 | libJIS-routines := jis0201 jis0208 jis0212 |
| 85 | libKSC-routines := ksc5601 |
| 86 | libGB-routines := gb2312 |
| 87 | libCNS-routines := cns11643l1 cns11643 |
| 88 | libISOIR165-routines := iso-ir-165 |
| 89 | libJISX0213-routines := jisx0213 |
| 90 | |
| 91 | LDFLAGS-EUC-KR.so = $(LDFLAGS-rpath-ORIGIN) |
| 92 | $(objpfx)EUC-KR.so: $(objpfx)libKSC.so |
| 93 | LDFLAGS-JOHAB.so = $(LDFLAGS-rpath-ORIGIN) |
| 94 | $(objpfx)JOHAB.so: $(objpfx)libKSC.so |
| 95 | LDFLAGS-UHC.so = $(LDFLAGS-rpath-ORIGIN) |
| 96 | $(objpfx)UHC.so: $(objpfx)libKSC.so |
| 97 | LDFLAGS-EUC-JP.so = $(LDFLAGS-rpath-ORIGIN) |
| 98 | $(objpfx)EUC-JP.so: $(objpfx)libJIS.so |
| 99 | LDFLAGS-EUC-JP-MS.so = $(LDFLAGS-rpath-ORIGIN) |
| 100 | $(objpfx)EUC-JP-MS.so: $(objpfx)libJIS.so |
| 101 | LDFLAGS-EUC-CN.so = $(LDFLAGS-rpath-ORIGIN) |
| 102 | $(objpfx)EUC-CN.so: $(objpfx)libGB.so |
| 103 | LDFLAGS-EUC-TW.so = $(LDFLAGS-rpath-ORIGIN) |
| 104 | $(objpfx)EUC-TW.so: $(objpfx)libCNS.so |
| 105 | LDFLAGS-EUC-JISX0213.so = $(LDFLAGS-rpath-ORIGIN) |
| 106 | $(objpfx)EUC-JISX0213.so: $(objpfx)libJISX0213.so |
| 107 | LDFLAGS-SHIFT_JISX0213.so = $(LDFLAGS-rpath-ORIGIN) |
| 108 | $(objpfx)SHIFT_JISX0213.so: $(objpfx)libJISX0213.so |
| 109 | |
| 110 | LDFLAGS-ISO-2022-JP.so = $(LDFLAGS-rpath-ORIGIN) |
| 111 | $(objpfx)ISO-2022-JP.so: $(objpfx)libJIS.so $(objpfx)libGB.so \ |
| 112 | $(objpfx)libCNS.so $(objpfx)libKSC.so |
| 113 | LDFLAGS-ISO-2022-JP-3.so = $(LDFLAGS-rpath-ORIGIN) |
| 114 | $(objpfx)ISO-2022-JP-3.so: $(objpfx)libJIS.so $(objpfx)libJISX0213.so |
| 115 | LDFLAGS-ISO-2022-KR.so = $(LDFLAGS-rpath-ORIGIN) |
| 116 | $(objpfx)ISO-2022-KR.so: $(objpfx)libKSC.so |
| 117 | LDFLAGS-ISO-2022-CN.so = $(LDFLAGS-rpath-ORIGIN) |
| 118 | $(objpfx)ISO-2022-CN.so: $(objpfx)libGB.so $(objpfx)libCNS.so |
| 119 | LDFLAGS-ISO-2022-CN-EXT.so = $(LDFLAGS-rpath-ORIGIN) |
| 120 | $(objpfx)ISO-2022-CN-EXT.so: $(objpfx)libGB.so $(objpfx)libCNS.so \ |
| 121 | $(objpfx)libISOIR165.so |
| 122 | |
| 123 | LDFLAGS-libJIS.so = $(LDFLAGS-soname-fname) |
| 124 | LDFLAGS-libKSC.so = $(LDFLAGS-soname-fname) |
| 125 | LDFLAGS-libGB.so = $(LDFLAGS-soname-fname) |
| 126 | LDFLAGS-libCNS.so = $(LDFLAGS-soname-fname) |
| 127 | LDFLAGS-libISOIR165.so = $(LDFLAGS-soname-fname) |
| 128 | LDFLAGS-libJISX0213.so = $(LDFLAGS-soname-fname) |
| 129 | |
| 130 | # We build the transformation modules only when we build shared libs. |
| 131 | ifeq (yes,$(build-shared)) |
| 132 | |
| 133 | # Rule to generate the shared objects. |
| 134 | charmaps = ../localedata/charmaps |
| 135 | -include $(objpfx)iconv-rules |
| 136 | extra-modules-left := $(modules) |
| 137 | include extra-module.mk |
| 138 | |
| 139 | |
| 140 | extra-objs += $(modules.so) |
| 141 | install-others = $(addprefix $(inst_gconvdir)/, $(modules.so)) \ |
| 142 | $(inst_gconvdir)/gconv-modules |
| 143 | |
| 144 | # We can build the conversion tables for numerous charsets automatically. |
| 145 | |
| 146 | gen-8bit-modules := iso8859-2 iso8859-3 iso8859-4 iso8859-6 iso8859-9 koi-8 \ |
| 147 | ebcdic-at-de ebcdic-at-de-a ebcdic-ca-fr ebcdic-dk-no \ |
| 148 | ebcdic-dk-no-a ebcdic-es-s ebcdic-fi-se ebcdic-fi-se-a \ |
| 149 | ebcdic-fr ebcdic-it ebcdic-pt ebcdic-us \ |
| 150 | ibm037 ibm038 ibm274 ibm275 ibm423 ibm500 ibm870 ibm871 \ |
| 151 | ibm891 ibm903 ibm904 ibm905 ibm1047 |
| 152 | |
| 153 | gen-8bit-gap-modules := koi8-r latin-greek latin-greek-1 ibm256 ibm273 \ |
| 154 | ibm277 ibm278 ibm280 ibm281 ibm284 ibm285 ibm290 \ |
| 155 | ibm297 ibm420 ibm424 ibm437 ibm850 ibm851 ibm852 \ |
| 156 | ibm855 ibm857 ibm860 ibm861 ibm862 ibm863 ibm864 \ |
| 157 | ibm865 ibm868 ibm869 ibm875 ibm880 ibm918 ibm1004 \ |
| 158 | ibm1026 cp1125 cp1250 cp1251 cp1252 cp1253 cp1254 \ |
| 159 | cp1256 cp1257 ibm866 iso8859-5 iso8859-7 iso8859-8 \ |
| 160 | iso8859-10 macintosh iec_p27-1 asmo_449 \ |
| 161 | csn_369103 cwi dec-mcs ecma-cyrillic gost_19768-74 \ |
| 162 | greek-ccitt greek7 greek7-old inis inis-8 \ |
| 163 | inis-cyrillic iso_2033 iso_5427 iso_5427-ext \ |
| 164 | iso_5428 iso_10367-box mac-is nats-dano nats-sefi \ |
| 165 | iso8859-13 iso8859-14 iso8859-15 mac-uk sami-ws2 \ |
| 166 | iso-ir-197 tis-620 koi8-u ibm874 cp10007 koi8-t \ |
| 167 | georgian-ps georgian-academy iso-ir-209 mac-sami \ |
| 168 | iso8859-11 ibm866nav pt154 rk1048 mik brf \ |
| 169 | mac-centraleurope koi8-ru hp-roman8 hp-roman9 \ |
| 170 | ebcdic-es ebcdic-es-a ebcdic-is-friss ebcdic-uk \ |
| 171 | iso8859-16 viscii iso8859-9e hp-turkish8 \ |
| 172 | hp-thai8 hp-greek8 cp770 cp771 cp772 cp773 cp774 |
| 173 | |
| 174 | |
| 175 | gen-special-modules := iso8859-7jp |
| 176 | |
| 177 | generated-modules := $(gen-8bit-modules) $(gen-8bit-gap-modules) \ |
| 178 | $(gen-special-modules) |
| 179 | |
| 180 | generated = $(generated-modules:=.h) $(generated-modules:=.stmp) \ |
| 181 | iconv-test.out iconv-rules tst-loading.mtrace \ |
| 182 | mtrace-tst-loading tst-tables.out iconv-test.xxx |
| 183 | ifdef objpfx |
| 184 | generated += gconv-modules |
| 185 | endif |
| 186 | |
| 187 | # Rules to generate the headers. |
| 188 | export AWK |
| 189 | |
| 190 | define generate-8bit-table |
| 191 | $(make-target-directory) |
| 192 | LC_ALL=C $(SHELL) ./gen-8bit.sh $< > $(@:stmp=T) |
| 193 | $(move-if-change) $(@:stmp=T) $(@:stmp=h) |
| 194 | touch $@ |
| 195 | endef |
| 196 | |
| 197 | define generate-8bit-gap-table |
| 198 | $(make-target-directory) |
| 199 | LC_ALL=C $(SHELL) ./gen-8bit-gap.sh $< > $(@:stmp=T) |
| 200 | $(move-if-change) $(@:stmp=T) $(@:stmp=h) |
| 201 | touch $@ |
| 202 | endef |
| 203 | |
| 204 | # The headers must be generated before the compilation. |
| 205 | before-compile = $(addprefix $(objpfx),$(generated-modules:=.h)) |
| 206 | |
| 207 | ifndef avoid-generated |
| 208 | $(objpfx)iconv-rules: Makefile |
| 209 | $(make-target-directory) |
| 210 | { echo $(filter-out lib%, $(modules)); \ |
| 211 | echo 8bit $(gen-8bit-modules); \ |
| 212 | echo 8bit-gap $(gen-8bit-gap-modules); } | \ |
| 213 | LC_ALL=C \ |
| 214 | $(AWK) 'NR == 1 { \ |
| 215 | for (i = 1; i <= NF; i++) { \ |
| 216 | printf "%s-routines := %s\n", $$i, tolower($$i); \ |
| 217 | printf "%s-map := gconv.map\n", $$i; \ |
| 218 | } \ |
| 219 | }; \ |
| 220 | NR > 1 { \ |
| 221 | for (i = 2; i <= NF; i++) { \ |
| 222 | printf "$$(objpfx)%s.stmp: ", $$i; \ |
| 223 | map = toupper($$i); \ |
| 224 | sub(/^ISO8859/, "ISO-8859", map); \ |
| 225 | if (map == "ISO_2033") map = map "-1983"; \ |
| 226 | printf "$$(charmaps)/%s ", map; \ |
| 227 | printf "gen-%s.sh\n", $$1; \ |
| 228 | printf "\t$$(generate-%s-table)\n", $$1; \ |
| 229 | } \ |
| 230 | }' > $@.new |
| 231 | mv -f $@.new $@ |
| 232 | endif |
| 233 | |
| 234 | $(generated-modules:%=$(objpfx)%.h): $(objpfx)%.h: $(objpfx)%.stmp |
| 235 | @: |
| 236 | |
| 237 | $(gen-8bit-modules:%=$(objpfx)%.stmp): $(objpfx)%.stmp: $(objpfx)iconv-rules |
| 238 | $(gen-8bit-gap-modules:%=$(objpfx)%.stmp): $(objpfx)%.stmp: $(objpfx)iconv-rules |
| 239 | |
| 240 | $(objpfx)iso8859-7jp.stmp: $(charmaps)/ISO-8859-7 gen-8bit-gap-1.sh |
| 241 | $(make-target-directory) |
| 242 | LC_ALL=C $(SHELL) ./gen-8bit-gap-1.sh $< > $(@:stmp=T) |
| 243 | $(move-if-change) $(@:stmp=T) $(@:stmp=h) |
| 244 | touch $@ |
| 245 | |
| 246 | headers: $(addprefix $(objpfx), $(generated-modules:=.h)) |
| 247 | |
| 248 | $(addprefix $(inst_gconvdir)/, $(modules.so)): \ |
| 249 | $(inst_gconvdir)/%: $(objpfx)% $(+force) |
| 250 | $(do-install-program) |
| 251 | $(inst_gconvdir)/gconv-modules: gconv-modules $(+force) |
| 252 | $(do-install) |
| 253 | ifeq (no,$(cross-compiling)) |
| 254 | # Update the $(prefix)/lib/gconv/gconv-modules.cache file. This is necessary |
| 255 | # if this libc has more gconv modules than the previously installed one. |
| 256 | if test -f "$(inst_gconvdir)/gconv-modules.cache"; then \ |
| 257 | LC_ALL=C LANGUAGE=C \ |
| 258 | $(common-objpfx)elf/ld.so --library-path $(rpath-link) \ |
| 259 | $(common-objpfx)iconv/iconvconfig \ |
| 260 | $(addprefix --prefix=,$(install_root)); \ |
| 261 | fi |
| 262 | else |
| 263 | @echo '*@*@*@ You should recreate $(inst_gconvdir)/gconv-modules.cache' |
| 264 | endif |
| 265 | |
| 266 | endif # build-shared = yes |
| 267 | |
| 268 | include ../Rules |
| 269 | |
| 270 | ifeq ($(run-built-tests),yes) |
| 271 | ifeq (yes,$(build-shared)) |
| 272 | tests: $(objpfx)iconv-test.out $(objpfx)tst-tables.out |
| 273 | ifneq (no,$(PERL)) |
| 274 | tests: $(objpfx)mtrace-tst-loading |
| 275 | endif |
| 276 | endif |
| 277 | endif |
| 278 | |
| 279 | tst-loading-ENV = MALLOC_TRACE=$(objpfx)tst-loading.mtrace |
| 280 | $(objpfx)mtrace-tst-loading: $(objpfx)tst-loading.out |
| 281 | $(common-objpfx)malloc/mtrace $(objpfx)tst-loading.mtrace > $@ |
| 282 | |
| 283 | $(objpfx)bug-iconv1.out: $(objpfx)gconv-modules \ |
| 284 | $(addprefix $(objpfx),$(modules.so)) |
| 285 | $(objpfx)bug-iconv2.out: $(objpfx)gconv-modules \ |
| 286 | $(addprefix $(objpfx),$(modules.so)) |
| 287 | $(objpfx)bug-iconv3: $(libdl) |
| 288 | $(objpfx)bug-iconv3.out: $(objpfx)gconv-modules \ |
| 289 | $(addprefix $(objpfx),$(modules.so)) |
| 290 | $(objpfx)bug-iconv5.out: $(objpfx)gconv-modules \ |
| 291 | $(addprefix $(objpfx),$(modules.so)) |
| 292 | $(objpfx)tst-loading.out: $(objpfx)gconv-modules \ |
| 293 | $(addprefix $(objpfx),$(modules.so)) |
| 294 | $(objpfx)tst-iconv4.out: $(objpfx)gconv-modules \ |
| 295 | $(addprefix $(objpfx),$(modules.so)) |
| 296 | $(objpfx)tst-iconv7.out: $(objpfx)gconv-modules \ |
| 297 | $(addprefix $(objpfx),$(modules.so)) |
| 298 | |
| 299 | $(objpfx)iconv-test.out: run-iconv-test.sh $(objpfx)gconv-modules \ |
| 300 | $(addprefix $(objpfx),$(modules.so)) \ |
| 301 | $(common-objdir)/iconv/iconv_prog TESTS |
| 302 | $(SHELL) $< $(common-objdir) '$(test-wrapper)' > $@ |
| 303 | |
| 304 | $(objpfx)tst-tables.out: tst-tables.sh $(objpfx)gconv-modules \ |
| 305 | $(addprefix $(objpfx),$(modules.so)) \ |
| 306 | $(objpfx)tst-table-from $(objpfx)tst-table-to |
| 307 | $(SHELL) $< $(common-objpfx) $(common-objpfx)iconvdata/ \ |
| 308 | '$(test-program-prefix)' > $@ |
| 309 | |
| 310 | do-tests-clean common-mostlyclean: tst-tables-clean |
| 311 | |
| 312 | .PHONY: tst-tables-clean |
| 313 | tst-tables-clean: |
| 314 | -rm -f $(objpfx)tst-*.table $(objpfx)tst-EUC-TW.irreversible |
| 315 | |
| 316 | ifdef objpfx |
| 317 | $(objpfx)gconv-modules: gconv-modules |
| 318 | cp $^ $@ |
| 319 | endif |