| # Copyright (C) 1999-2018 Free Software Foundation, Inc. |
| # This file is part of the GNU C Library. |
| |
| # The GNU C Library is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU Lesser General Public |
| # License as published by the Free Software Foundation; either |
| # version 2.1 of the License, or (at your option) any later version. |
| |
| # The GNU C Library is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # Lesser General Public License for more details. |
| |
| # You should have received a copy of the GNU Lesser General Public |
| # License along with the GNU C Library; if not, see |
| # <http://www.gnu.org/licenses/>. |
| |
| # |
| # Sub-makefile for conform portion of the library. |
| # |
| subdir := conform |
| |
| include ../Makeconfig |
| |
| conformtest-headers-data := $(wildcard data/*.h-data) \ |
| $(wildcard data/*/*.h-data) |
| |
| conformtest-standards := ISO ISO99 ISO11 POSIX XPG4 XPG42 UNIX98 XOPEN2K \ |
| POSIX2008 XOPEN2K8 |
| |
| conformtest-headers-ISO := assert.h ctype.h errno.h float.h limits.h locale.h \ |
| math.h setjmp.h signal.h stdarg.h stddef.h stdio.h \ |
| stdlib.h string.h time.h |
| conformtest-headers-ISO99 := $(conformtest-headers-ISO) complex.h fenv.h \ |
| inttypes.h iso646.h stdbool.h stdint.h tgmath.h \ |
| wchar.h wctype.h |
| # Missing ISO11 expectations for: stdatomic.h threads.h. |
| conformtest-headers-ISO11 := $(conformtest-headers-ISO99) stdalign.h \ |
| stdnoreturn.h uchar.h |
| conformtest-headers-POSIX := $(conformtest-headers-ISO) aio.h dirent.h \ |
| fcntl.h fnmatch.h glob.h grp.h mqueue.h \ |
| pthread.h pwd.h regex.h sched.h semaphore.h \ |
| sys/mman.h sys/stat.h sys/times.h sys/types.h \ |
| sys/utsname.h sys/wait.h tar.h termios.h \ |
| unistd.h utime.h wordexp.h |
| # Missing XPG4 expectations for: regexp.h wchar.h. |
| conformtest-headers-XPG4 := $(conformtest-headers-ISO) cpio.h dirent.h \ |
| fcntl.h fnmatch.h ftw.h glob.h grp.h iconv.h \ |
| langinfo.h monetary.h nl_types.h pwd.h regex.h \ |
| search.h sys/ipc.h sys/msg.h sys/sem.h sys/shm.h \ |
| sys/stat.h sys/times.h sys/types.h sys/utsname.h \ |
| sys/wait.h tar.h termios.h ulimit.h unistd.h \ |
| utime.h varargs.h wordexp.h |
| # Missing XPG42 expectations for: re_comp.h regexp.h wchar.h. |
| # XPG42 includes XTI, but xti.h is outside the scope of these tests. |
| conformtest-headers-XPG42 := $(conformtest-headers-XPG4) arpa/inet.h fmtmsg.h \ |
| libgen.h ndbm.h netdb.h netinet/in.h poll.h \ |
| strings.h stropts.h sys/mman.h sys/resource.h \ |
| sys/socket.h sys/statvfs.h sys/time.h sys/timeb.h \ |
| sys/uio.h sys/un.h syslog.h ucontext.h utmpx.h |
| # Missing UNIX98 expectations for: inttypes.h re_comp.h regexp.h. |
| # The online UNIX98 includes XCURSES, but curses.h, term.h and |
| # unctrl.h are outside the scope of these tests. It also includes |
| # XTI, but xti.h is outside the scope of these tests. |
| conformtest-headers-UNIX98 := $(conformtest-headers-POSIX) arpa/inet.h cpio.h \ |
| dlfcn.h fmtmsg.h ftw.h iconv.h iso646.h \ |
| langinfo.h libgen.h monetary.h ndbm.h netdb.h \ |
| netinet/in.h nl_types.h poll.h search.h \ |
| strings.h stropts.h sys/ipc.h sys/msg.h \ |
| sys/resource.h sys/sem.h sys/shm.h sys/socket.h \ |
| sys/statvfs.h sys/time.h sys/timeb.h sys/uio.h \ |
| sys/un.h syslog.h ucontext.h ulimit.h utmpx.h \ |
| varargs.h wchar.h wctype.h |
| # Missing XOPEN2K expectations for: trace.h. |
| conformtest-headers-XOPEN2K := $(conformtest-headers-POSIX) arpa/inet.h \ |
| complex.h cpio.h dlfcn.h fenv.h fmtmsg.h ftw.h \ |
| iconv.h inttypes.h iso646.h langinfo.h \ |
| libgen.h monetary.h ndbm.h net/if.h netdb.h \ |
| netinet/in.h netinet/tcp.h nl_types.h poll.h \ |
| search.h spawn.h stdbool.h stdint.h strings.h \ |
| stropts.h sys/ipc.h sys/msg.h sys/resource.h \ |
| sys/select.h sys/sem.h sys/shm.h sys/socket.h \ |
| sys/statvfs.h sys/time.h sys/timeb.h sys/uio.h \ |
| sys/un.h syslog.h tgmath.h ucontext.h ulimit.h \ |
| utmpx.h wchar.h wctype.h |
| # Missing POSIX2008 expectations for: trace.h. |
| conformtest-headers-POSIX2008 := $(conformtest-headers-POSIX) arpa/inet.h \ |
| complex.h cpio.h dlfcn.h fenv.h iconv.h \ |
| inttypes.h iso646.h langinfo.h monetary.h \ |
| net/if.h netdb.h netinet/in.h netinet/tcp.h \ |
| nl_types.h poll.h spawn.h stdbool.h stdint.h \ |
| strings.h stropts.h sys/select.h \ |
| sys/socket.h sys/statvfs.h sys/un.h tgmath.h \ |
| wchar.h wctype.h |
| # Missing XOPEN2K8 expectations for: trace.h. |
| conformtest-headers-XOPEN2K8 := $(conformtest-headers-POSIX2008) fmtmsg.h \ |
| ftw.h libgen.h ndbm.h search.h sys/ipc.h \ |
| sys/msg.h sys/resource.h sys/sem.h sys/shm.h \ |
| sys/time.h sys/uio.h syslog.h ulimit.h utmpx.h |
| |
| conformtest-header-list-base := $(foreach std,$(conformtest-standards),\ |
| header-list-$(std).out) |
| conformtest-header-list-tests := $(addprefix $(objpfx),\ |
| $(conformtest-header-list-base)) |
| tests-special += $(conformtest-header-list-tests) |
| generated += $(conformtest-header-list-base) |
| |
| conformtest-header-base := $(foreach std,\ |
| $(conformtest-standards),\ |
| $(foreach h,\ |
| $(conformtest-headers-$(std)),\ |
| $(std)/$(h)/conform.out)) |
| conformtest-header-tests := $(addprefix $(objpfx),$(conformtest-header-base)) |
| ifneq (yes,$(fast-check)) |
| tests-special += $(conformtest-header-tests) |
| generated += $(conformtest-header-base) |
| endif |
| |
| linknamespace-symlists-base := $(foreach std,$(conformtest-standards),\ |
| symlist-$(std)) |
| linknamespace-symlists-tests := $(addprefix $(objpfx),\ |
| $(linknamespace-symlists-base)) |
| tests-special += $(linknamespace-symlists-tests) |
| |
| linknamespace-symlist-stdlibs-base := $(foreach std,$(conformtest-standards),\ |
| symlist-stdlibs-$(std)) |
| linknamespace-symlist-stdlibs-tests := \ |
| $(addprefix $(objpfx),\ |
| $(linknamespace-symlist-stdlibs-base)) |
| |
| tests-special += $(linknamespace-symlist-stdlibs-tests) |
| |
| linknamespace-header-base := $(foreach std,\ |
| $(conformtest-standards),\ |
| $(foreach h,\ |
| $(conformtest-headers-$(std)),\ |
| $(std)/$(h)/linknamespace.out)) |
| linknamespace-header-tests := $(addprefix $(objpfx),\ |
| $(linknamespace-header-base)) |
| tests-special += $(linknamespace-header-tests) |
| |
| include ../Rules |
| |
| $(conformtest-header-list-tests): $(objpfx)header-list-%.out: \ |
| check-header-lists.sh \ |
| $(conformtest-headers-data) |
| $(SHELL) $< "$*" "$(CC)" "$(strip $(conformtest-headers-$*))" \ |
| "$(conformtest-headers-data)" > $@; \ |
| $(evaluate-test) |
| |
| # Pre-standard C feature no longer supported by GCC (obsoleted in |
| # newer POSIX standards). |
| test-xfail-XPG4/varargs.h/conform = yes |
| test-xfail-XPG42/varargs.h/conform = yes |
| test-xfail-UNIX98/varargs.h/conform = yes |
| |
| # Header not provided by glibc. |
| test-xfail-XPG42/ndbm.h/conform = yes |
| test-xfail-UNIX98/ndbm.h/conform = yes |
| test-xfail-XOPEN2K/ndbm.h/conform = yes |
| test-xfail-XOPEN2K8/ndbm.h/conform = yes |
| |
| conformtest-cc-flags = -I../include $(+sysdep-includes) $(sysincludes) -I.. |
| # conformtest-xfail-conds may be set by a sysdeps Makefile fragment to |
| # a list of conditions that are considered to be true when encountered |
| # in xfail[cond]- lines in test expectations. |
| conformtest-xfail = $(if $(conformtest-xfail-conds),\ |
| --xfail='$(conformtest-xfail-conds)') |
| ifeq (no,$(cross-compiling)) |
| conformtest-cross = |
| else |
| conformtest-cross = --cross |
| endif |
| $(conformtest-header-tests): $(objpfx)%/conform.out: \ |
| conformtest.pl $(conformtest-headers-data) |
| (set -e; std_hdr=$*; std=$${std_hdr%%/*}; hdr=$${std_hdr#*/}; \ |
| mkdir -p $(@D)/scratch; \ |
| $(PERL) -I. conformtest.pl --tmpdir=$(@D)/scratch --cc='$(CC)' \ |
| --flags='$(conformtest-cc-flags)' --standard=$$std \ |
| --headers=$$hdr $(conformtest-xfail) $(conformtest-cross) \ |
| --withclang='$(with-clang)' \ |
| > $@); \ |
| $(evaluate-test) |
| |
| $(linknamespace-symlists-tests): $(objpfx)symlist-%: list-header-symbols.pl |
| $(PERL) -I. -w $< --tmpdir=$(objpfx) --cc='$(CC)' \ |
| --flags='$(conformtest-cc-flags)' --standard=$* \ |
| --headers="$(strip $(conformtest-headers-$*))" \ |
| --withclang='$(with-clang)' \ |
| > $@ 2> $@.err; \ |
| $(evaluate-test) |
| |
| linknamespace-libs-isoc = $(common-objpfx)libc.a $(common-objpfx)math/libm.a |
| linknamespace-libs-thr = $(linknamespace-libs-isoc) \ |
| $(common-objpfx)rt/librt.a $(static-thread-library) |
| linknamespace-libs-posix = $(linknamespace-libs-thr) \ |
| $(common-objpfx)dlfcn/libdl.a |
| linknamespace-libs-xsi = $(linknamespace-libs-posix) \ |
| $(common-objpfx)crypt/libcrypt.a |
| linknamespace-libs-ISO = $(linknamespace-libs-isoc) |
| linknamespace-libs-ISO99 = $(linknamespace-libs-isoc) |
| linknamespace-libs-ISO11 = $(linknamespace-libs-isoc) |
| linknamespace-libs-XPG4 = $(linknamespace-libs-isoc) \ |
| $(common-objpfx)crypt/libcrypt.a |
| linknamespace-libs-XPG42 = $(linknamespace-libs-XPG4) |
| linknamespace-libs-POSIX = $(linknamespace-libs-thr) |
| linknamespace-libs-UNIX98 = $(linknamespace-libs-xsi) |
| linknamespace-libs-XOPEN2K = $(linknamespace-libs-xsi) |
| linknamespace-libs-POSIX2008 = $(linknamespace-libs-posix) |
| linknamespace-libs-XOPEN2K8 = $(linknamespace-libs-xsi) |
| linknamespace-libs = $(foreach std,$(conformtest-standards),\ |
| $(linknamespace-libs-$(std))) |
| |
| $(linknamespace-symlist-stdlibs-tests): $(objpfx)symlist-stdlibs-%: \ |
| $(linknamespace-libs) |
| LC_ALL=C $(READELF) -W -s $(linknamespace-libs-$*) > $@; \ |
| $(evaluate-test) |
| |
| $(linknamespace-header-tests): $(objpfx)%/linknamespace.out: \ |
| linknamespace.pl \ |
| $(linknamespace-symlists-tests) \ |
| $(linknamespace-symlist-stdlibs-tests) |
| (set -e; std_hdr=$*; std=$${std_hdr%%/*}; hdr=$${std_hdr#*/}; \ |
| mkdir -p $(@D)/scratch; \ |
| $(PERL) -I. -w $< --tmpdir=$(@D)/scratch --cc='$(CC)' \ |
| --flags='$(conformtest-cc-flags)' --standard=$$std \ |
| --stdsyms=$(objpfx)symlist-$$std --header=$$hdr \ |
| --libsyms=$(objpfx)symlist-stdlibs-$$std \ |
| --readelf='$(READELF)' \ |
| --withclang='$(with-clang)' \ |
| > $@ 2>&1); \ |
| $(evaluate-test) |
| |
| # Pre-standard C feature no longer supported by GCC (obsoleted in |
| # newer POSIX standards). |
| test-xfail-XPG4/varargs.h/linknamespace = yes |
| test-xfail-XPG42/varargs.h/linknamespace = yes |
| test-xfail-UNIX98/varargs.h/linknamespace = yes |
| |
| # Header not provided by glibc. |
| test-xfail-XPG42/ndbm.h/linknamespace = yes |
| test-xfail-UNIX98/ndbm.h/linknamespace = yes |
| test-xfail-XOPEN2K/ndbm.h/linknamespace = yes |
| test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes |