]>
Commit | Line | Data |
---|---|---|
688903eb | 1 | # Copyright (C) 1999-2018 Free Software Foundation, Inc. |
da1067a9 UD |
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 | |
41bdb6e2 AJ |
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. | |
da1067a9 UD |
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 | |
41bdb6e2 | 12 | # Lesser General Public License for more details. |
da1067a9 | 13 | |
41bdb6e2 | 14 | # You should have received a copy of the GNU Lesser General Public |
59ba27a6 PE |
15 | # License along with the GNU C Library; if not, see |
16 | # <http://www.gnu.org/licenses/>. | |
da1067a9 UD |
17 | |
18 | # | |
19 | # Sub-makefile for conform portion of the library. | |
20 | # | |
21 | subdir := conform | |
22 | ||
a5f891ac JM |
23 | include ../Makeconfig |
24 | ||
54ee292d JM |
25 | conformtest-headers-data := $(wildcard data/*.h-data) \ |
26 | $(wildcard data/*/*.h-data) | |
27 | ||
0516e24d | 28 | conformtest-standards := ISO ISO99 ISO11 POSIX XPG4 XPG42 UNIX98 XOPEN2K \ |
54ee292d JM |
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 | |
0516e24d JM |
46 | # Missing XPG4 expectations for: regexp.h wchar.h. |
47 | conformtest-headers-XPG4 := $(conformtest-headers-ISO) cpio.h dirent.h \ | |
54ee292d JM |
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 | |
0516e24d JM |
54 | # Missing XPG42 expectations for: re_comp.h regexp.h wchar.h. |
55 | # XPG42 includes XTI, but xti.h is outside the scope of these tests. | |
56 | conformtest-headers-XPG42 := $(conformtest-headers-XPG4) arpa/inet.h fmtmsg.h \ | |
54ee292d JM |
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)) | |
ba63ba08 | 114 | ifneq (yes,$(fast-check)) |
54ee292d JM |
115 | tests-special += $(conformtest-header-tests) |
116 | generated += $(conformtest-header-base) | |
ba63ba08 | 117 | endif |
31341567 | 118 | |
24f4f825 JM |
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 | ||
0e7e69ba JM |
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) | |
24f4f825 JM |
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 | ||
f214606a JM |
142 | include ../Rules |
143 | ||
54ee292d JM |
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)" > $@; \ | |
f0881698 | 149 | $(evaluate-test) |
31341567 | 150 | |
54ee292d JM |
151 | # Pre-standard C feature no longer supported by GCC (obsoleted in |
152 | # newer POSIX standards). | |
54ee292d | 153 | test-xfail-XPG4/varargs.h/conform = yes |
0516e24d | 154 | test-xfail-XPG42/varargs.h/conform = yes |
54ee292d JM |
155 | test-xfail-UNIX98/varargs.h/conform = yes |
156 | ||
157 | # Header not provided by glibc. | |
0516e24d | 158 | test-xfail-XPG42/ndbm.h/conform = yes |
54ee292d JM |
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 | ||
54ee292d | 163 | conformtest-cc-flags = -I../include $(+sysdep-includes) $(sysincludes) -I.. |
33c02810 JM |
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)') | |
c33eac51 JM |
169 | ifeq (no,$(cross-compiling)) |
170 | conformtest-cross = | |
171 | else | |
172 | conformtest-cross = --cross | |
173 | endif | |
54ee292d JM |
174 | $(conformtest-header-tests): $(objpfx)%/conform.out: \ |
175 | conformtest.pl $(conformtest-headers-data) | |
176 | (set -e; std_hdr=$*; std=$${std_hdr%%/*}; hdr=$${std_hdr#*/}; \ | |
177 | mkdir -p $(@D)/scratch; \ | |
6d533621 | 178 | $(PERL) -I. conformtest.pl --tmpdir=$(@D)/scratch --cc='$(CC)' \ |
54ee292d | 179 | --flags='$(conformtest-cc-flags)' --standard=$$std \ |
c33eac51 JM |
180 | --headers=$$hdr $(conformtest-xfail) $(conformtest-cross) \ |
181 | > $@); \ | |
54ee292d | 182 | $(evaluate-test) |
24f4f825 JM |
183 | |
184 | $(linknamespace-symlists-tests): $(objpfx)symlist-%: list-header-symbols.pl | |
6d533621 | 185 | $(PERL) -I. -w $< --tmpdir=$(objpfx) --cc='$(CC)' \ |
24f4f825 JM |
186 | --flags='$(conformtest-cc-flags)' --standard=$* \ |
187 | --headers="$(strip $(conformtest-headers-$*))" \ | |
188 | > $@ 2> $@.err; \ | |
189 | $(evaluate-test) | |
190 | ||
0e7e69ba | 191 | linknamespace-libs-isoc = $(common-objpfx)libc.a $(common-objpfx)math/libm.a |
85d31921 JM |
192 | linknamespace-libs-thr = $(linknamespace-libs-isoc) \ |
193 | $(common-objpfx)rt/librt.a $(static-thread-library) | |
194 | linknamespace-libs-posix = $(linknamespace-libs-thr) \ | |
195 | $(common-objpfx)dlfcn/libdl.a | |
196 | linknamespace-libs-xsi = $(linknamespace-libs-posix) \ | |
197 | $(common-objpfx)crypt/libcrypt.a | |
0e7e69ba JM |
198 | linknamespace-libs-ISO = $(linknamespace-libs-isoc) |
199 | linknamespace-libs-ISO99 = $(linknamespace-libs-isoc) | |
200 | linknamespace-libs-ISO11 = $(linknamespace-libs-isoc) | |
0516e24d | 201 | linknamespace-libs-XPG4 = $(linknamespace-libs-isoc) \ |
85d31921 | 202 | $(common-objpfx)crypt/libcrypt.a |
0516e24d | 203 | linknamespace-libs-XPG42 = $(linknamespace-libs-XPG4) |
85d31921 JM |
204 | linknamespace-libs-POSIX = $(linknamespace-libs-thr) |
205 | linknamespace-libs-UNIX98 = $(linknamespace-libs-xsi) | |
206 | linknamespace-libs-XOPEN2K = $(linknamespace-libs-xsi) | |
207 | linknamespace-libs-POSIX2008 = $(linknamespace-libs-posix) | |
208 | linknamespace-libs-XOPEN2K8 = $(linknamespace-libs-xsi) | |
4283b387 AS |
209 | linknamespace-libs = $(foreach std,$(conformtest-standards),\ |
210 | $(linknamespace-libs-$(std))) | |
24f4f825 | 211 | |
0e7e69ba JM |
212 | $(linknamespace-symlist-stdlibs-tests): $(objpfx)symlist-stdlibs-%: \ |
213 | $(linknamespace-libs) | |
214 | LC_ALL=C $(READELF) -W -s $(linknamespace-libs-$*) > $@; \ | |
24f4f825 JM |
215 | $(evaluate-test) |
216 | ||
217 | $(linknamespace-header-tests): $(objpfx)%/linknamespace.out: \ | |
0e7e69ba | 218 | linknamespace.pl \ |
6c50bb53 | 219 | $(linknamespace-symlists-tests) \ |
0e7e69ba | 220 | $(linknamespace-symlist-stdlibs-tests) |
24f4f825 JM |
221 | (set -e; std_hdr=$*; std=$${std_hdr%%/*}; hdr=$${std_hdr#*/}; \ |
222 | mkdir -p $(@D)/scratch; \ | |
6d533621 | 223 | $(PERL) -I. -w $< --tmpdir=$(@D)/scratch --cc='$(CC)' \ |
24f4f825 JM |
224 | --flags='$(conformtest-cc-flags)' --standard=$$std \ |
225 | --stdsyms=$(objpfx)symlist-$$std --header=$$hdr \ | |
0e7e69ba JM |
226 | --libsyms=$(objpfx)symlist-stdlibs-$$std \ |
227 | --readelf='$(READELF)' \ | |
24f4f825 JM |
228 | > $@ 2>&1); \ |
229 | $(evaluate-test) | |
230 | ||
231 | # Pre-standard C feature no longer supported by GCC (obsoleted in | |
232 | # newer POSIX standards). | |
24f4f825 | 233 | test-xfail-XPG4/varargs.h/linknamespace = yes |
0516e24d | 234 | test-xfail-XPG42/varargs.h/linknamespace = yes |
24f4f825 JM |
235 | test-xfail-UNIX98/varargs.h/linknamespace = yes |
236 | ||
237 | # Header not provided by glibc. | |
0516e24d | 238 | test-xfail-XPG42/ndbm.h/linknamespace = yes |
24f4f825 JM |
239 | test-xfail-UNIX98/ndbm.h/linknamespace = yes |
240 | test-xfail-XOPEN2K/ndbm.h/linknamespace = yes | |
241 | test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes |