Hi Jim, thanks for the patch.
* Jim Meyering wrote on Thu, Jul 30, 2009 at 04:20:52PM CEST: > I noticed (by inspection, since I was looking at AM_SANITY_CHECK) > the unconditional 1-second sleep in coreutils' configure script, > and realized that it'd be easy to avoid it on modern systems: > either because configure was created more than a second before, > or because the file system supports subsecond time stamps. > I deliberately chose not to use ls, because parsing > its output is not worth the trouble. Could that bring any more portability though? IOW, is there a portable (not limited to coreutils) way to get at subsecond time stamps? > + AM_SANITY_CHECK: avoid a 1-second sleep, if possible > + * m4/sanity.m4 (AM_SANITY_CHECK): Use stat to compare timestamps. > + Perform the 1-second sleep only if necessary. > --- a/m4/sanity.m4 > +++ b/m4/sanity.m4 > AC_DEFUN([AM_SANITY_CHECK], > [AC_MSG_CHECKING([whether build environment is sane]) > -# Just in case > -sleep 1 > +# We want conftest.file to have an mtime newer than configure. > +# On some file systems we may have to sleep a second to ensure that. > +# On others, with subsecond timestamp resolution, there is no need. > +# Compare time stamps, and sleep only if a stat failed or they're identical. > echo timestamp > conftest.file > +am_sleep=0 > +am_sanity_d1=`stat --format=%y conftest.file 2>/dev/null` || am_sleep=1 > +am_sanity_d2=`stat --format=%y "$srcdir/configure" 2>/dev/null` || am_sleep=1 'info Autoconf Assignments' tells me that I shouldn't rely upon the exit status of an assignment, due to some arcane shells. IIUC then this should not cause a semantic change here; but that is a bit non obvious, and makes me wonder why you need the am_sleep=1 case at all. The other very very minor issue is that this forks twice more also on slow-fork non-GNU systems, where it then also sleeps. We can probably ignore this. > +if test $am_sleep = 1 || test "$am_sanity_d1" = "$am_sanity_d2"; then > + sleep 1 > + echo timestamp > conftest.file > +fi Thanks, Ralf