GNU bug report logs -
#61240
improve high-res file timestamp in Automake
Previous Next
Reported by: Paul Eggert <eggert <at> cs.ucla.edu>
Date: Thu, 2 Feb 2023 22:26:02 UTC
Severity: normal
Done: Paul Eggert <eggert <at> cs.ucla.edu>
Bug is archived. No further changes may be made.
Full log
Message #25 received at 61240 <at> debbugs.gnu.org (full text, mbox):
Paul Eggert wrote:
> On 2023-02-04 16:02, Jacob Bachmeyer wrote:
>> In any case, you will still need to account for the possibility that
>> Time::HiRes::stat() might not actually have higher resolution,
>> depending on the filesystem.
>
> That's fine. All we want is the exact file timestamp. If the file
> system timestamp resolution is only 2 s, then we want that multiple of
> 2. Admittedly we can't get the exact file timestamp on many modern
> file systems since Time::HiRes is precise only to the nearest ~238 ns
> for today's timestamps, but the idea is to get what we easily can.
How often is Perl built to use long doubles these days? (That was an
option beginning with Perl 5.6.)
>> There are also the no-runtime-overhead options of using "eval { use
>> Time::HiRes qw(stat) };" which will replace stat() with the hi-res
>> version if it is available and continue with the regular stat()
>> builtin if not, or "use constant HAVE_Time_HiRes => eval { use
>> Time::HiRes };" and a conditional "if (HAVE_Time_HiRes) { ... } else
>> { ... }" as I suggested as an improvement to Mike Frysinger's patch.
>
> Sorry, I don't remember seeing that suggestion. I guess it was in
> another thread. Could you resend that patch to 61240 <at> debbugs.gnu.org
> and cc me? Preferably a patch against the latest Automake, in "git
> format-patch" format; see
> <https://savannah.gnu.org/git/?group=automake> for how to get
> bleeding-edge Automake. The idea would be to port bleeding-edge
> Automake to Perl < 5.10 when that's easy.
It was bug#60807. Looking at the patch, I suspect that I will need to
take a closer look at the code: the existing code before Mike's patch
used File::stat, which I suspect may not be compatible with
Time::HiRes::stat (not compatible in the sense that File::stat's
override of stat() probably will not use Time::HiRes's override of
stat()). If so, then "use Time::HiRes qw(stat);" will not do what you
want because either stat() will either cease to return an object or will
not have subsecond resolution.
Looking at the code, commit 01bf65daf6f6627b56fbe78fc436fd877ccd3537
appears fine, all I am asking is that commit
4e3744a15c4d8bdb46c11ead2fb56c5f591b714b be reverted. The current
Automake Git master should actually work on Perl 5.6 if Time::HiRes has
been installed, which was possible with 5.6 although it was bundled with
Perl beginning with the 5.7.3 development release.
In other words, bleeding-edge Automake is already ported to Perl < 5.10,
in fact it should run on 5.8 out-of-the-box and 5.6 if Time::HiRes has
been installed from CPAN (or perhaps BackPAN today, but Time::HiRes was
on CPAN when 5.6 was current).
> Please bear in mind that I stopped coding in Perl 30 years ago and so
> am a bit rusty.
Yes, very---30 years ago would have been before Perl 5.6! Much of
modern Perl did not exist then...
-- Jacob
This bug report was last modified 2 years and 58 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.