parallel-tests: redo check-html, recheck, recheck-html.
authorAkim Demaille <akim@lrde.epita.fr>
Mon, 6 Apr 2009 05:03:16 +0000 (07:03 +0200)
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Mon, 6 Apr 2009 05:48:07 +0000 (07:48 +0200)
* 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>
ChangeLog
lib/Automake/tests/Makefile.in
lib/am/check.am
tests/Makefile.in
tests/parallel-tests2.test
tests/parallel-tests9.test

index 7eb5db7..0526ce5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+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.
index 0596752..5af0d0e 100644 (file)
@@ -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.
index f5153e3..67ed8cd 100644 (file)
@@ -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%
 
index 58de5e3..a903cd2 100644 (file)
@@ -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
index f9e2a3c..3331a0c 100755 (executable)
@@ -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
 :
index 7c935d9..a61df60 100755 (executable)
@@ -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
 :