as a user and a dev I've had my fair share of frustrations with autoconf.
it's still the most impressive bit of engineering I've ever seen. The pieces rub a bit in places, but overall the idea of test what reality is to determine how to deal with it was genius.
It clearly grew from a place hard to imagine from where we are now, where everything about a platform might either just be broken or not exist in the first place. That software is portable to these different environments at the same time is a major accomplishment.
Not to mention the support for things like cross platform builds, determining if a compiler can deal with whatever invocation necessary to build a working executable for a cpu architecture you're not even running right now is incredible.
"Why didn't we end up with a situation where it was just a standard thing that had a small number of possible values, and it would just be set for you somewhere?"
Yeah but ... we do in fact have a standard that specifies how it all works, so things like autoconf aren't needed. It's called Posix. The problem isn't the lack of a standard, we have a perfectly good one, the problem is the number of system developers (both commercial and open source) who have this attitude that standards are just something that happens to other people.
I'd even argue that POSIX is no longer the actual de facto standard in the Unix world - it is Linux. Yeah, OSX is a Unix, but it is different enough that it warrants separate treatment. This means that build systems mainly have to cover 3 platforms: Windows, Linux, OSX. The BSDs exist, but they play a distant fourth role.
GNU autoconf really should be removed in the long run. In the short run that is not possible, but new projects really should look at both cmake and meson/ninja. These are not perfect either and come with their own set of trade-offs and drawbacks, but so does GNU autoconf (and here, we have to include things such as m4 or libtool, even if one can technically say these may not be 100% necessary in all cases, but in reality, they really are all linked together on a typical "modern" linux system in particular.)
Actually the results of ./configure will change all the time depending on glibc/kernel version on the machine which can make syscalls that previously weren't available now available.
6 Comments
Meleneth@reddit
CaptainCrowbar@reddit
FourDimensionalTaco@reddit
seriousnotshirley@reddit
shevy-java@reddit
WindHawkeye@reddit