The GNU build system, also known as the Autotools, is a suite of tools produced by the GNU project. These tools are designed to assist in making various source code packages portable to many Unix-like systems. The GNU build system is part of the GNU toolchain and is widely used in many free software and open source packages. While the tools comprising the GNU build system themselves are GPL-ed free software, there are no restrictions in using them in making non-free software portable.
Tools included in the GNU build system
Autoconf processes files (
configure.acis generally preferred) to generate a configure script.
When running the generated configure script, other template files, customarily ending in ".in", such as
Makefile.in, are processed to create their final output, in this case a
Autoconf is used to attempt to work around the quirks found in various Unix-like operating systems. For example, some Unix-like systems may have certain facilities that are known to be broken or missing entirely. Autoconf creates a shell script which can detect these, and the program can work around them. The final output of the Autoconf utility is the configure script.
Autoconf comes with several auxiliary programs designed to ease the creation of configure.ac, such as the Autoheader tool, 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.
Automake helps to create portable
Makefiles, which are in turn processed with the make utility. It takes its input as
Makefile.am, and turns it into
Makefile.in, which is used by Autoconf to generate the file
Libtool helps manage the creation of static and dynamic libraries on various Unix-like operating systems. Libtool accomplishes this by abstracting the library creation process, hiding differences between various systems (e.g., GNU/Linux systems vs. Solaris).
Gnulib simplifies the process of making software that uses Autoconf and Automake portable to a wide range of systems.
The GNU build system provides an environment to a computer programmer which allows them to write cross-platform software (at least running on multiple Unix-like operating systems). It also makes the build process easier on the user, allowing the user to usually just run a small set of commands to build the program from its source code and install it.
The utilities used by the GNU build system are only required to be on the developer's workstation, as well. Users do not need to have Autoconf, Automake, or Libtool in order to build or install software which was developed using them. This makes the GNU build system self-contained, requiring only standard Unix-like tools to build. This is accomplished by using shell scripts which help to configure the software for a given person's operating system.
The utilities used in the GNU build system can also be used alone or together—a software project can use Autoconf, for example, without using Automake as well. However, the GNU build system's components can interact with each other.