uniquify files passed to etags
[automake.git] / automake.texi
blobf5f0d12e1c373a1455cbdeb5fa2b32e077d324ca
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, 98 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
126  --- The Detailed Node Listing ---
128 General ideas
130 * General Operation::           General operation of Automake
131 * Depth::                       The kinds of packages
132 * Strictness::                  Standards conformance checking
133 * Uniform::                     The Uniform Naming Scheme
134 * Canonicalization::            How derived variables are named
136 Some example packages
138 * Complete::                    A simple example, start to finish
139 * Hello::                       A classic program
140 * etags::                       Building etags and ctags
142 Scanning @file{configure.in}
144 * Requirements::                Configuration requirements
145 * Optional::                    Other things Automake recognizes
146 * Invoking aclocal::            Auto-generating aclocal.m4
147 * Macros::                      Autoconf macros supplied with Automake
148 * Extending aclocal::           Writing your own aclocal macros
150 Building Programs and Libraries
152 * A Program::                   Building a program
153 * A Library::                   Building a library
154 * LIBOBJS::                     Special handling for LIBOBJS and ALLOCA
155 * A Shared Library::            Building a Libtool library
156 * Program variables::           Variables used when building a program
157 * Yacc and Lex::                Yacc and Lex support
158 * C++::                         
159 * ANSI::                        Automatic de-ANSI-fication
160 * Dependencies::                Automatic dependency tracking
162 Other Derived Objects
164 * Scripts::                     Executable scripts
165 * Headers::                     Header files
166 * Data::                        Architecture-independent data files
167 * Sources::                     Derived sources
169 Other GNU Tools
171 * Emacs Lisp::                  Emacs Lisp
172 * gettext::                     Gettext
173 * Guile::                       Guile
174 * Libtool::                     Libtool
176 Building documentation
178 * Texinfo::                     Texinfo
179 * Man pages::                   Man pages
181 Miscellaneous Rules
183 * Tags::                        Interfacing to etags and mkid
184 * Suffixes::                    Handling new file extensions
185 @end menu
187 @end ifinfo
189 @node Introduction, Generalities, Top, Top
190 @chapter Introduction
192 Automake is a tool for automatically generating @file{Makefile.in}s from
193 files called @file{Makefile.am}.  Each @file{Makefile.am} is basically a
194 series of @code{make} macro definitions (with rules being thrown in
195 occasionally).  The generated @file{Makefile.in}s are compliant with the
196 GNU Makefile standards.
198 The GNU Makefile Standards Document
199 (@pxref{Makefile Conventions, , , standards, The GNU Coding Standards})
200 is long, complicated, and subject to change.  The goal of Automake is to
201 remove the burden of Makefile maintenance from the back of the
202 individual GNU maintainer (and put it on the back of the Automake
203 maintainer).
205 The typical Automake input files is simply a series of macro
206 definitions.  Each such file is processed to create a
207 @file{Makefile.in}.  There should generally be one @file{Makefile.am}
208 per directory of a project.
210 Automake does constrain a project in certain ways; for instance it
211 assumes that the project uses Autoconf
212 (@pxref{Top, , The Autoconf Manual, autoconf, The Autoconf Manual}),
213 and enforces certain restrictions on the @file{configure.in} contents.
215 Automake requires @code{perl} in order to generate the
216 @file{Makefile.in}s.  However, the distributions created by Automake are
217 fully GNU standards-compliant, and do not require @code{perl} in order
218 to be built.
220 Mail suggestions and bug reports for Automake to
221 @email{automake-bugs@@gnu.ai.mit.edu}.
224 @node Generalities, Examples, Introduction, Top
225 @chapter General ideas
227 There are a few basic ideas that will help understand how Automake
228 works.
230 @menu
231 * General Operation::           General operation of Automake
232 * Depth::                       The kinds of packages
233 * Strictness::                  Standards conformance checking
234 * Uniform::                     The Uniform Naming Scheme
235 * Canonicalization::            How derived variables are named
236 @end menu
238 @node General Operation, Depth, Generalities, Generalities
239 @section General Operation
241 Automake works by reading a @file{Makefile.am} and generating a
242 @file{Makefile.in}.  Certain macros and targets defined in the
243 @file{Makefile.am} instruct automake to generate more specialized code;
244 for instances a @samp{bin_PROGRAMS} macro definition will cause targets
245 for compiling and linking to be generated.
247 The macro definitions and targets in the @file{Makefile.am} are copied
248 into the generated file.  This allows you to add arbitrary code into the
249 generated @file{Makefile.in}.  For instance the Automake distribution
250 includes a non-standard @code{cvs-dist} target, which the Automake
251 maintainer uses to make distributions from his source control system.
253 Note that GNU make extensions are not recognized by Automake.  Using
254 such extensions in a @file{Makefile.am} will lead to errors or confusing
255 behavior.
257 Automake tries to group comments with adjoining targets (or variable
258 definitions) in an intelligent way.
260 A target defined in @file{Makefile.am} generally overrides any such
261 target of a similar name that would be automatically generated by
262 @code{automake}.  Although this is a supported feature, it is generally
263 best to avoid making use of it, as sometimes the generated rules are
264 very particular.
266 Similarly, a variable defined in @file{Makefile.am} will override any
267 definition of the variable that @code{automake} would ordinarily create.
268 This feature is more often useful than the ability to override a target
269 definition.  Be warned that many of the variables generated by
270 @code{automake} are considered to be for internal use only, and their
271 names might change in future releases.
273 When examining a variable definition, Automake will recursively examine
274 variables referenced in the definition.  E.g., if Automake is looking at
275 the content of @samp{foo_SOURCES} in this snippet
277 @example
278 xs = a.c b.c
279 foo_SOURCES = c.c $(xs)
280 @end example
282 it would use the files @file{a.c}, @file{b.c}, and @file{c.c} as the
283 contents of @samp{foo_SOURCES}.
285 Automake also allows a form of comment which is @emph{not} copied into
286 the output; all lines beginning with @samp{##} are completely ignored by
287 Automake.
289 It is customary to make the first line of @file{Makefile.am} read:
291 @example
292 ## Process this file with automake to produce Makefile.in
293 @end example
295 @c FIXME discuss putting a copyright into Makefile.am here?  I would but
296 @c I don't know quite what to say.
298 @c FIXME document customary ordering of Makefile.am here!
302 @node Depth, Strictness, General Operation, Generalities
303 @section Depth
304 @code{automake} supports three kinds of directory hierarchy: ``flat'',
305 ``shallow'', and ``deep''.
307 A @dfn{flat} package is one in which all the files are in a single
308 directory.  The @file{Makefile.am} for such a package by definition
309 lacks a @code{SUBDIRS} macro.  An example of such a package is
310 @code{termutils}.
311 @vindex SUBDIRS
313 A @dfn{deep} package is one in which all the source lies in
314 subdirectories; the top level directory contains mainly configuration
315 information.  GNU cpio is a good example of such a package, as is GNU
316 @code{tar}.  The top level @file{Makefile.am} for a deep package will
317 contain a @code{SUBDIRS} macro, but no other macros to define objects
318 which are built.
320 A @dfn{shallow} package is one in which the primary source resides in
321 the top-level directory, while various parts (typically libraries)
322 reside in subdirectories.  Automake is one such package (as is GNU
323 @code{make}, which does not currently use @code{automake}).
326 @node Strictness, Uniform, Depth, Generalities
327 @section Strictness
328 While Automake is intended to be used by maintainers of GNU packages, it
329 does make some effort to accommodate those who wish to use it, but do
330 not want to use all the GNU conventions.
332 To this end, Automake supports three levels of @dfn{strictness}---the
333 strictness indicating how stringently Automake should check standards
334 conformance.
336 The valid strictness levels are:
338 @table @samp
339 @item foreign
340 Automake will check for only those things which are absolutely
341 required for proper operations.  For instance, whereas GNU standards
342 dictate the existence of a @file{NEWS} file, it will not be required in
343 this mode.  The name comes from the fact that Automake is intended to be
344 used for GNU programs; these relaxed rules are not the standard mode of
345 operation.
347 @item gnu
348 Automake will check---as much as possible---for compliance to the GNU
349 standards for packages.  This is the default.
351 @item gnits
352 Automake will check for compliance to the as-yet-unwritten Gnits
353 standards.  These are based on the GNU standards, but are even more
354 detailed.  Unless you are a Gnits standards contributor, it is
355 recommended that you avoid this option until such time as the Gnits
356 standard is actually published.
357 @end table
359 For more information on the precise implications of the strictness
360 level, see @xref{Gnits}.
363 @node Uniform, Canonicalization, Strictness, Generalities
364 @section The Uniform Naming Scheme
365 Automake variables generally follow a uniform naming scheme that makes
366 it easy to decide how programs (and other derived objects) are built,
367 and how they are installed.  This scheme also supports @code{configure}
368 time determination of what should be built.
370 At @code{make} time, certain variables are used to determine which
371 objects are to be built.  These variables are called @dfn{primary}
372 variables.  For instance, the primary variable @code{PROGRAMS} holds a
373 list of programs which are to be compiled and linked.
374 @vindex PROGRAMS
376 A different set of variables is used to decide where the built objects
377 should be installed.  These variables are named after the primary
378 variables, but have a prefix indicating which standard directory should
379 be used as the installation directory.  The standard directory names are
380 given in the GNU standards
381 (@pxref{Directory Variables, , , standards, The GNU Coding
382 Standards}).
383 Automake extends this list with @code{pkglibdir}, @code{pkgincludedir},
384 and @code{pkgdatadir}; these are the same as the non-@samp{pkg}
385 versions, but with @samp{@@PACKAGE@@} appended.  For instance,
386 @code{pkglibdir} is defined as @code{$(datadir)/@@PACKAGE@@}.
387 @cvindex PACKAGE
389 For each primary, there is one additional variable named by prepending
390 @samp{EXTRA_} to the primary name.  This variable is used to list
391 objects which may or may not be built, depending on what
392 @code{configure} decides.  This variable is required because Automake
393 must statically know the entire list of objects to be built in order to
394 generate a @file{Makefile.in} that will work in all cases.
396 For instance, @code{cpio} decides at configure time which programs are
397 built.  Some of the programs are installed in @code{bindir}, and some
398 are installed in @code{sbindir}:
400 @example
401 EXTRA_PROGRAMS = mt rmt
402 bin_PROGRAMS = cpio pax
403 sbin_PROGRAMS = @@PROGRAMS@@
404 @end example
406 Defining a primary variable without a prefix (eg @code{PROGRAMS}) is an
407 error.
409 Note that the common @samp{dir} suffix is left off when constructing the
410 variable names; thus one writes @samp{bin_PROGRAMS} and not
411 @samp{bindir_PROGRAMS}.
413 Not every sort of object can be installed in every directory.  Automake
414 will flag those attempts it finds in error.  Automake will also diagnose
415 obvious misspellings in directory names.
417 Sometimes the standard directories---even as augmented by Automake---
418 are not enough.  In particular it is sometimes useful, for clarity, to
419 install objects in a subdirectory of some predefined directory.  To this
420 end, Automake allows you to extend the list of possible installation
421 directories.  A given prefix (eg @samp{zar}) is valid if a variable of
422 the same name with @samp{dir} appended is defined (eg @samp{zardir}).
424 For instance, until HTML support is part of Automake, you could use this
425 to install raw HTML documentation:
427 @example
428 htmldir = $(prefix)/html
429 html_DATA = automake.html
430 @end example
432 The special prefix @samp{noinst} indicates that the objects in question
433 should not be installed at all.
435 The special prefix @samp{check} indicates that the objects in question
436 should not be built until the @code{make check} command is run.
438 Possible primary names are @samp{PROGRAMS}, @samp{LIBRARIES},
439 @samp{LISP}, @samp{SCRIPTS}, @samp{DATA}, @samp{HEADERS}, @samp{MANS},
440 and @samp{TEXINFOS}.
441 @vindex PROGRAMS
442 @vindex LIBRARIES
443 @vindex LISP
444 @vindex SCRIPTS
445 @vindex DATA
446 @vindex HEADERS
447 @vindex MANS
448 @vindex TEXINFOS
451 @node Canonicalization,  , Uniform, Generalities
452 @section How derived variables are named
454 Sometimes a Makefile variable name is derived from some text the user
455 supplies.  For instance program names are rewritten into Makefile macro
456 names.  Automake canonicalizes this text, so that it does not have to
457 follow Makefile variable naming rules.  All characters in the name
458 except for letters, numbers, and the underscore are turned into
459 underscores when making macro references.  E.g., if your program is named
460 @code{sniff-glue}, the derived variable name would be
461 @code{sniff_glue_SOURCES}, not @code{sniff-glue_SOURCES}.
464 @node Examples, Invoking Automake, Generalities, Top
465 @chapter Some example packages
467 @menu
468 * Complete::                    A simple example, start to finish
469 * Hello::                       A classic program
470 * etags::                       Building etags and ctags
471 @end menu
473 @node Complete, Hello, Examples, Examples
474 @section A simple example, start to finish
476 Let's suppose you just finished writing @code{zardoz}, a program to make
477 your head float from vortex to vortex.  You've been using
478 @code{autoconf} to provide a portability framework, but your
479 @file{Makefile.in}s have been ad-hoc.  You want to make them
480 bulletproof, so you turn to @code{automake}.
482 The first step is to update your @file{configure.in} to include the
483 commands that @code{automake} needs.  The simplest way to do this is to
484 add an @code{AM_INIT_AUTOMAKE} call just after @code{AC_INIT}:
486 @example
487 AM_INIT_AUTOMAKE(zardoz, 1.0)
488 @end example
490 Since your program doesn't have any complicating factors (e.g., it
491 doesn't use @code{gettext}, it doesn't want to build a shared library),
492 you're done with this part.  That was easy!
494 Now you must regenerate @file{configure}.  But to do that, you'll need
495 to tell @code{autoconf} how to find the new macro you've used.  The
496 easiest way to do this is to use the @code{aclocal} program to generate
497 your @file{aclocal.m4} for you.  But wait... you already have an
498 @file{aclocal.m4}, because you had to write some hairy macros for your
499 program.  @code{aclocal} lets you put your own macros into
500 @file{acinclude.m4}, so simply rename and then run:
502 @example
503 mv aclocal.m4 acinclude.m4
504 aclocal
505 autoconf
506 @end example
508 Now it is time to write your @file{Makefile.am} for @code{zardoz}.
509 @code{zardoz} is a user program, so you want to install it where the
510 rest of the user programs go.  @code{zardoz} also has some Texinfo
511 documentation.  Your @file{configure.in} script uses
512 @code{AC_REPLACE_FUNCS}, so you need to link against @samp{@@LIBOBJS@@}.
513 So here's what you'd write:
515 @example
516 bin_PROGRAMS = zardoz
517 zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c
518 zardoz_LDADD = @@LIBOBJS@@
520 info_TEXINFOS = zardoz.texi
521 @end example
523 Now you can run @code{automake --add-missing} to generate your
524 @file{Makefile.in} and grab any auxiliary files you might need, and
525 you're done!
528 @node Hello, etags, Complete, Examples
529 @section A classic program
531 @code{hello} is renowned for its classic simplicity and versatility.
532 This section shows how Automake could be used with the Hello package.
533 The examples below are from the latest GNU Hello, but all the
534 maintainer-only code has been stripped out, as well as all copyright
535 comments.
537 Of course, GNU Hello is somewhat more featureful than your traditional
538 two-liner.  GNU Hello is internationalized, does option processing, and
539 has a manual and a test suite.  GNU Hello is a deep package.
541 Here is the @file{configure.in} from GNU Hello:
543 @example
544 dnl Process this file with autoconf to produce a configure script.
545 AC_INIT(src/hello.c)
546 AM_INIT_AUTOMAKE(hello, 1.3.11)
547 AM_CONFIG_HEADER(config.h)
549 dnl Set of available languages.
550 ALL_LINGUAS="de fr es ko nl no pl pt sl sv"
552 dnl Checks for programs.
553 AC_PROG_CC
554 AC_ISC_POSIX
556 dnl Checks for libraries.
558 dnl Checks for header files.
559 AC_STDC_HEADERS
560 AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h)
562 dnl Checks for library functions.
563 AC_FUNC_ALLOCA
565 dnl Check for st_blksize in struct stat
566 AC_ST_BLKSIZE
568 dnl internationalization macros
569 AM_GNU_GETTEXT
570 AC_OUTPUT([Makefile doc/Makefile intl/Makefile po/Makefile.in \
571            src/Makefile tests/Makefile tests/hello],
572    [chmod +x tests/hello])
573 @end example
575 The @samp{AM_} macros are provided by Automake (or the Gettext library);
576 the rest are standard Autoconf macros.
579 The top-level @file{Makefile.am}:
581 @example
582 EXTRA_DIST = BUGS ChangeLog.O
583 SUBDIRS = doc intl po src tests
584 @end example
586 As you can see, all the work here is really done in subdirectories.
588 The @file{po} and @file{intl} directories are automatically generated
589 using @code{gettextize}; they will not be discussed here.
591 In @file{doc/Makefile.am} we see:
593 @example
594 info_TEXINFOS = hello.texi
595 hello_TEXINFOS = gpl.texi
596 @end example
598 This is sufficient to build, install, and distribute the Hello manual.
601 Here is @file{tests/Makefile.am}:
603 @example
604 TESTS = hello
605 EXTRA_DIST = hello.in testdata
606 @end example
608 The script @file{hello} is generated by @code{configure}, and is the
609 only test case.  @code{make check} will run this test.
611 Last we have @file{src/Makefile.am}, where all the real work is done:
613 @example
614 bin_PROGRAMS = hello
615 hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h 
616 hello_LDADD = @@INTLLIBS@@ @@ALLOCA@@
617 localedir = $(datadir)/locale
618 INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"
619 @end example
622 @node etags,  , Hello, Examples
623 @section Building etags and ctags
625 Here is another, trickier example.  It shows how to generate two
626 programs (@code{ctags} and @code{etags}) from the same source file
627 (@file{etags.c}).  The difficult part is that each compilation of
628 @file{etags.c} requires different @code{cpp} flags.
630 @example
631 bin_PROGRAMS = etags ctags
632 ctags_SOURCES =
633 ctags_LDADD = ctags.o
635 etags.o: etags.c
636         $(COMPILE) -DETAGS_REGEXPS -c etags.c
638 ctags.o: etags.c
639         $(COMPILE) -DCTAGS -o ctags.o -c etags.c
640 @end example
642 Note that @code{ctags_SOURCES} is defined to be empty---that way no
643 implicit value is substituted.  The implicit value, however, is used to
644 generate @code{etags} from @file{etags.o}.
646 @code{ctags_LDADD} is used to get @file{ctags.o} into the link line.
647 @code{ctags_DEPENDENCIES} is generated by Automake.
649 The above rules won't work if your compiler doesn't accept both
650 @samp{-c} and @samp{-o}.  The simplest fix for this is to introduce a
651 bogus dependency (to avoid problems with a parallel @code{make}):
653 @example
654 etags.o: etags.c ctags.o
655         $(COMPILE) -DETAGS_REGEXPS -c etags.c
657 ctags.o: etags.c
658         $(COMPILE) -DCTAGS -c etags.c && mv etags.o ctags.o
659 @end example
661 Also, these explicit rules do not work if the de-ANSI-fication feature
662 is used; supporting that requires a little more work:
664 @example
665 etags._o: etags._c ctags.o
666         $(COMPILE) -DETAGS_REGEXPS -c etags.c
668 ctags._o: etags._c
669         $(COMPILE) -DCTAGS -c etags.c && mv etags._o ctags.o
670 @end example
673 @node Invoking Automake, configure, Examples, Top
674 @chapter Creating a @file{Makefile.in}
676 To create all the @file{Makefile.in}s for a package, run the
677 @code{automake} program in the top level directory, with no arguments.
678 @code{automake} will automatically find each appropriate
679 @file{Makefile.am} (by scanning @file{configure.in}; @pxref{configure})
680 and generate the corresponding @file{Makefile.in}.  Note that
681 @code{automake} has a rather simplistic view of what constitutes a
682 package; it assumes that a package has only one @file{configure.in}, at
683 the top.  If your package has multiple @file{configure.in}s, then you
684 must run @code{automake} in each directory holding a
685 @file{configure.in}.
687 You can optionally give @code{automake} an argument; @samp{.am} is
688 appended to the argument and the result is used as the name of the input
689 file.  This feature is generally only used to automatically rebuild an
690 out-of-date @file{Makefile.in}.  Note that @code{automake} must always
691 be run from the topmost directory of a project, even if being used to
692 regenerate the @file{Makefile.in} in some subdirectory.  This is
693 necessary because @code{automake} must scan @file{configure.in}, and
694 because @code{automake} uses the knowledge that a @file{Makefile.in} is
695 in a subdirectory to change its behavior in some cases.
697 @code{automake} accepts the following options:
699 @table @code
700 @item -a
701 @itemx --add-missing
702 Automake requires certain common files to exist in certain situations;
703 for instance @file{config.guess} is required if @file{configure.in} runs
704 @code{AC_CANONICAL_HOST}.  Automake is distributed with several of these
705 files; this option will cause the missing ones to be automatically added
706 to the package, whenever possible.  In general if Automake tells you a
707 file is missing, try using this option.
709 @item --amdir=@var{dir}
710 Look for Automake data files in directory @var{dir} instead of in the
711 installation directory.  This is typically used for debugging.
713 @item --build-dir=@var{dir}
714 Tell Automake where the build directory is.  This option is used when
715 including dependencies into a @file{Makefile.in} generated by @code{make
716 dist}; it should not be used otherwise.
718 @item --cygnus
719 Causes the generated @file{Makefile.in}s to follow Cygnus rules, instead
720 of GNU or Gnits rules.  @xref{Cygnus} for more information.
722 @item --foreign
723 Set the global strictness to @samp{foreign}.  @xref{Strictness} for more
724 information.
726 @item --gnits
727 Set the global strictness to @samp{gnits}.  @xref{Gnits} for more
728 information.
730 @item --gnu
731 Set the global strictness to @samp{gnu}.  @xref{Gnits} for more
732 information.  This is the default strictness.
734 @item --help
735 Print a summary of the command line options and exit.
737 @item -i
738 @itemx --include-deps
739 Include all automatically generated dependency information
740 (@pxref{Dependencies}) in the generated
741 @file{Makefile.in}.  This is generally done when making a distribution;
742 see @ref{Dist}.
744 @item --generate-deps
745 Generate a file concatenating all automatically generated dependency
746 information (@pxref{Dependencies}) into one file, @file{.dep_segment}.
747 This is generally done when making a distribution; see @ref{Dist}.  It
748 is useful when maintaining a @file{SMakefile} or makefiles for other
749 platforms (@file{Makefile.DOS}, etc.)  It can only be used in
750 conjunction with @code{--include-deps}, @code{--srcdir-name}, and
751 @code{--build-dir}.  Note that if this option is given, no other
752 processing is done.
754 @item --no-force
755 Ordinarily @code{automake} creates all @file{Makefile.in}s mentioned in
756 @file{configure.in}.  This option causes it to only update those
757 @file{Makefile.in}s which are out of date with respect to one of their
758 dependents.
760 @item -o @var{dir}
761 @itemx --output-dir=@var{dir}
762 Put the generated @file{Makefile.in} in the directory @var{dir}.
763 Ordinarily each @file{Makefile.in} is created in the directory of the
764 corresponding @file{Makefile.am}.  This option is used when making
765 distributions.
767 @item --srcdir-name=@var{dir}
768 Tell Automake the name of the source directory associated with the
769 current build.  This option is used when including dependencies into a
770 @file{Makefile.in} generated by @code{make dist}; it should not be used
771 otherwise.
773 @item -v
774 @itemx --verbose
775 Cause Automake to print information about which files are being read or
776 created.
778 @item --version
779 Print the version number of Automake and exit.
780 @end table
783 @node configure, Top level, Invoking Automake, Top
784 @chapter Scanning @file{configure.in}
786 Automake scans the package's @file{configure.in} to determine certain
787 information about the package.  Some @code{autoconf} macros are required
788 and some variables must be defined in @file{configure.in}.  Automake
789 will also use information from @file{configure.in} to further tailor its
790 output.
792 Automake also supplies some @code{autoconf} macros to make the
793 maintenance easier.  These macros can automatically be put into your
794 @file{aclocal.m4} using the @code{aclocal} program.
796 @menu
797 * Requirements::                Configuration requirements
798 * Optional::                    Other things Automake recognizes
799 * Invoking aclocal::            Auto-generating aclocal.m4
800 * Macros::                      Autoconf macros supplied with Automake
801 * Extending aclocal::           Writing your own aclocal macros
802 @end menu
805 @node Requirements, Optional, configure, configure
806 @section Configuration requirements
808 The simplest way to meet the basic Automake requirements is to use the
809 macro @code{AM_INIT_AUTOMAKE} (@pxref{Macros}).  But if you prefer, you
810 can do the required steps by hand:
811 @cvindex AM_INIT_AUTOMAKE
813 @itemize @bullet
814 @item
815 Define the variables @code{PACKAGE} and @code{VERSION} with
816 @code{AC_SUBST}.
817 @cvindex PACKAGE
818 @cvindex VERSION
819 @code{PACKAGE} should be the name of the package as it appears when
820 bundled for distribution.  For instance, Automake defines @code{PACKAGE}
821 to be @samp{automake}.  @code{VERSION} should be the version number of
822 the release that is being developed.  We recommend that you make
823 @file{configure.in} the only place in your package where the version
824 number is defined; this makes releases simpler.
826 Automake doesn't do any interpretation of @code{PACKAGE} or
827 @code{VERSION}, except in @samp{Gnits} mode (@pxref{Gnits}).
829 @item
830 Use the macro @code{AC_ARG_PROGRAM} if a program or script is installed.
831 @cvindex AC_ARG_PROGRAM
833 @item
834 Use @code{AC_PROG_MAKE_SET} if the package is not flat.
835 @cvindex AC_PROG_MAKE_SET
837 @item
838 Use @code{AM_SANITY_CHECK} to make sure the build environment is sane.
840 @item
841 Use @code{AM_PROG_INSTALL} if any scripts (@pxref{Scripts}) are
842 installed by the package.  Otherwise, use @code{AC_PROG_INSTALL}.
843 @cvindex AC_PROG_INSTALL
844 @cvindex AM_PROG_INSTALL
846 @item
847 Use @code{AM_MISSING_PROG} to see whether the programs @code{aclocal},
848 @code{autoconf}, @code{automake}, @code{autoheader}, and @code{makeinfo}
849 are in the build environment.  Here is how this is done:
850 @example
851 missing_dir=`cd $ac_aux_dir && pwd`
852 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
853 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
854 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
855 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
856 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
857 @end example
858 @end itemize
861 Here are the other macros which Automake requires but which are not run
862 by @code{AM_INIT_AUTOMAKE}:
864 @table @code
865 @item AC_OUTPUT
866 Automake uses this to determine which files to create.  Listed files
867 named @code{Makefile} are treated as @file{Makefile}s.  Other listed
868 files are treated differently.  Currently the only difference is that a
869 @file{Makefile} is removed by @code{make distclean}, while other files
870 are removed by @code{make clean}.
871 @c FIXME: this is in violation of standards!
872 @cvindex AC_OUTPUT
873 @end table
875 @node Optional, Invoking aclocal, Requirements, configure
876 @section Other things Automake recognizes
878 Automake will also recognize the use of certain macros and tailor the
879 generated @file{Makefile.in} appropriately.  Currently recognized macros
880 and their effects are:
882 @table @code
883 @item AC_CONFIG_HEADER
884 Automake requires the use of @code{AM_CONFIG_HEADER}, which is similar
885 to @code{AC_CONFIG_HEADER} but does some useful Automake-specific work.
886 @cvindex AC_CONFIG_HEADER
888 @item AC_CONFIG_AUX_DIR
889 Automake will look for various helper scripts, such as
890 @file{mkinstalldirs}, in the directory named in this macro invocation.
891 If not seen, the scripts are looked for in their ``standard'' locations
892 (either the top source directory, or in the source directory
893 corresponding to the current @file{Makefile.am}, whichever is
894 appropriate).
895 @cvindex AC_CONFIG_AUX_DIR
896 FIXME: give complete list of things looked for in this directory
898 @item AC_PATH_XTRA
899 Automake will insert definitions for the variables defined by
900 @code{AC_PATH_XTRA} into each @file{Makefile.in} that builds a C program
901 or library.
902 @cvindex AC_PATH_XTRA
904 @item AC_CANONICAL_HOST
905 @itemx AC_CHECK_TOOL
906 Automake will ensure that @file{config.guess} and @file{config.sub}
907 exist.  Also, the @file{Makefile} variables @samp{host_alias} and
908 @samp{host_triplet} are introduced.
909 @c fixme xref autoconf docs.
910 @cvindex AC_CANONICAL_HOST
911 @cvindex AC_CHECK_TOOL
912 @vindex host_alias
913 @vindex host_triplet
915 @item AC_CANONICAL_SYSTEM
916 This is similar to @code{AC_CANONICAL_HOST}, but also defines the
917 @file{Makefile} variables @samp{build_alias} and @samp{target_alias}.
918 @cvindex AC_CANONICAL_SYSTEM
919 @vindex build_alias
920 @vindex target_alias
922 @item AC_FUNC_ALLOCA
923 @itemx AC_FUNC_GETLOADAVG
924 @itemx AC_FUNC_MEMCMP
925 @itemx AC_STRUCT_ST_BLOCKS
926 @itemx AC_FUNC_FNMATCH
927 @itemx AM_FUNC_STRTOD
928 @itemx AC_REPLACE_FUNCS
929 @itemx AC_REPLACE_GNU_GETOPT
930 @itemx AM_WITH_REGEX
931 Automake will ensure that the appropriate dependencies are generated for
932 the objects corresponding to these macros.  Also, Automake will verify
933 that the appropriate source files are part of the distribution.  Note
934 that Automake does not come with any of the C sources required to use
935 these macros, so @code{automake -a} will not install the sources.
936 @xref{A Library} for more information.
937 @cvindex AC_FUNC_ALLOCA
938 @cvindex AC_FUNC_GETLOADAVG
939 @cvindex AC_FUNC_MEMCMP
940 @cvindex AC_STRUCT_ST_BLOCKS
941 @cvindex AC_FUNC_FNMATCH
942 @cvindex AC_FUNC_FNMATCH
943 @cvindex AC_REPLACE_FUNCS
944 @cvindex AC_REPLACE_GNU_GETOPT
945 @cvindex AM_FUNC_STRTOD
946 @cvindex AM_WITH_REGEX
948 @item LIBOBJS
949 Automake will detect statements which put @samp{.o} files into
950 @code{LIBOBJS}, and will treat these additional files as if they were
951 discovered via @code{AC_REPLACE_FUNCS}.
952 @cvindex LIBOBJS
954 @item AC_PROG_RANLIB
955 This is required if any libraries are built in the package.
956 @cvindex AC_PROG_RANLIB
958 @item AC_PROG_CXX
959 This is required if any C++ source is included.
960 @cvindex AC_PROG_CXX
962 @item AM_PROG_LIBTOOL
963 Automake will turn on processing for @code{libtool} (@pxref{Top, , The
964 Libtool Manual, libtool, The Libtool Manual}).
965 @cvindex AM_PROG_LIBTOOL
967 @item AC_PROG_YACC
968 If a Yacc source file is seen, then you must either use this macro or
969 define the variable @samp{YACC} in @file{configure.in}.  The former is
970 preferred.
971 @cvindex AC_PROG_YACC
972 @cvindex YACC
974 @item AC_DECL_YYTEXT
975 This macro is required if there is Lex source in the package.
976 @cvindex AC_DECL_YYTEXT
978 @item AC_PROG_LEX
979 If a Lex source file is seen, then this macro must be used.
980 @cvindex AC_PROG_LEX
982 @item ALL_LINGUAS
983 If Automake sees that this variable is set in @file{configure.in}, it
984 will check the @file{po} directory to ensure that all the named
985 @samp{.po} files exist, and that all the @samp{.po} files that exist are
986 named.
987 @cvindex ALL_LINGUAS
989 @item AM_C_PROTOTYPES
990 This is required when using automatic de-ANSI-fication, see @ref{ANSI}.
991 @cvindex AM_C_PROTOTYPES
993 @item AM_GNU_GETTEXT
994 This macro is required for packages which use GNU gettext
995 (@pxref{gettext}).  It is distributed with gettext.  If Automake sees
996 this macro it ensures that the package meets some of gettext's
997 requirements.
998 @cvindex AM_GNU_GETTEXT
1000 @item AM_MAINTAINER_MODE
1001 This macro adds a @samp{--enable-maintainer-mode} option to
1002 @code{configure}.  If this is used, @code{automake} will cause
1003 ``maintainer-only'' rules to be turned off by default in the generated
1004 @file{Makefile.in}s.  This macro is disallowed in @samp{Gnits} mode
1005 (@pxref{Gnits}).
1006 @cvindex AM_MAINTAINER_MODE
1008 @item AC_SUBST
1009 @itemx AC_CHECK_TOOL
1010 @itemx AC_CHECK_PROG
1011 @itemx AC_CHECK_PROGS
1012 @itemx AC_PATH_PROG
1013 @itemx AC_PATH_PROGS
1014 For each of these macros, the first argument is automatically defined as
1015 a variable in each generated @file{Makefile.in}.
1016 @cvindex AC_SUBST
1017 @cvindex AC_CHECK_TOOL
1018 @cvindex AC_CHECK_PROG
1019 @cvindex AC_CHECK_PROGS
1020 @cvindex AC_PATH_PROG
1021 @cvindex AC_PATH_PROGS
1023 @end table
1026 @node Invoking aclocal, Macros, Optional, configure
1027 @section Auto-generating aclocal.m4
1029 Automake includes a number of Autoconf macros which can be used in your
1030 package; some of them are actually required by Automake in certain
1031 situations.  These macros must be defined in your @file{aclocal.m4};
1032 otherwise they will not be seen by @code{autoconf}.
1034 The @code{aclocal} program will automatically generate @file{aclocal.m4}
1035 files based on the contents of @file{configure.in}.  This provides a
1036 convenient way to get Automake-provided macros, without having to
1037 search around.  Also, the @code{aclocal} mechanism is extensible for use
1038 by other packages.
1040 At startup, @code{aclocal} scans all the @samp{.m4} files it can find,
1041 looking for macro definitions.  Then it scans @file{configure.in}.  Any
1042 mention of one of the macros found in the first step causes that macro,
1043 and any macros it in turn requires, to be put into @file{aclocal.m4}.
1045 The contents of @file{acinclude.m4}, if it exists, are also
1046 automatically included in @file{aclocal.m4}.  This is useful for
1047 incorporating local macros into @file{configure}.
1049 @code{aclocal} accepts the following options:
1051 @table @code
1052 @item --acdir=@var{dir}
1053 Look for the macro files in @var{dir} instead of the installation
1054 directory.  This is typically used for debugging.
1056 @item --help
1057 Print a summary of the command line options and exit.
1059 @item -I @var{dir}
1060 Add the directory @var{dir} to the list of directories searched for
1061 @samp{.m4} files.
1063 @item --output=@var{file}
1064 Cause the output to be put into @var{file} instead of @file{aclocal.m4}.
1066 @item --verbose
1067 Print the names of the files it examines.
1069 @item --version
1070 Print the version number of Automake and exit.
1071 @end table
1074 @node Macros, Extending aclocal, Invoking aclocal, configure
1075 @section Autoconf macros supplied with Automake
1077 @c consider generating this node automatically from m4 files.
1079 @table @code
1080 @item AM_CONFIG_HEADER
1081 Automake will generate rules to automatically regenerate the config
1082 header.  If you do use this macro, you must create the file
1083 @file{stamp-h.in} in your source directory.  It can be empty.
1084 @cvindex AM_CONFIG_HEADER
1086 @item AM_CYGWIN32
1087 Check to see if this @code{configure} is being run in the
1088 @samp{Cygwin32} environment.  (FIXME xref).  If so, define output
1089 variable @code{EXEEXT} to @samp{.exe}; otherwise define it to the empty
1090 string.  Automake recognizes this macro and uses it to generate
1091 @file{Makefile.in}s which will automatically work under @samp{Cygwin32}.
1092 In the @samp{Cygwin32} environment, @code{gcc} generates executables
1093 whose names end in @samp{.exe}, even if this was not specified on the
1094 command line.  Automake adds special code to @file{Makefile.in} to
1095 gracefully deal with this.
1097 @item AM_FUNC_STRTOD
1098 If the @code{strtod} function is not available, or does not work
1099 correctly (like the one on SunOS 5.4), add @file{strtod.o} to output
1100 variable @code{LIBOBJS}.
1101 @cvindex AM_FUNC_STRTOD
1103 @item AM_FUNC_ERROR_AT_LINE
1104 If the function @code{error_at_line} is not found, then add
1105 @file{error.o} to @code{LIBOBJS}.
1106 @cvindex AM_FUNC_ERROR_AT_LINE
1108 @item AM_FUNC_MKTIME
1109 Check for a working @code{mktime} function.  If not found, add
1110 @file{mktime.o} to @samp{LIBOBJS}.
1111 @cvindex AM_FUNC_MKTIME
1113 @item AM_FUNC_OBSTACK
1114 Check for the GNU obstacks code; if not found, add @file{obstack.o} to
1115 @samp{LIBOBJS}.
1116 @cvindex AM_FUNC_OBSTACK
1118 @item AM_C_PROTOTYPES
1119 Check to see if function prototypes are understood by the compiler.  If
1120 so, define @samp{PROTOTYPES} and set the output variables @samp{U} and
1121 @samp{ANSI2KNR} to the empty string.  Otherwise, set @samp{U} to
1122 @samp{_} and @samp{ANSI2KNR} to @samp{./ansi2knr}.  Automake uses these
1123 values to implement automatic de-ANSI-fication.
1124 @cvindex AM_C_PROTOTYPES
1126 @item AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
1127 If the use of @code{TIOCGWINSZ} requires @file{<sys/ioctl.h>}, then
1128 define @code{GWINSZ_IN_SYS_IOCTL}.  Otherwise @code{TIOCGWINSZ} can be
1129 found in @file{<termios.h>}.
1130 @cvindex AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
1132 @item AM_INIT_AUTOMAKE
1133 Runs many macros that most @file{configure.in}'s need.  This macro has
1134 two required arguments, the package and the version number.  By default
1135 this macro @code{AC_DEFINE}'s @samp{PACKAGE} and @samp{VERSION}.  This
1136 can be avoided by passing in a non-empty third argument.
1138 @item AM_PATH_LISPDIR
1139 Searches for the program @code{emacs}, and, if found, sets the output
1140 variable @code{lispdir} to the full path to Emacs' site-lisp directory.
1141 @cvindex AM_PATH_LISPDIR
1143 @item AM_PROG_CC_STDC
1144 If the C compiler in not in ANSI C mode by default, try to add an option
1145 to output variable @code{CC} to make it so.  This macro tries various
1146 options that select ANSI C on some system or another.  It considers the
1147 compiler to be in ANSI C mode if it handles function prototypes correctly.
1149 If you use this macro, you should check after calling it whether the C
1150 compiler has been set to accept ANSI C; if not, the shell variable
1151 @code{am_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source
1152 code in ANSI C, you can make an un-ANSIfied copy of it by using the
1153 @code{ansi2knr} option.
1154 @cvindex AM_PROG_CC_STDC
1156 @item AM_PROG_INSTALL
1157 Like @code{AC_PROG_INSTALL}, but also defines @code{INSTALL_SCRIPT}.
1158 @cvindex AM_PROG_INSTALL
1160 @item AM_SANITY_CHECK
1161 This checks to make sure that a file created in the build directory is
1162 newer than a file in the source directory.  This can fail on systems
1163 where the clock is set incorrectly.  This macro is automatically run
1164 from @code{AM_INIT_AUTOMAKE}.
1165 @cvindex AM_SANITY_CHECK
1167 @item AM_SYS_POSIX_TERMIOS
1168 Check to see if POSIX termios headers and functions are available on the
1169 system.  If so, set the shell variable @code{am_cv_sys_posix_termios} to
1170 @samp{yes}.  If not, set the variable to @samp{no}.
1171 @cvindex AM_SYS_POSIX_TERMIOS
1173 @item AM_TYPE_PTRDIFF_T
1174 Define @samp{HAVE_PTRDIFF_T} if the type @samp{ptrdiff_t} is defined in
1175 @file{<stddef.h>}.
1176 @cvindex AM_TYPE_PTRDIFF_T
1178 @item AM_WITH_DMALLOC
1179 Add support for the @code{dmalloc} package.  If the user configures with
1180 @samp{--with-dmalloc}, then define @code{WITH_DMALLOC} and add
1181 @samp{-ldmalloc} to @code{LIBS}.  The @code{dmalloc} package can be
1182 found at @url{ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz}
1183 @cvindex AM_WITH_DMALLOC
1185 @item AM_WITH_REGEX
1186 Adds @samp{--with-regex} to the @code{configure} command line.  If
1187 specified (the default), then the @samp{regex} regular expression
1188 library is used, @file{regex.o} is put into @samp{LIBOBJS}, and
1189 @samp{WITH_REGEX} is defined..  If @samp{--without-regex} is given, then
1190 the @samp{rx} regular expression library is used, and @file{rx.o} is put
1191 into @samp{LIBOBJS}.
1192 @cvindex AM_WITH_REGEX
1193 @end table
1196 @node Extending aclocal,  , Macros, configure
1197 @section Writing your own aclocal macros
1199 Aclocal doesn't have any built-in knowledge of any macros, so it is easy
1200 to extend it with your own macros.
1202 This is mostly used for libraries which want to supply their own
1203 Autoconf macros for use by other programs.  For instance the
1204 @code{gettext} library supplies a macro @code{AM_GNU_GETTEXT} which
1205 should be used by any package using @code{gettext}.  When the library is
1206 installed, it installs this macro so that @code{aclocal} will find it.
1208 A file of macros should be a series of @code{AC_DEFUN}'s.  Aclocal also
1209 understands @code{AC_REQUIRE}, so it is safe to put each macro in a
1210 separate file.
1212 A macro file's name should end in @samp{.m4}.  Such files should be
1213 installed in @file{$(datadir)/aclocal}.
1215 @node Top level, Programs, configure, Top
1216 @chapter The top-level @file{Makefile.am}
1218 In non-flat packages, the top level @file{Makefile.am} must tell
1219 Automake which subdirectories are to be built.  This is done via the
1220 @code{SUBDIRS} variable.
1221 @vindex SUBDIRS
1223 The @code{SUBDIRS} macro holds a list of subdirectories in which
1224 building of various sorts can occur.  Many targets (eg @code{all}) in
1225 the generated @file{Makefile} will run both locally and in all specified
1226 subdirectories.  Note that the directories listed in @code{SUBDIRS} are
1227 not required to contain @file{Makefile.am}s; only @file{Makefile}s
1228 (after configuration).  This allows inclusion of libraries from packages
1229 which do not use Automake (such as @code{gettext}).  The directories
1230 mentioned in @code{SUBDIRS} must be direct children of the current
1231 directory.  For instance, you cannot put @samp{src/subdir} into
1232 @code{SUBDIRS}.
1234 In a deep package, the top-level @file{Makefile.am} is often very short.
1235 For instance, here is the @file{Makefile.am} from the Hello
1236 distribution:
1238 @example
1239 EXTRA_DIST = BUGS ChangeLog.O README-alpha
1240 SUBDIRS = doc intl po src tests
1241 @end example
1243 It is possible to override the @code{SUBDIRS} variable if, like in the
1244 case of GNU @code{Inetutils}, you want to only build a subset of the
1245 entire package.  In your @file{Makefile.am} include:
1247 @example
1248 SUBDIRS = @@SUBDIRS@@
1249 @end example
1251 Then in your @file{configure.in} you can specify:
1253 @example
1254 SUBDIRS = "src doc lib po"
1255 AC_SUBST(SUBDIRS)
1256 @end example
1258 The upshot of this is that automake is tricked into building the package
1259 to take the subdirs, but doesn't actually bind that list until
1260 @code{configure} is run.
1263 @code{SUBDIRS} can contain configure substitutions (eg @samp{@@DIRS@@});
1264 Automake itself does not actually examine the contents of this variable.
1266 If @code{SUBDIRS} is defined, then your @file{configure.in} must include
1267 @code{AC_PROG_MAKE_SET}.
1269 The use of @code{SUBDIRS} is not restricted to just the top-level
1270 @file{Makefile.am}.  Automake can be used to construct packages of
1271 arbitrary depth.
1274 @node Programs, Other objects, Top level, Top
1275 @chapter Building Programs and Libraries
1277 A large part of Automake's functionality is dedicated to making it easy
1278 to build C programs and libraries.
1280 @menu
1281 * A Program::                   Building a program
1282 * A Library::                   Building a library
1283 * LIBOBJS::                     Special handling for LIBOBJS and ALLOCA
1284 * A Shared Library::            Building a Libtool library
1285 * Program variables::           Variables used when building a program
1286 * Yacc and Lex::                Yacc and Lex support
1287 * C++::                         
1288 * ANSI::                        Automatic de-ANSI-fication
1289 * Dependencies::                Automatic dependency tracking
1290 @end menu
1293 @node A Program, A Library, Programs, Programs
1294 @section Building a program
1296 In a directory containing source that gets built into a program (as
1297 opposed to a library), the @samp{PROGRAMS} primary is used.  Programs
1298 can be installed in @samp{bindir}, @samp{sbindir}, @samp{libexecdir},
1299 @samp{pkglibdir}, or not at all (@samp{noinst}).
1301 For instance:
1303 @example
1304 bin_PROGRAMS = hello
1305 @end example
1307 In this simple case, the resulting @file{Makefile.in} will contain code
1308 to generate a program named @code{hello}.  The variable
1309 @code{hello_SOURCES} is used to specify which source files get built
1310 into an executable:
1312 @example
1313 hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h 
1314 @end example
1316 This causes each mentioned @samp{.c} file to be compiled into the
1317 corresponding @samp{.o}.  Then all are linked to produce @file{hello}.
1319 If @samp{prog_SOURCES} is needed, but not specified, then it defaults to
1320 the single file @file{prog.c}.  In the example above, the definition of
1321 @code{hello_SOURCES} is actually redundant.
1322 @vindex _SOURCES
1323 @vindex SOURCES
1325 Multiple programs can be built in a single directory.  Multiple programs
1326 can share a single source file.  The source file must be listed in each
1327 @samp{_SOURCES} definition.
1329 Header files listed in a @samp{_SOURCES} definition will be included in
1330 the distribution but otherwise ignored.  In case it isn't obvious, you
1331 should not include the header file generated by @file{configure} in an
1332 @samp{_SOURCES} variable; this file should not be distributed.  Lex
1333 (@samp{.l}) and yacc (@samp{.y}) files can also be listed; see @ref{Yacc
1334 and Lex}.
1336 Automake must know all the source files that could possibly go into a
1337 program, even if not all the files are built in every circumstance.
1338 Any files which are only conditionally built should be listed in the
1339 appropriate @samp{EXTRA_} variable.  For instance, if
1340 @file{hello-linux.c} were conditionally included in @code{hello}, the
1341 @file{Makefile.am} would contain:
1343 @example
1344 EXTRA_hello_SOURCES = hello-linux.c
1345 @end example
1347 Similarly, sometimes it is useful to determine the programs that are to
1348 be built at configure time.  For instance, GNU @code{cpio} only builds
1349 @code{mt} and @code{rmt} under special circumstances.
1351 In this case, you must notify @code{automake} of all the programs that
1352 can possibly be built, but at the same time cause the generated
1353 @file{Makefile.in} to use the programs specified by @code{configure}.
1354 This is done by having @code{configure} substitute values into each
1355 @samp{_PROGRAMS} definition, while listing all optionally built programs in
1356 @code{EXTRA_PROGRAMS}.
1357 @vindex EXTRA_PROGRAMS
1359 If you need to link against libraries that are not found by
1360 @code{configure}, you can use @code{LDADD} to do so.  This variable
1361 actually can be used to add any options to the linker command line.
1362 @vindex LDADD
1364 Sometimes, multiple programs are built in one directory but do not share
1365 the same link-time requirements.  In this case, you can use the
1366 @samp{@var{prog}_LDADD} variable (where @var{prog} is the name of the
1367 program as it appears in some @samp{_PROGRAMS} variable, and usually
1368 written in lowercase) to override the global @code{LDADD}.  (If this
1369 variable exists for a given program, then that program is not linked
1370 using @code{LDADD}.)
1371 @vindex _LDADD
1373 For instance, in GNU cpio, @code{pax}, @code{cpio}, and @code{mt} are
1374 linked against the library @file{libcpio.a}.  However, @code{rmt} is
1375 built in the same directory, and has no such link requirement.  Also,
1376 @code{mt} and @code{rmt} are only built on certain architectures.  Here
1377 is what cpio's @file{src/Makefile.am} looks like (abridged):
1379 @example
1380 bin_PROGRAMS = cpio pax @@MT@@
1381 libexec_PROGRAMS = @@RMT@@
1382 EXTRA_PROGRAMS = mt rmt
1384 LDADD = ../lib/libcpio.a @@INTLLIBS@@
1385 rmt_LDADD =
1387 cpio_SOURCES = @dots{}
1388 pax_SOURCES = @dots{}
1389 mt_SOURCES = @dots{}
1390 rmt_SOURCES = @dots{}
1391 @end example
1393 @samp{prog_LDADD} is inappropriate for passing program-specific linker
1394 flags (except for @samp{-l} and @samp{-L}).  So, use the
1395 @samp{prog_LDFLAGS} variable for this purpose.
1396 @vindex _LDFLAGS
1398 It is also occasionally useful to have a program depend on some other
1399 target which is not actually part of that program.  This can be done
1400 using the @samp{prog_DEPENDENCIES} variable.  Each program depends on
1401 the contents of such a variable, but no further interpretation is done.
1403 If @samp{prog_DEPENDENCIES} is not supplied, it is computed by Automake.
1404 The automatically-assigned value is the contents of @samp{prog_LDADD},
1405 with most configure substitutions, @samp{-l}, and @samp{-L} options
1406 removed.  The configure substitutions that are left in are only
1407 @samp{@@LIBOBJS@@} and @samp{@@ALLOCA@@}; these are left because it is
1408 known that they will not cause an invalid value for
1409 @samp{prog_DEPENDENCIES} to be generated.
1412 @node A Library, LIBOBJS, A Program, Programs
1413 @section Building a library
1415 Building a library is much like building a program.  In this case, the
1416 name of the primary is @samp{LIBRARIES}.  Libraries can be installed in
1417 @code{libdir} or @code{pkglibdir}.
1419 @xref{A Shared Library}, for information on how to build shared
1420 libraries using Libtool and the @samp{LTLIBRARIES} primary.
1422 Each @samp{_LIBRARIES} variable is a list of the libraries to be built.
1423 For instance to create a library named @file{libcpio.a}, but not install
1424 it, you would write:
1426 @example
1427 noinst_LIBRARIES = libcpio.a
1428 @end example
1430 The sources that go into a library are determined exactly as they are
1431 for programs, via the @samp{_SOURCES} variables.  Note that the library
1432 name is canonicalized (@pxref{Canonicalization}), so the @samp{_SOURCES}
1433 variable corresponding to @file{liblob.a} is @samp{liblob_a_SOURCES},
1434 not @samp{liblob.a_SOURCES}.
1436 Extra objects can be added to a library using the @samp{library_LIBADD}
1437 variable.  This should be used for objects determined by
1438 @code{configure}.  Again from cpio:
1439 @vindex _LIBADD
1440 @vindex LIBADD
1442 @example
1443 libcpio_a_LIBADD = @@LIBOBJS@@ @@ALLOCA@@
1444 @end example
1446 @node LIBOBJS, A Shared Library, A Library, Programs
1447 @section Special handling for LIBOBJS and ALLOCA
1449 Automake explicitly recognizes the use of @code{@@LIBOBJS@@} and
1450 @code{@@ALLOCA@@}, and uses this information, plus the list of
1451 @code{LIBOBJS} files derived from @file{configure.in} to automatically
1452 include the appropriate source files in the distribution (@pxref{Dist}).
1453 These source files are also automatically handled in the
1454 dependency-tracking scheme, see @xref{Dependencies}.
1456 @code{@@LIBOBJS@@} and @code{@@ALLOCA@@} are specially recognized in any
1457 @samp{_LDADD} or @samp{_LIBADD} variable.
1459 @node A Shared Library, Program variables, LIBOBJS, Programs
1460 @section Building a Shared Library
1462 Building shared libraries is a relatively complex matter.  For this
1463 reason, GNU Libtool (@pxref{Top, , The Libtool Manual, libtool, The
1464 Libtool Manual}) was created to help build shared libraries in a
1465 platform-independent way.
1467 Automake uses Libtool to build libraries declared with the
1468 @samp{LTLIBRARIES} primary.  Each @samp{_LTLIBRARIES} variable is a list
1469 of shared libraries to build.  For instance, to create a library named
1470 @file{libgettext.a} and its corresponding shared libraries, and install
1471 them in @samp{libdir}, write:
1473 @example
1474 lib_LTLIBRARIES = libgettext.la
1475 @end example
1477 Note that shared libraries @emph{must} be installed, so
1478 @samp{noinst_LTLIBRARIES} and @samp{check_LTLIBRARIES} are not allowed.
1480 For each library, the @samp{library_LIBADD} variable contains the names
1481 of extra libtool objects (@samp{.lo} files) to add to the shared
1482 library.  The @samp{library_LDFLAGS} variable contains any additional
1483 libtool flags, such as @samp{-version-info} or @samp{-static}.
1485 Where an ordinary library might include @code{@@LIBOBJS@@}, a libtool
1486 library must use @code{@@LTLIBOBJS@@}.  This is required because the
1487 object files that libtool operates on do not necessarily end in
1488 @samp{.o}.  The libtool manual contains more details on this topic.
1490 For libraries installed in some directory, @code{automake} will
1491 automatically supply the appropriate @samp{-rpath} option.  However, for
1492 libraries determined at configure time (and thus mentioned in
1493 @code{EXTRA_LTLIBRARIES}), @code{automake} does not know the eventual
1494 installation directory; for such libraries you must add the
1495 @samp{-rpath} option to the appropriate @samp{_LDFLAGS} variable by
1496 hand.
1498 @xref{Using Automake, Using Automake with Libtool, The Libtool Manual,
1499 libtool, The Libtool Manual}, for more information.
1501 @node Program variables, Yacc and Lex, A Shared Library, Programs
1502 @section Variables used when building a program
1504 Occasionally it is useful to know which @file{Makefile} variables
1505 Automake uses for compilations; for instance you might need to do your
1506 own compilation in some special cases.
1508 Some variables are inherited from Autoconf; these are @code{CC},
1509 @code{CFLAGS}, @code{CPPFLAGS}, @code{DEFS}, @code{LDFLAGS}, and
1510 @code{LIBS}.
1511 @vindex LDFLAGS
1513 There are some additional variables which Automake itself defines:
1515 @table @code
1516 @item INCLUDES
1517 A list of @samp{-I} options.  This can be set in your @file{Makefile.am}
1518 if you have special directories you want to look in.  @code{automake}
1519 already provides some @samp{-I} options automatically.  In particular it
1520 generates @samp{-I$(srcdir)} and a @samp{-I} pointing to the directory
1521 holding @file{config.h} (if you've used @code{AC_CONFIG_HEADER} or
1522 @code{AM_CONFIG_HEADER}).
1524 @code{INCLUDES} can actually be used for other @code{cpp} options
1525 besides @samp{-I}.  For instance, it is sometimes used to pass arbitrary
1526 @samp{-D} options to the compiler.
1528 @item COMPILE
1529 This is the command used to actually compile a C source file.  The
1530 filename is appended to form the complete command line.
1532 @item LINK
1533 This is the command used to actually link a C program.
1534 @end table
1537 @node Yacc and Lex, C++, Program variables, Programs
1538 @section Yacc and Lex support
1540 Automake has somewhat idiosyncratic support for Yacc and Lex.
1542 Automake assumes that the @samp{.c} file generated by yacc (or lex)
1543 should be named using the basename of the input file.  That is, for a
1544 yacc source file @file{foo.y}, automake will cause the intermediate file
1545 to be named @file{foo.c} (as opposed to @file{y.tab.c}, which is more
1546 traditional).
1548 The extension of a yacc source file is used to determine the extension
1549 of the resulting @samp{C} or @samp{C++} file.  Files with the extension
1550 @samp{.y} will be turned into @samp{.c} files; likewise, @samp{.yy} will
1551 become @samp{.cc}; @samp{.y++}, @samp{c++}; and @samp{.yxx},
1552 @samp{.cxx}.  Likewise, lex source files can be used to generate
1553 @samp{C} or @samp{C++}; the extensions @samp{.l}, @samp{.ll},
1554 @samp{.l++}, and @samp{.lxx} are recognized.
1556 You should never explicitly mention the intermediate (@samp{C} or
1557 @samp{C++}) file in any @samp{SOURCES} variable; only list the source
1558 file.
1560 The intermediate files generated by yacc (or lex) will be included in
1561 any distribution that is made.  That way the user doesn't need to have
1562 yacc or lex.
1564 If a yacc source file is seen, then your @file{configure.in} must define
1565 the variable @samp{YACC}.  This is most easily done by invoking the
1566 macro @samp{AC_PROG_YACC}.
1568 Similarly, if a lex source file is seen, then your @file{configure.in}
1569 must define the variable @samp{LEX}.  You can use @samp{AC_PROG_LEX} to
1570 do this.  Automake's lex support also requires that you use the
1571 @samp{AC_DECL_YYTEXT} macro---automake needs to know the value of
1572 @samp{LEX_OUTPUT_ROOT}.
1574 Automake makes it possible to include multiple yacc (or lex) source
1575 files in a single program.  Automake uses a small program called
1576 @code{ylwrap} to run @code{yacc} (or @code{lex}) in a subdirectory.
1577 This is necessary because yacc's output filename is fixed, and a
1578 parallel make could conceivably invoke more than one instance of
1579 @code{yacc} simultaneously.  @code{ylwrap} is distributed with automake.
1580 It should appear in the directory specified by @samp{AC_CONFIG_AUX_DIR},
1581 or the current directory if that macro is not used in
1582 @file{configure.in}.
1584 For @code{yacc}, simply managing locking is insufficient.  @code{yacc}
1585 output also always uses the same symbol names internally, so it isn't
1586 possible to link two @code{yacc} parsers into the same executable.
1588 We recommend using the following renaming hack used in @code{gdb}:
1589 @example
1590 #define yymaxdepth c_maxdepth
1591 #define yyparse c_parse
1592 #define yylex   c_lex
1593 #define yyerror c_error
1594 #define yylval  c_lval
1595 #define yychar  c_char
1596 #define yydebug c_debug
1597 #define yypact  c_pact  
1598 #define yyr1    c_r1                    
1599 #define yyr2    c_r2                    
1600 #define yydef   c_def           
1601 #define yychk   c_chk           
1602 #define yypgo   c_pgo           
1603 #define yyact   c_act           
1604 #define yyexca  c_exca
1605 #define yyerrflag c_errflag
1606 #define yynerrs c_nerrs
1607 #define yyps    c_ps
1608 #define yypv    c_pv
1609 #define yys     c_s
1610 #define yy_yys  c_yys
1611 #define yystate c_state
1612 #define yytmp   c_tmp
1613 #define yyv     c_v
1614 #define yy_yyv  c_yyv
1615 #define yyval   c_val
1616 #define yylloc  c_lloc
1617 #define yyreds  c_reds
1618 #define yytoks  c_toks
1619 #define yylhs   c_yylhs
1620 #define yylen   c_yylen
1621 #define yydefred c_yydefred
1622 #define yydgoto c_yydgoto
1623 #define yysindex c_yysindex
1624 #define yyrindex c_yyrindex
1625 #define yygindex c_yygindex
1626 #define yytable  c_yytable
1627 #define yycheck  c_yycheck
1628 @end example
1630 For each define, replace the @samp{c_} prefix with whatever you like.
1631 These defines work for @code{bison}, @code{byacc}, and traditional
1632 @code{yacc}s.  If you find a parser generator that uses a symbol not
1633 covered here, please report the new name so it can be added to the list.
1636 @node C++, ANSI, Yacc and Lex, Programs
1637 @section C++ and other languages
1639 Automake includes full support for C++, and rudimentary support for
1640 other languages.  Support for other languages will be improved based on
1641 demand.
1643 Any package including C++ code must define the output variable
1644 @samp{CXX} in @file{configure.in}; the simplest way to do this is to use
1645 the @code{AC_PROG_CXX} macro.
1647 A few additional variables are defined when a C++ source file is seen:
1649 @table @code
1650 @item CXX
1651 The name of the C++ compiler.
1652 @vindex CXX
1654 @item CXXFLAGS
1655 Any flags to pass to the C++ compiler.
1656 @vindex CXXFLAGS
1658 @item CXXCOMPILE
1659 The command used to actually compile a C++ source file.  The file name
1660 is appended to form the complete command line.
1661 @vindex CXXCOMPILE
1663 @item CXXLINK
1664 The command used to actually link a C++ program.
1665 @vindex CXXLINK
1666 @end table
1669 @node ANSI, Dependencies, C++, Programs
1670 @section Automatic de-ANSI-fication
1672 Although the GNU standards allow the use of ANSI C, this can have the
1673 effect of limiting portability of a package to some older compilers
1674 (notably SunOS).
1676 Automake allows you to work around this problem on such machines by
1677 ``de-ANSI-fying'' each source file before the actual compilation takes
1678 place.
1680 If the @file{Makefile.am} variable @code{AUTOMAKE_OPTIONS}
1681 @vindex AUTOMAKE_OPTIONS
1682 (@ref{Options}) contains the option @code{ansi2knr}
1683 @opindex ansi2knr
1684 then code to handle de-ANSI-fication is inserted into the generated
1685 @file{Makefile.in}.
1687 This causes each C source file in the directory to be treated as ANSI C.
1688 If an ANSI C compiler is available, it is used.  If no ANSI C compiler
1689 is available, the @code{ansi2knr} program is used to convert the source
1690 files into K&R C, which is then compiled.
1692 The @code{ansi2knr} program is simple-minded.  It assumes the source
1693 code will be formatted in a particular way; see the @code{ansi2knr} man
1694 page for details.
1696 De-ANSI-fication support requires the source files @file{ansi2knr.c} and
1697 @file{ansi2knr.1} to be in the same package as the ANSI C source; these
1698 files are distributed with Automake.  Also, the package
1699 @file{configure.in} must call the macro @code{AM_C_PROTOTYPES}.
1700 @cvindex AM_C_PROTOTYPES
1702 Automake also handles finding the @code{ansi2knr} support files in some
1703 other directory in the current package.  This is done by prepending the
1704 relative path to the appropriate directory to the @code{ansi2knr}
1705 option.  For instance, suppose the package has ANSI C code in the
1706 @file{src} and @file{lib} subdirs.  The files @file{ansi2knr.c} and
1707 @file{ansi2knr.1} appear in @file{lib}.  Then this could appear in
1708 @file{src/Makefile.am}:
1710 @example
1711 AUTOMAKE_OPTIONS = ../lib/ansi2knr
1712 @end example
1714 If no directory prefix is given, the files are assumed to be in the
1715 current directory.
1717 @node Dependencies,  , ANSI, Programs
1718 @section Automatic dependency tracking
1720 As a developer it is often painful to continually update the
1721 @file{Makefile.in} whenever the include-file dependencies change in a
1722 project.  @code{automake} supplies a way to automatically track
1723 dependency changes, and distribute the dependencies in the generated
1724 @file{Makefile.in}.
1726 Currently this support requires the use of GNU @code{make} and
1727 @code{gcc}.  It might become possible in the future to supply a
1728 different dependency generating program, if there is enough demand.  In
1729 the meantime, this mode is enabled by default if any C program or
1730 library is defined in the current directory, so you may get a @samp{Must
1731 be a separator} error from non-GNU make.
1733 When you decide to make a distribution, the @code{dist} target will
1734 @trindex dist
1735 re-run @code{automake} with @samp{--include-deps} and other options.
1736 This will cause the previously generated dependencies to be inserted
1737 into the generated @file{Makefile.in}, and thus into the distribution.
1738 This step also turns off inclusion of the dependency generation code, so
1739 that those who download your distribution but don't use GNU @code{make}
1740 and @code{gcc} will not get errors.
1742 When added to the @file{Makefile.in}, the dependencies have all
1743 system-specific dependencies automatically removed.  This can be done by
1744 listing the files in @samp{OMIT_DEPENDENCIES}.
1745 @vindex OMIT_DEPENDENCIES
1746 For instance all references to system header files are removed by
1747 @code{automake}.  Sometimes it is useful to specify that a certain
1748 header file should be removed.  For instance if your @file{configure.in}
1749 uses @samp{AM_WITH_REGEX}, then any dependency on @file{rx.h} or
1750 @file{regex.h} should be removed, because the correct one cannot be
1751 known until the user configures the package.
1753 As it turns out, @code{automake} is actually smart enough to handle the
1754 particular case of the regular expression header.  It will also
1755 automatically omit @file{libintl.h} if @samp{AM_GNU_GETTEXT} is used.
1757 Automatic dependency tracking can be suppressed by putting
1758 @code{no-dependencies} in the variable @code{AUTOMAKE_OPTIONS}.
1759 @vindex AUTOMAKE_OPTIONS
1760 @opindex no-dependencies
1762 If you unpack a distribution made by @code{make dist}, and you want to
1763 turn on the dependency-tracking code again, simply re-run
1764 @code{automake}.
1766 The actual dependency files are put under the build directory, in a
1767 subdirectory named @file{.deps}.  These dependencies are machine
1768 specific.  It is safe to delete them if you like; they will be
1769 automatically recreated during the next build.
1772 @node Other objects, Other GNU Tools, Programs, Top
1773 @chapter Other Derived Objects
1775 Automake can handle derived objects which are not C programs.  Sometimes
1776 the support for actually building such objects must be explicitly
1777 supplied, but Automake will still automatically handle installation and
1778 distribution.
1780 @menu
1781 * Scripts::                     Executable scripts
1782 * Headers::                     Header files
1783 * Data::                        Architecture-independent data files
1784 * Sources::                     Derived sources
1785 @end menu
1788 @node Scripts, Headers, Other objects, Other objects
1789 @section Executable Scripts
1791 It is possible to define and install programs which are scripts.  Such
1792 programs are listed using the @samp{SCRIPTS} primary name.
1793 @code{automake} doesn't define any dependencies for scripts; the
1794 @file{Makefile.am} should include the appropriate rules.
1795 @vindex SCRIPTS
1797 @code{automake} does not assume that scripts are derived objects; such
1798 objects must be deleted by hand; see @ref{Clean} for more information.
1800 @code{automake} itself is a script that is generated at configure time
1801 from @file{automake.in}.  Here is how this is handled:
1803 @example
1804 bin_SCRIPTS = automake
1805 @end example
1807 Since @code{automake} appears in the @code{AC_OUTPUT} macro, a target
1808 for it is automatically generated.
1810 Script objects can be installed in @code{bindir}, @code{sbindir},
1811 @code{libexecdir}, or @code{pkgdatadir}.
1814 @node Headers, Data, Scripts, Other objects
1815 @section Header files
1817 Header files are specified by the @samp{HEADERS} family of variables.
1818 Generally header files are not installed, so the @code{noinst_HEADERS}
1819 variable will be the most used.
1820 @vindex HEADERS
1822 All header files must be listed somewhere; missing ones will not appear
1823 in the distribution.  Often it is clearest to list uninstalled headers
1824 with the rest of the sources for a program.  @xref{A Program}.  Headers
1825 listed in a @samp{_SOURCES} variable need not be listed in any
1826 @samp{_HEADERS} variable.
1828 Headers can be installed in @code{includedir}, @code{oldincludedir}, or
1829 @code{pkgincludedir}.
1832 @node Data, Sources, Headers, Other objects
1833 @section Architecture-independent data files
1835 Automake supports the installation of miscellaneous data files using the
1836 @samp{DATA} family of variables.
1837 @vindex DATA
1839 Such data can be installed in the directories @code{datadir},
1840 @code{sysconfdir}, @code{sharedstatedir}, @code{localstatedir}, or
1841 @code{pkgdatadir}.
1843 By default, data files are not included in a distribution.
1845 Here is how @code{automake} installs its auxiliary data files:
1847 @example
1848 pkgdata_DATA = clean-kr.am clean.am @dots{}
1849 @end example
1852 @node Sources,  , Data, Other objects
1853 @section Built sources
1855 Occasionally a file which would otherwise be called ``source'' (eg a C
1856 @samp{.h} file) is actually derived from some other file.  Such files
1857 should be listed in the @code{BUILT_SOURCES} variable.
1858 @vindex BUILT_SOURCES
1860 Built sources are also not compiled by default.  You must explicitly
1861 mention them in some other @samp{_SOURCES} variable for this to happen.
1863 Note that, in some cases, @code{BUILT_SOURCES} will work in somewhat
1864 suprising ways.  In order to get the built sources to work with
1865 automatic dependency tracking, the @file{Makefile} must depend on
1866 @code{$(BUILT_SOURCES)}.  This can cause these sources to be rebuilt at
1867 what might seem like funny times.
1870 @node Other GNU Tools, Documentation, Other objects, Top
1871 @chapter Other GNU Tools
1873 Since Automake is primarily intended to generate @file{Makefile.in}s for
1874 use in GNU programs, it tries hard to interoperate with other GNU tools.
1876 @menu
1877 * Emacs Lisp::                  Emacs Lisp
1878 * gettext::                     Gettext
1879 * Guile::                       Guile
1880 * Libtool::                     Libtool
1881 @end menu
1883 @node Emacs Lisp, gettext, Other GNU Tools, Other GNU Tools
1884 @section Emacs Lisp
1886 Automake provides some support for Emacs Lisp.  The @samp{LISP} primary
1887 is used to hold a list of @samp{.el} files.  Possible prefixes for this
1888 primary are @samp{lisp_} and @samp{noinst_}.  Note that if
1889 @code{lisp_LISP} is defined, then @file{configure.in} must run
1890 @code{AM_PATH_LISPDIR} (@pxref{Macros}).
1891 @vindex LISP
1892 @vindex lisp_LISP
1893 @vindex noinst_LISP
1895 By default Automake will byte-compile all Emacs Lisp source files using
1896 the Emacs found by @code{AM_PATH_LISPDIR}.  If you wish to avoid
1897 byte-compiling, simply define the variable @samp{ELCFILES} to be empty.
1898 @vindex ELCFILES
1899 Byte-compiled Emacs Lisp files are not portable among all versions of
1900 Emacs, so it makes sense to turn this off if you expect sites to have
1901 more than one version of Emacs installed.  Furthermore, many packages
1902 don't actually benefit from byte-compilation.  Still, we recommand that
1903 you leave it enabled by default.  It is probably better for sites with
1904 strange setups to cope for themselves than to make the installation less
1905 nice for everybody else.
1907 @node gettext, Guile, Emacs Lisp, Other GNU Tools
1908 @section Gettext
1910 If @code{AM_GNU_GETTEXT} is seen in @file{configure.in}, then Automake
1911 turns on support for GNU gettext, a message catalog system for
1912 internationalization
1913 (@pxref{GNU Gettext, , , gettext, GNU gettext utilities}).
1915 The @code{gettext} support in Automake requires the addition of two
1916 subdirectories to the package, @file{intl} and @file{po}.  Automake
1917 ensure that these directories exist and are mentioned in @code{SUBDIRS}.
1919 Furthermore, Automake checks that the definition of @samp{ALL_LINGUAS}
1920 in @file{configure.in} corresponds to all the valid @samp{.po} files,
1921 and nothing more.
1924 @node Guile, Libtool, gettext, Other GNU Tools
1925 @section Guile
1927 Automake provides some automatic support for writing Guile modules.
1928 Automake will turn on Guile support if the @code{AM_INIT_GUILE_MODULE}
1929 macro is used in @file{configure.in}.
1931 Right now Guile support just means that the @code{AM_INIT_GUILE_MODULE}
1932 macro is understood to mean:
1933 @itemize @bullet
1934 @item
1935 @code{AM_INIT_AUTOMAKE} is run.
1937 @item
1938 @code{AC_CONFIG_AUX_DIR} is run, with a path of @file{..}.
1939 @end itemize
1941 As the Guile module code matures, no doubt the Automake support will
1942 grow as well.
1944 @node Libtool,  , Guile, Other GNU Tools
1945 @section Libtool
1947 Automake provides support for GNU Libtool (@pxref{Top, , The Libtool
1948 Manual, libtool, The Libtool Manual}) with the @samp{LTLIBRARIES}
1949 primary.  @xref{A Shared Library}.
1951 @node Documentation, Install, Other GNU Tools, Top
1952 @chapter Building documentation
1954 Currently Automake provides support for Texinfo and man pages.
1956 @menu
1957 * Texinfo::                     Texinfo
1958 * Man pages::                   Man pages
1959 @end menu
1962 @node Texinfo, Man pages, Documentation, Documentation
1963 @section Texinfo
1965 If the current directory contains Texinfo source, you must declare it
1966 with the @samp{TEXINFOS} primary.  Generally Texinfo files are converted
1967 into info, and thus the @code{info_TEXINFOS} macro is most commonly used
1968 here.  Note that any Texinfo source file must end in the @samp{.texi} or
1969 @samp{.texinfo} extension.
1970 @vindex TEXINFOS
1971 @vindex info_TEXINFOS
1973 If the @samp{.texi} file @code{@@include}s @file{version.texi}, then that
1974 file will be automatically generated.  @file{version.texi} defines three
1975 Texinfo macros you can reference: @code{EDITION}, @code{VERSION}, and
1976 @code{UPDATED}.  The first two hold the version number of your package
1977 (but are kept separate for clarity); the last is the date the primary
1978 file was last modified.  The @file{version.texi} support requires the
1979 @code{mdate-sh} program; this program is supplied with Automake.
1981 Sometimes an info file actually depends on more than one @samp{.texi}
1982 file.  For instance, in GNU Hello, @file{hello.texi} includes the file
1983 @file{gpl.texi}.  You can tell Automake about these dependencies using
1984 the @samp{@var{texi}_TEXINFOS} variable.  Here is how Hello does it:
1985 @vindex TEXINFOS
1986 @vindex _TEXINFOS
1988 @example
1989 info_TEXINFOS = hello.texi
1990 hello_TEXINFOS = gpl.texi
1991 @end example
1993 By default, Automake requires the file @file{texinfo.tex} to appear in
1994 the same directory as the Texinfo source.  However, if you used
1995 @code{AC_CONFIG_AUX_DIR} in @file{configure.in}, then @file{texinfo.tex}
1996 is looked for there.  Automake supplies @file{texinfo.tex} if
1997 @samp{--add-missing} is given.
1999 If your package has Texinfo files in many directories, you can use the
2000 variable @code{TEXINFO_TEX} to tell automake where to find the canonical
2001 @file{texinfo.tex} for your package.  The value of this variable should
2002 be the relative path from the current @file{Makefile.am} to
2003 @file{texinfo.tex}:
2005 @example
2006 TEXINFO_TEX = ../doc/texinfo.tex
2007 @end example
2009 The option @samp{no-texinfo.tex} can be used to eliminate the
2010 requirement for @file{texinfo.tex}.  Use of the variable
2011 @code{TEXINFO_TEX} is preferable, however, because that allows the
2012 @code{dvi} target to still work.
2014 Automake generates an @code{install-info} target; some people apparently
2015 use this.  By default, info pages are installed by @samp{make install}.
2016 This can be prevented via the @code{no-installinfo} option.
2019 @node Man pages,  , Texinfo, Documentation
2020 @section Man pages
2022 A package can also include man pages.  (Though see the GNU standards on
2023 this matter, @ref{Man Pages, , , standards, The GNU Coding
2024 Standards}.)  Man pages are declared using the @samp{MANS} primary.
2025 Generally the @code{man_MANS} macro is used.  Man pages are
2026 automatically installed in the correct subdirectory of @code{mandir},
2027 based on the file extension.
2028 @vindex MANS
2029 @vindex man_MANS
2031 @c Use @samp{make install} per documentation: (texi)code.
2032 By default, man pages are installed by @samp{make install}.  However,
2033 since the GNU project does not require man pages, many maintainers do
2034 not expend effort to keep the man pages up to date.  In these cases, the
2035 @code{no-installman} option will prevent the man pages from being
2036 installed by default.  The user can still explicitly install them via
2037 @samp{make install-man}.
2038 @opindex no-installman
2039 @trindex install-man
2041 Here is how the documentation is handled in GNU @code{cpio} (which
2042 includes both Texinfo documentation and man pages):
2044 @example
2045 info_TEXINFOS = cpio.texi
2046 man_MANS = cpio.1 mt.1
2047 @end example
2049 Texinfo source and info pages are all considered to be source for the
2050 purposes of making a distribution.
2052 Man pages are not currently considered to be source, because it is not
2053 uncommon for man pages to be automatically generated.
2056 @node Install, Clean, Documentation, Top
2057 @chapter What Gets Installed
2059 Naturally, Automake handles the details of actually installing your
2060 program once it has been built.  All @code{PROGRAMS}, @code{SCRIPTS},
2061 @code{LIBRARIES}, @code{LISP}, @code{DATA} and @code{HEADERS} are
2062 automatically installed in the appropriate places.
2064 Automake also handles installing any specified info and man pages.
2066 Automake generates separate @code{install-data} and @code{install-exec}
2067 targets, in case the installer is installing on multiple machines which
2068 share directory structure---these targets allow the machine-independent
2069 parts to be installed only once.  The @code{install} target depends on
2070 both of these targets.
2071 @trindex install-data
2072 @trindex install-exec
2073 @trindex install
2075 Automake also generates an @code{uninstall} target, and an
2076 @code{installdirs} target.
2077 @trindex uninstall
2078 @trindex installdirs
2080 It is possible to extend this mechanism by defining an
2081 @code{install-exec-local} or @code{install-data-local} target.  If these
2082 targets exist, they will be run at @samp{make install} time.
2083 @trindex install-exec-local
2084 @trindex install-data-local
2086 Variables using the standard directory prefixes @samp{data},
2087 @samp{info}, @samp{man}, @samp{include}, @samp{oldinclude},
2088 @samp{pkgdata}, or @samp{pkginclude} (eg @samp{data_DATA}) are installed
2089 by @samp{install-data}.
2091 Variables using the standard directory prefixes @samp{bin}, @samp{sbin},
2092 @samp{libexec}, @samp{sysconf}, @samp{localstate}, @samp{lib}, or
2093 @samp{pkglib} (eg @samp{bin_PROGRAMS}) are installed by
2094 @samp{install-exec}.
2096 Any variable using a user-defined directory prefix with @samp{exec} in
2097 the name (eg @samp{myexecbin_PROGRAMS} is installed by
2098 @samp{install-exec}.  All other user-defined prefixes are installed by
2099 @samp{install-data}.
2102 @node Clean, Dist, Install, Top
2103 @chapter What Gets Cleaned
2105 The GNU Makefile Standards specify a number of different clean rules.
2106 @c FIXME xref
2107 Generally the files that can cleaned are determined automatically by
2108 Automake.  Of course, Automake also recognizes some variables that can
2109 be defined to specify additional files to clean.  These variables are
2110 @code{MOSTLYCLEANFILES}, @code{CLEANFILES}, @code{DISTCLEANFILES}, and
2111 @code{MAINTAINERCLEANFILES}.
2112 @vindex MOSTLYCLEANFILES
2113 @vindex CLEANFILES
2114 @vindex DISTCLEANFILES
2115 @vindex MAINTAINERCLEANFILES
2118 @node Dist, Tests, Clean, Top
2119 @chapter What Goes in a Distribution
2121 The @code{dist} target in the generated @file{Makefile.in} can be used
2122 to generate a gzip'd @code{tar} file for distribution.  The tar file is
2123 named based on the @samp{PACKAGE} and @samp{VERSION} variables; more
2124 precisely it is named @samp{@var{package}-@var{version}.tar.gz}.
2125 @cvindex PACKAGE
2126 @cvindex VERSION
2127 @trindex dist
2129 For the most part, the files to distribute are automatically found by
2130 Automake: all source files are automatically included in a distribution,
2131 as are all @file{Makefile.am}s and @file{Makefile.in}s.  Automake also
2132 has a built-in list of commonly used files which, if present in the
2133 current directory, are automatically included.  This list is printed by
2134 @samp{automake --help}.  Also, files which are read by @code{configure}
2135 (ie, the source files corresponding to the files specified in the
2136 @code{AC_OUTPUT} invocation) are automatically distributed.
2138 Still, sometimes there are files which must be distributed, but which
2139 are not covered in the automatic rules.  These files should be listed in
2140 the @code{EXTRA_DIST} variable.  Note that @code{EXTRA_DIST} can only
2141 handle files in the current directory; files in other directories will
2142 cause @code{make dist} runtime failures.
2143 @vindex EXTRA_DIST
2145 If you define @code{SUBDIRS}, automake will recursively include the
2146 subdirectories in the distribution.  If @code{SUBDIRS} is defined
2147 conditionally (@pxref{Conditionals}), automake will normally include all
2148 directories that could possibly appear in @code{SUBDIRS} in the
2149 distribution.  If you need to specify the set of directories
2150 conditionally, you can set the variable @code{DIST_SUBDIRS} to the exact
2151 list of subdirectories to include in the distribution.
2152 @vindex DIST_SUBDIRS
2154 Occasionally it is useful to be able to change the distribution before
2155 it is packaged up.  If the @code{dist-hook} target exists, it is run
2156 after the distribution directory is filled, but before the actual tar
2157 (or shar) file is created.  One way to use this is for distributing
2158 files in subdirectories for which a new @file{Makefile.am} is overkill:
2160 @example
2161 dist-hook:
2162         mkdir $(distdir)/random
2163         cp -p random/a1 random/a2 $(distdir)/random
2164 @end example
2166 Automake also generates a @code{distcheck} target which can be help to
2167 ensure that a given distribution will actually work.  @code{distcheck}
2168 makes a distribution, and then tries to do a @code{VPATH} build.
2169 @trindex distcheck
2170 @c FIXME: document distcheck-hook here
2172 @node Tests, Options, Dist, Top
2173 @chapter Support for test suites
2175 Automake supports a two forms of test suite.
2177 If the variable @code{TESTS} is defined, its value is taken to be a list
2178 of programs to run in order to do the testing.  The programs can either
2179 be derived objects or source objects; the generated rule will look both
2180 in @var{srcdir} and @file{.}.
2182 The number of failures will be printed at the end of the run.  If a
2183 given test program exits with a status of 77, then its result is ignored
2184 in the final count.  This feature allows non-portable tests to be
2185 ignored in environments where they don't make sense.
2187 The variable @code{TESTS_ENVIRONMENT} can be used to set environment
2188 variables for the test run; the environment variable @code{srcdir} is
2189 set in the rule.  If all your test programs are scripts, you can also
2190 set @code{TESTS_ENVIRONMENT} to an invocation of the shell (eg
2191 @samp{$(SHELL) -x}); this can be useful for debugging the tests.
2192 @vindex TESTS
2193 @vindex TESTS_ENVIRONMENT
2195 If @samp{dejagnu} appears in @code{AUTOMAKE_OPTIONS}, then the a
2196 @code{dejagnu}-based test suite is assumed.  The value of the variable
2197 @code{DEJATOOL} is passed as the @code{--tool} argument to
2198 @code{runtest}; it defaults to the name of the package.
2200 The variable @code{RUNTESTDEFAULTFLAGS} holds the @code{--tool} and
2201 @code{--srcdir} flags that are passed to dejagnu by default; this can be
2202 overridden if necessary.
2203 @vindex RUNTESTDEFAULTFLAGS
2205 The variables @code{EXPECT}, @code{RUNTEST} and @code{RUNTESTFLAGS} can
2206 also be overridden to provide project-specific values.  For instance,
2207 you will need to do this if you are testing a compiler toolchain,
2208 because the default values do not take into account host and target
2209 names.
2210 @opindex dejagnu
2211 @vindex DEJATOOL
2212 @vindex EXPECT
2213 @vindex RUNTEST
2214 @vindex RUNTESTFLAGS
2215 @c FIXME xref dejagnu
2217 In either case, the testing is done via @samp{make check}.
2220 @node Options, Miscellaneous, Tests, Top
2221 @chapter Changing Automake's Behavior
2223 Various features of Automake can be controlled by options in the
2224 @file{Makefile.am}.  Such options are listed in a special variable named
2225 @code{AUTOMAKE_OPTIONS}.  Currently understood options are:
2226 @vindex AUTOMAKE_OPTIONS
2228 @table @asis
2229 @item @code{gnits}
2230 @itemx @code{gnu}
2231 @itemx @code{foreign}
2232 @item @code{cygnus}
2233 Set the strictness as appropriate.  The @code{gnits} option also implies
2234 @code{readme-alpha} and @code{check-news}.
2236 @item @code{ansi2knr}
2237 @itemx @code{path/ansi2knr}
2238 Turn on automatic de-ANSI-fication.  @xref{ANSI}.  If preceeded by a
2239 path, the generated @file{Makefile.in} will look in the specified
2240 directory to find the @file{ansi2knr} program.  Generally the path
2241 should be a relative path to another directory in the same distribution
2242 (though Automake currently does not check this).
2244 @item @code{check-news}
2245 Cause @code{make dist} to fail unless the current version number appears
2246 in the first few lines of the @file{NEWS} file.
2248 @item @code{dejagnu}
2249 Cause @code{dejagnu}-specific rules to be generated.  @xref{Tests}.
2251 @item @code{dist-shar}
2252 Generate a @code{dist-shar} target as well as the ordinary @code{dist}
2253 target.  This new target will create a shar archive of the
2254 distribution.
2255 @trindex dist-shar
2257 @item @code{dist-zip}
2258 Generate a @code{dist-zip} target as well as the ordinary @code{dist}
2259 target.  This new target will create a zip archive of the distribution.
2260 @trindex dist-zip
2262 @item @code{dist-tarZ}
2263 Generate a @code{dist-tarZ} target as well as the ordinary @code{dist}
2264 target.  This new target will create a compressed tar archive of the
2265 distribution; a traditional @code{tar} and @code{compress} will be
2266 assumed.  Warning: if you are actually using @code{GNU tar}, then the
2267 generated archive might contain nonportable constructs.
2268 @trindex dist-tarZ
2270 @item @code{no-dependencies}
2271 This is similar to using @samp{--include-deps} on the command line, but
2272 is useful for those situations where you don't have the necessary bits
2273 to make automatic dependency tracking work @xref{Dependencies}.  In this
2274 case the effect is to effectively disable automatic dependency tracking.
2276 @item @code{no-installinfo}
2277 The generated @file{Makefile.in} will not cause info pages to be built
2278 or installed by default.  However, @code{info} and @code{install-info}
2279 targets will still be available.  This option is disallowed at
2280 @samp{GNU} strictness and above.
2281 @trindex info
2282 @trindex install-info
2284 @item @code{no-installman}
2285 The generated @file{Makefile.in} will not cause man pages to be
2286 installed by default.  However, an @code{install-man} target will still
2287 be available for optional installation.  This option is disallowed at
2288 @samp{GNU} strictness and above.
2289 @trindex install-man
2291 @item @code{no-texinfo.tex}
2292 Don't require @file{texinfo.tex}, even if there are texinfo files in
2293 this directory.
2295 @item @code{readme-alpha}
2296 If this release is an alpha release, and the file @file{README-alpha}
2297 exists, then it will be added to the distribution.  If this option is
2298 given, version numbers are expected to follow one of two forms.  The
2299 first form is @samp{@var{MAJOR}.@var{MINOR}.@var{ALPHA}}, where each
2300 element is a number; the final period and number should be left off for
2301 non-alpha releases.  The second form is
2302 @samp{@var{MAJOR}.@var{MINOR}@var{ALPHA}}, where @var{ALPHA} is a
2303 letter; it should be omitted for non-alpha releases.
2305 @item @var{version}
2306 A version number (eg @samp{0.30}) can be specified.  If Automake is not
2307 newer than the version specified, creation of the @file{Makefile.in}
2308 will be suppressed.
2309 @end table
2311 Unrecognized options are diagnosed by @code{automake}.
2314 @node Miscellaneous, Conditionals, Options, Top
2315 @chapter Miscellaneous Rules
2317 There are a few rules and variables that didn't fit anywhere else.
2319 @menu
2320 * Tags::                        Interfacing to etags and mkid
2321 * Suffixes::                    Handling new file extensions
2322 @end menu
2325 @node Tags, Suffixes, Miscellaneous, Miscellaneous
2326 @section Interfacing to @code{etags}
2328 @code{automake} will generate rules to generate @file{TAGS} files for
2329 use with GNU Emacs under some circumstances.
2331 If any C source code or headers are present, then @code{tags} and
2332 @code{TAGS} targets will be generated for the directory.
2333 @trindex tags
2335 At the topmost directory of a multi-directory package, a @code{tags}
2336 target file will be generated which, when run, will generate a
2337 @file{TAGS} file that includes by reference all @file{TAGS} files from
2338 subdirectories.
2340 Also, if the variable @code{ETAGS_ARGS} is defined, a @code{tags} target
2341 will be generated.  This variable is intended for use in directories
2342 which contain taggable source that @code{etags} does not understand.
2343 @vindex ETAGS_ARGS
2345 Here is how Automake generates tags for its source, and for nodes in its
2346 Texinfo file:
2348 @example
2349 ETAGS_ARGS = automake.in --lang=none \
2350  --regex='/^@@node[ \t]+\([^,]+\)/\1/' automake.texi
2351 @end example
2353 If you add filenames to @samp{ETAGS_ARGS}, you will probably also
2354 want to set @samp{TAGS_DEPENDENCIES}.  The contents of this variable
2355 are added directly to the dependencies for the @code{tags} target.
2356 @vindex TAGS_DEPENDENCIES
2358 Automake will also generate an @code{ID} target which will run
2359 @code{mkid} on the source.  This is only supported on a
2360 directory-by-directory basis.
2361 @trindex id
2364 @node Suffixes,  , Tags, Miscellaneous
2365 @section Handling new file extensions
2367 It is sometimes useful to introduce a new implicit rule to handle a file
2368 type that Automake does not know about.  If this is done, you must
2369 notify GNU Make of the new suffixes.  This can be done by putting a list
2370 of new suffixes in the @code{SUFFIXES} variable.
2371 @vindex SUFFIXES
2373 For instance, currently automake does not provide any Java support.  If
2374 you wrote a macro to generate @samp{.class} files from @samp{.java}
2375 source files, you would also need to add these suffixes to the list:
2377 @example
2378 SUFFIXES = .java .class
2379 @end example
2381 @node Conditionals, Gnits, Miscellaneous, Top
2382 @chapter Conditionals
2384 Automake supports a simple type of conditionals.
2386 @cvindex AM_CONDITIONAL
2387 Before using a conditional, you must define it by using
2388 @code{AM_CONDITIONAL} in the @code{configure.in} file.  The
2389 @code{AM_CONDITIONAL} macro takes two arguments.
2391 The first argument to @code{AM_CONDITIONAL} is the name of the
2392 conditional.  This should be a simple string starting with a letter and
2393 containing only letters, digits, and underscores.
2395 The second argument to @code{AM_CONDITIONAL} is a shell condition,
2396 suitable for use in a shell if statement.  The condition is evaluated
2397 when @code{configure} is run.
2399 Conditionals typically depend upon options which the user provides to
2400 the @code{configure} script.  Here is an example of how to write a
2401 conditional which is true if the user uses the @samp{--enable-debug}
2402 option.
2404 @example
2405 AC_ARG_ENABLE(debug,
2406 [  --enable-debug    Turn on debugging],
2407 [case "$@{enableval@}" in
2408   yes) debug=true ;;
2409   no)  debug=false ;;
2410   *) AC_MSG_ERROR(bad value $@{enableval@} for --enable-debug) ;;
2411 esac],[debug=false])
2412 AM_CONDITIONAL(DEBUG, test x$debug = xtrue)
2413 @end example
2415 Here is an example of how to use that conditional in @file{Makefile.am}:
2417 @example
2418 if DEBUG
2419 DBG = debug
2420 else
2421 DBG =
2422 endif
2423 noinst_PROGRAMS = $(DBG)
2424 @end example
2426 This trivial example could also be handled using EXTRA_PROGRAMS
2427 (@pxref{A Program}).
2429 You may only test a single variable in an @code{if} statement.  The
2430 @code{else} statement may be omitted.  Conditionals may be nested to any
2431 depth.
2433 Note that conditionals in Automake are not the same as conditionals in
2434 GNU Make.  Automake conditionals are checked at configure time by the
2435 @file{configure} script, and affect the translation from
2436 @file{Makefile.in} to @file{Makefile}.  They are based on options passed
2437 to @file{configure} and on results that @file{configure} has discovered
2438 about the host system.  GNU Make conditionals are checked at make time,
2439 and are based on variables passed to the make program or defined in the
2440 @file{Makefile}.
2442 Automake conditionals will work with any make program.
2444 @node Gnits, Cygnus, Conditionals, Top
2445 @chapter The effect of @code{--gnu} and @code{--gnits}
2447 The @samp{--gnu} option (or @samp{gnu} in the @samp{AUTOMAKE_OPTIONS}
2448 variable) causes @code{automake} to check the following:
2450 @itemize @bullet
2451 @item
2452 The files @file{INSTALL}, @file{NEWS}, @file{README}, @file{COPYING},
2453 @file{AUTHORS}, and @file{ChangeLog} are required at the topmost
2454 directory of the package.
2456 @item
2457 The options @samp{no-installman} and @samp{no-installinfo} are
2458 prohibited.
2459 @end itemize
2461 Note that this option will be extended in the future to do even more
2462 checking; it is advisable to be familiar with the precise requirements
2463 of the GNU standards.  Also, @samp{--gnu} can require certain
2464 non-standard GNU programs to exist for use by various maintainer-only
2465 targets; for instance in the future @code{pathchk} might be required for
2466 @samp{make dist}.
2468 The @samp{--gnits} option does everything that @samp{--gnu} does, and
2469 checks the following as well:
2471 @itemize @bullet
2472 @item
2473 @samp{make dist} will check to make sure the @file{NEWS} file has been
2474 updated to the current version.
2476 @item
2477 The file @file{COPYING.LIB} is prohibited.  The LGPL is apparently
2478 considered a failed experiment.
2480 @item
2481 @samp{VERSION} is checked to make sure its format complies with Gnits
2482 standards.
2483 @c FIXME xref when standards are finished
2485 @item
2486 If @samp{VERSION} indicates that this is an alpha release, and the file
2487 @file{README-alpha} appears in the topmost directory of a package, then
2488 it is included in the distribution.  This is done in @samp{--gnits}
2489 mode, and no other, because this mode is the only one where version
2490 number formats are constrained, and hence the only mode where
2491 @code{automake} can automatically determine whether @file{README-alpha}
2492 should be included.
2494 @item
2495 The file @file{THANKS} is required.
2496 @end itemize
2499 @node Cygnus, Extending, Gnits, Top
2500 @chapter The effect of @code{--cygnus}
2502 Cygnus Solutions has slightly different rules for how a
2503 @file{Makefile.in} is to be constructed.  Passing @samp{--cygnus} to
2504 @code{automake} will cause any generated @file{Makefile.in} to comply
2505 with Cygnus rules.
2507 Here are the precise effects of @samp{--cygnus}:
2509 @itemize @bullet
2510 @item
2511 Info files are always created in the build directory, and not in the
2512 source directory.
2514 @item
2515 @file{texinfo.tex} is not required if a Texinfo source file is
2516 specified.  The assumption is that the file will be supplied, but in a
2517 place that @code{automake} cannot find.  This assumption is an artifact
2518 of how Cygnus packages are typically bundled.
2520 @item
2521 @samp{make dist} will look for files in the build directory as well as
2522 the source directory.  This is required to support putting info files
2523 into the build directory.
2525 @item
2526 Certain tools will be searched for in the build tree as well as in the
2527 user's @samp{PATH}.  These tools are @code{runtest}, @code{expect},
2528 @code{makeinfo} and @code{texi2dvi}.
2530 @item
2531 @code{--foreign} is implied.
2533 @item
2534 The options @samp{no-installinfo} and @samp{no-dependencies} are
2535 implied.
2537 @item
2538 The macros @samp{AM_MAINTAINER_MODE} and @samp{AM_CYGWIN32} are
2539 required.
2541 @item
2542 The @code{check} target doesn't depend on @code{all}.
2543 @end itemize
2545 GNU maintainers are advised to use @samp{gnu} strictness in preference
2546 to the special Cygnus mode.
2549 @node Extending, Distributing, Cygnus, Top
2550 @chapter When Automake Isn't Enough
2552 Automake's implicit copying semantics means that many problems can be
2553 worked around by simply adding some @code{make} targets and rules to
2554 @file{Makefile.in}.  @code{automake} will ignore these additions.
2556 There are some caveats to doing this.  Although you can overload a
2557 target already used by @code{automake}, it is often inadvisable,
2558 particularly in the topmost directory of a non-flat package.  However,
2559 various useful targets have a @samp{-local} version you can specify in your
2560 @file{Makefile.in}.  Automake will supplement the standard target with
2561 these user-supplied targets.
2563 The targets that support a local version are @code{all}, @code{info},
2564 @code{dvi}, @code{check}, @code{install-data}, @code{install-exec},
2565 @code{uninstall}, and the various @code{clean} targets
2566 (@code{mostlyclean}, @code{clean}, @code{distclean}, and
2567 @code{maintainer-clean}).  Note that there are no
2568 @code{uninstall-exec-local} or @code{uninstall-data-local} targets; just
2569 use @code{uninstall-local}.  It doesn't make sense to uninstall just
2570 data or just executables.
2571 @trindex all
2572 @trindex info
2573 @trindex dvi
2574 @trindex check
2575 @trindex install-data
2576 @trindex install-exec
2577 @trindex uninstall
2579 For instance, here is one way to install a file in @file{/etc}:
2581 @example
2582 install-data-local:
2583         $(INSTALL_DATA) $(srcdir)/afile /etc/afile
2584 @end example
2586 Some targets also have a way to run another target, called a @dfn{hook},
2587 after their work is done.  The hook is named after the principal target,
2588 with @samp{-hook} appended.  The targets allowing hooks are
2589 @code{install-data}, @code{install-exec}, @code{dist}, and
2590 @code{distcheck}.
2591 @trindex install-data-hook
2592 @trindex install-exec-hook
2593 @trindex dist-hook
2595 For instance, here is how to create a hard link to an installed program:
2597 @example
2598 install-exec-hook:
2599         ln $(bindir)/program $(bindir)/proglink
2600 @end example
2602 @c FIXME should include discussion of variables you can use in these
2603 @c rules
2606 @node Distributing, Future, Extending, Top
2607 @chapter Distributing @file{Makefile.in}s
2609 Automake places no restrictions on the distribution of the resulting
2610 @file{Makefile.in}s.  We still encourage software authors to distribute
2611 their work under terms like those of the GPL, but doing so is not
2612 required to use Automake.
2614 Some of the files that can be automatically installed via the
2615 @code{--add-missing} switch do fall under the GPL; examine each file
2616 to see.
2619 @node Future, Index, Distributing, Top
2620 @chapter Some ideas for the future
2622 Here are some things that might happen in the future:
2624 @itemize @bullet
2625 @item
2626 HTML support.
2628 @item
2629 The output will be cleaned up.  For instance, only variables which are
2630 actually used will appear in the generated @file{Makefile.in}.
2632 @item
2633 There will be support for automatically recoding a distribution.  The
2634 intent is to allow a maintainer to use whatever character set is most
2635 convenient locally, but for all distributions to be Unicode or
2636 @w{ISO 10646} with the UTF-8 encoding.
2638 @item
2639 Support for automatically generating packages (eg Debian packages, RPM
2640 packages, Solaris packages, etc).  This will happen more quickly if
2641 someone with package-building experience can tell me what would be
2642 helpful.
2644 @item
2645 Rewrite in Guile.  This won't happen in the near future, but it will
2646 eventually happen.
2647 @end itemize
2649 @node Index,  , Future, Top
2650 @unnumbered Index
2652 @printindex cp
2654 @contents
2655 @bye