From: Ralf Wildenhues Date: Wed, 11 Mar 2009 22:55:26 +0000 (+0100) Subject: parallel-tests: per-extension test driver: _LOG_COMPILER. X-Git-Tag: v1.10b~4^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=66c2dcaa51c7a1216053dc2dde2d704aa17deef6;p=thirdparty%2Fautomake.git parallel-tests: per-extension test driver: _LOG_COMPILER. For test files with extension , introduce the internal variable _LOG_COMPILE, which expands to $(_LOG_COMPILER) $(AM__LOG_FLAGS) $(_LOG_FLAGS). Turn also the lib/Automake/tests testsuite over to the new test driver. * doc/automake.texi (Tests): Document `EXT_LOG_COMPILER' and `EXT_LOG_FLAGS'. * lib/am/check2.am: Insert `%COMPILE%' right before test. * automake.in (handle_tests): Substitute `COMPILE' for check2, empty for tests without extension, and `$(ext_LOG_COMPILE)' for extension `ext'. In the latter case, define it from the public components. * configure.ac (AM_INIT_AUTOMAKE): Use `parallel-test' globally. * tests/Makefile.am (AUTOMAKE_OPTIONS): Remove, not needed here any more. * lib/Automake/tests/Makefile.am (TESTS_ENVIRONMENT): Split ... (PL_LOG_COMPILER, PL_LOG_FLAGS): ... into these new variables. (TESTS_EXTENSIONS): New variable, initialize to `.pl'. * tests/parallel-tests7.test: New test. * tests/Makefile.am: Update. Suggestion by Akim Demaille. Signed-off-by: Ralf Wildenhues --- diff --git a/ChangeLog b/ChangeLog index 7d360d02d..b4c7b4b79 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2009-03-24 Ralf Wildenhues + + parallel-tests: per-extension test driver: _LOG_COMPILER. + For test files with extension , introduce the internal + variable _LOG_COMPILE, which expands to + $(_LOG_COMPILER) $(AM__LOG_FLAGS) $(_LOG_FLAGS). + Turn also the lib/Automake/tests testsuite over to the new + test driver. + * doc/automake.texi (Tests): Document `EXT_LOG_COMPILER' and + `EXT_LOG_FLAGS'. + * lib/am/check2.am: Insert `%COMPILE%' right before test. + * automake.in (handle_tests): Substitute `COMPILE' for check2, + empty for tests without extension, and `$(ext_LOG_COMPILE)' for + extension `ext'. In the latter case, define it from the public + components. + * configure.ac (AM_INIT_AUTOMAKE): Use `parallel-test' globally. + * tests/Makefile.am (AUTOMAKE_OPTIONS): Remove, not needed here + any more. + * lib/Automake/tests/Makefile.am (TESTS_ENVIRONMENT): Split ... + (PL_LOG_COMPILER, PL_LOG_FLAGS): ... into these new variables. + (TESTS_EXTENSIONS): New variable, initialize to `.pl'. + * tests/parallel-tests7.test: New test. + * tests/Makefile.am: Update. + Suggestion by Akim Demaille. + 2009-03-22 Ralf Wildenhues parallel-tests: also record logs of SKIPped tests. diff --git a/automake.in b/automake.in index 2ab266d04..433f88e41 100755 --- a/automake.in +++ b/automake.in @@ -4801,6 +4801,7 @@ sub handle_tests GENERIC => 0, OBJ => $obj, SOURCE => $val, + COMPILE => '', EXT => ''); return $obj; }); @@ -4825,12 +4826,21 @@ sub handle_tests $post = '.log'; $prev = $cur; $nhelper++; - $output_rules .= file_contents ('check2', new Automake::Location, - GENERIC => 1, - OBJ => '', - SOURCE => '$<', - EXT => $test_suffix) - if $test_suffix ne $at_exeext && $test_suffix ne ''; + if ($test_suffix ne $at_exeext && $test_suffix ne '') + { + (my $ext = $test_suffix) =~ s/^\.//; + $ext = uc $ext; + my $compile = $ext . '_LOG_COMPILE'; + define_variable ($compile, + '$(' . $ext . '_LOG_COMPILER) $(AM_' . $ext . '_LOG_FLAGS)' + . ' $(' . $ext . '_LOG_FLAGS)', INTERNAL); + $output_rules .= file_contents ('check2', new Automake::Location, + GENERIC => 1, + OBJ => '', + SOURCE => '$<', + COMPILE => '$(' . $compile . ')' , + EXT => $test_suffix); + } } define_variable ('TEST_LOGS_TMP', '$(TEST_LOGS:.log=.log-t)', INTERNAL); diff --git a/configure.ac b/configure.ac index 7073d6aa0..d7bf2fa2d 100644 --- a/configure.ac +++ b/configure.ac @@ -29,7 +29,7 @@ AC_CANONICAL_BUILD AC_SUBST([am_AUTOCONF], ["${AUTOCONF-autoconf}"]) AC_SUBST([am_AUTOHEADER], ["${AUTOHEADER-autoheader}"]) -AM_INIT_AUTOMAKE([1.10a dist-bzip2 filename-length-max=99 color-tests]) +AM_INIT_AUTOMAKE([1.10a dist-bzip2 filename-length-max=99 color-tests parallel-tests]) # The API version is the base version. We must guarantee # compatibility for all releases with the same API version. diff --git a/doc/automake.texi b/doc/automake.texi index 7a0bfdfaa..d3b72a541 100644 --- a/doc/automake.texi +++ b/doc/automake.texi @@ -8401,6 +8401,34 @@ extension if any (@pxref{EXEEXT}), as well as any suffix listed in @code{TEST_EXTENSIONS} defaults to @file{.test}. Results are undefined if a test file name ends in several concatenated suffixes. +@vindex _LOG_COMPILER +@vindex _LOG_FLAGS +@vindex @var{EXT}_LOG_COMPILE +@vindex @var{EXT}_LOG_COMPILER +@vindex @var{EXT}_LOG_FLAGS +@vindex AM_@var{EXT}_LOG_FLAGS +For tests that match an extension @code{.@var{ext}} listed in +@code{TEST_EXTENSIONS}, you can provide a test driver using the variable +@code{@var{ext}_LOG_COMPILER} (note the upper-case extension) and pass +options in @code{AM_@var{ext}_LOG_FLAGS} and allow the user to pass +options in @code{@var{ext}_LOG_FLAGS}. It will cause all tests with +this extension to be called with this driver. For example, + +@example +TESTS = foo.pl bar.py +TEST_EXTENSIONS = .pl .py +PL_LOG_COMPILER = $(PERL) +PL_LOG_FLAGS = -w +PY_LOG_COMPILER = $(PYTHON) +PY_LOG_FLAGS = -v +@end example + +@noindent +will invoke @samp{$(PERL) -w foo.pl} and @samp{$(PYTHON) -v bar.py} to +produce @file{foo.log} and @file{bar.log}, respectively. The +@samp{TESTS_ENVIRONMENT} variable is still expanded before the driver, +but should be reserved for the user. + @vindex VERBOSE As with the simple driver above, by default one status line is printed per completed test, and a short summary after the suite has completed. diff --git a/lib/Automake/tests/.gitignore b/lib/Automake/tests/.gitignore new file mode 100644 index 000000000..ffbdfafb7 --- /dev/null +++ b/lib/Automake/tests/.gitignore @@ -0,0 +1,2 @@ +*.log +*.log-t diff --git a/lib/Automake/tests/Makefile.am b/lib/Automake/tests/Makefile.am index acd769fcc..ad5d45e06 100644 --- a/lib/Automake/tests/Makefile.am +++ b/lib/Automake/tests/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to create Makefile.in -## Copyright (C) 2002, 2003, 2008 Free Software Foundation, Inc. +## Copyright (C) 2002, 2003, 2008, 2009 Free Software Foundation, Inc. ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by @@ -15,7 +15,10 @@ ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . -TESTS_ENVIRONMENT = $(PERL) -Mstrict -I ../.. -I $(top_srcdir)/lib -w +PL_LOG_COMPILER = $(PERL) +PL_LOG_FLAGS = -Mstrict -I ../.. -I $(top_srcdir)/lib -w +TEST_EXTENSIONS = .pl + TESTS = \ Condition.pl \ Condition-t.pl \ diff --git a/lib/Automake/tests/Makefile.in b/lib/Automake/tests/Makefile.in index b663fc446..c732762b3 100644 --- a/lib/Automake/tests/Makefile.in +++ b/lib/Automake/tests/Makefile.in @@ -65,6 +65,70 @@ test "X$(AM_COLOR_TESTS)" != Xno \ blu=''; \ std=''; \ } +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +# Restructured Text title and section. +am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' +am__rst_section = sed 'p;s/./=/g;p;g' +# Put stdin (possibly several lines separated by ". ") in a box. +am__text_box = $(AWK) '{ \ + n = split($$0, lines, "\\. "); max = 0; \ + for (i = 1; i <= n; ++i) \ + if (max < length(lines[i])) \ + max = length(lines[i]); \ + for (i = 0; i < max; ++i) line = line "="; \ + print line; \ + for (i = 1; i <= n; ++i) if (lines[i]) print lines[i];\ + print line; \ +}' +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL). This contradicts POSIX. Work around the problem +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log, and passes +# TESTS_ENVIRONMENT. Save and restore TERM around use of +# TESTS_ENVIRONMENT, in case that unsets it. +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +srcdir=$(srcdir); export srcdir; \ +rm -f $@-t; \ +trap 'st=$$?; rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st' \ + 1 2 13 15; \ +am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ +test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ +$(TESTS_ENVIRONMENT) +TEST_SUITE_LOG = test-suite.log +TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) +am__test_logs1 = $(TESTS:=.log) +TEST_LOGS = $(am__test_logs1:.pl.log=.log) +PL_LOG_COMPILE = $(PL_LOG_COMPILER) $(AM_PL_LOG_FLAGS) $(PL_LOG_FLAGS) +TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -154,7 +218,9 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -TESTS_ENVIRONMENT = $(PERL) -Mstrict -I ../.. -I $(top_srcdir)/lib -w +PL_LOG_COMPILER = $(PERL) +PL_LOG_FLAGS = -Mstrict -I ../.. -I $(top_srcdir)/lib -w +TEST_EXTENSIONS = .pl TESTS = \ Condition.pl \ Condition-t.pl \ @@ -167,6 +233,7 @@ EXTRA_DIST = $(TESTS) all: all-am .SUFFIXES: +.SUFFIXES: .html .log .pl $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -204,97 +271,153 @@ ctags: CTAGS CTAGS: -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ - fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ - else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ - else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ - else \ - skipped="($$skip tests were not run)"; \ - fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - echo "$$grn$$dashes"; \ - else \ - echo "$$red$$dashes"; \ - fi; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes$$std"; \ - test "$$failed" -eq 0; \ - else :; fi +# To be appended to the command running the test. Handle the stdout +# and stderr redirection, and catch the exit status. +am__check_post = \ +>$@-t 2>&1; \ +estatus=$$?; \ +if test -n '$(DISABLE_HARD_ERRORS)' \ + && test $$estatus -eq 99; then \ + estatus=1; \ +fi; \ +TERM=$$__SAVED_TERM; export TERM; \ +$(am__tty_colors); \ +xfailed=PASS; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + xfailed=XFAIL;; \ +esac; \ +case $$estatus:$$xfailed in \ + 0:XFAIL) col=$$red; res=XPASS;; \ + 0:*) col=$$grn; res=PASS ;; \ + 77:*) col=$$blu; res=SKIP ;; \ + 99:*) col=$$red; res=FAIL ;; \ + *:XFAIL) col=$$lgn; res=XFAIL;; \ + *:*) col=$$red; res=FAIL ;; \ +esac; \ +echo "$${col}$$res$${std}: $$f"; \ +echo "$$res: $$f (exit: $$estatus)" | \ + $(am__rst_section) >$@; \ +cat $@-t >>$@; \ +rm -f $@-t + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__sh_e_setup); \ + list='$(TEST_LOGS)'; \ + results=`for f in $$list; do \ + read line < $$f && echo "$$line" || echo FAIL; \ + done`; \ + all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ + fail=`echo "$$results" | grep -c '^FAIL'`; \ + pass=`echo "$$results" | grep -c '^PASS'`; \ + skip=`echo "$$results" | grep -c '^SKIP'`; \ + xfail=`echo "$$results" | grep -c '^XFAIL'`; \ + xpass=`echo "$$results" | grep -c '^XPASS'`; \ + failures=`expr $$fail + $$xpass`; \ + all=`expr $$all - $$skip`; \ + if test "$$all" -eq 1; then tests=test; All=; \ + else tests=tests; All="All "; fi; \ + case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ + fail=0:xpass=0:xfail=0) \ + msg="$$All$$all $$tests passed. "; \ + exit=true;; \ + fail=0:xpass=0:xfail=*) \ + msg="$$All$$all $$tests behaved as expected"; \ + if test "$$xfail" -eq 1; then xfailures=failure; \ + else xfailures=failures; fi; \ + msg="$$msg ($$xfail expected $$xfailures). "; \ + exit=true;; \ + fail=*:xpass=0:xfail=*) \ + msg="$$fail of $$all $$tests failed. "; \ + exit=false;; \ + fail=*:xpass=*:xfail=*) \ + msg="$$failures of $$all $$tests did not behave as expected"; \ + if test "$$xpass" -eq 1; then xpasses=pass; \ + else xpasses=passes; fi; \ + msg="$$msg ($$xpass unexpected $$xpasses). "; \ + exit=false;; \ + *) \ + echo >&2 "incorrect case"; exit 4;; \ + esac; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + msg="$$msg($$skip test was not run). "; \ + else \ + msg="$$msg($$skip tests were not run). "; \ + fi; \ + fi; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + echo "$$msg"; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for f in $$list; do \ + read line < $$f; \ + case $$line in \ + PASS:*|XFAIL:*);; \ + *) echo; cat $$f;; \ + esac; \ + done; \ + } >$(TEST_SUITE_LOG).tmp; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if test -n '$(LAZY_TEST_SUITE)'; then \ + msg="$${msg}(tests were rerun lazily). "; \ + fi; \ + if test "$$failures" -ne 0; then \ + msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ + fi; \ + fi; \ + $(am__tty_colors); \ + if $$exit; then \ + echo $(ECHO_N) "$$grn$(ECHO_C)"; \ + else \ + echo $(ECHO_N) "$$red$(ECHO_C)"; \ + fi; \ + echo "$$msg" | $(am__text_box); \ + echo $(ECHO_N) "$$std$(ECHO_C)"; \ + test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ + $$exit + +# Run all the tests. +check-TESTS: + @list='$(TEST_LOGS)'; if test -z '$(LAZY_TEST_SUITE)' \ + && test -n "$$list"; then \ + rm -f $$list; \ + fi + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set_logs=; if test "X$(TEST_LOGS)" = X.log; then \ + set_logs=TEST_LOGS=; \ + fi; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) $$set_logs + +.log.html: + @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ + for r2h in $$list; do \ + if ($$r2h --version) >/dev/null 2>&1; then \ + R2H=$$r2h; \ + fi; \ + done; \ + if test -z "$$R2H"; then \ + echo >&2 "cannot find rst2html, cannot create $@"; \ + exit 2; \ + fi; \ + $$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: + @if $(MAKE) $(AM_MAKEFLAGS) check-TESTS; then :; else \ + rv=$$?; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML); \ + exit $$rv; \ + fi +.pl.log: + @p='$<'; $(am__check_pre) $(PL_LOG_COMPILE) "$$tst" $(am__check_post) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @@ -342,6 +465,10 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) + -test -z "$(TEST_SUITE_HTML)" || rm -f $(TEST_SUITE_HTML) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: @@ -418,18 +545,18 @@ ps-am: uninstall-am: -.MAKE: check-am install-am install-strip - -.PHONY: all all-am check check-TESTS check-am clean clean-generic \ - distclean distclean-generic distdir dvi dvi-am html html-am \ - info info-am install install-am install-data install-data-am \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf 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 uninstall \ - uninstall-am +.MAKE: check-TESTS check-am check-html install-am install-strip + +.PHONY: all all-am check check-TESTS check-am check-html clean \ + clean-generic distclean distclean-generic distdir dvi dvi-am \ + html html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf 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 uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/lib/am/check2.am b/lib/am/check2.am index 58ca9e6ce..237e20aa8 100644 --- a/lib/am/check2.am +++ b/lib/am/check2.am @@ -17,4 +17,4 @@ ## From a test file to a log file. ?GENERIC?%EXT%.log: ?!GENERIC?%OBJ%: %SOURCE% - @p='%SOURCE%'; $(am__check_pre) "$$tst" $(am__check_post) + @p='%SOURCE%'; $(am__check_pre) %COMPILE% "$$tst" $(am__check_post) diff --git a/tests/Makefile.am b/tests/Makefile.am index e0b7f235d..3f31ca9b7 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,5 +1,4 @@ ## Process this file with automake to create Makefile.in -AUTOMAKE_OPTIONS = parallel-tests XFAIL_TESTS = \ all.test \ @@ -486,6 +485,7 @@ parallel-tests3.test \ parallel-tests4.test \ parallel-tests5.test \ parallel-tests6.test \ +parallel-tests7.test \ parse.test \ percent.test \ percent2.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index ff8ed798b..49cb2a2a5 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -130,6 +130,8 @@ TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) TEST_EXTENSIONS = .test am__test_logs1 = $(TESTS:=.log) TEST_LOGS = $(am__test_logs1:.test.log=.log) +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ @@ -220,7 +222,6 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = parallel-tests XFAIL_TESTS = \ all.test \ auxdir2.test \ @@ -714,6 +715,7 @@ parallel-tests3.test \ parallel-tests4.test \ parallel-tests5.test \ parallel-tests6.test \ +parallel-tests7.test \ parse.test \ percent.test \ percent2.test \ @@ -1126,7 +1128,7 @@ check-html: exit $$rv; \ fi .test.log: - @p='$<'; $(am__check_pre) "$$tst" $(am__check_post) + @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ diff --git a/tests/parallel-tests7.test b/tests/parallel-tests7.test new file mode 100755 index 000000000..6bdaaffaa --- /dev/null +++ b/tests/parallel-tests7.test @@ -0,0 +1,90 @@ +#! /bin/sh +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Check parallel-tests features: +# - per-extension test drivers + +. ./defs-p || Exit 1 +set -e + +cat >> configure.in << 'END' +AC_PROG_CC +AC_OUTPUT +END + +cat > Makefile.am << 'END' +## Note that automake should not match the '/test' part +## of 'sub/test' as '.test' suffix. +TESTS = foo.chk bar.test $(check_PROGRAMS) sub/test +check_PROGRAMS = baz bla.test bli.suff +TEST_EXTENSIONS = .chk .test +CHK_LOG_COMPILER = ./chk-driver +TEST_LOG_COMPILER = ./test-driver +AM_CHK_LOG_FLAGS = 1 +CHK_LOG_FLAGS = 2 +AM_TEST_LOG_FLAGS = 3 +TEST_LOG_FLAGS = 4 +END + +mkdir sub + +cat >chk-driver <<'END' +#! /bin/sh +echo $0 "$@" +shift +shift +exec "$@" +exit 127 +END +chmod a+x chk-driver +cp chk-driver test-driver + +cat >foo.chk << 'END' +#! /bin/sh +exit 0 +END +chmod a+x foo.chk +cp foo.chk bar.test +cp foo.chk sub/test + +cat >baz.c << 'END' +int main (void) +{ + return 0; +} +END +cp baz.c bla.c +cp baz.c bli.c + +$ACLOCAL +$AUTOCONF +$AUTOMAKE -a + +unset TESTS || : + +./configure +$MAKE +$MAKE check +grep 'chk-driver *1 *2' foo.log +grep 'test-driver *3 *4' bar.log +test -f baz.log +grep driver baz.log && Exit 1 +grep 'test-driver *3 *4' bla.log +test -f bli.suff.log +grep driver bli.suff.log && Exit 1 +test -f sub/test.log +grep driver sub/test.log && Exit 1 +: