|Version 1 (modified by andreasw, 8 years ago) (diff)|
Working With the GNU Autotools
Mosf of the COIN projects use the GNU autotools to manage the automatic configuration of the compilation process on a user's machine. The goal is that users don't need to edit Makefiles by hand, and to make the code and compilation as portable as possible.
Because the autotools try to serve many operating systems, compilers, and other environment characteristics, they might seem at the first sight somewhat complicated. However, we tried to hide most of the details that are required to successully use those tools by encapsulating the difficult issues and provide a COIN project manager friendly layer on top of the autotools.
Everybody, who has downloaded and installed a GNU package, has seen the configure step in the installation process. Autoconf is the software that generates the rather complicated shell script "configure" from a simply input file.
The goal of Autoconf is to provide developers of open source software with an easy way to ensure portability of their code. Autoconf can perform tests to find out platform and compiler dependent properties, such as the presence of certain program, libraries, or header files. The configure script is a shell script for /bin/sh, i.e., the basic shell that is available on every UNIX-like system (including Linux, Cygwin, and MSys). The attempt is made to write this script so that it will work on almost every such system, and therefore the least common denominator of all platforms is taken.
At completion, the configure script will have generated some output files (such as a Makefile), based on a template for this file, that has the extension .in (e.g., Makefile.in). The template files contain strings (autoconf variable names) surrounded by @. For example, the autoconf variable for the name of the C compiler is CC, and in the template for a makeile you will find a line like
CC = @CC@
The generated final Makefile will then contain this line, with @CC@ replaced by the name of the C compiler program.