1# Copyright (C) 1999-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# Sub-makefile for conform portion of the library. 20# 21subdir := conform 22 23include ../Makeconfig 24 25conformtest-headers-data := $(wildcard data/*.h-data) \ 26 $(wildcard data/*/*.h-data) 27 28conformtest-standards := ISO ISO99 ISO11 POSIX XPG4 XPG42 UNIX98 XOPEN2K \ 29 POSIX2008 XOPEN2K8 30 31conformtest-headers-ISO := assert.h ctype.h errno.h float.h limits.h locale.h \ 32 math.h setjmp.h signal.h stdarg.h stddef.h stdio.h \ 33 stdlib.h string.h time.h 34conformtest-headers-ISO99 := $(conformtest-headers-ISO) complex.h fenv.h \ 35 inttypes.h iso646.h stdbool.h stdint.h tgmath.h \ 36 wchar.h wctype.h 37# Missing ISO11 expectations for: stdatomic.h 38conformtest-headers-ISO11 := $(conformtest-headers-ISO99) stdalign.h \ 39 stdnoreturn.h threads.h uchar.h 40conformtest-headers-POSIX := $(conformtest-headers-ISO) aio.h dirent.h \ 41 fcntl.h fnmatch.h glob.h grp.h mqueue.h \ 42 pthread.h pwd.h regex.h sched.h semaphore.h \ 43 sys/mman.h sys/stat.h sys/times.h sys/types.h \ 44 sys/utsname.h sys/wait.h tar.h termios.h \ 45 unistd.h utime.h wordexp.h 46# Missing XPG4 expectations for: regexp.h wchar.h. 47conformtest-headers-XPG4 := $(conformtest-headers-ISO) cpio.h dirent.h \ 48 fcntl.h fnmatch.h ftw.h glob.h grp.h iconv.h \ 49 langinfo.h monetary.h nl_types.h pwd.h regex.h \ 50 search.h sys/ipc.h sys/msg.h sys/sem.h sys/shm.h \ 51 sys/stat.h sys/times.h sys/types.h sys/utsname.h \ 52 sys/wait.h tar.h termios.h ulimit.h unistd.h \ 53 utime.h varargs.h wordexp.h 54# Missing XPG42 expectations for: re_comp.h regexp.h wchar.h. 55# XPG42 includes XTI and STREAMS, but those are not implemented by glibc. 56conformtest-headers-XPG42 := $(conformtest-headers-XPG4) arpa/inet.h fmtmsg.h \ 57 libgen.h ndbm.h netdb.h netinet/in.h poll.h \ 58 strings.h sys/mman.h sys/resource.h \ 59 sys/socket.h sys/statvfs.h sys/time.h sys/timeb.h \ 60 sys/uio.h sys/un.h syslog.h ucontext.h utmpx.h 61# Missing UNIX98 expectations for: inttypes.h re_comp.h regexp.h. 62# The online UNIX98 includes XCURSES, but curses.h, term.h and 63# unctrl.h are outside the scope of these tests. It also includes 64# XTI and STREAMS, but those are not implemented by glibc. 65conformtest-headers-UNIX98 := $(conformtest-headers-POSIX) arpa/inet.h cpio.h \ 66 dlfcn.h fmtmsg.h ftw.h iconv.h iso646.h \ 67 langinfo.h libgen.h monetary.h ndbm.h netdb.h \ 68 netinet/in.h nl_types.h poll.h search.h \ 69 strings.h sys/ipc.h sys/msg.h \ 70 sys/resource.h sys/sem.h sys/shm.h sys/socket.h \ 71 sys/statvfs.h sys/time.h sys/timeb.h sys/uio.h \ 72 sys/un.h syslog.h ucontext.h ulimit.h utmpx.h \ 73 varargs.h wchar.h wctype.h 74# Missing XOPEN2K expectations for: trace.h, stropts.h. 75conformtest-headers-XOPEN2K := $(conformtest-headers-POSIX) arpa/inet.h \ 76 complex.h cpio.h dlfcn.h fenv.h fmtmsg.h ftw.h \ 77 iconv.h inttypes.h iso646.h langinfo.h \ 78 libgen.h monetary.h ndbm.h net/if.h netdb.h \ 79 netinet/in.h netinet/tcp.h nl_types.h poll.h \ 80 search.h spawn.h stdbool.h stdint.h strings.h \ 81 sys/ipc.h sys/msg.h sys/resource.h \ 82 sys/select.h sys/sem.h sys/shm.h sys/socket.h \ 83 sys/statvfs.h sys/time.h sys/timeb.h sys/uio.h \ 84 sys/un.h syslog.h tgmath.h ucontext.h ulimit.h \ 85 utmpx.h wchar.h wctype.h 86# Missing POSIX2008 expectations for: trace.h, stropts.h. 87conformtest-headers-POSIX2008 := $(conformtest-headers-POSIX) arpa/inet.h \ 88 complex.h cpio.h dlfcn.h fenv.h iconv.h \ 89 inttypes.h iso646.h langinfo.h monetary.h \ 90 net/if.h netdb.h netinet/in.h netinet/tcp.h \ 91 nl_types.h poll.h spawn.h stdbool.h stdint.h \ 92 strings.h sys/select.h \ 93 sys/socket.h sys/statvfs.h sys/un.h tgmath.h \ 94 wchar.h wctype.h 95# Missing XOPEN2K8 expectations for: trace.h. 96conformtest-headers-XOPEN2K8 := $(conformtest-headers-POSIX2008) fmtmsg.h \ 97 ftw.h libgen.h ndbm.h search.h sys/ipc.h \ 98 sys/msg.h sys/resource.h sys/sem.h sys/shm.h \ 99 sys/time.h sys/uio.h syslog.h ulimit.h utmpx.h 100 101conformtest-header-list-base := $(foreach std,$(conformtest-standards),\ 102 header-list-$(std).out) 103conformtest-header-list-tests := $(addprefix $(objpfx),\ 104 $(conformtest-header-list-base)) 105tests-special += $(conformtest-header-list-tests) 106generated += $(conformtest-header-list-base) 107 108conformtest-header-base := $(foreach std,\ 109 $(conformtest-standards),\ 110 $(foreach h,\ 111 $(conformtest-headers-$(std)),\ 112 $(std)/$(h)/conform.out)) 113conformtest-header-tests := $(addprefix $(objpfx),$(conformtest-header-base)) 114ifneq (yes,$(fast-check)) 115tests-special += $(conformtest-header-tests) 116generated += $(conformtest-header-base) 117endif 118 119linknamespace-symlists-base := $(foreach std,$(conformtest-standards),\ 120 symlist-$(std)) 121linknamespace-symlists-tests := $(addprefix $(objpfx),\ 122 $(linknamespace-symlists-base)) 123tests-special += $(linknamespace-symlists-tests) 124 125linknamespace-symlist-stdlibs-base := $(foreach std,$(conformtest-standards),\ 126 symlist-stdlibs-$(std)) 127linknamespace-symlist-stdlibs-tests := \ 128 $(addprefix $(objpfx),\ 129 $(linknamespace-symlist-stdlibs-base)) 130 131tests-special += $(linknamespace-symlist-stdlibs-tests) 132 133linknamespace-header-base := $(foreach std,\ 134 $(conformtest-standards),\ 135 $(foreach h,\ 136 $(conformtest-headers-$(std)),\ 137 $(std)/$(h)/linknamespace.out)) 138linknamespace-header-tests := $(addprefix $(objpfx),\ 139 $(linknamespace-header-base)) 140tests-special += $(linknamespace-header-tests) 141 142include ../Rules 143 144$(conformtest-header-list-tests): $(objpfx)header-list-%.out: \ 145 check-header-lists.sh \ 146 $(conformtest-headers-data) 147 $(SHELL) $< "$*" "$(CC)" "$(strip $(conformtest-headers-$*))" \ 148 "$(conformtest-headers-data)" > $@; \ 149 $(evaluate-test) 150 151# Pre-standard C feature no longer supported by GCC (obsoleted in 152# newer POSIX standards). 153test-xfail-XPG4/varargs.h/conform = yes 154test-xfail-XPG42/varargs.h/conform = yes 155test-xfail-UNIX98/varargs.h/conform = yes 156 157# Header not provided by glibc. 158test-xfail-XPG42/ndbm.h/conform = yes 159test-xfail-UNIX98/ndbm.h/conform = yes 160test-xfail-XOPEN2K/ndbm.h/conform = yes 161test-xfail-XOPEN2K8/ndbm.h/conform = yes 162 163conformtest-cc-flags = -I../include $(+sysdep-includes) $(sysincludes) -I.. 164# conformtest-xfail-conds may be set by a sysdeps Makefile fragment to 165# a list of conditions that are considered to be true when encountered 166# in xfail[cond]- lines in test expectations. 167conformtest-xfail = $(if $(conformtest-xfail-conds),\ 168 --xfail='$(conformtest-xfail-conds)') 169ifeq (no,$(cross-compiling)) 170conformtest-cross = 171else 172conformtest-cross = --cross 173endif 174$(conformtest-header-tests): $(objpfx)%/conform.out: \ 175 conformtest.py $(conformtest-headers-data) 176 (set -e; std_hdr=$*; std=$${std_hdr%%/*}; hdr=$${std_hdr#*/}; \ 177 mkdir -p $(@D); \ 178 $(PYTHON) $< --cc='$(CC) $(pie-default)' \ 179 --flags='$(conformtest-cc-flags)' \ 180 --ldflags='$(+link-tests-before-inputs)' \ 181 --libs='$(+link-tests-after-inputs)' \ 182 --run-program-prefix='$(run-program-prefix)' \ 183 --standard=$$std --header=$$hdr $(conformtest-xfail) \ 184 $(conformtest-cross) \ 185 > $@ 2>&1); \ 186 $(evaluate-test) 187 188$(linknamespace-symlists-tests): $(objpfx)symlist-%: list-header-symbols.py 189 $(PYTHON) $< --cc='$(CC)' --flags='$(conformtest-cc-flags)' \ 190 --standard=$* --headers="$(strip $(conformtest-headers-$*))" \ 191 > $@ 2> $@.err; \ 192 $(evaluate-test) 193 194linknamespace-libs-isoc = $(common-objpfx)libc.a $(common-objpfx)math/libm.a 195linknamespace-libs-thr = $(linknamespace-libs-isoc) \ 196 $(common-objpfx)rt/librt.a \ 197 $(filter-out %_syms.a,$(static-thread-library)) 198linknamespace-libs-posix = $(linknamespace-libs-thr) \ 199 $(common-objpfx)dlfcn/libdl.a 200linknamespace-libs-xsi = $(linknamespace-libs-posix) 201linknamespace-libs-ISO = $(linknamespace-libs-isoc) 202linknamespace-libs-ISO99 = $(linknamespace-libs-isoc) 203linknamespace-libs-ISO11 = $(linknamespace-libs-isoc) \ 204 $(filter-out %_syms.a,$(static-thread-library)) 205linknamespace-libs-XPG4 = $(linknamespace-libs-isoc) 206linknamespace-libs-XPG42 = $(linknamespace-libs-XPG4) 207linknamespace-libs-POSIX = $(linknamespace-libs-thr) 208linknamespace-libs-UNIX98 = $(linknamespace-libs-xsi) 209linknamespace-libs-XOPEN2K = $(linknamespace-libs-xsi) 210linknamespace-libs-POSIX2008 = $(linknamespace-libs-posix) 211linknamespace-libs-XOPEN2K8 = $(linknamespace-libs-xsi) 212linknamespace-libs = $(foreach std,$(conformtest-standards),\ 213 $(linknamespace-libs-$(std))) 214 215ifeq ($(build-crypt),yes) 216linknamespace-libs-xsi += $(common-objpfx)crypt/libcrypt.a 217linknamespace-libs-XPG4 += $(common-objpfx)crypt/libcrypt.a 218endif 219 220$(linknamespace-symlist-stdlibs-tests): $(objpfx)symlist-stdlibs-%: \ 221 $(linknamespace-libs) 222 LC_ALL=C $(READELF) -W -s $(linknamespace-libs-$*) > $@; \ 223 $(evaluate-test) 224 225$(linknamespace-header-tests): $(objpfx)%/linknamespace.out: \ 226 linknamespace.py \ 227 $(linknamespace-symlists-tests) \ 228 $(linknamespace-symlist-stdlibs-tests) 229 (set -e; std_hdr=$*; std=$${std_hdr%%/*}; hdr=$${std_hdr#*/}; \ 230 mkdir -p $(@D); \ 231 $(PYTHON) $< --cc='$(CC)' --flags='$(conformtest-cc-flags)' \ 232 --standard=$$std --stdsyms=$(objpfx)symlist-$$std \ 233 --header=$$hdr --libsyms=$(objpfx)symlist-stdlibs-$$std \ 234 --readelf='$(READELF)' \ 235 > $@ 2>&1); \ 236 $(evaluate-test) 237 238# Pre-standard C feature no longer supported by GCC (obsoleted in 239# newer POSIX standards). 240test-xfail-XPG4/varargs.h/linknamespace = yes 241test-xfail-XPG42/varargs.h/linknamespace = yes 242test-xfail-UNIX98/varargs.h/linknamespace = yes 243 244# Header not provided by glibc. 245test-xfail-XPG42/ndbm.h/linknamespace = yes 246test-xfail-UNIX98/ndbm.h/linknamespace = yes 247test-xfail-XOPEN2K/ndbm.h/linknamespace = yes 248test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes 249