X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=Rules;h=8dbac56ce63851fda25e35d2c339685eeb4ad657;hb=7b8481b330720d28c019a2e5994492a1923d5daa;hp=9ad1d1112709a7594317a7e1ab133e94a8c026ab;hpb=73e0cd5d0de276a6c41c78920ff79d8e11991240;p=thirdparty%2Fglibc.git diff --git a/Rules b/Rules index 9ad1d111270..8dbac56ce63 100644 --- a/Rules +++ b/Rules @@ -1,4 +1,4 @@ -# Copyright (C) 1991-2013 Free Software Foundation, Inc. +# Copyright (C) 1991-2019 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 @@ -13,7 +13,7 @@ # You should have received a copy of the GNU Lesser General Public # License along with the GNU C Library; if not, see -# . +# . # # Rules for making a subdirectory in the GNU C library. @@ -80,31 +80,106 @@ $(common-objpfx)dummy.c: (echo 'extern void __dummy__ (void);'; \ echo 'void __dummy__ (void) { }') > $@ common-generated += dummy.o dummy.c + +ifneq "$(headers)" "" +# Test that all of the headers installed by this directory can be compiled +# in isolation. +tests-special += $(objpfx)check-installed-headers-c.out +libof-check-installed-headers-c := testsuite +$(objpfx)check-installed-headers-c.out: \ + $(..)scripts/check-installed-headers.sh $(headers) + $(SHELL) $(..)scripts/check-installed-headers.sh c \ + "$(CC) $(filter-out -std=%,$(CFLAGS)) -D_ISOMAC $(+includes)" \ + $(headers) > $@; \ + $(evaluate-test) + +ifneq "$(CXX)" "" +# If a C++ compiler is available, also test that they can be compiled +# in isolation as C++. +tests-special += $(objpfx)check-installed-headers-cxx.out +libof-check-installed-headers-cxx := testsuite +$(objpfx)check-installed-headers-cxx.out: \ + $(..)scripts/check-installed-headers.sh $(headers) + $(SHELL) $(..)scripts/check-installed-headers.sh c++ \ + "$(CXX) $(filter-out -std=%,$(CXXFLAGS)) -D_ISOMAC $(+includes)" \ + $(headers) > $@; \ + $(evaluate-test) +endif # $(CXX) + +# Test that a wrapper header exists in include/ for each non-sysdeps header. +# This script does not need $(py-env). +tests-special += $(objpfx)check-wrapper-headers.out +$(objpfx)check-wrapper-headers.out: \ + $(..)scripts/check-wrapper-headers.py $(headers) + $(PYTHON) $< --root=$(..) --subdir=$(subdir) $(headers) > $@; \ + $(evaluate-test) + +# Test that none of the headers installed by this directory use certain +# obsolete constructs (e.g. legacy BSD typedefs superseded by stdint.h). +# This script does not need $(py-env). +tests-special += $(objpfx)check-obsolete-constructs.out +libof-check-obsolete-constructs := testsuite +$(objpfx)check-obsolete-constructs.out: \ + $(..)scripts/check-obsolete-constructs.py $(headers) + $(PYTHON) $^ > $@ 2>&1; \ + $(evaluate-test) + +endif # $(headers) # This makes all the auxiliary and test programs. -.PHONY: others tests bench -ifeq ($(multi-arch),no) -tests := $(filter-out $(tests-ifunc), $(tests)) -xtests := $(filter-out $(xtests-ifunc), $(xtests)) -endif +.PHONY: others tests bench bench-build + +# Test programs for the pretty printers. +tests-printers-programs := $(addprefix $(objpfx),$(tests-printers)) + +# .out files with the output of running the pretty printer tests. +tests-printers-out := $(patsubst %,$(objpfx)%.out,$(tests-printers)) ifeq ($(build-programs),yes) others: $(addprefix $(objpfx),$(others) $(sysdep-others) $(extra-objs)) else others: $(addprefix $(objpfx),$(extra-objs)) endif + +# Generate constant files for Python pretty printers if required. +others: $(py-const) + +ifeq ($(run-built-tests),no) +tests: $(addprefix $(objpfx),$(filter-out $(tests-unsupported), \ + $(tests) $(tests-internal) \ + $(tests-container)) \ + $(test-srcs)) $(tests-special) \ + $(tests-printers-programs) +xtests: tests $(xtests-special) +else +tests: $(tests:%=$(objpfx)%.out) $(tests-internal:%=$(objpfx)%.out) \ + $(tests-container:%=$(objpfx)%.out) \ + $(tests-special) $(tests-printers-out) +xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-special) +endif + +tests-special-notdir = $(patsubst $(objpfx)%, %, $(tests-special)) +xtests-special-notdir = $(patsubst $(objpfx)%, %, $(xtests-special)) ifeq ($(run-built-tests),no) -tests: $(addprefix $(objpfx),$(tests) $(test-srcs)) -xtests: tests +tests-expected = else -tests: $(tests:%=$(objpfx)%.out) -xtests: tests $(xtests:%=$(objpfx)%.out) +tests-expected = $(tests) $(tests-internal) $(tests-printers) \ + $(tests-container) endif +tests: + $(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \ + $(sort $(tests-expected) $(tests-special-notdir:.out=)) \ + > $(objpfx)subdir-tests.sum +xtests: + $(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \ + $(sort $(xtests) $(xtests-special-notdir:.out=)) \ + > $(objpfx)subdir-xtests.sum ifeq ($(build-programs),yes) binaries-all-notests = $(others) $(sysdep-others) -binaries-all-tests = $(tests) $(xtests) $(test-srcs) +binaries-all-tests = $(tests) $(tests-internal) $(xtests) $(test-srcs) \ + $(tests-container) binaries-all = $(binaries-all-notests) $(binaries-all-tests) binaries-static-notests = $(others-static) binaries-static-tests = $(tests-static) $(xtests-static) @@ -118,7 +193,7 @@ binaries-pie-notests = endif else binaries-all-notests = -binaries-all-tests = $(tests) $(xtests) $(test-srcs) +binaries-all-tests = $(tests) $(tests-internal) $(xtests) $(test-srcs) binaries-all = $(binaries-all-tests) binaries-static-notests = binaries-static-tests = @@ -142,6 +217,7 @@ endif ifneq "$(strip $(binaries-shared-tests))" "" $(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \ + $(link-extra-libs-tests) \ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) $(+link-tests) @@ -149,6 +225,7 @@ endif ifneq "$(strip $(binaries-pie-tests))" "" $(addprefix $(objpfx),$(binaries-pie-tests)): %: %.o \ + $(link-extra-libs-tests) \ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) $(+link-pie-tests) @@ -170,53 +247,75 @@ endif ifneq "$(strip $(binaries-static-tests))" "" $(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \ + $(link-extra-libs-tests) \ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) $(+link-static-tests) endif -ifneq "$(strip $(tests) $(xtests) $(test-srcs))" "" +ifneq "$(strip $(tests) $(tests-internal) $(xtests) $(test-srcs))" "" # These are the implicit rules for making test outputs # from the test programs and whatever input files are present. -make-test-out = $(test-wrapper-env) \ - GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \ - $($*-ENV) $(host-test-program-cmd) $($*-ARGS) +define make-test-out +$(if $($*-ENV-only),$(test-wrapper-env-only) $($*-ENV-only),\ + $(test-wrapper-env) $(run-program-env) $($*-ENV)) \ +$(host-test-program-cmd) $($*-ARGS) +endef $(objpfx)%.out: %.input $(objpfx)% - $(make-test-out) > $@ < $(word 1,$^) + $(make-test-out) > $@ < $(word 1,$^); \ + $(evaluate-test) $(objpfx)%.out: /dev/null $(objpfx)% # Make it 2nd arg for canned sequence. - $(make-test-out) > $@ + $(make-test-out) > $@; \ + $(evaluate-test) + + +# Any tests that require an isolated container (filesystem, network +# and pid namespaces) in which to run, should be added to +# tests-container. +$(tests-container:%=$(objpfx)%.out): $(objpfx)%.out : $(if $(wildcard $(objpfx)%.files),$(objpfx)%.files,/dev/null) $(objpfx)% + $(test-wrapper-env) $(run-program-env) $(run-via-rtld-prefix) \ + $(common-objpfx)support/test-container env $(run-program-env) $($*-ENV) \ + $(host-test-program-cmd) $($*-ARGS) > $@; \ + $(evaluate-test) + + +# tests-unsupported lists tests that we will not try to build at all in +# this configuration. Note this runs every time because it does not +# actually create its target. The dependency on Makefile is meant to +# ensure that it runs after a Makefile change to add a test to the list +# when it previously ran and produced a .out file (probably for a failure). +ifneq "$(strip $(tests-unsupported))" "" +$(tests-unsupported:%=$(objpfx)%.out): $(objpfx)%.out: Makefile + @rm -f $@ + $(..)scripts/evaluate-test.sh $(patsubst $(common-objpfx)%.out,%,$@) \ + 77 false false > $(@:.out=.test-result) +endif endif # tests -# Build and run benchmark programs. -binaries-bench := $(addprefix $(objpfx)bench-,$(bench)) - -run-bench = $(test-wrapper-env) \ - GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \ - $($*-ENV) $(run-via-rtld-prefix) $${run} +ifneq "$(strip $(tests-printers))" "" -bench: $(binaries-bench) - if [ -f $(objpfx)bench.out ]; then \ - mv -f $(objpfx)bench.out $(objpfx)bench.out.old; \ - fi - for run in $^; do \ - echo "Running $${run}"; \ - eval $(run-bench) >> $(objpfx)bench.out; \ - done - -$(binaries-bench): %: %.o \ - $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ +# Static pattern rule for building the test programs for the pretty printers. +$(tests-printers-programs): %: %.o $(tests-printers-libs) \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) - $(+link) - -$(objpfx)bench-%.c: %-inputs bench-skeleton.c - { if [ -n "$($*-INCLUDE)" ]; then \ - cat $($*-INCLUDE); \ - fi; \ - $(..)scripts/bench.pl $(patsubst %-inputs,%,$<) \ - $($*-ITER) $($*-ARGLIST) $($*-RET); } > $@-tmp - mv -f $@-tmp $@ + $(+link-printers-tests) + +# Add the paths to the generated constants file and test_common_printers.py +# to PYTHONPATH so the test scripts can find them. +py-env := PYTHONPATH=$(py-const-dir):$(..)scripts:$${PYTHONPATH} + +# Static pattern rule that matches the test-* targets to their .c and .py +# prerequisites. It'll run the corresponding test script for each test program +# we compiled and place its output in the corresponding .out file. +# The pretty printer files and test_common_printers.py must be present for all. +$(tests-printers-out): $(objpfx)%.out: $(objpfx)% %.py %.c $(pretty-printers) \ + $(..)scripts/test_printers_common.py + $(test-wrapper-env) $(py-env) \ + $(PYTHON) $*.py $*.c $(objpfx)$* $(pretty-printers) > $@; \ + $(evaluate-test) +endif .PHONY: distclean realclean subdir_distclean subdir_realclean \