* 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 <Ralf.Wildenhues@gmx.de>
+2009-04-06 Akim Demaille <akim@lrde.epita.fr>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ 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 <Ralf.Wildenhues@gmx.de>
parallel-tests: LOG_COMPILER for tests without known extension.
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)
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'; \
$$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)
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 \
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.
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. ##
$$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%
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
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'; \
$$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)
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 \
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
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'
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
:
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'
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
: