This is automake.info, produced by makeinfo version 4.2 from
automake.texi.

INFO-DIR-SECTION GNU programming tools
START-INFO-DIR-ENTRY
* automake: (automake).		Making Makefile.in's
END-INFO-DIR-ENTRY

INFO-DIR-SECTION Individual utilities
START-INFO-DIR-ENTRY
* aclocal: (automake)Invoking aclocal.          Generating aclocal.m4
END-INFO-DIR-ENTRY

   This file documents GNU automake 1.7.1

   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 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: automake.info,  Node: Top,  Next: Introduction,  Prev: (dir),  Up: (dir)

GNU Automake
************

   This file documents the GNU Automake package.  Automake is a program
which creates GNU standards-compliant Makefiles from template files.
This edition documents version 1.7.1.

* Menu:

* Introduction::                Automake's purpose
* Generalities::                General ideas
* Examples::                    Some example packages
* Invoking Automake::           Creating a Makefile.in
* configure::                   Scanning configure.ac or configure.in
* Top level::                   The top-level Makefile.am
* Alternative::                 An alternative approach to subdirectories
* Rebuilding::                  Automatic rebuilding of Makefile
* Programs::                    Building programs and libraries
* Other objects::               Other derived objects
* Other GNU Tools::             Other GNU Tools
* Documentation::               Building documentation
* Install::                     What gets installed
* Clean::                       What gets cleaned
* Dist::                        What goes in a distribution
* Tests::                       Support for test suites
* Options::                     Changing Automake's behavior
* Miscellaneous::               Miscellaneous rules
* Include::                     Including extra files in an Automake template.
* Conditionals::                Conditionals
* Gnits::                       The effect of `--gnu' and `--gnits'
* Cygnus::                      The effect of `--cygnus'
* Extending::                   Extending Automake
* Distributing::                Distributing the Makefile.in
* API versioning::              About compatibility between Automake versions
* Macro and Variable Index::
* General Index::


File: automake.info,  Node: Introduction,  Next: Generalities,  Prev: Top,  Up: Top

Introduction
************

   Automake is a tool for automatically generating `Makefile.in's from
files called `Makefile.am'.  Each `Makefile.am' is basically a series
of `make' variable definitions(1), with rules being thrown in
occasionally.  The generated `Makefile.in's are compliant with the GNU
Makefile standards.

   The GNU Makefile Standards Document (*note Makefile Conventions:
(standards)Makefile Conventions.)  is long, complicated, and subject to
change.  The goal of Automake is to remove the burden of Makefile
maintenance from the back of the individual GNU maintainer (and put it
on the back of the Automake maintainer).

   The typical Automake input file is simply a series of variable
definitions.  Each such file is processed to create a `Makefile.in'.
There should generally be one `Makefile.am' per directory of a project.

   Automake does constrain a project in certain ways; for instance it
assumes that the project uses Autoconf (*note Introduction:
(autoconf)Top.), and enforces certain restrictions on the
`configure.in' contents(2).

   Automake requires `perl' in order to generate the `Makefile.in's.
However, the distributions created by Automake are fully GNU
standards-compliant, and do not require `perl' in order to be built.

   Mail suggestions and bug reports for Automake to
<bug-automake@gnu.org>.

   ---------- Footnotes ----------

   (1) These variables are also called "make macros" in Make
terminology, however in this manual we reserve the term "macro" for
Autoconf's macros.

   (2) Autoconf 2.50 promotes `configure.ac' over `configure.in'.  The
rest of this documentation will refer to `configure.in' as this use is
not yet spread, but Automake supports `configure.ac' too.


File: automake.info,  Node: Generalities,  Next: Examples,  Prev: Introduction,  Up: Top

General ideas
*************

   The following sections cover a few basic ideas that will help you
understand how Automake works.

* Menu:

* General Operation::           General operation of Automake
* Strictness::                  Standards conformance checking
* Uniform::                     The Uniform Naming Scheme
* Canonicalization::            How derived variables are named
* User Variables::              Variables reserved for the user
* Auxiliary Programs::          Programs automake might require


File: automake.info,  Node: General Operation,  Next: Strictness,  Prev: Generalities,  Up: Generalities

General Operation
=================

   Automake works by reading a `Makefile.am' and generating a
`Makefile.in'.  Certain variables and targets defined in the
`Makefile.am' instruct Automake to generate more specialized code; for
instance, a `bin_PROGRAMS' variable definition will cause targets for
compiling and linking programs to be generated.

   The variable definitions and targets in the `Makefile.am' are copied
verbatim into the generated file.  This allows you to add arbitrary code
into the generated `Makefile.in'.  For instance the Automake
distribution includes a non-standard `cvs-dist' target, which the
Automake maintainer uses to make distributions from his source control
system.

   Note that most GNU make extensions are not recognized by Automake.
Using such extensions in a `Makefile.am' will lead to errors or
confusing behavior.

   A special exception is that the GNU make append operator, `+=', is
supported.  This operator appends its right hand argument to the
variable specified on the left.  Automake will translate the operator
into an ordinary `=' operator; `+=' will thus work with any make
program.

   Automake tries to keep comments grouped with any adjoining targets or
variable definitions.

   A target defined in `Makefile.am' generally overrides any such
target of a similar name that would be automatically generated by
`automake'.  Although this is a supported feature, it is generally best
to avoid making use of it, as sometimes the generated rules are very
particular.

   Similarly, a variable defined in `Makefile.am' or `AC_SUBST''ed from
`configure.in' will override any definition of the variable that
`automake' would ordinarily create.  This feature is more often useful
than the ability to override a target definition.  Be warned that many
of the variables generated by `automake' are considered to be for
internal use only, and their names might change in future releases.

   When examining a variable definition, Automake will recursively
examine variables referenced in the definition.  For example, if
Automake is looking at the content of `foo_SOURCES' in this snippet

     xs = a.c b.c
     foo_SOURCES = c.c $(xs)

   it would use the files `a.c', `b.c', and `c.c' as the contents of
`foo_SOURCES'.

   Automake also allows a form of comment which is _not_ copied into
the output; all lines beginning with `##' (leading spaces allowed) are
completely ignored by Automake.

   It is customary to make the first line of `Makefile.am' read:

     ## Process this file with automake to produce Makefile.in


File: automake.info,  Node: Strictness,  Next: Uniform,  Prev: General Operation,  Up: Generalities

Strictness
==========

   While Automake is intended to be used by maintainers of GNU
packages, it does make some effort to accommodate those who wish to use
it, but do not want to use all the GNU conventions.

   To this end, Automake supports three levels of "strictness"--the
strictness indicating how stringently Automake should check standards
conformance.

   The valid strictness levels are:

`foreign'
     Automake will check for only those things which are absolutely
     required for proper operations.  For instance, whereas GNU
     standards dictate the existence of a `NEWS' file, it will not be
     required in this mode.  The name comes from the fact that Automake
     is intended to be used for GNU programs; these relaxed rules are
     not the standard mode of operation.

`gnu'
     Automake will check--as much as possible--for compliance to the GNU
     standards for packages.  This is the default.

`gnits'
     Automake will check for compliance to the as-yet-unwritten "Gnits
     standards".  These are based on the GNU standards, but are even
     more detailed.  Unless you are a Gnits standards contributor, it is
     recommended that you avoid this option until such time as the Gnits
     standard is actually published (which may never happen).

   For more information on the precise implications of the strictness
level, see *Note Gnits::.

   Automake also has a special "cygnus" mode which is similar to
strictness but handled differently.  This mode is useful for packages
which are put into a "Cygnus" style tree (e.g., the GCC tree).  For
more information on this mode, see *Note Cygnus::.


File: automake.info,  Node: Uniform,  Next: Canonicalization,  Prev: Strictness,  Up: Generalities

The Uniform Naming Scheme
=========================

   Automake variables generally follow a "uniform naming scheme" that
makes it easy to decide how programs (and other derived objects) are
built, and how they are installed.  This scheme also supports
`configure' time determination of what should be built.

   At `make' time, certain variables are used to determine which
objects are to be built.  The variable names are made of several pieces
which are concatenated together.

   The piece which tells automake what is being built is commonly called
the "primary".  For instance, the primary `PROGRAMS' holds a list of
programs which are to be compiled and linked.

   A different set of names is used to decide where the built objects
should be installed.  These names are prefixes to the primary which
indicate which standard directory should be used as the installation
directory.  The standard directory names are given in the GNU standards
(*note Directory Variables: (standards)Directory Variables.).  Automake
extends this list with `pkglibdir', `pkgincludedir', and `pkgdatadir';
these are the same as the non-`pkg' versions, but with `@PACKAGE@'
appended.  For instance, `pkglibdir' is defined as
`$(libdir)/@PACKAGE@'.

   For each primary, there is one additional variable named by
prepending `EXTRA_' to the primary name.  This variable is used to list
objects which may or may not be built, depending on what `configure'
decides.  This variable is required because Automake must statically
know the entire list of objects that may be built in order to generate
a `Makefile.in' that will work in all cases.

   For instance, `cpio' decides at configure time which programs are
built.  Some of the programs are installed in `bindir', and some are
installed in `sbindir':

     EXTRA_PROGRAMS = mt rmt
     bin_PROGRAMS = cpio pax
     sbin_PROGRAMS = @MORE_PROGRAMS@

   Defining a primary without a prefix as a variable, e.g., `PROGRAMS',
is an error.

   Note that the common `dir' suffix is left off when constructing the
variable names; thus one writes `bin_PROGRAMS' and not
`bindir_PROGRAMS'.

   Not every sort of object can be installed in every directory.
Automake will flag those attempts it finds in error.  Automake will
also diagnose obvious misspellings in directory names.

   Sometimes the standard directories--even as augmented by Automake--
are not enough.  In particular it is sometimes useful, for clarity, to
install objects in a subdirectory of some predefined directory.  To this
end, Automake allows you to extend the list of possible installation
directories.  A given prefix (e.g. `zar') is valid if a variable of the
same name with `dir' appended is defined (e.g. `zardir').

   For instance, until HTML support is part of Automake, you could use
this to install raw HTML documentation:

     htmldir = $(prefix)/html
     html_DATA = automake.html

   The special prefix `noinst' indicates that the objects in question
should be built but not installed at all.  This is usually used for
objects required to build the rest of your package, for instance static
libraries (*note A Library::), or helper scripts.

   The special prefix `check' indicates that the objects in question
should not be built until the `make check' command is run.  Those
objects are not installed either.

   The current primary names are `PROGRAMS', `LIBRARIES', `LISP',
`PYTHON', `JAVA', `SCRIPTS', `DATA', `HEADERS', `MANS', and `TEXINFOS'.

   Some primaries also allow additional prefixes which control other
aspects of `automake''s behavior.  The currently defined prefixes are
`dist_', `nodist_', and `nobase_'.  These prefixes are explained later
(*note Program and Library Variables::).


File: automake.info,  Node: Canonicalization,  Next: User Variables,  Prev: Uniform,  Up: Generalities

How derived variables are named
===============================

   Sometimes a Makefile variable name is derived from some text the
maintainer supplies.  For instance, a program name listed in
`_PROGRAMS' is rewritten into the name of a `_SOURCES' variable.  In
cases like this, Automake canonicalizes the text, so that program names
and the like do not have to follow Makefile variable naming rules.  All
characters in the name except for letters, numbers, the strudel (@),
and the underscore are turned into underscores when making variable
references.

   For example, if your program is named `sniff-glue', the derived
variable name would be `sniff_glue_SOURCES', not `sniff-glue_SOURCES'.
Similarly the sources for a library named `libmumble++.a' should be
listed in the `libmumble___a_SOURCES' variable.

   The strudel is an addition, to make the use of Autoconf
substitutions in variable names less obfuscating.


File: automake.info,  Node: User Variables,  Next: Auxiliary Programs,  Prev: Canonicalization,  Up: Generalities

Variables reserved for the user
===============================

   Some `Makefile' variables are reserved by the GNU Coding Standards
for the use of the "user" - the person building the package.  For
instance, `CFLAGS' is one such variable.

   Sometimes package developers are tempted to set user variables such
as `CFLAGS' because it appears to make their job easier - they don't
have to introduce a second variable into every target.

   However, the package itself should never set a user variable,
particularly not to include switches which are required for proper
compilation of the package.  Since these variables are documented as
being for the package builder, that person rightfully expects to be able
to override any of these variables at build time.

   To get around this problem, automake introduces an automake-specific
shadow variable for each user flag variable.  (Shadow variables are not
introduced for variables like `CC', where they would make no sense.)
The shadow variable is named by prepending `AM_' to the user variable's
name.  For instance, the shadow variable for `YFLAGS' is `AM_YFLAGS'.


File: automake.info,  Node: Auxiliary Programs,  Prev: User Variables,  Up: Generalities

Programs automake might require
===============================

   Automake sometimes requires helper programs so that the generated
`Makefile' can do its work properly.  There are a fairly large number
of them, and we list them here.

`ansi2knr.c'
`ansi2knr.1'
     These two files are used by the automatic de-ANSI-fication support
     (*note ANSI::).

`compile'
     This is a wrapper for compilers which don't accept both `-c' and
     `-o' at the same time.  It is only used when absolutely required.
     Such compilers are rare.

`config.guess'
`config.sub'
     These programs compute the canonical triplets for the given build,
     host, or target architecture.  These programs are updated regulary
     to support new architectures and fix probes broken by changes in
     new kernel versions.  You are encouraged to fetch the latest
     versions of these files from <ftp://ftp.gnu.org/gnu/config/>
     before making a release.

`depcomp'
     This program understands how to run a compiler so that it will
     generate not only the desired output but also dependency
     information which is then used by the automatic dependency
     tracking feature.

`elisp-comp'
     This program is used to byte-compile Emacs Lisp code.

`install-sh'
     This is a replacement for the `install' program which works on
     platforms where `install' is unavailable or unusable.

`mdate-sh'
     This script is used to generate a `version.texi' file.  It examines
     a file and prints some date information about it.

`missing'
     This wraps a number of programs which are typically only required
     by maintainers.  If the program in question doesn't exist,
     `missing' prints an informative warning and attempts to fix things
     so that the build can continue.

`mkinstalldirs'
     This works around the fact that `mkdir -p' is not portable.

`py-compile'
     This is used to byte-compile Python scripts.

`texinfo.tex'
     Not a program, this file is required for `make dvi', `make ps' and
     `make pdf' to work when Texinfo sources are in the package.

`ylwrap'
     This program wraps `lex' and `yacc' and ensures that, for
     instance, multiple `yacc' instances can be invoked in a single
     directory in parallel.


File: automake.info,  Node: Examples,  Next: Invoking Automake,  Prev: Generalities,  Up: Top

Some example packages
*********************

* Menu:

* Complete::                    A simple example, start to finish
* Hello::                       A classic program
* true::                        Building true and false


File: automake.info,  Node: Complete,  Next: Hello,  Prev: Examples,  Up: Examples

A simple example, start to finish
=================================

   Let's suppose you just finished writing `zardoz', a program to make
your head float from vortex to vortex.  You've been using Autoconf to
provide a portability framework, but your `Makefile.in's have been
ad-hoc.  You want to make them bulletproof, so you turn to Automake.

   The first step is to update your `configure.in' to include the
commands that `automake' needs.  The way to do this is to add an
`AM_INIT_AUTOMAKE' call just after `AC_INIT':

     AC_INIT(zardoz, 1.0)
     AM_INIT_AUTOMAKE
     ...

   Since your program doesn't have any complicating factors (e.g., it
doesn't use `gettext', it doesn't want to build a shared library),
you're done with this part.  That was easy!

   Now you must regenerate `configure'.  But to do that, you'll need to
tell `autoconf' how to find the new macro you've used.  The easiest way
to do this is to use the `aclocal' program to generate your
`aclocal.m4' for you.  But wait... maybe you already have an
`aclocal.m4', because you had to write some hairy macros for your
program.  The `aclocal' program lets you put your own macros into
`acinclude.m4', so simply rename and then run:

     mv aclocal.m4 acinclude.m4
     aclocal
     autoconf

   Now it is time to write your `Makefile.am' for `zardoz'.  Since
`zardoz' is a user program, you want to install it where the rest of
the user programs go: `bindir'.  Additionally, `zardoz' has some
Texinfo documentation.  Your `configure.in' script uses
`AC_REPLACE_FUNCS', so you need to link against `@LIBOBJS@'.  So here's
what you'd write:

     bin_PROGRAMS = zardoz
     zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c
     zardoz_LDADD = @LIBOBJS@
     
     info_TEXINFOS = zardoz.texi

   Now you can run `automake --add-missing' to generate your
`Makefile.in' and grab any auxiliary files you might need, and you're
done!


File: automake.info,  Node: Hello,  Next: true,  Prev: Complete,  Up: Examples

A classic program
=================

   GNU hello (ftp://prep.ai.mit.edu/pub/gnu/hello-1.3.tar.gz) is
renowned for its classic simplicity and versatility.  This section shows
how Automake could be used with the GNU Hello package.  The examples
below are from the latest beta version of GNU Hello, but with all of the
maintainer-only code stripped out, as well as all copyright comments.

   Of course, GNU Hello is somewhat more featureful than your
traditional two-liner.  GNU Hello is internationalized, does option
processing, and has a manual and a test suite.

   Here is the `configure.in' from GNU Hello:

     dnl Process this file with autoconf to produce a configure script.
     AC_INIT(src/hello.c)
     AM_INIT_AUTOMAKE(hello, 1.3.11)
     AM_CONFIG_HEADER(config.h)
     
     dnl Set of available languages.
     ALL_LINGUAS="de fr es ko nl no pl pt sl sv"
     
     dnl Checks for programs.
     AC_PROG_CC
     AC_ISC_POSIX
     
     dnl Checks for libraries.
     
     dnl Checks for header files.
     AC_STDC_HEADERS
     AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h)
     
     dnl Checks for library functions.
     AC_FUNC_ALLOCA
     
     dnl Check for st_blksize in struct stat
     AC_ST_BLKSIZE
     
     dnl internationalization macros
     AM_GNU_GETTEXT
     AC_OUTPUT([Makefile doc/Makefile intl/Makefile po/Makefile.in \
                src/Makefile tests/Makefile tests/hello],
        [chmod +x tests/hello])

   The `AM_' macros are provided by Automake (or the Gettext library);
the rest are standard Autoconf macros.

   The top-level `Makefile.am':

     EXTRA_DIST = BUGS ChangeLog.O
     SUBDIRS = doc intl po src tests

   As you can see, all the work here is really done in subdirectories.

   The `po' and `intl' directories are automatically generated using
`gettextize'; they will not be discussed here.

   In `doc/Makefile.am' we see:

     info_TEXINFOS = hello.texi
     hello_TEXINFOS = gpl.texi

   This is sufficient to build, install, and distribute the GNU Hello
manual.

   Here is `tests/Makefile.am':

     TESTS = hello
     EXTRA_DIST = hello.in testdata

   The script `hello' is generated by `configure', and is the only test
case.  `make check' will run this test.

   Last we have `src/Makefile.am', where all the real work is done:

     bin_PROGRAMS = hello
     hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h
     hello_LDADD = @INTLLIBS@ @ALLOCA@
     localedir = $(datadir)/locale
     INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"


File: automake.info,  Node: true,  Prev: Hello,  Up: Examples

Building true and false
=======================

   Here is another, trickier example.  It shows how to generate two
programs (`true' and `false') from the same source file (`true.c').
The difficult part is that each compilation of `true.c' requires
different `cpp' flags.

     bin_PROGRAMS = true false
     false_SOURCES =
     false_LDADD = false.o
     
     true.o: true.c
             $(COMPILE) -DEXIT_CODE=0 -c true.c
     
     false.o: true.c
             $(COMPILE) -DEXIT_CODE=1 -o false.o -c true.c

   Note that there is no `true_SOURCES' definition.  Automake will
implicitly assume that there is a source file named `true.c', and
define rules to compile `true.o' and link `true'.  The `true.o: true.c'
rule supplied by the above `Makefile.am', will override the Automake
generated rule to build `true.o'.

   `false_SOURCES' is defined to be empty--that way no implicit value
is substituted.  Because we have not listed the source of `false', we
have to tell Automake how to link the program.  This is the purpose of
the `false_LDADD' line.  A `false_DEPENDENCIES' variable, holding the
dependencies of the `false' target will be automatically generated by
Automake from the contant of `false_LDADD'.

   The above rules won't work if your compiler doesn't accept both `-c'
and `-o'.  The simplest fix for this is to introduce a bogus dependency
(to avoid problems with a parallel `make'):

     true.o: true.c false.o
             $(COMPILE) -DEXIT_CODE=0 -c true.c
     
     false.o: true.c
             $(COMPILE) -DEXIT_CODE=1 -c true.c && mv true.o false.o

   Also, these explicit rules do not work if the de-ANSI-fication
feature is used (*note ANSI::).  Supporting de-ANSI-fication requires a
little more work:

     true._o: true._c false.o
             $(COMPILE) -DEXIT_CODE=0 -c true.c
     
     false._o: true._c
             $(COMPILE) -DEXIT_CODE=1 -c true.c && mv true._o false.o

   As it turns out, there is also a much easier way to do this same
task.  Some of the above techniques are useful enough that we've kept
the example in the manual.  However if you were to build `true' and
`false' in real life, you would probably use per-program compilation
flags, like so:

     bin_PROGRAMS = false true
     
     false_SOURCES = true.c
     false_CPPFLAGS = -DEXIT_CODE=1
     
     true_SOURCES = true.c
     true_CPPFLAGS = -DEXIT_CODE=0

   In this case Automake will cause `true.c' to be compiled twice, with
different flags.  De-ANSI-fication will work automatically.  In this
instance, the names of the object files would be chosen by automake;
they would be `false-true.o' and `true-true.o'.  (The name of the
object files rarely matters.)


File: automake.info,  Node: Invoking Automake,  Next: configure,  Prev: Examples,  Up: Top

Creating a `Makefile.in'
************************

   To create all the `Makefile.in's for a package, run the `automake'
program in the top level directory, with no arguments.  `automake' will
automatically find each appropriate `Makefile.am' (by scanning
`configure.in'; *note configure::) and generate the corresponding
`Makefile.in'.  Note that `automake' has a rather simplistic view of
what constitutes a package; it assumes that a package has only one
`configure.in', at the top.  If your package has multiple
`configure.in's, then you must run `automake' in each directory holding
a `configure.in'.  (Alteratively, you may rely on Autoconf's
`autoreconf', which is able to recurse your package tree and run
`automake' where appropriate.)

   You can optionally give `automake' an argument; `.am' is appended to
the argument and the result is used as the name of the input file.
This feature is generally only used to automatically rebuild an
out-of-date `Makefile.in'.  Note that `automake' must always be run
from the topmost directory of a project, even if being used to
regenerate the `Makefile.in' in some subdirectory.  This is necessary
because `automake' must scan `configure.in', and because `automake'
uses the knowledge that a `Makefile.in' is in a subdirectory to change
its behavior in some cases.

   Automake will run `autoconf' to scan `configure.in' and its
dependencies (`aclocal.m4'), therefore `autoconf' must be in your
`PATH'.  If there is an `AUTOCONF' variable in your environment it will
be used instead of `autoconf', this allows you to select a particular
version of Autoconf.  By the way, don't misunderstand this paragraph:
Automake runs `autoconf' to *scan* your `configure.in', this won't build
`configure' and you still have to run `autoconf' yourself for this
purpose.

   `automake' accepts the following options:

`-a'
`--add-missing'
     Automake requires certain common files to exist in certain
     situations; for instance `config.guess' is required if
     `configure.in' runs `AC_CANONICAL_HOST'.  Automake is distributed
     with several of these files (*note Auxiliary Programs::); this
     option will cause the missing ones to be automatically added to
     the package, whenever possible.  In general if Automake tells you
     a file is missing, try using this option.  By default Automake
     tries to make a symbolic link pointing to its own copy of the
     missing file; this can be changed with `--copy'.

`--libdir=DIR'
     Look for Automake data files in directory DIR instead of in the
     installation directory.  This is typically used for debugging.

`-c'
`--copy'
     When used with `--add-missing', causes installed files to be
     copied.  The default is to make a symbolic link.

`--cygnus'
     Causes the generated `Makefile.in's to follow Cygnus rules, instead
     of GNU or Gnits rules.  For more information, see *Note Cygnus::.

`-f'
`--force-missing'
     When used with `--add-missing', causes standard files to be
     reinstalled even if they already exist in the source tree.  This
     involves removing the file from the source tree before creating
     the new symlink (or, with `--copy', copying the new file).

`--foreign'
     Set the global strictness to `foreign'.  For more information, see
     *Note Strictness::.

`--gnits'
     Set the global strictness to `gnits'.  For more information, see
     *Note Gnits::.

`--gnu'
     Set the global strictness to `gnu'.  For more information, see
     *Note Gnits::.  This is the default strictness.

`--help'
     Print a summary of the command line options and exit.

`-i'
`--ignore-deps'
     This disables the dependency tracking feature in generated
     `Makefile's; see *Note Dependencies::.

`--include-deps'
     This enables the dependency tracking feature.  This feature is
     enabled by default.  This option is provided for historical
     reasons only and probably should not be used.

`--no-force'
     Ordinarily `automake' creates all `Makefile.in's mentioned in
     `configure.in'.  This option causes it to only update those
     `Makefile.in's which are out of date with respect to one of their
     dependents.

`-o DIR'
`--output-dir=DIR'
     Put the generated `Makefile.in' in the directory DIR.  Ordinarily
     each `Makefile.in' is created in the directory of the
     corresponding `Makefile.am'.  This option is deprecated and will be
     removed in a future release.

`-v'
`--verbose'
     Cause Automake to print information about which files are being
     read or created.

`--version'
     Print the version number of Automake and exit.

`-W CATEGORY'

`--warnings=CATEGORY'
     Output warnings falling in CATEGORY.  CATEGORY can be one of:
    `gnu'
          warnings related to the GNU Coding Standards (*note Top:
          (standards)Top.).

    `obsolete'
          obsolete features or constructions

    `portability'
          portability issues (e.g., use of Make features which are
          known not portable)

    `syntax'
          weird syntax, unused variables, typos

    `unsupported'
          unsupported or incomplete features

    `all'
          all the warnings

    `none'
          turn off all the warnings

    `error'
          treat warnings as errors

     A category can be turned off by prefixing its name with `no-'.  For
     instance `-Wno-syntax' will hide the warnings about unused
     variables.

     The categories output by default are `syntax' and `unsupported'.
     Additionally, `gnu' is enabled in `--gnu' and `--gnits' strictness.

     `portability' warnings are currently disabled by default, but they
     will be enabled in `--gnu' and `--gnits' strictness in a future
     release.

     The environment variable `WARNINGS' can contain a comma separated
     list of categories to enable.  It will be taken into account
     before the command-line switches, this way `-Wnone' will also
     ignore any warning category enabled by `WARNINGS'.  This variable
     is also used by other tools like `autoconf'; unknown categories
     are ignored for this reason.


File: automake.info,  Node: configure,  Next: Top level,  Prev: Invoking Automake,  Up: Top

Scanning `configure.in'
***********************

   Automake scans the package's `configure.in' to determine certain
information about the package.  Some `autoconf' macros are required and
some variables must be defined in `configure.in'.  Automake will also
use information from `configure.in' to further tailor its output.

   Automake also supplies some Autoconf macros to make the maintenance
easier.  These macros can automatically be put into your `aclocal.m4'
using the `aclocal' program.

* Menu:

* Requirements::                Configuration requirements
* Optional::                    Other things Automake recognizes
* Invoking aclocal::            Auto-generating aclocal.m4
* aclocal options::             aclocal command line arguments
* Macro search path::           Modifying aclocal's search path
* Macros::                      Autoconf macros supplied with Automake
* Extending aclocal::           Writing your own aclocal macros


File: automake.info,  Node: Requirements,  Next: Optional,  Prev: configure,  Up: configure

Configuration requirements
==========================

   The one real requirement of Automake is that your `configure.in'
call `AM_INIT_AUTOMAKE'.  This macro does several things which are
required for proper Automake operation (*note Macros::).

   Here are the other macros which Automake requires but which are not
run by `AM_INIT_AUTOMAKE':

`AC_CONFIG_FILES'
`AC_OUTPUT'
     Automake uses these to determine which files to create (*note
     Creating Output Files: (autoconf)Output.).  A listed file is
     considered to be an Automake generated `Makefile' if there exists
     a file with the same name and the `.am' extension appended.
     Typically, `AC_CONFIG_FILES([foo/Makefile])' will cause Automake to
     generate `foo/Makefile.in' if `foo/Makefile.am' exists.

     Other listed files are treated differently.  Currently the only
     difference is that an Automake `Makefile' is removed by `make
     distclean', while other files are removed by `make clean'.


File: automake.info,  Node: Optional,  Next: Invoking aclocal,  Prev: Requirements,  Up: configure

Other things Automake recognizes
================================

   Every time Automake is run it calls Autoconf to trace
`configure.in'.  This way it can recognize the use of certain macros
and tailor the generated `Makefile.in' appropriately.  Currently
recognized macros and their effects are:

`AC_CONFIG_HEADERS'
     Automake will generate rules to rebuild these headers.  Older
     versions of Automake required the use of `AM_CONFIG_HEADER' (*note
     Macros::); this is no longer the case today.

`AC_CONFIG_AUX_DIR'
     Automake will look for various helper scripts, such as
     `mkinstalldirs', in the directory named in this macro invocation.
     If not seen, the scripts are looked for in their `standard'
     locations (either the top source directory, or in the source
     directory corresponding to the current `Makefile.am', whichever is
     appropriate).  *Note Finding `configure' Input: (autoconf)Input.
     FIXME: give complete list of things looked for in this directory

`AC_CANONICAL_HOST'
     Automake will ensure that `config.guess' and `config.sub' exist.
     Also, the `Makefile' variables `host_alias' and `host_triplet' are
     introduced.  See *Note Getting the Canonical System Type:
     (autoconf)Canonicalizing.

`AC_CANONICAL_SYSTEM'
     This is similar to `AC_CANONICAL_HOST', but also defines the
     `Makefile' variables `build_alias' and `target_alias'.  *Note
     Getting the Canonical System Type: (autoconf)Canonicalizing.

`AC_LIBSOURCE'
`AC_LIBSOURCES'
`AC_LIBOBJ'
     Automake will automatically distribute any file listed in
     `AC_LIBSOURCE' or `AC_LIBSOURCES'.

     Note that the `AC_LIBOBJ' macro calls `AC_LIBSOURCE'.  So if an
     Autoconf macro is documented to call `AC_LIBOBJ([file])', then
     `file.c' will be distributed automatically by Automake.  This
     encompasses many macros like `AC_FUNC_ALLOCA', `AC_FUNC_MEMCMP',
     `AC_REPLACE_FUNCS', and others.

     By the way, direct assignments to `LIBOBJS' are no longer
     supported.  You should always use `AC_LIBOBJ' for this purpose.
     *Note `AC_LIBOBJ' vs. `LIBOBJS': (autoconf)AC_LIBOBJ vs LIBOBJS.

`AC_PROG_RANLIB'
     This is required if any libraries are built in the package.  *Note
     Particular Program Checks: (autoconf)Particular Programs.

`AC_PROG_CXX'
     This is required if any C++ source is included.  *Note Particular
     Program Checks: (autoconf)Particular Programs.

`AC_PROG_F77'
     This is required if any Fortran 77 source is included.  This macro
     is distributed with Autoconf version 2.13 and later.  *Note
     Particular Program Checks: (autoconf)Particular Programs.

`AC_F77_LIBRARY_LDFLAGS'
     This is required for programs and shared libraries that are a
     mixture of languages that include Fortran 77 (*note Mixing Fortran
     77 With C and C++::).  *Note Autoconf macros supplied with
     Automake: Macros.

`AC_PROG_LIBTOOL'
     Automake will turn on processing for `libtool' (*note
     Introduction: (libtool)Top.).

`AC_PROG_YACC'
     If a Yacc source file is seen, then you must either use this macro
     or define the variable `YACC' in `configure.in'.  The former is
     preferred (*note Particular Program Checks: (autoconf)Particular
     Programs.).

`AC_PROG_LEX'
     If a Lex source file is seen, then this macro must be used.  *Note
     Particular Program Checks: (autoconf)Particular Programs.

`AC_SUBST'
     The first argument is automatically defined as a variable in each
     generated `Makefile.in'.  *Note Setting Output Variables:
     (autoconf)Setting Output Variables.

     If the Autoconf manual says that a macro calls `AC_SUBST' for VAR,
     or defined the output variable VAR then VAR will be defined in
     each generated `Makefile.in'.  E.g. `AC_PATH_XTRA' defines
     `X_CFLAGS' and `X_LIBS', so you can use the variable in any
     `Makefile.am' if `AC_PATH_XTRA' is called.

`AM_C_PROTOTYPES'
     This is required when using automatic de-ANSI-fication; see *Note
     ANSI::.

`AM_GNU_GETTEXT'
     This macro is required for packages which use GNU gettext (*note
     gettext::).  It is distributed with gettext.  If Automake sees
     this macro it ensures that the package meets some of gettext's
     requirements.

`AM_MAINTAINER_MODE'
     This macro adds a `--enable-maintainer-mode' option to
     `configure'.  If this is used, `automake' will cause
     `maintainer-only' rules to be turned off by default in the
     generated `Makefile.in's. This macro defines the `MAINTAINER_MODE'
     conditional, which you can use in your own `Makefile.am'.


File: automake.info,  Node: Invoking aclocal,  Next: aclocal options,  Prev: Optional,  Up: configure

Auto-generating aclocal.m4
==========================

   Automake includes a number of Autoconf macros which can be used in
your package; some of them are actually required by Automake in certain
situations.  These macros must be defined in your `aclocal.m4';
otherwise they will not be seen by `autoconf'.

   The `aclocal' program will automatically generate `aclocal.m4' files
based on the contents of `configure.in'.  This provides a convenient
way to get Automake-provided macros, without having to search around.
Also, the `aclocal' mechanism allows other packages to supply their own
macros.

   At startup, `aclocal' scans all the `.m4' files it can find, looking
for macro definitions (*note Macro search path::).  Then it scans
`configure.in'.  Any mention of one of the macros found in the first
step causes that macro, and any macros it in turn requires, to be put
into `aclocal.m4'.

   The contents of `acinclude.m4', if it exists, are also automatically
included in `aclocal.m4'.  This is useful for incorporating local
macros into `configure'.

   `aclocal' tries to be smart about looking for new `AC_DEFUN's in the
files it scans.  It also tries to copy the full text of the scanned
file into `aclocal.m4', including both `#' and `dnl' comments.  If you
want to make a comment which will be completely ignored by `aclocal',
use `##' as the comment leader.

* Menu:

* aclocal options::             Options supported by aclocal
* Macro search path::           How aclocal finds .m4 files


File: automake.info,  Node: aclocal options,  Next: Macro search path,  Prev: Invoking aclocal,  Up: configure

aclocal options
===============

   `aclocal' accepts the following options:

`--acdir=DIR'
     Look for the macro files in DIR instead of the installation
     directory.  This is typically used for debugging.

`--help'
     Print a summary of the command line options and exit.

`-I DIR'
     Add the directory DIR to the list of directories searched for
     `.m4' files.

`--output=FILE'
     Cause the output to be put into FILE instead of `aclocal.m4'.

`--print-ac-dir'
     Prints the name of the directory which `aclocal' will search to
     find third-party `.m4' files.  When this option is given, normal
     processing is suppressed.  This option can be used by a package to
     determine where to install a macro file.

`--verbose'
     Print the names of the files it examines.

`--version'
     Print the version number of Automake and exit.


File: automake.info,  Node: Macro search path,  Next: Macros,  Prev: aclocal options,  Up: configure

Macro search path
=================

   By default, `aclocal' searches for `.m4' files in the following
directories, in this order:

`ACDIR-APIVERSION'
     This is where the `.m4' macros distributed with automake itself
     are stored.  APIVERSION depends on the automake release used; for
     automake 1.6.x, APIVERSION = `1.6'.

`ACDIR'
     This directory is intended for third party `.m4' files, and is
     configured when `automake' itself is built.  This is
     `@datadir@/aclocal/', which typically expands to
     `${prefix}/share/aclocal/'.  To find the compiled-in value of
     ACDIR, use the `--print-ac-dir' option (*note aclocal options::).

   As an example, suppose that automake-1.6.2 was configured with
`--prefix=/usr/local'.  Then, the search path would be:

  1. `/usr/local/share/aclocal-1.6/'

  2. `/usr/local/share/aclocal/'

   As explained in (*note aclocal options::), there are several options
that can be used to change or extend this search path.

Modifying the macro search path: `--acdir'
------------------------------------------

   The most obvious option to modify the search path is `--acdir=DIR',
which changes default directory and drops the APIVERSION directory.
For example, if one specifies `--acdir=/opt/private/', then the search
path becomes:

  1. `/opt/private/'

   Note that this option, `--acdir', is intended for use by the
internal automake test suite only; it is not ordinarily needed by
end-users.

Modifying the macro search path: `-I DIR'
-----------------------------------------

   Any extra directories specified using `-I' options (*note aclocal
options::) are _prepended_ to this search list.  Thus, `aclocal -I /foo
-I /bar' results in the following search path:

  1. `/foo'

  2. `/bar'

  3. ACDIR-APIVERSION

  4. ACDIR

Modifying the macro search path: `dirlist'
------------------------------------------

   There is a third mechanism for customizing the search path.  If a
`dirlist' file exists in ACDIR, then that file is assumed to contain a
list of directories, one per line, to be added to the search list.
These directories are searched _after_ all other directories.

   For example, suppose `ACDIR/dirlist' contains the following:

     /test1
     /test2

and that `aclocal' was called with the `-I /foo -I /bar' options.
Then, the search path would be

  1. `/foo'

  2. `/bar'

  3. ACDIR-APIVERSION

  4. ACDIR

  5. `/test1'

  6. `/test2'

   If the `--acdir=DIR' option is used, then `aclocal' will search for
the `dirlist' file in DIR.  In the `--acdir=/opt/private/' example
above, `aclocal' would look for `/opt/private/dirlist'.  Again,
however, the `--acdir' option is intended for use by the internal
automake test suite only; `--acdir' is not ordinarily needed by
end-users.

   `dirlist' is useful in the following situation: suppose that
`automake' version `1.6.2' is installed with $prefix=/usr by the system
vendor. Thus, the default search directories are

  1. `/usr/share/aclocal-1.6/'

  2. `/usr/share/aclocal/'

   However, suppose further that many packages have been manually
installed on the system, with $prefix=/usr/local, as is typical.  In
that case, many of these "extra" `.m4' files are in
`/usr/local/share/aclocal'.  The only way to force `/usr/bin/aclocal'
to find these "extra" `.m4' files is to always call `aclocal -I
/usr/local/share/aclocal'.  This is inconvenient.  With `dirlist', one
may create the file

   `/usr/share/aclocal/dirlist'

which contains only the single line

   `/usr/local/share/aclocal'

   Now, the "default" search path on the affected system is

  1. `/usr/share/aclocal-1.6/'

  2. `/usr/share/aclocal/'

  3. `/usr/local/share/aclocal/'

   without the need for `-I' options; `-I' options can be reserved for
project-specific needs (`my-source-dir/m4/'), rather than using it to
work around local system-dependent tool installation directories.

   Similarly, `dirlist' can be handy if you have installed a local copy
Automake on your account and want `aclocal' to look for macros
installed at other places on the system.


File: automake.info,  Node: Macros,  Next: Extending aclocal,  Prev: Macro search path,  Up: configure

Autoconf macros supplied with Automake
======================================

   Automake ships with several Autoconf macros that you can use from
your `configure.in'.  When you use one of them it will be included by
`aclocal' in `aclocal.m4'.

* Menu:

* Public macros::               Macros that you can use.
* Private macros::              Macros that you should not use.

