(autoconf.info)Top
Autoconf
********
This manual (28 January 2021) is for GNU Autoconf (version 2.71), a
package for creating scripts to configure source code packages using
templates and an M4 macro package.
Copyright © 1992–1996, 1998–2017, 2020–2021 Free Software Foundation,
Inc.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
Version 1.3 or any later version published by the Free Software
Foundation; with no Invariant Sections, no Front-Cover texts, and
no Back-Cover Texts. A copy of the license is included in the
section entitled “GNU Free Documentation License.”
- Introduction
- Autoconf’s purpose, strengths, and weaknesses
- The GNU Build System
- A set of tools for portable software packages
- Making configure Scripts
- How to organize and produce Autoconf scripts
- Setup
- Initialization and output
- Existing Tests
- Macros that check for particular features
- Writing Tests
- How to write new feature checks
- Results
- What to do with results from feature checks
- Programming in M4
- Layers on top of which Autoconf is written
- Programming in M4sh
- Shell portability layer
- Writing Autoconf Macros
- Adding new macros to Autoconf
- Portable Shell
- Shell script portability pitfalls
- Portable Make
- Makefile portability pitfalls
- Portable C and C++
- C and C++ portability pitfalls
- Manual Configuration
- Selecting features that can’t be guessed
- Site Configuration
- Local defaults for ‘configure’
- Running configure Scripts
- How to use the Autoconf output
- config.status Invocation
- Recreating a configuration
- Obsolete Constructs
- Kept for backward compatibility
- Using Autotest
- Creating portable test suites
- FAQ
- Frequent Autoconf Questions, with answers
- History
- History of Autoconf
- GNU Free Documentation License
- License for copying this manual
- Indices
- Indices of symbols, concepts, etc.
— The Detailed Node Listing —
The GNU Build System
- Automake
- Escaping makefile hell
- Gnulib
- The GNU portability library
- Libtool
- Building libraries portably
- Pointers
- More info on the GNU build system
Making ‘configure’ Scripts
- Writing Autoconf Input
- What to put in an Autoconf input file
- autoscan Invocation
- Semi-automatic ‘configure.ac’ writing
- ifnames Invocation
- Listing the conditionals in source code
- autoconf Invocation
- How to create configuration scripts
- autoreconf Invocation
- Remaking multiple ‘configure’ scripts
Writing ‘configure.ac’
- Shell Script Compiler
- Autoconf as solution of a problem
- Autoconf Language
- Programming in Autoconf
- Autoconf Input Layout
- Standard organization of ‘configure.ac’
Initialization and Output Files
- Initializing configure
- Option processing etc.
- Versioning
- Dealing with Autoconf versions
- Notices
- Copyright, version numbers in ‘configure’
- Input
- Where Autoconf should find files
- Output
- Outputting results from the configuration
- Configuration Actions
- Preparing the output based on results
- Configuration Files
- Creating output files
- Makefile Substitutions
- Using output variables in makefiles
- Configuration Headers
- Creating a configuration header file
- Configuration Commands
- Running arbitrary instantiation commands
- Configuration Links
- Links depending on the configuration
- Subdirectories
- Configuring independent packages together
- Default Prefix
- Changing the default installation prefix
Substitutions in Makefiles
- Preset Output Variables
- Output variables that are always set
- Installation Directory Variables
- Other preset output variables
- Changed Directory Variables
- Warnings about ‘datarootdir’
- Build Directories
- Supporting multiple concurrent compiles
- Automatic Remaking
- Makefile rules for configuring
Configuration Header Files
- Header Templates
- Input for the configuration headers
- autoheader Invocation
- How to create configuration templates
- Autoheader Macros
- How to specify CPP templates
Existing Tests
- Common Behavior
- Macros’ standard schemes
- Alternative Programs
- Selecting between alternative programs
- Files
- Checking for the existence of files
- Libraries
- Library archives that might be missing
- Library Functions
- C library functions that might be missing
- Header Files
- Header files that might be missing
- Declarations
- Declarations that may be missing
- Structures
- Structures or members that might be missing
- Types
- Types that might be missing
- Compilers and Preprocessors
- Checking for compiling programs
- System Services
- Operating system services
- C and Posix Variants
- Kludges for C and Posix variants
- Erlang Libraries
- Checking for the existence of Erlang libraries
Common Behavior
- Standard Symbols
- Symbols defined by the macros
- Default Includes
- Includes used by the generic macros
Alternative Programs
- Particular Programs
- Special handling to find certain programs
- Generic Programs
- How to find other programs
Library Functions
- Function Portability
- Pitfalls with usual functions
- Particular Functions
- Special handling to find certain functions
- Generic Functions
- How to find other functions
Header Files
- Header Portability
- Collected knowledge on common headers
- Particular Headers
- Special handling to find certain headers
- Generic Headers
- How to find other headers
Declarations
- Particular Declarations
- Macros to check for certain declarations
- Generic Declarations
- How to find other declarations
Structures
- Particular Structures
- Macros to check for certain structure members
- Generic Structures
- How to find other structure members
Types
- Particular Types
- Special handling to find certain types
- Generic Types
- How to find other types
Compilers and Preprocessors
- Specific Compiler Characteristics
- Some portability issues
- Generic Compiler Characteristics
- Language independent tests and features
- C Compiler
- Checking its characteristics
- C++ Compiler
- Likewise
- Objective C Compiler
- Likewise
- Objective C++ Compiler
- Likewise
- Erlang Compiler and Interpreter
- Likewise
- Fortran Compiler
- Likewise
- Go Compiler
- Likewise
Writing Tests
- Language Choice
- Selecting which language to use for testing
- Writing Test Programs
- Forging source files for compilers
- Running the Preprocessor
- Detecting preprocessor symbols
- Running the Compiler
- Detecting language or header features
- Running the Linker
- Detecting library features
- Runtime
- Testing for runtime features
- Systemology
- A zoology of operating systems
- Multiple Cases
- Tests for several possible values
Writing Test Programs
- Guidelines
- General rules for writing test programs
- Test Functions
- Avoiding pitfalls in test programs
- Generating Sources
- Source program boilerplate
Results of Tests
- Defining Symbols
- Defining C preprocessor symbols
- Setting Output Variables
- Replacing variables in output files
- Special Chars in Variables
- Characters to beware of in variables
- Caching Results
- Speeding up subsequent ‘configure’ runs
- Printing Messages
- Notifying ‘configure’ users
Caching Results
- Cache Variable Names
- Shell variables used in caches
- Cache Files
- Files ‘configure’ uses for caching
- Cache Checkpointing
- Loading and saving the cache file
Programming in M4
- M4 Quotation
- Protecting macros from unwanted expansion
- Using autom4te
- The Autoconf executables backbone
- Programming in M4sugar
- Convenient pure M4 macros
- Debugging via autom4te
- Figuring out what M4 was doing
M4 Quotation
- Active Characters
- Characters that change the behavior of M4
- One Macro Call
- Quotation and one macro call
- Quoting and Parameters
- M4 vs. shell parameters
- Quotation and Nested Macros
- Macros calling macros
- Changequote is Evil
- Worse than INTERCAL: M4 + changequote
- Quadrigraphs
- Another way to escape special characters
- Balancing Parentheses
- Dealing with unbalanced parentheses
- Quotation Rule Of Thumb
- One parenthesis, one quote
Using ‘autom4te’
- autom4te Invocation
- A GNU M4 wrapper
- Customizing autom4te
- Customizing the Autoconf package
Programming in M4sugar
- Redefined M4 Macros
- M4 builtins changed in M4sugar
- Diagnostic Macros
- Diagnostic messages from M4sugar
- Diversion support
- Diversions in M4sugar
- Conditional constructs
- Conditions in M4
- Looping constructs
- Iteration in M4
- Evaluation Macros
- More quotation and evaluation control
- Text processing Macros
- String manipulation in M4
- Number processing Macros
- Arithmetic computation in M4
- Set manipulation Macros
- Set manipulation in M4
- Forbidden Patterns
- Catching unexpanded macros
Programming in M4sh
- Common Shell Constructs
- Portability layer for common shell constructs
- Polymorphic Variables
- Support for indirect variable names
- Initialization Macros
- Macros to establish a sane shell environment
- File Descriptor Macros
- File descriptor macros for input and output
Writing Autoconf Macros
- Macro Definitions
- Basic format of an Autoconf macro
- Macro Names
- What to call your new macros
- Dependencies Between Macros
- What to do when macros depend on other macros
- Obsoleting Macros
- Warning about old ways of doing things
- Coding Style
- Writing Autoconf macros à la Autoconf
Dependencies Between Macros
- Prerequisite Macros
- Ensuring required information
- Suggested Ordering
- Warning about possible ordering problems
- One-Shot Macros
- Ensuring a macro is called only once
Portable Shell Programming
- Shellology
- A zoology of shells
- Invoking the Shell
- Invoking the shell as a command
- Here-Documents
- Quirks and tricks
- File Descriptors
- FDs and redirections
- Signal Handling
- Shells, signals, and headaches
- File System Conventions
- File names
- Shell Pattern Matching
- Pattern matching
- Shell Substitutions
- Variable and command expansions
- Assignments
- Varying side effects of assignments
- Parentheses
- Parentheses in shell scripts
- Slashes
- Slashes in shell scripts
- Special Shell Variables
- Variables you should not change
- Shell Functions
- What to look out for if you use them
- Limitations of Builtins
- Portable use of not so portable /bin/sh
- Limitations of Usual Tools
- Portable use of portable tools
Portable Make Programming
- $< in Ordinary Make Rules
- $< in ordinary rules
- Failure in Make Rules
- Failing portably in rules
- Special Chars in Names
- Special Characters in Macro Names
- Backslash-Newline-Empty
- Empty lines after backslash-newline
- Backslash-Newline Comments
- Spanning comments across line boundaries
- Long Lines in Makefiles
- Line length limitations
- Macros and Submakes
- ‘make macro=value’ and submakes
- The Make Macro MAKEFLAGS
- ‘$(MAKEFLAGS)’ portability issues
- The Make Macro SHELL
- ‘$(SHELL)’ portability issues
- Parallel Make
- Parallel ‘make’ quirks
- Comments in Make Rules
- Other problems with Make comments
- Newlines in Make Rules
- Using literal newlines in rules
- Comments in Make Macros
- Other problems with Make comments in macros
- Trailing whitespace in Make Macros
- Macro substitution problems
- Command-line Macros and whitespace
- Whitespace trimming of values
- obj/ and Make
- Don’t name a subdirectory ‘obj’
- make -k Status
- Exit status of ‘make -k’
- VPATH and Make
- ‘VPATH’ woes
- Single Suffix Rules
- Single suffix rules and separated dependencies
- Timestamps and Make
- Sub-second timestamp resolution
‘VPATH’ and Make
- Variables listed in VPATH
- ‘VPATH’ must be literal on ancient hosts
- VPATH and Double-colon
- Problems with ‘::’ on ancient hosts
- $< in Explicit Rules
- ‘$<’ does not work in ordinary rules
- Automatic Rule Rewriting
- ‘VPATH’ goes wild on Solaris
- Tru64 Directory Magic
- ‘mkdir’ goes wild on Tru64
- Make Target Lookup
- More details about ‘VPATH’ lookup
Portable C and C++ Programming
- Varieties of Unportability
- How to make your programs unportable
- Integer Overflow
- When integers get too large
- Preprocessor Arithmetic
- ‘#if’ expression problems
- Null Pointers
- Properties of null pointers
- Buffer Overruns
- Subscript errors and the like
- Volatile Objects
- ‘volatile’ and signals
- Floating Point Portability
- Portable floating-point arithmetic
- Exiting Portably
- Exiting and the exit status
Integer Overflow
- Integer Overflow Basics
- Why integer overflow is a problem
- Signed Overflow Examples
- Examples of code assuming wraparound
- Optimization and Wraparound
- Optimizations that break uses of wraparound
- Signed Overflow Advice
- Practical advice for signed overflow issues
- Signed Integer Division
- ‘INT_MIN / -1’ and ‘INT_MIN % -1’
Manual Configuration
- Specifying Target Triplets
- Specifying target triplets
- Canonicalizing
- Getting the canonical system type
- Using System Type
- What to do with the system type
Site Configuration
- Help Formatting
- Customizing ‘configure --help’
- External Software
- Working with other optional software
- Package Options
- Selecting optional features
- Pretty Help Strings
- Formatting help string
- Option Checking
- Controlling checking of ‘configure’ options
- Site Details
- Configuring site details
- Transforming Names
- Changing program names when installing
- Site Defaults
- Giving ‘configure’ local defaults
Transforming Program Names When Installing
- Transformation Options
- ‘configure’ options to transform names
- Transformation Examples
- Sample uses of transforming names
- Transformation Rules
- Makefile uses of transforming names
Running ‘configure’ Scripts
- Basic Installation
- Instructions for typical cases
- Compilers and Options
- Selecting compilers and optimization
- Multiple Architectures
- Compiling for multiple architectures at once
- Installation Names
- Installing in different directories
- Optional Features
- Selecting optional features
- Particular Systems
- Particular systems
- System Type
- Specifying the system type
- Sharing Defaults
- Setting site-wide defaults for ‘configure’
- Defining Variables
- Specifying the compiler etc.
- configure Invocation
- Changing how ‘configure’ runs
Obsolete Constructs
- Obsolete config.status Use
- Obsolete convention for ‘config.status’
- acconfig Header
- Additional entries in ‘config.h.in’
- autoupdate Invocation
- Automatic update of ‘configure.ac’
- Obsolete Macros
- Backward compatibility macros
- Autoconf 1
- Tips for upgrading your files
- Autoconf 2.13
- Some fresher tips
Upgrading From Version 1
- Changed File Names
- Files you might rename
- Changed Makefiles
- New things to put in ‘Makefile.in’
- Changed Macros
- Macro calls you might replace
- Changed Results
- Changes in how to check test results
- Changed Macro Writing
- Better ways to write your own macros
Upgrading From Version 2.13
- Changed Quotation
- Broken code which used to work
- New Macros
- Interaction with foreign macros
- Hosts and Cross-Compilation
- Bugward compatibility kludges
- AC_LIBOBJ vs LIBOBJS
- LIBOBJS is a forbidden token
- AC_ACT_IFELSE vs AC_TRY_ACT
- A more generic scheme for testing sources
Generating Test Suites with Autotest
- Using an Autotest Test Suite
- Autotest and the user
- Writing Testsuites
- Autotest macros
- testsuite Invocation
- Running ‘testsuite’ scripts
- Making testsuite Scripts
- Using autom4te to create ‘testsuite’
Using an Autotest Test Suite
- testsuite Scripts
- The concepts of Autotest
- Autotest Logs
- Their contents
Frequent Autoconf Questions, with answers
- Distributing
- Distributing ‘configure’ scripts
- Why GNU M4
- Why not use the standard M4?
- Bootstrapping
- Autoconf and GNU M4 require each other?
- Why Not Imake
- Why GNU uses ‘configure’ instead of Imake
- Defining Directories
- Passing ‘datadir’ to program
- Autom4te Cache
- What is it? Can I remove it?
- Present But Cannot Be Compiled
- Compiler and Preprocessor Disagree
- Expanded Before Required
- Expanded Before Required
- Debugging
- Debugging ‘configure’ scripts
History of Autoconf
- Genesis
- Prehistory and naming of ‘configure’
- Exodus
- The plagues of M4 and Perl
- Leviticus
- The priestly code of portability arrives
- Numbers
- Growth and contributors
- Deuteronomy
- Approaching the promises of easy configuration
Indices
- Environment Variable Index
- Index of environment variables used
- Output Variable Index
- Index of variables set in output files
- Preprocessor Symbol Index
- Index of C preprocessor symbols defined
- Cache Variable Index
- Index of documented cache variables
- Autoconf Macro Index
- Index of Autoconf macros
- M4 Macro Index
- Index of M4, M4sugar, and M4sh macros
- Autotest Macro Index
- Index of Autotest macros
- Program & Function Index
- Index of those with portability problems
- Concept Index
- General index