From: Paul Eggert Date: Thu, 2 Feb 2023 22:17:52 +0000 (-0800) Subject: Use higher-resolution file timestamps X-Git-Tag: v1.16i~65 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=01bf65daf6f6627b56fbe78fc436fd877ccd3537;p=thirdparty%2Fautomake.git Use higher-resolution file timestamps * lib/Automake/FileUtils.pm (mtime): Return higher-resolution file timestamps. This isn’t perfect, but it’s better than what we had. Code change taken from Autoconf to partially fix a race . --- diff --git a/lib/Automake/FileUtils.pm b/lib/Automake/FileUtils.pm index bd173032b..6e9796a98 100644 --- a/lib/Automake/FileUtils.pm +++ b/lib/Automake/FileUtils.pm @@ -39,7 +39,7 @@ use strict; use warnings FATAL => 'all'; use Exporter; -use File::stat; +use Time::HiRes qw(stat); use IO::File; use Automake::Channels; @@ -115,10 +115,16 @@ sub mtime ($) return 0 if $file eq '-' || ! -f $file; - my $stat = stat ($file) + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, + $atime,$mtime,$ctime,$blksize,$blocks) = stat ($file) or fatal "cannot stat $file: $!"; - return $stat->mtime; + # Unfortunately Time::HiRes converts timestamps to floating-point, and the + # rounding error can be hundreds of nanoseconds for circa-2023 timestamps. + # Perhaps some day Perl will support accurate file timestamps. + # For now, do the best we can without going outside Perl. + + return $mtime; }