diff options
Diffstat (limited to 'util/autoconf/autoconf.info-4')
-rw-r--r-- | util/autoconf/autoconf.info-4 | 1123 |
1 files changed, 0 insertions, 1123 deletions
diff --git a/util/autoconf/autoconf.info-4 b/util/autoconf/autoconf.info-4 deleted file mode 100644 index f296435..0000000 --- a/util/autoconf/autoconf.info-4 +++ /dev/null @@ -1,1123 +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: Transforming Names, Next: Site Defaults, Prev: Site Details, Up: Site Configuration - -Transforming Program Names When Installing -========================================== - - Autoconf supports changing the names of programs when installing -them. In order to use these transformations, `configure.in' must call -the macro `AC_ARG_PROGRAM'. - - - Macro: AC_ARG_PROGRAM - Place in output variable `program_transform_name' a sequence of - `sed' commands for changing the names of installed programs. - - If any of the options described below are given to `configure', - program names are transformed accordingly. Otherwise, if - `AC_CANONICAL_SYSTEM' has been called and a `--target' value is - given that differs from the host type (specified with `--host' or - defaulted by `config.sub'), the target type followed by a dash is - used as a prefix. Otherwise, no program name transformation is - done. - -* Menu: - -* Transformation Options:: `configure' options to transforme names. -* Transformation Examples:: Sample uses of transforming names. -* Transformation Rules:: `Makefile' uses of transforming names. - - -File: autoconf.info, Node: Transformation Options, Next: Transformation Examples, Up: Transforming Names - -Transformation Options ----------------------- - - You can specify name transformations by giving `configure' these -command line options: - -`--program-prefix=PREFIX' - prepend PREFIX to the names; - -`--program-suffix=SUFFIX' - append SUFFIX to the names; - -`--program-transform-name=EXPRESSION' - perform `sed' substitution EXPRESSION on the names. - - -File: autoconf.info, Node: Transformation Examples, Next: Transformation Rules, Prev: Transformation Options, Up: Transforming Names - -Transformation Examples ------------------------ - - These transformations are useful with programs that can be part of a -cross-compilation development environment. For example, a -cross-assembler running on a Sun 4 configured with -`--target=i960-vxworks' is normally installed as `i960-vxworks-as', -rather than `as', which could be confused with a native Sun 4 assembler. - - You can force a program name to begin with `g', if you don't want -GNU programs installed on your system to shadow other programs with the -same name. For example, if you configure GNU `diff' with -`--program-prefix=g', then when you run `make install' it is installed -as `/usr/local/bin/gdiff'. - - As a more sophistocated example, you could use - --program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/' - -to prepend `g' to most of the program names in a source tree, excepting -those like `gdb' that already have one and those like `less' and -`lesskey' that aren't GNU programs. (That is assuming that you have a -source tree containing those programs that is set up to use this -feature.) - - One way to install multiple versions of some programs simultaneously -is to append a version number to the name of one or both. For example, -if you want to keep Autoconf version 1 around for awhile, you can -configure Autoconf version 2 using `--program-suffix=2' to install the -programs as `/usr/local/bin/autoconf2', `/usr/local/bin/autoheader2', -etc. - - -File: autoconf.info, Node: Transformation Rules, Prev: Transformation Examples, Up: Transforming Names - -Transformation Rules --------------------- - - Here is how to use the variable `program_transform_name' in a -`Makefile.in': - - transform=@program_transform_name@ - install: all - $(INSTALL_PROGRAM) myprog $(bindir)/`echo myprog|sed '$(transform)'` - - uninstall: - rm -f $(bindir)/`echo myprog|sed '$(transform)'` - -If you have more than one program to install, you can do it in a loop: - - PROGRAMS=cp ls rm - install: - for p in $(PROGRAMS); do \ - $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \ - done - - uninstall: - for p in $(PROGRAMS); do \ - rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \ - done - - Whether to do the transformations on documentation files (Texinfo or -`man') is a tricky question; there seems to be no perfect answer, due -to the several reasons for name transforming. Documentation is not -usually particular to a specific architecture, and Texinfo files do not -conflict with system documentation. But they might conflict with -earlier versions of the same files, and `man' pages sometimes do -conflict with system documentation. As a compromise, it is probably -best to do name transformations on `man' pages but not on Texinfo -manuals. - - -File: autoconf.info, Node: Site Defaults, Prev: Transforming Names, Up: Site Configuration - -Setting Site Defaults -===================== - - Autoconf-generated `configure' scripts allow your site to provide -default values for some configuration values. You do this by creating -site- and system-wide initialization files. - - If the environment variable `CONFIG_SITE' is set, `configure' uses -its value as the name of a shell script to read. Otherwise, it reads -the shell script `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Thus, settings in -machine-specific files override those in machine-independent ones in -case of conflict. - - Site files can be arbitrary shell scripts, but only certain kinds of -code are really appropriate to be in them. Because `configure' reads -any cache file after it has read any site files, a site file can define -a default cache file to be shared between all Autoconf-generated -`configure' scripts run on that system. If you set a default cache -file in a site file, it is a good idea to also set the output variable -`CC' in that site file, because the cache file is only valid for a -particular compiler, but many systems have several available. - - Site files are also good places to set default values for other -output variables, such as `CFLAGS', if you need to give them non-default -values: anything you would normally do, repetitively, on the command -line. If you use non-default values for PREFIX or EXEC_PREFIX -(wherever you locate the site file), you can set them in the site file -if you specify it with the `CONFIG_SITE' environment variable. - - You can set some cache values in the site file itself. Doing this is -useful if you are cross-compiling, so it is impossible to check features -that require running a test program. You could "prime the cache" by -setting those values correctly for that system in -`PREFIX/etc/config.site'. To find out the names of the cache variables -you need to set, look for shell variables with `_cv_' in their names in -the affected `configure' scripts, or in the Autoconf `m4' source code -for those macros. - - The cache file is careful to not override any variables set in the -site files. Similarly, you should not override command-line options in -the site files. Your code should check that variables such as `prefix' -and `cache_file' have their default values (as set near the top of -`configure') before changing them. - - Here is a sample file `/usr/share/local/gnu/share/config.site'. The -command `configure --prefix=/usr/share/local/gnu' would read this file -(if `CONFIG_SITE' is not set to a different file). - - # config.site for configure - # - # Default --prefix and --exec-prefix. - test "$prefix" = NONE && prefix=/usr/share/local/gnu - test "$exec_prefix" = NONE && exec_prefix=/usr/local/gnu - # - # Give Autoconf 2.x generated configure scripts a shared default - # cache file for feature test results, architecture-specific. - if test "$cache_file" = ./config.cache; then - cache_file="$prefix/var/config.cache" - # A cache file is only valid for one C compiler. - CC=gcc - fi - - -File: autoconf.info, Node: Invoking configure, Next: Invoking config.status, Prev: Site Configuration, Up: Top - -Running `configure' Scripts -*************************** - - Below are instructions on how to configure a package that uses a -`configure' script, suitable for inclusion as an `INSTALL' file in the -package. A plain-text version of `INSTALL' which you may use comes -with Autoconf. - -* Menu: - -* 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. - - -File: autoconf.info, Node: Basic Installation, Next: Compilers and Options, Up: Invoking configure - -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, a file -`config.cache' that saves the results of its tests to speed up -reconfiguring, and a file `config.log' containing compiler output -(useful mainly for debugging `configure'). - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If at some point `config.cache' -contains results you don't want to keep, you may remove or edit it. - - The file `configure.in' is used to create `configure' by a program -called `autoconf'. You only need `configure.in' if you want to change -it or regenerate `configure' using a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source directory by typing `make clean'. To also remove the files - that `configure' created (so you can compile the package for a - different kind of computer), type `make distclean'. - - -File: autoconf.info, Node: Compilers and Options, Next: Build Directory, Prev: Basic Installation, Up: Invoking configure - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. You can give `configure' -initial values for variables by setting them in the environment. Using -a Bourne-compatible shell, you can do that on the command line like -this: - CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure - -Or on systems that have the `env' program, you can do it like this: - env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure - - -File: autoconf.info, Node: Build Directory, Next: Installation Names, Prev: Compilers and Options, Up: Invoking configure - -Using a Different Build Directory -================================= - - You can compile the package in a different directory from the one -containing the source code. Doing so allows you to compile it on more -than one kind of computer at the same time. To do this, you must use a -version of `make' that supports the `VPATH' variable, such as GNU -`make'. `cd' to the directory where you want the object files and -executables to go and run the `configure' script. `configure' -automatically checks for the source code in the directory that -`configure' is in and in `..'. - - -File: autoconf.info, Node: Installation Names, Next: Optional Features, Prev: Build Directory, Up: Invoking configure - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - - -File: autoconf.info, Node: Optional Features, Next: System Type, Prev: Installation Names, Up: Invoking configure - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - - -File: autoconf.info, Node: System Type, Next: Sharing Defaults, Prev: Optional Features, Up: Invoking configure - -Specifying the System Type -========================== - - There may be some features `configure' can not figure out -automatically, but needs to determine by the type of host the package -will run on. Usually `configure' can figure that out, but if it prints -a message saying it can not guess the host type, give it the -`--host=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name with three fields: - CPU-COMPANY-SYSTEM - -See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the host type. - - If you are building compiler tools for cross-compiling, you can also -use the `--target=TYPE' option to select the type of system they will -produce code for and the `--build=TYPE' option to select the type of -system on which you are compiling the package. - - -File: autoconf.info, Node: Sharing Defaults, Next: Operation Controls, Prev: System Type, Up: Invoking configure - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - - -File: autoconf.info, Node: Operation Controls, Prev: Sharing Defaults, Up: Invoking configure - -Operation Controls -================== - - `configure' recognizes the following options to control how it -operates. - -`--cache-file=FILE' - Save the results of the tests in FILE instead of `config.cache'. - Set FILE to `/dev/null' to disable caching, for debugging - `configure'. - -`--help' - Print a summary of the options to `configure', and exit. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--version' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`configure' also accepts some other, not widely useful, options. - - -File: autoconf.info, Node: Invoking config.status, Next: Questions, Prev: Invoking configure, Up: Top - -Recreating a Configuration -************************** - - The `configure' script creates a file named `config.status' which -describes which configuration options were specified when the package -was last configured. This file is a shell script which, if run, will -recreate the same configuration. - - You can give `config.status' the `--recheck' option to update -itself. This option is useful if you change `configure', so that the -results of some tests might be different from the previous run. The -`--recheck' option re-runs `configure' with the same arguments you used -before, plus the `--no-create' option, which prevent `configure' from -running `config.status' and creating `Makefile' and other files, and -the `--no-recursion' option, which prevents `configure' from running -other `configure' scripts in subdirectories. (This is so other -`Makefile' rules can run `config.status' when it changes; *note -Automatic Remaking::., for an example). - - `config.status' also accepts the options `--help', which prints a -summary of the options to `config.status', and `--version', which -prints the version of Autoconf used to create the `configure' script -that generated `config.status'. - - `config.status' checks several optional environment variables that -can alter its behavior: - - - Variable: CONFIG_SHELL - The shell with which to run `configure' for the `--recheck' - option. It must be Bourne-compatible. The default is `/bin/sh'. - - - Variable: CONFIG_STATUS - The file name to use for the shell script that records the - configuration. The default is `./config.status'. This variable is - useful when one package uses parts of another and the `configure' - scripts shouldn't be merged because they are maintained separately. - - The following variables provide one way for separately distributed -packages to share the values computed by `configure'. Doing so can be -useful if some of the packages need a superset of the features that one -of them, perhaps a common library, does. These variables allow a -`config.status' file to create files other than the ones that its -`configure.in' specifies, so it can be used for a different package. - - - Variable: CONFIG_FILES - The files in which to perform `@VARIABLE@' substitutions. The - default is the arguments given to `AC_OUTPUT' in `configure.in'. - - - Variable: CONFIG_HEADERS - The files in which to substitute C `#define' statements. The - default is the arguments given to `AC_CONFIG_HEADER'; if that - macro was not called, `config.status' ignores this variable. - - These variables also allow you to write `Makefile' rules that -regenerate only some of the files. For example, in the dependencies -given above (*note Automatic Remaking::.), `config.status' is run twice -when `configure.in' has changed. If that bothers you, you can make -each run only regenerate the files for that rule: - - config.h: stamp-h - stamp-h: config.h.in config.status - CONFIG_FILES= CONFIG_HEADERS=config.h ./config.status - echo > stamp-h - - Makefile: Makefile.in config.status - CONFIG_FILES=Makefile CONFIG_HEADERS= ./config.status - -(If `configure.in' does not call `AC_CONFIG_HEADER', there is no need -to set `CONFIG_HEADERS' in the `make' rules.) - - -File: autoconf.info, Node: Questions, Next: Upgrading, Prev: Invoking config.status, Up: Top - -Questions About Autoconf -************************ - - Several questions about Autoconf come up occasionally. Here some of -them are addressed. - -* Menu: - -* 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. - - -File: autoconf.info, Node: Distributing, Next: Why GNU m4, Up: Questions - -Distributing `configure' Scripts -================================ - - What are the restrictions on distributing `configure' - scripts that Autoconf generates? How does that affect my - programs that use them? - - There are no restrictions on how the configuration scripts that -Autoconf produces may be distributed or used. In Autoconf version 1, -they were covered by the GNU General Public License. We still -encourage software authors to distribute their work under terms like -those of the GPL, but doing so is not required to use Autoconf. - - Of the other files that might be used with `configure', -`config.h.in' is under whatever copyright you use for your -`configure.in', since it is derived from that file and from the public -domain file `acconfig.h'. `config.sub' and `config.guess' have an -exception to the GPL when they are used with an Autoconf-generated -`configure' script, which permits you to distribute them under the same -terms as the rest of your package. `install-sh' is from the X -Consortium and is not copyrighted. - - -File: autoconf.info, Node: Why GNU m4, Next: Bootstrapping, Prev: Distributing, Up: Questions - -Why Require GNU `m4'? -===================== - - Why does Autoconf require GNU `m4'? - - Many `m4' implementations have hard-coded limitations on the size -and number of macros, which Autoconf exceeds. They also lack several -builtin macros that it would be difficult to get along without in a -sophisticated application like Autoconf, including: - - builtin - indir - patsubst - __file__ - __line__ - - Since only software maintainers need to use Autoconf, and since GNU -`m4' is simple to configure and install, it seems reasonable to require -GNU `m4' to be installed also. Many maintainers of GNU and other free -software already have most of the GNU utilities installed, since they -prefer them. - - -File: autoconf.info, Node: Bootstrapping, Next: Why Not Imake, Prev: Why GNU m4, Up: Questions - -How Can I Bootstrap? -==================== - - If Autoconf requires GNU `m4' and GNU `m4' has an - Autoconf `configure' script, how do I bootstrap? It seems - like a chicken and egg problem! - - This is a misunderstanding. Although GNU `m4' does come with a -`configure' script produced by Autoconf, Autoconf is not required in -order to run the script and install GNU `m4'. Autoconf is only -required if you want to change the `m4' `configure' script, which few -people have to do (mainly its maintainer). - - -File: autoconf.info, Node: Why Not Imake, Prev: Bootstrapping, Up: Questions - -Why Not Imake? -============== - - Why not use Imake instead of `configure' scripts? - - Several people have written addressing this question, so I include -adaptations of their explanations here. - - The following answer is based on one written by Richard Pixley: - - Autoconf generated scripts frequently work on machines which it has -never been set up to handle before. That is, it does a good job of -inferring a configuration for a new system. Imake cannot do this. - - Imake uses a common database of host specific data. For X11, this -makes sense because the distribution is made as a collection of tools, -by one central authority who has control over the database. - - GNU tools are not released this way. Each GNU tool has a maintainer; -these maintainers are scattered across the world. Using a common -database would be a maintenance nightmare. Autoconf may appear to be -this kind of database, but in fact it is not. Instead of listing host -dependencies, it lists program requirements. - - Imake is special-purpose. It is directed at building the X11 -distribution. By comparison to the GNU tools, this is a simple problem. -If you view the GNU suite as a collection of native tools, then the -problems are similar. But the GNU tools are more powerful than that. -The development tools can be configured as cross tools in almost any -host+target permutation. All of these configurations can be installed -concurrently. They can even be configured to share host independent -files across hosts. Imake doesn't address these issues. - - Imake templates are a form of standardization. The GNU coding -standards address the same issues without necessarily imposing the same -restrictions. - - Here is some further explanation, written by Per Bothner: - - One of the advantages of Imake is that it easy to generate large -Makefiles using `cpp''s `#include' and macro mechanisms. However, -`cpp' is not programmable: it has limited conditional facilities, and -no looping. And `cpp' cannot inspect its environment. - - All of these problems are solved by using `sh' instead of `cpp'. -The shell is fully programmable, has macro substitution, can execute -(or source) other shell scripts, and can inspect its environment. - - Paul Eggert elaborates more: - - With Autoconf, installers need not assume that Imake itself is -already installed and working well. This may not seem like much of an -advantage to people who are accustomed to Imake. But on many hosts -Imake is not installed or the default installation is not working well, -and requiring Imake to install a package hinders the acceptance of that -package on those hosts. For example, the Imake template and -configuration files might not be installed properly on a host, or the -Imake build procedure might wrongly assume that all source files are in -one big directory tree, or the Imake configuration might assume one -compiler whereas the package or the installer needs to use another, or -there might be a version mismatch between the Imake expected by the -package and the Imake suported by the host. These problems are much -rarer with Autoconf, where each package comes with its own independent -configuration processor. - - Also, Imake often suffers from unexpected interactions between -`make' and the installer's C preprocessor. The fundamental problem -here is that the C preprocessor was designed to preprocess C programs, -not `Makefile's. This is much less of a problem with Autoconf, which -uses the general-purpose preprocessor `m4', and where the package's -author (rather than the installer) does the preprocessing in a standard -way. - - Finally, Mark Eichin notes: - - Imake isn't all that extensible, either. In order to add new -features to Imake, you need to provide you own project template, and -duplicate most of the features of the existing one. This means that -for a sophisticated project, using the vendor-provided Imake templates -fails to provide any leverage--since they don't cover anything that -your own project needs (unless it is an X11 program). - - On the other side, though: - - The one advantage that Imake has over `configure': `Imakefile's tend -to be much shorter (likewise, less redundant) than `Makefile.in's. -There is a fix to this, however--at least for the Kerberos V5 tree, -we've modified things to call in common `post.in' and `pre.in' -`Makefile' fragments for the entire tree. This means that a lot of -common things don't have to be duplicated, even though they normally -are in `configure' setups. - - -File: autoconf.info, Node: Upgrading, Next: History, Prev: Questions, Up: Top - -Upgrading From Version 1 -************************ - - Autoconf version 2 is mostly backward compatible with version 1. -However, it introduces better ways to do some things, and doesn't -support some of the ugly things in version 1. So, depending on how -sophisticated your `configure.in' files are, you might have to do some -manual work in order to upgrade to version 2. This chapter points out -some problems to watch for when upgrading. Also, perhaps your -`configure' scripts could benefit from some of the new features in -version 2; the changes are summarized in the file `NEWS' in the -Autoconf distribution. - - First, make sure you have GNU `m4' version 1.1 or higher installed, -preferably 1.3 or higher. Versions before 1.1 have bugs that prevent -them from working with Autoconf version 2. Versions 1.3 and later are -much faster than earlier versions, because as of version 1.3, GNU `m4' -has a more efficient implementation of diversions and can freeze its -internal state in a file that it can read back quickly. - -* Menu: - -* 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. - - -File: autoconf.info, Node: Changed File Names, Next: Changed Makefiles, Up: Upgrading - -Changed File Names -================== - - If you have an `aclocal.m4' installed with Autoconf (as opposed to -in a particular package's source directory), you must rename it to -`acsite.m4'. *Note Invoking autoconf::. - - If you distribute `install.sh' with your package, rename it to -`install-sh' so `make' builtin rules won't inadvertantly create a file -called `install' from it. `AC_PROG_INSTALL' looks for the script under -both names, but it is best to use the new name. - - If you were using `config.h.top' or `config.h.bot', you still can, -but you will have less clutter if you merge them into `acconfig.h'. -*Note Invoking autoheader::. - - -File: autoconf.info, Node: Changed Makefiles, Next: Changed Macros, Prev: Changed File Names, Up: Upgrading - -Changed Makefiles -================= - - Add `@CFLAGS@', `@CPPFLAGS@', and `@LDFLAGS@' in your `Makefile.in' -files, so they can take advantage of the values of those variables in -the environment when `configure' is run. Doing this isn't necessary, -but it's a convenience for users. - - Also add `@configure_input@' in a comment to each input file for -`AC_OUTPUT', so that the output files will contain a comment saying -they were produced by `configure'. Automatically selecting the right -comment syntax for all the kinds of files that people call `AC_OUTPUT' -on became too much work. - - Add `config.log' and `config.cache' to the list of files you remove -in `distclean' targets. - - If you have the following in `Makefile.in': - - prefix = /usr/local - exec_prefix = ${prefix} - -you must change it to: - - prefix = @prefix@ - exec_prefix = @exec_prefix@ - -The old feature of replacing those variables without `@' characters -around them has been removed. - - -File: autoconf.info, Node: Changed Macros, Next: Invoking autoupdate, Prev: Changed Makefiles, Up: Upgrading - -Changed Macros -============== - - Many of the macros were renamed in Autoconf version 2. You can still -use the old names, but the new ones are clearer, and it's easier to find -the documentation for them. *Note Old Macro Names::, for a table -showing the new names for the old macros. Use the `autoupdate' program -to convert your `configure.in' to using the new macro names. *Note -Invoking autoupdate::. - - Some macros have been superseded by similar ones that do the job -better, but are not call-compatible. If you get warnings about calling -obsolete macros while running `autoconf', you may safely ignore them, -but your `configure' script will generally work better if you follow -the advice it prints about what to replace the obsolete macros with. In -particular, the mechanism for reporting the results of tests has -changed. If you were using `echo' or `AC_VERBOSE' (perhaps via -`AC_COMPILE_CHECK'), your `configure' script's output will look better -if you switch to `AC_MSG_CHECKING' and `AC_MSG_RESULT'. *Note Printing -Messages::. Those macros work best in conjunction with cache -variables. *Note Caching Results::. - - -File: autoconf.info, Node: Invoking autoupdate, Next: Changed Results, Prev: Changed Macros, Up: Upgrading - -Using `autoupdate' to Modernize `configure' -=========================================== - - The `autoupdate' program updates a `configure.in' file that calls -Autoconf macros by their old names to use the current macro names. In -version 2 of Autoconf, most of the macros were renamed to use a more -uniform and descriptive naming scheme. *Note Macro Names::, for a -description of the new scheme. Although the old names still work -(*note Old Macro Names::., for a list of the old macro names and the -corresponding new names), you can make your `configure.in' files more -readable and make it easier to use the current Autoconf documentation -if you update them to use the new macro names. - - If given no arguments, `autoupdate' updates `configure.in', backing -up the original version with the suffix `~' (or the value of the -environment variable `SIMPLE_BACKUP_SUFFIX', if that is set). If you -give `autoupdate' an argument, it reads that file instead of -`configure.in' and writes the updated file to the standard output. - -`autoupdate' 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. You can also set the `AC_MACRODIR' - environment variable to a directory; this option overrides the - environment variable. - -`--version' - Print the version number of `autoupdate' and exit. - - -File: autoconf.info, Node: Changed Results, Next: Changed Macro Writing, Prev: Invoking autoupdate, Up: Upgrading - -Changed Results -=============== - - If you were checking the results of previous tests by examining the -shell variable `DEFS', you need to switch to checking the values of the -cache variables for those tests. `DEFS' no longer exists while -`configure' is running; it is only created when generating output -files. This difference from version 1 is because properly quoting the -contents of that variable turned out to be too cumbersome and -inefficient to do every time `AC_DEFINE' is called. *Note Cache -Variable Names::. - - For example, here is a `configure.in' fragment written for Autoconf -version 1: - - AC_HAVE_FUNCS(syslog) - case "$DEFS" in - *-DHAVE_SYSLOG*) ;; - *) # syslog is not in the default libraries. See if it's in some other. - saved_LIBS="$LIBS" - for lib in bsd socket inet; do - AC_CHECKING(for syslog in -l$lib) - LIBS="$saved_LIBS -l$lib" - AC_HAVE_FUNCS(syslog) - case "$DEFS" in - *-DHAVE_SYSLOG*) break ;; - *) ;; - esac - LIBS="$saved_LIBS" - done ;; - esac - - Here is a way to write it for version 2: - - AC_CHECK_FUNCS(syslog) - if test $ac_cv_func_syslog = no; then - # syslog is not in the default libraries. See if it's in some other. - for lib in bsd socket inet; do - AC_CHECK_LIB($lib, syslog, [AC_DEFINE(HAVE_SYSLOG) - LIBS="$LIBS $lib"; break]) - done - fi - - If you were working around bugs in `AC_DEFINE_UNQUOTED' by adding -backslashes before quotes, you need to remove them. It now works -predictably, and does not treat quotes (except backquotes) specially. -*Note Setting Output Variables::. - - All of the boolean shell variables set by Autoconf macros now use -`yes' for the true value. Most of them use `no' for false, though for -backward compatibility some use the empty string instead. If you were -relying on a shell variable being set to something like 1 or `t' for -true, you need to change your tests. - - -File: autoconf.info, Node: Changed Macro Writing, Prev: Changed Results, Up: Upgrading - -Changed Macro Writing -===================== - - When defining your own macros, you should now use `AC_DEFUN' instead -of `define'. `AC_DEFUN' automatically calls `AC_PROVIDE' and ensures -that macros called via `AC_REQUIRE' do not interrupt other macros, to -prevent nested `checking...' messages on the screen. There's no actual -harm in continuing to use the older way, but it's less convenient and -attractive. *Note Macro Definitions::. - - You probably looked at the macros that came with Autoconf as a guide -for how to do things. It would be a good idea to take a look at the new -versions of them, as the style is somewhat improved and they take -advantage of some new features. - - If you were doing tricky things with undocumented Autoconf internals -(macros, variables, diversions), check whether you need to change -anything to account for changes that have been made. Perhaps you can -even use an officially supported technique in version 2 instead of -kludging. Or perhaps not. - - To speed up your locally written feature tests, add caching to them. -See whether any of your tests are of general enough usefulness to -encapsulate into macros that you can share. - - -File: autoconf.info, Node: History, Next: Old Macro Names, Prev: Upgrading, Up: Top - -History of Autoconf -******************* - - You may be wondering, Why was Autoconf originally written? How did -it get into its present form? (Why does it look like gorilla spit?) If -you're not wondering, then this chapter contains no information useful -to you, and you might as well skip it. If you *are* wondering, then -let there be light... - -* Menu: - -* 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: Genesis, Next: Exodus, Up: History - -Genesis -======= - - In June 1991 I was maintaining many of the GNU utilities for the Free -Software Foundation. As they were ported to more platforms and more -programs were added, the number of `-D' options that users had to -select in the `Makefile' (around 20) became burdensome. Especially for -me--I had to test each new release on a bunch of different systems. So -I wrote a little shell script to guess some of the correct settings for -the fileutils package, and released it as part of fileutils 2.0. That -`configure' script worked well enough that the next month I adapted it -(by hand) to create similar `configure' scripts for several other GNU -utilities packages. Brian Berliner also adapted one of my scripts for -his CVS revision control system. - - Later that summer, I learned that Richard Stallman and Richard Pixley -were developing similar scripts to use in the GNU compiler tools; so I -adapted my `configure' scripts to support their evolving interface: -using the file name `Makefile.in' as the templates; adding `+srcdir', -the first option (of many); and creating `config.status' files. - - -File: autoconf.info, Node: Exodus, Next: Leviticus, Prev: Genesis, Up: History - -Exodus -====== - - As I got feedback from users, I incorporated many improvements, using -Emacs to search and replace, cut and paste, similar changes in each of -the scripts. As I adapted more GNU utilities packages to use -`configure' scripts, updating them all by hand became impractical. -Rich Murphey, the maintainer of the GNU graphics utilities, sent me mail -saying that the `configure' scripts were great, and asking if I had a -tool for generating them that I could send him. No, I thought, but I -should! So I started to work out how to generate them. And the -journey from the slavery of hand-written `configure' scripts to the -abundance and ease of Autoconf began. - - Cygnus `configure', which was being developed at around that time, -is table driven; it is meant to deal mainly with a discrete number of -system types with a small number of mainly unguessable features (such as -details of the object file format). The automatic configuration system -that Brian Fox had developed for Bash takes a similar approach. For -general use, it seems to me a hopeless cause to try to maintain an -up-to-date database of which features each variant of each operating -system has. It's easier and more reliable to check for most features on -the fly--especially on hybrid systems that people have hacked on -locally or that have patches from vendors installed. - - I considered using an architecture similar to that of Cygnus -`configure', where there is a single `configure' script that reads -pieces of `configure.in' when run. But I didn't want to have to -distribute all of the feature tests with every package, so I settled on -having a different `configure' made from each `configure.in' by a -preprocessor. That approach also offered more control and flexibility. - - I looked briefly into using the Metaconfig package, by Larry Wall, -Harlan Stenn, and Raphael Manfredi, but I decided not to for several -reasons. The `Configure' scripts it produces are interactive, which I -find quite inconvenient; I didn't like the ways it checked for some -features (such as library functions); I didn't know that it was still -being maintained, and the `Configure' scripts I had seen didn't work on -many modern systems (such as System V R4 and NeXT); it wasn't very -flexible in what it could do in response to a feature's presence or -absence; I found it confusing to learn; and it was too big and complex -for my needs (I didn't realize then how much Autoconf would eventually -have to grow). - - I considered using Perl to generate my style of `configure' scripts, -but decided that `m4' was better suited to the job of simple textual -substitutions: it gets in the way less, because output is implicit. -Plus, everyone already has it. (Initially I didn't rely on the GNU -extensions to `m4'.) Also, some of my friends at the University of -Maryland had recently been putting `m4' front ends on several programs, -including `tvtwm', and I was interested in trying out a new language. - - -File: autoconf.info, Node: Leviticus, Next: Numbers, Prev: Exodus, Up: History - -Leviticus -========= - - Since my `configure' scripts determine the system's capabilities -automatically, with no interactive user intervention, I decided to call -the program that generates them Autoconfig. But with a version number -tacked on, that name would be too long for old UNIX file systems, so I -shortened it to Autoconf. - - In the fall of 1991 I called together a group of fellow questers -after the Holy Grail of portability (er, that is, alpha testers) to -give me feedback as I encapsulated pieces of my handwritten scripts in -`m4' macros and continued to add features and improve the techniques -used in the checks. Prominent among the testers were Franc,ois Pinard, -who came up with the idea of making an `autoconf' shell script to run -`m4' and check for unresolved macro calls; Richard Pixley, who -suggested running the compiler instead of searching the file system to -find include files and symbols, for more accurate results; Karl Berry, -who got Autoconf to configure TeX and added the macro index to the -documentation; and Ian Taylor, who added support for creating a C -header file as an alternative to putting `-D' options in a `Makefile', -so he could use Autoconf for his UUCP package. The alpha testers -cheerfully adjusted their files again and again as the names and -calling conventions of the Autoconf macros changed from release to -release. They all contributed many specific checks, great ideas, and -bug fixes. - - -File: autoconf.info, Node: Numbers, Next: Deuteronomy, Prev: Leviticus, Up: History - -Numbers -======= - - In July 1992, after months of alpha testing, I released Autoconf 1.0, -and converted many GNU packages to use it. I was surprised by how -positive the reaction to it was. More people started using it than I -could keep track of, including people working on software that wasn't -part of the GNU Project (such as TCL, FSP, and Kerberos V5). Autoconf -continued to improve rapidly, as many people using the `configure' -scripts reported problems they encountered. - - Autoconf turned out to be a good torture test for `m4' -implementations. UNIX `m4' started to dump core because of the length -of the macros that Autoconf defined, and several bugs showed up in GNU -`m4' as well. Eventually, we realized that we needed to use some -features that only GNU `m4' has. 4.3BSD `m4', in particular, has an -impoverished set of builtin macros; the System V version is better, but -still doesn't provide everything we need. - - More development occurred as people put Autoconf under more stresses -(and to uses I hadn't anticipated). Karl Berry added checks for X11. -david zuhn contributed C++ support. Franc,ois Pinard made it diagnose -invalid arguments. Jim Blandy bravely coerced it into configuring GNU -Emacs, laying the groundwork for several later improvements. Roland -McGrath got it to configure the GNU C Library, wrote the `autoheader' -script to automate the creation of C header file templates, and added a -`--verbose' option to `configure'. Noah Friedman added the -`--macrodir' option and `AC_MACRODIR' environment variable. (He also -coined the term "autoconfiscate" to mean "adapt a software package to -use Autoconf".) Roland and Noah improved the quoting protection in -`AC_DEFINE' and fixed many bugs, especially when I got sick of dealing -with portability problems from February through June, 1993. - - -File: autoconf.info, Node: Deuteronomy, Prev: Numbers, Up: History - -Deuteronomy -=========== - - A long wish list for major features had accumulated, and the effect -of several years of patching by various people had left some residual -cruft. In April 1994, while working for Cygnus Support, I began a major -revision of Autoconf. I added most of the features of the Cygnus -`configure' that Autoconf had lacked, largely by adapting the relevant -parts of Cygnus `configure' with the help of david zuhn and Ken -Raeburn. These features include support for using `config.sub', -`config.guess', `--host', and `--target'; making links to files; and -running `configure' scripts in subdirectories. Adding these features -enabled Ken to convert GNU `as', and Rob Savoye to convert DejaGNU, to -using Autoconf. - - I added more features in response to other peoples' requests. Many -people had asked for `configure' scripts to share the results of the -checks between runs, because (particularly when configuring a large -source tree, like Cygnus does) they were frustratingly slow. Mike -Haertel suggested adding site-specific initialization scripts. People -distributing software that had to unpack on MS-DOS asked for a way to -override the `.in' extension on the file names, which produced file -names like `config.h.in' containing two dots. Jim Avera did an -extensive examination of the problems with quoting in `AC_DEFINE' and -`AC_SUBST'; his insights led to significant improvements. Richard -Stallman asked that compiler output be sent to `config.log' instead of -`/dev/null', to help people debug the Emacs `configure' script. - - I made some other changes because of my dissatisfaction with the -quality of the program. I made the messages showing results of the -checks less ambiguous, always printing a result. I regularized the -names of the macros and cleaned up coding style inconsistencies. I -added some auxiliary utilities that I had developed to help convert -source code packages to use Autoconf. With the help of Franc,ois -Pinard, I made the macros not interrupt each others' messages. (That -feature revealed some performance bottlenecks in GNU `m4', which he -hastily corrected!) I reorganized the documentation around problems -people want to solve. And I began a testsuite, because experience had -shown that Autoconf has a pronounced tendency to regress when we change -it. - - Again, several alpha testers gave invaluable feedback, especially -Franc,ois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn, -and Mark Eichin. - - Finally, version 2.0 was ready. And there was much rejoicing. (And -I have free time again. I think. Yeah, right.) - |