automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

parallel-tests: avoid command-line length limit issue. (was: Automake 1.


From: Ralf Wildenhues
Subject: parallel-tests: avoid command-line length limit issue. (was: Automake 1.11.1 glitch?)
Date: Tue, 7 Sep 2010 05:10:38 +0200
User-agent: Mutt/1.5.20 (2010-04-22)

* 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
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]