* Stefano Lattarini wrote on Tue, Sep 07, 2010 at 03:15:54AM CEST: > > --- a/lib/am/check.am > > +++ b/lib/am/check.am
> > + { echo "TEST_LOGS = "; \ > > + for f in $$list; do \ > > + test .log = $$f || echo $$f; \ > > + done; \ > > + } | { tr '\012\015' ' '; echo; } \ > > + | $(MAKE) -f Makefile -f - $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) > Does this works even if the developer is using, say, GNUmakefile.am instead > of Makefile.am? No; thanks for the reminder. It also doesn't work with vendor makes that have text file line length limitations. I'm applying the following patch to maint to avoid the issue. Unfortunately, the same technique will not work for recheck and recheck-html. So no rechecking unless the number of failures is lower than the command-line length limit allows. Thanks, Ralf parallel-tests: avoid command-line length limit issue. * automake.in (handle_tests): New argument $makefile, new substitution %MAKEFILE%. (generate_makefile): Adjust. * lib/am/check.am [%?PARALLEL_TESTS%] (check-TESTS): Pass sanitized TEST_LOGS value as makefile snippet on standard input to $(MAKE), to avoid exceeding the command line limit on w32 (MSYS). * NEWS: Update. Report by Bob Friesenhahn. diff --git a/NEWS b/NEWS index b3d4131..3a0ca06 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,9 @@ Bugs fixed in 1.11.0a: - The AM_COND_IF macro also works if the shell expression for the conditional is no longer valid for the condition. + - The `parallel-tests' driver works around a problem with command-line + length limits with `make check' on w32 (MSYS). + * Long standing bugs: - On Darwin 9, `pythondir' and `pyexecdir' pointed below `/Library/Python' diff --git a/automake.in b/automake.in index 381202b..fa098bb 100755 --- a/automake.in +++ b/automake.in @@ -4908,9 +4908,13 @@ sub handle_tests_dejagnu } +# handle_tests ($MAKEFILE) +# ------------------------ # Handle TESTS variable and other checks. -sub handle_tests +sub handle_tests ($) { + my ($makefile) = @_; + if (option 'dejagnu') { &handle_tests_dejagnu; @@ -4929,7 +4933,8 @@ sub handle_tests push (@check_tests, 'check-TESTS'); $output_rules .= &file_contents ('check', new Automake::Location, COLOR => !! option 'color-tests', - PARALLEL_TESTS => !! option 'parallel-tests'); + PARALLEL_TESTS => !! option 'parallel-tests', + MAKEFILE => basename $makefile); # Tests that are known programs should have $(EXEEXT) appended. # For matching purposes, we need to adjust XFAIL_TESTS as well. @@ -8211,7 +8216,7 @@ sub generate_makefile ($$) handle_tags; handle_minor_options; # Must come after handle_programs so that %known_programs is up-to-date. - handle_tests; + handle_tests ($makefile); # This must come after most other rules. handle_dist; diff --git a/lib/am/check.am b/lib/am/check.am index c612b22..b79201f 100644 --- a/lib/am/check.am +++ b/lib/am/check.am @@ -236,10 +236,10 @@ check-TESTS: ## we rely on .PHONY to work portably. @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @list='$(TEST_LOGS)'; \ - list=`for f in $$list; do \ - test .log = $$f || echo $$f; \ - done | tr '\012\015' ' '`; \ - $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" + { echo "TEST_LOGS = \\"; \ + for f in $$list; do test .log = $$f || echo "$$f \\"; done; \ + } | sed '$$s/\\$$//' \ + | $(MAKE) -f %MAKEFILE% -f - $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) AM_RECURSIVE_TARGETS += check