Hello Greg and Ralf,

I think I have found the bug now.

There were two suspects: aclocal and autoconf.

First, I tried to find out whether aclocal does its work correctly by
that unfortunate grep (should have been `grep acinclude aclocal.m4').

But then Greg posted the diff, and I had an idea: perhaps autoconf
does not refresh `configure', even though --force was given.

And indeed, this was the problem!

autoconf passes --force to autom4te.  autom4te then obediently
invalidates the cached output and runs m4 to create an updated one
and stores it to the cache.
But then it notices that the output file has the same time stamp as
the just computed output, and refrains from re-creating it.

The fix is obvious: `autom4te' should always create the output file,
if --force was given.  Patch attached.
I committed it to the Autoconf CVS.

Greg, if you are willing to test the fix, then please build and
install CVS Autoconf or apply the patch to autoconf-2.60 and build
and install it.  Then apply Ralf's patch to acloca20.test (--force).
Then the test should pass.

Have a nice day,
        Stepan

-------
Two side notes:

1) Ralf's patch decreased the failure rate, because there was more
work to do.  The bug hit only if the m4 run was finished in the same
second in which the old configure was created.

2)
On Tue, Oct 24, 2006 at 02:29:01PM +0200, Ralf Wildenhues wrote:
> Since we fixed autoconf/lib/autom4te.cfg in Autoconf 2.60, now when we
> call $ACLOCAL, the traces that were created by the $AUTOCONF before are
> sufficient; [...]

I think that this is not true.  aclocal uses language
`Autoconf-without-aclocal-m4', while autoconf uses language
`Autoconf'.  The languages use different lists of input files (the
former language does not include aclocal.m4), thus their caching
always stays disjoint.
2006-10-24  Stepan Kasal  <[EMAIL PROTECTED]>

        * bin/autom4te.in: With --force, always refresh the output
        file.  Problem reported by Greg Schafer <[EMAIL PROTECTED]>.

Index: bin/autom4te.in
===================================================================
RCS file: /cvsroot/autoconf/autoconf/bin/autom4te.in,v
retrieving revision 1.102
diff -u -r1.102 autom4te.in
--- bin/autom4te.in     16 Oct 2006 20:58:44 -0000      1.102
+++ bin/autom4te.in     24 Oct 2006 15:54:41 -0000
@@ -987,7 +987,7 @@
 # We now know whether we can trust the Request object.  Say it.
 verb "the trace request object is:\n" . $req->marshall;
 
-# We need to run M4 if (i) the users wants it (--force), (ii) $REQ is
+# We need to run M4 if (i) the user wants it (--force), (ii) $REQ is
 # invalid.
 handle_m4 ($req, keys %{$req->macro})
   if $force || ! $req->valid;
@@ -1026,10 +1026,10 @@
   }
 else
   {
-    # Actual M4 expansion, only if $output is too old. STDOUT is
-    # pretty old.
+    # Actual M4 expansion, if the user wants it, or if $output is old
+    # (STDOUT is pretty old).
     handle_output ($req, $output)
-      if mtime ($output) < mtime ($ocache . $req->id);
+      if $force || mtime ($output) < mtime ($ocache . $req->id);
   }
 
 # If we ran up to here, the cache is valid.

Reply via email to