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