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