diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2023-02-02 14:17:52 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2023-02-02 14:20:09 -0800 |
commit | 01bf65daf6f6627b56fbe78fc436fd877ccd3537 (patch) | |
tree | 698dd4d16a59ddb57c6ee2b1d969ee73a644b30f | |
parent | 4e3744a15c4d8bdb46c11ead2fb56c5f591b714b (diff) | |
download | automake-01bf65daf6f6627b56fbe78fc436fd877ccd3537.tar.gz |
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
<https://bugs.gentoo.org/show_bug.cgi?id=782985>.
-rw-r--r-- | lib/Automake/FileUtils.pm | 12 |
1 files changed, 9 insertions, 3 deletions
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; } |