In this little essay I'm going to rant a bit about GNU autoconf and family. This a system for generating a configure script, which in theory can be executed to produce a Makefile that should work on any system.
It isn't for nothing that autoconf and company are often referred to as autohell.
The theory doesn't get very far. automake is not exactly reliable (unless you count "works on the person that wrote the script's machine" as being reliable. And to top that, autoconf is painfully slow.
Another fantastic feature of autohell is that the clowns that wrote it have never heard of backwards compatibility. So lets say you have version 1.5 of autohell installed, abd you want to build a big app with lots of libs. Half way through the libs, you get to a lib that needs autohell 1.4. No problem, should work with 1.5. No chance! So if you really live in autohell, you need lots of versions installed.
Normally I wouldn't be too bothered by slow and broken software, as there's no shortage of that in the world. The thing that bothers me is the mentality that autoconf fosters. Broken platforms are OK. Adding non-standard extensions is fine. autoconf will sort out all these differences, slowly. So rather than pushing towards open standards like the Single Unix Standard, autoconf encourages brokenness. And did I mention that it's dog slow as well?
Autohell even has an ugly cousin that makes autohell look good. libtool. The libtool doc says "GNU libtool is a generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface.". Pure Planet Penguin! libtool is a horrible big script. Don't confuse it with Apple Mac OS X libtool, a compiled binary that ships with the system. On a few occasion, I've had problems with libtool, I spent hours trying to trace through finding what it was doing wrong. A genuine Jack of All Trades, Master of None if ever there was one.
Do I have any alternatives? Well, not entirely. I'm not saying that we should go back to xmkmf and the likes. What I'd like to see is systems that are more standard, and applications that stick to the standards. Any non-standard extensions that are used should be restricted to isolated modules. Building in these circumstances should be much easier. Maybe even feasible without autocrud.
Copyright © Paul John Floyd 2008.