diff options
Diffstat (limited to 'util/autoconf/autoconf.info-1')
-rw-r--r-- | util/autoconf/autoconf.info-1 | 1156 |
1 files changed, 0 insertions, 1156 deletions
diff --git a/util/autoconf/autoconf.info-1 b/util/autoconf/autoconf.info-1 deleted file mode 100644 index f49358c..0000000 --- a/util/autoconf/autoconf.info-1 +++ /dev/null @@ -1,1156 +0,0 @@ -This is Info file autoconf.info, produced by Makeinfo-1.55 from the -input file ./autoconf.texi. - -START-INFO-DIR-ENTRY -* Autoconf: (autoconf). Create source code configuration scripts. -END-INFO-DIR-ENTRY - - This file documents the GNU Autoconf package for creating scripts to -configure source code packages using templates and an `m4' macro -package. - - Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: autoconf.info, Node: Top, Next: Introduction, Up: (dir) - - This file documents the GNU Autoconf package for creating scripts to -configure source code packages using templates and an `m4' macro -package. This is edition 2.1, for Autoconf version 2.1. - -* Menu: - -* Introduction:: Autoconf's purpose, strengths, and weaknesses. -* 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. -* Writing Macros:: Adding new macros to Autoconf. -* Manual Configuration:: Selecting features that can't be guessed. -* Site Configuration:: Local defaults for `configure'. -* Invoking configure:: How to use the Autoconf output. -* Invoking config.status:: Recreating a configuration. -* Questions:: Questions about Autoconf, with answers. -* Upgrading:: Tips for upgrading from version 1. -* History:: History of Autoconf. -* Old Macro Names:: Backward compatibility macros. -* 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. -* Macro Index:: Index of Autoconf macros. - - -- The Detailed Node Listing -- - -Making `configure' Scripts - -* Writing configure.in:: What to put in an Autoconf input file. -* Invoking autoscan:: Semi-automatic `configure.in' writing. -* Invoking ifnames:: Listing the conditionals in source code. -* Invoking autoconf:: How to create configuration scripts. -* Invoking autoreconf:: Remaking multiple `configure' scripts. - -Initialization and Output Files - -* Input:: Where Autoconf should find files. -* Output:: Creating output files. -* Makefile Substitutions:: Using output variables in `Makefile's. -* Configuration Headers:: Creating a configuration header file. -* Subdirectories:: Configuring independent packages together. -* Default Prefix:: Changing the default installation prefix. -* Versions:: Version numbers in `configure'. - -Substitutions in Makefiles - -* Preset Output Variables:: Output variables that are always set. -* Build Directories:: Compiling in a different directory. -* Automatic Remaking:: Makefile rules for configuring. - -Configuration Header Files - -* Header Templates:: Input for the configuration headers. -* Invoking autoheader:: How to create configuration templates. - -Existing Tests - -* Alternative Programs:: Selecting between alternative programs. -* Libraries:: Library archives that might be missing. -* Library Functions:: C library functions that might be missing. -* Header Files:: Header files that might be missing. -* Structures:: Structures or members that might be missing. -* Typedefs:: `typedef's that might be missing. -* Compiler Characteristics:: C compiler or machine architecture features. -* System Services:: Operating system services. -* UNIX Variants:: Special kludges for specific UNIX variants. - -Alternative Programs - -* Particular Programs:: Special handling to find certain programs. -* Generic Programs:: How to find other programs. - -Library Functions - -* Particular Functions:: Special handling to find certain functions. -* Generic Functions:: How to find other functions. - -Header Files - -* Particular Headers:: Special handling to find certain headers. -* Generic Headers:: How to find other headers. - -Typedefs - -* Particular Typedefs:: Special handling to find certain types. -* Generic Typedefs:: How to find other types. - -Writing Tests - -* Examining Declarations:: Detecting header files and declarations. -* Examining Syntax:: Detecting language syntax features. -* Examining Libraries:: Detecting functions and global variables. -* Run Time:: Testing for run-time features. -* Portable Shell:: Shell script portability pitfalls. -* Testing Values and Files:: Checking strings and files. -* Multiple Cases:: Tests for several possible values. -* Language Choice:: Selecting which language to use for testing. - -Checking Run Time Behavior - -* Test Programs:: Running test programs. -* Guidelines:: General rules for writing test programs. -* Test Functions:: Avoiding pitfalls in test programs. - -Results of Tests - -* Defining Symbols:: Defining C preprocessor symbols. -* Setting Output Variables:: Replacing variables in output files. -* Caching Results:: Speeding up subsequent `configure' runs. -* Printing Messages:: Notifying users of progress or problems. - -Caching Results - -* Cache Variable Names:: Shell variables used in caches. -* Cache Files:: Files `configure' uses for caching. - -Writing Macros - -* Macro Definitions:: Basic format of an Autoconf macro. -* Macro Names:: What to call your new macros. -* Quoting:: Protecting macros from unwanted expansion. -* Dependencies Between Macros:: What to do when macros depend on other macros. - -Dependencies Between Macros - -* Prerequisite Macros:: Ensuring required information. -* Suggested Ordering:: Warning about possible ordering problems. -* Obsolete Macros:: Warning about old ways of doing things. - -Manual Configuration - -* Specifying Names:: Specifying the system type. -* Canonicalizing:: Getting the canonical system type. -* System Type Variables:: Variables containing the system type. -* Using System Type:: What to do with the system type. - -Site Configuration - -* External Software:: Working with other optional software. -* Package Options:: Selecting optional features. -* 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 transforme 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. -* Build Directory:: Configuring in a different directory. -* Installation Names:: Installing in different directories. -* Optional Features:: Selecting optional features. -* System Type:: Specifying the system type. -* Sharing Defaults:: Setting site-wide defaults for `configure'. -* Operation Controls:: Changing how `configure' runs. - -Questions About Autoconf - -* 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. - -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. -* Invoking autoupdate:: Replacing old macro names in `configure.in'. -* Changed Results:: Changes in how to check test results. -* Changed Macro Writing:: Better ways to write your own macros. - -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. - - -File: autoconf.info, Node: Introduction, Next: Making configure Scripts, Prev: Top, Up: Top - -Introduction -************ - - A physicist, an engineer, and a computer scientist were - discussing the nature of God. Surely a Physicist, said the - physicist, because early in the Creation, God made Light; and you - know, Maxwell's equations, the dual nature of electro-magnetic - waves, the relativist consequences... An Engineer!, said the - engineer, because before making Light, God split the Chaos into - Land and Water; it takes a hell of an engineer to handle that big - amount of mud, and orderly separation of solids from - liquids... The computer scientist shouted: And the Chaos, - where do you think it was coming from, hmm? - - ---Anonymous - - Autoconf is a tool for producing shell scripts that automatically -configure software source code packages to adapt to many kinds of -UNIX-like systems. The configuration scripts produced by Autoconf are -independent of Autoconf when they are run, so their users do not need to -have Autoconf. - - The configuration scripts produced by Autoconf require no manual user -intervention when run; they do not normally even need an argument -specifying the system type. Instead, they test for the presence of each -feature that the software package they are for might need individually. -(Before each check, they print a one-line message stating what they are -checking for, so the user doesn't get too bored while waiting for the -script to finish.) As a result, they deal well with systems that are -hybrids or customized from the more common UNIX variants. There is no -need to maintain files that list the features supported by each release -of each variant of UNIX. - - For each software package that Autoconf is used with, it creates a -configuration script from a template file that lists the system -features that the package needs or can use. After the shell code to -recognize and respond to a system feature has been written, Autoconf -allows it to be shared by many software packages that can use (or need) -that feature. If it later turns out that the shell code needs -adjustment for some reason, it needs to be changed in only one place; -all of the configuration scripts can be regenerated automatically to -take advantage of the updated code. - - The Metaconfig package is similar in purpose to Autoconf, but the -scripts it produces require manual user intervention, which is quite -inconvenient when configuring large source trees. Unlike Metaconfig -scripts, Autoconf scripts can support cross-compiling, if some care is -taken in writing them. - - There are several jobs related to making portable software packages -that Autoconf currently does not do. Among these are automatically -creating `Makefile' files with all of the standard targets, and -supplying replacements for standard library functions and header files -on systems that lack them. Work is in progress to add those features in -the future. - - Autoconf imposes some restrictions on the names of macros used with -`#ifdef' in C programs (*note Preprocessor Symbol Index::.). - - Autoconf requires GNU `m4' in order to generate the scripts. It -uses features that some UNIX versions of `m4' do not have. It also -overflows internal limits of some versions of `m4', including GNU `m4' -1.0. You must use version 1.1 or later of GNU `m4'. Using version 1.3 -or later will be much faster than 1.1 or 1.2. - - *Note Upgrading::, for information about upgrading from version 1. -*Note History::, for the story of Autoconf's development. *Note -Questions::, for answers to some common questions about Autoconf. - - Mail suggestions and bug reports for Autoconf to -`bug-gnu-utils@prep.ai.mit.edu'. Please include the Autoconf version -number, which you can get by running `autoconf --version'. - - -File: autoconf.info, Node: Making configure Scripts, Next: Setup, Prev: Introduction, Up: Top - -Making `configure' Scripts -************************** - - The configuration scripts that Autoconf produces are by convention -called `configure'. When run, `configure' creates several files, -replacing configuration parameters in them with appropriate values. -The files that `configure' creates are: - - * one or more `Makefile' files, one in each subdirectory of the - package (*note Makefile Substitutions::.); - - * optionally, a C header file, the name of which is configurable, - containing `#define' directives (*note Configuration Headers::.); - - * a shell script called `config.status' that, when run, will recreate - the files listed above (*note Invoking config.status::.); - - * a shell script called `config.cache' that saves the results of - running many of the tests (*note Cache Files::.); - - * a file called `config.log' containing any messages produced by - compilers, to help debugging if `configure' makes a mistake. - - To create a `configure' script with Autoconf, you need to write an -Autoconf input file `configure.in' and run `autoconf' on it. If you -write your own feature tests to supplement those that come with -Autoconf, you might also write files called `aclocal.m4' and -`acsite.m4'. If you use a C header file to contain `#define' -directives, you might also write `acconfig.h', and you will distribute -the Autoconf-generated file `config.h.in' with the package. - - Here is a diagram showing how the files that can be used in -configuration are produced. Programs that are executed are suffixed by -`*'. Optional files are enclosed in square brackets (`[]'). -`autoconf' and `autoheader' also read the installed Autoconf macro -files (by reading `autoconf.m4'). - -Files used in preparing a software package for distribution: - your source files --> [autoscan*] --> [configure.scan] --> configure.in - - configure.in --. .------> autoconf* -----> configure - +---+ - [aclocal.m4] --+ `---. - [acsite.m4] ---' | - +--> [autoheader*] -> [config.h.in] - [acconfig.h] ----. | - +-----' - [config.h.top] --+ - [config.h.bot] --' - - Makefile.in -------------------------------> Makefile.in - -Files used in configuring a software package: - .-------------> config.cache - configure* ------------+-------------> config.log - | - [config.h.in] -. v .-> [config.h] -. - +--> config.status* -+ +--> make* - Makefile.in ---' `-> Makefile ---' - -* Menu: - -* Writing configure.in:: What to put in an Autoconf input file. -* Invoking autoscan:: Semi-automatic `configure.in' writing. -* Invoking ifnames:: Listing the conditionals in source code. -* Invoking autoconf:: How to create configuration scripts. -* Invoking autoreconf:: Remaking multiple `configure' scripts. - - -File: autoconf.info, Node: Writing configure.in, Next: Invoking autoscan, Up: Making configure Scripts - -Writing `configure.in' -====================== - - To produce a `configure' script for a software package, create a -file called `configure.in' that contains invocations of the Autoconf -macros that test the system features your package needs or can use. -Autoconf macros already exist to check for many features; see *Note -Existing Tests::, for their descriptions. For most other features, you -can use Autoconf template macros to produce custom checks; see *Note -Writing Tests::, for information about them. For especially tricky or -specialized features, `configure.in' might need to contain some -hand-crafted shell commands. The `autoscan' program can give you a -good start in writing `configure.in' (*note Invoking autoscan::., for -more information). - - The order in which `configure.in' calls the Autoconf macros is not -important, with a few exceptions. Every `configure.in' must contain a -call to `AC_INIT' before the checks, and a call to `AC_OUTPUT' at the -end (*note Output::.). Additionally, some macros rely on other macros -having been called first, because they check previously set values of -some variables to decide what to do. These macros are noted in the -individual descriptions (*note Existing Tests::.), and they also warn -you when creating `configure' if they are called out of order. - - To encourage consistency, here is a suggested order for calling the -Autoconf macros. Generally speaking, the things near the end of this -list could depend on things earlier in it. For example, library -functions could be affected by typedefs and libraries. - - `AC_INIT(FILE)' - checks for programs - checks for libraries - checks for header files - checks for typedefs - checks for structures - checks for compiler characteristics - checks for library functions - checks for system services - `AC_OUTPUT([FILE...])' - - It is best to put each macro call on its own line in `configure.in'. -Most of the macros don't add extra newlines; they rely on the newline -after the macro call to terminate the commands. This approach makes -the generated `configure' script a little easier to read by not -inserting lots of blank lines. It is generally safe to set shell -variables on the same line as a macro call, because the shell allows -assignments without intervening newlines. - - When calling macros that take arguments, there must not be any blank -space between the macro name and the open parenthesis. Arguments can be -more than one line long if they are enclosed within the `m4' quote -characters `[' and `]'. If you have a long line such as a list of file -names, you can generally use a backslash at the end of a line to -continue it logically on the next line (this is implemented by the -shell, not by anything special that Autoconf does). - - Some macros handle two cases: what to do if the given condition is -met, and what to do if the condition is not met. In some places you -might want to do something if a condition is true but do nothing if it's -false, or vice versa. To omit the true case, pass an empty value for -the ACTION-IF-FOUND argument to the macro. To omit the false case, -omit the ACTION-IF-NOT-FOUND argument to the macro, including the comma -before it. - - You can include comments in `configure.in' files by starting them -with the `m4' builtin macro `dnl', which discards text up through the -next newline. These comments do not appear in the generated -`configure' scripts. For example, it is helpful to begin -`configure.in' files with a line like this: - - dnl Process this file with autoconf to produce a configure script. - - -File: autoconf.info, Node: Invoking autoscan, Next: Invoking ifnames, Prev: Writing configure.in, Up: Making configure Scripts - -Using `autoscan' to Create `configure.in' -========================================= - - The `autoscan' program can help you create a `configure.in' file for -a software package. `autoscan' examines source files in the directory -tree rooted at a directory given as a command line argument, or the -current directory if none is given. It searches the source files for -common portability problems and creates a file `configure.scan' which -is a preliminary `configure.in' for that package. - - You should manually examine `configure.scan' before renaming it to -`configure.in'; it will probably need some adjustments. Occasionally -`autoscan' outputs a macro in the wrong order relative to another -macro, so that `autoconf' produces a warning; you need to move such -macros manually. Also, if you want the package to use a configuration -header file, you must add a call to `AC_CONFIG_HEADER' (*note -Configuration Headers::.). You might also have to change or add some -`#if' directives to your program in order to make it work with Autoconf -(*note Invoking ifnames::., for information about a program that can -help with that job). - - `autoscan' uses several data files, which are installed along with -the distributed Autoconf macro files, to determine which macros to -output when it finds particular symbols in a package's source files. -These files all have the same format. Each line consists of a symbol, -whitespace, and the Autoconf macro to output if that symbol is -encountered. Lines starting with `#' are comments. - - `autoscan' is only installed if you already have Perl installed. -`autoscan' accepts the following options: - -`--help' - Print a summary of the command line options and exit. - -`--macrodir=DIR' - Look for the data files in directory DIR instead of the default - installation directory. You can also set the `AC_MACRODIR' - environment variable to a directory; this option overrides the - environment variable. - -`--verbose' - Print the names of the files it examines and the potentially - interesting symbols it finds in them. This output can be - voluminous. - -`--version' - Print the version number of Autoconf and exit. - - -File: autoconf.info, Node: Invoking ifnames, Next: Invoking autoconf, Prev: Invoking autoscan, Up: Making configure Scripts - -Using `ifnames' to List Conditionals -==================================== - - `ifnames' can help when writing a `configure.in' for a software -package. It prints the identifiers that the package already uses in C -preprocessor conditionals. If a package has already been set up to -have some portability, this program can help you figure out what its -`configure' needs to check for. It may help fill in some gaps in a -`configure.in' generated by `autoscan' (*note Invoking autoscan::.). - - `ifnames' scans all of the C source files named on the command line -(or the standard input, if none are given) and writes to the standard -output a sorted list of all the identifiers that appear in those files -in `#if', `#elif', `#ifdef', or `#ifndef' directives. It prints each -identifier on a line, followed by a space-separated list of the files -in which that identifier occurs. - -`ifnames' accepts the following options: - -`--help' -`-h' - Print a summary of the command line options and exit. - -`--macrodir=DIR' -`-m DIR' - Look for the Autoconf macro files in directory DIR instead of the - default installation directory. Only used to get the version - number. You can also set the `AC_MACRODIR' environment variable - to a directory; this option overrides the environment variable. - -`--version' - Print the version number of Autoconf and exit. - - -File: autoconf.info, Node: Invoking autoconf, Next: Invoking autoreconf, Prev: Invoking ifnames, Up: Making configure Scripts - -Using `autoconf' to Create `configure' -====================================== - - To create `configure' from `configure.in', run the `autoconf' -program with no arguments. `autoconf' processes `configure.in' with -the `m4' macro processor, using the Autoconf macros. If you give -`autoconf' an argument, it reads that file instead of `configure.in' -and writes the configuration script to the standard output instead of -to `configure'. If you give `autoconf' the argument `-', it reads the -standard input instead of `configure.in' and writes the configuration -script on the standard output. - - The Autoconf macros are defined in several files. Some of the files -are distributed with Autoconf; `autoconf' reads them first. Then it -looks for the optional file `acsite.m4' in the directory that contains -the distributed Autoconf macro files, and for the optional file -`aclocal.m4' in the current directory. Those files can contain your -site's or the package's own Autoconf macro definitions (*note Writing -Macros::., for more information). If a macro is defined in more than -one of the files that `autoconf' reads, the last definition it reads -overrides the earlier ones. - - `autoconf' accepts the following options: - -`--help' -`-h' - Print a summary of the command line options and exit. - -`--localdir=DIR' -`-l DIR' - Look for the package file `aclocal.m4' in directory DIR instead of - in the current directory. - -`--macrodir=DIR' -`-m DIR' - Look for the installed macro files in directory DIR. You can also - set the `AC_MACRODIR' environment variable to a directory; this - option overrides the environment variable. - -`--version' - Print the version number of Autoconf and exit. - - -File: autoconf.info, Node: Invoking autoreconf, Prev: Invoking autoconf, Up: Making configure Scripts - -Using `autoreconf' to Update `configure' Scripts -================================================ - - If you have a lot of Autoconf-generated `configure' scripts, the -`autoreconf' program can save you some work. It runs `autoconf' (and -`autoheader', where appropriate) repeatedly to remake the Autoconf -`configure' scripts and configuration header templates in the directory -tree rooted at the current directory. By default, it only remakes -those files that are older than their `configure.in' or (if present) -`aclocal.m4'. Since `autoheader' does not change the timestamp of its -output file if the file wouldn't be changing, this is not necessarily -the minimum amount of work. If you install a new version of Autoconf, -you can make `autoreconf' remake *all* of the files by giving it the -`--force' option. - - If you give `autoreconf' the `--macrodir=DIR' or `--localdir=DIR' -options, it passes them down to `autoconf' and `autoheader' (with -relative paths adjusted properly). - - *Note Automatic Remaking::, for `Makefile' rules to automatically -remake `configure' scripts when their source files change. That method -handles the timestamps of configuration header templates properly, but -does not pass `--macrodir=DIR' or `--localdir=DIR'. - -`autoreconf' accepts the following options: - -`--help' -`-h' - Print a summary of the command line options and exit. - -`--force' -`-f' - Remake even `configure' scripts and configuration headers that are - newer than their input files (`configure.in' and, if present, - `aclocal.m4'). - -`--localdir=DIR' -`-l DIR' - Look for the package files `aclocal.m4' and `acconfig.h' (but not - `FILE.top' and `FILE.bot') in directory DIR instead of in the - directory containing each `configure.in'. - -`--macrodir=DIR' -`-m DIR' - Look for the Autoconf macro files in directory DIR instead of the - default installation directory. You can also set the `AC_MACRODIR' - environment variable to a directory; this option overrides the - environment variable. - -`--verbose' - Print the name of each directory where `autoreconf' runs - `autoconf' (and `autoheader', if appropriate). - -`--version' - Print the version number of Autoconf and exit. - - -File: autoconf.info, Node: Setup, Next: Existing Tests, Prev: Making configure Scripts, Up: Top - -Initialization and Output Files -******************************* - - Autoconf-generated `configure' scripts need some information about -how to initialize, such as how to find the package's source files; and -about the output files to produce. The following sections describe -initialization and creating output files. - -* Menu: - -* Input:: Where Autoconf should find files. -* Output:: Creating output files. -* Makefile Substitutions:: Using output variables in `Makefile's. -* Configuration Headers:: Creating a configuration header file. -* Subdirectories:: Configuring independent packages together. -* Default Prefix:: Changing the default installation prefix. -* Versions:: Version numbers in `configure'. - - -File: autoconf.info, Node: Input, Next: Output, Up: Setup - -Finding `configure' Input -========================= - - Every `configure' script must call `AC_INIT' before doing anything -else. The only other required macro is `AC_OUTPUT' (*note Output::.). - - - Macro: AC_INIT (UNIQUE-FILE-IN-SOURCE-DIR) - Process any command-line arguments and find the source code - directory. UNIQUE-FILE-IN-SOURCE-DIR is some file that is in the - package's source directory; `configure' checks for this file's - existence to make sure that the directory that it is told contains - the source code in fact does (*note Invoking configure::., for - more information). - - Packages that do manual configuration or use the `install' program -might need to tell `configure' where to find some other shell scripts -by calling `AC_CONFIG_AUX_DIR', though the default places it looks are -correct for most cases. - - - Macro: AC_CONFIG_AUX_DIR(DIR) - Use the `install-sh', `config.sub', `config.guess', and Cygnus - `configure' scripts that are in directory DIR. These are - auxiliary files used in configuration. DIR can be either absolute - or relative to `SRCDIR'. The default is `SRCDIR' or `SRCDIR/..' or - `SRCDIR/../..', whichever is the first that contains `install-sh'. - The other files are not checked for, so that using - `AC_PROG_INSTALL' does not automatically require distributing the - other auxiliary files. It checks for `install.sh' also, but that - name is obsolete because some `make' programs have a rule that - creates `install' from it if there is no `Makefile'. - - -File: autoconf.info, Node: Output, Next: Makefile Substitutions, Prev: Input, Up: Setup - -Creating Output Files -===================== - - Every Autoconf-generated `configure' script must finish by calling -`AC_OUTPUT'. It is the macro that creates the `Makefile's and optional -other files resulting from configuration. The only other required -macro is `AC_INIT' (*note Input::.). - - - Macro: AC_OUTPUT ([FILE...] [,EXTRA-CMDS] [,INIT-CMDS]) - Create output files. The FILE... argument is a - whitespace-separated list of output files; it may be empty. This - macro creates each file `FILE' by copying an input file (by default - named `FILE.in'), substituting the output variable values. *Note - Makefile Substitutions::, for more information on using output - variables. *Note Setting Output Variables::, for more information - on creating them. This macro creates the directory that the file - is in if it doesn't exist (but not the parents of that directory). - Usually, `Makefile's are created this way, but other files, such - as `.gdbinit', can be specified as well. - - If `AC_CONFIG_HEADER', `AC_LINK_FILES', or `AC_CONFIG_SUBDIRS' has - been called, this macro also creates the files named as their - arguments. - - A typical call to `AC_OUTPUT' looks like this: - AC_OUTPUT(Makefile src/Makefile man/Makefile X/Imakefile) - - You can override an input file name by appending it to FILE, - separated by a colon. For example, - AC_OUTPUT(Makefile:templates/top.mk lib/Makefile:templates/lib.mk) - - If you pass EXTRA-CMDS, those commands will be inserted into - `config.status' to be run after all its other processing. If - INIT-CMDS are given, they are inserted just before EXTRA-CMDS, - with shell variable, command, and backslash substitutions - performed on them in `configure'. You can use INIT-CMDS to pass - variables from `configure' to the EXTRA-CMDS. - - If you run `make' on subdirectories, you should run it using the -`make' variable `MAKE'. Most versions of `make' set `MAKE' to the name -of the `make' program plus any options it was given. (But many do not -include in it the values of any variables set on the command line, so -those are not passed on automatically.) Some old versions of `make' do -not set this variable. The following macro allows you to use it even -with those versions. - - - Macro: AC_PROG_MAKE_SET - If `make' predefines the variable `MAKE', define output variable - `SET_MAKE' to be empty. Otherwise, define `SET_MAKE' to contain - `MAKE=make'. Calls `AC_SUBST' for `SET_MAKE'. - - To use this macro, place a line like this in each `Makefile.in' that -runs `MAKE' on other directories: - - @SET_MAKE@ - - -File: autoconf.info, Node: Makefile Substitutions, Next: Configuration Headers, Prev: Output, Up: Setup - -Substitutions in Makefiles -========================== - - Each subdirectory in a distribution that contains something to be -compiled or installed should come with a file `Makefile.in', from which -`configure' will create a `Makefile' in that directory. To create a -`Makefile', `configure' performs a simple variable substitution, -replacing occurrences of `@VARIABLE@' in `Makefile.in' with the value -that `configure' has determined for that variable. Variables that are -substituted into output files in this way are called "output -variables". They are ordinary shell variables that are set in -`configure'. To make `configure' substitute a particular variable into -the output files, the macro `AC_SUBST' must be called with that -variable name as an argument. Any occurrences of `@VARIABLE@' for -other variables are left unchanged. *Note Setting Output Variables::, -for more information on creating output variables with `AC_SUBST'. - - A software package that uses a `configure' script should be -distributed with a file `Makefile.in', but no `Makefile'; that way, the -user has to properly configure the package for the local system before -compiling it. - - *Note Makefile Conventions: (standards.info)Makefile Conventions, -for more information on what to put in `Makefile's. - -* Menu: - -* Preset Output Variables:: Output variables that are always set. -* Build Directories:: Compiling in a different directory. -* Automatic Remaking:: Makefile rules for configuring. - - -File: autoconf.info, Node: Preset Output Variables, Next: Build Directories, Up: Makefile Substitutions - -Preset Output Variables ------------------------ - - Some output variables are preset by the Autoconf macros. Some of the -Autoconf macros set additional output variables, which are mentioned in -the descriptions for those macros. *Note Output Variable Index::, for a -complete list of output variables. Here is what each of the preset ones -contains. - - - Variable: configure_input - A comment saying that the file was generated automatically by - `configure' and giving the name of the input file. `AC_OUTPUT' - adds a comment line containing this variable to the top of every - `Makefile' it creates. For other files, you should reference this - variable in a comment at the top of each input file. For example, - an input shell script should begin like this: - - #!/bin/sh - # @configure_input@ - - The presence of that line also reminds people editing the file - that it needs to be processed by `configure' in order to be used. - - - Variable: exec_prefix - The installation prefix for architecture-dependent files. - - - Variable: prefix - The installation prefix for architecture-independent files. - - - Variable: srcdir - The directory that contains the source code for that `Makefile'. - - - Variable: top_srcdir - The top-level source code directory for the package. In the - top-level directory, this is the same as `srcdir'. - - - Variable: CFLAGS - Debugging and optimization options for the C compiler. If it is - not set in the environment when `configure' runs, the default - value is set when you call `AC_PROG_CC' (or empty if you don't). - `configure' uses this variable when compiling programs to test for - C features. - - - Variable: CPPFLAGS - Header file search directory (`-IDIR') and any other miscellaneous - options for the C preprocessor and compiler. If it is not set in - the environment when `configure' runs, the default value is empty. - `configure' uses this variable when compiling or preprocessing - programs to test for C features. - - - Variable: CXXFLAGS - Debugging and optimization options for the C++ compiler. If it is - not set in the environment when `configure' runs, the default - value is set when you call `AC_PROG_CXX' (or empty if you don't). - `configure' uses this variable when compiling programs to test for - C++ features. - - - Variable: DEFS - `-D' options to pass to the C compiler. If `AC_CONFIG_HEADER' is - called, `configure' replaces `@DEFS@' with `-DHAVE_CONFIG_H' - instead (*note Configuration Headers::.). This variable is not - defined while `configure' is performing its tests, only when - creating the output files. *Note Setting Output Variables::, for - how to check the results of previous tests. - - - Variable: LDFLAGS - Stripping (`-s') and any other miscellaneous options for the - linker. If it is not set in the environment when `configure' runs, - the default value is empty. `configure' uses this variable when - linking programs to test for C features. - - - Variable: LIBS - `-l' and `-L' options to pass to the linker. - - -File: autoconf.info, Node: Build Directories, Next: Automatic Remaking, Prev: Preset Output Variables, Up: Makefile Substitutions - -Build Directories ------------------ - - You might want to compile a software package in a different directory -from the one that contains the source code. Doing this allows you to -compile the package for several architectures simultaneously from the -same copy of the source code and keep multiple sets of object files on -disk. - - To support doing this, `make' uses the `VPATH' variable to find the -files that are in the source directory. GNU `make' and most other -recent `make' programs can do this. Older `make' programs do not -support `VPATH'; when using them, the source code must be in the same -directory as the object files. - - To support `VPATH', each `Makefile.in' should contain two lines that -look like: - - srcdir = @srcdir@ - VPATH = @srcdir@ - - Do not set `VPATH' to the value of another variable, for example -`VPATH = $(srcdir)', because some versions of `make' do not do variable -substitutions on the value of `VPATH'. - - `configure' substitutes in the correct value for `srcdir' when it -produces `Makefile.in'. - - Do not use the `make' variable `$<', which expands to the pathname -of the file in the source directory (found with `VPATH'), except in -implicit rules. (An implicit rule is one such as `.c.o', which tells -how to create a `.o' file from a `.c' file.) Some versions of `make' -do not set `$<' in explicit rules; they expand it to an empty value. - - Instead, `Makefile' command lines should always refer to source -files by prefixing them with `$(srcdir)/'. For example: - - time.info: time.texinfo - $(MAKEINFO) $(srcdir)/time.texinfo - - -File: autoconf.info, Node: Automatic Remaking, Prev: Build Directories, Up: Makefile Substitutions - -Automatic Remaking ------------------- - - You can put rules like the following in the top-level `Makefile.in' -for a package to automatically update the configuration information when -you change the configuration files. This example includes all of the -optional files, such as `aclocal.m4' and those related to configuration -header files. Omit from the `Makefile.in' rules any of these files -that your package does not use. - - The `${srcdir}/' prefix is included because of limitations in the -`VPATH' mechanism. - - The `stamp-' files are necessary because the timestamps of -`config.h.in' and `config.h' will not be changed if remaking them does -not change their contents. This feature avoids unnecessary -recompilation. You should include the file `stamp-h.in' your package's -distribution, so `make' will consider `config.h.in' up to date. On -some old BSD systems, `touch' or any command that results in an empty -file does not update the timestamps, so use a command like `date' as a -workaround. - - ${srcdir}/configure: configure.in aclocal.m4 - cd ${srcdir} && autoconf - - # autoheader might not change config.h.in, so touch a stamp file. - ${srcdir}/config.h.in: stamp-h.in - ${srcdir}/stamp-h.in: configure.in aclocal.m4 acconfig.h \ - config.h.top config.h.bot - cd ${srcdir} && autoheader - date > ${srcdir}/stamp-h.in - - config.h: stamp-h - stamp-h: config.h.in config.status - ./config.status - - Makefile: Makefile.in config.status - ./config.status - - config.status: configure - ./config.status --recheck - - In addition, you should pass `date > stamp-h' in the EXTRA-CMDS -argument to `AC_OUTPUT', so `config.status' will ensure that `config.h' -is considered up to date. *Note Output::, for more information about -`AC_OUTPUT'. - - *Note Invoking config.status::, for more examples of handling -configuration-related dependencies. - - -File: autoconf.info, Node: Configuration Headers, Next: Subdirectories, Prev: Makefile Substitutions, Up: Setup - -Configuration Header Files -========================== - - When a package tests more than a few C preprocessor symbols, the -command lines to pass `-D' options to the compiler can get quite long. -This causes two problems. One is that the `make' output is hard to -visually scan for errors. More seriously, the command lines can exceed -the length limits of some operating systems. As an alternative to -passing `-D' options to the compiler, `configure' scripts can create a -C header file containing `#define' directives. The `AC_CONFIG_HEADER' -macro selects this kind of output. It should be called right after -`AC_INIT'. - - The package should `#include' the configuration header file before -any other header files, to prevent inconsistencies in declarations (for -example, if it redefines `const'). Use `#include <config.h>' instead -of `#include "config.h"', and pass the C compiler a `-I.' option (or -`-I..'; whichever directory contains `config.h'). That way, even if -the source directory is configured itself (perhaps to make a -distribution), other build directories can also be configured without -finding the `config.h' from the source directory. - - - Macro: AC_CONFIG_HEADER (HEADER-TO-CREATE ...) - Make `AC_OUTPUT' create the file(s) in the whitespace-separated - list HEADER-TO-CREATE containing C preprocessor `#define' - statements, and replace `@DEFS@' in generated files with - `-DHAVE_CONFIG_H' instead of the value of `DEFS'. The usual name - for HEADER-TO-CREATE is `config.h'. - - If HEADER-TO-CREATE already exists and its contents are identical - to what `AC_OUTPUT' would put in it, it is left alone. Doing this - allows some changes in configuration without needlessly causing - object files that depend on the header file to be recompiled. - - Usually the input file is named `HEADER-TO-CREATE.in'; however, - you can override the input file name by appending it to - HEADER-TO-CREATE, separated by a colon. For example, - AC_CONFIG_HEADER(defines.h:defines.hin) - - Doing this allows you to keep your filenames acceptable to MS-DOS. - -* Menu: - -* Header Templates:: Input for the configuration headers. -* Invoking autoheader:: How to create configuration templates. - - -File: autoconf.info, Node: Header Templates, Next: Invoking autoheader, Up: Configuration Headers - -Configuration Header Templates ------------------------------- - - Your distribution should contain a template file that looks as you -want the final header file to look, including comments, with default -values in the `#define' statements. For example, suppose your -`configure.in' makes these calls: - - AC_CONFIG_HEADER(conf.h) - AC_CHECK_HEADERS(unistd.h) - -Then you could have code like the following in `conf.h.in'. On systems -that have `unistd.h', `configure' will change the 0 to a 1. On other -systems, it will leave the line unchanged. - - /* Define as 1 if you have unistd.h. */ - #define HAVE_UNISTD_H 0 - - Alternately, if your code tests for configuration options using -`#ifdef' instead of `#if', a default value can be to `#undef' the -variable instead of to define it to a value. On systems that have -`unistd.h', `configure' will change the second line to read `#define -HAVE_UNISTD_H 1'. On other systems, it will comment that line out (in -case the system predefines that symbol). - - /* Define if you have unistd.h. */ - #undef HAVE_UNISTD_H - - -File: autoconf.info, Node: Invoking autoheader, Prev: Header Templates, Up: Configuration Headers - -Using `autoheader' to Create `config.h.in' ------------------------------------------- - - The `autoheader' program can create a template file of C `#define' -statements for `configure' to use. If `configure.in' invokes -`AC_CONFIG_HEADER(FILE)', `autoheader' creates `FILE.in'. Otherwise, -`autoheader' creates `config.h.in'. - - If you give `autoheader' an argument, it uses that file instead of -`configure.in' and writes the header file to the standard output -instead of to `config.h.in'. If you give `autoheader' an argument of -`-', it reads the standard input instead of `configure.in' and writes -the header file to the standard output. - - `autoheader' scans `configure.in' and figures out which C -preprocessor symbols it might define. It copies comments and `#define' -and `#undef' statements from a file called `acconfig.h', which comes -with and is installed with Autoconf. It also uses a file called -`acconfig.h' in the current directory, if present. If you `AC_DEFINE' -any additional symbols, you must create that file with entries for -them. For symbols defined by `AC_CHECK_HEADERS', `AC_CHECK_FUNCS', -`AC_CHECK_SIZEOF', or `AC_CHECK_LIB', `autoheader' generates comments -and `#undef' statements itself rather than copying them from a file, -since the possible symbols are effectively limitless. - - The file that `autoheader' creates contains mainly `#define' and -`#undef' statements and their accompanying comments. If `./acconfig.h' -contains the string `@TOP@', `autoheader' copies the lines before the -line containing `@TOP@' into the top of the file that it generates. -Similarly, if `./acconfig.h' contains the string `@BOTTOM@', -`autoheader' copies the lines after that line to the end of the file it -generates. Either or both of those strings may be omitted. - - An alternate way to produce the same effect is to create the files -`FILE.top' (typically `config.h.top') and/or `FILE.bot' in the current -directory. If they exist, `autoheader' copies them to the beginning -and end, respectively, of its output. Their use is discouraged because -they have file names that contain two periods, and so can not be stored -on MS-DOS; also, they are two more files to clutter up the directory. -But if you use the `--localdir=DIR' option to use an `acconfig.h' in -another directory, they give you a way to put custom boilerplate in each -individual `config.h.in'. - - `autoheader' accepts the following options: - -`--help' -`-h' - Print a summary of the command line options and exit. - -`--localdir=DIR' -`-l DIR' - Look for the package files `aclocal.m4' and `acconfig.h' (but not - `FILE.top' and `FILE.bot') in directory DIR instead of in the - current directory. - -`--macrodir=DIR' -`-m DIR' - Look for the installed macro files and `acconfig.h' in directory - DIR. You can also set the `AC_MACRODIR' environment variable to a - directory; this option overrides the environment variable. - -`--version' - Print the version number of Autoconf and exit. - - -File: autoconf.info, Node: Subdirectories, Next: Default Prefix, Prev: Configuration Headers, Up: Setup - -Configuring Other Packages in Subdirectories -============================================ - - In most situations, calling `AC_OUTPUT' is sufficient to produce -`Makefile's in subdirectories. However, `configure' scripts that -control more than one independent package can use `AC_CONFIG_SUBDIRS' -to run `configure' scripts for other packages in subdirectories. - - - Macro: AC_CONFIG_SUBDIRS (DIR ...) - Make `AC_OUTPUT' run `configure' in each subdirectory DIR in the - given whitespace-separated list. If a given DIR is not found, no - error is reported, so a `configure' script can configure whichever - parts of a large source tree are present. If a given DIR contains - `configure.in' but no `configure', the Cygnus `configure' script - found by `AC_CONFIG_AUXDIR' is used. The subdirectory `configure' - scripts are given the same command line options that were given to - this `configure' script, with minor changes if needed (e.g., to - adjust a relative path for the cache file or source directory). - This macro also sets the output variable `subdirs' to the list of - directories `DIR ...'. `Makefile' rules can use this variable to - determine which subdirectories to recurse into. - - -File: autoconf.info, Node: Default Prefix, Next: Versions, Prev: Subdirectories, Up: Setup - -Default Prefix -============== - - By default, `configure' sets the prefix for files it installs to -`/usr/local'. The user of `configure' can select a different prefix -using the `--prefix' and `--exec-prefix' options. There are two ways -to change the default: when creating `configure', and when running it. - - Some software packages might want to install in a directory besides -`/usr/local' by default. To accomplish that, use the -`AC_PREFIX_DEFAULT' macro. - - - Macro: AC_PREFIX_DEFAULT (PREFIX) - Set the default installation prefix to PREFIX instead of - `/usr/local'. - - It may be convenient for users to have `configure' guess the -installation prefix from the location of a related program that they -have already installed. If you wish to do that, you can call -`AC_PREFIX_PROGRAM'. - - - Macro: AC_PREFIX_PROGRAM (PROGRAM) - If the user did not specify an installation prefix (using the - `--prefix' option), guess a value for it by looking for PROGRAM in - `PATH', the way the shell does. If PROGRAM is found, set the - prefix to the parent of the directory containing PROGRAM; - otherwise leave the prefix specified in `Makefile.in' unchanged. - For example, if PROGRAM is `gcc' and the `PATH' contains - `/usr/local/gnu/bin/gcc', set the prefix to `/usr/local/gnu'. - |