xf.li | bdd93d5 | 2023-05-12 07:10:14 -0700 | [diff] [blame^] | 1 | # Copyright (C) 1999-2016 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 | # <http://www.gnu.org/licenses/>. |
| 17 | |
| 18 | # |
| 19 | # Sub-makefile for conform portion of the library. |
| 20 | # |
| 21 | subdir := conform |
| 22 | |
| 23 | include ../Makeconfig |
| 24 | |
| 25 | conformtest-headers-data := $(wildcard data/*.h-data) \ |
| 26 | $(wildcard data/*/*.h-data) |
| 27 | |
| 28 | conformtest-standards := ISO ISO99 ISO11 POSIX XPG3 XPG4 UNIX98 XOPEN2K \ |
| 29 | POSIX2008 XOPEN2K8 |
| 30 | |
| 31 | conformtest-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 |
| 34 | conformtest-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 threads.h. |
| 38 | conformtest-headers-ISO11 := $(conformtest-headers-ISO99) stdalign.h \ |
| 39 | stdnoreturn.h uchar.h |
| 40 | conformtest-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 XPG3 expectations for: regexp.h wchar.h. |
| 47 | conformtest-headers-XPG3 := $(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 XPG4 expectations for: re_comp.h regexp.h wchar.h. |
| 55 | # XPG4 includes XTI, but xti.h is outside the scope of these tests. |
| 56 | conformtest-headers-XPG4 := $(conformtest-headers-XPG3) arpa/inet.h fmtmsg.h \ |
| 57 | libgen.h ndbm.h netdb.h netinet/in.h poll.h \ |
| 58 | strings.h stropts.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, but xti.h is outside the scope of these tests. |
| 65 | conformtest-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 stropts.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. |
| 75 | conformtest-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 | stropts.h 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. |
| 87 | conformtest-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 stropts.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. |
| 96 | conformtest-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 | |
| 101 | conformtest-header-list-base := $(foreach std,$(conformtest-standards),\ |
| 102 | header-list-$(std).out) |
| 103 | conformtest-header-list-tests := $(addprefix $(objpfx),\ |
| 104 | $(conformtest-header-list-base)) |
| 105 | tests-special += $(conformtest-header-list-tests) |
| 106 | generated += $(conformtest-header-list-base) |
| 107 | |
| 108 | conformtest-header-base := $(foreach std,\ |
| 109 | $(conformtest-standards),\ |
| 110 | $(foreach h,\ |
| 111 | $(conformtest-headers-$(std)),\ |
| 112 | $(std)/$(h)/conform.out)) |
| 113 | conformtest-header-tests := $(addprefix $(objpfx),$(conformtest-header-base)) |
| 114 | ifneq (yes,$(fast-check)) |
| 115 | ifeq (no,$(cross-compiling)) |
| 116 | tests-special += $(conformtest-header-tests) |
| 117 | generated += $(conformtest-header-base) |
| 118 | endif |
| 119 | endif |
| 120 | |
| 121 | linknamespace-symlists-base := $(foreach std,$(conformtest-standards),\ |
| 122 | symlist-$(std)) |
| 123 | linknamespace-symlists-tests := $(addprefix $(objpfx),\ |
| 124 | $(linknamespace-symlists-base)) |
| 125 | tests-special += $(linknamespace-symlists-tests) |
| 126 | |
| 127 | linknamespace-symlist-stdlibs-base := $(foreach std,$(conformtest-standards),\ |
| 128 | symlist-stdlibs-$(std)) |
| 129 | linknamespace-symlist-stdlibs-tests := \ |
| 130 | $(addprefix $(objpfx),\ |
| 131 | $(linknamespace-symlist-stdlibs-base)) |
| 132 | |
| 133 | tests-special += $(linknamespace-symlist-stdlibs-tests) |
| 134 | |
| 135 | linknamespace-header-base := $(foreach std,\ |
| 136 | $(conformtest-standards),\ |
| 137 | $(foreach h,\ |
| 138 | $(conformtest-headers-$(std)),\ |
| 139 | $(std)/$(h)/linknamespace.out)) |
| 140 | linknamespace-header-tests := $(addprefix $(objpfx),\ |
| 141 | $(linknamespace-header-base)) |
| 142 | tests-special += $(linknamespace-header-tests) |
| 143 | |
| 144 | include ../Rules |
| 145 | |
| 146 | $(conformtest-header-list-tests): $(objpfx)header-list-%.out: \ |
| 147 | check-header-lists.sh \ |
| 148 | $(conformtest-headers-data) |
| 149 | $(SHELL) $< "$*" "$(CC)" "$(strip $(conformtest-headers-$*))" \ |
| 150 | "$(conformtest-headers-data)" > $@; \ |
| 151 | $(evaluate-test) |
| 152 | |
| 153 | # Pre-standard C feature no longer supported by GCC (obsoleted in |
| 154 | # newer POSIX standards). |
| 155 | test-xfail-XPG3/varargs.h/conform = yes |
| 156 | test-xfail-XPG4/varargs.h/conform = yes |
| 157 | test-xfail-UNIX98/varargs.h/conform = yes |
| 158 | |
| 159 | # Header not provided by glibc. |
| 160 | test-xfail-XPG4/ndbm.h/conform = yes |
| 161 | test-xfail-UNIX98/ndbm.h/conform = yes |
| 162 | test-xfail-XOPEN2K/ndbm.h/conform = yes |
| 163 | test-xfail-XOPEN2K8/ndbm.h/conform = yes |
| 164 | |
| 165 | # Unsorted expected failures. |
| 166 | test-xfail-XPG3/fcntl.h/conform = yes |
| 167 | test-xfail-XPG3/ftw.h/conform = yes |
| 168 | test-xfail-XPG3/langinfo.h/conform = yes |
| 169 | test-xfail-XPG3/limits.h/conform = yes |
| 170 | test-xfail-XPG3/pwd.h/conform = yes |
| 171 | test-xfail-XPG3/search.h/conform = yes |
| 172 | test-xfail-XPG3/signal.h/conform = yes |
| 173 | test-xfail-XPG3/stdio.h/conform = yes |
| 174 | test-xfail-XPG3/stdlib.h/conform = yes |
| 175 | test-xfail-XPG3/string.h/conform = yes |
| 176 | test-xfail-XPG3/sys/stat.h/conform = yes |
| 177 | test-xfail-XPG3/sys/types.h/conform = yes |
| 178 | test-xfail-XPG3/sys/wait.h/conform = yes |
| 179 | test-xfail-XPG3/termios.h/conform = yes |
| 180 | test-xfail-XPG3/time.h/conform = yes |
| 181 | test-xfail-XPG3/unistd.h/conform = yes |
| 182 | test-xfail-XPG4/arpa/inet.h/conform = yes |
| 183 | test-xfail-XPG4/fcntl.h/conform = yes |
| 184 | test-xfail-XPG4/langinfo.h/conform = yes |
| 185 | test-xfail-XPG4/netdb.h/conform = yes |
| 186 | test-xfail-XPG4/netinet/in.h/conform = yes |
| 187 | test-xfail-XPG4/signal.h/conform = yes |
| 188 | test-xfail-XPG4/stdio.h/conform = yes |
| 189 | test-xfail-XPG4/stdlib.h/conform = yes |
| 190 | test-xfail-XPG4/sys/stat.h/conform = yes |
| 191 | test-xfail-XPG4/sys/time.h/conform = yes |
| 192 | test-xfail-XPG4/sys/types.h/conform = yes |
| 193 | test-xfail-XPG4/sys/wait.h/conform = yes |
| 194 | test-xfail-XPG4/termios.h/conform = yes |
| 195 | test-xfail-XPG4/ucontext.h/conform = yes |
| 196 | test-xfail-XPG4/unistd.h/conform = yes |
| 197 | test-xfail-XPG4/utmpx.h/conform = yes |
| 198 | test-xfail-POSIX/sys/wait.h/conform = yes |
| 199 | test-xfail-UNIX98/arpa/inet.h/conform = yes |
| 200 | test-xfail-UNIX98/fcntl.h/conform = yes |
| 201 | test-xfail-UNIX98/langinfo.h/conform = yes |
| 202 | test-xfail-UNIX98/netdb.h/conform = yes |
| 203 | test-xfail-UNIX98/netinet/in.h/conform = yes |
| 204 | test-xfail-UNIX98/signal.h/conform = yes |
| 205 | test-xfail-UNIX98/stdio.h/conform = yes |
| 206 | test-xfail-UNIX98/stdlib.h/conform = yes |
| 207 | test-xfail-UNIX98/sys/time.h/conform = yes |
| 208 | test-xfail-UNIX98/sys/wait.h/conform = yes |
| 209 | test-xfail-UNIX98/ucontext.h/conform = yes |
| 210 | test-xfail-UNIX98/unistd.h/conform = yes |
| 211 | test-xfail-UNIX98/utmpx.h/conform = yes |
| 212 | test-xfail-XOPEN2K/aio.h/conform = yes |
| 213 | test-xfail-XOPEN2K/fcntl.h/conform = yes |
| 214 | test-xfail-XOPEN2K/langinfo.h/conform = yes |
| 215 | test-xfail-XOPEN2K/mqueue.h/conform = yes |
| 216 | test-xfail-XOPEN2K/semaphore.h/conform = yes |
| 217 | test-xfail-XOPEN2K/signal.h/conform = yes |
| 218 | test-xfail-XOPEN2K/stdarg.h/conform = yes |
| 219 | test-xfail-XOPEN2K/stdio.h/conform = yes |
| 220 | test-xfail-XOPEN2K/sys/wait.h/conform = yes |
| 221 | test-xfail-XOPEN2K/termios.h/conform = yes |
| 222 | test-xfail-XOPEN2K/ucontext.h/conform = yes |
| 223 | test-xfail-POSIX2008/arpa/inet.h/conform = yes |
| 224 | test-xfail-POSIX2008/netdb.h/conform = yes |
| 225 | test-xfail-POSIX2008/netinet/in.h/conform = yes |
| 226 | test-xfail-POSIX2008/signal.h/conform = yes |
| 227 | test-xfail-POSIX2008/sys/socket.h/conform = yes |
| 228 | test-xfail-POSIX2008/sys/wait.h/conform = yes |
| 229 | test-xfail-XOPEN2K8/limits.h/conform = yes |
| 230 | test-xfail-XOPEN2K8/signal.h/conform = yes |
| 231 | test-xfail-XOPEN2K8/stdio.h/conform = yes |
| 232 | test-xfail-XOPEN2K8/sys/wait.h/conform = yes |
| 233 | test-xfail-XOPEN2K8/termios.h/conform = yes |
| 234 | |
| 235 | conformtest-cc-flags = -I../include $(+sysdep-includes) $(sysincludes) -I.. |
| 236 | $(conformtest-header-tests): $(objpfx)%/conform.out: \ |
| 237 | conformtest.pl $(conformtest-headers-data) |
| 238 | (set -e; std_hdr=$*; std=$${std_hdr%%/*}; hdr=$${std_hdr#*/}; \ |
| 239 | mkdir -p $(@D)/scratch; \ |
| 240 | $(PERL) conformtest.pl --tmpdir=$(@D)/scratch --cc='$(CC)' \ |
| 241 | --flags='$(conformtest-cc-flags)' --standard=$$std \ |
| 242 | --headers=$$hdr > $@); \ |
| 243 | $(evaluate-test) |
| 244 | |
| 245 | $(linknamespace-symlists-tests): $(objpfx)symlist-%: list-header-symbols.pl |
| 246 | $(PERL) -w $< --tmpdir=$(objpfx) --cc='$(CC)' \ |
| 247 | --flags='$(conformtest-cc-flags)' --standard=$* \ |
| 248 | --headers="$(strip $(conformtest-headers-$*))" \ |
| 249 | > $@ 2> $@.err; \ |
| 250 | $(evaluate-test) |
| 251 | |
| 252 | linknamespace-libs-isoc = $(common-objpfx)libc.a $(common-objpfx)math/libm.a |
| 253 | linknamespace-libs = $(linknamespace-libs-isoc) \ |
| 254 | $(common-objpfx)rt/librt.a $(static-thread-library) |
| 255 | linknamespace-libs-ISO = $(linknamespace-libs-isoc) |
| 256 | linknamespace-libs-ISO99 = $(linknamespace-libs-isoc) |
| 257 | linknamespace-libs-ISO11 = $(linknamespace-libs-isoc) |
| 258 | linknamespace-libs-XPG3 = $(linknamespace-libs-isoc) |
| 259 | linknamespace-libs-XPG4 = $(linknamespace-libs-isoc) |
| 260 | linknamespace-libs-POSIX = $(linknamespace-libs) |
| 261 | linknamespace-libs-UNIX98 = $(linknamespace-libs) |
| 262 | linknamespace-libs-XOPEN2K = $(linknamespace-libs) |
| 263 | linknamespace-libs-POSIX2008 = $(linknamespace-libs) |
| 264 | linknamespace-libs-XOPEN2K8 = $(linknamespace-libs) |
| 265 | |
| 266 | $(linknamespace-symlist-stdlibs-tests): $(objpfx)symlist-stdlibs-%: \ |
| 267 | $(linknamespace-libs) |
| 268 | LC_ALL=C $(READELF) -W -s $(linknamespace-libs-$*) > $@; \ |
| 269 | $(evaluate-test) |
| 270 | |
| 271 | $(linknamespace-header-tests): $(objpfx)%/linknamespace.out: \ |
| 272 | linknamespace.pl \ |
| 273 | $(linknamespace-symlist-stdlibs-tests) |
| 274 | (set -e; std_hdr=$*; std=$${std_hdr%%/*}; hdr=$${std_hdr#*/}; \ |
| 275 | mkdir -p $(@D)/scratch; \ |
| 276 | $(PERL) -w $< --tmpdir=$(@D)/scratch --cc='$(CC)' \ |
| 277 | --flags='$(conformtest-cc-flags)' --standard=$$std \ |
| 278 | --stdsyms=$(objpfx)symlist-$$std --header=$$hdr \ |
| 279 | --libsyms=$(objpfx)symlist-stdlibs-$$std \ |
| 280 | --readelf='$(READELF)' \ |
| 281 | > $@ 2>&1); \ |
| 282 | $(evaluate-test) |
| 283 | |
| 284 | # Pre-standard C feature no longer supported by GCC (obsoleted in |
| 285 | # newer POSIX standards). |
| 286 | test-xfail-XPG3/varargs.h/linknamespace = yes |
| 287 | test-xfail-XPG4/varargs.h/linknamespace = yes |
| 288 | test-xfail-UNIX98/varargs.h/linknamespace = yes |
| 289 | |
| 290 | # Header not provided by glibc. |
| 291 | test-xfail-XPG4/ndbm.h/linknamespace = yes |
| 292 | test-xfail-UNIX98/ndbm.h/linknamespace = yes |
| 293 | test-xfail-XOPEN2K/ndbm.h/linknamespace = yes |
| 294 | test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes |