Re: use of make in AM_SANITY_CHECK

Jacob Bachmeyer <[email protected]> Sun, 16 Jun 2024 20:36:12 -0500
Newsgroups gmane.comp.sysutils.automake.general
Message-ID <[email protected]>
Karl Berry wrote:
>     make(1) in AM_SANITY_CHECK seems to be a logic error, since the user
>     may want to build with a different $MAKE,
>
> You're right. Crap. It never ends.
>
> In practice it probably doesn't matter, though.  Although in theory one
> can imagine that "make" succeeds while $MAKE fails, resulting in a false
> positive, in practice that seems next to zero probability to me. Much
> more likely is that "make" fails and $MAKE succeeds, and the only
> downside of that is an extra second of sleeping.
>   

The problem is that we still sleep unnecessarily in the sanity check.  
While there is no way to avoid sleeping if we need to /measure/ the 
filesystem timestamp resolution, few packages actually need that 
information (Automake itself is one of them, for its testsuite) and the 
sanity check can be (and previously was) done without actually measuring it.

>     have a way to revise AM_SANITY_CHECK that can avoid any sleep in the 
>     most common cases.
>
> Bruno's last patch already does that, doesn't it? I'll apply it shortly.
>   

No, that patch does not:  it promotes 
_AM_FILESYSTEM_TIMESTAMP_RESOLUTION to 
AM_FILESYSTEM_TIMESTAMP_RESOLUTION (removing the underscore), but still 
calls it as part of AM_SANITY_CHECK.

I propose first mostly reverting to the code in commit 
f6b3f7fb620580356865ebedfbaf76af3e534369:  revising AM_SANITY_CHECK to 
create a test file and immediately check if that file is newer than 
configure itself, then (if needed) sleep for one second, overwrite the 
test file and test again, then (if needed) sleep for one more second and 
repeat to allow FAT filesystems to be considered "sane". Then, replace 
the effect of commit 333c18a898e9042938be0e5709ec46ff0ead0797 and fix 
the problem with config.status not being newer than configure by adding 
an AC_CONFIG_COMMANDS_POST block that checks if config.status is newer 
than configure, and if not, sleeps one second and executes "touch 
config.status", then repeats that test once (again to accommodate FAT 
filesystem limitations) if needed.

In Mike Frysinger's situation of a Gentoo build with many small 
configure scripts, this /should/ result in at most one configure 
sleeping once, after which all of the other freshly regenerated 
configure scripts will already be old enough to avoid delays.


-- Jacob