| 1 | This is automake.info, produced by makeinfo version 4.1 from | 
|---|
| 2 | automake.texi. | 
|---|
| 3 |  | 
|---|
| 4 | INFO-DIR-SECTION GNU admin | 
|---|
| 5 | START-INFO-DIR-ENTRY | 
|---|
| 6 | * automake: (automake).         Making Makefile.in's | 
|---|
| 7 | END-INFO-DIR-ENTRY | 
|---|
| 8 |  | 
|---|
| 9 | INFO-DIR-SECTION Individual utilities | 
|---|
| 10 | START-INFO-DIR-ENTRY | 
|---|
| 11 | * aclocal: (automake)Invoking aclocal.          Generating aclocal.m4 | 
|---|
| 12 | END-INFO-DIR-ENTRY | 
|---|
| 13 |  | 
|---|
| 14 | This file documents GNU automake 1.4-p6 | 
|---|
| 15 |  | 
|---|
| 16 | Copyright (C) 1995, 96, 97, 98 Free Software Foundation, Inc. | 
|---|
| 17 |  | 
|---|
| 18 | Permission is granted to make and distribute verbatim copies of this | 
|---|
| 19 | manual provided the copyright notice and this permission notice are | 
|---|
| 20 | preserved on all copies. | 
|---|
| 21 |  | 
|---|
| 22 | Permission is granted to copy and distribute modified versions of | 
|---|
| 23 | this manual under the conditions for verbatim copying, provided that | 
|---|
| 24 | the entire resulting derived work is distributed under the terms of a | 
|---|
| 25 | permission notice identical to this one. | 
|---|
| 26 |  | 
|---|
| 27 | Permission is granted to copy and distribute translations of this | 
|---|
| 28 | manual into another language, under the above conditions for modified | 
|---|
| 29 | versions, except that this permission notice may be stated in a | 
|---|
| 30 | translation approved by the Foundation. | 
|---|
| 31 |  | 
|---|
| 32 |  | 
|---|
| 33 | File: automake.info,  Node: Top,  Next: Introduction,  Prev: (dir),  Up: (dir) | 
|---|
| 34 |  | 
|---|
| 35 | GNU Automake | 
|---|
| 36 | ************ | 
|---|
| 37 |  | 
|---|
| 38 | This file documents the GNU Automake package for creating GNU | 
|---|
| 39 | Standards-compliant Makefiles from template files.  This edition | 
|---|
| 40 | documents version 1.4-p6. | 
|---|
| 41 |  | 
|---|
| 42 | * Menu: | 
|---|
| 43 |  | 
|---|
| 44 | * Introduction::                Automake's purpose | 
|---|
| 45 | * Generalities::                General ideas | 
|---|
| 46 | * Examples::                    Some example packages | 
|---|
| 47 | * Invoking Automake::           Creating a Makefile.in | 
|---|
| 48 | * configure::                   Scanning configure.in | 
|---|
| 49 | * Top level::                   The top-level Makefile.am | 
|---|
| 50 | * Programs::                    Building programs and libraries | 
|---|
| 51 | * Other objects::               Other derived objects | 
|---|
| 52 | * Other GNU Tools::             Other GNU Tools | 
|---|
| 53 | * Documentation::               Building documentation | 
|---|
| 54 | * Install::                     What gets installed | 
|---|
| 55 | * Clean::                       What gets cleaned | 
|---|
| 56 | * Dist::                        What goes in a distribution | 
|---|
| 57 | * Tests::                       Support for test suites | 
|---|
| 58 | * Options::                     Changing Automake's behavior | 
|---|
| 59 | * Miscellaneous::               Miscellaneous rules | 
|---|
| 60 | * Include::                     Including extra files in an Automake template. | 
|---|
| 61 | * Conditionals::                Conditionals | 
|---|
| 62 | * Gnits::                       The effect of `--gnu' and `--gnits' | 
|---|
| 63 | * Cygnus::                      The effect of `--cygnus' | 
|---|
| 64 | * Extending::                   Extending Automake | 
|---|
| 65 | * Distributing::                Distributing the Makefile.in | 
|---|
| 66 | * Future::                      Some ideas for the future | 
|---|
| 67 | * Macro and Variable Index:: | 
|---|
| 68 | * General Index:: | 
|---|
| 69 |  | 
|---|
| 70 |  | 
|---|
| 71 | File: automake.info,  Node: Introduction,  Next: Generalities,  Prev: Top,  Up: Top | 
|---|
| 72 |  | 
|---|
| 73 | Introduction | 
|---|
| 74 | ************ | 
|---|
| 75 |  | 
|---|
| 76 | Automake is a tool for automatically generating `Makefile.in's from | 
|---|
| 77 | files called `Makefile.am'.  Each `Makefile.am' is basically a series | 
|---|
| 78 | of `make' macro definitions (with rules being thrown in occasionally). | 
|---|
| 79 | The generated `Makefile.in's are compliant with the GNU Makefile | 
|---|
| 80 | standards. | 
|---|
| 81 |  | 
|---|
| 82 | The GNU Makefile Standards Document (*note Makefile Conventions: | 
|---|
| 83 | (standards)Makefile Conventions.)  is long, complicated, and subject to | 
|---|
| 84 | change.  The goal of Automake is to remove the burden of Makefile | 
|---|
| 85 | maintenance from the back of the individual GNU maintainer (and put it | 
|---|
| 86 | on the back of the Automake maintainer). | 
|---|
| 87 |  | 
|---|
| 88 | The typical Automake input file is simply a series of macro | 
|---|
| 89 | definitions.  Each such file is processed to create a `Makefile.in'. | 
|---|
| 90 | There should generally be one `Makefile.am' per directory of a project. | 
|---|
| 91 |  | 
|---|
| 92 | Automake does constrain a project in certain ways; for instance it | 
|---|
| 93 | assumes that the project uses Autoconf (*note Introduction: | 
|---|
| 94 | (autoconf)Top.), and enforces certain restrictions on the | 
|---|
| 95 | `configure.in' contents. | 
|---|
| 96 |  | 
|---|
| 97 | Automake requires `perl' in order to generate the `Makefile.in's. | 
|---|
| 98 | However, the distributions created by Automake are fully GNU | 
|---|
| 99 | standards-compliant, and do not require `perl' in order to be built. | 
|---|
| 100 |  | 
|---|
| 101 | Mail suggestions and bug reports for Automake to | 
|---|
| 102 | <bug-automake@gnu.org>. | 
|---|
| 103 |  | 
|---|
| 104 |  | 
|---|
| 105 | File: automake.info,  Node: Generalities,  Next: Examples,  Prev: Introduction,  Up: Top | 
|---|
| 106 |  | 
|---|
| 107 | General ideas | 
|---|
| 108 | ************* | 
|---|
| 109 |  | 
|---|
| 110 | The following sections cover a few basic ideas that will help you | 
|---|
| 111 | understand how Automake works. | 
|---|
| 112 |  | 
|---|
| 113 | * Menu: | 
|---|
| 114 |  | 
|---|
| 115 | * General Operation::           General operation of Automake | 
|---|
| 116 | * Depth::                       The kinds of packages | 
|---|
| 117 | * Strictness::                  Standards conformance checking | 
|---|
| 118 | * Uniform::                     The Uniform Naming Scheme | 
|---|
| 119 | * Canonicalization::            How derived variables are named | 
|---|
| 120 |  | 
|---|
| 121 |  | 
|---|
| 122 | File: automake.info,  Node: General Operation,  Next: Depth,  Prev: Generalities,  Up: Generalities | 
|---|
| 123 |  | 
|---|
| 124 | General Operation | 
|---|
| 125 | ================= | 
|---|
| 126 |  | 
|---|
| 127 | Automake works by reading a `Makefile.am' and generating a | 
|---|
| 128 | `Makefile.in'.  Certain macros and targets defined in the `Makefile.am' | 
|---|
| 129 | instruct Automake to generate more specialized code; for instance, a | 
|---|
| 130 | `bin_PROGRAMS' macro definition will cause targets for compiling and | 
|---|
| 131 | linking programs to be generated. | 
|---|
| 132 |  | 
|---|
| 133 | The macro definitions and targets in the `Makefile.am' are copied | 
|---|
| 134 | verbatim into the generated file.  This allows you to add arbitrary code | 
|---|
| 135 | into the generated `Makefile.in'.  For instance the Automake | 
|---|
| 136 | distribution includes a non-standard `cvs-dist' target, which the | 
|---|
| 137 | Automake maintainer uses to make distributions from his source control | 
|---|
| 138 | system. | 
|---|
| 139 |  | 
|---|
| 140 | Note that GNU make extensions are not recognized by Automake.  Using | 
|---|
| 141 | such extensions in a `Makefile.am' will lead to errors or confusing | 
|---|
| 142 | behavior. | 
|---|
| 143 |  | 
|---|
| 144 | Automake tries to group comments with adjoining targets and macro | 
|---|
| 145 | definitions in an intelligent way. | 
|---|
| 146 |  | 
|---|
| 147 | A target defined in `Makefile.am' generally overrides any such | 
|---|
| 148 | target of a similar name that would be automatically generated by | 
|---|
| 149 | `automake'.  Although this is a supported feature, it is generally best | 
|---|
| 150 | to avoid making use of it, as sometimes the generated rules are very | 
|---|
| 151 | particular. | 
|---|
| 152 |  | 
|---|
| 153 | Similarly, a macro defined in `Makefile.am' will override any | 
|---|
| 154 | definition of the macro that `automake' would ordinarily create.  This | 
|---|
| 155 | feature is more often useful than the ability to override a target | 
|---|
| 156 | definition.  Be warned that many of the macros generated by `automake' | 
|---|
| 157 | are considered to be for internal use only, and their names might | 
|---|
| 158 | change in future releases. | 
|---|
| 159 |  | 
|---|
| 160 | When examining a macro definition, Automake will recursively examine | 
|---|
| 161 | macros referenced in the definition.  For example, if Automake is | 
|---|
| 162 | looking at the content of `foo_SOURCES' in this snippet | 
|---|
| 163 |  | 
|---|
| 164 | xs = a.c b.c | 
|---|
| 165 | foo_SOURCES = c.c $(xs) | 
|---|
| 166 |  | 
|---|
| 167 | it would use the files `a.c', `b.c', and `c.c' as the contents of | 
|---|
| 168 | `foo_SOURCES'. | 
|---|
| 169 |  | 
|---|
| 170 | Automake also allows a form of comment which is _not_ copied into | 
|---|
| 171 | the output; all lines beginning with `##' are completely ignored by | 
|---|
| 172 | Automake. | 
|---|
| 173 |  | 
|---|
| 174 | It is customary to make the first line of `Makefile.am' read: | 
|---|
| 175 |  | 
|---|
| 176 | ## Process this file with automake to produce Makefile.in | 
|---|
| 177 |  | 
|---|
| 178 |  | 
|---|
| 179 | File: automake.info,  Node: Depth,  Next: Strictness,  Prev: General Operation,  Up: Generalities | 
|---|
| 180 |  | 
|---|
| 181 | Depth | 
|---|
| 182 | ===== | 
|---|
| 183 |  | 
|---|
| 184 | `automake' supports three kinds of directory hierarchy: `flat', | 
|---|
| 185 | `shallow', and `deep'. | 
|---|
| 186 |  | 
|---|
| 187 | A "flat" package is one in which all the files are in a single | 
|---|
| 188 | directory.  The `Makefile.am' for such a package by definition lacks a | 
|---|
| 189 | `SUBDIRS' macro.  An example of such a package is `termutils'. | 
|---|
| 190 |  | 
|---|
| 191 | A "deep" package is one in which all the source lies in | 
|---|
| 192 | subdirectories; the top level directory contains mainly configuration | 
|---|
| 193 | information.  GNU `cpio' is a good example of such a package, as is GNU | 
|---|
| 194 | `tar'.  The top level `Makefile.am' for a deep package will contain a | 
|---|
| 195 | `SUBDIRS' macro, but no other macros to define objects which are built. | 
|---|
| 196 |  | 
|---|
| 197 | A "shallow" package is one in which the primary source resides in | 
|---|
| 198 | the top-level directory, while various parts (typically libraries) | 
|---|
| 199 | reside in subdirectories.  Automake is one such package (as is GNU | 
|---|
| 200 | `make', which does not currently use `automake'). | 
|---|
| 201 |  | 
|---|
| 202 |  | 
|---|
| 203 | File: automake.info,  Node: Strictness,  Next: Uniform,  Prev: Depth,  Up: Generalities | 
|---|
| 204 |  | 
|---|
| 205 | Strictness | 
|---|
| 206 | ========== | 
|---|
| 207 |  | 
|---|
| 208 | While Automake is intended to be used by maintainers of GNU | 
|---|
| 209 | packages, it does make some effort to accommodate those who wish to use | 
|---|
| 210 | it, but do not want to use all the GNU conventions. | 
|---|
| 211 |  | 
|---|
| 212 | To this end, Automake supports three levels of "strictness"--the | 
|---|
| 213 | strictness indicating how stringently Automake should check standards | 
|---|
| 214 | conformance. | 
|---|
| 215 |  | 
|---|
| 216 | The valid strictness levels are: | 
|---|
| 217 |  | 
|---|
| 218 | `foreign' | 
|---|
| 219 | Automake will check for only those things which are absolutely | 
|---|
| 220 | required for proper operations.  For instance, whereas GNU | 
|---|
| 221 | standards dictate the existence of a `NEWS' file, it will not be | 
|---|
| 222 | required in this mode.  The name comes from the fact that Automake | 
|---|
| 223 | is intended to be used for GNU programs; these relaxed rules are | 
|---|
| 224 | not the standard mode of operation. | 
|---|
| 225 |  | 
|---|
| 226 | `gnu' | 
|---|
| 227 | Automake will check--as much as possible--for compliance to the GNU | 
|---|
| 228 | standards for packages.  This is the default. | 
|---|
| 229 |  | 
|---|
| 230 | `gnits' | 
|---|
| 231 | Automake will check for compliance to the as-yet-unwritten "Gnits | 
|---|
| 232 | standards".  These are based on the GNU standards, but are even | 
|---|
| 233 | more detailed.  Unless you are a Gnits standards contributor, it is | 
|---|
| 234 | recommended that you avoid this option until such time as the Gnits | 
|---|
| 235 | standard is actually published. | 
|---|
| 236 |  | 
|---|
| 237 | For more information on the precise implications of the strictness | 
|---|
| 238 | level, see *Note Gnits::. | 
|---|
| 239 |  | 
|---|
| 240 |  | 
|---|
| 241 | File: automake.info,  Node: Uniform,  Next: Canonicalization,  Prev: Strictness,  Up: Generalities | 
|---|
| 242 |  | 
|---|
| 243 | The Uniform Naming Scheme | 
|---|
| 244 | ========================= | 
|---|
| 245 |  | 
|---|
| 246 | Automake macros (from here on referred to as _variables_) generally | 
|---|
| 247 | follow a "uniform naming scheme" that makes it easy to decide how | 
|---|
| 248 | programs (and other derived objects) are built, and how they are | 
|---|
| 249 | installed.  This scheme also supports `configure' time determination of | 
|---|
| 250 | what should be built. | 
|---|
| 251 |  | 
|---|
| 252 | At `make' time, certain variables are used to determine which | 
|---|
| 253 | objects are to be built.  These variables are called "primary | 
|---|
| 254 | variables".  For instance, the primary variable `PROGRAMS' holds a list | 
|---|
| 255 | of programs which are to be compiled and linked. | 
|---|
| 256 |  | 
|---|
| 257 | A different set of variables is used to decide where the built | 
|---|
| 258 | objects should be installed.  These variables are named after the | 
|---|
| 259 | primary variables, but have a prefix indicating which standard | 
|---|
| 260 | directory should be used as the installation directory.  The standard | 
|---|
| 261 | directory names are given in the GNU standards (*note Directory | 
|---|
| 262 | Variables: (standards)Directory Variables.).  Automake extends this | 
|---|
| 263 | list with `pkglibdir', `pkgincludedir', and `pkgdatadir'; these are the | 
|---|
| 264 | same as the non-`pkg' versions, but with `@PACKAGE@' appended.  For | 
|---|
| 265 | instance, `pkglibdir' is defined as `$(datadir)/@PACKAGE@'. | 
|---|
| 266 |  | 
|---|
| 267 | For each primary, there is one additional variable named by | 
|---|
| 268 | prepending `EXTRA_' to the primary name.  This variable is used to list | 
|---|
| 269 | objects which may or may not be built, depending on what `configure' | 
|---|
| 270 | decides.  This variable is required because Automake must statically | 
|---|
| 271 | know the entire list of objects that may be built in order to generate | 
|---|
| 272 | a `Makefile.in' that will work in all cases. | 
|---|
| 273 |  | 
|---|
| 274 | For instance, `cpio' decides at configure time which programs are | 
|---|
| 275 | built.  Some of the programs are installed in `bindir', and some are | 
|---|
| 276 | installed in `sbindir': | 
|---|
| 277 |  | 
|---|
| 278 | EXTRA_PROGRAMS = mt rmt | 
|---|
| 279 | bin_PROGRAMS = cpio pax | 
|---|
| 280 | sbin_PROGRAMS = @PROGRAMS@ | 
|---|
| 281 |  | 
|---|
| 282 | Defining a primary variable without a prefix (e.g. `PROGRAMS') is an | 
|---|
| 283 | error. | 
|---|
| 284 |  | 
|---|
| 285 | Note that the common `dir' suffix is left off when constructing the | 
|---|
| 286 | variable names; thus one writes `bin_PROGRAMS' and not | 
|---|
| 287 | `bindir_PROGRAMS'. | 
|---|
| 288 |  | 
|---|
| 289 | Not every sort of object can be installed in every directory. | 
|---|
| 290 | Automake will flag those attempts it finds in error.  Automake will | 
|---|
| 291 | also diagnose obvious misspellings in directory names. | 
|---|
| 292 |  | 
|---|
| 293 | Sometimes the standard directories--even as augmented by Automake-- | 
|---|
| 294 | are not enough.  In particular it is sometimes useful, for clarity, to | 
|---|
| 295 | install objects in a subdirectory of some predefined directory.  To this | 
|---|
| 296 | end, Automake allows you to extend the list of possible installation | 
|---|
| 297 | directories.  A given prefix (e.g. `zar') is valid if a variable of the | 
|---|
| 298 | same name with `dir' appended is defined (e.g. `zardir'). | 
|---|
| 299 |  | 
|---|
| 300 | For instance, until HTML support is part of Automake, you could use | 
|---|
| 301 | this to install raw HTML documentation: | 
|---|
| 302 |  | 
|---|
| 303 | htmldir = $(prefix)/html | 
|---|
| 304 | html_DATA = automake.html | 
|---|
| 305 |  | 
|---|
| 306 | The special prefix `noinst' indicates that the objects in question | 
|---|
| 307 | should not be installed at all. | 
|---|
| 308 |  | 
|---|
| 309 | The special prefix `check' indicates that the objects in question | 
|---|
| 310 | should not be built until the `make check' command is run. | 
|---|
| 311 |  | 
|---|
| 312 | Possible primary names are `PROGRAMS', `LIBRARIES', `LISP', | 
|---|
| 313 | `SCRIPTS', `DATA', `HEADERS', `MANS', and `TEXINFOS'. | 
|---|
| 314 |  | 
|---|
| 315 |  | 
|---|
| 316 | File: automake.info,  Node: Canonicalization,  Prev: Uniform,  Up: Generalities | 
|---|
| 317 |  | 
|---|
| 318 | How derived variables are named | 
|---|
| 319 | =============================== | 
|---|
| 320 |  | 
|---|
| 321 | Sometimes a Makefile variable name is derived from some text the user | 
|---|
| 322 | supplies.  For instance, program names are rewritten into Makefile macro | 
|---|
| 323 | names.  Automake canonicalizes this text, so that it does not have to | 
|---|
| 324 | follow Makefile macro naming rules.  All characters in the name except | 
|---|
| 325 | for letters, numbers, and the underscore are turned into underscores | 
|---|
| 326 | when making macro references.  For example, if your program is named | 
|---|
| 327 | `sniff-glue', the derived variable name would be `sniff_glue_SOURCES', | 
|---|
| 328 | not `sniff-glue_SOURCES'. | 
|---|
| 329 |  | 
|---|
| 330 |  | 
|---|
| 331 | File: automake.info,  Node: Examples,  Next: Invoking Automake,  Prev: Generalities,  Up: Top | 
|---|
| 332 |  | 
|---|
| 333 | Some example packages | 
|---|
| 334 | ********************* | 
|---|
| 335 |  | 
|---|
| 336 | * Menu: | 
|---|
| 337 |  | 
|---|
| 338 | * Complete::                    A simple example, start to finish | 
|---|
| 339 | * Hello::                       A classic program | 
|---|
| 340 | * etags::                       Building etags and ctags | 
|---|
| 341 |  | 
|---|
| 342 |  | 
|---|
| 343 | File: automake.info,  Node: Complete,  Next: Hello,  Prev: Examples,  Up: Examples | 
|---|
| 344 |  | 
|---|
| 345 | A simple example, start to finish | 
|---|
| 346 | ================================= | 
|---|
| 347 |  | 
|---|
| 348 | Let's suppose you just finished writing `zardoz', a program to make | 
|---|
| 349 | your head float from vortex to vortex.  You've been using Autoconf to | 
|---|
| 350 | provide a portability framework, but your `Makefile.in's have been | 
|---|
| 351 | ad-hoc.  You want to make them bulletproof, so you turn to Automake. | 
|---|
| 352 |  | 
|---|
| 353 | The first step is to update your `configure.in' to include the | 
|---|
| 354 | commands that `automake' needs.  The simplest way to do this is to add | 
|---|
| 355 | an `AM_INIT_AUTOMAKE' call just after `AC_INIT': | 
|---|
| 356 |  | 
|---|
| 357 | AM_INIT_AUTOMAKE(zardoz, 1.0) | 
|---|
| 358 |  | 
|---|
| 359 | Since your program doesn't have any complicating factors (e.g., it | 
|---|
| 360 | doesn't use `gettext', it doesn't want to build a shared library), | 
|---|
| 361 | you're done with this part.  That was easy! | 
|---|
| 362 |  | 
|---|
| 363 | Now you must regenerate `configure'.  But to do that, you'll need to | 
|---|
| 364 | tell `autoconf' how to find the new macro you've used.  The easiest way | 
|---|
| 365 | to do this is to use the `aclocal' program to generate your | 
|---|
| 366 | `aclocal.m4' for you.  But wait... you already have an `aclocal.m4', | 
|---|
| 367 | because you had to write some hairy macros for your program.  The | 
|---|
| 368 | `aclocal' program lets you put your own macros into `acinclude.m4', so | 
|---|
| 369 | simply rename and then run: | 
|---|
| 370 |  | 
|---|
| 371 | mv aclocal.m4 acinclude.m4 | 
|---|
| 372 | aclocal | 
|---|
| 373 | autoconf | 
|---|
| 374 |  | 
|---|
| 375 | Now it is time to write your `Makefile.am' for `zardoz'.  Since | 
|---|
| 376 | `zardoz' is a user program, you want to install it where the rest of | 
|---|
| 377 | the user programs go.  Additionally, `zardoz' has some Texinfo | 
|---|
| 378 | documentation.  Your `configure.in' script uses `AC_REPLACE_FUNCS', so | 
|---|
| 379 | you need to link against `@LIBOBJS@'.  So here's what you'd write: | 
|---|
| 380 |  | 
|---|
| 381 | bin_PROGRAMS = zardoz | 
|---|
| 382 | zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c | 
|---|
| 383 | zardoz_LDADD = @LIBOBJS@ | 
|---|
| 384 |  | 
|---|
| 385 | info_TEXINFOS = zardoz.texi | 
|---|
| 386 |  | 
|---|
| 387 | Now you can run `automake --add-missing' to generate your | 
|---|
| 388 | `Makefile.in' and grab any auxiliary files you might need, and you're | 
|---|
| 389 | done! | 
|---|
| 390 |  | 
|---|
| 391 |  | 
|---|
| 392 | File: automake.info,  Node: Hello,  Next: etags,  Prev: Complete,  Up: Examples | 
|---|
| 393 |  | 
|---|
| 394 | A classic program | 
|---|
| 395 | ================= | 
|---|
| 396 |  | 
|---|
| 397 | GNU hello (ftp://prep.ai.mit.edu/pub/gnu/hello-1.3.tar.gz) is | 
|---|
| 398 | renowned for its classic simplicity and versatility.  This section shows | 
|---|
| 399 | how Automake could be used with the GNU Hello package.  The examples | 
|---|
| 400 | below are from the latest beta version of GNU Hello, but with all of the | 
|---|
| 401 | maintainer-only code stripped out, as well as all copyright comments. | 
|---|
| 402 |  | 
|---|
| 403 | Of course, GNU Hello is somewhat more featureful than your | 
|---|
| 404 | traditional two-liner.  GNU Hello is internationalized, does option | 
|---|
| 405 | processing, and has a manual and a test suite.  GNU Hello is a deep | 
|---|
| 406 | package. | 
|---|
| 407 |  | 
|---|
| 408 | Here is the `configure.in' from GNU Hello: | 
|---|
| 409 |  | 
|---|
| 410 | dnl Process this file with autoconf to produce a configure script. | 
|---|
| 411 | AC_INIT(src/hello.c) | 
|---|
| 412 | AM_INIT_AUTOMAKE(hello, 1.3.11) | 
|---|
| 413 | AM_CONFIG_HEADER(config.h) | 
|---|
| 414 |  | 
|---|
| 415 | dnl Set of available languages. | 
|---|
| 416 | ALL_LINGUAS="de fr es ko nl no pl pt sl sv" | 
|---|
| 417 |  | 
|---|
| 418 | dnl Checks for programs. | 
|---|
| 419 | AC_PROG_CC | 
|---|
| 420 | AC_ISC_POSIX | 
|---|
| 421 |  | 
|---|
| 422 | dnl Checks for libraries. | 
|---|
| 423 |  | 
|---|
| 424 | dnl Checks for header files. | 
|---|
| 425 | AC_STDC_HEADERS | 
|---|
| 426 | AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h) | 
|---|
| 427 |  | 
|---|
| 428 | dnl Checks for library functions. | 
|---|
| 429 | AC_FUNC_ALLOCA | 
|---|
| 430 |  | 
|---|
| 431 | dnl Check for st_blksize in struct stat | 
|---|
| 432 | AC_ST_BLKSIZE | 
|---|
| 433 |  | 
|---|
| 434 | dnl internationalization macros | 
|---|
| 435 | AM_GNU_GETTEXT | 
|---|
| 436 | AC_OUTPUT([Makefile doc/Makefile intl/Makefile po/Makefile.in \ | 
|---|
| 437 | src/Makefile tests/Makefile tests/hello], | 
|---|
| 438 | [chmod +x tests/hello]) | 
|---|
| 439 |  | 
|---|
| 440 | The `AM_' macros are provided by Automake (or the Gettext library); | 
|---|
| 441 | the rest are standard Autoconf macros. | 
|---|
| 442 |  | 
|---|
| 443 | The top-level `Makefile.am': | 
|---|
| 444 |  | 
|---|
| 445 | EXTRA_DIST = BUGS ChangeLog.O | 
|---|
| 446 | SUBDIRS = doc intl po src tests | 
|---|
| 447 |  | 
|---|
| 448 | As you can see, all the work here is really done in subdirectories. | 
|---|
| 449 |  | 
|---|
| 450 | The `po' and `intl' directories are automatically generated using | 
|---|
| 451 | `gettextize'; they will not be discussed here. | 
|---|
| 452 |  | 
|---|
| 453 | In `doc/Makefile.am' we see: | 
|---|
| 454 |  | 
|---|
| 455 | info_TEXINFOS = hello.texi | 
|---|
| 456 | hello_TEXINFOS = gpl.texi | 
|---|
| 457 |  | 
|---|
| 458 | This is sufficient to build, install, and distribute the GNU Hello | 
|---|
| 459 | manual. | 
|---|
| 460 |  | 
|---|
| 461 | Here is `tests/Makefile.am': | 
|---|
| 462 |  | 
|---|
| 463 | TESTS = hello | 
|---|
| 464 | EXTRA_DIST = hello.in testdata | 
|---|
| 465 |  | 
|---|
| 466 | The script `hello' is generated by `configure', and is the only test | 
|---|
| 467 | case.  `make check' will run this test. | 
|---|
| 468 |  | 
|---|
| 469 | Last we have `src/Makefile.am', where all the real work is done: | 
|---|
| 470 |  | 
|---|
| 471 | bin_PROGRAMS = hello | 
|---|
| 472 | hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h | 
|---|
| 473 | hello_LDADD = @INTLLIBS@ @ALLOCA@ | 
|---|
| 474 | localedir = $(datadir)/locale | 
|---|
| 475 | INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\" | 
|---|
| 476 |  | 
|---|
| 477 |  | 
|---|
| 478 | File: automake.info,  Node: etags,  Prev: Hello,  Up: Examples | 
|---|
| 479 |  | 
|---|
| 480 | Building etags and ctags | 
|---|
| 481 | ======================== | 
|---|
| 482 |  | 
|---|
| 483 | Here is another, trickier example.  It shows how to generate two | 
|---|
| 484 | programs (`ctags' and `etags') from the same source file (`etags.c'). | 
|---|
| 485 | The difficult part is that each compilation of `etags.c' requires | 
|---|
| 486 | different `cpp' flags. | 
|---|
| 487 |  | 
|---|
| 488 | bin_PROGRAMS = etags ctags | 
|---|
| 489 | ctags_SOURCES = | 
|---|
| 490 | ctags_LDADD = ctags.o | 
|---|
| 491 |  | 
|---|
| 492 | etags.o: etags.c | 
|---|
| 493 | $(COMPILE) -DETAGS_REGEXPS -c etags.c | 
|---|
| 494 |  | 
|---|
| 495 | ctags.o: etags.c | 
|---|
| 496 | $(COMPILE) -DCTAGS -o ctags.o -c etags.c | 
|---|
| 497 |  | 
|---|
| 498 | Note that `ctags_SOURCES' is defined to be empty--that way no | 
|---|
| 499 | implicit value is substituted.  The implicit value, however, is used to | 
|---|
| 500 | generate `etags' from `etags.o'. | 
|---|
| 501 |  | 
|---|
| 502 | `ctags_LDADD' is used to get `ctags.o' into the link line. | 
|---|
| 503 | `ctags_DEPENDENCIES' is generated by Automake. | 
|---|
| 504 |  | 
|---|
| 505 | The above rules won't work if your compiler doesn't accept both `-c' | 
|---|
| 506 | and `-o'.  The simplest fix for this is to introduce a bogus dependency | 
|---|
| 507 | (to avoid problems with a parallel `make'): | 
|---|
| 508 |  | 
|---|
| 509 | etags.o: etags.c ctags.o | 
|---|
| 510 | $(COMPILE) -DETAGS_REGEXPS -c etags.c | 
|---|
| 511 |  | 
|---|
| 512 | ctags.o: etags.c | 
|---|
| 513 | $(COMPILE) -DCTAGS -c etags.c && mv etags.o ctags.o | 
|---|
| 514 |  | 
|---|
| 515 | Also, these explicit rules do not work if the de-ANSI-fication | 
|---|
| 516 | feature is used (*note ANSI::).  Supporting de-ANSI-fication requires a | 
|---|
| 517 | little more work: | 
|---|
| 518 |  | 
|---|
| 519 | etags._o: etags._c ctags.o | 
|---|
| 520 | $(COMPILE) -DETAGS_REGEXPS -c etags.c | 
|---|
| 521 |  | 
|---|
| 522 | ctags._o: etags._c | 
|---|
| 523 | $(COMPILE) -DCTAGS -c etags.c && mv etags._o ctags.o | 
|---|
| 524 |  | 
|---|
| 525 |  | 
|---|
| 526 | File: automake.info,  Node: Invoking Automake,  Next: configure,  Prev: Examples,  Up: Top | 
|---|
| 527 |  | 
|---|
| 528 | Creating a `Makefile.in' | 
|---|
| 529 | ************************ | 
|---|
| 530 |  | 
|---|
| 531 | To create all the `Makefile.in's for a package, run the `automake' | 
|---|
| 532 | program in the top level directory, with no arguments.  `automake' will | 
|---|
| 533 | automatically find each appropriate `Makefile.am' (by scanning | 
|---|
| 534 | `configure.in'; *note configure::) and generate the corresponding | 
|---|
| 535 | `Makefile.in'.  Note that `automake' has a rather simplistic view of | 
|---|
| 536 | what constitutes a package; it assumes that a package has only one | 
|---|
| 537 | `configure.in', at the top.  If your package has multiple | 
|---|
| 538 | `configure.in's, then you must run `automake' in each directory holding | 
|---|
| 539 | a `configure.in'. | 
|---|
| 540 |  | 
|---|
| 541 | You can optionally give `automake' an argument; `.am' is appended to | 
|---|
| 542 | the argument and the result is used as the name of the input file. | 
|---|
| 543 | This feature is generally only used to automatically rebuild an | 
|---|
| 544 | out-of-date `Makefile.in'.  Note that `automake' must always be run | 
|---|
| 545 | from the topmost directory of a project, even if being used to | 
|---|
| 546 | regenerate the `Makefile.in' in some subdirectory.  This is necessary | 
|---|
| 547 | because `automake' must scan `configure.in', and because `automake' | 
|---|
| 548 | uses the knowledge that a `Makefile.in' is in a subdirectory to change | 
|---|
| 549 | its behavior in some cases. | 
|---|
| 550 |  | 
|---|
| 551 | `automake' accepts the following options: | 
|---|
| 552 |  | 
|---|
| 553 | `-a' | 
|---|
| 554 | `--add-missing' | 
|---|
| 555 | Automake requires certain common files to exist in certain | 
|---|
| 556 | situations; for instance `config.guess' is required if | 
|---|
| 557 | `configure.in' runs `AC_CANONICAL_HOST'.  Automake is distributed | 
|---|
| 558 | with several of these files; this option will cause the missing | 
|---|
| 559 | ones to be automatically added to the package, whenever possible. | 
|---|
| 560 | In general if Automake tells you a file is missing, try using this | 
|---|
| 561 | option.  By default Automake tries to make a symbolic link | 
|---|
| 562 | pointing to its own copy of the missing file; this can be changed | 
|---|
| 563 | with `--copy'. | 
|---|
| 564 |  | 
|---|
| 565 | `--amdir=DIR' | 
|---|
| 566 | Look for Automake data files in directory DIR instead of in the | 
|---|
| 567 | installation directory.  This is typically used for debugging. | 
|---|
| 568 |  | 
|---|
| 569 | `--build-dir=DIR' | 
|---|
| 570 | Tell Automake where the build directory is.  This option is used | 
|---|
| 571 | when including dependencies into a `Makefile.in' generated by `make | 
|---|
| 572 | dist'; it should not be used otherwise. | 
|---|
| 573 |  | 
|---|
| 574 | `-c' | 
|---|
| 575 |  | 
|---|
| 576 | `--copy' | 
|---|
| 577 | When used with `--add-missing', causes installed files to be | 
|---|
| 578 | copied.  The default is to make a symbolic link. | 
|---|
| 579 |  | 
|---|
| 580 | `--cygnus' | 
|---|
| 581 | Causes the generated `Makefile.in's to follow Cygnus rules, instead | 
|---|
| 582 | of GNU or Gnits rules.  For more information, see *Note Cygnus::. | 
|---|
| 583 |  | 
|---|
| 584 | `--foreign' | 
|---|
| 585 | Set the global strictness to `foreign'.  For more information, see | 
|---|
| 586 | *Note Strictness::. | 
|---|
| 587 |  | 
|---|
| 588 | `--gnits' | 
|---|
| 589 | Set the global strictness to `gnits'.  For more information, see | 
|---|
| 590 | *Note Gnits::. | 
|---|
| 591 |  | 
|---|
| 592 | `--gnu' | 
|---|
| 593 | Set the global strictness to `gnu'.  For more information, see | 
|---|
| 594 | *Note Gnits::.  This is the default strictness. | 
|---|
| 595 |  | 
|---|
| 596 | `--help' | 
|---|
| 597 | Print a summary of the command line options and exit. | 
|---|
| 598 |  | 
|---|
| 599 | `-i' | 
|---|
| 600 | `--include-deps' | 
|---|
| 601 | Include all automatically generated dependency information (*note | 
|---|
| 602 | Dependencies::) in the generated `Makefile.in'.  This is generally | 
|---|
| 603 | done when making a distribution; see *Note Dist::. | 
|---|
| 604 |  | 
|---|
| 605 | `--generate-deps' | 
|---|
| 606 | Generate a file concatenating all automatically generated | 
|---|
| 607 | dependency information (*note Dependencies::) into one file, | 
|---|
| 608 | `.dep_segment'.  This is generally done when making a | 
|---|
| 609 | distribution; see *Note Dist::.  It is useful when maintaining a | 
|---|
| 610 | `SMakefile' or makefiles for other platforms (`Makefile.DOS', | 
|---|
| 611 | etc.)  It can only be used in conjunction with `--include-deps', | 
|---|
| 612 | `--srcdir-name', and `--build-dir'.  Note that if this option is | 
|---|
| 613 | given, no other processing is done. | 
|---|
| 614 |  | 
|---|
| 615 | `--no-force' | 
|---|
| 616 | Ordinarily `automake' creates all `Makefile.in's mentioned in | 
|---|
| 617 | `configure.in'.  This option causes it to only update those | 
|---|
| 618 | `Makefile.in's which are out of date with respect to one of their | 
|---|
| 619 | dependents. | 
|---|
| 620 |  | 
|---|
| 621 | `-o DIR' | 
|---|
| 622 | `--output-dir=DIR' | 
|---|
| 623 | Put the generated `Makefile.in' in the directory DIR.  Ordinarily | 
|---|
| 624 | each `Makefile.in' is created in the directory of the | 
|---|
| 625 | corresponding `Makefile.am'.  This option is used when making | 
|---|
| 626 | distributions. | 
|---|
| 627 |  | 
|---|
| 628 | `--srcdir-name=DIR' | 
|---|
| 629 | Tell Automake the name of the source directory associated with the | 
|---|
| 630 | current build.  This option is used when including dependencies | 
|---|
| 631 | into a `Makefile.in' generated by `make dist'; it should not be | 
|---|
| 632 | used otherwise. | 
|---|
| 633 |  | 
|---|
| 634 | `-v' | 
|---|
| 635 | `--verbose' | 
|---|
| 636 | Cause Automake to print information about which files are being | 
|---|
| 637 | read or created. | 
|---|
| 638 |  | 
|---|
| 639 | `--version' | 
|---|
| 640 | Print the version number of Automake and exit. | 
|---|
| 641 |  | 
|---|
| 642 |  | 
|---|
| 643 | File: automake.info,  Node: configure,  Next: Top level,  Prev: Invoking Automake,  Up: Top | 
|---|
| 644 |  | 
|---|
| 645 | Scanning `configure.in' | 
|---|
| 646 | *********************** | 
|---|
| 647 |  | 
|---|
| 648 | Automake scans the package's `configure.in' to determine certain | 
|---|
| 649 | information about the package.  Some `autoconf' macros are required and | 
|---|
| 650 | some variables must be defined in `configure.in'.  Automake will also | 
|---|
| 651 | use information from `configure.in' to further tailor its output. | 
|---|
| 652 |  | 
|---|
| 653 | Automake also supplies some Autoconf macros to make the maintenance | 
|---|
| 654 | easier.  These macros can automatically be put into your `aclocal.m4' | 
|---|
| 655 | using the `aclocal' program. | 
|---|
| 656 |  | 
|---|
| 657 | * Menu: | 
|---|
| 658 |  | 
|---|
| 659 | * Requirements::                Configuration requirements | 
|---|
| 660 | * Optional::                    Other things Automake recognizes | 
|---|
| 661 | * Invoking aclocal::            Auto-generating aclocal.m4 | 
|---|
| 662 | * Macros::                      Autoconf macros supplied with Automake | 
|---|
| 663 | * Extending aclocal::           Writing your own aclocal macros | 
|---|
| 664 |  | 
|---|
| 665 |  | 
|---|
| 666 | File: automake.info,  Node: Requirements,  Next: Optional,  Prev: configure,  Up: configure | 
|---|
| 667 |  | 
|---|
| 668 | Configuration requirements | 
|---|
| 669 | ========================== | 
|---|
| 670 |  | 
|---|
| 671 | The simplest way to meet the basic Automake requirements is to use | 
|---|
| 672 | the macro `AM_INIT_AUTOMAKE' (*note Macros::).  But if you prefer, you | 
|---|
| 673 | can do the required steps by hand: | 
|---|
| 674 |  | 
|---|
| 675 | * Define the variables `PACKAGE' and `VERSION' with `AC_SUBST'. | 
|---|
| 676 | `PACKAGE' should be the name of the package as it appears when | 
|---|
| 677 | bundled for distribution.  For instance, Automake defines `PACKAGE' | 
|---|
| 678 | to be `automake'.  `VERSION' should be the version number of the | 
|---|
| 679 | release that is being developed.  We recommend that you make | 
|---|
| 680 | `configure.in' the only place in your package where the version | 
|---|
| 681 | number is defined; this makes releases simpler. | 
|---|
| 682 |  | 
|---|
| 683 | Automake doesn't do any interpretation of `PACKAGE' or `VERSION', | 
|---|
| 684 | except in `Gnits' mode (*note Gnits::). | 
|---|
| 685 |  | 
|---|
| 686 | * Use the macro `AC_ARG_PROGRAM' if a program or script is installed. | 
|---|
| 687 | *Note Transforming Program Names When Installing: | 
|---|
| 688 | (autoconf)Transforming Names. | 
|---|
| 689 |  | 
|---|
| 690 | * Use `AC_PROG_MAKE_SET' if the package is not flat.  *Note Creating | 
|---|
| 691 | Output Files: (autoconf)Output. | 
|---|
| 692 |  | 
|---|
| 693 | * Use `AM_SANITY_CHECK' to make sure the build environment is sane. | 
|---|
| 694 |  | 
|---|
| 695 | * Call `AC_PROG_INSTALL' (*note Particular Program Checks: | 
|---|
| 696 | (autoconf)Particular Programs.). | 
|---|
| 697 |  | 
|---|
| 698 | * Use `AM_MISSING_PROG' to see whether the programs `aclocal', | 
|---|
| 699 | `autoconf', `automake', `autoheader', and `makeinfo' are in the | 
|---|
| 700 | build environment.  Here is how this is done: | 
|---|
| 701 | missing_dir=`cd $ac_aux_dir && pwd` | 
|---|
| 702 | AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) | 
|---|
| 703 | AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) | 
|---|
| 704 | AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) | 
|---|
| 705 | AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) | 
|---|
| 706 | AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) | 
|---|
| 707 |  | 
|---|
| 708 | Here are the other macros which Automake requires but which are not | 
|---|
| 709 | run by `AM_INIT_AUTOMAKE': | 
|---|
| 710 |  | 
|---|
| 711 | `AC_OUTPUT' | 
|---|
| 712 | Automake uses this to determine which files to create (*note | 
|---|
| 713 | Creating Output Files: (autoconf)Output.).  Listed files named | 
|---|
| 714 | `Makefile' are treated as `Makefile's.  Other listed files are | 
|---|
| 715 | treated differently.  Currently the only difference is that a | 
|---|
| 716 | `Makefile' is removed by `make distclean', while other files are | 
|---|
| 717 | removed by `make clean'. | 
|---|
| 718 |  | 
|---|
| 719 |  | 
|---|
| 720 | File: automake.info,  Node: Optional,  Next: Invoking aclocal,  Prev: Requirements,  Up: configure | 
|---|
| 721 |  | 
|---|
| 722 | Other things Automake recognizes | 
|---|
| 723 | ================================ | 
|---|
| 724 |  | 
|---|
| 725 | Automake will also recognize the use of certain macros and tailor the | 
|---|
| 726 | generated `Makefile.in' appropriately.  Currently recognized macros and | 
|---|
| 727 | their effects are: | 
|---|
| 728 |  | 
|---|
| 729 | `AC_CONFIG_HEADER' | 
|---|
| 730 | Automake requires the use of `AM_CONFIG_HEADER', which is similar | 
|---|
| 731 | to `AC_CONFIG_HEADER' (*note Configuration Header Files: | 
|---|
| 732 | (autoconf)Configuration Headers.), but does some useful | 
|---|
| 733 | Automake-specific work. | 
|---|
| 734 |  | 
|---|
| 735 | `AC_CONFIG_AUX_DIR' | 
|---|
| 736 | Automake will look for various helper scripts, such as | 
|---|
| 737 | `mkinstalldirs', in the directory named in this macro invocation. | 
|---|
| 738 | If not seen, the scripts are looked for in their `standard' | 
|---|
| 739 | locations (either the top source directory, or in the source | 
|---|
| 740 | directory corresponding to the current `Makefile.am', whichever is | 
|---|
| 741 | appropriate).  *Note Finding `configure' Input: (autoconf)Input. | 
|---|
| 742 | FIXME: give complete list of things looked for in this directory | 
|---|
| 743 |  | 
|---|
| 744 | `AC_PATH_XTRA' | 
|---|
| 745 | Automake will insert definitions for the variables defined by | 
|---|
| 746 | `AC_PATH_XTRA' into each `Makefile.in' that builds a C program or | 
|---|
| 747 | library.  *Note System Services: (autoconf)System Services. | 
|---|
| 748 |  | 
|---|
| 749 | `AC_CANONICAL_HOST' | 
|---|
| 750 | `AC_CHECK_TOOL' | 
|---|
| 751 | Automake will ensure that `config.guess' and `config.sub' exist. | 
|---|
| 752 | Also, the `Makefile' variables `host_alias' and `host_triplet' are | 
|---|
| 753 | introduced.  See both *Note Getting the Canonical System Type: | 
|---|
| 754 | (autoconf)Canonicalizing, and *Note Generic Program Checks: | 
|---|
| 755 | (autoconf)Generic Programs. | 
|---|
| 756 |  | 
|---|
| 757 | `AC_CANONICAL_SYSTEM' | 
|---|
| 758 | This is similar to `AC_CANONICAL_HOST', but also defines the | 
|---|
| 759 | `Makefile' variables `build_alias' and `target_alias'.  *Note | 
|---|
| 760 | Getting the Canonical System Type: (autoconf)Canonicalizing. | 
|---|
| 761 |  | 
|---|
| 762 | `AC_FUNC_ALLOCA' | 
|---|
| 763 | `AC_FUNC_GETLOADAVG' | 
|---|
| 764 | `AC_FUNC_MEMCMP' | 
|---|
| 765 | `AC_STRUCT_ST_BLOCKS' | 
|---|
| 766 | `AC_FUNC_FNMATCH' | 
|---|
| 767 | `AM_FUNC_STRTOD' | 
|---|
| 768 | `AC_REPLACE_FUNCS' | 
|---|
| 769 | `AC_REPLACE_GNU_GETOPT' | 
|---|
| 770 | `AM_WITH_REGEX' | 
|---|
| 771 | Automake will ensure that the appropriate dependencies are | 
|---|
| 772 | generated for the objects corresponding to these macros.  Also, | 
|---|
| 773 | Automake will verify that the appropriate source files are part of | 
|---|
| 774 | the distribution.  Note that Automake does not come with any of | 
|---|
| 775 | the C sources required to use these macros, so `automake -a' will | 
|---|
| 776 | not install the sources.  *Note A Library::, for more information. | 
|---|
| 777 | Also, see *Note Particular Function Checks: (autoconf)Particular | 
|---|
| 778 | Functions. | 
|---|
| 779 |  | 
|---|
| 780 | `LIBOBJS' | 
|---|
| 781 | Automake will detect statements which put `.o' files into | 
|---|
| 782 | `LIBOBJS', and will treat these additional files as if they were | 
|---|
| 783 | discovered via `AC_REPLACE_FUNCS'.  *Note Generic Function Checks: | 
|---|
| 784 | (autoconf)Generic Functions. | 
|---|
| 785 |  | 
|---|
| 786 | `AC_PROG_RANLIB' | 
|---|
| 787 | This is required if any libraries are built in the package.  *Note | 
|---|
| 788 | Particular Program Checks: (autoconf)Particular Programs. | 
|---|
| 789 |  | 
|---|
| 790 | `AC_PROG_CXX' | 
|---|
| 791 | This is required if any C++ source is included.  *Note Particular | 
|---|
| 792 | Program Checks: (autoconf)Particular Programs. | 
|---|
| 793 |  | 
|---|
| 794 | `AC_PROG_F77' | 
|---|
| 795 | This is required if any Fortran 77 source is included.  This macro | 
|---|
| 796 | is distributed with Autoconf version 2.13 and later.  *Note | 
|---|
| 797 | Particular Program Checks: (autoconf)Particular Programs. | 
|---|
| 798 |  | 
|---|
| 799 | `AC_F77_LIBRARY_LDFLAGS' | 
|---|
| 800 | This is required for programs and shared libraries that are a | 
|---|
| 801 | mixture of languages that include Fortran 77 (*note Mixing Fortran | 
|---|
| 802 | 77 With C and C++::).  *Note Autoconf macros supplied with | 
|---|
| 803 | Automake: Macros. | 
|---|
| 804 |  | 
|---|
| 805 | `AM_PROG_LIBTOOL' | 
|---|
| 806 | Automake will turn on processing for `libtool' (*note | 
|---|
| 807 | Introduction: (libtool)Top.). | 
|---|
| 808 |  | 
|---|
| 809 | `AC_PROG_YACC' | 
|---|
| 810 | If a Yacc source file is seen, then you must either use this macro | 
|---|
| 811 | or define the variable `YACC' in `configure.in'.  The former is | 
|---|
| 812 | preferred (*note Particular Program Checks: (autoconf)Particular | 
|---|
| 813 | Programs.). | 
|---|
| 814 |  | 
|---|
| 815 | `AC_DECL_YYTEXT' | 
|---|
| 816 | This macro is required if there is Lex source in the package. | 
|---|
| 817 | *Note Particular Program Checks: (autoconf)Particular Programs. | 
|---|
| 818 |  | 
|---|
| 819 | `AC_PROG_LEX' | 
|---|
| 820 | If a Lex source file is seen, then this macro must be used.  *Note | 
|---|
| 821 | Particular Program Checks: (autoconf)Particular Programs. | 
|---|
| 822 |  | 
|---|
| 823 | `ALL_LINGUAS' | 
|---|
| 824 | If Automake sees that this variable is set in `configure.in', it | 
|---|
| 825 | will check the `po' directory to ensure that all the named `.po' | 
|---|
| 826 | files exist, and that all the `.po' files that exist are named. | 
|---|
| 827 |  | 
|---|
| 828 | `AM_C_PROTOTYPES' | 
|---|
| 829 | This is required when using automatic de-ANSI-fication; see *Note | 
|---|
| 830 | ANSI::. | 
|---|
| 831 |  | 
|---|
| 832 | `AM_GNU_GETTEXT' | 
|---|
| 833 | This macro is required for packages which use GNU gettext (*note | 
|---|
| 834 | gettext::).  It is distributed with gettext.  If Automake sees | 
|---|
| 835 | this macro it ensures that the package meets some of gettext's | 
|---|
| 836 | requirements. | 
|---|
| 837 |  | 
|---|
| 838 | `AM_MAINTAINER_MODE' | 
|---|
| 839 | This macro adds a `--enable-maintainer-mode' option to | 
|---|
| 840 | `configure'.  If this is used, `automake' will cause | 
|---|
| 841 | `maintainer-only' rules to be turned off by default in the | 
|---|
| 842 | generated `Makefile.in's.  This macro is disallowed in `Gnits' | 
|---|
| 843 | mode (*note Gnits::).  This macro defines the `MAINTAINER_MODE' | 
|---|
| 844 | conditional, which you can use in your own `Makefile.am'. | 
|---|
| 845 |  | 
|---|
| 846 | `AC_SUBST' | 
|---|
| 847 | `AC_CHECK_TOOL' | 
|---|
| 848 | `AC_CHECK_PROG' | 
|---|
| 849 | `AC_CHECK_PROGS' | 
|---|
| 850 | `AC_PATH_PROG' | 
|---|
| 851 | `AC_PATH_PROGS' | 
|---|
| 852 | For each of these macros, the first argument is automatically | 
|---|
| 853 | defined as a variable in each generated `Makefile.in'.  *Note | 
|---|
| 854 | Setting Output Variables: (autoconf)Setting Output Variables, and | 
|---|
| 855 | *Note Generic Program Checks: (autoconf)Generic Programs. | 
|---|
| 856 |  | 
|---|
| 857 |  | 
|---|
| 858 | File: automake.info,  Node: Invoking aclocal,  Next: Macros,  Prev: Optional,  Up: configure | 
|---|
| 859 |  | 
|---|
| 860 | Auto-generating aclocal.m4 | 
|---|
| 861 | ========================== | 
|---|
| 862 |  | 
|---|
| 863 | Automake includes a number of Autoconf macros which can be used in | 
|---|
| 864 | your package; some of them are actually required by Automake in certain | 
|---|
| 865 | situations.  These macros must be defined in your `aclocal.m4'; | 
|---|
| 866 | otherwise they will not be seen by `autoconf'. | 
|---|
| 867 |  | 
|---|
| 868 | The `aclocal' program will automatically generate `aclocal.m4' files | 
|---|
| 869 | based on the contents of `configure.in'.  This provides a convenient | 
|---|
| 870 | way to get Automake-provided macros, without having to search around. | 
|---|
| 871 | Also, the `aclocal' mechanism is extensible for use by other packages. | 
|---|
| 872 |  | 
|---|
| 873 | At startup, `aclocal' scans all the `.m4' files it can find, looking | 
|---|
| 874 | for macro definitions.  Then it scans `configure.in'.  Any mention of | 
|---|
| 875 | one of the macros found in the first step causes that macro, and any | 
|---|
| 876 | macros it in turn requires, to be put into `aclocal.m4'. | 
|---|
| 877 |  | 
|---|
| 878 | The contents of `acinclude.m4', if it exists, are also automatically | 
|---|
| 879 | included in `aclocal.m4'.  This is useful for incorporating local | 
|---|
| 880 | macros into `configure'. | 
|---|
| 881 |  | 
|---|
| 882 | `aclocal' accepts the following options: | 
|---|
| 883 |  | 
|---|
| 884 | `--acdir=DIR' | 
|---|
| 885 | Look for the macro files in DIR instead of the installation | 
|---|
| 886 | directory.  This is typically used for debugging. | 
|---|
| 887 |  | 
|---|
| 888 | `--help' | 
|---|
| 889 | Print a summary of the command line options and exit. | 
|---|
| 890 |  | 
|---|
| 891 | `-I DIR' | 
|---|
| 892 | Add the directory DIR to the list of directories searched for | 
|---|
| 893 | `.m4' files. | 
|---|
| 894 |  | 
|---|
| 895 | `--output=FILE' | 
|---|
| 896 | Cause the output to be put into FILE instead of `aclocal.m4'. | 
|---|
| 897 |  | 
|---|
| 898 | `--print-ac-dir' | 
|---|
| 899 | Prints the name of the directory which `aclocal' will search to | 
|---|
| 900 | find the `.m4' files.  When this option is given, normal processing | 
|---|
| 901 | is suppressed.  This option can be used by a package to determine | 
|---|
| 902 | where to install a macro file. | 
|---|
| 903 |  | 
|---|
| 904 | `--verbose' | 
|---|
| 905 | Print the names of the files it examines. | 
|---|
| 906 |  | 
|---|
| 907 | `--version' | 
|---|
| 908 | Print the version number of Automake and exit. | 
|---|
| 909 |  | 
|---|
| 910 |  | 
|---|
| 911 | File: automake.info,  Node: Macros,  Next: Extending aclocal,  Prev: Invoking aclocal,  Up: configure | 
|---|
| 912 |  | 
|---|
| 913 | Autoconf macros supplied with Automake | 
|---|
| 914 | ====================================== | 
|---|
| 915 |  | 
|---|
| 916 | `AM_CONFIG_HEADER' | 
|---|
| 917 | Automake will generate rules to automatically regenerate the config | 
|---|
| 918 | header.  If you do use this macro, you must create the file | 
|---|
| 919 | `stamp-h.in' in your source directory.  It can be empty. | 
|---|
| 920 |  | 
|---|
| 921 | `AM_ENABLE_MULTILIB' | 
|---|
| 922 | This is used when a "multilib" library is being built.  A | 
|---|
| 923 | "multilib" library is one that is built multiple times, once per | 
|---|
| 924 | target flag combination.  This is only useful when the library is | 
|---|
| 925 | intended to be cross-compiled.  The first optional argument is the | 
|---|
| 926 | name of the `Makefile' being generated; it defaults to `Makefile'. | 
|---|
| 927 | The second option argument is used to find the top source | 
|---|
| 928 | directory; it defaults to the empty string (generally this should | 
|---|
| 929 | not be used unless you are familiar with the internals). | 
|---|
| 930 |  | 
|---|
| 931 | `AM_FUNC_STRTOD' | 
|---|
| 932 | If the `strtod' function is not available, or does not work | 
|---|
| 933 | correctly (like the one on SunOS 5.4), add `strtod.o' to output | 
|---|
| 934 | variable `LIBOBJS'. | 
|---|
| 935 |  | 
|---|
| 936 | `AM_FUNC_ERROR_AT_LINE' | 
|---|
| 937 | If the function `error_at_line' is not found, then add `error.o' | 
|---|
| 938 | to `LIBOBJS'. | 
|---|
| 939 |  | 
|---|
| 940 | `AM_FUNC_MKTIME' | 
|---|
| 941 | Check for a working `mktime' function.  If not found, add | 
|---|
| 942 | `mktime.o' to `LIBOBJS'. | 
|---|
| 943 |  | 
|---|
| 944 | `AM_FUNC_OBSTACK' | 
|---|
| 945 | Check for the GNU obstacks code; if not found, add `obstack.o' to | 
|---|
| 946 | `LIBOBJS'. | 
|---|
| 947 |  | 
|---|
| 948 | `AM_C_PROTOTYPES' | 
|---|
| 949 | Check to see if function prototypes are understood by the | 
|---|
| 950 | compiler.  If so, define `PROTOTYPES' and set the output variables | 
|---|
| 951 | `U' and `ANSI2KNR' to the empty string.  Otherwise, set `U' to `_' | 
|---|
| 952 | and `ANSI2KNR' to `./ansi2knr'.  Automake uses these values to | 
|---|
| 953 | implement automatic de-ANSI-fication. | 
|---|
| 954 |  | 
|---|
| 955 | `AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL' | 
|---|
| 956 | If the use of `TIOCGWINSZ' requires `<sys/ioctl.h>', then define | 
|---|
| 957 | `GWINSZ_IN_SYS_IOCTL'.  Otherwise `TIOCGWINSZ' can be found in | 
|---|
| 958 | `<termios.h>'. | 
|---|
| 959 |  | 
|---|
| 960 | `AM_INIT_AUTOMAKE' | 
|---|
| 961 | Runs many macros that most `configure.in''s need.  This macro has | 
|---|
| 962 | two required arguments, the package and the version number.  By | 
|---|
| 963 | default this macro `AC_DEFINE''s `PACKAGE' and `VERSION'.  This | 
|---|
| 964 | can be avoided by passing in a non-empty third argument. | 
|---|
| 965 |  | 
|---|
| 966 | `AM_PATH_LISPDIR' | 
|---|
| 967 | Searches for the program `emacs', and, if found, sets the output | 
|---|
| 968 | variable `lispdir' to the full path to Emacs' site-lisp directory. | 
|---|
| 969 |  | 
|---|
| 970 | `AM_PROG_CC_STDC' | 
|---|
| 971 | If the C compiler in not in ANSI C mode by default, try to add an | 
|---|
| 972 | option to output variable `CC' to make it so.  This macro tries | 
|---|
| 973 | various options that select ANSI C on some system or another.  It | 
|---|
| 974 | considers the compiler to be in ANSI C mode if it handles function | 
|---|
| 975 | prototypes correctly. | 
|---|
| 976 |  | 
|---|
| 977 | If you use this macro, you should check after calling it whether | 
|---|
| 978 | the C compiler has been set to accept ANSI C; if not, the shell | 
|---|
| 979 | variable `am_cv_prog_cc_stdc' is set to `no'.  If you wrote your | 
|---|
| 980 | source code in ANSI C, you can make an un-ANSIfied copy of it by | 
|---|
| 981 | using the `ansi2knr' option (*note ANSI::). | 
|---|
| 982 |  | 
|---|
| 983 | `AM_PROG_LEX' | 
|---|
| 984 | Like `AC_PROG_LEX' with `AC_DECL_YYTEXT' (*note Particular Program | 
|---|
| 985 | Checks: (autoconf)Particular Programs.), but uses the `missing' | 
|---|
| 986 | script on systems that do not have `lex'.  `HP-UX 10' is one such | 
|---|
| 987 | system. | 
|---|
| 988 |  | 
|---|
| 989 | `AM_SANITY_CHECK' | 
|---|
| 990 | This checks to make sure that a file created in the build | 
|---|
| 991 | directory is newer than a file in the source directory.  This can | 
|---|
| 992 | fail on systems where the clock is set incorrectly.  This macro is | 
|---|
| 993 | automatically run from `AM_INIT_AUTOMAKE'. | 
|---|
| 994 |  | 
|---|
| 995 | `AM_SYS_POSIX_TERMIOS' | 
|---|
| 996 | Check to see if POSIX termios headers and functions are available | 
|---|
| 997 | on the system.  If so, set the shell variable | 
|---|
| 998 | `am_cv_sys_posix_termios' to `yes'.  If not, set the variable to | 
|---|
| 999 | `no'. | 
|---|
| 1000 |  | 
|---|
| 1001 | `AM_TYPE_PTRDIFF_T' | 
|---|
| 1002 | Define `HAVE_PTRDIFF_T' if the type `ptrdiff_t' is defined in | 
|---|
| 1003 | `<stddef.h>'. | 
|---|
| 1004 |  | 
|---|
| 1005 | `AM_WITH_DMALLOC' | 
|---|
| 1006 | Add support for the dmalloc | 
|---|
| 1007 | (ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz) package.  If | 
|---|
| 1008 | the user configures with `--with-dmalloc', then define | 
|---|
| 1009 | `WITH_DMALLOC' and add `-ldmalloc' to `LIBS'. | 
|---|
| 1010 |  | 
|---|
| 1011 | `AM_WITH_REGEX' | 
|---|
| 1012 | Adds `--with-regex' to the `configure' command line.  If specified | 
|---|
| 1013 | (the default), then the `regex' regular expression library is | 
|---|
| 1014 | used, `regex.o' is put into `LIBOBJS', and `WITH_REGEX' is | 
|---|
| 1015 | defined..  If `--without-regex' is given, then the `rx' regular | 
|---|
| 1016 | expression library is used, and `rx.o' is put into `LIBOBJS'. | 
|---|
| 1017 |  | 
|---|
| 1018 |  | 
|---|
| 1019 | File: automake.info,  Node: Extending aclocal,  Prev: Macros,  Up: configure | 
|---|
| 1020 |  | 
|---|
| 1021 | Writing your own aclocal macros | 
|---|
| 1022 | =============================== | 
|---|
| 1023 |  | 
|---|
| 1024 | The `aclocal' program doesn't have any built-in knowledge of any | 
|---|
| 1025 | macros, so it is easy to extend it with your own macros. | 
|---|
| 1026 |  | 
|---|
| 1027 | This is mostly used for libraries which want to supply their own | 
|---|
| 1028 | Autoconf macros for use by other programs.  For instance the `gettext' | 
|---|
| 1029 | library supplies a macro `AM_GNU_GETTEXT' which should be used by any | 
|---|
| 1030 | package using `gettext'.  When the library is installed, it installs | 
|---|
| 1031 | this macro so that `aclocal' will find it. | 
|---|
| 1032 |  | 
|---|
| 1033 | A file of macros should be a series of `AC_DEFUN''s.  The `aclocal' | 
|---|
| 1034 | programs also understands `AC_REQUIRE', so it is safe to put each macro | 
|---|
| 1035 | in a separate file.  *Note Prerequisite Macros: (autoconf)Prerequisite | 
|---|
| 1036 | Macros, and *Note Macro Definitions: (autoconf)Macro Definitions. | 
|---|
| 1037 |  | 
|---|
| 1038 | A macro file's name should end in `.m4'.  Such files should be | 
|---|
| 1039 | installed in `$(datadir)/aclocal'. | 
|---|
| 1040 |  | 
|---|
| 1041 |  | 
|---|
| 1042 | File: automake.info,  Node: Top level,  Next: Programs,  Prev: configure,  Up: Top | 
|---|
| 1043 |  | 
|---|
| 1044 | The top-level `Makefile.am' | 
|---|
| 1045 | *************************** | 
|---|
| 1046 |  | 
|---|
| 1047 | In non-flat packages, the top level `Makefile.am' must tell Automake | 
|---|
| 1048 | which subdirectories are to be built.  This is done via the `SUBDIRS' | 
|---|
| 1049 | variable. | 
|---|
| 1050 |  | 
|---|
| 1051 | The `SUBDIRS' macro holds a list of subdirectories in which building | 
|---|
| 1052 | of various sorts can occur.  Many targets (e.g. `all') in the generated | 
|---|
| 1053 | `Makefile' will run both locally and in all specified subdirectories. | 
|---|
| 1054 | Note that the directories listed in `SUBDIRS' are not required to | 
|---|
| 1055 | contain `Makefile.am's; only `Makefile's (after configuration).  This | 
|---|
| 1056 | allows inclusion of libraries from packages which do not use Automake | 
|---|
| 1057 | (such as `gettext').  The directories mentioned in `SUBDIRS' must be | 
|---|
| 1058 | direct children of the current directory.  For instance, you cannot put | 
|---|
| 1059 | `src/subdir' into `SUBDIRS'. | 
|---|
| 1060 |  | 
|---|
| 1061 | In a deep package, the top-level `Makefile.am' is often very short. | 
|---|
| 1062 | For instance, here is the `Makefile.am' from the GNU Hello distribution: | 
|---|
| 1063 |  | 
|---|
| 1064 | EXTRA_DIST = BUGS ChangeLog.O README-alpha | 
|---|
| 1065 | SUBDIRS = doc intl po src tests | 
|---|
| 1066 |  | 
|---|
| 1067 | It is possible to override the `SUBDIRS' variable if, like in the | 
|---|
| 1068 | case of GNU `Inetutils', you want to only build a subset of the entire | 
|---|
| 1069 | package.  In your `Makefile.am' include: | 
|---|
| 1070 |  | 
|---|
| 1071 | SUBDIRS = @SUBDIRS@ | 
|---|
| 1072 |  | 
|---|
| 1073 | Then in your `configure.in' you can specify: | 
|---|
| 1074 |  | 
|---|
| 1075 | SUBDIRS = "src doc lib po" | 
|---|
| 1076 | AC_SUBST(SUBDIRS) | 
|---|
| 1077 |  | 
|---|
| 1078 | The upshot of this is that Automake is tricked into building the | 
|---|
| 1079 | package to take the subdirs, but doesn't actually bind that list until | 
|---|
| 1080 | `configure' is run. | 
|---|
| 1081 |  | 
|---|
| 1082 | Although the `SUBDIRS' macro can contain configure substitutions | 
|---|
| 1083 | (e.g. `@DIRS@'); Automake itself does not actually examine the contents | 
|---|
| 1084 | of this variable. | 
|---|
| 1085 |  | 
|---|
| 1086 | If `SUBDIRS' is defined, then your `configure.in' must include | 
|---|
| 1087 | `AC_PROG_MAKE_SET'. | 
|---|
| 1088 |  | 
|---|
| 1089 | The use of `SUBDIRS' is not restricted to just the top-level | 
|---|
| 1090 | `Makefile.am'.  Automake can be used to construct packages of arbitrary | 
|---|
| 1091 | depth. | 
|---|
| 1092 |  | 
|---|
| 1093 | By default, Automake generates `Makefiles' which work depth-first | 
|---|
| 1094 | (`postfix').  However, it is possible to change this ordering.  You can | 
|---|
| 1095 | do this by putting `.' into `SUBDIRS'.  For instance, putting `.' | 
|---|
| 1096 | first will cause a `prefix' ordering of directories. | 
|---|
| 1097 |  | 
|---|
| 1098 |  | 
|---|
| 1099 | File: automake.info,  Node: Programs,  Next: Other objects,  Prev: Top level,  Up: Top | 
|---|
| 1100 |  | 
|---|
| 1101 | Building Programs and Libraries | 
|---|
| 1102 | ******************************* | 
|---|
| 1103 |  | 
|---|
| 1104 | A large part of Automake's functionality is dedicated to making it | 
|---|
| 1105 | easy to build programs and libraries. | 
|---|
| 1106 |  | 
|---|
| 1107 | * Menu: | 
|---|
| 1108 |  | 
|---|
| 1109 | * A Program::                   Building a program | 
|---|
| 1110 | * A Library::                   Building a library | 
|---|
| 1111 | * LIBOBJS::                     Special handling for LIBOBJS and ALLOCA | 
|---|
| 1112 | * A Shared Library::            Building a Libtool library | 
|---|
| 1113 | * Program variables::           Variables used when building a program | 
|---|
| 1114 | * Yacc and Lex::                Yacc and Lex support | 
|---|
| 1115 | * C++ Support:: | 
|---|
| 1116 | * Fortran 77 Support:: | 
|---|
| 1117 | * Support for Other Languages:: | 
|---|
| 1118 | * ANSI::                        Automatic de-ANSI-fication | 
|---|
| 1119 | * Dependencies::                Automatic dependency tracking | 
|---|
| 1120 |  | 
|---|
| 1121 |  | 
|---|
| 1122 | File: automake.info,  Node: A Program,  Next: A Library,  Prev: Programs,  Up: Programs | 
|---|
| 1123 |  | 
|---|
| 1124 | Building a program | 
|---|
| 1125 | ================== | 
|---|
| 1126 |  | 
|---|
| 1127 | In a directory containing source that gets built into a program (as | 
|---|
| 1128 | opposed to a library), the `PROGRAMS' primary is used.  Programs can be | 
|---|
| 1129 | installed in `bindir', `sbindir', `libexecdir', `pkglibdir', or not at | 
|---|
| 1130 | all (`noinst'). | 
|---|
| 1131 |  | 
|---|
| 1132 | For instance: | 
|---|
| 1133 |  | 
|---|
| 1134 | bin_PROGRAMS = hello | 
|---|
| 1135 |  | 
|---|
| 1136 | In this simple case, the resulting `Makefile.in' will contain code | 
|---|
| 1137 | to generate a program named `hello'.  The variable `hello_SOURCES' is | 
|---|
| 1138 | used to specify which source files get built into an executable: | 
|---|
| 1139 |  | 
|---|
| 1140 | hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h | 
|---|
| 1141 |  | 
|---|
| 1142 | This causes each mentioned `.c' file to be compiled into the | 
|---|
| 1143 | corresponding `.o'.  Then all are linked to produce `hello'. | 
|---|
| 1144 |  | 
|---|
| 1145 | If `PROG_SOURCES' is needed, but not specified, then it defaults to | 
|---|
| 1146 | the single file `prog.c'. | 
|---|
| 1147 |  | 
|---|
| 1148 | Multiple programs can be built in a single directory.  Multiple | 
|---|
| 1149 | programs can share a single source file, which must be listed in each | 
|---|
| 1150 | `_SOURCES' definition. | 
|---|
| 1151 |  | 
|---|
| 1152 | Header files listed in a `_SOURCES' definition will be included in | 
|---|
| 1153 | the distribution but otherwise ignored.  In case it isn't obvious, you | 
|---|
| 1154 | should not include the header file generated by `configure' in an | 
|---|
| 1155 | `_SOURCES' variable; this file should not be distributed.  Lex (`.l') | 
|---|
| 1156 | and Yacc (`.y') files can also be listed; see *Note Yacc and Lex::. | 
|---|
| 1157 |  | 
|---|
| 1158 | Automake must know all the source files that could possibly go into a | 
|---|
| 1159 | program, even if not all the files are built in every circumstance. | 
|---|
| 1160 | Any files which are only conditionally built should be listed in the | 
|---|
| 1161 | appropriate `EXTRA_' variable.  For instance, if `hello-linux.c' were | 
|---|
| 1162 | conditionally included in `hello', the `Makefile.am' would contain: | 
|---|
| 1163 |  | 
|---|
| 1164 | EXTRA_hello_SOURCES = hello-linux.c | 
|---|
| 1165 |  | 
|---|
| 1166 | Similarly, sometimes it is useful to determine the programs that are | 
|---|
| 1167 | to be built at configure time.  For instance, GNU `cpio' only builds | 
|---|
| 1168 | `mt' and `rmt' under special circumstances. | 
|---|
| 1169 |  | 
|---|
| 1170 | In this case, you must notify Automake of all the programs that can | 
|---|
| 1171 | possibly be built, but at the same time cause the generated | 
|---|
| 1172 | `Makefile.in' to use the programs specified by `configure'.  This is | 
|---|
| 1173 | done by having `configure' substitute values into each `_PROGRAMS' | 
|---|
| 1174 | definition, while listing all optionally built programs in | 
|---|
| 1175 | `EXTRA_PROGRAMS'. | 
|---|
| 1176 |  | 
|---|
| 1177 | If you need to link against libraries that are not found by | 
|---|
| 1178 | `configure', you can use `LDADD' to do so.  This variable actually can | 
|---|
| 1179 | be used to add any options to the linker command line. | 
|---|
| 1180 |  | 
|---|
| 1181 | Sometimes, multiple programs are built in one directory but do not | 
|---|
| 1182 | share the same link-time requirements.  In this case, you can use the | 
|---|
| 1183 | `PROG_LDADD' variable (where PROG is the name of the program as it | 
|---|
| 1184 | appears in some `_PROGRAMS' variable, and usually written in lowercase) | 
|---|
| 1185 | to override the global `LDADD'.  If this variable exists for a given | 
|---|
| 1186 | program, then that program is not linked using `LDADD'. | 
|---|
| 1187 |  | 
|---|
| 1188 | For instance, in GNU cpio, `pax', `cpio' and `mt' are linked against | 
|---|
| 1189 | the library `libcpio.a'.  However, `rmt' is built in the same | 
|---|
| 1190 | directory, and has no such link requirement.  Also, `mt' and `rmt' are | 
|---|
| 1191 | only built on certain architectures.  Here is what cpio's | 
|---|
| 1192 | `src/Makefile.am' looks like (abridged): | 
|---|
| 1193 |  | 
|---|
| 1194 | bin_PROGRAMS = cpio pax @MT@ | 
|---|
| 1195 | libexec_PROGRAMS = @RMT@ | 
|---|
| 1196 | EXTRA_PROGRAMS = mt rmt | 
|---|
| 1197 |  | 
|---|
| 1198 | LDADD = ../lib/libcpio.a @INTLLIBS@ | 
|---|
| 1199 | rmt_LDADD = | 
|---|
| 1200 |  | 
|---|
| 1201 | cpio_SOURCES = ... | 
|---|
| 1202 | pax_SOURCES = ... | 
|---|
| 1203 | mt_SOURCES = ... | 
|---|
| 1204 | rmt_SOURCES = ... | 
|---|
| 1205 |  | 
|---|
| 1206 | `PROG_LDADD' is inappropriate for passing program-specific linker | 
|---|
| 1207 | flags (except for `-l' and `-L').  So, use the `PROG_LDFLAGS' variable | 
|---|
| 1208 | for this purpose. | 
|---|
| 1209 |  | 
|---|
| 1210 | It is also occasionally useful to have a program depend on some other | 
|---|
| 1211 | target which is not actually part of that program.  This can be done | 
|---|
| 1212 | using the `PROG_DEPENDENCIES' variable.  Each program depends on the | 
|---|
| 1213 | contents of such a variable, but no further interpretation is done. | 
|---|
| 1214 |  | 
|---|
| 1215 | If `PROG_DEPENDENCIES' is not supplied, it is computed by Automake. | 
|---|
| 1216 | The automatically-assigned value is the contents of `PROG_LDADD', with | 
|---|
| 1217 | most configure substitutions, `-l', and `-L' options removed.  The | 
|---|
| 1218 | configure substitutions that are left in are only `@LIBOBJS@' and | 
|---|
| 1219 | `@ALLOCA@'; these are left because it is known that they will not cause | 
|---|
| 1220 | an invalid value for `PROG_DEPENDENCIES' to be generated. | 
|---|
| 1221 |  | 
|---|
| 1222 |  | 
|---|
| 1223 | File: automake.info,  Node: A Library,  Next: LIBOBJS,  Prev: A Program,  Up: Programs | 
|---|
| 1224 |  | 
|---|
| 1225 | Building a library | 
|---|
| 1226 | ================== | 
|---|
| 1227 |  | 
|---|
| 1228 | Building a library is much like building a program.  In this case, | 
|---|
| 1229 | the name of the primary is `LIBRARIES'.  Libraries can be installed in | 
|---|
| 1230 | `libdir' or `pkglibdir'. | 
|---|
| 1231 |  | 
|---|
| 1232 | *Note A Shared Library::, for information on how to build shared | 
|---|
| 1233 | libraries using Libtool and the `LTLIBRARIES' primary. | 
|---|
| 1234 |  | 
|---|
| 1235 | Each `_LIBRARIES' variable is a list of the libraries to be built. | 
|---|
| 1236 | For instance to create a library named `libcpio.a', but not install it, | 
|---|
| 1237 | you would write: | 
|---|
| 1238 |  | 
|---|
| 1239 | noinst_LIBRARIES = libcpio.a | 
|---|
| 1240 |  | 
|---|
| 1241 | The sources that go into a library are determined exactly as they are | 
|---|
| 1242 | for programs, via the `_SOURCES' variables.  Note that the library name | 
|---|
| 1243 | is canonicalized (*note Canonicalization::), so the `_SOURCES' variable | 
|---|
| 1244 | corresponding to `liblob.a' is `liblob_a_SOURCES', not | 
|---|
| 1245 | `liblob.a_SOURCES'. | 
|---|
| 1246 |  | 
|---|
| 1247 | Extra objects can be added to a library using the `LIBRARY_LIBADD' | 
|---|
| 1248 | variable.  This should be used for objects determined by `configure'. | 
|---|
| 1249 | Again from `cpio': | 
|---|
| 1250 |  | 
|---|
| 1251 | libcpio_a_LIBADD = @LIBOBJS@ @ALLOCA@ | 
|---|
| 1252 |  | 
|---|
| 1253 |  | 
|---|
| 1254 | File: automake.info,  Node: LIBOBJS,  Next: A Shared Library,  Prev: A Library,  Up: Programs | 
|---|
| 1255 |  | 
|---|
| 1256 | Special handling for LIBOBJS and ALLOCA | 
|---|
| 1257 | ======================================= | 
|---|
| 1258 |  | 
|---|
| 1259 | Automake explicitly recognizes the use of `@LIBOBJS@' and | 
|---|
| 1260 | `@ALLOCA@', and uses this information, plus the list of `LIBOBJS' files | 
|---|
| 1261 | derived from `configure.in' to automatically include the appropriate | 
|---|
| 1262 | source files in the distribution (*note Dist::).  These source files | 
|---|
| 1263 | are also automatically handled in the dependency-tracking scheme; see | 
|---|
| 1264 | *Note Dependencies::. | 
|---|
| 1265 |  | 
|---|
| 1266 | `@LIBOBJS@' and `@ALLOCA@' are specially recognized in any `_LDADD' | 
|---|
| 1267 | or `_LIBADD' variable. | 
|---|
| 1268 |  | 
|---|