1# Copyright (C) 1997-2022 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# <https://www.gnu.org/licenses/>. 17 18# 19# Makefile for iconv. 20# 21subdir := iconv 22 23include ../Makeconfig 24 25headers = iconv.h gconv.h 26routines = iconv_open iconv iconv_close \ 27 gconv_open gconv gconv_close gconv_db gconv_conf \ 28 gconv_builtin gconv_simple gconv_trans gconv_cache 29routines += gconv_dl gconv_charset 30 31vpath %.c ../locale/programs ../intl 32 33iconv_prog-modules = iconv_charmap charmap charmap-dir linereader \ 34 dummy-repertoire simple-hash xstrdup xmalloc \ 35 record-status 36iconvconfig-modules = strtab xmalloc xasprintf xstrdup hash-string 37extra-objs = $(iconv_prog-modules:=.o) $(iconvconfig-modules:=.o) 38CFLAGS-iconv_prog.c += -I../locale/programs 39CFLAGS-iconv_charmap.c += -I../locale/programs 40CFLAGS-dummy-repertoire.c += -I../locale/programs 41CFLAGS-charmap.c += -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \ 42 -DDEFAULT_CHARMAP=null_pointer -DNEED_NULL_POINTER 43CFLAGS-linereader.c += -DNO_TRANSLITERATION 44CFLAGS-simple-hash.c += -I../locale 45 46tests = \ 47 tst-iconv1 \ 48 tst-iconv2 \ 49 tst-iconv3 \ 50 tst-iconv4 \ 51 tst-iconv5 \ 52 tst-iconv6 \ 53 tst-iconv7 \ 54 tst-iconv8 \ 55 tst-iconv9 \ 56 tst-iconv-mt \ 57 tst-iconv-opt \ 58 # tests 59 60others = iconv_prog iconvconfig 61install-others-programs = $(inst_bindir)/iconv 62install-sbin = iconvconfig 63 64CFLAGS-gconv_cache.c += -DGCONV_DIR='"$(gconvdir)"' 65CFLAGS-gconv_conf.c += -DGCONV_PATH='"$(gconvdir)"' 66CFLAGS-iconvconfig.c += -DGCONV_PATH='"$(gconvdir)"' -DGCONV_DIR='"$(gconvdir)"' 67 68# Set libof-* for each routine. 69cpp-srcs-left := $(iconv_prog-modules) $(iconvconfig-modules) 70lib := iconvprogs 71include $(patsubst %,$(..)libof-iterator.mk,$(cpp-srcs-left)) 72 73ifeq ($(run-built-tests),yes) 74xtests-special += $(objpfx)test-iconvconfig.out 75tests-special += $(objpfx)tst-iconv_prog.out 76endif 77 78# Make a copy of the file because gconv module names are constructed 79# relative to the path of the configuration file. 80$(objpfx)gconv-modules: test-gconv-modules 81 cp $< $@ 82 83$(objpfx)tst-iconv-mt: $(shared-thread-library) 84 85ifeq (yes,$(build-shared)) 86tests += tst-gconv-init-failure 87modules-names += tst-gconv-init-failure-mod 88modules-names-tests += tst-gconv-init-failure-mod 89extra-test-objs += tst-gconv-init-failure-mod.os 90$(objpfx)tst-gconv-init-failure-mod.so: $(libsupport) 91$(objpfx)tst-gconv-init-failure.out: \ 92 $(objpfx)gconv-modules $(objpfx)tst-gconv-init-failure-mod.so 93endif 94 95include ../Rules 96 97ifeq ($(run-built-tests),yes) 98# We have to generate locales (list sorted alphabetically) 99LOCALES := \ 100 C.UTF-8 \ 101 en_US.UTF-8 \ 102 # LOCALES 103include ../gen-locales.mk 104 105$(objpfx)tst-iconv-opt.out: $(gen-locales) 106$(objpfx)tst-iconv9.out: $(gen-locales) 107endif 108 109$(inst_bindir)/iconv: $(objpfx)iconv_prog $(+force) 110 $(do-install-program) 111 112$(objpfx)iconv_prog: $(iconv_prog-modules:%=$(objpfx)%.o) 113$(objpfx)iconvconfig: $(iconvconfig-modules:%=$(objpfx)%.o) 114 115$(objpfx)test-iconvconfig.out: $(objpfx)iconvconfig 116 (set -e; \ 117 tmp=$(objpfx)gconv-modules.cache.$$$$; \ 118 rm -f $$tmp; \ 119 $(run-program-prefix) $(objpfx)iconvconfig \ 120 --output=$$tmp --nostdlib $(inst_gconvdir); \ 121 cmp $$tmp $(inst_gconvdir)/gconv-modules.cache; \ 122 rm -f $$tmp) > $@; \ 123 $(evaluate-test) 124 125$(objpfx)tst-iconv_prog.out: tst-iconv_prog.sh $(objpfx)iconv_prog 126 $(BASH) $< $(common-objdir) '$(test-wrapper-env)' \ 127 '$(run-program-env)' > $@; \ 128 $(evaluate-test) 129