]>
Commit | Line | Data |
---|---|---|
1 | # Copyright (C) 1999-2019 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 XPG4 XPG42 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 | |
38 | conformtest-headers-ISO11 := $(conformtest-headers-ISO99) stdalign.h \ | |
39 | stdnoreturn.h threads.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 XPG4 expectations for: regexp.h wchar.h. | |
47 | conformtest-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. | |
56 | conformtest-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. | |
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 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. | |
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 | 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. | |
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 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 | tests-special += $(conformtest-header-tests) | |
116 | generated += $(conformtest-header-base) | |
117 | endif | |
118 | ||
119 | linknamespace-symlists-base := $(foreach std,$(conformtest-standards),\ | |
120 | symlist-$(std)) | |
121 | linknamespace-symlists-tests := $(addprefix $(objpfx),\ | |
122 | $(linknamespace-symlists-base)) | |
123 | tests-special += $(linknamespace-symlists-tests) | |
124 | ||
125 | linknamespace-symlist-stdlibs-base := $(foreach std,$(conformtest-standards),\ | |
126 | symlist-stdlibs-$(std)) | |
127 | linknamespace-symlist-stdlibs-tests := \ | |
128 | $(addprefix $(objpfx),\ | |
129 | $(linknamespace-symlist-stdlibs-base)) | |
130 | ||
131 | tests-special += $(linknamespace-symlist-stdlibs-tests) | |
132 | ||
133 | linknamespace-header-base := $(foreach std,\ | |
134 | $(conformtest-standards),\ | |
135 | $(foreach h,\ | |
136 | $(conformtest-headers-$(std)),\ | |
137 | $(std)/$(h)/linknamespace.out)) | |
138 | linknamespace-header-tests := $(addprefix $(objpfx),\ | |
139 | $(linknamespace-header-base)) | |
140 | tests-special += $(linknamespace-header-tests) | |
141 | ||
142 | include ../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). | |
153 | test-xfail-XPG4/varargs.h/conform = yes | |
154 | test-xfail-XPG42/varargs.h/conform = yes | |
155 | test-xfail-UNIX98/varargs.h/conform = yes | |
156 | ||
157 | # Header not provided by glibc. | |
158 | test-xfail-XPG42/ndbm.h/conform = yes | |
159 | test-xfail-UNIX98/ndbm.h/conform = yes | |
160 | test-xfail-XOPEN2K/ndbm.h/conform = yes | |
161 | test-xfail-XOPEN2K8/ndbm.h/conform = yes | |
162 | ||
163 | conformtest-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. | |
167 | conformtest-xfail = $(if $(conformtest-xfail-conds),\ | |
168 | --xfail='$(conformtest-xfail-conds)') | |
169 | ifeq (no,$(cross-compiling)) | |
170 | conformtest-cross = | |
171 | else | |
172 | conformtest-cross = --cross | |
173 | endif | |
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)' --flags='$(conformtest-cc-flags)' \ | |
179 | --standard=$$std --header=$$hdr $(conformtest-xfail) \ | |
180 | $(conformtest-cross) \ | |
181 | > $@ 2>&1); \ | |
182 | $(evaluate-test) | |
183 | ||
184 | $(linknamespace-symlists-tests): $(objpfx)symlist-%: list-header-symbols.py | |
185 | $(PYTHON) $< --cc='$(CC)' --flags='$(conformtest-cc-flags)' \ | |
186 | --standard=$* --headers="$(strip $(conformtest-headers-$*))" \ | |
187 | > $@ 2> $@.err; \ | |
188 | $(evaluate-test) | |
189 | ||
190 | linknamespace-libs-isoc = $(common-objpfx)libc.a $(common-objpfx)math/libm.a | |
191 | linknamespace-libs-thr = $(linknamespace-libs-isoc) \ | |
192 | $(common-objpfx)rt/librt.a $(static-thread-library) | |
193 | linknamespace-libs-posix = $(linknamespace-libs-thr) \ | |
194 | $(common-objpfx)dlfcn/libdl.a | |
195 | linknamespace-libs-xsi = $(linknamespace-libs-posix) | |
196 | linknamespace-libs-ISO = $(linknamespace-libs-isoc) | |
197 | linknamespace-libs-ISO99 = $(linknamespace-libs-isoc) | |
198 | linknamespace-libs-ISO11 = $(linknamespace-libs-isoc) \ | |
199 | $(static-thread-library) | |
200 | linknamespace-libs-XPG4 = $(linknamespace-libs-isoc) | |
201 | linknamespace-libs-XPG42 = $(linknamespace-libs-XPG4) | |
202 | linknamespace-libs-POSIX = $(linknamespace-libs-thr) | |
203 | linknamespace-libs-UNIX98 = $(linknamespace-libs-xsi) | |
204 | linknamespace-libs-XOPEN2K = $(linknamespace-libs-xsi) | |
205 | linknamespace-libs-POSIX2008 = $(linknamespace-libs-posix) | |
206 | linknamespace-libs-XOPEN2K8 = $(linknamespace-libs-xsi) | |
207 | linknamespace-libs = $(foreach std,$(conformtest-standards),\ | |
208 | $(linknamespace-libs-$(std))) | |
209 | ||
210 | ifeq ($(build-crypt),yes) | |
211 | linknamespace-libs-xsi += $(common-objpfx)crypt/libcrypt.a | |
212 | linknamespace-libs-XPG4 += $(common-objpfx)crypt/libcrypt.a | |
213 | endif | |
214 | ||
215 | $(linknamespace-symlist-stdlibs-tests): $(objpfx)symlist-stdlibs-%: \ | |
216 | $(linknamespace-libs) | |
217 | LC_ALL=C $(READELF) -W -s $(linknamespace-libs-$*) > $@; \ | |
218 | $(evaluate-test) | |
219 | ||
220 | $(linknamespace-header-tests): $(objpfx)%/linknamespace.out: \ | |
221 | linknamespace.py \ | |
222 | $(linknamespace-symlists-tests) \ | |
223 | $(linknamespace-symlist-stdlibs-tests) | |
224 | (set -e; std_hdr=$*; std=$${std_hdr%%/*}; hdr=$${std_hdr#*/}; \ | |
225 | mkdir -p $(@D); \ | |
226 | $(PYTHON) $< --cc='$(CC)' --flags='$(conformtest-cc-flags)' \ | |
227 | --standard=$$std --stdsyms=$(objpfx)symlist-$$std \ | |
228 | --header=$$hdr --libsyms=$(objpfx)symlist-stdlibs-$$std \ | |
229 | --readelf='$(READELF)' \ | |
230 | > $@ 2>&1); \ | |
231 | $(evaluate-test) | |
232 | ||
233 | # Pre-standard C feature no longer supported by GCC (obsoleted in | |
234 | # newer POSIX standards). | |
235 | test-xfail-XPG4/varargs.h/linknamespace = yes | |
236 | test-xfail-XPG42/varargs.h/linknamespace = yes | |
237 | test-xfail-UNIX98/varargs.h/linknamespace = yes | |
238 | ||
239 | # Header not provided by glibc. | |
240 | test-xfail-XPG42/ndbm.h/linknamespace = yes | |
241 | test-xfail-UNIX98/ndbm.h/linknamespace = yes | |
242 | test-xfail-XOPEN2K/ndbm.h/linknamespace = yes | |
243 | test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes |