locale: Handle loading a missing locale twice (Bug 14247)
[glibc.git] / support / Makefile
blobaa57207bdccc852ddd37729868d8c2307df4c4d8
1 # Makefile for support library, used only at build and test time
2 # Copyright (C) 2016-2024 Free Software Foundation, Inc.
3 # This file is part of the GNU C Library.
5 # The GNU C Library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License, or (at your option) any later version.
10 # The GNU C Library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with the GNU C Library; if not, see
17 # <https://www.gnu.org/licenses/>.
19 subdir := support
21 include ../Makeconfig
23 extra-libs := libsupport
24 extra-libs-others = $(extra-libs)
25 extra-libs-noinstall := $(extra-libs)
27 libsupport-routines = \
28 blob_repeat \
29 check \
30 check_addrinfo \
31 check_dns_packet \
32 check_hostent \
33 check_netent \
34 delayed_exit \
35 dtotimespec \
36 dtotimespec-time64 \
37 ignore_stderr \
38 next_to_fault \
39 oom_error \
40 resolv_response_context_duplicate \
41 resolv_response_context_free \
42 resolv_test \
43 set_fortify_handler \
44 support-open-dev-null-range \
45 support-xfstat \
46 support-xfstat-time64 \
47 support-xstat \
48 support-xstat-time64 \
49 support_become_root \
50 support_can_chroot \
51 support_capture_subprocess \
52 support_capture_subprocess_check \
53 support_chroot \
54 support_copy_file \
55 support_copy_file_range \
56 support_create_timer \
57 support_descriptor_supports_holes \
58 support_descriptors \
59 support_enter_mount_namespace \
60 support_enter_network_namespace \
61 support_format_address_family \
62 support_format_addrinfo \
63 support_format_dns_packet \
64 support_format_herrno \
65 support_format_hostent \
66 support_format_netent \
67 support_isolate_in_subprocess \
68 support_mutex_pi_monotonic \
69 support_need_proc \
70 support_openpty \
71 support_path_support_time64 \
72 support_paths \
73 support_process_state \
74 support_ptrace \
75 support_quote_blob \
76 support_quote_blob_wide \
77 support_quote_string \
78 support_record_failure \
79 support_run_diff \
80 support_select_modifies_timeout \
81 support_select_normalizes_timeout \
82 support_set_small_thread_stack_size \
83 support_set_vma_name_supported \
84 support_shared_allocate \
85 support_small_stack_thread_attribute \
86 support_socket_so_timestamp_time64 \
87 support_stack_alloc \
88 support_stat_nanoseconds \
89 support_subprocess \
90 support_test_compare_blob \
91 support_test_compare_failure \
92 support_test_compare_string \
93 support_test_compare_string_wide \
94 support_test_main \
95 support_test_verify_impl \
96 support_wait_for_thread_exit \
97 support_write_file_string \
98 temp_file \
99 timespec \
100 timespec-add \
101 timespec-add-time64 \
102 timespec-sub \
103 timespec-sub-time64 \
104 timespec-time64 \
105 write_message \
106 xaccept \
107 xaccept4 \
108 xasprintf \
109 xbind \
110 xcalloc \
111 xchdir \
112 xchmod \
113 xchroot \
114 xclock_gettime \
115 xclock_gettime_time64 \
116 xclock_settime \
117 xclock_settime_time64 \
118 xclone \
119 xclose \
120 xconnect \
121 xcopy_file_range \
122 xdlfcn \
123 xdlmopen \
124 xdup2 \
125 xfchmod \
126 xfclose \
127 xfgets \
128 xfopen \
129 xfork \
130 xfread \
131 xfreopen \
132 xftruncate \
133 xgetline \
134 xgetpeername \
135 xgetsockname \
136 xlisten \
137 xlseek \
138 xlstat \
139 xlstat-time64 \
140 xmalloc \
141 xmemstream \
142 xmkdir \
143 xmkdirp \
144 xmkfifo \
145 xmmap \
146 xmprotect \
147 xmunmap \
148 xnewlocale \
149 xopen \
150 xpipe \
151 xpoll \
152 xposix_memalign \
153 xposix_spawn \
154 xposix_spawn_file_actions_addclose \
155 xposix_spawn_file_actions_adddup2 \
156 xpthread_attr_destroy \
157 xpthread_attr_init \
158 xpthread_attr_setaffinity_np \
159 xpthread_attr_setdetachstate \
160 xpthread_attr_setguardsize \
161 xpthread_attr_setstack \
162 xpthread_attr_setstacksize \
163 xpthread_barrier_destroy \
164 xpthread_barrier_init \
165 xpthread_barrier_wait \
166 xpthread_barrierattr_destroy \
167 xpthread_barrierattr_init \
168 xpthread_barrierattr_setpshared \
169 xpthread_cancel \
170 xpthread_check_return \
171 xpthread_cond_signal \
172 xpthread_cond_wait \
173 xpthread_create \
174 xpthread_detach \
175 xpthread_join \
176 xpthread_key_create \
177 xpthread_key_delete \
178 xpthread_kill \
179 xpthread_mutex_consistent \
180 xpthread_mutex_destroy \
181 xpthread_mutex_init \
182 xpthread_mutex_lock \
183 xpthread_mutex_unlock \
184 xpthread_mutexattr_destroy \
185 xpthread_mutexattr_init \
186 xpthread_mutexattr_setprotocol \
187 xpthread_mutexattr_setpshared \
188 xpthread_mutexattr_setrobust \
189 xpthread_mutexattr_settype \
190 xpthread_once \
191 xpthread_rwlock_destroy \
192 xpthread_rwlock_init \
193 xpthread_rwlock_rdlock \
194 xpthread_rwlock_unlock \
195 xpthread_rwlock_wrlock \
196 xpthread_rwlockattr_init \
197 xpthread_rwlockattr_setkind_np \
198 xpthread_sigmask \
199 xpthread_spin_lock \
200 xpthread_spin_unlock \
201 xraise \
202 xread \
203 xreadlink \
204 xrealloc \
205 xrecvfrom \
206 xsendto \
207 xsetlocale \
208 xsetsockopt \
209 xsigaction \
210 xsignal \
211 xsigstack \
212 xsocket \
213 xstrdup \
214 xstrndup \
215 xsymlink \
216 xsysconf \
217 xsystem \
218 xunlink \
219 xuselocale \
220 xwaitpid \
221 xwrite \
222 # libsupport-routines
224 libsupport-static-only-routines := $(libsupport-routines)
225 # Only build one variant of the library.
226 libsupport-inhibit-o := .os
227 ifeq ($(build-shared),yes)
228 libsupport-inhibit-o += .o
229 endif
231 CFLAGS-support_paths.c = \
232 -DSRCDIR_PATH=\"`cd .. ; pwd`\" \
233 -DOBJDIR_PATH=\"`cd $(objpfx)/..; pwd`\" \
234 -DOBJDIR_ELF_LDSO_PATH=\"`cd $(objpfx)/..; pwd`/elf/$(rtld-installed-name)\" \
235 -DINSTDIR_PATH=\"$(prefix)\" \
236 -DLIBDIR_PATH=\"$(libdir)\" \
237 -DBINDIR_PATH=\"$(bindir)\" \
238 -DSBINDIR_PATH=\"$(sbindir)\" \
239 -DSLIBDIR_PATH=\"$(slibdir)\" \
240 -DROOTSBINDIR_PATH=\"$(rootsbindir)\" \
241 -DCOMPLOCALEDIR_PATH=\"$(complocaledir)\" \
242 -DSYSCONFDIR_PATH=\"$(sysconfdir)\"
244 # Build with exception handling and asynchronous unwind table support.
245 CFLAGS-.oS += -fexceptions -fasynchronous-unwind-tables
247 # In support_timespec_check_in_range we may be passed a very tight
248 # range for which we should produce a correct result for expected
249 # being within the observed range. The code uses double internally
250 # in support_timespec_check_in_range and for that computation we use
251 # -fexcess-precision=standard.
252 CFLAGS-timespec.c += -fexcess-precision=standard
253 CFLAGS-timespec-time64.c += -fexcess-precision=standard
255 # Ensure that general support files use 64-bit time_t
256 CFLAGS-delayed_exit.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
257 CFLAGS-shell-container.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
258 CFLAGS-support_can_chroot.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
259 CFLAGS-support_copy_file.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
260 CFLAGS-support_copy_file_range.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
261 CFLAGS-support_descriptor_supports_holes.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
262 CFLAGS-support_descriptors.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
263 CFLAGS-support_process_state.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
264 CFLAGS-support_stat_nanoseconds.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
265 CFLAGS-support_subprocess.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
266 CFLAGS-support_test_main.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
267 CFLAGS-test-container.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
268 CFLAGS-xmkdirp.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
269 # This is required to get an mkstemp which can create large files on some
270 # 32-bit platforms.
271 CFLAGS-temp_file.c += -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
273 ifeq (,$(CXX))
274 LINKS_DSO_PROGRAM = links-dso-program-c
275 else
276 LINKS_DSO_PROGRAM = links-dso-program
277 LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
278 endif
280 ifeq (yes,$(have-selinux))
281 LDLIBS-$(LINKS_DSO_PROGRAM) += -lselinux
282 endif
285 LDLIBS-test-container = $(libsupport)
287 others += test-container
288 others-noinstall += test-container
290 others += \
291 echo-container \
292 shell-container \
293 true-container \
294 # others
295 others-noinstall += \
296 echo-container \
297 shell-container \
298 true-container \
299 # others-noinstall
301 others += $(LINKS_DSO_PROGRAM)
302 others-noinstall += $(LINKS_DSO_PROGRAM)
304 others += test-run-command
305 others-static += test-run-command
306 others-noinstall += test-run-command
307 LDLIBS-test-run-command = $(libsupport)
309 $(objpfx)test-container : $(libsupport)
310 $(objpfx)shell-container : $(libsupport)
311 $(objpfx)echo-container : $(libsupport)
312 $(objpfx)true-container : $(libsupport)
313 $(objpfx)test-run-command : $(libsupport) $(common-objpfx)elf/static-stubs.o
315 tests = \
316 README-testing \
317 tst-support-namespace \
318 tst-support-open-dev-null-range \
319 tst-support-process_state \
320 tst-support_blob_repeat \
321 tst-support_capture_subprocess \
322 tst-support_descriptors \
323 tst-support_format_dns_packet \
324 tst-support_quote_blob \
325 tst-support_quote_blob_wide \
326 tst-support_quote_string \
327 tst-support_record_failure \
328 tst-test_compare \
329 tst-test_compare_blob \
330 tst-test_compare_string \
331 tst-test_compare_string_wide \
332 tst-timespec \
333 tst-xreadlink \
334 tst-xsigstack \
335 # tests
337 ifeq ($(run-built-tests),yes)
338 tests-special = \
339 $(objpfx)tst-support_record_failure-2.out
341 $(objpfx)tst-support_record_failure-2.out: tst-support_record_failure-2.sh \
342 $(objpfx)tst-support_record_failure
343 $(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \
344 '$(run-program-env)' '$(test-program-prefix-after-env)' \
345 > $@; \
346 $(evaluate-test)
347 endif
349 tests-special += $(objpfx)tst-glibcpp.out
351 $(objpfx)tst-glibcpp.out: tst-glibcpp.py $(..)scripts/glibcpp.py
352 PYTHONPATH=$(..)scripts $(PYTHON) tst-glibcpp.py > $@ 2>&1; \
353 $(evaluate-test)
355 $(objpfx)tst-support_format_dns_packet: $(common-objpfx)resolv/libresolv.so
357 tst-support_capture_subprocess-ARGS = -- $(host-test-program-cmd)
359 include ../Rules