automake-patches
[Top][All Lists]
Advanced

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

Re: parallel-tests: $(EXEEXT) fixes


From: Ralf Wildenhues
Subject: Re: parallel-tests: $(EXEEXT) fixes
Date: Thu, 9 Apr 2009 00:23:21 +0200
User-agent: Mutt/1.5.18 (2008-05-17)

* Ralf Wildenhues wrote on Sat, Apr 04, 2009 at 01:18:01PM CEST:
> Remaining ugly spot in this patch: it adds code to every configure
> script of every package using Automake (and pulls in m4/cond.m4 into
> every aclocal.m4 file): we can't use _AM_IF_OPTION easily because the
> `parallel-tests' option may have been set in one subdir Makefile.am
> only, and I don't easily see yet how to describe `if any of the
> AC_PROG_{CC,CXX,FC,F77,..} have run, expand this'.
> 
> Suggestions?

Eric helped me hash this issue out, here's the relevant discussion:
<http://thread.gmane.org/gmane.comp.sysutils.autoconf.patches/6538>

The only nitty-gritty remaining spot of this patch now is that each
invocation of AC_CONFIG_COMMANDS_PRE adds a newline to the configure
script; in this case, even if the EXEEXT stuff is never used.
Oh well.  A few extra newlines are a small price to pay for backward
compatibility (I think removing that could break some
AC_CONFIG_COMMANDS_PRE instances used out there).

> I intend to push this patch to the `next' branch in the next couple of
> days.

Pushed now as two patches, as the two testsuite latter failures are
independent of the parallel-tests issue.

Cheers,
Ralf

2009-04-08  Ralf Wildenhues  <address@hidden>
            Eric Blake <address@hidden>

        parallel-tests: Fix driver for nonempty executable extension.
        * automake.in (handle_tests): New substitution `%am__EXEEXT%',
        defined as 'FALSE' for non-generic rules, or if no programs are
        built at all.  Otherwise, define it as configure conditional.
        * lib/am/check2.am [%am__EXEEXT%] (%EXT%$(EXEEXT).log): New
        conditional generic rule.
        * m4/init.m4: Hook an m4_provide of `_AM_COMPILER_EXEEXT' onto
        Autoconf's `_AC_COMPILER_EXEEXT' macro.
        (AM_INIT_AUTOMAKE): If `_AM_COMPILER_EXEEXT' has been provided
        at `AC_CONFIG_COMMANDS_PRE' time, then introduce a conditional
        `am__EXEEXT', defined to true iff `$EXEEXT' is nonempty.
        * tests/check5.test: Only match `_EXEEXT_[1-9]' here, to avoid
        false positives stemming from address@hidden@'.
        * NEWS: Update.

diff --git a/NEWS b/NEWS
index cb11035..cf01518 100644
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,11 @@ Bugs fixed in 1.10c:
   - Renamed objects also work with the `subdir-objects' option and
     source file languages which Automake does not know itself.
 
+* Bugs introduced by 1.10:
+
+  - The `parallel-tests' driver also works on systems with a nonempty
+    executable extension, such as Windows.
+
 
 New in 1.10b:
 
diff --git a/automake.in b/automake.in
index 2577ffb..10927a1 100755
--- a/automake.in
+++ b/automake.in
@@ -4912,7 +4912,8 @@ sub handle_tests
          define_variable ('TEST_SUITE_HTML', '$(TEST_SUITE_LOG:.log=.html)', 
INTERNAL);
          my $suff = '.test';
          my $at_exeext = '';
-         if (exists $configure_vars{'EXEEXT'})
+         my $handle_exeext = exists $configure_vars{'EXEEXT'};
+         if ($handle_exeext)
            {
              $at_exeext = subst ('EXEEXT');
              $suff = $at_exeext  . ' ' . $suff;
@@ -4920,7 +4921,7 @@ sub handle_tests
          define_variable ('TEST_EXTENSIONS', $suff, INTERNAL);
          # FIXME: this mishandles conditions.
          my @test_suffixes = (var 'TEST_EXTENSIONS')->value_as_list_recursive;
-         if (exists $configure_vars{'EXEEXT'})
+         if ($handle_exeext)
            {
              unshift (@test_suffixes, $at_exeext)
                unless $test_suffixes[0] eq $at_exeext;
@@ -4958,7 +4959,8 @@ sub handle_tests
                                                OBJ => $obj,
                                                SOURCE => $val,
                                                COMPILE =>'$(' . $compile . ')',
-                                               EXT => '');
+                                               EXT => '',
+                                               am__EXEEXT => 'FALSE');
                return $obj;
              });
 
@@ -4990,12 +4992,14 @@ sub handle_tests
                  define_variable ($compile,
                                   '$(' . $ext . '_LOG_COMPILER) $(AM_' .  $ext 
. '_LOG_FLAGS)'
                                   . ' $(' . $ext . '_LOG_FLAGS)', INTERNAL);
+                 my $am_exeext = $handle_exeext ? 'am__EXEEXT' : 'FALSE';
                  $output_rules .= file_contents ('check2', new 
Automake::Location,
                                                  GENERIC => 1,
                                                  OBJ => '',
                                                  SOURCE => '$<',
                                                  COMPILE => '$(' . $compile . 
')',
-                                                 EXT => $test_suffix);
+                                                 EXT => $test_suffix,
+                                                 am__EXEEXT => $am_exeext);
                }
            }
 
diff --git a/lib/am/check2.am b/lib/am/check2.am
index 237e20a..3e9eed2 100644
--- a/lib/am/check2.am
+++ b/lib/am/check2.am
@@ -18,3 +18,12 @@
 ?GENERIC?%EXT%.log:
 ?!GENERIC?%OBJ%: %SOURCE%
        @p='%SOURCE%'; $(am__check_pre) %COMPILE% "$$tst" $(am__check_post)
+
+## If no programs are built in this package, then this rule is removed
+## at automake time.  Otherwise, %am__EXEEXT% expands to a configure time
+## conditional, true if $(EXEEXT) is nonempty, thus this rule does not
+## conflict with the previous one.
+if %am__EXEEXT%
+?GENERIC?%EXT%$(EXEEXT).log:
+       @p='%SOURCE%'; $(am__check_pre) %COMPILE% "$$tst" $(am__check_post)
+endif %am__EXEEXT%
diff --git a/m4/init.m4 b/m4/init.m4
index a4d5c90..5978502 100644
--- a/m4/init.m4
+++ b/m4/init.m4
@@ -7,7 +7,7 @@
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 15
+# serial 16
 
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
@@ -103,8 +103,20 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJC],
 AM_BACKSLASH='\'
 AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
 ])
 
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
 
 # When config.status generates a header, we must update the stamp-h file.
 # This file resides in the same directory as the config header
diff --git a/tests/check5.test b/tests/check5.test
index 58c8607..e2e0210 100755
--- a/tests/check5.test
+++ b/tests/check5.test
@@ -1,5 +1,5 @@
 #! /bin/sh
-# Copyright (C) 2006, 2007, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2007, 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
@@ -52,6 +52,6 @@ test -f ok
 EXEEXT=.bin $MAKE -e print-tests >output
 cat output
 # No am__EXEEXT_* variable is needed.
-grep '_EXEEXT' Makefile.in && Exit 1
+grep '_EXEEXT_[1-9]' Makefile.in && Exit 1
 grep 'BEG: one.bin two.bin :END' output
 $FGREP 'TESTS = $(check_PROGRAMS)' Makefile.in


2009-04-08  Ralf Wildenhues  <address@hidden>

        Fix a couple of $(EXEEXT)-related testsuite failure.
        * tests/check8.test: Allow executable extensions in test suite
        output.
        * tests/check9.test: Add `$(EXEEXT)' manually to @substituted@
        XFAIL_TESTS entries.

 2009-04-07  Florian Briegel  <address@hidden>  (tiny change)
diff --git a/tests/check8.test b/tests/check8.test
index 3e38ccf..1fe2a53 100755
--- a/tests/check8.test
+++ b/tests/check8.test
@@ -1,5 +1,5 @@
 #! /bin/sh
-# Copyright (C) 2008  Free Software Foundation, Inc.
+# Copyright (C) 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
@@ -73,10 +73,10 @@ cat stdout
 cat stderr >&2
 grep 'XPASS.* foo$' stdout
 grep '^[^X]*PASS.* sub/foo$' stdout
-grep '^[^X]*PASS.* bar$' stdout
-grep '^[^X]*PASS.* sub/bar$' stdout
-grep '^[^X]*FAIL.* baz$' stdout
-grep 'XFAIL.* sub/baz$' stdout
+grep '^[^X]*PASS.* bar' stdout
+grep '^[^X]*PASS.* sub/bar' stdout
+grep '^[^X]*FAIL.* baz' stdout
+grep 'XFAIL.* sub/baz' stdout
 # parallel-tests should not add circular dependencies.
 # Look for known warnings from a couple of `make' implementations.
 grep -i 'circular.*dependency' stderr && Exit 1
@@ -93,8 +93,8 @@ cat stdout
 # rewriting (if we fix that, we can still write a separate test for it).
 grep 'XPASS.*foo$' stdout
 grep '^[^X]*PASS.*sub/foo$' stdout
-grep '^[^X]*PASS.*bar$' stdout
-grep '^[^X]*PASS.*sub/bar$' stdout
-grep '^[^X]*FAIL.*baz$' stdout
-grep 'XFAIL.*sub/baz$' stdout
+grep '^[^X]*PASS.*bar' stdout
+grep '^[^X]*PASS.*sub/bar' stdout
+grep '^[^X]*FAIL.*baz' stdout
+grep 'XFAIL.*sub/baz' stdout
 :
diff --git a/tests/check9.test b/tests/check9.test
index 91c37c5..658e636 100755
--- a/tests/check9.test
+++ b/tests/check9.test
@@ -1,5 +1,5 @@
 #! /bin/sh
-# Copyright (C) 2008  Free Software Foundation, Inc.
+# Copyright (C) 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
@@ -26,7 +26,7 @@ cat >> configure.in << 'END'
 AC_PROG_CC
 AC_SUBST([script_tests], ['subst-pass-script.test subst-xfail-script.test'])
 AC_SUBST([prog_tests], ['subst-pass-prog.test$(EXEEXT) 
subst-xfail-prog.test$(EXEEXT)'])
-AC_SUBST([xfail_tests], ['xfail-script.test subst-xfail-script.test xfail-prog 
subst-xfail-prog.test$(EXEEXT)'])
+AC_SUBST([xfail_tests], ['xfail-script.test subst-xfail-script.test 
xfail-prog$(EXEEXT) subst-xfail-prog.test$(EXEEXT)'])
 AC_OUTPUT
 END
 




reply via email to

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