One of the essential features of a good software package is that it is both portable and straightforward to build. When working on a system (Linux or even OS X) with a UNIX shell, the most common build tools are the dreaded Autotools. I say dreaded from a developer’s perspective. From a user’s perspective, it’s usually only takes invoking
./configure && make
to build a well-designed software package.
On the developer’s end, there’s the seemingly Byzantine world of autoconf, automake, auto-whatever and the unfamiliar world of M4 macros and under the hood magic. At first, when faced with setting up a portable build system, I tried to roll my own using Lua scripts. It worked quite well … until other people needed to use it. When that happened, things started to fall apart under the weight of all of the contingencies I had to keep track of, so I dove into the world of Autotools.
Going through the manuals and trying to understand the terminology with no reference points is incredibly frustrating. I managed to get a decent understanding of how things works, but I still wasn’t able to setup a build system to handle the complicated structure of LuaAV. Fortunately, John Calcote has just published a book called Autotools: A Practitioner’s Guide to GNU Autoconf, Automake, and Libtool. I highly recommend it. It’s clear, explains the terminology well, and is as much of a pleasure to read as such things can be.