* Tests:: Support for test suites
* Options:: Changing Automake's behavior
* Miscellaneous:: Miscellaneous rules
-* Conditionals:: Conditionals
+* Conditionals:: Conditionals
* Gnits:: The effect of @code{--gnu} and @code{--gnits}
* Cygnus:: The effect of @code{--cygnus}
* Extending:: Extending Automake
* Distributing:: Distributing the Makefile.in
* Future:: Some ideas for the future
* Index:: General index
+
+ --- The Detailed Node Listing ---
+
+General ideas
+
+* General Operation:: General operation of Automake
+* Depth:: The kinds of packages
+* Strictness:: Standards conformance checking
+* Uniform:: The Uniform Naming Scheme
+* Canonicalization:: How derived variables are named
+
+Some example packages
+
+* Complete:: A simple example, start to finish
+* Hello:: A classic program
+* etags:: Building etags and ctags
+
+Scanning @file{configure.in}
+
+* Requirements:: Configuration requirements
+* Optional:: Other things Automake recognizes
+* Invoking aclocal:: Auto-generating aclocal.m4
+* Macros:: Autoconf macros supplied with Automake
+* Extending aclocal:: Writing your own aclocal macros
+
+Building Programs and Libraries
+
+* A Program:: Building a program
+* A Library:: Building a library
+* LIBOBJS:: Special handling for LIBOBJS and ALLOCA
+* A Shared Library:: Building a Libtool library
+* Program variables:: Variables used when building a program
+* Yacc and Lex:: Yacc and Lex support
+* C++::
+* ANSI:: Automatic de-ANSI-fication
+* Dependencies:: Automatic dependency tracking
+
+Other Derived Objects
+
+* Scripts:: Executable scripts
+* Headers:: Header files
+* Data:: Architecture-independent data files
+* Sources:: Derived sources
+
+Other GNU Tools
+
+* Emacs Lisp:: Emacs Lisp
+* gettext:: Gettext
+* Guile:: Guile
+* Libtool:: Libtool
+
+Building documentation
+
+* Texinfo:: Texinfo
+* Man pages:: Man pages
+
+Miscellaneous Rules
+
+* Tags:: Interfacing to etags and mkid
+* Suffixes:: Handling new file extensions
@end menu
@end ifinfo
-@node Introduction
+@node Introduction, Generalities, Top, Top
@chapter Introduction
Automake is a tool for automatically generating @file{Makefile.in}s from
@email{automake-bugs@@gnu.ai.mit.edu}.
-@node Generalities
+@node Generalities, Examples, Introduction, Top
@chapter General ideas
There are a few basic ideas that will help understand how Automake
* Canonicalization:: How derived variables are named
@end menu
-@node General Operation
+@node General Operation, Depth, Generalities, Generalities
@section General Operation
Automake works by reading a @file{Makefile.am} and generating a
-@node Depth
+@node Depth, Strictness, General Operation, Generalities
@section Depth
@code{automake} supports three kinds of directory hierarchy: ``flat'',
``shallow'', and ``deep''.
@code{make}, which does not currently use @code{automake}).
-@node Strictness
+@node Strictness, Uniform, Depth, Generalities
@section 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
level, see @xref{Gnits}.
-@node Uniform
+@node Uniform, Canonicalization, Strictness, Generalities
@section 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,
@vindex TEXINFOS
-@node Canonicalization
+@node Canonicalization, , Uniform, Generalities
@section How derived variables are named
Sometimes a Makefile variable name is derived from some text the user
@code{sniff_glue_SOURCES}, not @code{sniff-glue_SOURCES}.
-@node Examples
+@node Examples, Invoking Automake, Generalities, Top
@chapter Some example packages
@menu
* etags:: Building etags and ctags
@end menu
-@node Complete
+@node Complete, Hello, Examples, Examples
@section A simple example, start to finish
Let's suppose you just finished writing @code{zardoz}, a program to make
you're done!
-@node Hello
+@node Hello, etags, Complete, Examples
@section A classic program
@code{hello} is renowned for its classic simplicity and versatility.
@end example
-@node etags
+@node etags, , Hello, Examples
@section Building etags and ctags
Here is another, trickier example. It shows how to generate two
@end example
-@node Invoking Automake
+@node Invoking Automake, configure, Examples, Top
@chapter Creating a @file{Makefile.in}
To create all the @file{Makefile.in}s for a package, run the
@end table
-@node configure
+@node configure, Top level, Invoking Automake, Top
@chapter Scanning @file{configure.in}
Automake scans the package's @file{configure.in} to determine certain
@end menu
-@node Requirements
+@node Requirements, Optional, configure, configure
@section Configuration requirements
The simplest way to meet the basic Automake requirements is to use the
-macro @code{AM_INIT_AUTOMAKE} (FIXME: xref). But if you prefer, you can
-do the required steps by hand:
+macro @code{AM_INIT_AUTOMAKE} (@pxref{Macros}). But if you prefer, you
+can do the required steps by hand:
@cvindex AM_INIT_AUTOMAKE
@itemize @bullet
number is defined; this makes releases simpler.
Automake doesn't do any interpretation of @code{PACKAGE} or
-@code{VERSION}, except in @samp{Gnits} mode (FIXME xref).
+@code{VERSION}, except in @samp{Gnits} mode (@pxref{Gnits}).
@item
Use the macro @code{AC_ARG_PROGRAM} if a program or script is installed.
@cvindex AC_OUTPUT
@end table
-@node Optional
+@node Optional, Invoking aclocal, Requirements, configure
@section Other things Automake recognizes
Automake will also recognize the use of certain macros and tailor the
This macro adds a @samp{--enable-maintainer-mode} option to
@code{configure}. If this is used, @code{automake} will cause
``maintainer-only'' rules to be turned off by default in the generated
-@file{Makefile.in}s. This macro is disallowed in @samp{Gnits} mode.
-FIXME xref.
+@file{Makefile.in}s. This macro is disallowed in @samp{Gnits} mode
+(@pxref{Gnits}).
@cvindex AM_MAINTAINER_MODE
@item AC_SUBST
@end table
-@node Invoking aclocal
+@node Invoking aclocal, Macros, Optional, configure
@section Auto-generating aclocal.m4
Automake includes a number of Autoconf macros which can be used in your
@end table
-@node Macros
+@node Macros, Extending aclocal, Invoking aclocal, configure
@section Autoconf macros supplied with Automake
@c consider generating this node automatically from m4 files.
@end table
-@node Extending aclocal
+@node Extending aclocal, , Macros, configure
@section Writing your own aclocal macros
Aclocal doesn't have any built-in knowledge of any macros, so it is easy
A macro file's name should end in @samp{.m4}. Such files should be
installed in @file{$(datadir)/aclocal}.
-@node Top level
+@node Top level, Programs, configure, Top
@chapter The top-level @file{Makefile.am}
In non-flat packages, the top level @file{Makefile.am} must tell
arbitrary depth.
-@node Programs
+@node Programs, Other objects, Top level, Top
@chapter Building Programs and Libraries
A large part of Automake's functionality is dedicated to making it easy
* A Shared Library:: Building a Libtool library
* Program variables:: Variables used when building a program
* Yacc and Lex:: Yacc and Lex support
-* C++:: C++ and other languages
+* C++::
* ANSI:: Automatic de-ANSI-fication
* Dependencies:: Automatic dependency tracking
@end menu
-@node A Program
+@node A Program, A Library, Programs, Programs
@section Building a program
In a directory containing source that gets built into a program (as
@samp{prog_DEPENDENCIES} to be generated.
-@node A Library
+@node A Library, LIBOBJS, A Program, Programs
@section Building a library
Building a library is much like building a program. In this case, the
libcpio_a_LIBADD = @@LIBOBJS@@ @@ALLOCA@@
@end example
-@node LIBOBJS
+@node LIBOBJS, A Shared Library, A Library, Programs
@section Special handling for LIBOBJS and ALLOCA
Automake explicitly recognizes the use of @code{@@LIBOBJS@@} and
@code{@@LIBOBJS@@} and @code{@@ALLOCA@@} are specially recognized in any
@samp{_LDADD} or @samp{_LIBADD} variable.
-@node A Shared Library
+@node A Shared Library, Program variables, LIBOBJS, Programs
@section Building a Shared Library
Building shared libraries is a relatively complex matter. For this
@xref{Using Automake, Using Automake with Libtool, The Libtool Manual,
libtool, The Libtool Manual}, for more information.
-@node Program variables
+@node Program variables, Yacc and Lex, A Shared Library, Programs
@section Variables used when building a program
Occasionally it is useful to know which @file{Makefile} variables
@end table
-@node Yacc and Lex
+@node Yacc and Lex, C++, Program variables, Programs
@section Yacc and Lex support
Automake has somewhat idiosyncratic support for Yacc and Lex.
covered here, please report the new name so it can be added to the list.
-@node C++
+@node C++, ANSI, Yacc and Lex, Programs
@section C++ and other languages
Automake includes full support for C++, and rudimentary support for
@end table
-@node ANSI
+@node ANSI, Dependencies, C++, Programs
@section Automatic de-ANSI-fication
Although the GNU standards allow the use of ANSI C, this can have the
If no directory prefix is given, the files are assumed to be in the
current directory.
-@node Dependencies
+@node Dependencies, , ANSI, Programs
@section Automatic dependency tracking
As a developer it is often painful to continually update the
automatically recreated during the next build.
-@node Other objects
+@node Other objects, Other GNU Tools, Programs, Top
@chapter Other Derived Objects
Automake can handle derived objects which are not C programs. Sometimes
@end menu
-@node Scripts
+@node Scripts, Headers, Other objects, Other objects
@section Executable Scripts
It is possible to define and install programs which are scripts. Such
@code{libexecdir}, or @code{pkgdatadir}.
-@node Headers
+@node Headers, Data, Scripts, Other objects
@section Header files
Header files are specified by the @samp{HEADERS} family of variables.
@code{pkgincludedir}.
-@node Data
+@node Data, Sources, Headers, Other objects
@section Architecture-independent data files
Automake supports the installation of miscellaneous data files using the
@end example
-@node Sources
+@node Sources, , Data, Other objects
@section Built sources
Occasionally a file which would otherwise be called ``source'' (eg a C
what might seem like funny times.
-@node Other GNU Tools
+@node Other GNU Tools, Documentation, Other objects, Top
@chapter Other GNU Tools
Since Automake is primarily intended to generate @file{Makefile.in}s for
* Libtool:: Libtool
@end menu
-@node Emacs Lisp
+@node Emacs Lisp, gettext, Other GNU Tools, Other GNU Tools
@section Emacs Lisp
Automake provides some support for Emacs Lisp. The @samp{LISP} primary
is used to hold a list of @samp{.el} files. Possible prefixes for this
primary are @samp{lisp_} and @samp{noinst_}. Note that if
@code{lisp_LISP} is defined, then @file{configure.in} must run
-@code{AM_PATH_LISPDIR} (fixme xref).
+@code{AM_PATH_LISPDIR} (@pxref{Macros}).
@vindex LISP
@vindex lisp_LISP
@vindex noinst_LISP
strange setups to cope for themselves than to make the installation less
nice for everybody else.
-@node gettext
+@node gettext, Guile, Emacs Lisp, Other GNU Tools
@section Gettext
If @code{AM_GNU_GETTEXT} is seen in @file{configure.in}, then Automake
and nothing more.
-@node Guile
+@node Guile, Libtool, gettext, Other GNU Tools
@section Guile
Automake provides some automatic support for writing Guile modules.
As the Guile module code matures, no doubt the Automake support will
grow as well.
-@node Libtool
+@node Libtool, , Guile, Other GNU Tools
@section Libtool
Automake provides support for GNU Libtool (@pxref{Top, , The Libtool
Manual, libtool, The Libtool Manual}) with the @samp{LTLIBRARIES}
primary. @xref{A Shared Library}.
-@node Documentation
+@node Documentation, Install, Other GNU Tools, Top
@chapter Building documentation
Currently Automake provides support for Texinfo and man pages.
@end menu
-@node Texinfo
+@node Texinfo, Man pages, Documentation, Documentation
@section Texinfo
If the current directory contains Texinfo source, you must declare it
This can be prevented via the @code{no-installinfo} option.
-@node Man pages
+@node Man pages, , Texinfo, Documentation
@section Man pages
A package can also include man pages. (Though see the GNU standards on
uncommon for man pages to be automatically generated.
-@node Install
+@node Install, Clean, Documentation, Top
@chapter What Gets Installed
Naturally, Automake handles the details of actually installing your
@samp{install-data}.
-@node Clean
+@node Clean, Dist, Install, Top
@chapter What Gets Cleaned
The GNU Makefile Standards specify a number of different clean rules.
@vindex MAINTAINERCLEANFILES
-@node Dist
+@node Dist, Tests, Clean, Top
@chapter What Goes in a Distribution
The @code{dist} target in the generated @file{Makefile.in} can be used
@trindex distcheck
@c FIXME: document distcheck-hook here
-@node Tests
+@node Tests, Options, Dist, Top
@chapter Support for test suites
Automake supports a two forms of test suite.
In either case, the testing is done via @samp{make check}.
-@node Options
+@node Options, Miscellaneous, Tests, Top
@chapter Changing Automake's Behavior
Various features of Automake can be controlled by options in the
Unrecognized options are diagnosed by @code{automake}.
-@node Miscellaneous
+@node Miscellaneous, Conditionals, Options, Top
@chapter Miscellaneous Rules
There are a few rules and variables that didn't fit anywhere else.
@end menu
-@node Tags
+@node Tags, Suffixes, Miscellaneous, Miscellaneous
@section Interfacing to @code{etags}
@code{automake} will generate rules to generate @file{TAGS} files for
@trindex id
-@node Suffixes
+@node Suffixes, , Tags, Miscellaneous
@section Handling new file extensions
It is sometimes useful to introduce a new implicit rule to handle a file
SUFFIXES = .java .class
@end example
-@node Conditionals
+@node Conditionals, Gnits, Miscellaneous, Top
@chapter Conditionals
Automake supports a simple type of conditionals.
Automake conditionals will work with any make program.
-@node Gnits
+@node Gnits, Cygnus, Conditionals, Top
@chapter The effect of @code{--gnu} and @code{--gnits}
The @samp{--gnu} option (or @samp{gnu} in the @samp{AUTOMAKE_OPTIONS}
@end itemize
-@node Cygnus
+@node Cygnus, Extending, Gnits, Top
@chapter The effect of @code{--cygnus}
Cygnus Solutions has slightly different rules for how a
to the special Cygnus mode.
-@node Extending
+@node Extending, Distributing, Cygnus, Top
@chapter When Automake Isn't Enough
Automake's implicit copying semantics means that many problems can be
@c rules
-@node Distributing
+@node Distributing, Future, Extending, Top
@chapter Distributing @file{Makefile.in}s
Automake places no restrictions on the distribution of the resulting
to see.
-@node Future
+@node Future, Index, Distributing, Top
@chapter Some ideas for the future
Here are some things that might happen in the future:
eventually happen.
@end itemize
-@node Index
+@node Index, , Future, Top
@unnumbered Index
@printindex cp