# 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 # . # # 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