On Friday 01 April 2011, Ralf Wildenhues wrote: > * Stefano Lattarini wrote on Fri, Apr 01, 2011 at 06:50:12PM CEST: > > On Friday 01 April 2011, Ralf Wildenhues wrote: > > > > tests/remake-bug8365.test | 99 > > > > +++++++++++++++++++++++++++++++++++++++++++++ > > > > > > and the name of the new test is inconsistent. I suggest either > > > pr8365.test (yeah, can see you cringe already) or remake-timing.test > > > or so. > > > > > [Disclaimer: BIKESHEDDING follows] > > I have to object to this. First, IMHO the "correct" way to resolve > > this inconsistency would be to give more expressive names to the > > existing `pr*.test' tests (so that `pr9.test' would become, e.g., > > `config-aux-dir-pr9.test'), not to "dumb down" the names of new tests. > > Second, I really do believe that a name like `remake-bug8365.test' is > > better than your proposed alternatives, because it's a good compromise > > between length and expressivenes: > > If you want both number and expressive name, let's put the number first, > so that the first 8 characters of the name before the dot can be unique, > e.g., pr8365-remake-timing.test. At least that is portable then. > Agreed, done.
> > > Will the new test work on a file system with sub-second granularity > > > where 'touch' has the issues described at 'info Autoconf --index touch'? > > > > > Uh-oh, this could be a problem. In order to trigger the bug, various > > files need to have the *same* timestamp. So what about using the `-t' > > option of touch instead? See the attached squash-in. > > Well, the 'date' options are not so portable, see the Autoconf manual. > I wouldn't fix anything until I see a failure in the wild. > Still, I might have managed to tweak the test to take into account, and work with, timestamp truncation. See the attached squash-in (the whole resulting test script is also attached, for reference). WDYT? Regards, Stefano
diff --git a/tests/pr8365-remake-timing.test b/tests/pr8365-remake-timing.test index a247c21..079b0c0 100755 --- a/tests/pr8365-remake-timing.test +++ b/tests/pr8365-remake-timing.test @@ -26,6 +26,9 @@ set -e +# We'll use calls to stat to get debugging information. +if stat /dev/null; then stat=stat; else stat=:; fi + cat >> configure.in << 'END' FOOBAR=zardoz AC_OUTPUT @@ -46,18 +49,17 @@ $EGREP 'FOOBAR|zardoz' Makefile && Exit 99 # Sanity check. echo 'AC_SUBST([FOOBAR])' >> configure.in # Modified configure dependencies must have the same timestamp of -# config.status and Makefile in order to trigger the bug. Also, -# `touch -r FILE' can truncate timestamps on some systems (see -# Autoconf manual), thus we need to use explicit timestamps. -timestamp=`date '+%Y%m%d%H%M.%S'` && test -n "$timestamp" || { - echo "$me: cannot get current time in required format" >&2 - Exit 77 -} -touch -t "$timestamp" Makefile config.status configure.in || { - echo "$me: couldn't set timestamp of files to current time" >&2 - Exit 77 -} -stat config.status Makefile configure.in || : # For debugging. +# config.status and Makefile in order to trigger the bug. +# We also re-touch config.status, because "touch -r" can truncate +# timestamps on file systems with sub-second resolutions (see the +# autoconf manual). Finally, we also sleep before touching, to ensure +# that the (possibly truncated) timestamps of config.status etc. are +# strictly newer than the non-truncated configure timestamp. +$stat config.status Makefile configure.in +$sleep +touch config.status +touch -r config.status config.status Makefile configure.in +$stat config.status Makefile configure.in # Also, the race condition is triggered only when aclocal, automake # and aclocal run fast enough to keep the timestamp of the generated @@ -74,8 +76,8 @@ set -ex # the races from configure.in. AUTOCONF='$save_AUTOCONF'; export AUTOCONF $ACLOCAL "\$@" -touch -t '$timestamp' aclocal.m4 -stat aclocal.m4 || : +touch -r config.status aclocal.m4 +$stat aclocal.m4 END cat > automake-wrap <<END @@ -85,16 +87,16 @@ set -ex # the races from configure.in. AUTOCONF='$save_AUTOCONF'; export AUTOCONF $AUTOMAKE "\$@" -touch -t '$timestamp' Makefile.in -stat Makefile.in || : +touch -r config.status Makefile.in +$stat Makefile.in END cat > autoconf-wrap <<END #!/bin/sh set -ex $AUTOCONF "\$@" -touch -t '$timestamp' configure -stat configure || : +touch -r config.status configure +$stat configure END chmod a+x aclocal-wrap automake-wrap autoconf-wrap
pr8365-remake-timing.test
Description: application/shellscript