This book is an organised collection of documentation on the suite of software usually referred to as autotools; this suite, developed by the GNU project, consists of tools such as autoconf, automake, libtool and other tools that were introduced by FreeDesktop.org, such as pkg-config.
This collection finds its roots in my blog. I've been writing notes, quick and dirty tutorials and commentaries about autotools usage and their practices. The intent is to facilitate solving common problems found during Gentoo Linux development. While these entries were always as accurate as I could make them; they had some obvious limits imposed by the form of blog they were written in.
Indeed, like most blogs; these entries were often opinionated and scattered over a long period of time. They were often interspersed with entries that have nothing to do with autotools or with development at all. This made it difficult to search for and/or access the material.
Trying to get the blog entries into a series of articles would probably have been just as difficult: it would have been extremely unlikely to find a publisher ready to accept such a document. I've thus decided to try to find a way to organise my notes and facilitate collaboration.
This document is going to be extended, updated, corrected and indexed so that the content is easily browsable and usable by everyone who is looking for information about autotools.
I honestly hope that this guide can be useful to others just as it has been useful for me to learn the subject. I am hopeful that this will improve the overall quality of build systems based on autotools, this way reducing the headaches that developers like me have to sustain to package new software.
When I started writing this guide, there weren't many updated guides on autotools in general;
the autoconf and automake manuals often referred to
corner-cases rather than general ones, and made it difficult to understand how to write a
proper configure.ac
or Makefile.am
.
The "autobook", by Vaughan, Elliston, Tromey and Taylor was pretty much obsolete by the time I started working in Gentoo, and John Calcote's book ([CalcoteAutotools]) was not out yet. I originally intended working myself on a complete book, but I couldn't find a publisher accepting it — partly because of my critical failure in being a native English speaker.
For a while I wanted to just drop it, but then the time I spent on fixing build systems for packages I maintain piled up enough that I decided spending time on the guide would probably be better employed. The idea behind my guide was to present an integrated guide that shows the best practices, rather than showing all the possibilities, including those that distributions would have a hard time dealing with.
This reason is why the document is spotty at best: it started by covering the issues that I had to fix more often, as a way to describe them to the upstream projects when submitting them. Over time, I have been working on filling the gaps, which should make for a more complete documentation project.
I'm writing this guide as a free and open book, released under CreativeCommons Attribution-ShareAlike-NonCommercial license (the whole content can be licensed under commercial licenses upon request). The availability of this book in source form is meant to allow rebuilding it in any format you see fit for reproduction and for submitting corrections and improvements.
My original idea was to work on this in my spare (but paid) time, accepting donations to extend the content. Unfortunately, this idea encountered no responses; which meant that the content was only extended in my spare time. Since I now cannot receive (substantial) monetary donations; extension will no longer be tied to that.
Unfortunately, the time I feel I can spend on this guide was also reduced drastically, and likely I will just extend it as needed to explain a particular problem, instead of writing a blog entry.
If you are interested in a particular topic related to autotools, you're still welcome to contact me at flameeyes@flameeyes.com and make suggestions.
This guide is an open publication, if you wish to contribute, you're very welcome to do so, but you have to grant the same license as the rest of the content (see Appendix B, License).
The sources for this text are available, in DocBook format, at the GitHub project.
If you are able to improve this guide grammatically or contextually, you're welcome to submit your changes. You can either send me the patches via email, or request a merge from the GitHub interface.
Please note that if you wish to submit patches, you should follow the same style as the rest of the book. You're going to be credited among authors and editors after your second patch or if your contribution is substantial.