Autoconf
Original author(s) | David Mackenzie |
---|---|
Developer(s) | GNU Project |
Initial release | 1991 |
Stable release | 2.72[1]
/ 22 December 2023 |
Repository | |
Written in | Perl |
Operating system | Cross-platform |
Type | Programming tool |
License | GNU GPL |
Website | www |
GNU Autoconf is a software development tool for generating a configure script that in turn generates files for building a codebase and for packaging or installing the resulting files. Autoconf is part of the GNU Build System – along with Automake, Libtool, Autoheader and other tools.
Autoconf is agnostic about the programming language of the codebase to build. None-the-less, it is primarily used with C, C++, Fortran, Erlang, or Objective-C.
A configure script configures a software package for installation on a particular target system. After running a series of tests on the target system, the configure script generates header files and a makefile from templates, thus customizing the software package for the target system.
Usage overview
[edit]The developer specifies the desired behaviour of the configure script by writing a list of instructions in the GNU m4 language in a file called "configure.ac". A library of pre-defined m4 macros is available to describe common configure script instructions. Autoconf transforms the instructions in "configure.ac" into a portable configure script. The system that will be doing the building need not have Autoconf installed: Autoconf is needed only to build the configure script, that is usually shipped with the software.
History
[edit]Autoconf was begun in the summer of 1991 by David Mackenzie to support his work at the Free Software Foundation. In the subsequent years it grew to include enhancements from a variety of authors and became the most widely used build configuration system for writing portable free or open-source software.
Approach
[edit]Autoconf is similar to the Metaconfig package used by Perl. The imake system formerly used by the X Window System (up to X11R6.9) is closely related, but has a different philosophy.
The Autoconf approach to portability is to test for features, not for versions. For example, the native C compiler on SunOS 4 did not support ISO C. However, it is possible for the user or administrator to have installed an ISO C-compliant compiler. A pure version-based approach would not detect the presence of the ISO C compiler, but a feature-testing approach would be able to discover the ISO C compiler the user had installed. The rationale of this approach is to gain the following advantages:
- the configure script can get reasonable results on newer or unknown systems
- it allows administrators to customize their machines and have the configure script take advantage of the customizations
- there is no need to keep track of minute details of versions, patch numbers, etc., to figure out whether a particular feature is supported or not
Autoconf provides extensive documentation around the non-portability of many POSIX shell constructs to older shells and bugs therein. It also provides M4SH, a macro-based replacement for shell syntax.[2]
Behavior
[edit]Autoconf generates a configure
script based on the contents of a configure.ac
file, which characterizes a particular body of source code. The configure
script, when run, scans the build environment and generates a subordinate config.status
script which, in turn, converts other input files and most commonly Makefile.in
into output files (Makefile
), which are appropriate for that build environment. Finally, the make
program uses Makefile
to generate executable programs from source code.
The complexity of Autotools reflects the variety of circumstances under which a body of source code may be built.
- If a source code file is changed then it suffices to re-run
make
, which only re-compiles that part of the body of the source code affected by the change. - If a
.in
file has changed then it suffices to re-runconfig.status
andmake
. - If the body of source code is copied to another computer then it is sufficient to re-run
configure
(which runsconfig.status
) andmake
. (For this reason source code using Autotools is normally distributed without the files thatconfigure
generates.) - If the body of source code is changed more fundamentally, then
configure.ac
and the.in
files need to be changed and all subsequent steps also followed.
To process files, autoconf uses the GNU implementation of the m4 macro system.
Autoconf comes with several auxiliary programs such as autoheader
, which is used to help manage C header files; autoscan
, which can create an initial input file for Autoconf; and ifnames
, which can list C pre-processor identifiers used in the program.
Criticism
[edit]There is some criticism that states that Autoconf uses dated technologies, has a lot of legacy restrictions, and complicates simple scenarios unnecessarily for the author of configure.ac scripts. In particular, often cited weak points of Autoconf are:
- General complexity of used architecture, most projects use multiple repetitions.[3][4]
- Some people think that 'configure' scripts generated by Autoconf provide only manual-driven command-line interface without any standardization.[5] While it is true that some developers do not respect common conventions, such conventions do exist and are widely used.[6]
- m4 is unusual and unknown to many developers. Developers will need to learn it to extend Autoconf with non-standard checks.[5][7]
- Weak backward and forward compatibility requires a wrapper script.[8]
- Autoconf-generated scripts are usually large and rather complex. Although they produce extensive logging, debugging them can still be difficult.
Due to these limitations, several projects that used GNU Build System switched to different build systems, such as CMake and SCons.[3][9]
See also
[edit]- CMake – Cross-platform build tool for configuring platform-specific builds
- Meson – Build automation tool
- pkg-config – Software development tool for querying library dependency information
References
[edit]- ^ Zachary Weinberg (22 December 2023). "autoconf-2.72 released [stable]". Retrieved 25 December 2023.
- ^ "Portable Shell". Autoconf. Retrieved 20 January 2020.
- ^ a b Neundorf, Alexander (2006-06-21). "Why the KDE project switched to CMake -- and how".
- ^ Kamp, Poul-Henning (2012-08-15). "A Generation Lost in the Bazaar". ACM Queue. 10 (8): 20–23. doi:10.1145/2346916.2349257. S2CID 11656592.
- ^ a b McCall, Andrew (2003-06-21). "Stop the autoconf insanity! Why we need a new build system".
- ^ "GNU Coding Standards".
- ^ Kamp, Poul-Henning (2010-04-20). "Did you call them autocrap tools?". Archived from the original on 2017-09-11. Retrieved 2017-08-16.
- ^ Dickey, Thomas. "why i still use autoconf 2.13".
- ^ "Blender.org - Build systems". Archived from the original on 2008-12-02. Retrieved 2009-06-10.
External links
[edit]- Official website
- GNU Autoconf macro archive
- The Goat Book homepage (aka the Autobook) Archived 2010-12-20 at the Wayback Machine
- Using Automake and Autoconf with C++
- Using C/C++ libraries with Automake and Autoconf.
- Autotoolset home page
- Autotools: A practitioner's guide to Autoconf, Automake and Libtool
- Autotools Mythbuster