autoconf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Future plans for Autotools


From: Michael Orlitzky
Subject: Re: Future plans for Autotools
Date: Fri, 29 Dec 2023 12:08:10 -0500
User-agent: Evolution 3.48.4

On Fri, 2023-12-29 at 03:59 +0000, Adam Faiz via Discussion list for
the autoconf build system wrote:
> Hi,
> 
> I want to share an interesting perspective that's overlooked and something 
> that the Autotools is capable of fixing:
> https://media.ccc.de/v/camp2023-57415-fantastic_build_system_failure_modes_and_how_to_fix_them
> 
> All the examples in the video are a result of targets underspecifying their 
> dependencies, but the bug is invisible due to make's timestamp-based nature 
> rebuilding lots of things, including the unspecified dependencies of the 
> target.
> 
> Does using autotools avoid this problem?
> Are there other approaches to ensuring correctness apart from make becoming 
> stateful(like keeping track of changes in file attributes in addition to 
> mtime to check if it's up to date)?

Autotools is more of a portability tool than it is a build system. The
behavior of "make" is part of the POSIX standard. Autotools uses make
because it's reliable, and the behavior can't change, because if it
did, it wouldn't be reliable any more. So there's that.

The bigger picture in the context of build systems is that they're all
wrong. If you're pedantic enough, the entire system is a prerequisite
for every target. The examples in the talk don't address this: does it
rebuild when my $PATH changes? How about the other environment
variables? If your build runs arbitrary programs ($CC, for example),
then there's an unknowable set of dependencies contained in the
environment alone.

OK, so you make the entire environment a prerequisite. Now the behavior
of (say) gcc depends on my filesystem -- what if I've rebuilt my
toolchain with a different library path? Etc. Do you rebuild whenever
any file changes (how long would that take to determine), or simply
require me to list the transitive dependencies of my toolchain down to
libc and the kernel (no thanks)?

So, "correctness" is impossible to achieve without rebuilding
everything unconditionally all the time. Every build system is
therefore wrong; the only difference is where they make the cut-off,
drawing the lines between correctness, complexity, and convenience.
Measure build system popularity and you'll find what is acceptable to
people; autotools and make are just fine.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]