From: Akim Demaille Date: Mon, 6 Apr 2009 05:03:16 +0000 (+0200) Subject: parallel-tests: redo check-html, recheck, recheck-html. X-Git-Tag: v1.11~32^2~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=68b7dc1d9413d84179f879eb6720a585039eb8b3;p=thirdparty%2Fautomake.git parallel-tests: redo check-html, recheck, recheck-html. * lib/am/check.am (recheck, recheck-am): Remove. (recheck-TESTS): Rename to ... (recheck): ... this and rewrite, factored ... (recheck-html): ... with this rule. Pass TEST_LOGS rather than RECHECK_LOGS to `check' and `check-html', respectively, to avoid running outdated tests. Invoking the public macros ensures `check_SCRIPTS' etc. are created in time. Do not output errors for tests that were not run yet. If the testsuite has not run at all, run all tests. (check-html): Run `check' target, not `check-TESTS', to ensure `check_SCRIPTS' etc. are created in time. (.PHONY, .MAKE, AM_RECURSIVE_TARGETS): Adjust contents. * tests/parallel-tests2.test: Expose the check-html and recheck-html issues. * tests/parallel-tests9.test: Expose the recheck issues. Bugs in previous version pointed out by Akim, who already had them fixed in his original version. Signed-off-by: Ralf Wildenhues --- diff --git a/ChangeLog b/ChangeLog index 7eb5db7fd..0526ce578 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2009-04-06 Akim Demaille + Ralf Wildenhues + + parallel-tests: redo check-html, recheck, recheck-html. + * lib/am/check.am (recheck, recheck-am): Remove. + (recheck-TESTS): Rename to ... + (recheck): ... this and rewrite, factored ... + (recheck-html): ... with this rule. Pass TEST_LOGS rather than + RECHECK_LOGS to `check' and `check-html', respectively, to avoid + running outdated tests. Invoking the public macros ensures + `check_SCRIPTS' etc. are created in time. Do not output errors + for tests that were not run yet. If the testsuite has not run + at all, run all tests. + (check-html): Run `check' target, not `check-TESTS', to ensure + `check_SCRIPTS' etc. are created in time. + (.PHONY, .MAKE, AM_RECURSIVE_TARGETS): Adjust contents. + * tests/parallel-tests2.test: Expose the check-html and + recheck-html issues. + * tests/parallel-tests9.test: Expose the recheck issues. + Bugs in previous version pointed out by Akim, who already had + them fixed in his original version. + 2009-04-04 Ralf Wildenhues parallel-tests: LOG_COMPILER for tests without known extension. diff --git a/lib/Automake/tests/Makefile.in b/lib/Automake/tests/Makefile.in index 0596752d2..5af0d0eee 100644 --- a/lib/Automake/tests/Makefile.in +++ b/lib/Automake/tests/Makefile.in @@ -124,7 +124,7 @@ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ $(TESTS_ENVIRONMENT) RECHECK_LOGS = $(TEST_LOGS) -AM_RECURSIVE_TARGETS = check recheck check-html recheck-html +AM_RECURSIVE_TARGETS = check check-html recheck recheck-html TEST_SUITE_LOG = test-suite.log TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) am__test_logs1 = $(TESTS:=.log) @@ -389,17 +389,6 @@ check-TESTS: set_logs=TEST_LOGS=; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) $$set_logs -recheck-TESTS: - @list='$(TEST_LOGS)'; \ - logs=`for f in $$list; do \ - if read line < $$f; then \ - case $$line in FAIL*|XPASS*) echo $$f;; esac; \ - else echo $$f; fi; \ - done | tr '\012\015' ' '`; \ - $(MAKE) $(AM_MAKEFLAGS) check-TESTS RECHECK_LOGS="$$logs" - -recheck-am: recheck-TESTS -recheck: recheck-am .log.html: @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ @@ -415,15 +404,31 @@ recheck: recheck-am $$R2H $< >$@.tmp @mv $@.tmp $@ -# Be sure to run check-TESTS first, and then to convert the result. -# Beware of concurrent executions. And expect check-TESTS to fail. -check-html recheck-html: - @target=`echo $@ | sed 's/-html$$//'`; \ - if $(MAKE) $(AM_MAKEFLAGS) $$target-TESTS; then \ +# Be sure to run check first, and then to convert the result. +# Beware of concurrent executions. Run "check" not "check-TESTS", as +# check-SCRIPTS and other dependencies are rebuilt by the former only. +# And expect check to fail. +check-html: + @if $(MAKE) $(AM_MAKEFLAGS) check; then \ rv=0; else rv=$$?; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) || exit 4; \ exit $$rv +recheck recheck-html: + @target=`echo $@ | sed 's,^re,,'`; \ + list='$(TEST_LOGS)'; \ + if test -f $(TEST_SUITE_LOG); then \ + list=`for f in $$list; do \ + test -f $$f || continue; \ + if read line < $$f; then \ + case $$line in FAIL*|XPASS*) echo $$f;; esac; \ + else echo $$f; fi; \ + done | tr '\012\015' ' '`; \ + args=TEST_LOGS=$$list; \ + $(MAKE) $(AM_MAKEFLAGS) $$target TEST_LOGS="$$list"; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) $$target; \ + fi .pl.log: @p='$<'; $(am__check_pre) $(PL_LOG_COMPILE) "$$tst" $(am__check_post) @@ -557,7 +562,7 @@ ps-am: uninstall-am: -.MAKE: check-am check-html install-am install-strip recheck-am \ +.MAKE: check-am check-html install-am install-strip recheck \ recheck-html .PHONY: all all-am check check-TESTS check-am check-html clean \ @@ -569,8 +574,7 @@ uninstall-am: install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ - pdf-am ps ps-am recheck recheck-TESTS recheck-am recheck-html \ - uninstall uninstall-am + pdf-am ps ps-am recheck recheck-html uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/lib/am/check.am b/lib/am/check.am index f5153e36d..67ed8cdcd 100644 --- a/lib/am/check.am +++ b/lib/am/check.am @@ -239,23 +239,7 @@ check-TESTS: fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) $$set_logs -## Rerun all FAILed or XPASSed tests (as well as all whose logs are out -## of date or do not exist). -recheck-TESTS: - @list='$(TEST_LOGS)'; \ - logs=`for f in $$list; do \ - if read line < $$f; then \ - case $$line in FAIL*|XPASS*) echo $$f;; esac; \ - else echo $$f; fi; \ - done | tr '\012\015' ' '`; \ - $(MAKE) $(AM_MAKEFLAGS) check-TESTS RECHECK_LOGS="$$logs" - -recheck-am: recheck-TESTS -recheck: recheck-am -.PHONY: recheck recheck-am recheck-TESTS -.MAKE: recheck-am - -AM_RECURSIVE_TARGETS += check recheck +AM_RECURSIVE_TARGETS += check ## -------------- ## ## Produce HTML. ## @@ -275,19 +259,49 @@ AM_RECURSIVE_TARGETS += check recheck $$R2H $< >$@.tmp @mv $@.tmp $@ -# Be sure to run check-TESTS first, and then to convert the result. -# Beware of concurrent executions. And expect check-TESTS to fail. -check-html recheck-html: - @target=`echo $@ | sed 's/-html$$//'`; \ - if $(MAKE) $(AM_MAKEFLAGS) $$target-TESTS; then \ +# Be sure to run check first, and then to convert the result. +# Beware of concurrent executions. Run "check" not "check-TESTS", as +# check-SCRIPTS and other dependencies are rebuilt by the former only. +# And expect check to fail. +check-html: + @if $(MAKE) $(AM_MAKEFLAGS) check; then \ rv=0; else rv=$$?; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) || exit 4; \ exit $$rv -.PHONY: check-html recheck-html -.MAKE: check-html recheck-html -AM_RECURSIVE_TARGETS += check-html recheck-html +.PHONY: check-html +.MAKE: check-html + +AM_RECURSIVE_TARGETS += check-html + +## -------------------- ## +## Rechecking failures. ## +## -------------------- ## + +## Rerun all FAILed or XPASSed tests (as well as all whose logs are out +## of date or do not exist). +recheck recheck-html: + @target=`echo $@ | sed 's,^re,,'`; \ + list='$(TEST_LOGS)'; \ +## If the test suite has not been run yet, then run it in full + if test -f $(TEST_SUITE_LOG); then \ + list=`for f in $$list; do \ + test -f $$f || continue; \ + if read line < $$f; then \ + case $$line in FAIL*|XPASS*) echo $$f;; esac; \ + else echo $$f; fi; \ + done | tr '\012\015' ' '`; \ + args=TEST_LOGS=$$list; \ + $(MAKE) $(AM_MAKEFLAGS) $$target TEST_LOGS="$$list"; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) $$target; \ + fi + +.PHONY: recheck recheck-html +.MAKE: recheck recheck-html + +AM_RECURSIVE_TARGETS += recheck recheck-html else !%?PARALLEL_TESTS% diff --git a/tests/Makefile.in b/tests/Makefile.in index 58de5e34b..a903cd219 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -126,7 +126,7 @@ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ $(TESTS_ENVIRONMENT) RECHECK_LOGS = $(TEST_LOGS) -AM_RECURSIVE_TARGETS = check recheck check-html recheck-html +AM_RECURSIVE_TARGETS = check check-html recheck recheck-html TEST_SUITE_LOG = test-suite.log TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) TEST_EXTENSIONS = .test @@ -1120,17 +1120,6 @@ check-TESTS: set_logs=TEST_LOGS=; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) $$set_logs -recheck-TESTS: - @list='$(TEST_LOGS)'; \ - logs=`for f in $$list; do \ - if read line < $$f; then \ - case $$line in FAIL*|XPASS*) echo $$f;; esac; \ - else echo $$f; fi; \ - done | tr '\012\015' ' '`; \ - $(MAKE) $(AM_MAKEFLAGS) check-TESTS RECHECK_LOGS="$$logs" - -recheck-am: recheck-TESTS -recheck: recheck-am .log.html: @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ @@ -1146,15 +1135,31 @@ recheck: recheck-am $$R2H $< >$@.tmp @mv $@.tmp $@ -# Be sure to run check-TESTS first, and then to convert the result. -# Beware of concurrent executions. And expect check-TESTS to fail. -check-html recheck-html: - @target=`echo $@ | sed 's/-html$$//'`; \ - if $(MAKE) $(AM_MAKEFLAGS) $$target-TESTS; then \ +# Be sure to run check first, and then to convert the result. +# Beware of concurrent executions. Run "check" not "check-TESTS", as +# check-SCRIPTS and other dependencies are rebuilt by the former only. +# And expect check to fail. +check-html: + @if $(MAKE) $(AM_MAKEFLAGS) check; then \ rv=0; else rv=$$?; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) || exit 4; \ exit $$rv +recheck recheck-html: + @target=`echo $@ | sed 's,^re,,'`; \ + list='$(TEST_LOGS)'; \ + if test -f $(TEST_SUITE_LOG); then \ + list=`for f in $$list; do \ + test -f $$f || continue; \ + if read line < $$f; then \ + case $$line in FAIL*|XPASS*) echo $$f;; esac; \ + else echo $$f; fi; \ + done | tr '\012\015' ' '`; \ + args=TEST_LOGS=$$list; \ + $(MAKE) $(AM_MAKEFLAGS) $$target TEST_LOGS="$$list"; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) $$target; \ + fi .test.log: @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) @@ -1290,7 +1295,7 @@ ps-am: uninstall-am: -.MAKE: check-am check-html install-am install-strip recheck-am \ +.MAKE: check-am check-html install-am install-strip recheck \ recheck-html .PHONY: all all-am check check-TESTS check-am check-html clean \ @@ -1302,8 +1307,7 @@ uninstall-am: install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ - pdf-am ps ps-am recheck recheck-TESTS recheck-am recheck-html \ - uninstall uninstall-am + pdf-am ps ps-am recheck recheck-html uninstall uninstall-am $(srcdir)/parallel-tests.am: gen-parallel-tests Makefile.am diff --git a/tests/parallel-tests2.test b/tests/parallel-tests2.test index f9e2a3c33..3331a0c26 100755 --- a/tests/parallel-tests2.test +++ b/tests/parallel-tests2.test @@ -30,11 +30,16 @@ END cat > Makefile.am << 'END' TEST_SUITE_LOG = mylog.log TESTS = foo.test bar.test baz.test +check_SCRIPTS = bla +bla: + echo bla > $@ +CLEANFILES = bla END cat >>foo.test <<'END' #! /bin/sh echo "this is $0" +test -f bla || exit 1 exit 0 END cat >>bar.test <<'END' @@ -69,4 +74,15 @@ rm -f mylog.html env TESTS=foo.test $MAKE -e recheck-html >stdout || { cat stdout; Exit 1; } cat stdout test -f mylog.html + +# check-html and recheck-html should cause check_SCRIPTS to be created, +# and recheck-html should rerun all tests if check has not been run. +$MAKE clean +env TESTS=foo.test $MAKE -e check-html +test -f bla +$MAKE clean +env TESTS=foo.test $MAKE -e recheck-html +test -f bla +test -f foo.log +test -f mylog.html : diff --git a/tests/parallel-tests9.test b/tests/parallel-tests9.test index 7c935d96d..a61df6090 100755 --- a/tests/parallel-tests9.test +++ b/tests/parallel-tests9.test @@ -28,11 +28,16 @@ END cat > Makefile.am << 'END' TEST_SUITE_LOG = mylog.log TESTS = foo.test bar.test baz.test +check_SCRIPTS = bla +CLEANFILES = bla +bla: + echo bla > $@ END cat >>foo.test <<'END' #! /bin/sh echo "this is $0" +test -f bla || exit 1 exit 0 END cat >>bar.test <<'END' @@ -67,4 +72,13 @@ $MAKE recheck >stdout && { cat stdout; Exit 1; } cat stdout grep foo.test stdout || Exit 1 +# Ensure that recheck builds check_SCRIPTS, and that +# recheck reruns all tests if check has not been run. +$MAKE clean +$MAKE recheck && Exit 1 +test -f bla +test -f foo.log +test -f bar.log +test -f baz.log +test -f mylog.log :