nothing
[automake.git] / automake.texi
blob57eaf1195c8b455068823d2e39597e1eb722b1bd
1 \input texinfo   @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename automake.info
4 @settitle automake
5 @setchapternewpage off
6 @c %**end of header
8 @include version.texi
10 @dircategory GNU admin
11 @direntry
12 * automake: (automake).         Making Makefile.in's
13 @end direntry
15 @dircategory Individual utilities
16 @direntry
17 * aclocal: (automake)Invoking aclocal           Generating aclocal.m4
18 @end direntry
20 @ifinfo
21 This file documents GNU automake @value{VERSION}
23 Copyright (C) 1995, 96, 97 Free Software Foundation, Inc.
25 Permission is granted to make and distribute verbatim copies of
26 this manual provided the copyright notice and this permission notice
27 are preserved on all copies.
29 @ignore
30 Permission is granted to process this file through TeX and print the
31 results, provided the printed document carries copying permission
32 notice identical to this one except for the removal of this paragraph
35 @end ignore
36 Permission is granted to copy and distribute modified versions of this
37 manual under the conditions for verbatim copying, provided that the entire
38 resulting derived work is distributed under the terms of a permission
39 notice identical to this one.
41 Permission is granted to copy and distribute translations of this manual
42 into another language, under the above conditions for modified versions,
43 except that this permission notice may be stated in a translation approved
44 by the Foundation.
45 @end ifinfo
48 @titlepage
49 @title GNU Automake
50 @subtitle For version @value{VERSION}, @value{UPDATED}
51 @author David MacKenzie and Tom Tromey
53 @page
54 @vskip 0pt plus 1filll
55 Copyright @copyright{} 1995, 96 Free Software Foundation, Inc.
56 @sp 2
57 This is the first edition of the GNU Automake documentation,@*
58 and is consistent with GNU Automake @value{VERSION}.@*
59 @sp 2
60 Published by the Free Software Foundation @*
61 59 Temple Place - Suite 330, @*
62 Boston, MA 02111-1307 USA @*
64 Permission is granted to make and distribute verbatim copies of
65 this manual provided the copyright notice and this permission notice
66 are preserved on all copies.
68 Permission is granted to copy and distribute modified versions of this
69 manual under the conditions for verbatim copying, provided that the entire
70 resulting derived work is distributed under the terms of a permission
71 notice identical to this one.
73 Permission is granted to copy and distribute translations of this manual
74 into another language, under the above conditions for modified versions,
75 except that this permission notice may be stated in a translation
76 approved by the Free Software Foundation.
77 @end titlepage
79 @c Define an index of configure variables.
80 @defcodeindex cv
81 @c Define an index of options.
82 @defcodeindex op
83 @c Define an index of targets.
84 @defcodeindex tr
86 @c Put everything in one index (arbitrarily chosen to be the concept index).
87 @syncodeindex cv cp
88 @syncodeindex op cp
89 @syncodeindex tr cp
90 @syncodeindex vr cp
92 @ifinfo
93 @node Top, Introduction, (dir), (dir)
94 @comment  node-name,  next,  previous,  up
95 @top GNU Automake
97 This file documents the GNU Automake package for creating GNU
98 Standards-compliant Makefiles from template files.  This edition
99 documents version @value{VERSION}.
101 @menu
102 * Introduction::                Automake's purpose
103 * Generalities::                General ideas
104 * Examples::                    Some example packages
105 * Invoking Automake::           Creating a Makefile.in
106 * configure::                   Scanning configure.in
107 * Top level::                   The top-level Makefile.am
108 * Programs::                    Building programs and libraries
109 * Other objects::               Other derived objects
110 * Other GNU Tools::             Other GNU Tools
111 * Documentation::               Building documentation
112 * Install::                     What gets installed
113 * Clean::                       What gets cleaned
114 * Dist::                        What goes in a distribution
115 * Tests::                       Support for test suites
116 * Options::                     Changing Automake's behavior
117 * Miscellaneous::               Miscellaneous rules
118 * Conditionals::                Conditionals
119 * Gnits::                       The effect of @code{--gnu} and @code{--gnits}
120 * Cygnus::                      The effect of @code{--cygnus}
121 * Extending::                   Extending Automake
122 * Distributing::                Distributing the Makefile.in
123 * Future::                      Some ideas for the future
124 * Index::                       General index
125 @end menu
127 @end ifinfo
129 @node Introduction
130 @chapter Introduction
132 Automake is a tool for automatically generating @file{Makefile.in}s from
133 files called @file{Makefile.am}.  Each @file{Makefile.am} is basically a
134 series of @code{make} macro definitions (with rules being thrown in
135 occasionally).  The generated @file{Makefile.in}s are compliant with the
136 GNU Makefile standards.
138 The GNU Makefile Standards Document
139 (@pxref{Makefile Conventions, , , standards, The GNU Coding Standards})
140 is long, complicated, and subject to change.  The goal of Automake is to
141 remove the burden of Makefile maintenance from the back of the
142 individual GNU maintainer (and put it on the back of the Automake
143 maintainer).
145 The typical Automake input files is simply a series of macro
146 definitions.  Each such file is processed to create a
147 @file{Makefile.in}.  There should generally be one @file{Makefile.am}
148 per directory of a project.
150 Automake does constrain a project in certain ways; for instance it
151 assumes that the project uses Autoconf
152 (@pxref{Top, , The Autoconf Manual, autoconf, The Autoconf Manual}),
153 and enforces certain restrictions on the @file{configure.in} contents.
155 Automake requires @code{perl} in order to generate the
156 @file{Makefile.in}s.  However, the distributions created by Automake are
157 fully GNU standards-compliant, and do not require @code{perl} in order
158 to be built.
160 Mail suggestions and bug reports for Automake to
161 @email{automake-bugs@@gnu.ai.mit.edu}.
164 @node Generalities
165 @chapter General ideas
167 There are a few basic ideas that will help understand how Automake
168 works.
170 @menu
171 * General Operation::           General operation of Automake
172 * Depth::                       The kinds of packages
173 * Strictness::                  Standards conformance checking
174 * Uniform::                     The Uniform Naming Scheme
175 * Canonicalization::            How derived variables are named
176 @end menu
178 @node General Operation
179 @section General Operation
181 Automake works by reading a @file{Makefile.am} and generating a
182 @file{Makefile.in}.  Certain macros and targets defined in the
183 @file{Makefile.am} instruct automake to generate more specialized code;
184 for instances a @samp{bin_PROGRAMS} macro definition will cause targets
185 for compiling and linking to be generated.
187 The macro definitions and targets in the @file{Makefile.am} are copied
188 into the generated file.  This allows you to add arbitrary code into the
189 generated @file{Makefile.in}.  For instance the Automake distribution
190 includes a non-standard @code{cvs-dist} target, which the Automake
191 maintainer uses to make distributions from his source control system.
193 Note that GNU make extensions are not recognized by Automake.  Using
194 such extensions in a @file{Makefile.am} will lead to errors or confusing
195 behavior.
197 Automake tries to group comments with adjoining targets (or variable
198 definitions) in an intelligent way.
200 A target defined in @file{Makefile.am} generally overrides any such
201 target of a similar name that would be automatically generated by
202 @code{automake}.  Although this is a supported feature, it is generally
203 best to avoid making use of it, as sometimes the generated rules are
204 very particular.
206 Similarly, a variable defined in @file{Makefile.am} will override any
207 definition of the variable that @code{automake} would ordinarily create.
208 This feature is more often useful than the ability to override a target
209 definition.  Be warned that many of the variables generated by
210 @code{automake} are considered to be for internal use only, and their
211 names might change in future releases.
213 When examining a variable definition, Automake will recursively examine
214 variables referenced in the definition.  E.g., if Automake is looking at
215 the content of @samp{foo_SOURCES} in this snippet
217 @example
218 xs = a.c b.c
219 foo_SOURCES = c.c $(xs)
220 @end example
222 it would use the files @file{a.c}, @file{b.c}, and @file{c.c} as the
223 contents of @samp{foo_SOURCES}.
225 Automake also allows a form of comment which is @emph{not} copied into
226 the output; all lines beginning with @samp{##} are completely ignored by
227 Automake.
229 It is customary to make the first line of @file{Makefile.am} read:
231 @example
232 ## Process this file with automake to produce Makefile.in
233 @end example
235 @c FIXME discuss putting a copyright into Makefile.am here?  I would but
236 @c I don't know quite what to say.
238 @c FIXME document customary ordering of Makefile.am here!
242 @node Depth
243 @section Depth
244 @code{automake} supports three kinds of directory hierarchy: ``flat'',
245 ``shallow'', and ``deep''.
247 A @dfn{flat} package is one in which all the files are in a single
248 directory.  The @file{Makefile.am} for such a package by definition
249 lacks a @code{SUBDIRS} macro.  An example of such a package is
250 @code{termutils}.
251 @vindex SUBDIRS
253 A @dfn{deep} package is one in which all the source lies in
254 subdirectories; the top level directory contains mainly configuration
255 information.  GNU cpio is a good example of such a package, as is GNU
256 @code{tar}.  The top level @file{Makefile.am} for a deep package will
257 contain a @code{SUBDIRS} macro, but no other macros to define objects
258 which are built.
260 A @dfn{shallow} package is one in which the primary source resides in
261 the top-level directory, while various parts (typically libraries)
262 reside in subdirectories.  Automake is one such package (as is GNU
263 @code{make}, which does not currently use @code{automake}).
266 @node Strictness
267 @section Strictness
268 While Automake is intended to be used by maintainers of GNU packages, it
269 does make some effort to accommodate those who wish to use it, but do
270 not want to use all the GNU conventions.
272 To this end, Automake supports three levels of @dfn{strictness}---the
273 strictness indicating how stringently Automake should check standards
274 conformance.
276 The valid strictness levels are:
278 @table @samp
279 @item foreign
280 Automake will check for only those things which are absolutely
281 required for proper operations.  For instance, whereas GNU standards
282 dictate the existence of a @file{NEWS} file, it will not be required in
283 this mode.  The name comes from the fact that Automake is intended to be
284 used for GNU programs; these relaxed rules are not the standard mode of
285 operation.
287 @item gnu
288 Automake will check---as much as possible---for compliance to the GNU
289 standards for packages.  This is the default.
291 @item gnits
292 Automake will check for compliance to the as-yet-unwritten Gnits
293 standards.  These are based on the GNU standards, but are even more
294 detailed.  Unless you are a Gnits standards contributor, it is
295 recommended that you avoid this option until such time as the Gnits
296 standard is actually published.
297 @end table
299 For more information on the precise implications of the strictness
300 level, see @xref{Gnits}.
303 @node Uniform
304 @section The Uniform Naming Scheme
305 Automake variables generally follow a uniform naming scheme that makes
306 it easy to decide how programs (and other derived objects) are built,
307 and how they are installed.  This scheme also supports @code{configure}
308 time determination of what should be built.
310 At @code{make} time, certain variables are used to determine which
311 objects are to be built.  These variables are called @dfn{primary}
312 variables.  For instance, the primary variable @code{PROGRAMS} holds a
313 list of programs which are to be compiled and linked.
314 @vindex PROGRAMS
316 A different set of variables is used to decide where the built objects
317 should be installed.  These variables are named after the primary
318 variables, but have a prefix indicating which standard directory should
319 be used as the installation directory.  The standard directory names are
320 given in the GNU standards
321 (@pxref{Directory Variables, , , standards, The GNU Coding
322 Standards}).
323 Automake extends this list with @code{pkglibdir}, @code{pkgincludedir},
324 and @code{pkgdatadir}; these are the same as the non-@samp{pkg}
325 versions, but with @samp{@@PACKAGE@@} appended.  For instance,
326 @code{pkglibdir} is defined as @code{$(datadir)/@@PACKAGE@@}.
327 @cvindex PACKAGE
329 For each primary, there is one additional variable named by prepending
330 @samp{EXTRA_} to the primary name.  This variable is used to list
331 objects which may or may not be built, depending on what
332 @code{configure} decides.  This variable is required because Automake
333 must statically know the entire list of objects to be built in order to
334 generate a @file{Makefile.in} that will work in all cases.
336 For instance, @code{cpio} decides at configure time which programs are
337 built.  Some of the programs are installed in @code{bindir}, and some
338 are installed in @code{sbindir}:
340 @example
341 EXTRA_PROGRAMS = mt rmt
342 bin_PROGRAMS = cpio pax
343 sbin_PROGRAMS = @@PROGRAMS@@
344 @end example
346 Defining a primary variable without a prefix (eg @code{PROGRAMS}) is an
347 error.
349 Note that the common @samp{dir} suffix is left off when constructing the
350 variable names; thus one writes @samp{bin_PROGRAMS} and not
351 @samp{bindir_PROGRAMS}.
353 Not every sort of object can be installed in every directory.  Automake
354 will flag those attempts it finds in error.  Automake will also diagnose
355 obvious misspellings in directory names.
357 Sometimes the standard directories---even as augmented by Automake---
358 are not enough.  In particular it is sometimes useful, for clarity, to
359 install objects in a subdirectory of some predefined directory.  To this
360 end, Automake allows you to extend the list of possible installation
361 directories.  A given prefix (eg @samp{zar}) is valid if a variable of
362 the same name with @samp{dir} appended is defined (eg @samp{zardir}).
364 For instance, until HTML support is part of Automake, you could use this
365 to install raw HTML documentation:
367 @example
368 htmldir = $(prefix)/html
369 html_DATA = automake.html
370 @end example
372 The special prefix @samp{noinst} indicates that the objects in question
373 should not be installed at all.
375 The special prefix @samp{check} indicates that the objects in question
376 should not be built until the @code{make check} command is run.
378 Possible primary names are @samp{PROGRAMS}, @samp{LIBRARIES},
379 @samp{LISP}, @samp{SCRIPTS}, @samp{DATA}, @samp{HEADERS}, @samp{MANS},
380 and @samp{TEXINFOS}.
381 @vindex PROGRAMS
382 @vindex LIBRARIES
383 @vindex LISP
384 @vindex SCRIPTS
385 @vindex DATA
386 @vindex HEADERS
387 @vindex MANS
388 @vindex TEXINFOS
391 @node Canonicalization
392 @section How derived variables are named
394 Sometimes a Makefile variable name is derived from some text the user
395 supplies.  For instance program names are rewritten into Makefile macro
396 names.  Automake canonicalizes this text, so that it does not have to
397 follow Makefile variable naming rules.  All characters in the name
398 except for letters, numbers, and the underscore are turned into
399 underscores when making macro references.  E.g., if your program is named
400 @code{sniff-glue}, the derived variable name would be
401 @code{sniff_glue_SOURCES}, not @code{sniff-glue_SOURCES}.
404 @node Examples
405 @chapter Some example packages
407 @menu
408 * Complete::                    A simple example, start to finish
409 * Hello::                       A classic program
410 * etags::                       Building etags and ctags
411 @end menu
413 @node Complete
414 @section A simple example, start to finish
416 Let's suppose you just finished writing @code{zardoz}, a program to make
417 your head float from vortex to vortex.  You've been using
418 @code{autoconf} to provide a portability framework, but your
419 @file{Makefile.in}s have been ad-hoc.  You want to make them
420 bulletproof, so you turn to @code{automake}.
422 The first step is to update your @file{configure.in} to include the
423 commands that @code{automake} needs.  The simplest way to do this is to
424 add an @code{AM_INIT_AUTOMAKE} call near the beginning:
426 @example
427 AM_INIT_AUTOMAKE(zardoz, 1.0)
428 @end example
430 Since your program doesn't have any complicating factors (e.g., it
431 doesn't use @code{gettext}, it doesn't want to build a shared library),
432 you're done with this part.  That was easy!
434 Now you must regenerate @file{configure}.  But to do that, you'll need
435 to tell @code{autoconf} how to find the new macro you've used.  The
436 easiest way to do this is to use the @code{aclocal} program to generate
437 your @file{aclocal.m4} for you.  But wait... you already have an
438 @file{aclocal.m4}, because you had to write some hairy macros for your
439 program.  @code{aclocal} lets you put your own macros into
440 @file{acinclude.m4}, so simply rename and then run:
442 @example
443 mv aclocal.m4 acinclude.m4
444 aclocal
445 autoconf
446 @end example
448 Now it is time to write your @file{Makefile.am} for @code{zardoz}.
449 @code{zardoz} is a user program, so you want to install it where the
450 rest of the user programs go.  @code{zardoz} also has some Texinfo
451 documentation.  Your @file{configure.in} script uses
452 @code{AC_REPLACE_FUNCS}, so you need to link against @samp{@@LIBOBJS@@}.
453 So here's what you'd write:
455 @example
456 bin_PROGRAMS = zardoz
457 zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c
458 zardoz_LDADD = @@LIBOBJS@@
460 info_TEXINFOS = zardoz.texi
461 @end example
463 Now you can run @code{automake --add-missing} to generate your
464 @file{Makefile.in} and grab any auxiliary files you might need, and
465 you're done!
468 @node Hello
469 @section A classic program
471 @code{hello} is renowned for its classic simplicity and versatility.
472 This section shows how Automake could be used with the Hello package.
473 The examples below are from the latest GNU Hello, but all the
474 maintainer-only code has been stripped out, as well as all copyright
475 comments.
477 Of course, GNU Hello is somewhat more featureful than your traditional
478 two-liner.  GNU Hello is internationalized, does option processing, and
479 has a manual and a test suite.  GNU Hello is a deep package.
481 Here is the @file{configure.in} from GNU Hello:
483 @example
484 dnl Process this file with autoconf to produce a configure script.
485 AC_INIT(src/hello.c)
486 AM_INIT_AUTOMAKE(hello, 1.3.11)
487 AM_CONFIG_HEADER(config.h)
489 dnl Set of available languages.
490 ALL_LINGUAS="de fr es ko nl no pl pt sl sv"
492 dnl Checks for programs.
493 AC_PROG_CC
494 AC_ISC_POSIX
496 dnl Checks for libraries.
498 dnl Checks for header files.
499 AC_STDC_HEADERS
500 AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h)
502 dnl Checks for library functions.
503 AC_FUNC_ALLOCA
505 dnl Check for st_blksize in struct stat
506 AC_ST_BLKSIZE
508 dnl internationalization macros
509 AM_GNU_GETTEXT
510 AC_OUTPUT([Makefile doc/Makefile intl/Makefile po/Makefile.in \
511            src/Makefile tests/Makefile tests/hello],
512    [chmod +x tests/hello])
513 @end example
515 The @samp{AM_} macros are provided by Automake (or the Gettext library);
516 the rest are standard Autoconf macros.
519 The top-level @file{Makefile.am}:
521 @example
522 EXTRA_DIST = BUGS ChangeLog.O
523 SUBDIRS = doc intl po src tests
524 @end example
526 As you can see, all the work here is really done in subdirectories.
528 The @file{po} and @file{intl} directories are automatically generated
529 using @code{gettextize}; they will not be discussed here.
531 In @file{doc/Makefile.am} we see:
533 @example
534 info_TEXINFOS = hello.texi
535 hello_TEXINFOS = gpl.texi
536 @end example
538 This is sufficient to build, install, and distribute the Hello manual.
541 Here is @file{tests/Makefile.am}:
543 @example
544 TESTS = hello
545 EXTRA_DIST = hello.in testdata
546 @end example
548 The script @file{hello} is generated by @code{configure}, and is the
549 only test case.  @code{make check} will run this test.
551 Last we have @file{src/Makefile.am}, where all the real work is done:
553 @example
554 bin_PROGRAMS = hello
555 hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h 
556 hello_LDADD = @@INTLLIBS@@ @@ALLOCA@@
557 localedir = $(datadir)/locale
558 INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"
559 @end example
562 @node etags
563 @section Building etags and ctags
565 Here is another, trickier example.  It shows how to generate two
566 programs (@code{ctags} and @code{etags}) from the same source file
567 (@file{etags.c}).  The difficult part is that each compilation of
568 @file{etags.c} requires different @code{cpp} flags.
570 @example
571 bin_PROGRAMS = etags ctags
572 ctags_SOURCES =
573 ctags_LDADD = ctags.o
575 etags.o: etags.c
576         $(COMPILE) -DETAGS_REGEXPS -c etags.c
578 ctags.o: etags.c
579         $(COMPILE) -DCTAGS -o ctags.o -c etags.c
580 @end example
582 Note that @code{ctags_SOURCES} is defined to be empty---that way no
583 implicit value is substituted.  The implicit value, however, is used to
584 generate @code{etags} from @file{etags.o}.
586 @code{ctags_LDADD} is used to get @file{ctags.o} into the link line.
587 @code{ctags_DEPENDENCIES} is generated by Automake.
589 The above rules won't work if your compiler doesn't accept both
590 @samp{-c} and @samp{-o}.  The simplest fix for this is to introduce a
591 bogus dependency (to avoid problems with a parallel @code{make}):
593 @example
594 etags.o: etags.c ctags.o
595         $(COMPILE) -DETAGS_REGEXPS -c etags.c
597 ctags.o: etags.c
598         $(COMPILE) -DCTAGS -c etags.c && mv etags.o ctags.o
599 @end example
601 Also, these explicit rules do not work if the de-ANSI-fication feature
602 is used; supporting that requires a little more work:
604 @example
605 etags._o: etags._c ctags.o
606         $(COMPILE) -DETAGS_REGEXPS -c etags.c
608 ctags._o: etags._c
609         $(COMPILE) -DCTAGS -c etags.c && mv etags._o ctags.o
610 @end example
613 @node Invoking Automake
614 @chapter Creating a @file{Makefile.in}
616 To create all the @file{Makefile.in}s for a package, run the
617 @code{automake} program in the top level directory, with no arguments.
618 @code{automake} will automatically find each appropriate
619 @file{Makefile.am} (by scanning @file{configure.in}; @pxref{configure})
620 and generate the corresponding @file{Makefile.in}.  Note that
621 @code{automake} has a rather simplistic view of what constitutes a
622 package; it assumes that a package has only one @file{configure.in}, at
623 the top.  If your package has multiple @file{configure.in}s, then you
624 must run @code{automake} in each directory holding a
625 @file{configure.in}.
627 You can optionally give @code{automake} an argument; @samp{.am} is
628 appended to the argument and the result is used as the name of the input
629 file.  This feature is generally only used to automatically rebuild an
630 out-of-date @file{Makefile.in}.  Note that @code{automake} must always
631 be run from the topmost directory of a project, even if being used to
632 regenerate the @file{Makefile.in} in some subdirectory.  This is
633 necessary because @code{automake} must scan @file{configure.in}, and
634 because @code{automake} uses the knowledge that a @file{Makefile.in} is
635 in a subdirectory to change its behavior in some cases.
637 @code{automake} accepts the following options:
639 @table @code
640 @item -a
641 @itemx --add-missing
642 Automake requires certain common files to exist in certain situations;
643 for instance @file{config.guess} is required if @file{configure.in} runs
644 @code{AC_CANONICAL_HOST}.  Automake is distributed with several of these
645 files; this option will cause the missing ones to be automatically added
646 to the package, whenever possible.  In general if Automake tells you a
647 file is missing, try using this option.
649 @item --amdir=@var{dir}
650 Look for Automake data files in directory @var{dir} instead of in the
651 installation directory.  This is typically used for debugging.
653 @item --build-dir=@var{dir}
654 Tell Automake where the build directory is.  This option is used when
655 including dependencies into a @file{Makefile.in} generated by @code{make
656 dist}; it should not be used otherwise.
658 @item --cygnus
659 Causes the generated @file{Makefile.in}s to follow Cygnus rules, instead
660 of GNU or Gnits rules.  @xref{Cygnus} for more information.
662 @item --foreign
663 Set the global strictness to @samp{foreign}.  @xref{Strictness} for more
664 information.
666 @item --gnits
667 Set the global strictness to @samp{gnits}.  @xref{Gnits} for more
668 information.
670 @item --gnu
671 Set the global strictness to @samp{gnu}.  @xref{Gnits} for more
672 information.  This is the default strictness.
674 @item --help
675 Print a summary of the command line options and exit.
677 @item -i
678 @itemx --include-deps
679 Include all automatically generated dependency information
680 (@pxref{Dependencies}) in the generated
681 @file{Makefile.in}.  This is generally done when making a distribution;
682 see @ref{Dist}.
684 @item -o @var{dir}
685 @itemx --output-dir=@var{dir}
686 Put the generated @file{Makefile.in} in the directory @var{dir}.
687 Ordinarily each @file{Makefile.in} is created in the directory of the
688 corresponding @file{Makefile.am}.  This option is used when making
689 distributions.
691 @item --srcdir-name=@var{dir}
692 Tell Automake the name of the source directory associated with the
693 current build.  This option is used when including dependencies into a
694 @file{Makefile.in} generated by @code{make dist}; it should not be used
695 otherwise.
697 @item -v
698 @itemx --verbose
699 Cause Automake to print information about which files are being read or
700 created.
702 @item --version
703 Print the version number of Automake and exit.
704 @end table
707 @node configure
708 @chapter Scanning @file{configure.in}
710 Automake scans the package's @file{configure.in} to determine certain
711 information about the package.  Some @code{autoconf} macros are required
712 and some variables must be defined in @file{configure.in}.  Automake
713 will also use information from @file{configure.in} to further tailor its
714 output.
716 Automake also supplies some @code{autoconf} macros to make the
717 maintenance easier.  These macros can automatically be put into your
718 @file{aclocal.m4} using the @code{aclocal} program.
720 @menu
721 * Requirements::                Configuration requirements
722 * Optional::                    Other things Automake recognizes
723 * Invoking aclocal::            Auto-generating aclocal.m4
724 * Macros::                      Autoconf macros supplied with Automake
725 * Extending aclocal::           Writing your own aclocal macros
726 @end menu
729 @node Requirements
730 @section Configuration requirements
732 The simplest way to meet the basic Automake requirements is to use the
733 macro @code{AM_INIT_AUTOMAKE} (FIXME: xref).  But if you prefer, you can
734 do the required steps by hand:
735 @cvindex AM_INIT_AUTOMAKE
737 @itemize @bullet
738 @item
739 Define the variables @code{PACKAGE} and @code{VERSION} with
740 @code{AC_SUBST}.
741 @cvindex PACKAGE
742 @cvindex VERSION
743 @code{PACKAGE} should be the name of the package as it appears when
744 bundled for distribution.  For instance, Automake defines @code{PACKAGE}
745 to be @samp{automake}.  @code{VERSION} should be the version number of
746 the release that is being developed.  We recommend that you make
747 @file{configure.in} the only place in your package where the version
748 number is defined; this makes releases simpler.
750 Automake doesn't do any interpretation of @code{PACKAGE} or
751 @code{VERSION}, except in @samp{Gnits} mode (FIXME xref).
753 @item
754 Use the macro @code{AC_ARG_PROGRAM} if a program or script is installed.
755 @cvindex AC_ARG_PROGRAM
757 @item
758 Use @code{AC_PROG_MAKE_SET} if the package is not flat.
759 @cvindex AC_PROG_MAKE_SET
761 @item
762 Use @code{AM_SANITY_CHECK} to make sure the build environment is sane.
764 @item
765 Use @code{AM_PROG_INSTALL} if any scripts (@pxref{Scripts}) are
766 installed by the package.  Otherwise, use @code{AC_PROG_INSTALL}.
767 @cvindex AC_PROG_INSTALL
768 @cvindex AM_PROG_INSTALL
770 @item
771 Use @code{AM_MISSING_PROG} to see whether the programs @code{aclocal},
772 @code{autoconf}, @code{automake}, @code{autoheader}, and @code{makeinfo}
773 are in the build environment.  Here is how this is done:
774 @example
775 missing_dir=`cd $ac_aux_dir && pwd`
776 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
777 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
778 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
779 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
780 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
781 @end example
782 @end itemize
785 Here are the other macros which Automake requires but which are not run
786 by @code{AM_INIT_AUTOMAKE}:
788 @table @code
789 @item AC_OUTPUT
790 Automake uses this to determine which files to create.  Listed files
791 named @code{Makefile} are treated as @file{Makefile}s.  Other listed
792 files are treated differently.  Currently the only difference is that a
793 @file{Makefile} is removed by @code{make distclean}, while other files
794 are removed by @code{make clean}.
795 @c FIXME: this is in violation of standards!
796 @cvindex AC_OUTPUT
797 @end table
799 @node Optional
800 @section Other things Automake recognizes
802 Automake will also recognize the use of certain macros and tailor the
803 generated @file{Makefile.in} appropriately.  Currently recognized macros
804 and their effects are:
806 @table @code
807 @item AC_CONFIG_HEADER
808 Automake requires the use of @code{AM_CONFIG_HEADER}, which is similar
809 to @code{AC_CONFIG_HEADER} but does some useful Automake-specific work.
810 @cvindex AC_CONFIG_HEADER
812 @item AC_CONFIG_AUX_DIR
813 Automake will look for various helper scripts, such as
814 @file{mkinstalldirs}, in the directory named in this macro invocation.
815 If not seen, the scripts are looked for in their ``standard'' locations
816 (either the top source directory, or in the source directory
817 corresponding to the current @file{Makefile.am}, whichever is
818 appropriate).
819 @cvindex AC_CONFIG_AUX_DIR
820 FIXME: give complete list of things looked for in this directory
822 @item AC_PATH_XTRA
823 Automake will insert definitions for the variables defined by
824 @code{AC_PATH_XTRA} into each @file{Makefile.in} that builds a C program
825 or library.
826 @cvindex AC_PATH_XTRA
828 @item AC_CANONICAL_HOST
829 @itemx AC_CHECK_TOOL
830 Automake will ensure that @file{config.guess} and @file{config.sub}
831 exist.  Also, the @file{Makefile} variables @samp{host_alias} and
832 @samp{host_triplet} are introduced.
833 @c fixme xref autoconf docs.
834 @cvindex AC_CANONICAL_HOST
835 @cvindex AC_CHECK_TOOL
836 @vindex host_alias
837 @vindex host_triplet
839 @item AC_CANONICAL_SYSTEM
840 This is similar to @code{AC_CANONICAL_HOST}, but also defines the
841 @file{Makefile} variables @samp{build_alias} and @samp{target_alias}.
842 @cvindex AC_CANONICAL_SYSTEM
843 @vindex build_alias
844 @vindex target_alias
846 @item AC_FUNC_ALLOCA
847 @itemx AC_FUNC_GETLOADAVG
848 @itemx AC_FUNC_MEMCMP
849 @itemx AC_STRUCT_ST_BLOCKS
850 @itemx AC_FUNC_FNMATCH
851 @itemx AM_FUNC_STRTOD
852 @itemx AC_REPLACE_FUNCS
853 @itemx AC_REPLACE_GNU_GETOPT
854 @itemx AM_WITH_REGEX
855 Automake will ensure that the appropriate dependencies are generated for
856 the objects corresponding to these macros.  Also, Automake will verify
857 that the appropriate source files are part of the distribution.  Note
858 that Automake does not come with any of the C sources required to use
859 these macros, so @code{automake -a} will not install the sources.
860 @xref{A Library} for more information.
861 @cvindex AC_FUNC_ALLOCA
862 @cvindex AC_FUNC_GETLOADAVG
863 @cvindex AC_FUNC_MEMCMP
864 @cvindex AC_STRUCT_ST_BLOCKS
865 @cvindex AC_FUNC_FNMATCH
866 @cvindex AC_FUNC_FNMATCH
867 @cvindex AC_REPLACE_FUNCS
868 @cvindex AC_REPLACE_GNU_GETOPT
869 @cvindex AM_FUNC_STRTOD
870 @cvindex AM_WITH_REGEX
872 @item LIBOBJS
873 Automake will detect statements which put @samp{.o} files into
874 @code{LIBOBJS}, and will treat these additional files as if they were
875 discovered via @code{AC_REPLACE_FUNCS}.
876 @cvindex LIBOBJS
878 @item AC_PROG_RANLIB
879 This is required if any libraries are built in the package.
880 @cvindex AC_PROG_RANLIB
882 @item AC_PROG_CXX
883 This is required if any C++ source is included.
884 @cvindex AC_PROG_CXX
886 @item AM_PROG_LIBTOOL
887 Automake will turn on processing for @code{libtool} (@pxref{Top, , The
888 Libtool Manual, libtool, The Libtool Manual}).
889 @cvindex AM_PROG_LIBTOOL
891 @item AC_PROG_YACC
892 If a Yacc source file is seen, then you must either use this macro or
893 define the variable @samp{YACC} in @file{configure.in}.  The former is
894 preferred.
895 @cvindex AC_PROG_YACC
896 @cvindex YACC
898 @item AC_DECL_YYTEXT
899 This macro is required if there is Lex source in the package.
900 @cvindex AC_DECL_YYTEXT
902 @item AC_PROG_LEX
903 If a Lex source file is seen, then this macro must be used.
904 @cvindex AC_PROG_LEX
906 @item ALL_LINGUAS
907 If Automake sees that this variable is set in @file{configure.in}, it
908 will check the @file{po} directory to ensure that all the named
909 @samp{.po} files exist, and that all the @samp{.po} files that exist are
910 named.
911 @cvindex ALL_LINGUAS
913 @item AM_C_PROTOTYPES
914 This is required when using automatic de-ANSI-fication, see @ref{ANSI}.
915 @cvindex AM_C_PROTOTYPES
917 @item AM_GNU_GETTEXT
918 This macro is required for packages which use GNU gettext
919 (@pxref{gettext}).  It is distributed with gettext.  If Automake sees
920 this macro it ensures that the package meets some of gettext's
921 requirements.
922 @cvindex AM_GNU_GETTEXT
924 @item AM_MAINTAINER_MODE
925 This macro adds a @samp{--enable-maintainer-mode} option to
926 @code{configure}.  If this is used, @code{automake} will cause
927 ``maintainer-only'' rules to be turned off by default in the generated
928 @file{Makefile.in}s.  This macro is disallowed in @samp{Gnits} mode.
929 FIXME xref.
930 @cvindex AM_MAINTAINER_MODE
932 @item AC_SUBST
933 @itemx AC_CHECK_TOOL
934 @itemx AC_CHECK_PROG
935 @itemx AC_CHECK_PROGS
936 @itemx AC_PATH_PROG
937 @itemx AC_PATH_PROGS
938 For each of these macros, the first argument is automatically defined as
939 a variable in each generated @file{Makefile.in}.
940 @cvindex AC_SUBST
941 @cvindex AC_CHECK_TOOL
942 @cvindex AC_CHECK_PROG
943 @cvindex AC_CHECK_PROGS
944 @cvindex AC_PATH_PROG
945 @cvindex AC_PATH_PROGS
947 @end table
950 @node Invoking aclocal
951 @section Auto-generating aclocal.m4
953 Automake includes a number of Autoconf macros which can be used in your
954 package; some of them are actually required by Automake in certain
955 situations.  These macros must be defined in your @file{aclocal.m4};
956 otherwise they will not be seen by @code{autoconf}.
958 The @code{aclocal} program will automatically generate @file{aclocal.m4}
959 files based on the contents of @file{configure.in}.  This provides a
960 convenient way to get Automake-provided macros, without having to
961 search around.  Also, the @code{aclocal} mechanism is extensible for use
962 by other packages.
964 At startup, @code{aclocal} scans all the @samp{.m4} files it can find,
965 looking for macro definitions.  Then it scans @file{configure.in}.  Any
966 mention of one of the macros found in the first step causes that macro,
967 and any macros it in turn requires, to be put into @file{aclocal.m4}.
969 The contents of @file{acinclude.m4}, if it exists, are also
970 automatically included in @file{aclocal.m4}.  This is useful for
971 incorporating local macros into @file{configure}.
973 @code{aclocal} accepts the following options:
975 @table @code
976 @item --acdir=@var{dir}
977 Look for the macro files in @var{dir} instead of the installation
978 directory.  This is typically used for debugging.
980 @item --help
981 Print a summary of the command line options and exit.
983 @item -I @var{dir}
984 Add the directory @var{dir} to the list of directories searched for
985 @samp{.m4} files.
987 @item --output=@var{file}
988 Cause the output to be put into @var{file} instead of @file{aclocal.m4}.
990 @item --verbose
991 Print the names of the files it examines.
993 @item --version
994 Print the version number of Automake and exit.
995 @end table
998 @node Macros
999 @section Autoconf macros supplied with Automake
1001 @c consider generating this node automatically from m4 files.
1003 @table @code
1004 @item AM_CONFIG_HEADER
1005 Automake will generate rules to automatically regenerate the config
1006 header.  If you do use this macro, you must create the file
1007 @file{stamp-h.in} in your source directory.  It can be empty.
1008 @cvindex AM_CONFIG_HEADER
1010 @item AM_CYGWIN32
1011 Check to see if this @code{configure} is being run in the
1012 @samp{Cygwin32} environment.  (FIXME xref).  If so, define output
1013 variable @code{EXEEXT} to @samp{.exe}; otherwise define it to the empty
1014 string.  Automake recognizes this macro and uses it to generate
1015 @file{Makefile.in}s which will automatically work under @samp{Cygwin32}.
1016 In the @samp{Cygwin32} environment, @code{gcc} generates executables
1017 whose names end in @samp{.exe}, even if this was not specified on the
1018 command line.  Automake adds special code to @file{Makefile.in} to
1019 gracefully deal with this.
1021 @item AM_FUNC_STRTOD
1022 If the @code{strtod} function is not available, or does not work
1023 correctly (like the one on SunOS 5.4), add @file{strtod.o} to output
1024 variable @code{LIBOBJS}.
1025 @cvindex AM_FUNC_STRTOD
1027 @item AM_FUNC_ERROR_AT_LINE
1028 If the function @code{error_at_line} is not found, then add
1029 @file{error.o} to @code{LIBOBJS}.
1030 @cvindex AM_FUNC_ERROR_AT_LINE
1032 @item AM_FUNC_MKTIME
1033 Check for a working @code{mktime} function.  If not found, add
1034 @file{mktime.o} to @samp{LIBOBJS}.
1035 @cvindex AM_FUNC_MKTIME
1037 @item AM_FUNC_OBSTACK
1038 Check for the GNU obstacks code; if not found, add @file{obstack.o} to
1039 @samp{LIBOBJS}.
1040 @cvindex AM_FUNC_OBSTACK
1042 @item AM_C_PROTOTYPES
1043 Check to see if function prototypes are understood by the compiler.  If
1044 so, define @samp{PROTOTYPES} and set the output variables @samp{U} and
1045 @samp{ANSI2KNR} to the empty string.  Otherwise, set @samp{U} to
1046 @samp{_} and @samp{ANSI2KNR} to @samp{./ansi2knr}.  Automake uses these
1047 values to implement automatic de-ANSI-fication.
1048 @cvindex AM_C_PROTOTYPES
1050 @item AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
1051 If the use of @code{TIOCGWINSZ} requires @file{<sys/ioctl.h>}, then
1052 define @code{GWINSZ_IN_SYS_IOCTL}.  Otherwise @code{TIOCGWINSZ} can be
1053 found in @file{<termios.h>}.
1054 @cvindex AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
1056 @item AM_INIT_AUTOMAKE
1057 Runs many macros that most @file{configure.in}'s need.  This macro has
1058 two required arguments, the package and the version number.  By default
1059 this macro @code{AC_DEFINE}'s @samp{PACKAGE} and @samp{VERSION}.  This
1060 can be avoided by passing in a non-empty third argument.
1062 @item AM_PATH_LISPDIR
1063 Searches for the program @code{emacs}, and, if found, sets the output
1064 variable @code{lispdir} to the full path to Emacs' site-lisp directory.
1065 @cvindex AM_PATH_LISPDIR
1067 @item AM_PROG_CC_STDC
1068 If the C compiler in not in ANSI C mode by default, try to add an option
1069 to output variable @code{CC} to make it so.  This macro tries various
1070 options that select ANSI C on some system or another.  It considers the
1071 compiler to be in ANSI C mode if it defines @code{__STDC__} to 1 and
1072 handles function prototypes correctly.
1074 If you use this macro, you should check after calling it whether the C
1075 compiler has been set to accept ANSI C; if not, the shell variable
1076 @code{am_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source
1077 code in ANSI C, you can make an un-ANSIfied copy of it by using the
1078 @code{ansi2knr} option.
1079 @cvindex AM_PROG_CC_STDC
1081 @item AM_PROG_INSTALL
1082 Like @code{AC_PROG_INSTALL}, but also defines @code{INSTALL_SCRIPT}.
1083 @cvindex AM_PROG_INSTALL
1085 @item AM_SANITY_CHECK
1086 This checks to make sure that a file created in the build directory is
1087 newer than a file in the source directory.  This can fail on systems
1088 where the clock is set incorrectly.  This macro is automatically run
1089 from @code{AM_INIT_AUTOMAKE}.
1090 @cvindex AM_SANITY_CHECK
1092 @item AM_SYS_POSIX_TERMIOS
1093 Check to see if POSIX termios headers and functions are available on the
1094 system.  If so, set the shell variable @code{am_cv_sys_posix_termios} to
1095 @samp{yes}.  If not, set the variable to @samp{no}.
1096 @cvindex AM_SYS_POSIX_TERMIOS
1098 @item AM_TYPE_PTRDIFF_T
1099 Define @samp{HAVE_PTRDIFF_T} if the type @samp{ptrdiff_t} is defined in
1100 @file{<stddef.h>}.
1101 @cvindex AM_TYPE_PTRDIFF_T
1103 @item AM_WITH_DMALLOC
1104 Add support for the @code{dmalloc} package.  If the user configures with
1105 @samp{--with-dmalloc}, then define @code{WITH_DMALLOC} and add
1106 @samp{-ldmalloc} to @code{LIBS}.  The @code{dmalloc} package can be
1107 found at @url{ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz}
1108 @cvindex AM_WITH_DMALLOC
1110 @item AM_WITH_REGEX
1111 Adds @samp{--with-regex} to the @code{configure} command line.  If
1112 specified (the default), then the @samp{regex} regular expression
1113 library is used, @file{regex.o} is put into @samp{LIBOBJS}, and
1114 @samp{WITH_REGEX} is defined..  If @samp{--without-regex} is given, then
1115 the @samp{rx} regular expression library is used, and @file{rx.o} is put
1116 into @samp{LIBOBJS}.
1117 @cvindex AM_WITH_REGEX
1118 @end table
1121 @node Extending aclocal
1122 @section Writing your own aclocal macros
1124 Aclocal doesn't have any built-in knowledge of any macros, so it is easy
1125 to extend it with your own macros.
1127 This is mostly used for libraries which want to supply their own
1128 Autoconf macros for use by other programs.  For instance the
1129 @code{gettext} library supplies a macro @code{AM_GNU_GETTEXT} which
1130 should be used by any package using @code{gettext}.  When the library is
1131 installed, it installs this macro so that @code{aclocal} will find it.
1133 A file of macros should be a series of @code{AC_DEFUN}'s.  Aclocal also
1134 understands @code{AC_REQUIRE}, so it is safe to put each macro in a
1135 separate file.
1137 A macro file's name should end in @samp{.m4}.  Such files should be
1138 installed in @file{$(datadir)/aclocal}.
1140 @node Top level
1141 @chapter The top-level @file{Makefile.am}
1143 In non-flat packages, the top level @file{Makefile.am} must tell
1144 Automake which subdirectories are to be built.  This is done via the
1145 @code{SUBDIRS} variable.
1146 @vindex SUBDIRS
1148 The @code{SUBDIRS} macro holds a list of subdirectories in which
1149 building of various sorts can occur.  Many targets (eg @code{all}) in
1150 the generated @file{Makefile} will run both locally and in all specified
1151 subdirectories.  Note that the directories listed in @code{SUBDIRS} are
1152 not required to contain @file{Makefile.am}s; only @file{Makefile}s
1153 (after configuration).  This allows inclusion of libraries from packages
1154 which do not use Automake (such as @code{gettext}).  The directories
1155 mentioned in @code{SUBDIRS} must be direct children of the current
1156 directory.  For instance, you cannot put @samp{src/subdir} into
1157 @code{SUBDIRS}.
1159 In a deep package, the top-level @file{Makefile.am} is often very short.
1160 For instance, here is the @file{Makefile.am} from the Hello
1161 distribution:
1163 @example
1164 EXTRA_DIST = BUGS ChangeLog.O README-alpha
1165 SUBDIRS = doc intl po src tests
1166 @end example
1168 @code{SUBDIRS} can contain configure substitutions (eg @samp{@@DIRS@@});
1169 Automake itself does not actually examine the contents of this variable.
1171 If @code{SUBDIRS} is defined, then your @file{configure.in} must include
1172 @code{AC_PROG_MAKE_SET}.
1174 The use of @code{SUBDIRS} is not restricted to just the top-level
1175 @file{Makefile.am}.  Automake can be used to construct packages of
1176 arbitrary depth.
1179 @node Programs
1180 @chapter Building Programs and Libraries
1182 A large part of Automake's functionality is dedicated to making it easy
1183 to build C programs and libraries.
1185 @menu
1186 * A Program::                   Building a program
1187 * A Library::                   Building a library
1188 * LIBOBJS::                     Special handling for LIBOBJS and ALLOCA
1189 * A Shared Library::            Building a Libtool library
1190 * Program variables::           Variables used when building a program
1191 * Yacc and Lex::                Yacc and Lex support
1192 * C++::                         C++ and other languages
1193 * ANSI::                        Automatic de-ANSI-fication
1194 * Dependencies::                Automatic dependency tracking
1195 @end menu
1198 @node A Program
1199 @section Building a program
1201 In a directory containing source that gets built into a program (as
1202 opposed to a library), the @samp{PROGRAMS} primary is used.  Programs
1203 can be installed in @samp{bindir}, @samp{sbindir}, @samp{libexecdir},
1204 @samp{pkglibdir}, or not at all (@samp{noinst}).
1206 For instance:
1208 @example
1209 bin_PROGRAMS = hello
1210 @end example
1212 In this simple case, the resulting @file{Makefile.in} will contain code
1213 to generate a program named @code{hello}.  The variable
1214 @code{hello_SOURCES} is used to specify which source files get built
1215 into an executable:
1217 @example
1218 hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h 
1219 @end example
1221 This causes each mentioned @samp{.c} file to be compiled into the
1222 corresponding @samp{.o}.  Then all are linked to produce @file{hello}.
1224 If @samp{prog_SOURCES} is needed, but not specified, then it defaults to
1225 the single file @file{prog.c}.  In the example above, the definition of
1226 @code{hello_SOURCES} is actually redundant.
1227 @vindex _SOURCES
1228 @vindex SOURCES
1230 Multiple programs can be built in a single directory.  Multiple programs
1231 can share a single source file.  The source file must be listed in each
1232 @samp{_SOURCES} definition.
1234 Header files listed in a @samp{_SOURCES} definition will be included in
1235 the distribution but otherwise ignored.  In case it isn't obvious, you
1236 should not include the header file generated by @file{configure} in an
1237 @samp{_SOURCES} variable; this file should not be distributed.  Lex
1238 (@samp{.l}) and yacc (@samp{.y}) files can also be listed; see @ref{Yacc
1239 and Lex}.
1241 Automake must know all the source files that could possibly go into a
1242 program, even if not all the files are built in every circumstance.
1243 Any files which are only conditionally built should be listed in the
1244 appropriate @samp{EXTRA_} variable.  For instance, if
1245 @file{hello-linux.c} were conditionally included in @code{hello}, the
1246 @file{Makefile.am} would contain:
1248 @example
1249 EXTRA_hello_SOURCES = hello-linux.c
1250 @end example
1252 Similarly, sometimes it is useful to determine the programs that are to
1253 be built at configure time.  For instance, GNU @code{cpio} only builds
1254 @code{mt} and @code{rmt} under special circumstances.
1256 In this case, you must notify @code{automake} of all the programs that
1257 can possibly be built, but at the same time cause the generated
1258 @file{Makefile.in} to use the programs specified by @code{configure}.
1259 This is done by having @code{configure} substitute values into each
1260 @samp{_PROGRAMS} definition, while listing all optionally built programs in
1261 @code{EXTRA_PROGRAMS}.
1262 @vindex EXTRA_PROGRAMS
1264 If you need to link against libraries that are not found by
1265 @code{configure}, you can use @code{LDADD} to do so.  This variable
1266 actually can be used to add any options to the linker command line.
1267 @vindex LDADD
1269 Sometimes, multiple programs are built in one directory but do not share
1270 the same link-time requirements.  In this case, you can use the
1271 @samp{@var{prog}_LDADD} variable (where @var{prog} is the name of the
1272 program as it appears in some @samp{_PROGRAMS} variable, and usually
1273 written in lowercase) to override the global @code{LDADD}.  (If this
1274 variable exists for a given program, then that program is not linked
1275 using @code{LDADD}.)
1276 @vindex _LDADD
1278 For instance, in GNU cpio, @code{pax}, @code{cpio}, and @code{mt} are
1279 linked against the library @file{libcpio.a}.  However, @code{rmt} is
1280 built in the same directory, and has no such link requirement.  Also,
1281 @code{mt} and @code{rmt} are only built on certain architectures.  Here
1282 is what cpio's @file{src/Makefile.am} looks like (abridged):
1284 @example
1285 bin_PROGRAMS = cpio pax @@MT@@
1286 libexec_PROGRAMS = @@RMT@@
1287 EXTRA_PROGRAMS = mt rmt
1289 LDADD = ../lib/libcpio.a @@INTLLIBS@@
1290 rmt_LDADD =
1292 cpio_SOURCES = @dots{}
1293 pax_SOURCES = @dots{}
1294 mt_SOURCES = @dots{}
1295 rmt_SOURCES = @dots{}
1296 @end example
1298 @samp{prog_LDADD} is inappropriate for passing program-specific linker
1299 flags (except for @samp{-l} and @samp{-L}).  So, use the
1300 @samp{prog_LDFLAGS} variable for this purpose.
1301 @vindex _LDFLAGS
1303 It is also occasionally useful to have a program depend on some other
1304 target which is not actually part of that program.  This can be done
1305 using the @samp{prog_DEPENDENCIES} variable.  Each program depends on
1306 the contents of such a variable, but no further interpretation is done.
1308 If @samp{prog_DEPENDENCIES} is not supplied, it is computed by Automake.
1309 The automatically-assigned value is the contents of @samp{prog_LDADD},
1310 with most configure substitutions, @samp{-l}, and @samp{-L} options
1311 removed.  The configure substitutions that are left in are only
1312 @samp{@@LIBOBJS@@} and @samp{@@ALLOCA@@}; these are left because it is
1313 known that they will not cause an invalid value for
1314 @samp{prog_DEPENDENCIES} to be generated.
1317 @node A Library
1318 @section Building a library
1320 Building a library is much like building a program.  In this case, the
1321 name of the primary is @samp{LIBRARIES}.  Libraries can be installed in
1322 @code{libdir} or @code{pkglibdir}.
1324 @xref{A Shared Library}, for information on how to build shared
1325 libraries using Libtool and the @samp{LTLIBRARIES} primary.
1327 Each @samp{_LIBRARIES} variable is a list of the libraries to be built.
1328 For instance to create a library named @file{libcpio.a}, but not install
1329 it, you would write:
1331 @example
1332 noinst_LIBRARIES = libcpio.a
1333 @end example
1335 The sources that go into a library are determined exactly as they are
1336 for programs, via the @samp{_SOURCES} variables.  Note that the library
1337 name is canonicalized (@pxref{Canonicalization}), so the @samp{_SOURCES}
1338 variable corresponding to @file{liblob.a} is @samp{liblob_a_SOURCES},
1339 not @samp{liblob.a_SOURCES}.
1341 Extra objects can be added to a library using the @samp{library_LIBADD}
1342 variable.  This should be used for objects determined by
1343 @code{configure}.  Again from cpio:
1344 @vindex _LIBADD
1345 @vindex LIBADD
1347 @example
1348 libcpio_a_LIBADD = @@LIBOBJS@@ @@ALLOCA@@
1349 @end example
1351 @node LIBOBJS
1352 @section Special handling for LIBOBJS and ALLOCA
1354 Automake explicitly recognizes the use of @code{@@LIBOBJS@@} and
1355 @code{@@ALLOCA@@}, and uses this information, plus the list of
1356 @code{LIBOBJS} files derived from @file{configure.in} to automatically
1357 include the appropriate source files in the distribution (@pxref{Dist}).
1358 These source files are also automatically handled in the
1359 dependency-tracking scheme, see @xref{Dependencies}.
1361 @code{@@LIBOBJS@@} and @code{@@ALLOCA@@} are specially recognized in any
1362 @samp{_LDADD} or @samp{_LIBADD} variable.
1364 @node A Shared Library
1365 @section Building a Shared Library
1367 Building shared libraries is a relatively complex matter.  For this
1368 reason, GNU Libtool (@pxref{Top, , The Libtool Manual, libtool, The
1369 Libtool Manual}) was created to help build shared libraries in a
1370 platform-independent way.
1372 Automake uses Libtool to build libraries declared with the
1373 @samp{LTLIBRARIES} primary.  Each @samp{_LTLIBRARIES} variable is a list
1374 of shared libraries to build.  For instance, to create a library named
1375 @file{libgettext.a} and its corresponding shared libraries, and install
1376 them in @samp{libdir}, write:
1378 @example
1379 lib_LTLIBRARIES = libgettext.la
1380 @end example
1382 Note that shared libraries @emph{must} be installed, so
1383 @samp{noinst_LTLIBRARIES} and @samp{check_LTLIBRARIES} are not allowed.
1385 For each library, the @samp{library_LIBADD} variable contains the names
1386 of extra libtool objects (@samp{.lo} files) to add to the shared
1387 library.  The @samp{library_LDFLAGS} variable contains any additional
1388 libtool flags, such as @samp{-version-info} or @samp{-static}.
1390 Where an ordinary library might include @code{@@LIBOBJS@@}, a libtool
1391 library must use @code{@@LTLIBOBJS@@}.  This is required because the
1392 object files that libtool operates on do not necessarily end in
1393 @samp{.o}.  The libtool manual contains more details on this topic.
1395 For libraries installed in some directory, @code{automake} will
1396 automatically supply the appropriate @samp{-rpath} option.  However, for
1397 libraries determined at configure time (and thus mentioned in
1398 @code{EXTRA_LTLIBRARIES}), @code{automake} does not know the eventual
1399 installation directory; for such libraries you must add the
1400 @samp{-rpath} option to the appropriate @samp{_LDFLAGS} variable by
1401 hand.
1403 @xref{Using Automake, Using Automake with Libtool, The Libtool Manual,
1404 libtool, The Libtool Manual}, for more information.
1406 @node Program variables
1407 @section Variables used when building a program
1409 Occasionally it is useful to know which @file{Makefile} variables
1410 Automake uses for compilations; for instance you might need to do your
1411 own compilation in some special cases.
1413 Some variables are inherited from Autoconf; these are @code{CC},
1414 @code{CFLAGS}, @code{CPPFLAGS}, @code{DEFS}, @code{LDFLAGS}, and
1415 @code{LIBS}.
1416 @vindex LDFLAGS
1418 There are some additional variables which Automake itself defines:
1420 @table @code
1421 @item INCLUDES
1422 A list of @samp{-I} options.  This can be set in your @file{Makefile.am}
1423 if you have special directories you want to look in.  @code{automake}
1424 already provides some @samp{-I} options automatically.  In particular it
1425 generates @samp{-I$(srcdir)} and a @samp{-I} pointing to the directory
1426 holding @file{config.h} (if you've used @code{AC_CONFIG_HEADER} or
1427 @code{AM_CONFIG_HEADER}).
1429 @code{INCLUDES} can actually be used for other @code{cpp} options
1430 besides @samp{-I}.  For instance, it is sometimes used to pass arbitrary
1431 @samp{-D} options to the compiler.
1433 @item COMPILE
1434 This is the command used to actually compile a C source file.  The
1435 filename is appended to form the complete command line.
1437 @item LINK
1438 This is the command used to actually link a C program.
1439 @end table
1442 @node Yacc and Lex
1443 @section Yacc and Lex support
1445 Automake has somewhat idiosyncratic support for Yacc and Lex.
1447 Automake assumes that the @samp{.c} file generated by yacc (or lex)
1448 should be named using the basename of the input file.  That is, for a
1449 yacc source file @file{foo.y}, automake will cause the intermediate file
1450 to be named @file{foo.c} (as opposed to @file{y.tab.c}, which is more
1451 traditional).
1453 The extension of a yacc source file is used to determine the extension
1454 of the resulting @samp{C} or @samp{C++} file.  Files with the extension
1455 @samp{.y} will be turned into @samp{.c} files; likewise, @samp{.yy} will
1456 become @samp{.cc}; @samp{.y++}, @samp{c++}; and @samp{.yxx},
1457 @samp{.cxx}.  Likewise, lex source files can be used to generate
1458 @samp{C} or @samp{C++}; the extensions @samp{.l}, @samp{.ll},
1459 @samp{.l++}, and @samp{.lxx} are recognized.
1461 You should never explicitly mention the intermediate (@samp{C} or
1462 @samp{C++}) file in any @samp{SOURCES} variable; only list the source
1463 file.
1465 The intermediate files generated by yacc (or lex) will be included in
1466 any distribution that is made.  That way the user doesn't need to have
1467 yacc or lex.
1469 If a yacc source file is seen, then your @file{configure.in} must define
1470 the variable @samp{YACC}.  This is most easily done by invoking the
1471 macro @samp{AC_PROG_YACC}.
1473 Similarly, if a lex source file is seen, then your @file{configure.in}
1474 must define the variable @samp{LEX}.  You can use @samp{AC_PROG_LEX} to
1475 do this.  Automake's lex support also requires that you use the
1476 @samp{AC_DECL_YYTEXT} macro---automake needs to know the value of
1477 @samp{LEX_OUTPUT_ROOT}.
1479 Any program including a lex source file must be linked against
1480 @samp{@@LEXLIB@@}.  You can do this by putting @samp{@@LEXLIB@@} into
1481 the appropriate @samp{LDADD} variable.
1483 Automake makes it possible to include multiple yacc (or lex) source
1484 files in a single program.  Automake uses a small program called
1485 @code{ylwrap} to run @code{yacc} (or @code{lex}) in a subdirectory.
1486 This is necessary because yacc's output filename is fixed, and a
1487 parallel make could conceivably invoke more than one instance of
1488 @code{yacc} simultaneously.  @code{ylwrap} is distributed with automake.
1489 It should appear in the directory specified by @samp{AC_CONFIG_AUX_DIR},
1490 or the current directory if that macro is not used in
1491 @file{configure.in}.
1493 For @code{yacc}, simply managing locking is insufficient.  @code{yacc}
1494 output also always uses the same symbol names internally, so it isn't
1495 possible to link two @code{yacc} parsers into the same executable.
1497 We recommend using the following renaming hack used in @code{gdb}:
1498 @example
1499 #define yymaxdepth c_maxdepth
1500 #define yyparse c_parse
1501 #define yylex   c_lex
1502 #define yyerror c_error
1503 #define yylval  c_lval
1504 #define yychar  c_char
1505 #define yydebug c_debug
1506 #define yypact  c_pact  
1507 #define yyr1    c_r1                    
1508 #define yyr2    c_r2                    
1509 #define yydef   c_def           
1510 #define yychk   c_chk           
1511 #define yypgo   c_pgo           
1512 #define yyact   c_act           
1513 #define yyexca  c_exca
1514 #define yyerrflag c_errflag
1515 #define yynerrs c_nerrs
1516 #define yyps    c_ps
1517 #define yypv    c_pv
1518 #define yys     c_s
1519 #define yy_yys  c_yys
1520 #define yystate c_state
1521 #define yytmp   c_tmp
1522 #define yyv     c_v
1523 #define yy_yyv  c_yyv
1524 #define yyval   c_val
1525 #define yylloc  c_lloc
1526 #define yyreds  c_reds
1527 #define yytoks  c_toks
1528 #define yylhs   c_yylhs
1529 #define yylen   c_yylen
1530 #define yydefred c_yydefred
1531 #define yydgoto c_yydgoto
1532 #define yysindex c_yysindex
1533 #define yyrindex c_yyrindex
1534 #define yygindex c_yygindex
1535 #define yytable  c_yytable
1536 #define yycheck  c_yycheck
1537 @end example
1539 For each define, replace the @samp{c_} prefix with whatever you like.
1540 These defines work for @code{bison}, @code{byacc}, and traditional
1541 @code{yacc}s.  If you find a parser generator that uses a symbol not
1542 covered here, please report the new name so it can be added to the list.
1545 @node C++
1546 @section C++ and other languages
1548 Automake includes full support for C++, and rudimentary support for
1549 other languages.  Support for other languages will be improved based on
1550 demand.
1552 Any package including C++ code must define the output variable
1553 @samp{CXX} in @file{configure.in}; the simplest way to do this is to use
1554 the @code{AC_PROG_CXX} macro.
1556 A few additional variables are defined when a C++ source file is seen:
1558 @table @code
1559 @item CXX
1560 The name of the C++ compiler.
1561 @vindex CXX
1563 @item CXXFLAGS
1564 Any flags to pass to the C++ compiler.
1565 @vindex CXXFLAGS
1567 @item CXXCOMPILE
1568 The command used to actually compile a C++ source file.  The file name
1569 is appended to form the complete command line.
1570 @vindex CXXCOMPILE
1572 @item CXXLINK
1573 The command used to actually link a C++ program.
1574 @vindex CXXLINK
1575 @end table
1578 @node ANSI
1579 @section Automatic de-ANSI-fication
1581 Although the GNU standards allow the use of ANSI C, this can have the
1582 effect of limiting portability of a package to some older compilers
1583 (notably SunOS).
1585 Automake allows you to work around this problem on such machines by
1586 ``de-ANSI-fying'' each source file before the actual compilation takes
1587 place.
1589 If the @file{Makefile.am} variable @code{AUTOMAKE_OPTIONS}
1590 @vindex AUTOMAKE_OPTIONS
1591 (@ref{Options}) contains the option @code{ansi2knr}
1592 @opindex ansi2knr
1593 then code to handle de-ANSI-fication is inserted into the generated
1594 @file{Makefile.in}.
1596 This causes each C source file in the directory to be treated as ANSI C.
1597 If an ANSI C compiler is available, it is used.  If no ANSI C compiler
1598 is available, the @code{ansi2knr} program is used to convert the source
1599 files into K&R C, which is then compiled.
1601 The @code{ansi2knr} program is simple-minded.  It assumes the source
1602 code will be formatted in a particular way; see the @code{ansi2knr} man
1603 page for details.
1605 De-ANSI-fication support requires the source files @file{ansi2knr.c} and
1606 @file{ansi2knr.1} to be in the same package as the ANSI C source; these
1607 files are distributed with Automake.  Also, the package
1608 @file{configure.in} must call the macro @code{AM_C_PROTOTYPES}.
1609 @cvindex AM_C_PROTOTYPES
1611 Automake also handles finding the @code{ansi2knr} support files in some
1612 other directory in the current package.  This is done by prepending the
1613 relative path to the appropriate directory to the @code{ansi2knr}
1614 option.  For instance, suppose the package has ANSI C code in the
1615 @file{src} and @file{lib} subdirs.  The files @file{ansi2knr.c} and
1616 @file{ansi2knr.1} appear in @file{lib}.  Then this could appear in
1617 @file{src/Makefile.am}:
1619 @example
1620 AUTOMAKE_OPTIONS = ../lib/ansi2knr
1621 @end example
1623 If no directory prefix is given, the files are assumed to be in the
1624 current directory.
1626 @node Dependencies
1627 @section Automatic dependency tracking
1629 As a developer it is often painful to continually update the
1630 @file{Makefile.in} whenever the include-file dependencies change in a
1631 project.  @code{automake} supplies a way to automatically track
1632 dependency changes, and distribute the dependencies in the generated
1633 @file{Makefile.in}.
1635 Currently this support requires the use of GNU @code{make} and
1636 @code{gcc}.  It might become possible in the future to supply a
1637 different dependency generating program, if there is enough demand.
1639 This mode is enabled by default if any C program or library is defined
1640 in the current directory.
1642 When you decide to make a distribution, the @code{dist} target will
1643 @trindex dist
1644 re-run @code{automake} with @samp{--include-deps} and other options.
1645 This will cause the previously generated dependencies to be inserted
1646 into the generated @file{Makefile.in}, and thus into the distribution.
1647 This step also turns off inclusion of the dependency generation code.
1649 When added to the @file{Makefile.in}, the dependencies have all
1650 system-specific dependencies automatically removed.  This can be done by
1651 listing the files in @samp{OMIT_DEPENDENCIES}.
1652 @vindex OMIT_DEPENDENCIES
1653 For instance all references to system header files are removed by
1654 @code{automake}.  Sometimes it is useful to specify that a certain
1655 header file should be removed.  For instance if your @file{configure.in}
1656 uses @samp{AM_WITH_REGEX}, then any dependency on @file{rx.h} or
1657 @file{regex.h} should be removed, because the correct one cannot be
1658 known until the user configures the package.
1660 As it turns out, @code{automake} is actually smart enough to the
1661 particular case of the regular expression header.  It will also
1662 automatically omit @file{libintl.h} if @samp{AM_GNU_GETTEXT} is used.
1664 Automatic dependency tracking can be suppressed by putting
1665 @code{no-dependencies} in the variable @code{AUTOMAKE_OPTIONS}.
1666 @vindex AUTOMAKE_OPTIONS
1667 @opindex no-dependencies
1669 If you unpack a distribution made by @code{make dist}, and you want to
1670 turn on the dependency-tracking code again, simply re-run
1671 @code{automake}.
1673 The actual dependency files are put under the build directory, in a
1674 subdirectory named @file{.deps}.  These depencencies are machine
1675 specific.  It is safe to delete them if you like; they will be
1676 automatically recreated during the next build.
1679 @node Other objects
1680 @chapter Other Derived Objects
1682 Automake can handle derived objects which are not C programs.  Sometimes
1683 the support for actually building such objects must be explicitly
1684 supplied, but Automake will still automatically handle installation and
1685 distribution.
1687 @menu
1688 * Scripts::                     Executable scripts
1689 * Headers::                     Header files
1690 * Data::                        Architecture-independent data files
1691 * Sources::                     Derived sources
1692 @end menu
1695 @node Scripts
1696 @section Executable Scripts
1698 It is possible to define and install programs which are scripts.  Such
1699 programs are listed using the @samp{SCRIPTS} primary name.
1700 @code{automake} doesn't define any dependencies for scripts; the
1701 @file{Makefile.am} should include the appropriate rules.
1702 @vindex SCRIPTS
1704 @code{automake} does not assume that scripts are derived objects; such
1705 objects must be deleted by hand; see @ref{Clean} for more information.
1707 @code{automake} itself is a script that is generated at configure time
1708 from @file{automake.in}.  Here is how this is handled:
1710 @example
1711 bin_SCRIPTS = automake
1712 @end example
1714 Since @code{automake} appears in the @code{AC_OUTPUT} macro, a target
1715 for it is automatically generated.
1717 Script objects can be installed in @code{bindir}, @code{sbindir},
1718 @code{libexecdir}, or @code{pkgdatadir}.
1721 @node Headers
1722 @section Header files
1724 Header files are specified by the @samp{HEADERS} family of variables.
1725 Generally header files are not installed, so the @code{noinst_HEADERS}
1726 variable will be the most used.
1727 @vindex HEADERS
1729 All header files must be listed somewhere; missing ones will not appear
1730 in the distribution.  Often it is clearest to list uninstalled headers
1731 with the rest of the sources for a program.  @xref{A Program}.  Headers
1732 listed in a @samp{_SOURCES} variable need not be listed in any
1733 @samp{_HEADERS} variable.
1735 Headers can be installed in @code{includedir}, @code{oldincludedir}, or
1736 @code{pkgincludedir}.
1739 @node Data
1740 @section Architecture-independent data files
1742 Automake supports the installation of miscellaneous data files using the
1743 @samp{DATA} family of variables.
1744 @vindex DATA
1746 Such data can be installed in the directories @code{datadir},
1747 @code{sysconfdir}, @code{sharedstatedir}, @code{localstatedir}, or
1748 @code{pkgdatadir}.
1750 By default, data files are not included in a distribution.
1752 Here is how @code{automake} installs its auxiliary data files:
1754 @example
1755 pkgdata_DATA = clean-kr.am clean.am @dots{}
1756 @end example
1759 @node Sources
1760 @section Built sources
1762 Occasionally a file which would otherwise be called ``source'' (eg a C
1763 @samp{.h} file) is actually derived from some other file.  Such files
1764 should be listed in the @code{BUILT_SOURCES} variable.
1765 @vindex BUILT_SOURCES
1767 By default, built sources are not included in a distribution.
1769 Built sources are also not compiled by default.  You must either
1770 explicitly mention them in some other @samp{_SOURCES} variable for this
1771 to happen.
1773 Note that, in some cases, @code{BUILT_SOURCES} will work in somewhat
1774 suprising ways.  In order to get the built sources to work with
1775 automatic dependency tracking, the @file{Makefile} must depend on
1776 @code{$(BUILT_SOURCES)}.  This can cause these sources to be rebuilt at
1777 what might seem like funny times.
1780 @node Other GNU Tools
1781 @chapter Other GNU Tools
1783 Since Automake is primarily intended to generate @file{Makefile.in}s for
1784 use in GNU programs, it tries hard to interoperate with other GNU tools.
1786 @menu
1787 * Emacs Lisp::                  Emacs Lisp
1788 * gettext::                     Gettext
1789 * Guile::                       Guile
1790 * Libtool::                     Libtool
1791 @end menu
1793 @node Emacs Lisp
1794 @section Emacs Lisp
1796 Automake provides some support for Emacs Lisp.  The @samp{LISP} primary
1797 is used to hold a list of @samp{.el} files.  Possible prefixes for this
1798 primary are @samp{lisp_} and @samp{noinst_}.  Note that if
1799 @code{lisp_LISP} is defined, then @file{configure.in} must run
1800 @code{AM_PATH_LISPDIR} (fixme xref).
1801 @vindex LISP
1802 @vindex lisp_LISP
1803 @vindex noinst_LISP
1805 By default Automake will byte-compile all Emacs Lisp source files using
1806 the Emacs found by @code{AM_PATH_LISPDIR}.  If you wish to avoid
1807 byte-compiling, simply define the variable @samp{ELCFILES} to be empty.
1808 @vindex ELCFILES
1809 Byte-compiled Emacs Lisp files are not portable among all versions of
1810 Emacs, so it makes sense to turn this off if you expect sites to have
1811 more than one version of Emacs installed.  Furthermore, many packages
1812 don't actually benefit from byte-compilation.  Still, we recommand that
1813 you leave it enabled by default.  It is probably better for sites with
1814 strange setups to cope for themselves than to make the installation less
1815 nice for everybody else.
1817 @node gettext
1818 @section Gettext
1820 If @code{AM_GNU_GETTEXT} is seen in @file{configure.in}, then Automake
1821 turns on support for GNU gettext, a message catalog system for
1822 internationalization
1823 (@pxref{GNU Gettext, , , gettext, GNU gettext utilities}).
1825 The @code{gettext} support in Automake requires the addition of two
1826 subdirectories to the package, @file{intl} and @file{po}.  Automake
1827 ensure that these directories exist and are mentioned in @code{SUBDIRS}.
1829 Furthermore, Automake checks that the definition of @samp{ALL_LINGUAS}
1830 in @file{configure.in} corresponds to all the valid @samp{.po} files,
1831 and nothing more.
1834 @node Guile
1835 @section Guile
1837 Automake provides some automatic support for writing Guile modules.
1838 Automake will turn on Guile support if the @code{AM_INIT_GUILE_MODULE}
1839 macro is used in @file{configure.in}.
1841 Right now Guile support just means that the @code{AM_INIT_GUILE_MODULE}
1842 macro is understood to mean:
1843 @itemize @bullet
1844 @item
1845 @code{AM_INIT_AUTOMAKE} is run.
1847 @item
1848 @code{AC_CONFIG_AUX_DIR} is run, with a path of @file{..}.
1849 @end itemize
1851 As the Guile module code matures, no doubt the Automake support will
1852 grow as well.
1854 @node Libtool
1855 @section Libtool
1857 Automake provides support for GNU Libtool (@pxref{Top, , The Libtool
1858 Manual, libtool, The Libtool Manual}) with the @samp{LTLIBRARIES}
1859 primary.  @xref{A Shared Library}.
1861 @node Documentation
1862 @chapter Building documentation
1864 Currently Automake provides support for Texinfo and man pages.
1866 @menu
1867 * Texinfo::                     Texinfo
1868 * Man pages::                   Man pages
1869 @end menu
1872 @node Texinfo
1873 @section Texinfo
1875 If the current directory contains Texinfo source, you must declare it
1876 with the @samp{TEXINFOS} primary.  Generally Texinfo files are converted
1877 into info, and thus the @code{info_TEXINFOS} macro is most commonly used
1878 here.  Note that any Texinfo source file must end in the @samp{.texi} or
1879 @samp{.texinfo} extension.
1880 @vindex TEXINFOS
1881 @vindex info_TEXINFOS
1883 If the @samp{.texi} file @code{@@include}s @file{version.texi}, then that
1884 file will be automatically generated.  @file{version.texi} defines three
1885 Texinfo macros you can reference: @code{EDITION}, @code{VERSION}, and
1886 @code{UPDATED}.  The first two hold the version number of your package
1887 (but are kept separate for clarity); the last is the date the primary
1888 file was last modified.  The @file{version.texi} support requires the
1889 @code{mdate-sh} program; this program is supplied with Automake.
1891 Sometimes an info file actually depends on more than one @samp{.texi}
1892 file.  For instance, in GNU Hello, @file{hello.texi} includes the file
1893 @file{gpl.texi} You can tell Automake about these dependencies using the
1894 @samp{@var{texi}_TEXINFOS} variable.  Here is how Hello does it:
1895 @vindex TEXINFOS
1896 @vindex _TEXINFOS
1898 @example
1899 info_TEXINFOS = hello.texi
1900 hello_TEXINFOS = gpl.texi
1901 @end example
1903 By default, Automake requires the file @file{texinfo.tex} to appear in
1904 the same directory as the Texinfo source.  However, if you used
1905 @code{AC_CONFIG_AUX_DIR} in @file{configure.in}, then @file{texinfo.tex}
1906 is looked for there.  Automake supplies @file{texinfo.tex} if
1907 @samp{--add-missing} is given.
1909 If your package has Texinfo files in many directories, you can use the
1910 variable @code{TEXINFO_TEX} to tell automake where to find the canonical
1911 @file{texinfo.tex} for your package.  The value of this variable should
1912 be the relative path from the current @file{Makefile.am} to
1913 @file{texinfo.tex}:
1915 @example
1916 TEXINFO_TEX = ../doc/texinfo.tex
1917 @end example
1919 The option @samp{no-texinfo.tex} can be used to eliminate the
1920 requirement for @file{texinfo.tex}.  Use of the variable
1921 @code{TEXINFO_TEX} is preferable, however, because that allows the
1922 @code{dvi} target to still work.
1924 Automake generates an @code{install-info} target; some people apparently
1925 use this.  By default, info pages are installed by @samp{make install}.
1926 This can be prevented via the @code{no-installinfo} option.
1929 @node Man pages
1930 @section Man pages
1932 A package can also include man pages.  (Though see the GNU standards on
1933 this matter, @ref{Man Pages, , , standards, The GNU Coding
1934 Standards}.)  Man pages are declared using the @samp{MANS} primary.
1935 Generally the @code{man_MANS} macro is used.  Man pages are
1936 automatically installed in the correct subdirectory of @code{mandir},
1937 based on the file extension.
1938 @vindex MANS
1939 @vindex man_MANS
1941 @c Use @samp{make install} per documentation: (texi)code.
1942 By default, man pages are installed by @samp{make install}.  However,
1943 since the GNU project does not require man pages, many maintainers do
1944 not expend effort to keep the man pages up to date.  In these cases, the
1945 @code{no-installman} option will prevent the man pages from being
1946 installed by default.  The user can still explicitly install them via
1947 @samp{make install-man}.
1948 @opindex no-installman
1949 @trindex install-man
1951 Here is how the documentation is handled in GNU @code{cpio} (which
1952 includes both Texinfo documentation and man pages):
1954 @example
1955 info_TEXINFOS = cpio.texi
1956 man_MANS = cpio.1 mt.1
1957 @end example
1959 Texinfo source and info pages are all considered to be source for the
1960 purposes of making a distribution.
1962 Man pages are not currently considered to be source, because it is not
1963 uncommon for man pages to be automatically generated.
1966 @node Install
1967 @chapter What Gets Installed
1969 Naturally, Automake handles the details of actually installing your
1970 program once it has been built.  All @code{PROGRAMS}, @code{SCRIPTS},
1971 @code{LIBRARIES}, @code{LISP}, @code{DATA} and @code{HEADERS} are
1972 automatically installed in the appropriate places.
1974 Automake also handles installing any specified info and man pages.
1976 Automake generates separate @code{install-data} and @code{install-exec}
1977 targets, in case the installer is installing on multiple machines which
1978 share directory structure---these targets allow the machine-independent
1979 parts to be installed only once.  The @code{install} target depends on
1980 both of these targets.
1981 @trindex install-data
1982 @trindex install-exec
1983 @trindex install
1985 Automake also generates an @code{uninstall} target, and an
1986 @code{installdirs} target.
1987 @trindex uninstall
1988 @trindex installdirs
1990 It is possible to extend this mechanism by defining an
1991 @code{install-exec-local} or @code{install-data-local} target.  If these
1992 targets exist, they will be run at @samp{make install} time.
1993 @trindex install-exec-local
1994 @trindex install-data-local
1996 Variables using the standard directory prefixes @samp{data},
1997 @samp{info}, @samp{man}, @samp{include}, @samp{oldinclude},
1998 @samp{pkgdata}, or @samp{pkginclude} (eg @samp{data_DATA}) are installed
1999 by @samp{install-data}.
2001 Variables using the standard directory prefixes @samp{bin}, @samp{sbin},
2002 @samp{libexec}, @samp{sysconf}, @samp{localstate}, @samp{lib}, or
2003 @samp{pkglib} (eg @samp{bin_PROGRAMS}) are installed by
2004 @samp{install-exec}.
2006 Any variable using a user-defined directory prefix with @samp{exec} in
2007 the name (eg @samp{myexecbin_PROGRAMS} is installed by
2008 @samp{install-exec}.  All other user-defined prefixes are installed by
2009 @samp{install-data}.
2012 @node Clean
2013 @chapter What Gets Cleaned
2015 The GNU Makefile Standards specify a number of different clean rules.
2016 @c FIXME xref
2017 Generally the files that can cleaned are determined automatically by
2018 Automake.  Of course, Automake also recognizes some variables that can
2019 be defined to specify additional files to clean.  These variables are
2020 @code{MOSTLYCLEANFILES}, @code{CLEANFILES}, @code{DISTCLEANFILES}, and
2021 @code{MAINTAINERCLEANFILES}.
2022 @vindex MOSTLYCLEANFILES
2023 @vindex CLEANFILES
2024 @vindex DISTCLEANFILES
2025 @vindex MAINTAINERCLEANFILES
2028 @node Dist
2029 @chapter What Goes in a Distribution
2031 The @code{dist} target in the generated @file{Makefile.in} can be used
2032 to generate a gzip'd @code{tar} file for distribution.  The tar file is
2033 named based on the @samp{PACKAGE} and @samp{VERSION} variables; more
2034 precisely it is named @samp{@var{package}-@var{version}.tar.gz}.
2035 @cvindex PACKAGE
2036 @cvindex VERSION
2037 @trindex dist
2039 For the most part, the files to distribute are automatically found by
2040 Automake: all source files are automatically included in a distribution,
2041 as are all @file{Makefile.am}s and @file{Makefile.in}s.  Automake also
2042 has a built-in list of commonly used files which, if present in the
2043 current directory, are automatically included.  This list is printed by
2044 @samp{automake --help}.  Also, files which are read by @code{configure}
2045 (ie, the source files corresponding to the files specified in the
2046 @code{AC_OUTPUT} invocation) are automatically distributed.
2048 Still, sometimes there are files which must be distributed, but which
2049 are not covered in the automatic rules.  These files should be listed in
2050 the @code{EXTRA_DIST} variable.  Note that @code{EXTRA_DIST} can only
2051 handle files in the current directory; files in other directories will
2052 cause @code{make dist} runtime failures.
2053 @vindex EXTRA_DIST
2055 If you define @code{SUBDIRS}, automake will recursively include the
2056 subdirectories in the distribution.  If @code{SUBDIRS} is defined
2057 conditionally (@pxref{Conditionals}), automake will normally include all
2058 directories that could possibly appear in @code{SUBDIRS} in the
2059 distribution.  If you need to specify the set of directories
2060 conditionally, you can set the variable @code{DIST_SUBDIRS} to the exact
2061 list of subdirectories to include in the distribution.
2062 @vindex DIST_SUBDIRS
2064 Occasionally it is useful to be able to change the distribution before
2065 it is packaged up.  If the @code{dist-hook} target exists, it is run
2066 after the distribution directory is filled, but before the actual tar
2067 (or shar) file is created.  One way to use this is for distributing
2068 files in subdirectories for which a new @file{Makefile.am} is overkill:
2070 @example
2071 dist-hook:
2072         mkdir $(distdir)/random
2073         cp -p random/a1 random/a2 $(distdir)/random
2074 @end example
2076 Automake also generates a @code{distcheck} target which can be help to
2077 ensure that a given distribution will actually work.  @code{distcheck}
2078 makes a distribution, and then tries to do a @code{VPATH} build.
2079 @trindex distcheck
2080 @c FIXME: document distcheck-hook here
2082 @node Tests
2083 @chapter Support for test suites
2085 Automake supports a two forms of test suite.
2087 If the variable @code{TESTS} is defined, its value is taken to be a list
2088 of programs to run in order to do the testing.  The programs can either
2089 be derived objects or source objects; the generated rule will look both
2090 in @var{srcdir} and @file{.}.  The number of failures will be printed at
2091 the end of the run.  The variable @code{TESTS_ENVIRONMENT} can be used
2092 to set environment variables for the test run; the environment variable
2093 @code{srcdir} is set in the rule.  If all your test programs are
2094 scripts, you can also set @code{TESTS_ENVIRONMENT} to an invocation of
2095 the shell (eg @samp{$(SHELL) -x}); this can be useful for debugging the
2096 tests.
2097 @vindex TESTS
2098 @vindex TESTS_ENVIRONMENT
2100 If @samp{dejagnu} appears in @code{AUTOMAKE_OPTIONS}, then the a
2101 @code{dejagnu}-based test suite is assumed.  The value of the variable
2102 @code{DEJATOOL} is passed as the @code{--tool} argument to
2103 @code{runtest}; it defaults to the name of the package.  The variables
2104 @code{EXPECT}, @code{RUNTEST} and @code{RUNTESTFLAGS} can also be
2105 overridden to provide project-specific values.  For instance, you will
2106 need to do this if you are testing a compiler toolchain, because the
2107 default values do not take into account host and target names.
2108 @opindex dejagnu
2109 @vindex DEJATOOL
2110 @vindex EXPECT
2111 @vindex RUNTEST
2112 @vindex RUNTESTFLAGS
2113 @c FIXME xref dejagnu
2115 In either case, the testing is done via @samp{make check}.
2118 @node Options
2119 @chapter Changing Automake's Behavior
2121 Various features of Automake can be controlled by options in the
2122 @file{Makefile.am}.  Such options are listed in a special variable named
2123 @code{AUTOMAKE_OPTIONS}.  Currently understood options are:
2124 @vindex AUTOMAKE_OPTIONS
2126 @table @asis
2127 @item @code{gnits}
2128 @itemx @code{gnu}
2129 @itemx @code{foreign}
2130 Set the strictness as appropriate.
2132 @item @code{no-installman}
2133 The generated @file{Makefile.in} will not cause man pages to be
2134 installed by default.  However, an @code{install-man} target will still
2135 be available for optional installation.  This option is disallowed at
2136 @samp{GNU} strictness and above.
2137 @trindex install-man
2139 @item @code{no-installinfo}
2140 The generated @file{Makefile.in} will not cause info pages to be built
2141 or installed by default.  However, @code{info} and @code{install-info}
2142 targets will still be available.  This option is disallowed at
2143 @samp{GNU} strictness and above.
2144 @trindex info
2145 @trindex install-info
2147 @item @code{ansi2knr}
2148 @itemx @code{path/ansi2knr}
2149 Turn on automatic de-ANSI-fication.  @xref{ANSI}.  If preceeded by a
2150 path, the generated @file{Makefile.in} will look in the specified
2151 directory to find the @file{ansi2knr} program.  Generally the path
2152 should be a relative path to another directory in the same distribution
2153 (though Automake currently does not check this).
2155 @item @code{dejagnu}
2156 Cause @code{dejagnu}-specific rules to be generated.  @xref{Tests}.
2158 @item @code{dist-shar}
2159 Generate a @code{dist-shar} target as well as the ordinary @code{dist}
2160 target.  This new target will create a shar archive of the
2161 distribution.
2162 @trindex dist-shar
2164 @item @code{dist-zip}
2165 Generate a @code{dist-zip} target as well as the ordinary @code{dist}
2166 target.  This new target will create a zip archive of the distribution.
2167 @trindex dist-zip
2169 @item @code{dist-tarZ}
2170 Generate a @code{dist-tarZ} target as well as the ordinary @code{dist}
2171 target.  This new target will create a compressed tar archive of the
2172 distribution; a traditional @code{tar} and @code{compress} will be
2173 assumed.  Warning: if you are actually using @code{GNU tar}, then the
2174 generated archive might contain nonportable constructs.
2175 @trindex dist-tarZ
2177 @item @code{no-dependencies}
2178 This is similar to using @samp{--include-deps} on the command line, but
2179 is useful for those situations where you don't have the necessary bits
2180 to make automatic dependency tracking work @xref{Dependencies}.  In this
2181 case the effect is to effectively disable automatic dependency tracking.
2183 @item @code{no-texinfo.tex}
2184 Don't require @file{texinfo.tex}, even if there are texinfo files in
2185 this directory.
2187 @item @var{version}
2188 A version number (eg @samp{0.30}) can be specified.  If Automake is not
2189 newer than the version specified, creation of the @file{Makefile.in}
2190 will be suppressed.
2191 @end table
2193 Unrecognized options are diagnosed by @code{automake}.
2196 @node Miscellaneous
2197 @chapter Miscellaneous Rules
2199 There are a few rules and variables that didn't fit anywhere else.
2201 @menu
2202 * Tags::                        Interfacing to etags and mkid
2203 * Suffixes::                    Handling new file extensions
2204 @end menu
2207 @node Tags
2208 @section Interfacing to @code{etags}
2210 @code{automake} will generate rules to generate @file{TAGS} files for
2211 use with GNU Emacs under some circumstances.
2213 If any C source code or headers are present, then @code{tags} and
2214 @code{TAGS} targets will be generated for the directory.
2215 @trindex tags
2217 At the topmost directory of a multi-directory package, a @code{tags}
2218 target file will be generated which, when run, will generate a
2219 @file{TAGS} file that includes by reference all @file{TAGS} files from
2220 subdirectories.
2222 Also, if the variable @code{ETAGS_ARGS} is defined, a @code{tags} target
2223 will be generated.  This variable is intended for use in directories
2224 which contain taggable source that @code{etags} does not understand.
2225 @vindex ETAGS_ARGS
2227 Here is how Automake generates tags for its source, and for nodes in its
2228 Texinfo file:
2230 @example
2231 ETAGS_ARGS = automake.in --lang=none \
2232  --regex='/^@@node[ \t]+\([^,]+\)/\1/' automake.texi
2233 @end example
2235 If you add filenames to @samp{ETAGS_ARGS}, you will probably also
2236 want to set @samp{TAGS_DEPENDENCIES}.  The contents of this variable
2237 are added directly to the dependencies for the @code{tags} target.
2238 @vindex TAGS_DEPENDENCIES
2240 Automake will also generate an @code{ID} target which will run
2241 @code{mkid} on the source.  This is only supported on a
2242 directory-by-directory basis.
2243 @trindex id
2246 @node Suffixes
2247 @section Handling new file extensions
2249 It is sometimes useful to introduce a new implicit rule to handle a file
2250 type that Automake does not know about.  If this is done, you must
2251 notify GNU Make of the new suffixes.  This can be done by putting a list
2252 of new suffixes in the @code{SUFFIXES} variable.
2253 @vindex SUFFIXES
2255 For instance, currently automake does not provide any Java support.  If
2256 you wrote a macro to generate @samp{.class} files from @samp{.java}
2257 source files, you would also need to add these suffixes to the list:
2259 @example
2260 SUFFIXES = .java .class
2261 @end example
2263 @node Conditionals
2264 @chapter Conditionals
2266 Automake supports a simple type of conditionals.
2268 @cvindex AM_CONDITIONAL
2269 Before using a conditional, you must define it by using
2270 @code{AM_CONDITIONAL} in the @code{configure.in} file.  The
2271 @code{AM_CONDITIONAL} macro takes two arguments.
2273 The first argument to @code{AM_CONDITIONAL} is the name of the
2274 conditional.  This should be a simple string starting with a letter and
2275 containing only letters, digits, and underscores.
2277 The second argument to @code{AM_CONDITIONAL} is a shell condition,
2278 suitable for use in a shell if statement.  The condition is evaluated
2279 when @code{configure} is run.
2281 Conditionals typically depend upon options which the user provides to
2282 the @code{configure} script.  Here is an example of how to write a
2283 conditional which is true if the user uses the @samp{--enable-debug}
2284 option.
2286 @example
2287 AC_ARG_ENABLE(debug,
2288 [  --enable-debug    Turn on debugging],
2289 [case "$@{enableval@}" in
2290   yes) debug=true ;;
2291   no)  debug=false ;;
2292   *) AC_MSG_ERROR(bad value $@{enableval@} for --enable-debug) ;;
2293 esac],[debug=false])
2294 AM_CONDITIONAL(DEBUG, test x$debug = xtrue)
2295 @end example
2297 Here is an example of how to use that conditional in @file{Makefile.am}:
2299 @example
2300 if DEBUG
2301 DBG = debug
2302 else
2303 DBG =
2304 endif
2305 noinst_PROGRAMS = $(DBG)
2306 @end example
2308 This trivial example could also be handled using EXTRA_PROGRAMS
2309 (@pxref{A Program}).
2311 You may only test a single variable in an @code{if} statement.  The
2312 @code{else} statement may be omitted.  Conditionals may be nested to any
2313 depth.
2315 Note that conditionals in Automake are not the same as conditionals in
2316 GNU Make.  Automake conditionals are checked at configure time by the
2317 @file{configure} script, and affect the translation from
2318 @file{Makefile.in} to @file{Makefile}.  They are based on options passed
2319 to @file{configure} and on results that @file{configure} has discovered
2320 about the host system.  GNU Make conditionals are checked at make time,
2321 and are based on variables passed to the make program or defined in the
2322 @file{Makefile}.
2324 Automake conditionals will work with any make program.
2326 @node Gnits
2327 @chapter The effect of @code{--gnu} and @code{--gnits}
2329 The @samp{--gnu} option (or @samp{gnu} in the @samp{AUTOMAKE_OPTIONS}
2330 variable) causes @code{automake} to check the following:
2332 @itemize @bullet
2333 @item
2334 The files @file{INSTALL}, @file{NEWS}, @file{README}, @file{COPYING},
2335 @file{AUTHORS}, and @file{ChangeLog} are required at the topmost
2336 directory of the package.
2338 @item
2339 The options @samp{no-installman} and @samp{no-installinfo} are
2340 prohibited.
2341 @end itemize
2343 Note that this option will be extended in the future to do even more
2344 checking; it is advisable to be familiar with the precise requirements
2345 of the GNU standards.  Also, @samp{--gnu} can require certain
2346 non-standard GNU programs to exist for use by various maintainer-only
2347 targets; for instance in the future @code{pathchk} might be required for
2348 @samp{make dist}.
2350 The @samp{--gnits} option does everything that @samp{--gnu} does, and
2351 checks the following as well:
2353 @itemize @bullet
2354 @item
2355 @samp{make dist} will check to make sure the @file{NEWS} file has been
2356 updated to the current version.
2358 @item
2359 The file @file{COPYING.LIB} is prohibited.  The LGPL is apparently
2360 considered a failed experiment.
2362 @item
2363 @samp{VERSION} is checked to make sure its format complies with Gnits
2364 standards.
2365 @c FIXME xref when standards are finished
2367 @item
2368 If @samp{VERSION} indicates that this is an alpha release, and the file
2369 @file{README-alpha} appears in the topmost directory of a package, then
2370 it is included in the distribution.  This is done in @samp{--gnits}
2371 mode, and no other, because this mode is the only one where version
2372 number formats are constrained, and hence the only mode where
2373 @code{automake} can automatically determine whether @file{README-alpha}
2374 should be included.
2376 @item
2377 The file @file{THANKS} is required.
2378 @end itemize
2381 @node Cygnus
2382 @chapter The effect of @code{--cygnus}
2384 Cygnus Solutions has slightly different rules for how a
2385 @file{Makefile.in} is to be constructed.  Passing @samp{--cygnus} to
2386 @code{automake} will cause any generated @file{Makefile.in} to comply
2387 with Cygnus rules.
2389 Here are the precise effects of @samp{--cygnus}:
2391 @itemize @bullet
2392 @item
2393 Info files are always created in the build directory, and not in the
2394 source directory.
2396 @item
2397 @file{texinfo.tex} is not required if a Texinfo source file is
2398 specified.  The assumption is that the file will be supplied, but in a
2399 place that @code{automake} cannot find.  This assumption is an artifact
2400 of how Cygnus packages are typically bundled.
2402 @item
2403 @samp{make dist} will look for files in the build directory as well as
2404 the source directory.  This is required to support putting info files
2405 into the build directory.
2407 @item
2408 Certain tools will be searched for in the build tree as well as in the
2409 user's @samp{PATH}.  These tools are @code{runtest}, @code{expect},
2410 @code{makeinfo} and @code{texi2dvi}.
2412 @item
2413 @code{--foreign} is implied.
2415 @item
2416 The options @samp{no-installinfo} and @samp{no-dependencies} are
2417 implied.
2419 @item
2420 The macros @samp{AM_MAINTAINER_MODE} and @samp{AM_CYGWIN32} are
2421 required.
2422 @end itemize
2424 GNU maintainers are advised to use @samp{gnu} strictness in preference
2425 to the special Cygnus mode.
2428 @node Extending
2429 @chapter When Automake Isn't Enough
2431 Automake's implicit copying semantics means that many problems can be
2432 worked around by simply adding some @code{make} targets and rules to
2433 @file{Makefile.in}.  @code{automake} will ignore these additions.
2435 There are some caveats to doing this.  Although you can overload a
2436 target already used by @code{automake}, it is often inadvisable,
2437 particularly in the topmost directory of a non-flat package.  However,
2438 various useful targets have a @samp{-local} version you can specify in your
2439 @file{Makefile.in}.  Automake will supplement the standard target with
2440 these user-supplied targets.
2442 The targets that support a local version are @code{all}, @code{info},
2443 @code{dvi}, @code{check}, @code{install-data}, @code{install-exec},
2444 @code{uninstall}, and the various @code{clean} targets
2445 (@code{mostlyclean}, @code{clean}, @code{distclean}, and
2446 @code{maintainer-clean}).  Note that there are no
2447 @code{uninstall-exec-local} or @code{uninstall-data-local} targets; just
2448 use @code{uninstall-local}.  It doesn't make sense to uninstall just
2449 data or just executables.
2450 @trindex all
2451 @trindex info
2452 @trindex dvi
2453 @trindex check
2454 @trindex install-data
2455 @trindex install-exec
2456 @trindex uninstall
2458 For instance, here is one way to install a file in @file{/etc}:
2460 @example
2461 install-data-local:
2462         $(INSTALL_DATA) $(srcdir)/afile /etc/afile
2463 @end example
2465 Some targets also have a way to run another target, called a @dfn{hook},
2466 after their work is done.  The hook is named after the principal target,
2467 with @samp{-hook} appended.  The targets allowing hooks are
2468 @code{install-data}, @code{install-exec}, @code{dist}, and
2469 @code{distcheck}.
2470 @trindex install-data-hook
2471 @trindex install-exec-hook
2472 @trindex dist-hook
2474 For instance, here is how to create a hard link to an installed program:
2476 @example
2477 install-exec-hook:
2478         ln $(bindir)/program $(bindir)/proglink
2479 @end example
2481 @c FIXME should include discussion of variables you can use in these
2482 @c rules
2485 @node Distributing
2486 @chapter Distributing @file{Makefile.in}s
2488 Automake places no restrictions on the distribution of the resulting
2489 @file{Makefile.in}s.  We still encourage software authors to distribute
2490 their work under terms like those of the GPL, but doing so is not
2491 required to use Automake.
2493 Some of the files that can be automatically installed via the
2494 @code{--add-missing} switch do fall under the GPL; examine each file
2495 to see.
2498 @node Future
2499 @chapter Some ideas for the future
2501 Here are some things that might happen in the future:
2503 @itemize @bullet
2504 @item
2505 HTML support.
2507 @item
2508 The output will be cleaned up.  For instance, only variables which are
2509 actually used will appear in the generated @file{Makefile.in}.
2511 @item
2512 There will be support for automatically recoding a distribution.  The
2513 intent is to allow a maintainer to use whatever character set is most
2514 convenient locally, but for all distributions to be Unicode or
2515 @w{ISO 10646} with the UTF-8 encoding.
2517 @item
2518 Support for automatically generating packages (eg Debian packages, RPM
2519 packages, Solaris packages, etc).  This will happen more quickly if
2520 someone with package-building experience can tell me what would be
2521 helpful.
2523 @item
2524 Rewrite in Guile.  This won't happen in the near future, but it will
2525 eventually happen.
2526 @end itemize
2528 @node Index
2529 @unnumbered Index
2531 @printindex cp
2533 @contents
2534 @bye