diff --git a/configure/CONFIG_BASE b/configure/CONFIG_BASE index ad963ba94..54d19f2cd 100644 --- a/configure/CONFIG_BASE +++ b/configure/CONFIG_BASE @@ -68,5 +68,6 @@ TAPTOJUNIT = $(PERL) $(TOOLS)/tap-to-junit-xml.pl PROVE = $(PERL) $(TOOLS)/epicsProve.pl PROVE.tap = $(PROVE) --ext .tap --exec "$(CAT)" -TEST_FAILURE_FILE = $(TOP)/.tests-failed +TEST_FAILURE_FILENAME = .tests-failed +TEST_FAILURE_FILE = $(TOP)/$(TEST_FAILURE_FILENAME) PROVE_FAILURE = echo $(abspath .)>> $(TEST_FAILURE_FILE) diff --git a/configure/RULES_MODULES b/configure/RULES_MODULES index 08ebb3e10..a163ce18d 100644 --- a/configure/RULES_MODULES +++ b/configure/RULES_MODULES @@ -23,7 +23,8 @@ # -include $(TOP)/../CONFIG_SITE.local # Add checked-out submodules to DIRS -DIRS += $(subst /Makefile,,$(wildcard $(addsuffix /Makefile, $(SUBMODULES)))) +LIVE_SUBMODULES = $(subst /Makefile,,$(wildcard $(addsuffix /Makefile, $(SUBMODULES)))) +DIRS += $(LIVE_SUBMODULES) include $(CONFIG)/RULES_DIRS @@ -45,3 +46,13 @@ realclean: $(RM) $(wildcard RELEASE.*.local) .PHONY: RELEASE.host realclean + +# Append all our live submodule failure files +FAILURE_FILES = $(addsuffix /$(TEST_FAILURE_FILENAME), $(LIVE_SUBMODULES)) + +runtests: | $(addsuffix $(DIVIDER)runtests, $(LIVE_SUBMODULES)) + @$(TOUCH) $(FAILURE_FILES) + @$(CAT) $(FAILURE_FILES) >> $(TEST_FAILURE_FILE) +test-results: | $(addsuffix $(DIVIDER)test-results, $(LIVE_SUBMODULES)) + @$(TOUCH) $(FAILURE_FILES) + @$(CAT) $(FAILURE_FILES) >> $(TEST_FAILURE_FILE) diff --git a/configure/RULES_TOP b/configure/RULES_TOP index c2b77d64c..b956839ec 100644 --- a/configure/RULES_TOP +++ b/configure/RULES_TOP @@ -50,6 +50,9 @@ uninstall$(DIVIDER)%: $(RMDIR) $(addsuffix /$(subst uninstall$(DIVIDER),,$@), \ $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB)) +runtests test-results: + @$(PERL) $(TOOLS)/testFailures.pl $(TEST_FAILURE_FILE) + else # # Using a disabled rule aborts @@ -63,8 +66,7 @@ endif # DISABLE_TOP_RULES before-runtests before-test-results: rm-failure-file rm-failure-file: @$(RM) $(TEST_FAILURE_FILE) -runtests test-results: - $(PERL) $(TOOLS)/testFailures.pl $(TEST_FAILURE_FILE) + @$(TOUCH) $(TEST_FAILURE_FILE) help: @echo "Usage: gnumake [options] [target] ..." diff --git a/src/tools/testFailures.pl b/src/tools/testFailures.pl index e19d00006..3007957e3 100644 --- a/src/tools/testFailures.pl +++ b/src/tools/testFailures.pl @@ -22,12 +22,17 @@ use warnings; die "Usage: testFailures.pl .tests-failed\n" unless @ARGV == 1; +# No file means success. open FAILURES, '<', shift or exit 0; -my @failures = ; +chomp(my @failures = ); close FAILURES; +# A file with just empty lines also mean success +my @dirs = grep {$_} @failures; +exit 0 unless @dirs; + print "\nTest failures were reported in:\n", - (map {" $_"} @failures), "\n"; + (map {" $_\n"} @dirs), "\n\n"; exit 1;