1 \input texinfo @c -*-texinfo-*-
3 @setfilename automake.info
11 This file documents GNU automake @value{VERSION}
13 Copyright (C) 1995 Free Software Foundation, Inc.
15 Permission is granted to make and distribute verbatim copies of
16 this manual provided the copyright notice and this permission notice
17 are preserved on all copies.
20 Permission is granted to process this file through TeX and print the
21 results, provided the printed document carries copying permission
22 notice identical to this one except for the removal of this paragraph
26 Permission is granted to copy and distribute modified versions of this
27 manual under the conditions for verbatim copying, provided that the entire
28 resulting derived work is distributed under the terms of a permission
29 notice identical to this one.
31 Permission is granted to copy and distribute translations of this manual
32 into another language, under the above conditions for modified versions,
33 except that this permission notice may be stated in a translation approved
40 @subtitle For version @value{VERSION}, @value{UPDATED}
43 @vskip 0pt plus 1filll
44 Copyright @copyright{} 1995 Free Software Foundation, Inc.
46 This is the first edition of the GNU AutoMake documentation,@*
47 and is consistent with GNU AutoMake @value{VERSION}.@*
49 Published by the Free Software Foundation @*
50 675 Massachusetts Avenue, @*
51 Cambridge, MA 02139 USA @*
53 Permission is granted to make and distribute verbatim copies of
54 this manual provided the copyright notice and this permission notice
55 are preserved on all copies.
57 Permission is granted to copy and distribute modified versions of this
58 manual under the conditions for verbatim copying, provided that the entire
59 resulting derived work is distributed under the terms of a permission
60 notice identical to this one.
62 Permission is granted to copy and distribute translations of this manual
63 into another language, under the above conditions for modified versions,
64 except that this permission notice may be stated in a translation
65 approved by the Free Software Foundation.
69 @node Top, Introduction, (dir), (dir)
70 @comment node-name, next, previous, up
73 This file documents the GNU AutoMake package for creating GNU
74 Standards-compliant Makefiles from template files. This edition
75 documents version @value{VERSION}.
78 * Introduction:: AutoMake's purpose
79 * Details:: Creating an AutoMake template file
80 * Invoking automake:: Creating a Makefile.in
81 * Future:: Some ideas for the future.
82 * Some index:: Index of variables
90 The GNU Makefile Standards Document
91 (@pxref{Makefile Conventions, , Makefile Conventions, standards.info, The
92 GNU Coding Standards})
94 and subject to change. The goal of AutoMake is to remove the burden of
95 Makefile maintenance from back the individual GNU maintainer (and put it
96 on the back of the AutoMake maintainer)
98 Typical AutoMake input files are simply a series of macro definitions.
99 AutoMake processes these files to produce @file{Makefile.in}s which are
102 AutoMake does force some structure on the package maintainer. However,
103 it is felt that this (minor) inconvenience is more than offset by
104 AutoMake's convenience.
108 @chapter Making @code{automake} templates
111 * configure:: AutoMake and configure
112 * Depth:: Types of package hierarchy
113 * Programs:: What gets built
114 * Source:: Specifying source files
115 * Scripts:: Building scripts
116 * Libraries:: Building libraries
117 * Libstuff:: Programs that aren't user-visible
119 * Docs:: Specifying documentation files
120 * ANSI:: Automatic de-ANSI-fication
121 * Install:: What gets installed
122 * Distribution:: What gets distributed
124 * Dependencies:: Automatic dependency tracking
125 * Extending:: If the defaults aren't enough
129 @section How @code{automake} and @code{configure} interact
131 AutoMake enforces a certain amount of structure on the package
132 maintainer. One such item is its requirement that the
133 @file{configure.in} for the package define the variables @samp{PACKAGE}
136 @var{PACKAGE} should be the name of the package as it appears when
137 bundled for distribution. For instance, AutoMake defines @samp{PACKAGE}
140 @var{VERSION} should be the version number of the release being worked
141 on. We recommend that you make @file{configure.in} the only place you
142 define the version number for your package; this makes releases simpler.
144 Here is an example of what to put in @file{configure.in}:
149 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
150 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
155 If your @file{configure.in} uses @samp{AC_CONFIG_HEADER}, then in each
156 directory you should define the @samp{CONFIG_HEADER} variable to hold
157 the name of the header.
159 For instance, in cpio's @file{src/Makefile.am}, we see:
162 CONFIG_HEADER = ../config.h
166 @code{automake} also assumes that your @file{configure} script will
167 define the variable @samp{INSTALL_SCRIPT}. Until this is incorporated
168 in @code{autoconf}'s @samp{AC_PROG_INSTALL} macro, you can use this
172 ## --------------------------------------------------------- ##
173 ## Use AC_PROG_INSTALL, supplementing it with INSTALL_SCRIPT ##
175 ## --------------------------------------------------------- ##
177 AC_DEFUN(fp_PROG_INSTALL,
179 test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='$@{INSTALL@} -m 755'
180 AC_SUBST(INSTALL_SCRIPT)dnl
185 @code{automake} also assumes your @file{configure.in} calls
186 @samp{AC_ARG_PROGRAM}.
190 @section Types of directory hierarchy
192 @code{automake} supports three kinds of directory hierarcy: ``flat'',
193 ``shallow'', and ``deep''.
195 A flat package is one in which all the files are in a single directory.
196 The @file{Makefile.am} for such a package by definition lacks a
197 @samp{SUBDIRS} macro. (There are not any @code{automake}-using packages
200 A deep package is one in which all the source lies in subdirectories;
201 the top level directory contains only configuration information. GNU
202 cpio is a good example of such a package (as is GNU tar, although it
203 does not presently use @code{automake}). The top level
204 @file{Makefile.am} for a deep package will contain a @samp{SUBDIRS}
205 macro, but no other macros to define objects which are built (eg
208 A shallow package is one in which the primary source resides in the
209 top-level directory, while various parts (typically libraries) reside in
210 subdirectories. @code{automake} is one such package (as is GNU make,
211 which does not currently use @code{automake}).
214 The @samp{SUBDIRS} macro holds a list of subdirectories in which
215 building of various sorts can occur. Many targets (eg @samp{all}) in
216 the generated @file{Makefile} will run both locally and in all specified
217 subdirectories. Note that the directories listed in @samp{SUBDIRS} are
218 not expected to contain @file{Makefile.am}s; only @file{Makefile}s
219 (after configuration). This allows inclusion of libraries from packages
220 which do not use @code{automake} (such as gettext).
222 FIXME supply complete list of recursive targets?
226 @section Which Programs Are Built
228 In a directory containing source that gets built into a program (as
229 opposed to a library), the @samp{PROGRAMS} variable is used:
235 In this simple case, the resulting @file{Makefile.in} will contain code
236 to generate a program named @code{hello}. The variable
237 @samp{@var{prog}_SOURCE} is used to specify which source files get built
241 hello_SOURCE = hello.c
244 This causes @file{hello.o} to be built from @code{hello.c} at compile
245 time, and then linked into @file{hello}.
247 Multiple programs can be built in a single directory -- simply list them
248 all in the @samp{PROGRAMS} definition. Multiple programs can share a
249 single source file. The source file must be listed in each ``_SOURCE''
252 Sometimes it is useful to determine the programs that are to be built at
253 configure time. For instance, GNU cpio only builts @code{mt} and
254 @code{rmt} under special circumstances.
256 In this case, you must notify AutoMake of all the programs that can
257 possibly be built, but at the same time cause the generated
258 @file{Makefile.in} to use the programs specified by @code{configure}.
259 You can do this using the @code{AM_PROGRAMS} variable. Here is the
260 relevant code from cpio:
264 AM_PROGRAMS = cpio pax mt rmt
268 If you need to link against libraries that are not found by
269 @code{configure}, you can use @samp{LDADD} to do so. This variable
270 actually can be used to add any options to the linker command line.
272 Sometimes, multiple programs are built in one directory but do not share
273 the same link-time requirements. In this case, you can use the
274 @samp{@var{prog}_LDADD} variable to override the global @samp{LDADD}.
275 (If this variable exists for a given program, then that program is not
276 linked using @samp{LDADD}).
278 For instance, in GNU cpio, @code{pax}, @code{cpio}, and @code{mt} are
279 linked against the library @file{libcpio.a}. However, @code{rmt} is
280 built in the same directory, and has no such link requirement. Thus:
283 LDADD = ../lib/libcpio.a @@INTLLIBS@@
289 @section Specifying Source Code
291 Any header files in your distribution must be listed in the
292 @samp{HEADERS} variable. This is used both for making distributions,
293 and for automatic de-ANSI-fication.
296 HEADERS = hello.h getopt.h rx.h
301 @section Programs Which are Scripts
303 It is possible to define and install programs which are scripts. Such
304 programs should be listed in the @samp{SCRIPTS} variable.
305 @code{automake} doesn't define any dependencies for scripts; if a script
306 is not to be installed as-is, the @file{Makefile.am} should include the
309 @code{automake} itself is a script that is generated at configure time
310 from @file{automake.in}. Here is how this is handled:
315 automake: automake.in
316 CONFIG_FILES=$@@ CONFIG_HEADERS= ./config.status
321 @section Building Libraries
323 The @samp{LIBRARIES} variable holds the names of libraries to be built
324 in the current directory. If the libraries to be built vary at
325 configure time, you may define @samp{AM_LIBRARIES} to supply
326 @code{automake} with the full static list of possible libraries.
328 For a given library @samp{zot}, the sources are taken to be in
329 @samp{@var{zot}_SOURCES}, just as for programs. Note that libraries and
330 programs share one namespace in @code{automake}: one directory cannot
331 contain both a library (``liblob.a'') and a program (``lob'') with the
334 Here is how the @file{libcpio.a} library is built in the GNU cpio
335 distribution's @file{lib} subdirectory:
339 cpio_SOURCES = dirname.c dstring.c error.c filemode.c \
340 getopt.c getopt1.c idcache.c makepath.c octal.c \
341 stpcpy.c stripslash.c userspec.c xmalloc.c xstrdup.c
346 @section Programs which are not User-Visible
348 @code{automake} allows for the automatic building and installation of
349 programs which are not actually used by the user, but are instead used
350 by other user-visible programs. Such programs are installed in a
351 separate directory from user-visible programs.
353 For programs of this sort which are build from C source, define the
354 names in @samp{LIBPROGRAMS}. For scripts, use @samp{LIBSCRIPTS}. In
355 other respects, these variables are similar to @samp{PROGRAMS} and
356 @samp{SCRIPTS}. Both of these variables have ``AM_'' override forms.
358 Here is how to generate a program named @code{goodbye}, a helper for
362 LIBPROGRAMS = goodbye
363 goodbye_SOURCES = goodbye.c
368 @section Architecture-independent data files
370 @code{automake} supports two different ways to install
371 architecture-independent data files.
373 The first variable that can be used is @samp{DATA}. This is intended to
374 be used for only a small number of data files. The files are installed
375 in @samp{$@{datadir@}}.
377 The second variable that can be used is @samp{PACKAGEDATA}. This is
378 intended for a larger number of data files. The files are installed in
379 @samp{$@{datadir@}/$@{PACKAGE@}}. This variable is what @code{automake}
383 PACKAGEDATA = clean-kr.am clean.am compile-kr.am compile-vars.am \
384 compile.am data.am depend.am dist-subd-top.am dist-subd-vars.am \
385 dist-subd.am dist-vars.am dist.am footer.am header-vars.am header.am \
386 libscripts.am libprograms.am libraries-vars.am libraries.am library.am \
387 mans-vars.am mans.am packagedata.am program.am programs.am remake-hdr.am \
388 remake-subd.am remake.am scripts.am subdirs.am tags.am tags-subd.am \
389 texinfos-vars.am texinfos.am hack-make.sed nl-remove.sed
392 All @samp{DATA} and @samp{PACKAGEDATA} files are included in a
397 @section Texinfo and Man Pages
400 If the current directory contains Texinfo source, you must declare it
401 with the @samp{TEXINFOS} macro.
402 Note that any Texinfo source file must end in the @file{.texi} extension
403 (@file{.texinfo} won't work).
405 If the @file{.texi} file ``@@include''s @file{version.texi}, then that
406 file will be automatically generated. @file{version.texi} defines three
407 Texinfo macros you can reference: @samp{EDITION}, @samp{VERSION}, and
408 @samp{UPDATED}. The first two hold the version number of your package
409 (but are kept separate for clarity); the last is the date the primary
410 file was last modified.
411 The @file{version.texi} support requires a version of @code{date} that
412 accepts the @samp{-r} (read time from a file) option.
414 Sometimes an info file actually depends on more than one @file{.texi}
415 file. For instance, in the @samp{xdvik} distribution,
416 @file{kpathsea.texi} includes the files @file{install.texi},
417 @file{copying.texi}, and @file{freedom.texi}. You can tell
418 @code{automake} about these dependencies using the @samp{texi_TEXINFOS}
419 variable. Here is how @samp{xdvik} could do it:
422 TEXINFOS = kpathsea.texi
423 kpathsea_TEXINFOS = install.texi copying.texi freedom.texi
426 @code{automake} might be modified to detect these dependencies
429 Currently @code{automake} can only handle one primary @file{.texi} file.
430 This restriction will be lifted if it proves too onerous.
432 @code{automake} will warn if a directory containing Texinfo source does
433 not also contain the file @file{texinfo.tex}. (I'm not sure if this is
434 a good rule or not. Comments?)
437 @subsection Man pages
438 A package can also include man pages. (Though see the GNU standards on
439 this matter. FIXME xref).
440 Man pages are declared using the @samp{MANS} macro.
443 Here is how the documentation is handled in GNU cpio (which includes
444 both Texinfo documentation and man pages):
451 Texinfo source, info pages and man pages are all considered to be
452 ``source'' for the purposes of making a distribution.
456 @section Automatic de-ANSI-fication of Source
458 If @file{Makefile.am} includes the text @samp{@@kr@@}, then code to
459 handle automatic de-ANSI-fication is included in the generated
462 This means that each C source file will be treated as ANSI C. If no
463 ANSI C compiler is available on the build system, then the code will be
464 turned into K&R C before compilation.
466 Each directory that uses automatic de-ANSI-fication must include the
467 source files @file{ansi2knr.c} and @file{ansi2knr.1}. Also, your
468 @file{configure} script must define the variables @samp{U} and
469 @samp{ANSI2KNR}. Here is a snippet you can add to @file{aclocal.m4} to
473 ## ------------------------------- ##
474 ## Check for function prototypes. ##
475 ## ------------------------------- ##
477 AC_DEFUN(fp_C_PROTOTYPES,
478 [AC_REQUIRE([fp_PROG_CC_STDC])
479 AC_MSG_CHECKING([for function prototypes])
480 if test "$ac_cv_prog_cc_stdc" != no; then
482 AC_DEFINE(PROTOTYPES)
486 U=_ ANSI2KNR=./ansi2knr
489 AC_SUBST(ANSI2KNR)dnl
493 ## ----------------------------------------- ##
494 ## ANSIfy the C compiler whenever possible. ##
495 ## ----------------------------------------- ##
497 # @@defmac AC_PROG_CC_STDC
498 # @@maindex PROG_CC_STDC
500 # If the C compiler in not in ANSI C mode by default, try to add an option
501 # to output variable @@code@{CC@} to make it so. This macro tries various
502 # options that select ANSI C on some system or another. It considers the
503 # compiler to be in ANSI C mode if it defines @@code@{__STDC__@} to 1 and
504 # handles function prototypes correctly.
506 # If you use this macro, you should check after calling it whether the C
507 # compiler has been set to accept ANSI C; if not, the shell variable
508 # @@code@{ac_cv_prog_cc_stdc@} is set to @@samp@{no@}. If you wrote your source
509 # code in ANSI C, you can make an un-ANSIfied copy of it by using the
510 # program @@code@{ansi2knr@}, which comes with Ghostscript.
513 AC_DEFUN(fp_PROG_CC_STDC,
514 [AC_MSG_CHECKING(for $@{CC-cc@} option to accept ANSI C)
515 AC_CACHE_VAL(ac_cv_prog_cc_stdc,
516 [ac_cv_prog_cc_stdc=no
517 ac_save_CFLAGS="$CFLAGS"
518 # Don't try gcc -ansi; that turns off useful extensions and
519 # breaks some systems' header files.
521 # Ultrix and OSF/1 -std1
522 # HP-UX -Aa -D_HPUX_SOURCE
524 for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" -Xc
526 CFLAGS="$ac_save_CFLAGS $ac_arg"
528 [#if !defined(__STDC__) || __STDC__ != 1
531 ], [int test (int i, double x);
532 struct s1 @{int (*f) (int a);@};
533 struct s2 @{int (*f) (double a);@};],
534 [ac_cv_prog_cc_stdc="$ac_arg"; break])
536 CFLAGS="$ac_save_CFLAGS"
538 AC_MSG_RESULT($ac_cv_prog_cc_stdc)
539 case "x$ac_cv_prog_cc_stdc" in
541 *) CC="$CC $ac_cv_prog_cc_stdc" ;;
548 @section What Gets Installed
550 Naturally, @code{automake} handles the details of actually installing
551 your program once it has been built. Any objects specified in
552 @samp{PROGRAMS}, @samp{LIBPROGRAMS}, @samp{SCRIPTS}, @samp{LIBSCRIPTS},
553 @samp{DATA}, and @samp{PACKAGEDATA} are automatically installed in the
556 @code{automake} also handles installing any specified info and man
559 FIXME xref to Extending node here; sometimes you need to install more.
561 @code{automake} generates separate @samp{install-data} and
562 @samp{install-exec} targets, in case the installer is installing on
563 multiple machines which share directory structure -- these targets allow
564 the machine-independent parts to be installed only once.
566 @code{automake} also generates an @samp{uninstall} target.
568 In the future @code{automake} will be extended to generate an
569 @samp{installdirs} target.
573 @section Building a Release
575 The @samp{dist} target in the generated @file{Makefile.in} can be used
576 to generate a gzip'd tar file for distribution. The tar file is named
577 based on the @var{PACKAGE} and @var{VERSION} variables.
579 For the most part, the files to distribute are automatically found by
580 @code{automake}: all source files are automatically included in a
581 distribution, as are all @file{Makefile.am}s and @file{Makefile.in}s.
582 @code{automake} also has a built-in list of commonly used files which,
583 if present in the current directory, are automatically included. This
584 list is printed by @code{automake --help}.
586 Still, sometimes there are files which must be distributed, but which
587 are not covered in the automatic rules. These files should be listed in
588 the @samp{DIST_OTHER} variable.
590 For instance, in the @code{automake} distribution,
591 @file{automake.in} (the source to
592 @code{automake}) is not found automatically. So in the
593 @file{Makefile.am}, we have:
596 DIST_OTHER = automake.in
599 FIXME mention files that are found automatically but not printed by
601 FIXME: describe DIST_SUBDIRS or not? It is a hack which might go away.
604 @section Interfacing to @code{etags}
606 @code{automake} will generate rules to generate @file{TAGS} files for
607 use with GNU Emacs under some circumstances.
609 If any C source code or headers are present, then a @file{TAGS} file
610 will be generated for the directory.
612 At the topmost directory of a multi-directory package, a @file{TAGS}
613 file will be generated that will include by reference all @file{TAGS}
614 files from subdirectories.
616 Also, if the variable @samp{ETAGS_ARGS} is defined, a @file{TAGS} file
617 will be generated. This variable is intended for use in directories
618 which contain taggable source that @code{etags} does not understand.
619 (For instance, it could be set to a regexp to recognize node names in
620 Texinfo documentation)
624 @section Automatic dependency tracking
626 As a developer it is often painful to continually update the
627 @file{Makefile.in} whenever the include-file dependencies change in a
628 project. @code{automake} supplies a way to automatically track
629 dependency changes, and distribute the dependencies in the generated
632 Currently this support requires the use of @code{GNU make} and
633 @code{gcc}. It might become possible in the future to supply a
634 different dependency generating program, if there is enough demand.
636 This mode is enabled by default if any C program or library is defined
637 in the current directory.
639 When you decide to make a distribution, the @samp{dist} target will
640 re-run @code{automake} with the @samp{--include-deps} option. This
641 causes the previously generated dependencies to be inserted into the
642 generated @file{Makefile.in}, and thus into the distribution.
643 @samp{--include-deps} also turns off inclusion of the dependency
646 There should probably be a way to suppress this mode.
650 @section When AutoMake Isn't Enough
652 Sometimes @code{automake} isn't enough. Then you just lose.
654 Actually, @code{automake}s implicit copying semantics means that many
655 problems can be worked around by simply adding some @code{make} targets
656 and rules to @file{Makefile.in}. @code{automake} will ignore these
659 There are some caveats to doing this. You can't overload a target
660 already used by @code{automake}. However, various useful targets have a
661 ``-local'' version you can specify in your @file{Makefile.in}.
663 The targets that support a local version are @samp{all}, @samp{info},
664 @samp{dvi}, @samp{check}, @samp{install-data}, @samp{install-exec}, and
665 @samp{uninstall}. (Currently @samp{install} is also supported, but this
668 For instance, here is how to install a file in @file{/etc}:
672 $(INSTALL_DATA) $(srcdir)/afile /etc/afile
676 @node Invoking automake
677 @chapter Using @code{automake} to Create @file{Makefile.in}
679 There are basically two modes in which @code{automake} can be run.
681 In the first, most common, mode, @code{automake} is simply run without
682 any arguments. It will determine which @file{Makefile.am}s exist by
683 looking in the current directory and immediate subdirectories, and will
684 automatically build @file{Makefile.in}s in these directories.
686 In the second mode, @code{automake} is run with the name of one or more
687 @file{Makefile}s as arguments. It then rebuilds the corresponding
688 @file{Makefile.in}s from the (also) corresponding @file{Makefile.am}s.
689 This second mode is most often used by @code{make} itself, when it
690 notices that a @code{Makefile.in} is out of date.
694 @chapter Some ideas for the future
696 Here are some things that might happen in the future:
700 Better error checking would be good.
710 * Need section on operation of automake: it reads Makefile.am and COPIES