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