1# Makefile for support library, used only at build and test time
2# Copyright (C) 2016-2022 Free Software Foundation, Inc.
3# This file is part of the GNU C Library.
4
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.
9
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.
14
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/>.
18
19subdir := support
20
21include ../Makeconfig
22
23extra-libs := libsupport
24extra-libs-others = $(extra-libs)
25extra-libs-noinstall := $(extra-libs)
26
27libsupport-routines = \
28  blob_repeat \
29  check \
30  check_addrinfo \
31  check_dns_packet \
32  check_hostent \
33  check_netent \
34  delayed_exit \
35  ignore_stderr \
36  next_to_fault \
37  oom_error \
38  resolv_response_context_duplicate \
39  resolv_response_context_free \
40  resolv_test \
41  set_fortify_handler \
42  support_stack_alloc \
43  support-xfstat \
44  support-xfstat-time64 \
45  support-xstat \
46  support-xstat-time64 \
47  support_become_root \
48  support_can_chroot \
49  support_capture_subprocess \
50  support_capture_subprocess_check \
51  support_chroot \
52  support_copy_file \
53  support_copy_file_range \
54  support_create_timer \
55  support_descriptor_supports_holes \
56  support_descriptors \
57  support_enter_mount_namespace \
58  support_enter_network_namespace \
59  support_format_address_family \
60  support_format_addrinfo \
61  support_format_dns_packet \
62  support_format_herrno \
63  support_format_hostent \
64  support_format_netent \
65  support_isolate_in_subprocess \
66  support_mutex_pi_monotonic \
67  support_need_proc \
68  support_path_support_time64 \
69  support_process_state \
70  support_ptrace \
71  support-open-dev-null-range \
72  support_openpty \
73  support_paths \
74  support_quote_blob \
75  support_quote_blob_wide \
76  support_quote_string \
77  support_record_failure \
78  support_run_diff \
79  support_select_modifies_timeout \
80  support_select_normalizes_timeout \
81  support_set_small_thread_stack_size \
82  support_shared_allocate \
83  support_small_stack_thread_attribute \
84  support_socket_so_timestamp_time64 \
85  support_stat_nanoseconds \
86  support_subprocess \
87  support_test_compare_blob \
88  support_test_compare_failure \
89  support_test_compare_string \
90  support_test_compare_string_wide \
91  support_test_main \
92  support_test_verify_impl \
93  support_wait_for_thread_exit \
94  support_write_file_string \
95  temp_file \
96  timespec \
97  timespec-time64 \
98  timespec-add \
99  timespec-add-time64 \
100  timespec-sub \
101  timespec-sub-time64 \
102  write_message \
103  xaccept \
104  xaccept4 \
105  xasprintf \
106  xbind \
107  xcalloc \
108  xchdir \
109  xchroot \
110  xclock_gettime \
111  xclock_gettime_time64 \
112  xclock_settime \
113  xclock_settime_time64 \
114  xclone \
115  xclose \
116  xchmod \
117  xconnect \
118  xcopy_file_range \
119  xdlfcn \
120  xdlmopen \
121  xdup2 \
122  xfchmod \
123  xfclose \
124  xfopen \
125  xfork \
126  xftruncate \
127  xgetline \
128  xgetsockname \
129  xlisten \
130  xlseek \
131  xlstat \
132  xlstat-time64 \
133  xmalloc \
134  xmemstream \
135  xmkdir \
136  xmkdirp \
137  xmkfifo \
138  xmmap \
139  xmprotect \
140  xmunmap \
141  xnewlocale \
142  xopen \
143  xpipe \
144  xpoll \
145  xposix_memalign \
146  xpthread_attr_destroy \
147  xpthread_attr_init \
148  xpthread_attr_setdetachstate \
149  xpthread_attr_setguardsize \
150  xpthread_attr_setaffinity_np \
151  xpthread_attr_setstack \
152  xpthread_attr_setstacksize \
153  xpthread_barrier_destroy \
154  xpthread_barrier_init \
155  xpthread_barrier_wait \
156  xpthread_barrierattr_destroy \
157  xpthread_barrierattr_init \
158  xpthread_barrierattr_setpshared \
159  xpthread_cancel \
160  xpthread_check_return \
161  xpthread_cond_wait \
162  xpthread_create \
163  xpthread_detach \
164  xpthread_join \
165  xpthread_key_create \
166  xpthread_key_delete \
167  xpthread_kill \
168  xpthread_mutex_consistent \
169  xpthread_mutex_destroy \
170  xpthread_mutex_init \
171  xpthread_mutex_lock \
172  xpthread_mutex_unlock \
173  xpthread_mutexattr_destroy \
174  xpthread_mutexattr_init \
175  xpthread_mutexattr_setprotocol \
176  xpthread_mutexattr_setpshared \
177  xpthread_mutexattr_setrobust \
178  xpthread_mutexattr_settype \
179  xpthread_once \
180  xpthread_rwlock_init \
181  xpthread_rwlock_destroy \
182  xpthread_rwlock_rdlock \
183  xpthread_rwlock_unlock \
184  xpthread_rwlock_wrlock \
185  xpthread_rwlockattr_init \
186  xpthread_rwlockattr_setkind_np \
187  xpthread_sigmask \
188  xpthread_spin_lock \
189  xpthread_spin_unlock \
190  xraise \
191  xreadlink \
192  xrealloc \
193  xrecvfrom \
194  xsendto \
195  xsetlocale \
196  xsetsockopt \
197  xsigaction \
198  xsignal \
199  xsigstack \
200  xsocket \
201  xposix_spawn \
202  xposix_spawn_file_actions_addclose \
203  xposix_spawn_file_actions_adddup2 \
204  xstrdup \
205  xstrndup \
206  xsymlink \
207  xsysconf \
208  xunlink \
209  xuselocale \
210  xwaitpid \
211  xwrite \
212
213libsupport-static-only-routines := $(libsupport-routines)
214# Only build one variant of the library.
215libsupport-inhibit-o := .os
216ifeq ($(build-shared),yes)
217libsupport-inhibit-o += .o
218endif
219
220CFLAGS-support_paths.c = \
221		-DSRCDIR_PATH=\"`cd .. ; pwd`\" \
222		-DOBJDIR_PATH=\"`cd $(objpfx)/..; pwd`\" \
223		-DOBJDIR_ELF_LDSO_PATH=\"`cd $(objpfx)/..; pwd`/elf/$(rtld-installed-name)\" \
224		-DINSTDIR_PATH=\"$(prefix)\" \
225		-DLIBDIR_PATH=\"$(libdir)\" \
226		-DBINDIR_PATH=\"$(bindir)\" \
227		-DSBINDIR_PATH=\"$(sbindir)\" \
228		-DSLIBDIR_PATH=\"$(slibdir)\" \
229		-DROOTSBINDIR_PATH=\"$(rootsbindir)\" \
230		-DCOMPLOCALEDIR_PATH=\"$(complocaledir)\"
231
232# In support_timespec_check_in_range we may be passed a very tight
233# range for which we should produce a correct result for expected
234# being withing the observed range.  The code uses double internally
235# in support_timespec_check_in_range and for that computation we use
236# -fexcess-precision=standard.
237CFLAGS-timespec.c += -fexcess-precision=standard
238CFLAGS-timespec-time64.c += -fexcess-precision=standard
239
240ifeq (,$(CXX))
241LINKS_DSO_PROGRAM = links-dso-program-c
242else
243LINKS_DSO_PROGRAM = links-dso-program
244LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
245endif
246
247ifeq (yes,$(have-selinux))
248LDLIBS-$(LINKS_DSO_PROGRAM) += -lselinux
249endif
250
251
252LDLIBS-test-container = $(libsupport)
253
254others += test-container
255others-noinstall += test-container
256
257others += shell-container echo-container true-container
258others-noinstall += shell-container echo-container true-container
259
260others += $(LINKS_DSO_PROGRAM)
261others-noinstall += $(LINKS_DSO_PROGRAM)
262
263others += test-run-command
264others-static += test-run-command
265others-noinstall += test-run-command
266LDLIBS-test-run-command = $(libsupport)
267
268$(objpfx)test-container : $(libsupport)
269$(objpfx)shell-container : $(libsupport)
270$(objpfx)echo-container : $(libsupport)
271$(objpfx)true-container : $(libsupport)
272$(objpfx)test-run-command : $(libsupport) $(common-objpfx)elf/static-stubs.o
273
274tests = \
275  README-testing \
276  tst-support-namespace \
277  tst-support_blob_repeat \
278  tst-support_capture_subprocess \
279  tst-support_descriptors \
280  tst-support_format_dns_packet \
281  tst-support-open-dev-null-range \
282  tst-support-process_state \
283  tst-support_quote_blob \
284  tst-support_quote_blob_wide \
285  tst-support_quote_string \
286  tst-support_record_failure \
287  tst-test_compare \
288  tst-test_compare_blob \
289  tst-test_compare_string \
290  tst-test_compare_string_wide \
291  tst-timespec \
292  tst-xreadlink \
293  tst-xsigstack \
294
295ifeq ($(run-built-tests),yes)
296tests-special = \
297  $(objpfx)tst-support_record_failure-2.out
298
299$(objpfx)tst-support_record_failure-2.out: tst-support_record_failure-2.sh \
300  $(objpfx)tst-support_record_failure
301	$(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \
302	  '$(run-program-env)' '$(test-program-prefix-after-env)' \
303	  > $@; \
304	$(evaluate-test)
305endif
306
307$(objpfx)tst-support_format_dns_packet: $(common-objpfx)resolv/libresolv.so
308
309tst-support_capture_subprocess-ARGS = -- $(host-test-program-cmd)
310
311include ../Rules
312