Affects at least autoconf 2.69.

While building some projects that use the GNU build system, I ran into
this problem:

Step 1: Run autoreconf to regenerate the files in the GNU build system.
Step 2: ./configure && make

The first build action taken would be an attempt to regenerate
config.h.in with autoheader.  Why?  Because after the autoreconf
run, config.h.in would _sometimes_ be older than aclocal.m4.

The problem is in Autom4te::FileUtils::update_file.  This calls
File::Copy::move to move the newly generated config.h.in file from
a temporary location to the proper destination.  If those are on
different filesystems, rename() will fail and the file is copied.
At the end of the copy the timestamps are set with utime().
Unfortunately utime() only supports full second resolution.  On a
modern POSIX filesystem with nanosecond resolution, config.h.in's
timestamp will be truncated to the nearest second, which can be
older than the just previously generated aclocal.m4 file.

On the one hand, this is a File::Copy bug/limitation.  On the other
hand, maybe Autom4te::FileUtils shouldn't use File::Copy or try to
generate config.h.in under a temporary name in the target directory
so only a rename() will be required.

-- 
Christian "naddy" Weisgerber                          na...@mips.inka.de

Reply via email to