Hello,

following up on a thread which started at
http://lists.gnu.org/archive/html/autoconf-patches/2005-08/msg00088.html
and continued at
http://lists.gnu.org/archive/html/autoconf-patches/2005-09/msg00020.html

On Fri, Sep 30, 2005 at 11:48:47AM +0200, Stepan Kasal wrote:
> > With this patch in CVS Autoconf, CVS Automake fails the tests
> >   subdir5.test pr300-lib.test distname.test
...
> My fault, Automake is correct.

I have updated the patch, adding some more little changes, and verified
that is passes make check and that if I upgrade Autoconf, Automake's
make check still passes.

I committed the patch in the form attached below.

Have a nice fortnight,
        Stepan
2006-04-01  Stepan Kasal  <[EMAIL PROTECTED]>

        Clean up _AC_COMPILER_EXEEXT* macros.

        * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Don't try to
          detect exeext, it will be done by _AC_COMPILER_EXEEXT_O; just set
          ac_file to the name of the default output filei and call
          _AC_COMPILER_EXEEXT_WORKS.  Move the definition of ac_files and the
          initial `rm' of the candidate files...
        (_AC_COMPILER_EXEEXT): ... here and simplify them.  Moreover, use
          the same list in subsequent `rm' calls, and for the temporary
          redefinition of ac_clean_files; call _AC_COMPILER_OBJEXT at the end,
          and don't call the other _AC_COMPILER_EXEEXT_* macros directly, use...
        (_AC_COMPILER_EXEEXT_TESTS): ... this new macro.
        (_AC_COMPILER_EXEEXT_O): Don't export ac_cv_exeext, it's not needed (or
          no longer needed) by libtool.  Make it a cache check.
        (_AC_COMPILER_EXEEXT_CROSS): Remove the comment, it was obviously
          copied here by mistake.
        (AC_NO_EXECUTABLES): Redefine _AC_COMPILER_EXEEXT_TESTS, not
          _AC_COMPILER_EXEEXT.
        * lib/autoconf/c.m4 (AC_PROG_CC, AC_PROG_CXX, AC_PROG_OBJC): Do not call
          _AC_COMPILER_OBJEXT directly.
        * lib/autoconf/fortran.m4 (_AC_PROG_FC): Likewise.

Index: lib/autoconf/c.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/c.m4,v
retrieving revision 1.214
diff -u -r1.214 c.m4
--- lib/autoconf/c.m4   1 Apr 2006 19:38:07 -0000       1.214
+++ lib/autoconf/c.m4   1 Apr 2006 21:44:03 -0000
@@ -548,7 +548,6 @@
 _AC_EVAL([$ac_compiler -V >&AS_MESSAGE_LOG_FD])
 
 m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
-m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
 _AC_LANG_COMPILER_GNU
 GCC=`test $ac_compiler_gnu = yes && echo yes`
 _AC_PROG_CC_G
@@ -784,7 +783,6 @@
 _AC_EVAL([$ac_compiler -V >&AS_MESSAGE_LOG_FD])
 
 m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
-m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
 _AC_LANG_COMPILER_GNU
 GXX=`test $ac_compiler_gnu = yes && echo yes`
 _AC_PROG_CXX_G
@@ -954,7 +952,6 @@
 _AC_EVAL([$ac_compiler -V >&AS_MESSAGE_LOG_FD])
 
 m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
-m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
 _AC_LANG_COMPILER_GNU
 GOBJC=`test $ac_compiler_gnu = yes && echo yes`
 _AC_PROG_OBJC_G
Index: lib/autoconf/fortran.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/fortran.m4,v
retrieving revision 1.202
diff -u -r1.202 fortran.m4
--- lib/autoconf/fortran.m4     24 Jan 2006 00:28:29 -0000      1.202
+++ lib/autoconf/fortran.m4     1 Apr 2006 21:44:04 -0000
@@ -370,7 +370,6 @@
 rm -f a.out
 
 m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
-m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
 # If we don't use `.F' as extension, the preprocessor is not run on the
 # input file.  (Note that this only needs to work for GNU compilers.)
 ac_save_ext=$ac_ext
Index: lib/autoconf/lang.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/lang.m4,v
retrieving revision 1.175
diff -u -r1.175 lang.m4
--- lib/autoconf/lang.m4        1 Apr 2006 15:57:02 -0000       1.175
+++ lib/autoconf/lang.m4        1 Apr 2006 21:44:05 -0000
@@ -378,11 +378,10 @@
 AC_BEFORE([$0], [_AC_COMPILER_EXEEXT])
 AC_BEFORE([$0], [AC_LINK_IFELSE])
 
-m4_define([_AC_COMPILER_EXEEXT],
-[AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
-if AC_TRY_EVAL(ac_link); then
+m4_define([_AC_COMPILER_EXEEXT_TESTS],
+[if AC_TRY_EVAL(ac_link); then
   ac_no_link=no
-  ]m4_defn([_AC_COMPILER_EXEEXT])[
+  ]m4_defn([_AC_COMPILER_EXEEXT_TESTS])[
 else
   ac_no_link=yes
   # Setting cross_compile will disable run tests; it will
@@ -475,61 +474,32 @@
 # of exeext.
 AC_MSG_CHECKING([for _AC_LANG compiler default output file name])
 ac_link_default=`echo "$ac_link" | sed ['s/ -o *conftest[^ ]*//']`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort.  b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions.  Remove them first so a
-# subsequent execution test works.
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    _AC_COMPILER_EXEEXT_REJECT ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
 
 AS_IF([AC_TRY_EVAL(ac_link_default)],
-[# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-for ac_file in $ac_files
+[for ac_file in $ac_outfiles a.* conftest.* NO
 do
   test -f "$ac_file" || continue
   case $ac_file in
-    _AC_COMPILER_EXEEXT_REJECT )
-       ;;
-    [[ab]].out )
-       # We found the default executable, but exeext='' is most
-       # certainly right.
-       break;;
-    *.* )
-       ac_cv_exeext=`expr "$ac_file" : ['[^.]*\(\..*\)']`
-       # FIXME: I believe we export ac_cv_exeext for Libtool,
-       # but it would be cool to find out if it's true.  Does anybody
-       # maintain Libtool? --akim.
-       export ac_cv_exeext
-       break;;
-    * )
-       break;;
+    _AC_COMPILER_EXEEXT_REJECT ) ;;
+    * ) break;;
   esac
-done],
+done
+AS_IF([test "$ac_file" = NO], [AC_MSG_FAILURE([no output file found])])
+],
       [_AC_MSG_LOG_CONFTEST
 AC_MSG_FAILURE([_AC_LANG compiler cannot create executables], 77)])
-ac_exeext=$ac_cv_exeext
 AC_MSG_RESULT([$ac_file])
+_AC_COMPILER_EXEEXT_WORKS
+# Clean up; list also $ac_file, in case it matched a wildcard entry.
+rm -f $ac_outfiles $ac_file
 ])# _AC_COMPILER_EXEEXT_DEFAULT
 
 
 # _AC_COMPILER_EXEEXT_WORKS
 # -------------------------
+# Called from _AC_COMPILER_EXEEXT_DEFAULT.
 m4_define([_AC_COMPILER_EXEEXT_WORKS],
-[# Check the compiler produces executables we can run.  If not, either
+[# Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
 AC_MSG_CHECKING([whether the _AC_LANG compiler works])
 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
@@ -553,40 +523,53 @@
 # _AC_COMPILER_EXEEXT_CROSS
 # -------------------------
 m4_define([_AC_COMPILER_EXEEXT_CROSS],
-[# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-AC_MSG_CHECKING([whether we are cross compiling])
+[AC_MSG_CHECKING([whether we are cross compiling])
 AC_MSG_RESULT([$cross_compiling])
 ])# _AC_COMPILER_EXEEXT_CROSS
 
 
 # _AC_COMPILER_EXEEXT_O
 # ---------------------
-# Check for the extension used when `-o foo'.  Try to see if ac_cv_exeext,
-# as computed by _AC_COMPILER_EXEEXT_DEFAULT is OK.
+# Check for the extension used when `-o foo'.  Compute ac_cv_exeext.
+#
 m4_define([_AC_COMPILER_EXEEXT_O],
-[AC_MSG_CHECKING([for suffix of executables])
-AS_IF([AC_TRY_EVAL(ac_link)],
-[# If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    _AC_COMPILER_EXEEXT_REJECT ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : ['[^.]*\(\..*\)']`
-         export ac_cv_exeext
-         break;;
-    * ) break;;
-  esac
-done],
-             [AC_MSG_FAILURE([cannot compute suffix of executables: cannot 
compile and link])])
-rm -f conftest$ac_cv_exeext
-AC_MSG_RESULT([$ac_cv_exeext])
+[AC_CACHE_CHECK([for suffix of executables], ac_cv_exeext,
+  [AS_IF([AC_TRY_EVAL(ac_link)],
+    [# If both `conftest.exe' and `conftest' are `present' (well, observable),
+    # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+    # work properly (i.e., refer to `conftest.exe'), while it won't with `rm'.
+    for ac_file in conftest.exe conftest conftest.* NO; do
+      test -f "$ac_file" || continue
+      case $ac_file in
+       _AC_COMPILER_EXEEXT_REJECT ) ;;
+       *.* ) ac_exeext=`expr "$ac_file" : ['[^.]*\(\..*\)']`
+             break;;
+       * ) break;;
+      esac
+    done
+    AS_IF([test "$ac_file" = NO],
+      [AC_MSG_FAILURE([cannot compute suffix of executables: no output file 
found])])
+    # Clean up; list also $ac_file, in case it matched conftest.*.
+    rm -f $ac_outfiles $ac_file
+    ],
+    [AC_MSG_FAILURE([cannot compute suffix of executables: cannot compile and 
link])
+    ])
+  ])
+AC_SUBST([EXEEXT], [$ac_cv_exeext])dnl
+ac_exeext=$EXEEXT
 ])# _AC_COMPILER_EXEEXT_O
 
 
+# _AC_COMPILER_EXEEXT_TESTS
+# -------------------------
+# Calls all of the above _AC_COMPILER_EXEEXT_* tests.
+# This macro is modified by the AC_NO_EXECUTABLES hack.
+m4_define([_AC_COMPILER_EXEEXT_TESTS],
+[_AC_COMPILER_EXEEXT_DEFAULT
+_AC_COMPILER_EXEEXT_CROSS
+_AC_COMPILER_EXEEXT_O])
+
+
 # _AC_COMPILER_EXEEXT
 # -------------------
 # Check for the extension used for executables.  It compiles a test
@@ -600,18 +583,33 @@
 # Must be run before _AC_COMPILER_OBJEXT because _AC_COMPILER_EXEEXT_DEFAULT
 # checks whether the compiler works.
 m4_define([_AC_COMPILER_EXEEXT],
-[AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
+[
+# List of possible output files.  We want to start from the most likely,
+# but we have to check foo.exe before foo, because Cygwin `test -f' looks
+# also for foo.exe.  b.out is created by i960 compilers.
+# As a last resort, we also try wildcards: `conftest.*' and `a.*'.
+# But we are not allowed to rm a.*, and we do not want always remove
+# conftest.*, so we will list them literally, when appropriate.
+ac_outfiles="a_out.exe a.out conftest.exe conftest a.exe b.out"
+
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+rm -f $ac_outfiles conftest.*
+
+AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
+
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-_AC_COMPILER_EXEEXT_DEFAULT
-_AC_COMPILER_EXEEXT_WORKS
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files="$ac_clean_files $ac_outfiles"
+
+# The following tests should remove their output except files matching 
conftest.*.
+_AC_COMPILER_EXEEXT_TESTS
+
 ac_clean_files=$ac_clean_files_save
-_AC_COMPILER_EXEEXT_CROSS
-_AC_COMPILER_EXEEXT_O
-rm -f conftest.$ac_ext
-AC_SUBST([EXEEXT], [$ac_cv_exeext])dnl
-ac_exeext=$EXEEXT
+
+_AC_COMPILER_OBJEXT
+
+rm -f conftest.*
 ])# _AC_COMPILER_EXEEXT
 
 
@@ -627,8 +625,7 @@
 # it includes.  So do it by hand.
 m4_define([_AC_COMPILER_OBJEXT],
 [AC_CACHE_CHECK([for suffix of object files], ac_cv_objext,
-[AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
-rm -f conftest.o conftest.obj
+[rm -f conftest.o conftest.obj
 AS_IF([AC_TRY_EVAL(ac_compile)],
 [for ac_file in conftest.o conftest.obj conftest.*; do
   test -f "$ac_file" || continue;
@@ -639,8 +636,7 @@
   esac
 done],
       [_AC_MSG_LOG_CONFTEST
-AC_MSG_FAILURE([cannot compute suffix of object files: cannot compile])])
-rm -f conftest.$ac_cv_objext conftest.$ac_ext])
+AC_MSG_FAILURE([cannot compute suffix of object files: cannot compile])])])
 AC_SUBST([OBJEXT], [$ac_cv_objext])dnl
 ac_objext=$OBJEXT
 ])# _AC_COMPILER_OBJEXT

Reply via email to