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.