| 1 | \input texinfo   @c -*-texinfo-*- | 
|---|
| 2 | @c %**start of header | 
|---|
| 3 | @setfilename automake.info | 
|---|
| 4 | @settitle automake | 
|---|
| 5 | @setchapternewpage off | 
|---|
| 6 | @c %**end of header | 
|---|
| 7 |  | 
|---|
| 8 | @include version.texi | 
|---|
| 9 |  | 
|---|
| 10 | @dircategory GNU admin | 
|---|
| 11 | @direntry | 
|---|
| 12 | * automake: (automake).         Making Makefile.in's | 
|---|
| 13 | @end direntry | 
|---|
| 14 |  | 
|---|
| 15 | @dircategory Individual utilities | 
|---|
| 16 | @direntry | 
|---|
| 17 | * aclocal: (automake)Invoking aclocal.          Generating aclocal.m4 | 
|---|
| 18 | @end direntry | 
|---|
| 19 |  | 
|---|
| 20 | @ifinfo | 
|---|
| 21 | This file documents GNU automake @value{VERSION} | 
|---|
| 22 |  | 
|---|
| 23 | Copyright (C) 1995, 96, 97, 98 Free Software Foundation, Inc. | 
|---|
| 24 |  | 
|---|
| 25 | Permission is granted to make and distribute verbatim copies of | 
|---|
| 26 | this manual provided the copyright notice and this permission notice | 
|---|
| 27 | are preserved on all copies. | 
|---|
| 28 |  | 
|---|
| 29 | @ignore | 
|---|
| 30 | Permission is granted to process this file through TeX and print the | 
|---|
| 31 | results, provided the printed document carries copying permission | 
|---|
| 32 | notice identical to this one except for the removal of this paragraph | 
|---|
| 33 |  | 
|---|
| 34 |  | 
|---|
| 35 | @end ignore | 
|---|
| 36 | Permission is granted to copy and distribute modified versions of this | 
|---|
| 37 | manual under the conditions for verbatim copying, provided that the entire | 
|---|
| 38 | resulting derived work is distributed under the terms of a permission | 
|---|
| 39 | notice identical to this one. | 
|---|
| 40 |  | 
|---|
| 41 | Permission is granted to copy and distribute translations of this manual | 
|---|
| 42 | into another language, under the above conditions for modified versions, | 
|---|
| 43 | except that this permission notice may be stated in a translation approved | 
|---|
| 44 | by the Foundation. | 
|---|
| 45 | @end ifinfo | 
|---|
| 46 |  | 
|---|
| 47 |  | 
|---|
| 48 | @titlepage | 
|---|
| 49 | @title GNU Automake | 
|---|
| 50 | @subtitle For version @value{VERSION}, @value{UPDATED} | 
|---|
| 51 | @author David MacKenzie and Tom Tromey | 
|---|
| 52 |  | 
|---|
| 53 | @page | 
|---|
| 54 | @vskip 0pt plus 1filll | 
|---|
| 55 | Copyright @copyright{} 1995, 96 Free Software Foundation, Inc. | 
|---|
| 56 | @sp 2 | 
|---|
| 57 | This is the first edition of the GNU Automake documentation,@* | 
|---|
| 58 | and is consistent with GNU Automake @value{VERSION}.@* | 
|---|
| 59 | @sp 2 | 
|---|
| 60 | Published by the Free Software Foundation @* | 
|---|
| 61 | 59 Temple Place - Suite 330, @* | 
|---|
| 62 | Boston, MA 02111-1307 USA @* | 
|---|
| 63 |  | 
|---|
| 64 | Permission is granted to make and distribute verbatim copies of | 
|---|
| 65 | this manual provided the copyright notice and this permission notice | 
|---|
| 66 | are preserved on all copies. | 
|---|
| 67 |  | 
|---|
| 68 | Permission is granted to copy and distribute modified versions of this | 
|---|
| 69 | manual under the conditions for verbatim copying, provided that the entire | 
|---|
| 70 | resulting derived work is distributed under the terms of a permission | 
|---|
| 71 | notice identical to this one. | 
|---|
| 72 |  | 
|---|
| 73 | Permission is granted to copy and distribute translations of this manual | 
|---|
| 74 | into another language, under the above conditions for modified versions, | 
|---|
| 75 | except that this permission notice may be stated in a translation | 
|---|
| 76 | approved by the Free Software Foundation. | 
|---|
| 77 | @end titlepage | 
|---|
| 78 |  | 
|---|
| 79 | @c Define an index of configure output variables. | 
|---|
| 80 | @defcodeindex ov | 
|---|
| 81 | @c Define an index of configure variables. | 
|---|
| 82 | @defcodeindex cv | 
|---|
| 83 | @c Define an index of options. | 
|---|
| 84 | @defcodeindex op | 
|---|
| 85 | @c Define an index of targets. | 
|---|
| 86 | @defcodeindex tr | 
|---|
| 87 | @c Define an index of commands. | 
|---|
| 88 | @defcodeindex cm | 
|---|
| 89 |  | 
|---|
| 90 | @c Put the macros and variables into their own index. | 
|---|
| 91 | @c @syncodeindex fn cp | 
|---|
| 92 | @syncodeindex ov vr | 
|---|
| 93 | @syncodeindex cv vr | 
|---|
| 94 | @syncodeindex fn vr | 
|---|
| 95 |  | 
|---|
| 96 | @c Put everything else into one index (arbitrarily chosen to be the concept index). | 
|---|
| 97 | @syncodeindex op cp | 
|---|
| 98 | @syncodeindex tr cp | 
|---|
| 99 | @syncodeindex cm cp | 
|---|
| 100 |  | 
|---|
| 101 | @ifinfo | 
|---|
| 102 | @node Top, Introduction, (dir), (dir) | 
|---|
| 103 | @comment  node-name,  next,  previous,  up | 
|---|
| 104 | @top GNU Automake | 
|---|
| 105 |  | 
|---|
| 106 | This file documents the GNU Automake package for creating GNU | 
|---|
| 107 | Standards-compliant Makefiles from template files.  This edition | 
|---|
| 108 | documents version @value{VERSION}. | 
|---|
| 109 |  | 
|---|
| 110 | @menu | 
|---|
| 111 | * Introduction::                Automake's purpose | 
|---|
| 112 | * Generalities::                General ideas | 
|---|
| 113 | * Examples::                    Some example packages | 
|---|
| 114 | * Invoking Automake::           Creating a Makefile.in | 
|---|
| 115 | * configure::                   Scanning configure.in | 
|---|
| 116 | * Top level::                   The top-level Makefile.am | 
|---|
| 117 | * Programs::                    Building programs and libraries | 
|---|
| 118 | * Other objects::               Other derived objects | 
|---|
| 119 | * Other GNU Tools::             Other GNU Tools | 
|---|
| 120 | * Documentation::               Building documentation | 
|---|
| 121 | * Install::                     What gets installed | 
|---|
| 122 | * Clean::                       What gets cleaned | 
|---|
| 123 | * Dist::                        What goes in a distribution | 
|---|
| 124 | * Tests::                       Support for test suites | 
|---|
| 125 | * Options::                     Changing Automake's behavior | 
|---|
| 126 | * Miscellaneous::               Miscellaneous rules | 
|---|
| 127 | * Include::                     Including extra files in an Automake template. | 
|---|
| 128 | * Conditionals::                Conditionals | 
|---|
| 129 | * Gnits::                       The effect of @code{--gnu} and @code{--gnits} | 
|---|
| 130 | * Cygnus::                      The effect of @code{--cygnus} | 
|---|
| 131 | * Extending::                   Extending Automake | 
|---|
| 132 | * Distributing::                Distributing the Makefile.in | 
|---|
| 133 | * Future::                      Some ideas for the future | 
|---|
| 134 | * Macro and Variable Index:: | 
|---|
| 135 | * General Index:: | 
|---|
| 136 | @end menu | 
|---|
| 137 |  | 
|---|
| 138 | @end ifinfo | 
|---|
| 139 |  | 
|---|
| 140 |  | 
|---|
| 141 | @node Introduction, Generalities, Top, Top | 
|---|
| 142 | @chapter Introduction | 
|---|
| 143 |  | 
|---|
| 144 | Automake is a tool for automatically generating @file{Makefile.in}s from | 
|---|
| 145 | files called @file{Makefile.am}.  Each @file{Makefile.am} is basically a | 
|---|
| 146 | series of @code{make} macro definitions (with rules being thrown in | 
|---|
| 147 | occasionally).  The generated @file{Makefile.in}s are compliant with the | 
|---|
| 148 | GNU Makefile standards. | 
|---|
| 149 |  | 
|---|
| 150 | @cindex GNU Makefile standards | 
|---|
| 151 |  | 
|---|
| 152 | The GNU Makefile Standards Document | 
|---|
| 153 | (@pxref{Makefile Conventions, , , standards, The GNU Coding Standards}) | 
|---|
| 154 | is long, complicated, and subject to change.  The goal of Automake is to | 
|---|
| 155 | remove the burden of Makefile maintenance from the back of the | 
|---|
| 156 | individual GNU maintainer (and put it on the back of the Automake | 
|---|
| 157 | maintainer). | 
|---|
| 158 |  | 
|---|
| 159 | The typical Automake input file is simply a series of macro definitions. | 
|---|
| 160 | Each such file is processed to create a @file{Makefile.in}.  There | 
|---|
| 161 | should generally be one @file{Makefile.am} per directory of a project. | 
|---|
| 162 |  | 
|---|
| 163 | @cindex Constraints of Automake | 
|---|
| 164 | @cindex Automake constraints | 
|---|
| 165 |  | 
|---|
| 166 | Automake does constrain a project in certain ways; for instance it | 
|---|
| 167 | assumes that the project uses Autoconf (@pxref{Top, , Introduction, | 
|---|
| 168 | autoconf, The Autoconf Manual}), and enforces certain restrictions on | 
|---|
| 169 | the @file{configure.in} contents. | 
|---|
| 170 |  | 
|---|
| 171 | @cindex Automake requirements | 
|---|
| 172 | @cindex Requirements, Automake | 
|---|
| 173 |  | 
|---|
| 174 | Automake requires @code{perl} in order to generate the | 
|---|
| 175 | @file{Makefile.in}s.  However, the distributions created by Automake are | 
|---|
| 176 | fully GNU standards-compliant, and do not require @code{perl} in order | 
|---|
| 177 | to be built. | 
|---|
| 178 |  | 
|---|
| 179 | @cindex BUGS, reporting | 
|---|
| 180 | @cindex Reporting BUGS | 
|---|
| 181 | @cindex E-mail, bug reports | 
|---|
| 182 |  | 
|---|
| 183 | Mail suggestions and bug reports for Automake to | 
|---|
| 184 | @email{bug-automake@@gnu.org}. | 
|---|
| 185 |  | 
|---|
| 186 |  | 
|---|
| 187 | @node Generalities, Examples, Introduction, Top | 
|---|
| 188 | @chapter General ideas | 
|---|
| 189 |  | 
|---|
| 190 | The following sections cover a few basic ideas that will help you | 
|---|
| 191 | understand how Automake works. | 
|---|
| 192 |  | 
|---|
| 193 | @menu | 
|---|
| 194 | * General Operation::           General operation of Automake | 
|---|
| 195 | * Depth::                       The kinds of packages | 
|---|
| 196 | * Strictness::                  Standards conformance checking | 
|---|
| 197 | * Uniform::                     The Uniform Naming Scheme | 
|---|
| 198 | * Canonicalization::            How derived variables are named | 
|---|
| 199 | @end menu | 
|---|
| 200 |  | 
|---|
| 201 |  | 
|---|
| 202 | @node General Operation, Depth, Generalities, Generalities | 
|---|
| 203 | @section General Operation | 
|---|
| 204 |  | 
|---|
| 205 | Automake works by reading a @file{Makefile.am} and generating a | 
|---|
| 206 | @file{Makefile.in}.  Certain macros and targets defined in the | 
|---|
| 207 | @file{Makefile.am} instruct Automake to generate more specialized code; | 
|---|
| 208 | for instance, a @samp{bin_PROGRAMS} macro definition will cause targets | 
|---|
| 209 | for compiling and linking programs to be generated. | 
|---|
| 210 |  | 
|---|
| 211 | @cindex Non-standard targets | 
|---|
| 212 | @cindex cvs-dist, non-standard example | 
|---|
| 213 | @trindex cvs-dist | 
|---|
| 214 |  | 
|---|
| 215 | The macro definitions and targets in the @file{Makefile.am} are copied | 
|---|
| 216 | verbatim into the generated file.  This allows you to add arbitrary code | 
|---|
| 217 | into the generated @file{Makefile.in}.  For instance the Automake | 
|---|
| 218 | distribution includes a non-standard @code{cvs-dist} target, which the | 
|---|
| 219 | Automake maintainer uses to make distributions from his source control | 
|---|
| 220 | system. | 
|---|
| 221 |  | 
|---|
| 222 | @cindex GNU make extensions | 
|---|
| 223 |  | 
|---|
| 224 | Note that GNU make extensions are not recognized by Automake.  Using | 
|---|
| 225 | such extensions in a @file{Makefile.am} will lead to errors or confusing | 
|---|
| 226 | behavior. | 
|---|
| 227 |  | 
|---|
| 228 | Automake tries to group comments with adjoining targets and macro | 
|---|
| 229 | definitions in an intelligent way. | 
|---|
| 230 |  | 
|---|
| 231 | @cindex Make targets, overriding | 
|---|
| 232 | @cindex Overriding make targets | 
|---|
| 233 |  | 
|---|
| 234 | A target defined in @file{Makefile.am} generally overrides any such | 
|---|
| 235 | target of a similar name that would be automatically generated by | 
|---|
| 236 | @code{automake}.  Although this is a supported feature, it is generally | 
|---|
| 237 | best to avoid making use of it, as sometimes the generated rules are | 
|---|
| 238 | very particular. | 
|---|
| 239 |  | 
|---|
| 240 | @cindex Macros, overriding | 
|---|
| 241 | @cindex Overriding make macros | 
|---|
| 242 |  | 
|---|
| 243 | Similarly, a macro defined in @file{Makefile.am} will override any | 
|---|
| 244 | definition of the macro that @code{automake} would ordinarily create. | 
|---|
| 245 | This feature is more often useful than the ability to override a target | 
|---|
| 246 | definition.  Be warned that many of the macros generated by | 
|---|
| 247 | @code{automake} are considered to be for internal use only, and their | 
|---|
| 248 | names might change in future releases. | 
|---|
| 249 |  | 
|---|
| 250 | @cindex Recursive operation of Automake | 
|---|
| 251 | @cindex Automake, recursive operation | 
|---|
| 252 | @cindex Example of recursive operation | 
|---|
| 253 |  | 
|---|
| 254 | When examining a macro definition, Automake will recursively examine | 
|---|
| 255 | macros referenced in the definition.  For example, if Automake is | 
|---|
| 256 | looking at the content of @code{foo_SOURCES} in this snippet | 
|---|
| 257 |  | 
|---|
| 258 | @example | 
|---|
| 259 | xs = a.c b.c | 
|---|
| 260 | foo_SOURCES = c.c $(xs) | 
|---|
| 261 | @end example | 
|---|
| 262 |  | 
|---|
| 263 | it would use the files @file{a.c}, @file{b.c}, and @file{c.c} as the | 
|---|
| 264 | contents of @code{foo_SOURCES}. | 
|---|
| 265 |  | 
|---|
| 266 | @cindex ## (special Automake comment) | 
|---|
| 267 | @cindex Special Automake comment | 
|---|
| 268 | @cindex Comment, special to Automake | 
|---|
| 269 |  | 
|---|
| 270 | Automake also allows a form of comment which is @emph{not} copied into | 
|---|
| 271 | the output; all lines beginning with @samp{##} are completely ignored by | 
|---|
| 272 | Automake. | 
|---|
| 273 |  | 
|---|
| 274 | It is customary to make the first line of @file{Makefile.am} read: | 
|---|
| 275 |  | 
|---|
| 276 | @cindex Makefile.am, first line | 
|---|
| 277 | @cindex First line of Makefile.am | 
|---|
| 278 |  | 
|---|
| 279 | @example | 
|---|
| 280 | ## Process this file with automake to produce Makefile.in | 
|---|
| 281 | @end example | 
|---|
| 282 |  | 
|---|
| 283 | @c FIXME discuss putting a copyright into Makefile.am here?  I would but | 
|---|
| 284 | @c I don't know quite what to say. | 
|---|
| 285 |  | 
|---|
| 286 | @c FIXME document customary ordering of Makefile.am here! | 
|---|
| 287 |  | 
|---|
| 288 |  | 
|---|
| 289 | @node Depth, Strictness, General Operation, Generalities | 
|---|
| 290 | @section Depth | 
|---|
| 291 |  | 
|---|
| 292 | @cindex Flat package | 
|---|
| 293 | @cindex Package, Flat | 
|---|
| 294 | @cindex Shallow package | 
|---|
| 295 | @cindex Package, shallow | 
|---|
| 296 | @cindex Deep package | 
|---|
| 297 | @cindex Package, deep | 
|---|
| 298 |  | 
|---|
| 299 | @code{automake} supports three kinds of directory hierarchy: | 
|---|
| 300 | @samp{flat}, @samp{shallow}, and @samp{deep}. | 
|---|
| 301 |  | 
|---|
| 302 | A @dfn{flat} package is one in which all the files are in a single | 
|---|
| 303 | directory.  The @file{Makefile.am} for such a package by definition | 
|---|
| 304 | lacks a @code{SUBDIRS} macro.  An example of such a package is | 
|---|
| 305 | @code{termutils}. | 
|---|
| 306 | @vindex SUBDIRS | 
|---|
| 307 |  | 
|---|
| 308 | @cindex SUBDIRS, deep package | 
|---|
| 309 |  | 
|---|
| 310 | A @dfn{deep} package is one in which all the source lies in | 
|---|
| 311 | subdirectories; the top level directory contains mainly configuration | 
|---|
| 312 | information.  GNU @code{cpio} is a good example of such a package, as is | 
|---|
| 313 | GNU @code{tar}.  The top level @file{Makefile.am} for a deep package | 
|---|
| 314 | will contain a @code{SUBDIRS} macro, but no other macros to define | 
|---|
| 315 | objects which are built. | 
|---|
| 316 |  | 
|---|
| 317 | A @dfn{shallow} package is one in which the primary source resides in | 
|---|
| 318 | the top-level directory, while various parts (typically libraries) | 
|---|
| 319 | reside in subdirectories.  Automake is one such package (as is GNU | 
|---|
| 320 | @code{make}, which does not currently use @code{automake}). | 
|---|
| 321 |  | 
|---|
| 322 |  | 
|---|
| 323 | @node Strictness, Uniform, Depth, Generalities | 
|---|
| 324 | @section Strictness | 
|---|
| 325 |  | 
|---|
| 326 | @cindex Non-GNU packages | 
|---|
| 327 |  | 
|---|
| 328 | While Automake is intended to be used by maintainers of GNU packages, it | 
|---|
| 329 | does make some effort to accommodate those who wish to use it, but do | 
|---|
| 330 | not want to use all the GNU conventions. | 
|---|
| 331 |  | 
|---|
| 332 | @cindex Strictness, defined | 
|---|
| 333 | @cindex Strictness, foreign | 
|---|
| 334 | @cindex foreign strictness | 
|---|
| 335 | @cindex Strictness, gnu | 
|---|
| 336 | @cindex gnits strictness | 
|---|
| 337 | @cindex Strictness, gnits | 
|---|
| 338 | @cindex gnits strictness | 
|---|
| 339 |  | 
|---|
| 340 | To this end, Automake supports three levels of @dfn{strictness}---the | 
|---|
| 341 | strictness indicating how stringently Automake should check standards | 
|---|
| 342 | conformance. | 
|---|
| 343 |  | 
|---|
| 344 | The valid strictness levels are: | 
|---|
| 345 |  | 
|---|
| 346 | @table @samp | 
|---|
| 347 | @item foreign | 
|---|
| 348 | Automake will check for only those things which are absolutely | 
|---|
| 349 | required for proper operations.  For instance, whereas GNU standards | 
|---|
| 350 | dictate the existence of a @file{NEWS} file, it will not be required in | 
|---|
| 351 | this mode.  The name comes from the fact that Automake is intended to be | 
|---|
| 352 | used for GNU programs; these relaxed rules are not the standard mode of | 
|---|
| 353 | operation. | 
|---|
| 354 |  | 
|---|
| 355 | @item gnu | 
|---|
| 356 | Automake will check---as much as possible---for compliance to the GNU | 
|---|
| 357 | standards for packages.  This is the default. | 
|---|
| 358 |  | 
|---|
| 359 | @item gnits | 
|---|
| 360 | Automake will check for compliance to the as-yet-unwritten @dfn{Gnits | 
|---|
| 361 | standards}.  These are based on the GNU standards, but are even more | 
|---|
| 362 | detailed.  Unless you are a Gnits standards contributor, it is | 
|---|
| 363 | recommended that you avoid this option until such time as the Gnits | 
|---|
| 364 | standard is actually published. | 
|---|
| 365 | @end table | 
|---|
| 366 |  | 
|---|
| 367 | For more information on the precise implications of the strictness | 
|---|
| 368 | level, see @ref{Gnits}. | 
|---|
| 369 |  | 
|---|
| 370 |  | 
|---|
| 371 | @node Uniform, Canonicalization, Strictness, Generalities | 
|---|
| 372 | @section The Uniform Naming Scheme | 
|---|
| 373 |  | 
|---|
| 374 | @cindex Uniform naming scheme | 
|---|
| 375 |  | 
|---|
| 376 | Automake macros (from here on referred to as @emph{variables}) generally | 
|---|
| 377 | follow a @dfn{uniform naming scheme} that makes it easy to decide how | 
|---|
| 378 | programs (and other derived objects) are built, and how they are | 
|---|
| 379 | installed.  This scheme also supports @code{configure} time | 
|---|
| 380 | determination of what should be built. | 
|---|
| 381 |  | 
|---|
| 382 | @cindex _PROGRAMS primary variable | 
|---|
| 383 | @cindex PROGRAMS primary variable | 
|---|
| 384 | @cindex Primary variable, PROGRAMS | 
|---|
| 385 |  | 
|---|
| 386 | @cindex Primary variable, defined | 
|---|
| 387 |  | 
|---|
| 388 | At @code{make} time, certain variables are used to determine which | 
|---|
| 389 | objects are to be built.  These variables are called @dfn{primary | 
|---|
| 390 | variables}.  For instance, the primary variable @code{PROGRAMS} holds a | 
|---|
| 391 | list of programs which are to be compiled and linked. | 
|---|
| 392 | @vindex PROGRAMS | 
|---|
| 393 |  | 
|---|
| 394 | @cindex pkglibdir, defined | 
|---|
| 395 | @cindex pkgincludedir, defined | 
|---|
| 396 | @cindex pkgdatadir, defined | 
|---|
| 397 |  | 
|---|
| 398 | @vindex pkglibdir | 
|---|
| 399 | @vindex pkgincludedir | 
|---|
| 400 | @vindex pkgdatadir | 
|---|
| 401 |  | 
|---|
| 402 | A different set of variables is used to decide where the built objects | 
|---|
| 403 | should be installed.  These variables are named after the primary | 
|---|
| 404 | variables, but have a prefix indicating which standard directory should | 
|---|
| 405 | be used as the installation directory.  The standard directory names are | 
|---|
| 406 | given in the GNU standards (@pxref{Directory Variables, , , standards, | 
|---|
| 407 | The GNU Coding Standards}).  Automake extends this list with | 
|---|
| 408 | @code{pkglibdir}, @code{pkgincludedir}, and @code{pkgdatadir}; these are | 
|---|
| 409 | the same as the non-@samp{pkg} versions, but with @samp{@@PACKAGE@@} | 
|---|
| 410 | appended.  For instance, @code{pkglibdir} is defined as | 
|---|
| 411 | @code{$(datadir)/@@PACKAGE@@}. | 
|---|
| 412 | @cvindex PACKAGE | 
|---|
| 413 |  | 
|---|
| 414 | @cindex EXTRA_, prepending | 
|---|
| 415 |  | 
|---|
| 416 | For each primary, there is one additional variable named by prepending | 
|---|
| 417 | @samp{EXTRA_} to the primary name.  This variable is used to list | 
|---|
| 418 | objects which may or may not be built, depending on what | 
|---|
| 419 | @code{configure} decides.  This variable is required because Automake | 
|---|
| 420 | must statically know the entire list of objects that may be built in | 
|---|
| 421 | order to generate a @file{Makefile.in} that will work in all cases. | 
|---|
| 422 |  | 
|---|
| 423 | @cindex EXTRA_PROGRAMS, defined | 
|---|
| 424 | @cindex Example, EXTRA_PROGRAMS | 
|---|
| 425 | @cindex cpio example | 
|---|
| 426 |  | 
|---|
| 427 | For instance, @code{cpio} decides at configure time which programs are | 
|---|
| 428 | built.  Some of the programs are installed in @code{bindir}, and some | 
|---|
| 429 | are installed in @code{sbindir}: | 
|---|
| 430 |  | 
|---|
| 431 | @example | 
|---|
| 432 | EXTRA_PROGRAMS = mt rmt | 
|---|
| 433 | bin_PROGRAMS = cpio pax | 
|---|
| 434 | sbin_PROGRAMS = @@PROGRAMS@@ | 
|---|
| 435 | @end example | 
|---|
| 436 |  | 
|---|
| 437 | Defining a primary variable without a prefix (e.g. @code{PROGRAMS}) is | 
|---|
| 438 | an error. | 
|---|
| 439 |  | 
|---|
| 440 | Note that the common @samp{dir} suffix is left off when constructing the | 
|---|
| 441 | variable names; thus one writes @samp{bin_PROGRAMS} and not | 
|---|
| 442 | @samp{bindir_PROGRAMS}. | 
|---|
| 443 |  | 
|---|
| 444 | Not every sort of object can be installed in every directory.  Automake | 
|---|
| 445 | will flag those attempts it finds in error.  Automake will also diagnose | 
|---|
| 446 | obvious misspellings in directory names. | 
|---|
| 447 |  | 
|---|
| 448 | @cindex Extending list of installation directories | 
|---|
| 449 | @cindex Installation directories, extending list | 
|---|
| 450 |  | 
|---|
| 451 | Sometimes the standard directories---even as augmented by Automake--- | 
|---|
| 452 | are not enough.  In particular it is sometimes useful, for clarity, to | 
|---|
| 453 | install objects in a subdirectory of some predefined directory.  To this | 
|---|
| 454 | end, Automake allows you to extend the list of possible installation | 
|---|
| 455 | directories.  A given prefix (e.g. @samp{zar}) is valid if a variable of | 
|---|
| 456 | the same name with @samp{dir} appended is defined (e.g. @code{zardir}). | 
|---|
| 457 |  | 
|---|
| 458 | @cindex HTML support, example | 
|---|
| 459 |  | 
|---|
| 460 | For instance, until HTML support is part of Automake, you could use this | 
|---|
| 461 | to install raw HTML documentation: | 
|---|
| 462 |  | 
|---|
| 463 | @example | 
|---|
| 464 | htmldir = $(prefix)/html | 
|---|
| 465 | html_DATA = automake.html | 
|---|
| 466 | @end example | 
|---|
| 467 |  | 
|---|
| 468 | @cindex noinst primary prefix, definition | 
|---|
| 469 |  | 
|---|
| 470 | The special prefix @samp{noinst} indicates that the objects in question | 
|---|
| 471 | should not be installed at all. | 
|---|
| 472 |  | 
|---|
| 473 | @cindex check primary prefix, definition | 
|---|
| 474 |  | 
|---|
| 475 | The special prefix @samp{check} indicates that the objects in question | 
|---|
| 476 | should not be built until the @code{make check} command is run. | 
|---|
| 477 |  | 
|---|
| 478 | Possible primary names are @samp{PROGRAMS}, @samp{LIBRARIES}, | 
|---|
| 479 | @samp{LISP}, @samp{SCRIPTS}, @samp{DATA}, @samp{HEADERS}, @samp{MANS}, | 
|---|
| 480 | and @samp{TEXINFOS}. | 
|---|
| 481 | @vindex PROGRAMS | 
|---|
| 482 | @vindex LIBRARIES | 
|---|
| 483 | @vindex LISP | 
|---|
| 484 | @vindex SCRIPTS | 
|---|
| 485 | @vindex DATA | 
|---|
| 486 | @vindex HEADERS | 
|---|
| 487 | @vindex MANS | 
|---|
| 488 | @vindex TEXINFOS | 
|---|
| 489 |  | 
|---|
| 490 |  | 
|---|
| 491 | @node Canonicalization,  , Uniform, Generalities | 
|---|
| 492 | @section How derived variables are named | 
|---|
| 493 |  | 
|---|
| 494 | @cindex canonicalizing Automake macros | 
|---|
| 495 |  | 
|---|
| 496 | Sometimes a Makefile variable name is derived from some text the user | 
|---|
| 497 | supplies.  For instance, program names are rewritten into Makefile macro | 
|---|
| 498 | names.  Automake canonicalizes this text, so that it does not have to | 
|---|
| 499 | follow Makefile macro naming rules.  All characters in the name except | 
|---|
| 500 | for letters, numbers, and the underscore are turned into underscores | 
|---|
| 501 | when making macro references.  For example, if your program is named | 
|---|
| 502 | @code{sniff-glue}, the derived variable name would be | 
|---|
| 503 | @code{sniff_glue_SOURCES}, not @code{sniff-glue_SOURCES}. | 
|---|
| 504 |  | 
|---|
| 505 |  | 
|---|
| 506 | @node Examples, Invoking Automake, Generalities, Top | 
|---|
| 507 | @chapter Some example packages | 
|---|
| 508 |  | 
|---|
| 509 | @menu | 
|---|
| 510 | * Complete::                    A simple example, start to finish | 
|---|
| 511 | * Hello::                       A classic program | 
|---|
| 512 | * etags::                       Building etags and ctags | 
|---|
| 513 | @end menu | 
|---|
| 514 |  | 
|---|
| 515 |  | 
|---|
| 516 | @node Complete, Hello, Examples, Examples | 
|---|
| 517 | @section A simple example, start to finish | 
|---|
| 518 |  | 
|---|
| 519 | @cindex Complete example | 
|---|
| 520 |  | 
|---|
| 521 | Let's suppose you just finished writing @code{zardoz}, a program to make | 
|---|
| 522 | your head float from vortex to vortex.  You've been using Autoconf to | 
|---|
| 523 | provide a portability framework, but your @file{Makefile.in}s have been | 
|---|
| 524 | ad-hoc.  You want to make them bulletproof, so you turn to Automake. | 
|---|
| 525 |  | 
|---|
| 526 | @cindex AM_INIT_AUTOMAKE, example use | 
|---|
| 527 |  | 
|---|
| 528 | The first step is to update your @file{configure.in} to include the | 
|---|
| 529 | commands that @code{automake} needs.  The simplest way to do this is to | 
|---|
| 530 | add an @code{AM_INIT_AUTOMAKE} call just after @code{AC_INIT}: | 
|---|
| 531 |  | 
|---|
| 532 | @example | 
|---|
| 533 | AM_INIT_AUTOMAKE(zardoz, 1.0) | 
|---|
| 534 | @end example | 
|---|
| 535 |  | 
|---|
| 536 | Since your program doesn't have any complicating factors (e.g., it | 
|---|
| 537 | doesn't use @code{gettext}, it doesn't want to build a shared library), | 
|---|
| 538 | you're done with this part.  That was easy! | 
|---|
| 539 |  | 
|---|
| 540 | @cindex aclocal program, introduction | 
|---|
| 541 | @cindex aclocal.m4, preexisting | 
|---|
| 542 | @cindex acinclude.m4, defined | 
|---|
| 543 |  | 
|---|
| 544 | Now you must regenerate @file{configure}.  But to do that, you'll need | 
|---|
| 545 | to tell @code{autoconf} how to find the new macro you've used.  The | 
|---|
| 546 | easiest way to do this is to use the @code{aclocal} program to generate | 
|---|
| 547 | your @file{aclocal.m4} for you.  But wait... you already have an | 
|---|
| 548 | @file{aclocal.m4}, because you had to write some hairy macros for your | 
|---|
| 549 | program.  The @code{aclocal} program lets you put your own macros into | 
|---|
| 550 | @file{acinclude.m4}, so simply rename and then run: | 
|---|
| 551 |  | 
|---|
| 552 | @example | 
|---|
| 553 | mv aclocal.m4 acinclude.m4 | 
|---|
| 554 | aclocal | 
|---|
| 555 | autoconf | 
|---|
| 556 | @end example | 
|---|
| 557 |  | 
|---|
| 558 | @cindex zardoz example | 
|---|
| 559 |  | 
|---|
| 560 | Now it is time to write your @file{Makefile.am} for @code{zardoz}. | 
|---|
| 561 | Since @code{zardoz} is a user program, you want to install it where the | 
|---|
| 562 | rest of the user programs go.  Additionally, @code{zardoz} has some | 
|---|
| 563 | Texinfo documentation.  Your @file{configure.in} script uses | 
|---|
| 564 | @code{AC_REPLACE_FUNCS}, so you need to link against @samp{@@LIBOBJS@@}. | 
|---|
| 565 | So here's what you'd write: | 
|---|
| 566 |  | 
|---|
| 567 | @example | 
|---|
| 568 | bin_PROGRAMS = zardoz | 
|---|
| 569 | zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c | 
|---|
| 570 | zardoz_LDADD = @@LIBOBJS@@ | 
|---|
| 571 |  | 
|---|
| 572 | info_TEXINFOS = zardoz.texi | 
|---|
| 573 | @end example | 
|---|
| 574 |  | 
|---|
| 575 | Now you can run @code{automake --add-missing} to generate your | 
|---|
| 576 | @file{Makefile.in} and grab any auxiliary files you might need, and | 
|---|
| 577 | you're done! | 
|---|
| 578 |  | 
|---|
| 579 |  | 
|---|
| 580 | @node Hello, etags, Complete, Examples | 
|---|
| 581 | @section A classic program | 
|---|
| 582 |  | 
|---|
| 583 | @cindex Example, GNU Hello | 
|---|
| 584 | @cindex Hello example | 
|---|
| 585 | @cindex GNU Hello, example | 
|---|
| 586 |  | 
|---|
| 587 | @uref{ftp://prep.ai.mit.edu/pub/gnu/hello-1.3.tar.gz, GNU hello} is | 
|---|
| 588 | renowned for its classic simplicity and versatility.  This section shows | 
|---|
| 589 | how Automake could be used with the GNU Hello package.  The examples | 
|---|
| 590 | below are from the latest beta version of GNU Hello, but with all of the | 
|---|
| 591 | maintainer-only code stripped out, as well as all copyright comments. | 
|---|
| 592 |  | 
|---|
| 593 | Of course, GNU Hello is somewhat more featureful than your traditional | 
|---|
| 594 | two-liner.  GNU Hello is internationalized, does option processing, and | 
|---|
| 595 | has a manual and a test suite.  GNU Hello is a deep package. | 
|---|
| 596 |  | 
|---|
| 597 | @cindex configure.in, from GNU Hello | 
|---|
| 598 | @cindex GNU Hello, configure.in | 
|---|
| 599 | @cindex Hello, configure.in | 
|---|
| 600 |  | 
|---|
| 601 | Here is the @file{configure.in} from GNU Hello: | 
|---|
| 602 |  | 
|---|
| 603 | @example | 
|---|
| 604 | dnl Process this file with autoconf to produce a configure script. | 
|---|
| 605 | AC_INIT(src/hello.c) | 
|---|
| 606 | AM_INIT_AUTOMAKE(hello, 1.3.11) | 
|---|
| 607 | AM_CONFIG_HEADER(config.h) | 
|---|
| 608 |  | 
|---|
| 609 | dnl Set of available languages. | 
|---|
| 610 | ALL_LINGUAS="de fr es ko nl no pl pt sl sv" | 
|---|
| 611 |  | 
|---|
| 612 | dnl Checks for programs. | 
|---|
| 613 | AC_PROG_CC | 
|---|
| 614 | AC_ISC_POSIX | 
|---|
| 615 |  | 
|---|
| 616 | dnl Checks for libraries. | 
|---|
| 617 |  | 
|---|
| 618 | dnl Checks for header files. | 
|---|
| 619 | AC_STDC_HEADERS | 
|---|
| 620 | AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h) | 
|---|
| 621 |  | 
|---|
| 622 | dnl Checks for library functions. | 
|---|
| 623 | AC_FUNC_ALLOCA | 
|---|
| 624 |  | 
|---|
| 625 | dnl Check for st_blksize in struct stat | 
|---|
| 626 | AC_ST_BLKSIZE | 
|---|
| 627 |  | 
|---|
| 628 | dnl internationalization macros | 
|---|
| 629 | AM_GNU_GETTEXT | 
|---|
| 630 | AC_OUTPUT([Makefile doc/Makefile intl/Makefile po/Makefile.in \ | 
|---|
| 631 | src/Makefile tests/Makefile tests/hello], | 
|---|
| 632 | [chmod +x tests/hello]) | 
|---|
| 633 | @end example | 
|---|
| 634 |  | 
|---|
| 635 | The @samp{AM_} macros are provided by Automake (or the Gettext library); | 
|---|
| 636 | the rest are standard Autoconf macros. | 
|---|
| 637 |  | 
|---|
| 638 |  | 
|---|
| 639 | The top-level @file{Makefile.am}: | 
|---|
| 640 |  | 
|---|
| 641 | @example | 
|---|
| 642 | EXTRA_DIST = BUGS ChangeLog.O | 
|---|
| 643 | SUBDIRS = doc intl po src tests | 
|---|
| 644 | @end example | 
|---|
| 645 |  | 
|---|
| 646 | As you can see, all the work here is really done in subdirectories. | 
|---|
| 647 |  | 
|---|
| 648 | The @file{po} and @file{intl} directories are automatically generated | 
|---|
| 649 | using @code{gettextize}; they will not be discussed here. | 
|---|
| 650 |  | 
|---|
| 651 | @cindex Texinfo file handling example | 
|---|
| 652 | @cindex Example, handling Texinfo files | 
|---|
| 653 |  | 
|---|
| 654 | In @file{doc/Makefile.am} we see: | 
|---|
| 655 |  | 
|---|
| 656 | @example | 
|---|
| 657 | info_TEXINFOS = hello.texi | 
|---|
| 658 | hello_TEXINFOS = gpl.texi | 
|---|
| 659 | @end example | 
|---|
| 660 |  | 
|---|
| 661 | This is sufficient to build, install, and distribute the GNU Hello | 
|---|
| 662 | manual. | 
|---|
| 663 |  | 
|---|
| 664 | @cindex Regression test example | 
|---|
| 665 | @cindex Example, regression test | 
|---|
| 666 |  | 
|---|
| 667 | Here is @file{tests/Makefile.am}: | 
|---|
| 668 |  | 
|---|
| 669 | @example | 
|---|
| 670 | TESTS = hello | 
|---|
| 671 | EXTRA_DIST = hello.in testdata | 
|---|
| 672 | @end example | 
|---|
| 673 |  | 
|---|
| 674 | The script @file{hello} is generated by @code{configure}, and is the | 
|---|
| 675 | only test case.  @code{make check} will run this test. | 
|---|
| 676 |  | 
|---|
| 677 | @cindex INCLUDES, example usage | 
|---|
| 678 |  | 
|---|
| 679 | Last we have @file{src/Makefile.am}, where all the real work is done: | 
|---|
| 680 |  | 
|---|
| 681 | @example | 
|---|
| 682 | bin_PROGRAMS = hello | 
|---|
| 683 | hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h | 
|---|
| 684 | hello_LDADD = @@INTLLIBS@@ @@ALLOCA@@ | 
|---|
| 685 | localedir = $(datadir)/locale | 
|---|
| 686 | INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\" | 
|---|
| 687 | @end example | 
|---|
| 688 |  | 
|---|
| 689 |  | 
|---|
| 690 | @node etags,  , Hello, Examples | 
|---|
| 691 | @section Building etags and ctags | 
|---|
| 692 |  | 
|---|
| 693 | @cindex Example, ctags and etags | 
|---|
| 694 | @cindex ctags Example | 
|---|
| 695 | @cindex etags Example | 
|---|
| 696 |  | 
|---|
| 697 | Here is another, trickier example.  It shows how to generate two | 
|---|
| 698 | programs (@code{ctags} and @code{etags}) from the same source file | 
|---|
| 699 | (@file{etags.c}).  The difficult part is that each compilation of | 
|---|
| 700 | @file{etags.c} requires different @code{cpp} flags. | 
|---|
| 701 |  | 
|---|
| 702 | @example | 
|---|
| 703 | bin_PROGRAMS = etags ctags | 
|---|
| 704 | ctags_SOURCES = | 
|---|
| 705 | ctags_LDADD = ctags.o | 
|---|
| 706 |  | 
|---|
| 707 | etags.o: etags.c | 
|---|
| 708 | $(COMPILE) -DETAGS_REGEXPS -c etags.c | 
|---|
| 709 |  | 
|---|
| 710 | ctags.o: etags.c | 
|---|
| 711 | $(COMPILE) -DCTAGS -o ctags.o -c etags.c | 
|---|
| 712 | @end example | 
|---|
| 713 |  | 
|---|
| 714 | Note that @code{ctags_SOURCES} is defined to be empty---that way no | 
|---|
| 715 | implicit value is substituted.  The implicit value, however, is used to | 
|---|
| 716 | generate @code{etags} from @file{etags.o}. | 
|---|
| 717 |  | 
|---|
| 718 | @code{ctags_LDADD} is used to get @file{ctags.o} into the link line. | 
|---|
| 719 | @code{ctags_DEPENDENCIES} is generated by Automake. | 
|---|
| 720 |  | 
|---|
| 721 | The above rules won't work if your compiler doesn't accept both | 
|---|
| 722 | @samp{-c} and @samp{-o}.  The simplest fix for this is to introduce a | 
|---|
| 723 | bogus dependency (to avoid problems with a parallel @code{make}): | 
|---|
| 724 |  | 
|---|
| 725 | @example | 
|---|
| 726 | etags.o: etags.c ctags.o | 
|---|
| 727 | $(COMPILE) -DETAGS_REGEXPS -c etags.c | 
|---|
| 728 |  | 
|---|
| 729 | ctags.o: etags.c | 
|---|
| 730 | $(COMPILE) -DCTAGS -c etags.c && mv etags.o ctags.o | 
|---|
| 731 | @end example | 
|---|
| 732 |  | 
|---|
| 733 | Also, these explicit rules do not work if the de-ANSI-fication feature | 
|---|
| 734 | is used (@pxref{ANSI}).  Supporting de-ANSI-fication requires a little | 
|---|
| 735 | more work: | 
|---|
| 736 |  | 
|---|
| 737 | @example | 
|---|
| 738 | etags._o: etags._c ctags.o | 
|---|
| 739 | $(COMPILE) -DETAGS_REGEXPS -c etags.c | 
|---|
| 740 |  | 
|---|
| 741 | ctags._o: etags._c | 
|---|
| 742 | $(COMPILE) -DCTAGS -c etags.c && mv etags._o ctags.o | 
|---|
| 743 | @end example | 
|---|
| 744 |  | 
|---|
| 745 |  | 
|---|
| 746 | @node Invoking Automake, configure, Examples, Top | 
|---|
| 747 | @chapter Creating a @file{Makefile.in} | 
|---|
| 748 |  | 
|---|
| 749 | @cindex Multiple configure.in files | 
|---|
| 750 | @cindex Invoking Automake | 
|---|
| 751 | @cindex Automake, invoking | 
|---|
| 752 |  | 
|---|
| 753 | To create all the @file{Makefile.in}s for a package, run the | 
|---|
| 754 | @code{automake} program in the top level directory, with no arguments. | 
|---|
| 755 | @code{automake} will automatically find each appropriate | 
|---|
| 756 | @file{Makefile.am} (by scanning @file{configure.in}; @pxref{configure}) | 
|---|
| 757 | and generate the corresponding @file{Makefile.in}.  Note that | 
|---|
| 758 | @code{automake} has a rather simplistic view of what constitutes a | 
|---|
| 759 | package; it assumes that a package has only one @file{configure.in}, at | 
|---|
| 760 | the top.  If your package has multiple @file{configure.in}s, then you | 
|---|
| 761 | must run @code{automake} in each directory holding a | 
|---|
| 762 | @file{configure.in}. | 
|---|
| 763 |  | 
|---|
| 764 | You can optionally give @code{automake} an argument; @file{.am} is | 
|---|
| 765 | appended to the argument and the result is used as the name of the input | 
|---|
| 766 | file.  This feature is generally only used to automatically rebuild an | 
|---|
| 767 | out-of-date @file{Makefile.in}.  Note that @code{automake} must always | 
|---|
| 768 | be run from the topmost directory of a project, even if being used to | 
|---|
| 769 | regenerate the @file{Makefile.in} in some subdirectory.  This is | 
|---|
| 770 | necessary because @code{automake} must scan @file{configure.in}, and | 
|---|
| 771 | because @code{automake} uses the knowledge that a @file{Makefile.in} is | 
|---|
| 772 | in a subdirectory to change its behavior in some cases. | 
|---|
| 773 |  | 
|---|
| 774 | @cindex Automake options | 
|---|
| 775 | @cindex Options, Automake | 
|---|
| 776 |  | 
|---|
| 777 | @code{automake} accepts the following options: | 
|---|
| 778 |  | 
|---|
| 779 | @cindex Extra files distributed with Automake | 
|---|
| 780 | @cindex Files distributed with Automake | 
|---|
| 781 | @cindex config.guess | 
|---|
| 782 |  | 
|---|
| 783 | @table @samp | 
|---|
| 784 | @item -a | 
|---|
| 785 | @itemx --add-missing | 
|---|
| 786 | @opindex -a | 
|---|
| 787 | @opindex --add-missing | 
|---|
| 788 | Automake requires certain common files to exist in certain situations; | 
|---|
| 789 | for instance @file{config.guess} is required if @file{configure.in} runs | 
|---|
| 790 | @code{AC_CANONICAL_HOST}.  Automake is distributed with several of these | 
|---|
| 791 | files; this option will cause the missing ones to be automatically added | 
|---|
| 792 | to the package, whenever possible.  In general if Automake tells you a | 
|---|
| 793 | file is missing, try using this option.  By default Automake tries to | 
|---|
| 794 | make a symbolic link pointing to its own copy of the missing file; this | 
|---|
| 795 | can be changed with @code{--copy}. | 
|---|
| 796 |  | 
|---|
| 797 | @item --amdir=@var{dir} | 
|---|
| 798 | @opindex --amdir | 
|---|
| 799 | Look for Automake data files in directory @var{dir} instead of in the | 
|---|
| 800 | installation directory.  This is typically used for debugging. | 
|---|
| 801 |  | 
|---|
| 802 | @item --build-dir=@var{dir} | 
|---|
| 803 | @opindex --build-dir | 
|---|
| 804 | Tell Automake where the build directory is.  This option is used when | 
|---|
| 805 | including dependencies into a @file{Makefile.in} generated by @code{make | 
|---|
| 806 | dist}; it should not be used otherwise. | 
|---|
| 807 |  | 
|---|
| 808 | @item -c | 
|---|
| 809 | @item --copy | 
|---|
| 810 | When used with @code{--add-missing}, causes installed files to be | 
|---|
| 811 | copied.  The default is to make a symbolic link. | 
|---|
| 812 |  | 
|---|
| 813 | @item --cygnus | 
|---|
| 814 | @opindex --cygnus | 
|---|
| 815 | Causes the generated @file{Makefile.in}s to follow Cygnus rules, instead | 
|---|
| 816 | of GNU or Gnits rules.  For more information, see @ref{Cygnus}. | 
|---|
| 817 |  | 
|---|
| 818 | @item --foreign | 
|---|
| 819 | @opindex --foreign | 
|---|
| 820 | Set the global strictness to @samp{foreign}.  For more information, see | 
|---|
| 821 | @ref{Strictness}. | 
|---|
| 822 |  | 
|---|
| 823 | @item --gnits | 
|---|
| 824 | @opindex --gnits | 
|---|
| 825 | Set the global strictness to @samp{gnits}.  For more information, see | 
|---|
| 826 | @ref{Gnits}. | 
|---|
| 827 |  | 
|---|
| 828 | @item --gnu | 
|---|
| 829 | @opindex --gnu | 
|---|
| 830 | Set the global strictness to @samp{gnu}.  For more information, see | 
|---|
| 831 | @ref{Gnits}.  This is the default strictness. | 
|---|
| 832 |  | 
|---|
| 833 | @item --help | 
|---|
| 834 | @opindex --help | 
|---|
| 835 | Print a summary of the command line options and exit. | 
|---|
| 836 |  | 
|---|
| 837 | @item -i | 
|---|
| 838 | @itemx --include-deps | 
|---|
| 839 | @opindex -i | 
|---|
| 840 | @opindex --include-deps | 
|---|
| 841 | Include all automatically generated dependency information | 
|---|
| 842 | (@pxref{Dependencies}) in the generated | 
|---|
| 843 | @file{Makefile.in}.  This is generally done when making a distribution; | 
|---|
| 844 | see @ref{Dist}. | 
|---|
| 845 |  | 
|---|
| 846 | @item --generate-deps | 
|---|
| 847 | @opindex --generate-deps | 
|---|
| 848 | Generate a file concatenating all automatically generated dependency | 
|---|
| 849 | information (@pxref{Dependencies}) into one file, @file{.dep_segment}. | 
|---|
| 850 | This is generally done when making a distribution; see @ref{Dist}.  It | 
|---|
| 851 | is useful when maintaining a @file{SMakefile} or makefiles for other | 
|---|
| 852 | platforms (@file{Makefile.DOS}, etc.)  It can only be used in | 
|---|
| 853 | conjunction with @samp{--include-deps}, @samp{--srcdir-name}, and | 
|---|
| 854 | @samp{--build-dir}.  Note that if this option is given, no other | 
|---|
| 855 | processing is done. | 
|---|
| 856 |  | 
|---|
| 857 | @item --no-force | 
|---|
| 858 | @opindex --no-force | 
|---|
| 859 | Ordinarily @code{automake} creates all @file{Makefile.in}s mentioned in | 
|---|
| 860 | @file{configure.in}.  This option causes it to only update those | 
|---|
| 861 | @file{Makefile.in}s which are out of date with respect to one of their | 
|---|
| 862 | dependents. | 
|---|
| 863 |  | 
|---|
| 864 | @item -o @var{dir} | 
|---|
| 865 | @itemx --output-dir=@var{dir} | 
|---|
| 866 | @opindex -o | 
|---|
| 867 | @opindex --output-dir | 
|---|
| 868 | Put the generated @file{Makefile.in} in the directory @var{dir}. | 
|---|
| 869 | Ordinarily each @file{Makefile.in} is created in the directory of the | 
|---|
| 870 | corresponding @file{Makefile.am}.  This option is used when making | 
|---|
| 871 | distributions. | 
|---|
| 872 |  | 
|---|
| 873 | @item --srcdir-name=@var{dir} | 
|---|
| 874 | @opindex --srcdir-name | 
|---|
| 875 | Tell Automake the name of the source directory associated with the | 
|---|
| 876 | current build.  This option is used when including dependencies into a | 
|---|
| 877 | @file{Makefile.in} generated by @code{make dist}; it should not be used | 
|---|
| 878 | otherwise. | 
|---|
| 879 |  | 
|---|
| 880 | @item -v | 
|---|
| 881 | @itemx --verbose | 
|---|
| 882 | @opindex -v | 
|---|
| 883 | @opindex --verbose | 
|---|
| 884 | Cause Automake to print information about which files are being read or | 
|---|
| 885 | created. | 
|---|
| 886 |  | 
|---|
| 887 | @item --version | 
|---|
| 888 | @opindex --version | 
|---|
| 889 | Print the version number of Automake and exit. | 
|---|
| 890 | @end table | 
|---|
| 891 |  | 
|---|
| 892 |  | 
|---|
| 893 | @node configure, Top level, Invoking Automake, Top | 
|---|
| 894 | @chapter Scanning @file{configure.in} | 
|---|
| 895 |  | 
|---|
| 896 | @cindex configure.in, scanning | 
|---|
| 897 | @cindex Scanning configure.in | 
|---|
| 898 |  | 
|---|
| 899 | Automake scans the package's @file{configure.in} to determine certain | 
|---|
| 900 | information about the package.  Some @code{autoconf} macros are required | 
|---|
| 901 | and some variables must be defined in @file{configure.in}.  Automake | 
|---|
| 902 | will also use information from @file{configure.in} to further tailor its | 
|---|
| 903 | output. | 
|---|
| 904 |  | 
|---|
| 905 | Automake also supplies some Autoconf macros to make the maintenance | 
|---|
| 906 | easier.  These macros can automatically be put into your | 
|---|
| 907 | @file{aclocal.m4} using the @code{aclocal} program. | 
|---|
| 908 |  | 
|---|
| 909 | @menu | 
|---|
| 910 | * Requirements::                Configuration requirements | 
|---|
| 911 | * Optional::                    Other things Automake recognizes | 
|---|
| 912 | * Invoking aclocal::            Auto-generating aclocal.m4 | 
|---|
| 913 | * Macros::                      Autoconf macros supplied with Automake | 
|---|
| 914 | * Extending aclocal::           Writing your own aclocal macros | 
|---|
| 915 | @end menu | 
|---|
| 916 |  | 
|---|
| 917 |  | 
|---|
| 918 | @node Requirements, Optional, configure, configure | 
|---|
| 919 | @section Configuration requirements | 
|---|
| 920 |  | 
|---|
| 921 | @cindex Automake requirements | 
|---|
| 922 | @cindex Requirements of Automake | 
|---|
| 923 |  | 
|---|
| 924 | The simplest way to meet the basic Automake requirements is to use the | 
|---|
| 925 | macro @code{AM_INIT_AUTOMAKE} (@pxref{Macros}).  But if you prefer, you | 
|---|
| 926 | can do the required steps by hand: | 
|---|
| 927 | @cvindex AM_INIT_AUTOMAKE | 
|---|
| 928 |  | 
|---|
| 929 | @itemize @bullet | 
|---|
| 930 | @item | 
|---|
| 931 | Define the variables @code{PACKAGE} and @code{VERSION} with | 
|---|
| 932 | @code{AC_SUBST}. | 
|---|
| 933 | @cvindex PACKAGE | 
|---|
| 934 | @cvindex VERSION | 
|---|
| 935 | @code{PACKAGE} should be the name of the package as it appears when | 
|---|
| 936 | bundled for distribution.  For instance, Automake defines @code{PACKAGE} | 
|---|
| 937 | to be @samp{automake}.  @code{VERSION} should be the version number of | 
|---|
| 938 | the release that is being developed.  We recommend that you make | 
|---|
| 939 | @file{configure.in} the only place in your package where the version | 
|---|
| 940 | number is defined; this makes releases simpler. | 
|---|
| 941 |  | 
|---|
| 942 | Automake doesn't do any interpretation of @code{PACKAGE} or | 
|---|
| 943 | @code{VERSION}, except in @samp{Gnits} mode (@pxref{Gnits}). | 
|---|
| 944 |  | 
|---|
| 945 | @item | 
|---|
| 946 | Use the macro @code{AC_ARG_PROGRAM} if a program or script is installed. | 
|---|
| 947 | @xref{Transforming Names, , Transforming Program Names When Installing, | 
|---|
| 948 | autoconf, The Autoconf}. | 
|---|
| 949 | @cvindex AC_ARG_PROGRAM | 
|---|
| 950 |  | 
|---|
| 951 | @item | 
|---|
| 952 | Use @code{AC_PROG_MAKE_SET} if the package is not flat.  @xref{Output, , | 
|---|
| 953 | Creating Output Files, autoconf, The Autoconf Manual}. | 
|---|
| 954 | @cvindex AC_PROG_MAKE_SET | 
|---|
| 955 |  | 
|---|
| 956 | @item | 
|---|
| 957 | Use @code{AM_SANITY_CHECK} to make sure the build environment is sane. | 
|---|
| 958 |  | 
|---|
| 959 | @item | 
|---|
| 960 | Call @code{AC_PROG_INSTALL} | 
|---|
| 961 | (@pxref{Particular Programs, , Particular Program Checks, autoconf, The | 
|---|
| 962 | Autoconf Manual}). | 
|---|
| 963 | @cvindex AC_PROG_INSTALL | 
|---|
| 964 |  | 
|---|
| 965 | @item | 
|---|
| 966 | Use @code{AM_MISSING_PROG} to see whether the programs @code{aclocal}, | 
|---|
| 967 | @code{autoconf}, @code{automake}, @code{autoheader}, and @code{makeinfo} | 
|---|
| 968 | are in the build environment.  Here is how this is done: | 
|---|
| 969 | @example | 
|---|
| 970 | missing_dir=`cd $ac_aux_dir && pwd` | 
|---|
| 971 | AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) | 
|---|
| 972 | AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) | 
|---|
| 973 | AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) | 
|---|
| 974 | AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) | 
|---|
| 975 | AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) | 
|---|
| 976 | @end example | 
|---|
| 977 | @end itemize | 
|---|
| 978 |  | 
|---|
| 979 |  | 
|---|
| 980 | Here are the other macros which Automake requires but which are not run | 
|---|
| 981 | by @code{AM_INIT_AUTOMAKE}: | 
|---|
| 982 |  | 
|---|
| 983 | @cindex AC_OUTPUT, scanning | 
|---|
| 984 |  | 
|---|
| 985 | @table @code | 
|---|
| 986 | @item AC_OUTPUT | 
|---|
| 987 | Automake uses this to determine which files to create (@pxref{Output, , | 
|---|
| 988 | Creating Output Files, autoconf, The Autoconf Manual}).  Listed files | 
|---|
| 989 | named @code{Makefile} are treated as @file{Makefile}s.  Other listed | 
|---|
| 990 | files are treated differently.  Currently the only difference is that a | 
|---|
| 991 | @file{Makefile} is removed by @code{make distclean}, while other files | 
|---|
| 992 | are removed by @code{make clean}. | 
|---|
| 993 | @c FIXME: this is in violation of standards! | 
|---|
| 994 | @cvindex AC_OUTPUT | 
|---|
| 995 | @end table | 
|---|
| 996 |  | 
|---|
| 997 |  | 
|---|
| 998 | @node Optional, Invoking aclocal, Requirements, configure | 
|---|
| 999 | @section Other things Automake recognizes | 
|---|
| 1000 |  | 
|---|
| 1001 | @cindex Macros Automake recognizes | 
|---|
| 1002 | @cindex Recognized macros by Automake | 
|---|
| 1003 |  | 
|---|
| 1004 | Automake will also recognize the use of certain macros and tailor the | 
|---|
| 1005 | generated @file{Makefile.in} appropriately.  Currently recognized macros | 
|---|
| 1006 | and their effects are: | 
|---|
| 1007 |  | 
|---|
| 1008 | @table @code | 
|---|
| 1009 | @item AC_CONFIG_HEADER | 
|---|
| 1010 | Automake requires the use of @code{AM_CONFIG_HEADER}, which is similar | 
|---|
| 1011 | to @code{AC_CONFIG_HEADER} (@pxref{Configuration Headers, , | 
|---|
| 1012 | Configuration Header Files, autoconf, The Autoconf Manual}), but does | 
|---|
| 1013 | some useful Automake-specific work. | 
|---|
| 1014 | @cvindex AC_CONFIG_HEADER | 
|---|
| 1015 |  | 
|---|
| 1016 | @item AC_CONFIG_AUX_DIR | 
|---|
| 1017 | Automake will look for various helper scripts, such as | 
|---|
| 1018 | @file{mkinstalldirs}, in the directory named in this macro invocation. | 
|---|
| 1019 | If not seen, the scripts are looked for in their @samp{standard} | 
|---|
| 1020 | locations (either the top source directory, or in the source directory | 
|---|
| 1021 | corresponding to the current @file{Makefile.am}, whichever is | 
|---|
| 1022 | appropriate).  @xref{Input, , Finding `configure' Input, autoconf, The | 
|---|
| 1023 | Autoconf Manual}. | 
|---|
| 1024 | @cvindex AC_CONFIG_AUX_DIR | 
|---|
| 1025 | FIXME: give complete list of things looked for in this directory | 
|---|
| 1026 |  | 
|---|
| 1027 | @item AC_PATH_XTRA | 
|---|
| 1028 | Automake will insert definitions for the variables defined by | 
|---|
| 1029 | @code{AC_PATH_XTRA} into each @file{Makefile.in} that builds a C program | 
|---|
| 1030 | or library.  @xref{System Services, , System Services, autoconf, The | 
|---|
| 1031 | Autoconf Manual}. | 
|---|
| 1032 | @cvindex AC_PATH_XTRA | 
|---|
| 1033 |  | 
|---|
| 1034 | @item AC_CANONICAL_HOST | 
|---|
| 1035 | @itemx AC_CHECK_TOOL | 
|---|
| 1036 | Automake will ensure that @file{config.guess} and @file{config.sub} | 
|---|
| 1037 | exist.  Also, the @file{Makefile} variables @samp{host_alias} and | 
|---|
| 1038 | @samp{host_triplet} are introduced.  See both @ref{Canonicalizing, , | 
|---|
| 1039 | Getting the Canonical System Type, autoconf, The Autoconf Manual}, and | 
|---|
| 1040 | @ref{Generic Programs, , Generic Program Checks, autoconf, The Autoconf | 
|---|
| 1041 | Manual}. | 
|---|
| 1042 | @c fixme xref autoconf docs. | 
|---|
| 1043 | @cvindex AC_CANONICAL_HOST | 
|---|
| 1044 | @cvindex AC_CHECK_TOOL | 
|---|
| 1045 | @vindex host_alias | 
|---|
| 1046 | @vindex host_triplet | 
|---|
| 1047 |  | 
|---|
| 1048 | @item AC_CANONICAL_SYSTEM | 
|---|
| 1049 | This is similar to @code{AC_CANONICAL_HOST}, but also defines the | 
|---|
| 1050 | @file{Makefile} variables @samp{build_alias} and @samp{target_alias}. | 
|---|
| 1051 | @xref{Canonicalizing, , Getting the Canonical System Type, autoconf, The | 
|---|
| 1052 | Autoconf Manual}. | 
|---|
| 1053 | @cvindex AC_CANONICAL_SYSTEM | 
|---|
| 1054 | @vindex build_alias | 
|---|
| 1055 | @vindex target_alias | 
|---|
| 1056 |  | 
|---|
| 1057 | @item AC_FUNC_ALLOCA | 
|---|
| 1058 | @itemx AC_FUNC_GETLOADAVG | 
|---|
| 1059 | @itemx AC_FUNC_MEMCMP | 
|---|
| 1060 | @itemx AC_STRUCT_ST_BLOCKS | 
|---|
| 1061 | @itemx AC_FUNC_FNMATCH | 
|---|
| 1062 | @itemx AM_FUNC_STRTOD | 
|---|
| 1063 | @itemx AC_REPLACE_FUNCS | 
|---|
| 1064 | @itemx AC_REPLACE_GNU_GETOPT | 
|---|
| 1065 | @itemx AM_WITH_REGEX | 
|---|
| 1066 | Automake will ensure that the appropriate dependencies are generated for | 
|---|
| 1067 | the objects corresponding to these macros.  Also, Automake will verify | 
|---|
| 1068 | that the appropriate source files are part of the distribution.  Note | 
|---|
| 1069 | that Automake does not come with any of the C sources required to use | 
|---|
| 1070 | these macros, so @code{automake -a} will not install the sources. | 
|---|
| 1071 | @xref{A Library}, for more information.  Also, see @ref{Particular | 
|---|
| 1072 | Functions, , Particular Function Checks, autoconf, The Autoconf Manual}. | 
|---|
| 1073 | @cvindex AC_FUNC_ALLOCA | 
|---|
| 1074 | @cvindex AC_FUNC_GETLOADAVG | 
|---|
| 1075 | @cvindex AC_FUNC_MEMCMP | 
|---|
| 1076 | @cvindex AC_STRUCT_ST_BLOCKS | 
|---|
| 1077 | @cvindex AC_FUNC_FNMATCH | 
|---|
| 1078 | @cvindex AC_FUNC_FNMATCH | 
|---|
| 1079 | @cvindex AC_REPLACE_FUNCS | 
|---|
| 1080 | @cvindex AC_REPLACE_GNU_GETOPT | 
|---|
| 1081 | @cvindex AM_FUNC_STRTOD | 
|---|
| 1082 | @cvindex AM_WITH_REGEX | 
|---|
| 1083 |  | 
|---|
| 1084 | @item LIBOBJS | 
|---|
| 1085 | Automake will detect statements which put @file{.o} files into | 
|---|
| 1086 | @code{LIBOBJS}, and will treat these additional files as if they were | 
|---|
| 1087 | discovered via @code{AC_REPLACE_FUNCS}.  @xref{Generic Functions, , | 
|---|
| 1088 | Generic Function Checks, autoconf, The Autoconf Manual}. | 
|---|
| 1089 | @cvindex LIBOBJS | 
|---|
| 1090 |  | 
|---|
| 1091 | @item AC_PROG_RANLIB | 
|---|
| 1092 | This is required if any libraries are built in the package. | 
|---|
| 1093 | @xref{Particular Programs, , Particular Program Checks, autoconf, The | 
|---|
| 1094 | Autoconf Manual}. | 
|---|
| 1095 | @cvindex AC_PROG_RANLIB | 
|---|
| 1096 |  | 
|---|
| 1097 | @item AC_PROG_CXX | 
|---|
| 1098 | This is required if any C++ source is included.  @xref{Particular | 
|---|
| 1099 | Programs, , Particular Program Checks, autoconf, The Autoconf Manual}. | 
|---|
| 1100 | @cvindex AC_PROG_CXX | 
|---|
| 1101 |  | 
|---|
| 1102 | @item AC_PROG_F77 | 
|---|
| 1103 | This is required if any Fortran 77 source is included.  This macro is | 
|---|
| 1104 | distributed with Autoconf version 2.13 and later.  @xref{Particular | 
|---|
| 1105 | Programs, , Particular Program Checks, autoconf, The Autoconf Manual}. | 
|---|
| 1106 | @cvindex AC_PROG_F77 | 
|---|
| 1107 |  | 
|---|
| 1108 | @item AC_F77_LIBRARY_LDFLAGS | 
|---|
| 1109 | This is required for programs and shared libraries that are a mixture of | 
|---|
| 1110 | languages that include Fortran 77 (@pxref{Mixing Fortran 77 With C and | 
|---|
| 1111 | C++}).  @xref{Macros, , Autoconf macros supplied with Automake}. | 
|---|
| 1112 | @cvindex AC_F77_LIBRARY_LDFLAGS | 
|---|
| 1113 |  | 
|---|
| 1114 | @item AM_PROG_LIBTOOL | 
|---|
| 1115 | Automake will turn on processing for @code{libtool} (@pxref{Top, , | 
|---|
| 1116 | Introduction, libtool, The Libtool Manual}). | 
|---|
| 1117 | @cvindex AM_PROG_LIBTOOL | 
|---|
| 1118 |  | 
|---|
| 1119 | @item AC_PROG_YACC | 
|---|
| 1120 | If a Yacc source file is seen, then you must either use this macro or | 
|---|
| 1121 | define the variable @samp{YACC} in @file{configure.in}.  The former is | 
|---|
| 1122 | preferred (@pxref{Particular Programs, , Particular Program Checks, | 
|---|
| 1123 | autoconf, The Autoconf Manual}). | 
|---|
| 1124 | @cvindex AC_PROG_YACC | 
|---|
| 1125 | @cvindex YACC | 
|---|
| 1126 |  | 
|---|
| 1127 | @item AC_DECL_YYTEXT | 
|---|
| 1128 | This macro is required if there is Lex source in the package. | 
|---|
| 1129 | @xref{Particular Programs, , Particular Program Checks, autoconf, The | 
|---|
| 1130 | Autoconf Manual}. | 
|---|
| 1131 | @cvindex AC_DECL_YYTEXT | 
|---|
| 1132 |  | 
|---|
| 1133 | @item AC_PROG_LEX | 
|---|
| 1134 | If a Lex source file is seen, then this macro must be used. | 
|---|
| 1135 | @xref{Particular Programs, , Particular Program Checks, autoconf, The | 
|---|
| 1136 | Autoconf Manual}. | 
|---|
| 1137 | @cvindex AC_PROG_LEX | 
|---|
| 1138 |  | 
|---|
| 1139 | @item ALL_LINGUAS | 
|---|
| 1140 | If Automake sees that this variable is set in @file{configure.in}, it | 
|---|
| 1141 | will check the @file{po} directory to ensure that all the named | 
|---|
| 1142 | @samp{.po} files exist, and that all the @samp{.po} files that exist are | 
|---|
| 1143 | named. | 
|---|
| 1144 | @cvindex ALL_LINGUAS | 
|---|
| 1145 |  | 
|---|
| 1146 | @item AM_C_PROTOTYPES | 
|---|
| 1147 | This is required when using automatic de-ANSI-fication; see @ref{ANSI}. | 
|---|
| 1148 | @cvindex AM_C_PROTOTYPES | 
|---|
| 1149 |  | 
|---|
| 1150 | @item AM_GNU_GETTEXT | 
|---|
| 1151 | This macro is required for packages which use GNU gettext | 
|---|
| 1152 | (@pxref{gettext}).  It is distributed with gettext.  If Automake sees | 
|---|
| 1153 | this macro it ensures that the package meets some of gettext's | 
|---|
| 1154 | requirements. | 
|---|
| 1155 | @cvindex AM_GNU_GETTEXT | 
|---|
| 1156 |  | 
|---|
| 1157 | @item AM_MAINTAINER_MODE | 
|---|
| 1158 | @opindex --enable-maintainer-mode | 
|---|
| 1159 | This macro adds a @samp{--enable-maintainer-mode} option to | 
|---|
| 1160 | @code{configure}.  If this is used, @code{automake} will cause | 
|---|
| 1161 | @samp{maintainer-only} rules to be turned off by default in the | 
|---|
| 1162 | generated @file{Makefile.in}s.  This macro is disallowed in @samp{Gnits} | 
|---|
| 1163 | mode (@pxref{Gnits}).  This macro defines the @samp{MAINTAINER_MODE} | 
|---|
| 1164 | conditional, which you can use in your own @file{Makefile.am}. | 
|---|
| 1165 | @cvindex AM_MAINTAINER_MODE | 
|---|
| 1166 |  | 
|---|
| 1167 | @item AC_SUBST | 
|---|
| 1168 | @itemx AC_CHECK_TOOL | 
|---|
| 1169 | @itemx AC_CHECK_PROG | 
|---|
| 1170 | @itemx AC_CHECK_PROGS | 
|---|
| 1171 | @itemx AC_PATH_PROG | 
|---|
| 1172 | @itemx AC_PATH_PROGS | 
|---|
| 1173 | For each of these macros, the first argument is automatically defined as | 
|---|
| 1174 | a variable in each generated @file{Makefile.in}.  @xref{Setting Output | 
|---|
| 1175 | Variables, , Setting Output Variables, autoconf, The Autoconf Manual}, | 
|---|
| 1176 | and @ref{Generic Programs, , Generic Program Checks, autoconf, The | 
|---|
| 1177 | Autoconf Manual}. | 
|---|
| 1178 | @cvindex AC_SUBST | 
|---|
| 1179 | @cvindex AC_CHECK_TOOL | 
|---|
| 1180 | @cvindex AC_CHECK_PROG | 
|---|
| 1181 | @cvindex AC_CHECK_PROGS | 
|---|
| 1182 | @cvindex AC_PATH_PROG | 
|---|
| 1183 | @cvindex AC_PATH_PROGS | 
|---|
| 1184 |  | 
|---|
| 1185 | @end table | 
|---|
| 1186 |  | 
|---|
| 1187 |  | 
|---|
| 1188 | @node Invoking aclocal, Macros, Optional, configure | 
|---|
| 1189 | @section Auto-generating aclocal.m4 | 
|---|
| 1190 |  | 
|---|
| 1191 | @cindex Invoking aclocal | 
|---|
| 1192 | @cindex aclocal, Invoking | 
|---|
| 1193 |  | 
|---|
| 1194 | Automake includes a number of Autoconf macros which can be used in your | 
|---|
| 1195 | package; some of them are actually required by Automake in certain | 
|---|
| 1196 | situations.  These macros must be defined in your @file{aclocal.m4}; | 
|---|
| 1197 | otherwise they will not be seen by @code{autoconf}. | 
|---|
| 1198 |  | 
|---|
| 1199 | The @code{aclocal} program will automatically generate @file{aclocal.m4} | 
|---|
| 1200 | files based on the contents of @file{configure.in}.  This provides a | 
|---|
| 1201 | convenient way to get Automake-provided macros, without having to | 
|---|
| 1202 | search around.  Also, the @code{aclocal} mechanism is extensible for use | 
|---|
| 1203 | by other packages. | 
|---|
| 1204 |  | 
|---|
| 1205 | At startup, @code{aclocal} scans all the @file{.m4} files it can find, | 
|---|
| 1206 | looking for macro definitions.  Then it scans @file{configure.in}.  Any | 
|---|
| 1207 | mention of one of the macros found in the first step causes that macro, | 
|---|
| 1208 | and any macros it in turn requires, to be put into @file{aclocal.m4}. | 
|---|
| 1209 |  | 
|---|
| 1210 | The contents of @file{acinclude.m4}, if it exists, are also | 
|---|
| 1211 | automatically included in @file{aclocal.m4}.  This is useful for | 
|---|
| 1212 | incorporating local macros into @file{configure}. | 
|---|
| 1213 |  | 
|---|
| 1214 | @code{aclocal} accepts the following options: | 
|---|
| 1215 |  | 
|---|
| 1216 | @table @code | 
|---|
| 1217 | @item --acdir=@var{dir} | 
|---|
| 1218 | @opindex --acdir | 
|---|
| 1219 | Look for the macro files in @var{dir} instead of the installation | 
|---|
| 1220 | directory.  This is typically used for debugging. | 
|---|
| 1221 |  | 
|---|
| 1222 | @item --help | 
|---|
| 1223 | @opindex --help | 
|---|
| 1224 | Print a summary of the command line options and exit. | 
|---|
| 1225 |  | 
|---|
| 1226 | @item -I @var{dir} | 
|---|
| 1227 | @opindex -I | 
|---|
| 1228 | Add the directory @var{dir} to the list of directories searched for | 
|---|
| 1229 | @file{.m4} files. | 
|---|
| 1230 |  | 
|---|
| 1231 | @item --output=@var{file} | 
|---|
| 1232 | @opindex --output | 
|---|
| 1233 | Cause the output to be put into @var{file} instead of @file{aclocal.m4}. | 
|---|
| 1234 |  | 
|---|
| 1235 | @item --print-ac-dir | 
|---|
| 1236 | @opindex --print-ac-dir | 
|---|
| 1237 | Prints the name of the directory which @code{aclocal} will search to | 
|---|
| 1238 | find the @file{.m4} files.  When this option is given, normal processing | 
|---|
| 1239 | is suppressed.  This option can be used by a package to determine where | 
|---|
| 1240 | to install a macro file. | 
|---|
| 1241 |  | 
|---|
| 1242 | @item --verbose | 
|---|
| 1243 | @opindex --verbose | 
|---|
| 1244 | Print the names of the files it examines. | 
|---|
| 1245 |  | 
|---|
| 1246 | @item --version | 
|---|
| 1247 | @opindex --version | 
|---|
| 1248 | Print the version number of Automake and exit. | 
|---|
| 1249 | @end table | 
|---|
| 1250 |  | 
|---|
| 1251 |  | 
|---|
| 1252 | @node Macros, Extending aclocal, Invoking aclocal, configure | 
|---|
| 1253 | @section Autoconf macros supplied with Automake | 
|---|
| 1254 |  | 
|---|
| 1255 | @c consider generating this node automatically from m4 files. | 
|---|
| 1256 |  | 
|---|
| 1257 | @table @code | 
|---|
| 1258 | @item AM_CONFIG_HEADER | 
|---|
| 1259 | Automake will generate rules to automatically regenerate the config | 
|---|
| 1260 | header.  If you do use this macro, you must create the file | 
|---|
| 1261 | @file{stamp-h.in} in your source directory.  It can be empty. | 
|---|
| 1262 | @cvindex AM_CONFIG_HEADER | 
|---|
| 1263 |  | 
|---|
| 1264 | @item AM_ENABLE_MULTILIB | 
|---|
| 1265 | This is used when a ``multilib'' library is being built.  A | 
|---|
| 1266 | @dfn{multilib} library is one that is built multiple times, once per | 
|---|
| 1267 | target flag combination.  This is only useful when the library is | 
|---|
| 1268 | intended to be cross-compiled.  The first optional argument is the name | 
|---|
| 1269 | of the @file{Makefile} being generated; it defaults to @samp{Makefile}. | 
|---|
| 1270 | The second option argument is used to find the top source directory; it | 
|---|
| 1271 | defaults to the empty string (generally this should not be used unless | 
|---|
| 1272 | you are familiar with the internals). | 
|---|
| 1273 |  | 
|---|
| 1274 | @item AM_FUNC_STRTOD | 
|---|
| 1275 | If the @code{strtod} function is not available, or does not work | 
|---|
| 1276 | correctly (like the one on SunOS 5.4), add @file{strtod.o} to output | 
|---|
| 1277 | variable @code{LIBOBJS}. | 
|---|
| 1278 | @cvindex AM_FUNC_STRTOD | 
|---|
| 1279 |  | 
|---|
| 1280 | @item AM_FUNC_ERROR_AT_LINE | 
|---|
| 1281 | If the function @code{error_at_line} is not found, then add | 
|---|
| 1282 | @file{error.o} to @code{LIBOBJS}. | 
|---|
| 1283 | @cvindex AM_FUNC_ERROR_AT_LINE | 
|---|
| 1284 |  | 
|---|
| 1285 | @item AM_FUNC_MKTIME | 
|---|
| 1286 | Check for a working @code{mktime} function.  If not found, add | 
|---|
| 1287 | @file{mktime.o} to @samp{LIBOBJS}. | 
|---|
| 1288 | @cvindex AM_FUNC_MKTIME | 
|---|
| 1289 |  | 
|---|
| 1290 | @item AM_FUNC_OBSTACK | 
|---|
| 1291 | Check for the GNU obstacks code; if not found, add @file{obstack.o} to | 
|---|
| 1292 | @samp{LIBOBJS}. | 
|---|
| 1293 | @cvindex AM_FUNC_OBSTACK | 
|---|
| 1294 |  | 
|---|
| 1295 | @item AM_C_PROTOTYPES | 
|---|
| 1296 | Check to see if function prototypes are understood by the compiler.  If | 
|---|
| 1297 | so, define @samp{PROTOTYPES} and set the output variables @samp{U} and | 
|---|
| 1298 | @samp{ANSI2KNR} to the empty string.  Otherwise, set @samp{U} to | 
|---|
| 1299 | @samp{_} and @samp{ANSI2KNR} to @samp{./ansi2knr}.  Automake uses these | 
|---|
| 1300 | values to implement automatic de-ANSI-fication. | 
|---|
| 1301 | @cvindex AM_C_PROTOTYPES | 
|---|
| 1302 |  | 
|---|
| 1303 | @item AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL | 
|---|
| 1304 | If the use of @code{TIOCGWINSZ} requires @file{<sys/ioctl.h>}, then | 
|---|
| 1305 | define @code{GWINSZ_IN_SYS_IOCTL}.  Otherwise @code{TIOCGWINSZ} can be | 
|---|
| 1306 | found in @file{<termios.h>}. | 
|---|
| 1307 | @cvindex AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL | 
|---|
| 1308 |  | 
|---|
| 1309 | @item AM_INIT_AUTOMAKE | 
|---|
| 1310 | Runs many macros that most @file{configure.in}'s need.  This macro has | 
|---|
| 1311 | two required arguments, the package and the version number.  By default | 
|---|
| 1312 | this macro @code{AC_DEFINE}'s @samp{PACKAGE} and @samp{VERSION}.  This | 
|---|
| 1313 | can be avoided by passing in a non-empty third argument. | 
|---|
| 1314 |  | 
|---|
| 1315 | @item AM_PATH_LISPDIR | 
|---|
| 1316 | Searches for the program @code{emacs}, and, if found, sets the output | 
|---|
| 1317 | variable @code{lispdir} to the full path to Emacs' site-lisp directory. | 
|---|
| 1318 | @cvindex AM_PATH_LISPDIR | 
|---|
| 1319 |  | 
|---|
| 1320 | @item AM_PROG_CC_STDC | 
|---|
| 1321 | If the C compiler in not in ANSI C mode by default, try to add an option | 
|---|
| 1322 | to output variable @code{CC} to make it so.  This macro tries various | 
|---|
| 1323 | options that select ANSI C on some system or another.  It considers the | 
|---|
| 1324 | compiler to be in ANSI C mode if it handles function prototypes correctly. | 
|---|
| 1325 |  | 
|---|
| 1326 | If you use this macro, you should check after calling it whether the C | 
|---|
| 1327 | compiler has been set to accept ANSI C; if not, the shell variable | 
|---|
| 1328 | @code{am_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source | 
|---|
| 1329 | code in ANSI C, you can make an un-ANSIfied copy of it by using the | 
|---|
| 1330 | @code{ansi2knr} option (@pxref{ANSI}). | 
|---|
| 1331 |  | 
|---|
| 1332 | @item AM_PROG_LEX | 
|---|
| 1333 | @cindex HP-UX 10, lex problems | 
|---|
| 1334 | @cindex lex problems with HP-UX 10 | 
|---|
| 1335 | Like @code{AC_PROG_LEX} with @code{AC_DECL_YYTEXT} (@pxref{Particular | 
|---|
| 1336 | Programs, , Particular Program Checks, autoconf, The Autoconf Manual}), | 
|---|
| 1337 | but uses the @code{missing} script on systems that do not have | 
|---|
| 1338 | @code{lex}.  @samp{HP-UX 10} is one such system. | 
|---|
| 1339 |  | 
|---|
| 1340 | @item AM_SANITY_CHECK | 
|---|
| 1341 | This checks to make sure that a file created in the build directory is | 
|---|
| 1342 | newer than a file in the source directory.  This can fail on systems | 
|---|
| 1343 | where the clock is set incorrectly.  This macro is automatically run | 
|---|
| 1344 | from @code{AM_INIT_AUTOMAKE}. | 
|---|
| 1345 |  | 
|---|
| 1346 | @item AM_SYS_POSIX_TERMIOS | 
|---|
| 1347 | @cvindex am_cv_sys_posix_termios | 
|---|
| 1348 | @cindex POSIX termios headers | 
|---|
| 1349 | @cindex termios POSIX headers | 
|---|
| 1350 | Check to see if POSIX termios headers and functions are available on the | 
|---|
| 1351 | system.  If so, set the shell variable @code{am_cv_sys_posix_termios} to | 
|---|
| 1352 | @samp{yes}.  If not, set the variable to @samp{no}. | 
|---|
| 1353 |  | 
|---|
| 1354 | @item AM_TYPE_PTRDIFF_T | 
|---|
| 1355 | @cvindex HAVE_PTRDIFF_T | 
|---|
| 1356 | @vindex ptrdiff_t | 
|---|
| 1357 | Define @samp{HAVE_PTRDIFF_T} if the type @samp{ptrdiff_t} is defined in | 
|---|
| 1358 | @file{<stddef.h>}. | 
|---|
| 1359 |  | 
|---|
| 1360 | @item AM_WITH_DMALLOC | 
|---|
| 1361 | @cvindex WITH_DMALLOC | 
|---|
| 1362 | @cindex dmalloc, support for | 
|---|
| 1363 | @opindex --with-dmalloc | 
|---|
| 1364 | Add support for the | 
|---|
| 1365 | @uref{ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz, dmalloc} | 
|---|
| 1366 | package.  If the user configures with @samp{--with-dmalloc}, then define | 
|---|
| 1367 | @code{WITH_DMALLOC} and add @samp{-ldmalloc} to @code{LIBS}. | 
|---|
| 1368 |  | 
|---|
| 1369 | @item AM_WITH_REGEX | 
|---|
| 1370 | @cvindex WITH_REGEX | 
|---|
| 1371 | @opindex --with-regex | 
|---|
| 1372 | @cindex regex package | 
|---|
| 1373 | @cindex rx package | 
|---|
| 1374 | Adds @samp{--with-regex} to the @code{configure} command line.  If | 
|---|
| 1375 | specified (the default), then the @samp{regex} regular expression | 
|---|
| 1376 | library is used, @file{regex.o} is put into @samp{LIBOBJS}, and | 
|---|
| 1377 | @samp{WITH_REGEX} is defined..  If @samp{--without-regex} is given, then | 
|---|
| 1378 | the @samp{rx} regular expression library is used, and @file{rx.o} is put | 
|---|
| 1379 | into @samp{LIBOBJS}. | 
|---|
| 1380 |  | 
|---|
| 1381 | @end table | 
|---|
| 1382 |  | 
|---|
| 1383 |  | 
|---|
| 1384 | @node Extending aclocal,  , Macros, configure | 
|---|
| 1385 | @section Writing your own aclocal macros | 
|---|
| 1386 |  | 
|---|
| 1387 | @cindex aclocal, extending | 
|---|
| 1388 | @cindex Extending aclocal | 
|---|
| 1389 |  | 
|---|
| 1390 | The @code{aclocal} program doesn't have any built-in knowledge of any | 
|---|
| 1391 | macros, so it is easy to extend it with your own macros. | 
|---|
| 1392 |  | 
|---|
| 1393 | This is mostly used for libraries which want to supply their own | 
|---|
| 1394 | Autoconf macros for use by other programs.  For instance the | 
|---|
| 1395 | @code{gettext} library supplies a macro @code{AM_GNU_GETTEXT} which | 
|---|
| 1396 | should be used by any package using @code{gettext}.  When the library is | 
|---|
| 1397 | installed, it installs this macro so that @code{aclocal} will find it. | 
|---|
| 1398 |  | 
|---|
| 1399 | A file of macros should be a series of @code{AC_DEFUN}'s.  The | 
|---|
| 1400 | @code{aclocal} programs also understands @code{AC_REQUIRE}, so it is | 
|---|
| 1401 | safe to put each macro in a separate file.  @xref{Prerequisite Macros, , | 
|---|
| 1402 | , autoconf, The Autoconf Manual}, and @ref{Macro Definitions, , , | 
|---|
| 1403 | autoconf, The Autoconf Manual}. | 
|---|
| 1404 |  | 
|---|
| 1405 | A macro file's name should end in @file{.m4}.  Such files should be | 
|---|
| 1406 | installed in @file{$(datadir)/aclocal}. | 
|---|
| 1407 |  | 
|---|
| 1408 |  | 
|---|
| 1409 | @node Top level, Programs, configure, Top | 
|---|
| 1410 | @chapter The top-level @file{Makefile.am} | 
|---|
| 1411 |  | 
|---|
| 1412 | @cindex SUBDIRS, explained | 
|---|
| 1413 |  | 
|---|
| 1414 | In non-flat packages, the top level @file{Makefile.am} must tell | 
|---|
| 1415 | Automake which subdirectories are to be built.  This is done via the | 
|---|
| 1416 | @code{SUBDIRS} variable. | 
|---|
| 1417 | @vindex SUBDIRS | 
|---|
| 1418 |  | 
|---|
| 1419 | The @code{SUBDIRS} macro holds a list of subdirectories in which | 
|---|
| 1420 | building of various sorts can occur.  Many targets (e.g. @code{all}) in | 
|---|
| 1421 | the generated @file{Makefile} will run both locally and in all specified | 
|---|
| 1422 | subdirectories.  Note that the directories listed in @code{SUBDIRS} are | 
|---|
| 1423 | not required to contain @file{Makefile.am}s; only @file{Makefile}s | 
|---|
| 1424 | (after configuration).  This allows inclusion of libraries from packages | 
|---|
| 1425 | which do not use Automake (such as @code{gettext}).  The directories | 
|---|
| 1426 | mentioned in @code{SUBDIRS} must be direct children of the current | 
|---|
| 1427 | directory.  For instance, you cannot put @samp{src/subdir} into | 
|---|
| 1428 | @code{SUBDIRS}. | 
|---|
| 1429 |  | 
|---|
| 1430 | In a deep package, the top-level @file{Makefile.am} is often very short. | 
|---|
| 1431 | For instance, here is the @file{Makefile.am} from the GNU Hello | 
|---|
| 1432 | distribution: | 
|---|
| 1433 |  | 
|---|
| 1434 | @example | 
|---|
| 1435 | EXTRA_DIST = BUGS ChangeLog.O README-alpha | 
|---|
| 1436 | SUBDIRS = doc intl po src tests | 
|---|
| 1437 | @end example | 
|---|
| 1438 |  | 
|---|
| 1439 | @cindex SUBDIRS, overriding | 
|---|
| 1440 | @cindex Overriding SUBDIRS | 
|---|
| 1441 |  | 
|---|
| 1442 | It is possible to override the @code{SUBDIRS} variable if, like in the | 
|---|
| 1443 | case of GNU @code{Inetutils}, you want to only build a subset of the | 
|---|
| 1444 | entire package.  In your @file{Makefile.am} include: | 
|---|
| 1445 |  | 
|---|
| 1446 | @example | 
|---|
| 1447 | SUBDIRS = @@SUBDIRS@@ | 
|---|
| 1448 | @end example | 
|---|
| 1449 |  | 
|---|
| 1450 | Then in your @file{configure.in} you can specify: | 
|---|
| 1451 |  | 
|---|
| 1452 | @example | 
|---|
| 1453 | SUBDIRS = "src doc lib po" | 
|---|
| 1454 | AC_SUBST(SUBDIRS) | 
|---|
| 1455 | @end example | 
|---|
| 1456 |  | 
|---|
| 1457 | The upshot of this is that Automake is tricked into building the package | 
|---|
| 1458 | to take the subdirs, but doesn't actually bind that list until | 
|---|
| 1459 | @code{configure} is run. | 
|---|
| 1460 |  | 
|---|
| 1461 | Although the @code{SUBDIRS} macro can contain configure substitutions | 
|---|
| 1462 | (e.g. @samp{@@DIRS@@}); Automake itself does not actually examine the | 
|---|
| 1463 | contents of this variable. | 
|---|
| 1464 |  | 
|---|
| 1465 | If @code{SUBDIRS} is defined, then your @file{configure.in} must include | 
|---|
| 1466 | @code{AC_PROG_MAKE_SET}. | 
|---|
| 1467 |  | 
|---|
| 1468 | The use of @code{SUBDIRS} is not restricted to just the top-level | 
|---|
| 1469 | @file{Makefile.am}.  Automake can be used to construct packages of | 
|---|
| 1470 | arbitrary depth. | 
|---|
| 1471 |  | 
|---|
| 1472 | By default, Automake generates @file{Makefiles} which work depth-first | 
|---|
| 1473 | (@samp{postfix}).  However, it is possible to change this ordering.  You | 
|---|
| 1474 | can do this by putting @samp{.} into @code{SUBDIRS}.  For instance, | 
|---|
| 1475 | putting @samp{.}  first will cause a @samp{prefix} ordering of | 
|---|
| 1476 | directories. | 
|---|
| 1477 |  | 
|---|
| 1478 |  | 
|---|
| 1479 | @node Programs, Other objects, Top level, Top | 
|---|
| 1480 | @chapter Building Programs and Libraries | 
|---|
| 1481 |  | 
|---|
| 1482 | A large part of Automake's functionality is dedicated to making it easy | 
|---|
| 1483 | to build programs and libraries. | 
|---|
| 1484 |  | 
|---|
| 1485 | @menu | 
|---|
| 1486 | * A Program::                   Building a program | 
|---|
| 1487 | * A Library::                   Building a library | 
|---|
| 1488 | * LIBOBJS::                     Special handling for LIBOBJS and ALLOCA | 
|---|
| 1489 | * A Shared Library::            Building a Libtool library | 
|---|
| 1490 | * Program variables::           Variables used when building a program | 
|---|
| 1491 | * Yacc and Lex::                Yacc and Lex support | 
|---|
| 1492 | * C++ Support:: | 
|---|
| 1493 | * Fortran 77 Support:: | 
|---|
| 1494 | * Support for Other Languages:: | 
|---|
| 1495 | * ANSI::                        Automatic de-ANSI-fication | 
|---|
| 1496 | * Dependencies::                Automatic dependency tracking | 
|---|
| 1497 | @end menu | 
|---|
| 1498 |  | 
|---|
| 1499 |  | 
|---|
| 1500 | @node A Program, A Library, Programs, Programs | 
|---|
| 1501 | @section Building a program | 
|---|
| 1502 |  | 
|---|
| 1503 | @cindex PROGRAMS, bindir | 
|---|
| 1504 | @vindex bin_PROGRAMS | 
|---|
| 1505 | @vindex sbin_PROGRAMS | 
|---|
| 1506 | @vindex libexec_PROGRAMS | 
|---|
| 1507 | @vindex pkglib_PROGRAMS | 
|---|
| 1508 | @vindex noinst_PROGRAMS | 
|---|
| 1509 |  | 
|---|
| 1510 | In a directory containing source that gets built into a program (as | 
|---|
| 1511 | opposed to a library), the @samp{PROGRAMS} primary is used.  Programs | 
|---|
| 1512 | can be installed in @code{bindir}, @code{sbindir}, @code{libexecdir}, | 
|---|
| 1513 | @code{pkglibdir}, or not at all (@samp{noinst}). | 
|---|
| 1514 |  | 
|---|
| 1515 | For instance: | 
|---|
| 1516 |  | 
|---|
| 1517 | @example | 
|---|
| 1518 | bin_PROGRAMS = hello | 
|---|
| 1519 | @end example | 
|---|
| 1520 |  | 
|---|
| 1521 | In this simple case, the resulting @file{Makefile.in} will contain code | 
|---|
| 1522 | to generate a program named @code{hello}.  The variable | 
|---|
| 1523 | @code{hello_SOURCES} is used to specify which source files get built | 
|---|
| 1524 | into an executable: | 
|---|
| 1525 |  | 
|---|
| 1526 | @example | 
|---|
| 1527 | hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h | 
|---|
| 1528 | @end example | 
|---|
| 1529 |  | 
|---|
| 1530 | This causes each mentioned @samp{.c} file to be compiled into the | 
|---|
| 1531 | corresponding @samp{.o}.  Then all are linked to produce @file{hello}. | 
|---|
| 1532 |  | 
|---|
| 1533 | @cindex _SOURCES primary, defined | 
|---|
| 1534 | @cindex SOURCES primary, defined | 
|---|
| 1535 | @cindex Primary variable, SOURCES | 
|---|
| 1536 |  | 
|---|
| 1537 | If @samp{@var{prog}_SOURCES} is needed, but not specified, then it | 
|---|
| 1538 | defaults to the single file @file{prog.c}. | 
|---|
| 1539 | @vindex _SOURCES | 
|---|
| 1540 | @vindex SOURCES | 
|---|
| 1541 |  | 
|---|
| 1542 | Multiple programs can be built in a single directory.  Multiple programs | 
|---|
| 1543 | can share a single source file, which must be listed in each | 
|---|
| 1544 | @samp{_SOURCES} definition. | 
|---|
| 1545 |  | 
|---|
| 1546 | @cindex Header files in _SOURCES | 
|---|
| 1547 | @cindex _SOURCES and header files | 
|---|
| 1548 |  | 
|---|
| 1549 | Header files listed in a @samp{_SOURCES} definition will be included in | 
|---|
| 1550 | the distribution but otherwise ignored.  In case it isn't obvious, you | 
|---|
| 1551 | should not include the header file generated by @file{configure} in an | 
|---|
| 1552 | @samp{_SOURCES} variable; this file should not be distributed.  Lex | 
|---|
| 1553 | (@samp{.l}) and Yacc (@samp{.y}) files can also be listed; see @ref{Yacc | 
|---|
| 1554 | and Lex}. | 
|---|
| 1555 |  | 
|---|
| 1556 | @cindex EXTRA_prog_SOURCES, defined | 
|---|
| 1557 |  | 
|---|
| 1558 | Automake must know all the source files that could possibly go into a | 
|---|
| 1559 | program, even if not all the files are built in every circumstance. | 
|---|
| 1560 | Any files which are only conditionally built should be listed in the | 
|---|
| 1561 | appropriate @samp{EXTRA_} variable.  For instance, if | 
|---|
| 1562 | @file{hello-linux.c} were conditionally included in @code{hello}, the | 
|---|
| 1563 | @file{Makefile.am} would contain: | 
|---|
| 1564 |  | 
|---|
| 1565 | @example | 
|---|
| 1566 | EXTRA_hello_SOURCES = hello-linux.c | 
|---|
| 1567 | @end example | 
|---|
| 1568 |  | 
|---|
| 1569 | Similarly, sometimes it is useful to determine the programs that are to | 
|---|
| 1570 | be built at configure time.  For instance, GNU @code{cpio} only builds | 
|---|
| 1571 | @code{mt} and @code{rmt} under special circumstances. | 
|---|
| 1572 |  | 
|---|
| 1573 | @cindex EXTRA_PROGRAMS, defined | 
|---|
| 1574 |  | 
|---|
| 1575 | In this case, you must notify Automake of all the programs that can | 
|---|
| 1576 | possibly be built, but at the same time cause the generated | 
|---|
| 1577 | @file{Makefile.in} to use the programs specified by @code{configure}. | 
|---|
| 1578 | This is done by having @code{configure} substitute values into each | 
|---|
| 1579 | @samp{_PROGRAMS} definition, while listing all optionally built programs | 
|---|
| 1580 | in @code{EXTRA_PROGRAMS}. | 
|---|
| 1581 | @vindex EXTRA_PROGRAMS | 
|---|
| 1582 |  | 
|---|
| 1583 | If you need to link against libraries that are not found by | 
|---|
| 1584 | @code{configure}, you can use @code{LDADD} to do so.  This variable | 
|---|
| 1585 | actually can be used to add any options to the linker command line. | 
|---|
| 1586 | @vindex LDADD | 
|---|
| 1587 |  | 
|---|
| 1588 | @cindex prog_LDADD, defined | 
|---|
| 1589 |  | 
|---|
| 1590 | Sometimes, multiple programs are built in one directory but do not share | 
|---|
| 1591 | the same link-time requirements.  In this case, you can use the | 
|---|
| 1592 | @samp{@var{prog}_LDADD} variable (where @var{prog} is the name of the | 
|---|
| 1593 | program as it appears in some @samp{_PROGRAMS} variable, and usually | 
|---|
| 1594 | written in lowercase) to override the global @code{LDADD}.  If this | 
|---|
| 1595 | variable exists for a given program, then that program is not linked | 
|---|
| 1596 | using @code{LDADD}. | 
|---|
| 1597 | @vindex _LDADD | 
|---|
| 1598 |  | 
|---|
| 1599 | For instance, in GNU cpio, @code{pax}, @code{cpio} and @code{mt} are | 
|---|
| 1600 | linked against the library @file{libcpio.a}.  However, @code{rmt} is | 
|---|
| 1601 | built in the same directory, and has no such link requirement.  Also, | 
|---|
| 1602 | @code{mt} and @code{rmt} are only built on certain architectures.  Here | 
|---|
| 1603 | is what cpio's @file{src/Makefile.am} looks like (abridged): | 
|---|
| 1604 |  | 
|---|
| 1605 | @example | 
|---|
| 1606 | bin_PROGRAMS = cpio pax @@MT@@ | 
|---|
| 1607 | libexec_PROGRAMS = @@RMT@@ | 
|---|
| 1608 | EXTRA_PROGRAMS = mt rmt | 
|---|
| 1609 |  | 
|---|
| 1610 | LDADD = ../lib/libcpio.a @@INTLLIBS@@ | 
|---|
| 1611 | rmt_LDADD = | 
|---|
| 1612 |  | 
|---|
| 1613 | cpio_SOURCES = @dots{} | 
|---|
| 1614 | pax_SOURCES = @dots{} | 
|---|
| 1615 | mt_SOURCES = @dots{} | 
|---|
| 1616 | rmt_SOURCES = @dots{} | 
|---|
| 1617 | @end example | 
|---|
| 1618 |  | 
|---|
| 1619 | @cindex _LDFLAGS, defined | 
|---|
| 1620 |  | 
|---|
| 1621 | @samp{@var{prog}_LDADD} is inappropriate for passing program-specific | 
|---|
| 1622 | linker flags (except for @samp{-l} and @samp{-L}).  So, use the | 
|---|
| 1623 | @samp{@var{prog}_LDFLAGS} variable for this purpose. | 
|---|
| 1624 | @vindex _LDFLAGS | 
|---|
| 1625 |  | 
|---|
| 1626 | @cindex _DEPENDENCIES, defined | 
|---|
| 1627 |  | 
|---|
| 1628 | It is also occasionally useful to have a program depend on some other | 
|---|
| 1629 | target which is not actually part of that program.  This can be done | 
|---|
| 1630 | using the @samp{@var{prog}_DEPENDENCIES} variable.  Each program depends | 
|---|
| 1631 | on the contents of such a variable, but no further interpretation is | 
|---|
| 1632 | done. | 
|---|
| 1633 |  | 
|---|
| 1634 | If @samp{@var{prog}_DEPENDENCIES} is not supplied, it is computed by | 
|---|
| 1635 | Automake.  The automatically-assigned value is the contents of | 
|---|
| 1636 | @samp{@var{prog}_LDADD}, with most configure substitutions, @samp{-l}, | 
|---|
| 1637 | and @samp{-L} options removed.  The configure substitutions that are | 
|---|
| 1638 | left in are only @samp{@@LIBOBJS@@} and @samp{@@ALLOCA@@}; these are | 
|---|
| 1639 | left because it is known that they will not cause an invalid value for | 
|---|
| 1640 | @samp{@var{prog}_DEPENDENCIES} to be generated. | 
|---|
| 1641 |  | 
|---|
| 1642 |  | 
|---|
| 1643 | @node A Library, LIBOBJS, A Program, Programs | 
|---|
| 1644 | @section Building a library | 
|---|
| 1645 |  | 
|---|
| 1646 | @cindex _LIBRARIES primary, defined | 
|---|
| 1647 | @cindex LIBRARIES primary, defined | 
|---|
| 1648 | @cindex Primary variable, LIBRARIES | 
|---|
| 1649 |  | 
|---|
| 1650 | @vindex lib_LIBRARIES | 
|---|
| 1651 | @vindex pkglib_LIBRARIES | 
|---|
| 1652 | @vindex noinst_LIBRARIES | 
|---|
| 1653 |  | 
|---|
| 1654 | Building a library is much like building a program.  In this case, the | 
|---|
| 1655 | name of the primary is @samp{LIBRARIES}.  Libraries can be installed in | 
|---|
| 1656 | @code{libdir} or @code{pkglibdir}. | 
|---|
| 1657 |  | 
|---|
| 1658 | @xref{A Shared Library}, for information on how to build shared | 
|---|
| 1659 | libraries using Libtool and the @samp{LTLIBRARIES} primary. | 
|---|
| 1660 |  | 
|---|
| 1661 | Each @samp{_LIBRARIES} variable is a list of the libraries to be built. | 
|---|
| 1662 | For instance to create a library named @file{libcpio.a}, but not install | 
|---|
| 1663 | it, you would write: | 
|---|
| 1664 |  | 
|---|
| 1665 | @example | 
|---|
| 1666 | noinst_LIBRARIES = libcpio.a | 
|---|
| 1667 | @end example | 
|---|
| 1668 |  | 
|---|
| 1669 | The sources that go into a library are determined exactly as they are | 
|---|
| 1670 | for programs, via the @samp{_SOURCES} variables.  Note that the library | 
|---|
| 1671 | name is canonicalized (@pxref{Canonicalization}), so the @samp{_SOURCES} | 
|---|
| 1672 | variable corresponding to @file{liblob.a} is @samp{liblob_a_SOURCES}, | 
|---|
| 1673 | not @samp{liblob.a_SOURCES}. | 
|---|
| 1674 |  | 
|---|
| 1675 | @cindex _LIBADD primary, defined | 
|---|
| 1676 | @cindex LIBADD primary, defined | 
|---|
| 1677 | @cindex Primary variable, LIBADD | 
|---|
| 1678 |  | 
|---|
| 1679 | Extra objects can be added to a library using the | 
|---|
| 1680 | @samp{@var{library}_LIBADD} variable.  This should be used for objects | 
|---|
| 1681 | determined by @code{configure}.  Again from @code{cpio}: | 
|---|
| 1682 | @vindex _LIBADD | 
|---|
| 1683 | @vindex LIBADD | 
|---|
| 1684 |  | 
|---|
| 1685 | @example | 
|---|
| 1686 | libcpio_a_LIBADD = @@LIBOBJS@@ @@ALLOCA@@ | 
|---|
| 1687 | @end example | 
|---|
| 1688 |  | 
|---|
| 1689 |  | 
|---|
| 1690 | @node LIBOBJS, A Shared Library, A Library, Programs | 
|---|
| 1691 | @section Special handling for LIBOBJS and ALLOCA | 
|---|
| 1692 |  | 
|---|
| 1693 | @cindex @@LIBOBJS@@, special handling | 
|---|
| 1694 | @cindex @@ALLOCA@@, special handling | 
|---|
| 1695 |  | 
|---|
| 1696 | Automake explicitly recognizes the use of @code{@@LIBOBJS@@} and | 
|---|
| 1697 | @code{@@ALLOCA@@}, and uses this information, plus the list of | 
|---|
| 1698 | @code{LIBOBJS} files derived from @file{configure.in} to automatically | 
|---|
| 1699 | include the appropriate source files in the distribution (@pxref{Dist}). | 
|---|
| 1700 | These source files are also automatically handled in the | 
|---|
| 1701 | dependency-tracking scheme; see @xref{Dependencies}. | 
|---|
| 1702 |  | 
|---|
| 1703 | @code{@@LIBOBJS@@} and @code{@@ALLOCA@@} are specially recognized in any | 
|---|
| 1704 | @samp{_LDADD} or @samp{_LIBADD} variable. | 
|---|
| 1705 |  | 
|---|
| 1706 |  | 
|---|
| 1707 | @node A Shared Library, Program variables, LIBOBJS, Programs | 
|---|
| 1708 | @section Building a Shared Library | 
|---|
| 1709 |  | 
|---|
| 1710 | @cindex Shared libraries, support for | 
|---|
| 1711 |  | 
|---|
| 1712 | Building shared libraries is a relatively complex matter.  For this | 
|---|
| 1713 | reason, GNU Libtool (@pxref{Top, , Introduction, libtool, The | 
|---|
| 1714 | Libtool Manual}) was created to help build shared libraries in a | 
|---|
| 1715 | platform-independent way. | 
|---|
| 1716 |  | 
|---|
| 1717 | @cindex _LTLIBRARIES primary, defined | 
|---|
| 1718 | @cindex LTLIBRARIES primary, defined | 
|---|
| 1719 | @cindex Primary variable, LTLIBRARIES | 
|---|
| 1720 | @cindex Example of shared libraries | 
|---|
| 1721 |  | 
|---|
| 1722 | @cindex suffix .la, defined | 
|---|
| 1723 |  | 
|---|
| 1724 | Automake uses Libtool to build libraries declared with the | 
|---|
| 1725 | @samp{LTLIBRARIES} primary.  Each @samp{_LTLIBRARIES} variable is a list | 
|---|
| 1726 | of shared libraries to build.  For instance, to create a library named | 
|---|
| 1727 | @file{libgettext.a} and its corresponding shared libraries, and install | 
|---|
| 1728 | them in @samp{libdir}, write: | 
|---|
| 1729 |  | 
|---|
| 1730 | @example | 
|---|
| 1731 | lib_LTLIBRARIES = libgettext.la | 
|---|
| 1732 | @end example | 
|---|
| 1733 |  | 
|---|
| 1734 | @vindex lib_LTLIBRARIES | 
|---|
| 1735 | @vindex pkglib_LTLIBRARIES | 
|---|
| 1736 | @vindex noinst_LTLIBRARIES | 
|---|
| 1737 | @vindex check_LTLIBRARIES | 
|---|
| 1738 |  | 
|---|
| 1739 | @cindex check_LTLIBRARIES, not allowed | 
|---|
| 1740 |  | 
|---|
| 1741 | Note that shared libraries @emph{must} be installed, so | 
|---|
| 1742 | @code{check_LTLIBRARIES} is not allowed.  However, | 
|---|
| 1743 | @code{noinst_LTLIBRARIES} is allowed.  This feature should be used for | 
|---|
| 1744 | libtool ``convenience libraries''. | 
|---|
| 1745 |  | 
|---|
| 1746 | @cindex suffix .lo, defined | 
|---|
| 1747 |  | 
|---|
| 1748 | For each library, the @samp{@var{library}_LIBADD} variable contains the | 
|---|
| 1749 | names of extra libtool objects (@file{.lo} files) to add to the shared | 
|---|
| 1750 | library.  The @samp{@var{library}_LDFLAGS} variable contains any | 
|---|
| 1751 | additional libtool flags, such as @samp{-version-info} or | 
|---|
| 1752 | @samp{-static}. | 
|---|
| 1753 |  | 
|---|
| 1754 | @cindex @@LTLIBOBJS@@, special handling | 
|---|
| 1755 |  | 
|---|
| 1756 | Where an ordinary library might include @code{@@LIBOBJS@@}, a libtool | 
|---|
| 1757 | library must use @code{@@LTLIBOBJS@@}.  This is required because the | 
|---|
| 1758 | object files that libtool operates on do not necessarily end in | 
|---|
| 1759 | @file{.o}.  The libtool manual contains more details on this topic. | 
|---|
| 1760 |  | 
|---|
| 1761 | For libraries installed in some directory, Automake will automatically | 
|---|
| 1762 | supply the appropriate @samp{-rpath} option.  However, for libraries | 
|---|
| 1763 | determined at configure time (and thus mentioned in | 
|---|
| 1764 | @code{EXTRA_LTLIBRARIES}), Automake does not know the eventual | 
|---|
| 1765 | installation directory; for such libraries you must add the | 
|---|
| 1766 | @samp{-rpath} option to the appropriate @samp{_LDFLAGS} variable by | 
|---|
| 1767 | hand. | 
|---|
| 1768 |  | 
|---|
| 1769 | @xref{Using Automake, Using Automake with Libtool, The Libtool Manual, | 
|---|
| 1770 | libtool, The Libtool Manual}, for more information. | 
|---|
| 1771 |  | 
|---|
| 1772 |  | 
|---|
| 1773 | @node Program variables, Yacc and Lex, A Shared Library, Programs | 
|---|
| 1774 | @section Variables used when building a program | 
|---|
| 1775 |  | 
|---|
| 1776 | Occasionally it is useful to know which @file{Makefile} variables | 
|---|
| 1777 | Automake uses for compilations; for instance you might need to do your | 
|---|
| 1778 | own compilation in some special cases. | 
|---|
| 1779 |  | 
|---|
| 1780 | Some variables are inherited from Autoconf; these are @code{CC}, | 
|---|
| 1781 | @code{CFLAGS}, @code{CPPFLAGS}, @code{DEFS}, @code{LDFLAGS}, and | 
|---|
| 1782 | @code{LIBS}. | 
|---|
| 1783 | @vindex LDFLAGS | 
|---|
| 1784 |  | 
|---|
| 1785 | There are some additional variables which Automake itself defines: | 
|---|
| 1786 |  | 
|---|
| 1787 | @vtable @code | 
|---|
| 1788 | @item INCLUDES | 
|---|
| 1789 | A list of @samp{-I} options.  This can be set in your @file{Makefile.am} | 
|---|
| 1790 | if you have special directories you want to look in.  Automake already | 
|---|
| 1791 | provides some @samp{-I} options automatically.  In particular it | 
|---|
| 1792 | generates @samp{-I$(srcdir)} and a @samp{-I} pointing to the directory | 
|---|
| 1793 | holding @file{config.h} (if you've used @code{AC_CONFIG_HEADER} or | 
|---|
| 1794 | @code{AM_CONFIG_HEADER}). | 
|---|
| 1795 |  | 
|---|
| 1796 | @code{INCLUDES} can actually be used for other @code{cpp} options | 
|---|
| 1797 | besides @samp{-I}.  For instance, it is sometimes used to pass arbitrary | 
|---|
| 1798 | @samp{-D} options to the compiler. | 
|---|
| 1799 |  | 
|---|
| 1800 | @item COMPILE | 
|---|
| 1801 | This is the command used to actually compile a C source file.  The | 
|---|
| 1802 | filename is appended to form the complete command line. | 
|---|
| 1803 |  | 
|---|
| 1804 | @item LINK | 
|---|
| 1805 | This is the command used to actually link a C program. | 
|---|
| 1806 | @end vtable | 
|---|
| 1807 |  | 
|---|
| 1808 |  | 
|---|
| 1809 | @node Yacc and Lex, C++ Support, Program variables, Programs | 
|---|
| 1810 | @section Yacc and Lex support | 
|---|
| 1811 |  | 
|---|
| 1812 | Automake has somewhat idiosyncratic support for Yacc and Lex. | 
|---|
| 1813 |  | 
|---|
| 1814 | Automake assumes that the @file{.c} file generated by @code{yacc} (or | 
|---|
| 1815 | @code{lex}) should be named using the basename of the input file.  That | 
|---|
| 1816 | is, for a yacc source file @file{foo.y}, Automake will cause the | 
|---|
| 1817 | intermediate file to be named @file{foo.c} (as opposed to | 
|---|
| 1818 | @file{y.tab.c}, which is more traditional). | 
|---|
| 1819 |  | 
|---|
| 1820 | The extension of a yacc source file is used to determine the extension | 
|---|
| 1821 | of the resulting @samp{C} or @samp{C++} file.  Files with the extension | 
|---|
| 1822 | @samp{.y} will be turned into @samp{.c} files; likewise, @samp{.yy} will | 
|---|
| 1823 | become @samp{.cc}; @samp{.y++}, @samp{c++}; and @samp{.yxx}, | 
|---|
| 1824 | @samp{.cxx}. | 
|---|
| 1825 |  | 
|---|
| 1826 | Likewise, lex source files can be used to generate @samp{C} or | 
|---|
| 1827 | @samp{C++}; the extensions @samp{.l}, @samp{.ll}, @samp{.l++}, and | 
|---|
| 1828 | @samp{.lxx} are recognized. | 
|---|
| 1829 |  | 
|---|
| 1830 | You should never explicitly mention the intermediate (@samp{C} or | 
|---|
| 1831 | @samp{C++}) file in any @samp{SOURCES} variable; only list the source | 
|---|
| 1832 | file. | 
|---|
| 1833 |  | 
|---|
| 1834 | The intermediate files generated by @code{yacc} (or @code{lex}) will be | 
|---|
| 1835 | included in any distribution that is made.  That way the user doesn't | 
|---|
| 1836 | need to have @code{yacc} or @code{lex}. | 
|---|
| 1837 |  | 
|---|
| 1838 | If a @code{yacc} source file is seen, then your @file{configure.in} must | 
|---|
| 1839 | define the variable @samp{YACC}.  This is most easily done by invoking | 
|---|
| 1840 | the macro @samp{AC_PROG_YACC} (@pxref{Particular Programs, , Particular | 
|---|
| 1841 | Program Checks, autoconf, The Autoconf Manual}). | 
|---|
| 1842 |  | 
|---|
| 1843 | Similarly, if a @code{lex} source file is seen, then your | 
|---|
| 1844 | @file{configure.in} must define the variable @samp{LEX}.  You can use | 
|---|
| 1845 | @samp{AC_PROG_LEX} to do this (@pxref{Particular Programs, , Particular | 
|---|
| 1846 | Program Checks, autoconf, The Autoconf Manual}).  Automake's @code{lex} | 
|---|
| 1847 | support also requires that you use the @samp{AC_DECL_YYTEXT} | 
|---|
| 1848 | macro---automake needs to know the value of @samp{LEX_OUTPUT_ROOT}. | 
|---|
| 1849 | This is all handled for you if you use the @code{AM_PROG_LEX} macro | 
|---|
| 1850 | (@pxref{Macros}). | 
|---|
| 1851 |  | 
|---|
| 1852 | @cindex ylwrap | 
|---|
| 1853 | @cindex yacc, multiple parsers | 
|---|
| 1854 | @cindex Multiple yacc parsers | 
|---|
| 1855 | @cindex Multiple lex lexers | 
|---|
| 1856 | @cindex lex, multiple lexers | 
|---|
| 1857 |  | 
|---|
| 1858 |  | 
|---|
| 1859 | Automake makes it possible to include multiple @code{yacc} (or | 
|---|
| 1860 | @code{lex}) source files in a single program.  Automake uses a small | 
|---|
| 1861 | program called @code{ylwrap} to run @code{yacc} (or @code{lex}) in a | 
|---|
| 1862 | subdirectory.  This is necessary because yacc's output filename is | 
|---|
| 1863 | fixed, and a parallel make could conceivably invoke more than one | 
|---|
| 1864 | instance of @code{yacc} simultaneously.  The @code{ylwrap} program is | 
|---|
| 1865 | distributed with Automake.  It should appear in the directory specified | 
|---|
| 1866 | by @samp{AC_CONFIG_AUX_DIR} (@pxref{Input, , Finding `configure' Input, | 
|---|
| 1867 | autoconf, The Autoconf Manual}), or the current directory if that macro | 
|---|
| 1868 | is not used in @file{configure.in}. | 
|---|
| 1869 |  | 
|---|
| 1870 | For @code{yacc}, simply managing locking is insufficient.  The output of | 
|---|
| 1871 | @code{yacc} always uses the same symbol names internally, so it isn't | 
|---|
| 1872 | possible to link two @code{yacc} parsers into the same executable. | 
|---|
| 1873 |  | 
|---|
| 1874 | We recommend using the following renaming hack used in @code{gdb}: | 
|---|
| 1875 | @example | 
|---|
| 1876 | #define yymaxdepth c_maxdepth | 
|---|
| 1877 | #define yyparse c_parse | 
|---|
| 1878 | #define yylex   c_lex | 
|---|
| 1879 | #define yyerror c_error | 
|---|
| 1880 | #define yylval  c_lval | 
|---|
| 1881 | #define yychar  c_char | 
|---|
| 1882 | #define yydebug c_debug | 
|---|
| 1883 | #define yypact  c_pact | 
|---|
| 1884 | #define yyr1    c_r1 | 
|---|
| 1885 | #define yyr2    c_r2 | 
|---|
| 1886 | #define yydef   c_def | 
|---|
| 1887 | #define yychk   c_chk | 
|---|
| 1888 | #define yypgo   c_pgo | 
|---|
| 1889 | #define yyact   c_act | 
|---|
| 1890 | #define yyexca  c_exca | 
|---|
| 1891 | #define yyerrflag c_errflag | 
|---|
| 1892 | #define yynerrs c_nerrs | 
|---|
| 1893 | #define yyps    c_ps | 
|---|
| 1894 | #define yypv    c_pv | 
|---|
| 1895 | #define yys     c_s | 
|---|
| 1896 | #define yy_yys  c_yys | 
|---|
| 1897 | #define yystate c_state | 
|---|
| 1898 | #define yytmp   c_tmp | 
|---|
| 1899 | #define yyv     c_v | 
|---|
| 1900 | #define yy_yyv  c_yyv | 
|---|
| 1901 | #define yyval   c_val | 
|---|
| 1902 | #define yylloc  c_lloc | 
|---|
| 1903 | #define yyreds  c_reds | 
|---|
| 1904 | #define yytoks  c_toks | 
|---|
| 1905 | #define yylhs   c_yylhs | 
|---|
| 1906 | #define yylen   c_yylen | 
|---|
| 1907 | #define yydefred c_yydefred | 
|---|
| 1908 | #define yydgoto c_yydgoto | 
|---|
| 1909 | #define yysindex c_yysindex | 
|---|
| 1910 | #define yyrindex c_yyrindex | 
|---|
| 1911 | #define yygindex c_yygindex | 
|---|
| 1912 | #define yytable  c_yytable | 
|---|
| 1913 | #define yycheck  c_yycheck | 
|---|
| 1914 | #define yyname   c_yyname | 
|---|
| 1915 | #define yyrule   c_yyrule | 
|---|
| 1916 | @end example | 
|---|
| 1917 |  | 
|---|
| 1918 | For each define, replace the @samp{c_} prefix with whatever you like. | 
|---|
| 1919 | These defines work for @code{bison}, @code{byacc}, and traditional | 
|---|
| 1920 | @code{yacc}s.  If you find a parser generator that uses a symbol not | 
|---|
| 1921 | covered here, please report the new name so it can be added to the list. | 
|---|
| 1922 |  | 
|---|
| 1923 |  | 
|---|
| 1924 | @node C++ Support, Fortran 77 Support, Yacc and Lex, Programs | 
|---|
| 1925 | @section C++ Support | 
|---|
| 1926 |  | 
|---|
| 1927 | @cindex C++ support | 
|---|
| 1928 | @cindex Support for C++ | 
|---|
| 1929 |  | 
|---|
| 1930 | Automake includes full support for C++. | 
|---|
| 1931 |  | 
|---|
| 1932 | Any package including C++ code must define the output variable | 
|---|
| 1933 | @samp{CXX} in @file{configure.in}; the simplest way to do this is to use | 
|---|
| 1934 | the @code{AC_PROG_CXX} macro (@pxref{Particular Programs, , Particular | 
|---|
| 1935 | Program Checks, autoconf, The Autoconf Manual}). | 
|---|
| 1936 |  | 
|---|
| 1937 | A few additional variables are defined when a C++ source file is seen: | 
|---|
| 1938 |  | 
|---|
| 1939 | @vtable @code | 
|---|
| 1940 | @item CXX | 
|---|
| 1941 | The name of the C++ compiler. | 
|---|
| 1942 |  | 
|---|
| 1943 | @item CXXFLAGS | 
|---|
| 1944 | Any flags to pass to the C++ compiler. | 
|---|
| 1945 |  | 
|---|
| 1946 | @item CXXCOMPILE | 
|---|
| 1947 | The command used to actually compile a C++ source file.  The file name | 
|---|
| 1948 | is appended to form the complete command line. | 
|---|
| 1949 |  | 
|---|
| 1950 | @item CXXLINK | 
|---|
| 1951 | The command used to actually link a C++ program. | 
|---|
| 1952 | @end vtable | 
|---|
| 1953 |  | 
|---|
| 1954 |  | 
|---|
| 1955 | @node Fortran 77 Support, Support for Other Languages, C++ Support, Programs | 
|---|
| 1956 | @comment  node-name,  next,  previous,  up | 
|---|
| 1957 | @section Fortran 77 Support | 
|---|
| 1958 |  | 
|---|
| 1959 | @cindex Fortran 77 support | 
|---|
| 1960 | @cindex Support for Fortran 77 | 
|---|
| 1961 |  | 
|---|
| 1962 | Automake includes full support for Fortran 77. | 
|---|
| 1963 |  | 
|---|
| 1964 | Any package including Fortran 77 code must define the output variable | 
|---|
| 1965 | @samp{F77} in @file{configure.in}; the simplest way to do this is to use | 
|---|
| 1966 | the @code{AC_PROG_F77} macro (@pxref{Particular Programs, , Particular | 
|---|
| 1967 | Program Checks, autoconf, The Autoconf Manual}).  @xref{Fortran 77 and | 
|---|
| 1968 | Autoconf}. | 
|---|
| 1969 |  | 
|---|
| 1970 | A few additional variables are defined when a Fortran 77 source file is | 
|---|
| 1971 | seen: | 
|---|
| 1972 |  | 
|---|
| 1973 | @vtable @code | 
|---|
| 1974 |  | 
|---|
| 1975 | @item F77 | 
|---|
| 1976 | The name of the Fortran 77 compiler. | 
|---|
| 1977 |  | 
|---|
| 1978 | @item FFLAGS | 
|---|
| 1979 | Any flags to pass to the Fortran 77 compiler. | 
|---|
| 1980 |  | 
|---|
| 1981 | @item RFLAGS | 
|---|
| 1982 | Any flags to pass to the Ratfor compiler. | 
|---|
| 1983 |  | 
|---|
| 1984 | @item F77COMPILE | 
|---|
| 1985 | The command used to actually compile a Fortran 77 source file.  The file | 
|---|
| 1986 | name is appended to form the complete command line. | 
|---|
| 1987 |  | 
|---|
| 1988 | @item FLINK | 
|---|
| 1989 | The command used to actually link a pure Fortran 77 program or shared | 
|---|
| 1990 | library. | 
|---|
| 1991 |  | 
|---|
| 1992 | @end vtable | 
|---|
| 1993 |  | 
|---|
| 1994 | Automake can handle preprocessing Fortran 77 and Ratfor source files in | 
|---|
| 1995 | addition to compiling them@footnote{Much, if not most, of the | 
|---|
| 1996 | information in the following sections pertaining to preprocessing | 
|---|
| 1997 | Fortran 77 programs was taken almost verbatim from @ref{Catalogue of | 
|---|
| 1998 | Rules, , Catalogue of Rules, make, The GNU Make Manual}.}.  Automake | 
|---|
| 1999 | also contains some support for creating programs and shared libraries | 
|---|
| 2000 | that are a mixture of Fortran 77 and other languages (@pxref{Mixing | 
|---|
| 2001 | Fortran 77 With C and C++}). | 
|---|
| 2002 |  | 
|---|
| 2003 | These issues are covered in the following sections. | 
|---|
| 2004 |  | 
|---|
| 2005 | @menu | 
|---|
| 2006 | * Preprocessing Fortran 77:: | 
|---|
| 2007 | * Compiling Fortran 77 Files:: | 
|---|
| 2008 | * Mixing Fortran 77 With C and C++:: | 
|---|
| 2009 | * Fortran 77 and Autoconf:: | 
|---|
| 2010 | @end menu | 
|---|
| 2011 |  | 
|---|
| 2012 |  | 
|---|
| 2013 | @node Preprocessing Fortran 77, Compiling Fortran 77 Files, Fortran 77 Support, Fortran 77 Support | 
|---|
| 2014 | @comment  node-name,  next,  previous,  up | 
|---|
| 2015 | @subsection Preprocessing Fortran 77 | 
|---|
| 2016 |  | 
|---|
| 2017 | @cindex Preprocessing Fortran 77 | 
|---|
| 2018 | @cindex Fortran 77, Preprocessing | 
|---|
| 2019 | @cindex Ratfor programs | 
|---|
| 2020 |  | 
|---|
| 2021 | @file{N.f} is made automatically from @file{N.F} or @file{N.r}.  This | 
|---|
| 2022 | rule runs just the preprocessor to convert a preprocessable Fortran 77 | 
|---|
| 2023 | or Ratfor source file into a strict Fortran 77 source file.  The precise | 
|---|
| 2024 | command used is as follows: | 
|---|
| 2025 |  | 
|---|
| 2026 | @table @file | 
|---|
| 2027 |  | 
|---|
| 2028 | @item .F | 
|---|
| 2029 | @code{$(F77) -F $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)} | 
|---|
| 2030 |  | 
|---|
| 2031 | @item .r | 
|---|
| 2032 | @code{$(F77) -F $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)} | 
|---|
| 2033 |  | 
|---|
| 2034 | @end table | 
|---|
| 2035 |  | 
|---|
| 2036 |  | 
|---|
| 2037 | @node Compiling Fortran 77 Files, Mixing Fortran 77 With C and C++, Preprocessing Fortran 77, Fortran 77 Support | 
|---|
| 2038 | @comment  node-name,  next,  previous,  up | 
|---|
| 2039 | @subsection Compiling Fortran 77 Files | 
|---|
| 2040 |  | 
|---|
| 2041 | @file{N.o} is made automatically from @file{N.f}, @file{N.F} or | 
|---|
| 2042 | @file{N.r} by running the Fortran 77 compiler.  The precise command used | 
|---|
| 2043 | is as follows: | 
|---|
| 2044 |  | 
|---|
| 2045 | @table @file | 
|---|
| 2046 |  | 
|---|
| 2047 | @item .f | 
|---|
| 2048 | @code{$(F77) -c $(AM_FFLAGS) $(FFLAGS)} | 
|---|
| 2049 |  | 
|---|
| 2050 | @item .F | 
|---|
| 2051 | @code{$(F77) -c $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)} | 
|---|
| 2052 |  | 
|---|
| 2053 | @item .r | 
|---|
| 2054 | @code{$(F77) -c $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)} | 
|---|
| 2055 |  | 
|---|
| 2056 | @end table | 
|---|
| 2057 |  | 
|---|
| 2058 |  | 
|---|
| 2059 | @node Mixing Fortran 77 With C and C++, Fortran 77 and Autoconf, Compiling Fortran 77 Files, Fortran 77 Support | 
|---|
| 2060 | @comment  node-name,  next,  previous,  up | 
|---|
| 2061 | @subsection Mixing Fortran 77 With C and C++ | 
|---|
| 2062 |  | 
|---|
| 2063 | @cindex Fortran 77, mixing with C and C++ | 
|---|
| 2064 | @cindex Mixing Fortran 77 with C and C++ | 
|---|
| 2065 | @cindex Linking Fortran 77 with C and C++ | 
|---|
| 2066 | @cindex cfortran | 
|---|
| 2067 | @cindex Mixing Fortran 77 with C and/or C++ | 
|---|
| 2068 |  | 
|---|
| 2069 | Automake currently provides @emph{limited} support for creating programs | 
|---|
| 2070 | and shared libraries that are a mixture of Fortran 77 and C and/or C++. | 
|---|
| 2071 | However, there are many other issues related to mixing Fortran 77 with | 
|---|
| 2072 | other languages that are @emph{not} (currently) handled by Automake, but | 
|---|
| 2073 | that are handled by other packages@footnote{For example, | 
|---|
| 2074 | @uref{http://www-zeus.desy.de/~burow/cfortran/, the cfortran package} | 
|---|
| 2075 | addresses all of these inter-language issues, and runs under nearly all | 
|---|
| 2076 | Fortran 77, C and C++ compilers on nearly all platforms.  However, | 
|---|
| 2077 | @code{cfortran} is not yet Free Software, but it will be in the next | 
|---|
| 2078 | major release.}. | 
|---|
| 2079 |  | 
|---|
| 2080 | @page | 
|---|
| 2081 | Automake can help in two ways: | 
|---|
| 2082 |  | 
|---|
| 2083 | @enumerate | 
|---|
| 2084 | @item | 
|---|
| 2085 | Automatic selection of the linker depending on which combinations of | 
|---|
| 2086 | source code. | 
|---|
| 2087 |  | 
|---|
| 2088 | @item | 
|---|
| 2089 | Automatic selection of the appropriate linker flags (e.g. @samp{-L} and | 
|---|
| 2090 | @samp{-l}) to pass to the automatically selected linker in order to link | 
|---|
| 2091 | in the appropriate Fortran 77 intrinsic and run-time libraries. | 
|---|
| 2092 |  | 
|---|
| 2093 | @cindex FLIBS, defined | 
|---|
| 2094 | These extra Fortran 77 linker flags are supplied in the output variable | 
|---|
| 2095 | @code{FLIBS} by the @code{AC_F77_LIBRARY_LDFLAGS} Autoconf macro | 
|---|
| 2096 | supplied with newer versions of Autoconf (Autoconf version 2.13 and | 
|---|
| 2097 | later).  @xref{Fortran 77 Compiler Characteristics, , , autoconf, The | 
|---|
| 2098 | Autoconf}. | 
|---|
| 2099 | @end enumerate | 
|---|
| 2100 |  | 
|---|
| 2101 | If Automake detects that a program or shared library (as mentioned in | 
|---|
| 2102 | some @code{_PROGRAMS} or @code{_LTLIBRARIES} primary) contains source | 
|---|
| 2103 | code that is a mixture of Fortran 77 and C and/or C++, then it requires | 
|---|
| 2104 | that the macro @code{AC_F77_LIBRARY_LDFLAGS} be called in | 
|---|
| 2105 | @file{configure.in}, and that either @code{$(FLIBS)} or @code{@@FLIBS@@} | 
|---|
| 2106 | appear in the appropriate @code{_LDADD} (for programs) or @code{_LIBADD} | 
|---|
| 2107 | (for shared libraries) variables.  It is the responsibility of the | 
|---|
| 2108 | person writing the @file{Makefile.am} to make sure that @code{$(FLIBS)} | 
|---|
| 2109 | or @code{@@FLIBS@@} appears in the appropriate @code{_LDADD} or | 
|---|
| 2110 | @code{_LIBADD} variable. | 
|---|
| 2111 |  | 
|---|
| 2112 | @cindex Mixed language example | 
|---|
| 2113 | @cindex Example, mixed language | 
|---|
| 2114 |  | 
|---|
| 2115 | For example, consider the following @file{Makefile.am}: | 
|---|
| 2116 |  | 
|---|
| 2117 | @example | 
|---|
| 2118 | bin_PROGRAMS = foo | 
|---|
| 2119 | foo_SOURCES  = main.cc foo.f | 
|---|
| 2120 | foo_LDADD    = libfoo.la @@FLIBS@@ | 
|---|
| 2121 |  | 
|---|
| 2122 | pkglib_LTLIBRARIES = libfoo.la | 
|---|
| 2123 | libfoo_la_SOURCES  = bar.f baz.c zardoz.cc | 
|---|
| 2124 | libfoo_la_LIBADD   = $(FLIBS) | 
|---|
| 2125 | @end example | 
|---|
| 2126 |  | 
|---|
| 2127 | In this case, Automake will insist that @code{AC_F77_LIBRARY_LDFLAGS} | 
|---|
| 2128 | is mentioned in @file{configure.in}.  Also, if @code{@@FLIBS@@} hadn't | 
|---|
| 2129 | been mentioned in @code{foo_LDADD} and @code{libfoo_la_LIBADD}, then | 
|---|
| 2130 | Automake would have issued a warning. | 
|---|
| 2131 |  | 
|---|
| 2132 |  | 
|---|
| 2133 | @page | 
|---|
| 2134 | @menu | 
|---|
| 2135 | * How the Linker is Chosen:: | 
|---|
| 2136 | @end menu | 
|---|
| 2137 |  | 
|---|
| 2138 | @node How the Linker is Chosen,  , Mixing Fortran 77 With C and C++, Mixing Fortran 77 With C and C++ | 
|---|
| 2139 | @comment  node-name,  next,  previous,  up | 
|---|
| 2140 | @subsubsection How the Linker is Chosen | 
|---|
| 2141 |  | 
|---|
| 2142 | @cindex Automatic linker selection | 
|---|
| 2143 | @cindex Selecting the linker automatically | 
|---|
| 2144 |  | 
|---|
| 2145 | The following diagram demonstrates under what conditions a particular | 
|---|
| 2146 | linker is chosen by Automake. | 
|---|
| 2147 |  | 
|---|
| 2148 | For example, if Fortran 77, C and C++ source code were to be compiled | 
|---|
| 2149 | into a program, then the C++ linker will be used.  In this case, if the | 
|---|
| 2150 | C or Fortran 77 linkers required any special libraries that weren't | 
|---|
| 2151 | included by the C++ linker, then they must be manually added to an | 
|---|
| 2152 | @code{_LDADD} or @code{_LIBADD} variable by the user writing the | 
|---|
| 2153 | @file{Makefile.am}. | 
|---|
| 2154 |  | 
|---|
| 2155 | @example | 
|---|
| 2156 | \              Linker | 
|---|
| 2157 | source      \ | 
|---|
| 2158 | code        \     C        C++     Fortran | 
|---|
| 2159 | -----------------  +---------+---------+---------+ | 
|---|
| 2160 | |         |         |         | | 
|---|
| 2161 | C                  |    x    |         |         | | 
|---|
| 2162 | |         |         |         | | 
|---|
| 2163 | +---------+---------+---------+ | 
|---|
| 2164 | |         |         |         | | 
|---|
| 2165 | C++            |         |    x    |         | | 
|---|
| 2166 | |         |         |         | | 
|---|
| 2167 | +---------+---------+---------+ | 
|---|
| 2168 | |         |         |         | | 
|---|
| 2169 | Fortran  |         |         |    x    | | 
|---|
| 2170 | |         |         |         | | 
|---|
| 2171 | +---------+---------+---------+ | 
|---|
| 2172 | |         |         |         | | 
|---|
| 2173 | C + C++            |         |    x    |         | | 
|---|
| 2174 | |         |         |         | | 
|---|
| 2175 | +---------+---------+---------+ | 
|---|
| 2176 | |         |         |         | | 
|---|
| 2177 | C +       Fortran  |         |         |    x    | | 
|---|
| 2178 | |         |         |         | | 
|---|
| 2179 | +---------+---------+---------+ | 
|---|
| 2180 | |         |         |         | | 
|---|
| 2181 | C++ + Fortran  |         |    x    |         | | 
|---|
| 2182 | |         |         |         | | 
|---|
| 2183 | +---------+---------+---------+ | 
|---|
| 2184 | |         |         |         | | 
|---|
| 2185 | C + C++ + Fortran  |         |    x    |         | | 
|---|
| 2186 | |         |         |         | | 
|---|
| 2187 | +---------+---------+---------+ | 
|---|
| 2188 | @end example | 
|---|
| 2189 |  | 
|---|
| 2190 |  | 
|---|
| 2191 | @node Fortran 77 and Autoconf,  , Mixing Fortran 77 With C and C++, Fortran 77 Support | 
|---|
| 2192 | @comment  node-name,  next,  previous,  up | 
|---|
| 2193 | @subsection Fortran 77 and Autoconf | 
|---|
| 2194 |  | 
|---|
| 2195 | The current Automake support for Fortran 77 requires a recent enough | 
|---|
| 2196 | version Autoconf that also includes support for Fortran 77.  Full | 
|---|
| 2197 | Fortran 77 support was added to Autoconf 2.13, so you will want to use | 
|---|
| 2198 | that version of Autoconf or later. | 
|---|
| 2199 |  | 
|---|
| 2200 |  | 
|---|
| 2201 | @node Support for Other Languages, ANSI, Fortran 77 Support, Programs | 
|---|
| 2202 | @comment  node-name,  next,  previous,  up | 
|---|
| 2203 | @section Support for Other Languages | 
|---|
| 2204 |  | 
|---|
| 2205 | Automake currently only includes full support for C, C++ (@pxref{C++ | 
|---|
| 2206 | Support})and Fortran 77 (@pxref{Fortran 77 Support}).  There is only | 
|---|
| 2207 | rudimentary support for other languages, support for which will be | 
|---|
| 2208 | improved based on user demand. | 
|---|
| 2209 |  | 
|---|
| 2210 |  | 
|---|
| 2211 | @node ANSI, Dependencies, Support for Other Languages, Programs | 
|---|
| 2212 | @section Automatic de-ANSI-fication | 
|---|
| 2213 |  | 
|---|
| 2214 | @cindex de-ANSI-fication, defined | 
|---|
| 2215 |  | 
|---|
| 2216 | Although the GNU standards allow the use of ANSI C, this can have the | 
|---|
| 2217 | effect of limiting portability of a package to some older compilers | 
|---|
| 2218 | (notably SunOS). | 
|---|
| 2219 |  | 
|---|
| 2220 | Automake allows you to work around this problem on such machines by | 
|---|
| 2221 | @dfn{de-ANSI-fying} each source file before the actual compilation takes | 
|---|
| 2222 | place. | 
|---|
| 2223 |  | 
|---|
| 2224 | @vindex AUTOMAKE_OPTIONS | 
|---|
| 2225 | @opindex ansi2knr | 
|---|
| 2226 |  | 
|---|
| 2227 | If the @file{Makefile.am} variable @code{AUTOMAKE_OPTIONS} | 
|---|
| 2228 | (@pxref{Options}) contains the option @code{ansi2knr} then code to | 
|---|
| 2229 | handle de-ANSI-fication is inserted into the generated | 
|---|
| 2230 | @file{Makefile.in}. | 
|---|
| 2231 |  | 
|---|
| 2232 | This causes each C source file in the directory to be treated as ANSI C. | 
|---|
| 2233 | If an ANSI C compiler is available, it is used.  If no ANSI C compiler | 
|---|
| 2234 | is available, the @code{ansi2knr} program is used to convert the source | 
|---|
| 2235 | files into K&R C, which is then compiled. | 
|---|
| 2236 |  | 
|---|
| 2237 | The @code{ansi2knr} program is simple-minded.  It assumes the source | 
|---|
| 2238 | code will be formatted in a particular way; see the @code{ansi2knr} man | 
|---|
| 2239 | page for details. | 
|---|
| 2240 |  | 
|---|
| 2241 | Support for de-ANSI-fication requires the source files @file{ansi2knr.c} | 
|---|
| 2242 | and @file{ansi2knr.1} to be in the same package as the ANSI C source; | 
|---|
| 2243 | these files are distributed with Automake.  Also, the package | 
|---|
| 2244 | @file{configure.in} must call the macro @code{AM_C_PROTOTYPES} | 
|---|
| 2245 | (@pxref{Macros}). | 
|---|
| 2246 | @cvindex AM_C_PROTOTYPES | 
|---|
| 2247 |  | 
|---|
| 2248 | Automake also handles finding the @code{ansi2knr} support files in some | 
|---|
| 2249 | other directory in the current package.  This is done by prepending the | 
|---|
| 2250 | relative path to the appropriate directory to the @code{ansi2knr} | 
|---|
| 2251 | option.  For instance, suppose the package has ANSI C code in the | 
|---|
| 2252 | @file{src} and @file{lib} subdirs.  The files @file{ansi2knr.c} and | 
|---|
| 2253 | @file{ansi2knr.1} appear in @file{lib}.  Then this could appear in | 
|---|
| 2254 | @file{src/Makefile.am}: | 
|---|
| 2255 |  | 
|---|
| 2256 | @example | 
|---|
| 2257 | AUTOMAKE_OPTIONS = ../lib/ansi2knr | 
|---|
| 2258 | @end example | 
|---|
| 2259 |  | 
|---|
| 2260 | If no directory prefix is given, the files are assumed to be in the | 
|---|
| 2261 | current directory. | 
|---|
| 2262 |  | 
|---|
| 2263 | Files mentioned in @code{LIBOBJS} which need de-ANSI-fication will not | 
|---|
| 2264 | be automatically handled.  That's because @code{configure} will generate | 
|---|
| 2265 | an object name like @file{regex.o}, while @code{make} will be looking | 
|---|
| 2266 | for @file{regex_.o} (when de-ANSI-fying).  Eventually this problem will | 
|---|
| 2267 | be fixed via @code{autoconf} magic, but for now you must put this code | 
|---|
| 2268 | into your @file{configure.in}, just before the @code{AC_OUTPUT} call: | 
|---|
| 2269 |  | 
|---|
| 2270 | @example | 
|---|
| 2271 | # This is necessary so that .o files in LIBOBJS are also built via | 
|---|
| 2272 | # the ANSI2KNR-filtering rules. | 
|---|
| 2273 | LIBOBJS=`echo $LIBOBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'` | 
|---|
| 2274 | @end example | 
|---|
| 2275 |  | 
|---|
| 2276 |  | 
|---|
| 2277 | @node Dependencies,  , ANSI, Programs | 
|---|
| 2278 | @section Automatic dependency tracking | 
|---|
| 2279 |  | 
|---|
| 2280 | As a developer it is often painful to continually update the | 
|---|
| 2281 | @file{Makefile.in} whenever the include-file dependencies change in a | 
|---|
| 2282 | project.  Automake supplies a way to automatically track dependency | 
|---|
| 2283 | changes, and distribute the dependencies in the generated | 
|---|
| 2284 | @file{Makefile.in}. | 
|---|
| 2285 |  | 
|---|
| 2286 | Currently this support requires the use of GNU @code{make} and | 
|---|
| 2287 | @code{gcc}.  It might become possible in the future to supply a | 
|---|
| 2288 | different dependency generating program, if there is enough demand.  In | 
|---|
| 2289 | the meantime, this mode is enabled by default if any C program or | 
|---|
| 2290 | library is defined in the current directory, so you may get a @samp{Must | 
|---|
| 2291 | be a separator} error from non-GNU make. | 
|---|
| 2292 |  | 
|---|
| 2293 | @trindex dist | 
|---|
| 2294 |  | 
|---|
| 2295 | When you decide to make a distribution, the @code{dist} target will | 
|---|
| 2296 | re-run @code{automake} with @samp{--include-deps} and other options. | 
|---|
| 2297 | @xref{Invoking Automake}, and @ref{Options}.  This will cause the | 
|---|
| 2298 | previously generated dependencies to be inserted into the generated | 
|---|
| 2299 | @file{Makefile.in}, and thus into the distribution.  This step also | 
|---|
| 2300 | turns off inclusion of the dependency generation code, so that those who | 
|---|
| 2301 | download your distribution but don't use GNU @code{make} and @code{gcc} | 
|---|
| 2302 | will not get errors. | 
|---|
| 2303 |  | 
|---|
| 2304 | @vindex OMIT_DEPENDENCIES | 
|---|
| 2305 |  | 
|---|
| 2306 | When added to the @file{Makefile.in}, the dependencies have all | 
|---|
| 2307 | system-specific dependencies automatically removed.  This can be done by | 
|---|
| 2308 | listing the files in @samp{OMIT_DEPENDENCIES}.  For instance all | 
|---|
| 2309 | references to system header files are removed by Automake.  Sometimes it | 
|---|
| 2310 | is useful to specify that a certain header file should be removed.  For | 
|---|
| 2311 | instance if your @file{configure.in} uses @samp{AM_WITH_REGEX}, then any | 
|---|
| 2312 | dependency on @file{rx.h} or @file{regex.h} should be removed, because | 
|---|
| 2313 | the correct one cannot be known until the user configures the package. | 
|---|
| 2314 |  | 
|---|
| 2315 | As it turns out, Automake is actually smart enough to handle the | 
|---|
| 2316 | particular case of the regular expression header.  It will also | 
|---|
| 2317 | automatically omit @file{libintl.h} if @samp{AM_GNU_GETTEXT} is used. | 
|---|
| 2318 |  | 
|---|
| 2319 | @vindex AUTOMAKE_OPTIONS | 
|---|
| 2320 | @opindex no-dependencies | 
|---|
| 2321 |  | 
|---|
| 2322 | Automatic dependency tracking can be suppressed by putting | 
|---|
| 2323 | @code{no-dependencies} in the variable @code{AUTOMAKE_OPTIONS}. | 
|---|
| 2324 |  | 
|---|
| 2325 | If you unpack a distribution made by @code{make dist}, and you want to | 
|---|
| 2326 | turn on the dependency-tracking code again, simply re-run | 
|---|
| 2327 | @code{automake}. | 
|---|
| 2328 |  | 
|---|
| 2329 | The actual dependency files are put under the build directory, in a | 
|---|
| 2330 | subdirectory named @file{.deps}.  These dependencies are machine | 
|---|
| 2331 | specific.  It is safe to delete them if you like; they will be | 
|---|
| 2332 | automatically recreated during the next build. | 
|---|
| 2333 |  | 
|---|
| 2334 |  | 
|---|
| 2335 | @node Other objects, Other GNU Tools, Programs, Top | 
|---|
| 2336 | @chapter Other Derived Objects | 
|---|
| 2337 |  | 
|---|
| 2338 | Automake can handle derived objects which are not C programs.  Sometimes | 
|---|
| 2339 | the support for actually building such objects must be explicitly | 
|---|
| 2340 | supplied, but Automake will still automatically handle installation and | 
|---|
| 2341 | distribution. | 
|---|
| 2342 |  | 
|---|
| 2343 | @menu | 
|---|
| 2344 | * Scripts::                     Executable scripts | 
|---|
| 2345 | * Headers::                     Header files | 
|---|
| 2346 | * Data::                        Architecture-independent data files | 
|---|
| 2347 | * Sources::                     Derived sources | 
|---|
| 2348 | @end menu | 
|---|
| 2349 |  | 
|---|
| 2350 |  | 
|---|
| 2351 | @node Scripts, Headers, Other objects, Other objects | 
|---|
| 2352 | @section Executable Scripts | 
|---|
| 2353 |  | 
|---|
| 2354 | @cindex _SCRIPTS primary, defined | 
|---|
| 2355 | @cindex SCRIPTS primary, defined | 
|---|
| 2356 | @cindex Primary variable, SCRIPTS | 
|---|
| 2357 |  | 
|---|
| 2358 | It is possible to define and install programs which are scripts.  Such | 
|---|
| 2359 | programs are listed using the @samp{SCRIPTS} primary name.  Automake | 
|---|
| 2360 | doesn't define any dependencies for scripts; the @file{Makefile.am} | 
|---|
| 2361 | should include the appropriate rules. | 
|---|
| 2362 | @vindex SCRIPTS | 
|---|
| 2363 |  | 
|---|
| 2364 | Automake does not assume that scripts are derived objects; such objects | 
|---|
| 2365 | must be deleted by hand (@pxref{Clean}). | 
|---|
| 2366 |  | 
|---|
| 2367 | The @code{automake} program itself is a Perl script that is generated at | 
|---|
| 2368 | configure time from @file{automake.in}.  Here is how this is handled: | 
|---|
| 2369 |  | 
|---|
| 2370 | @example | 
|---|
| 2371 | bin_SCRIPTS = automake | 
|---|
| 2372 | @end example | 
|---|
| 2373 |  | 
|---|
| 2374 | Since @code{automake} appears in the @code{AC_OUTPUT} macro, a target | 
|---|
| 2375 | for it is automatically generated. | 
|---|
| 2376 |  | 
|---|
| 2377 | @cindex SCRIPTS, installation directories | 
|---|
| 2378 | @cindex Installing scripts | 
|---|
| 2379 |  | 
|---|
| 2380 | @vindex bin_SCRIPTS | 
|---|
| 2381 | @vindex sbin_SCRIPTS | 
|---|
| 2382 | @vindex libexec_SCRIPTS | 
|---|
| 2383 | @vindex pkgdata_SCRIPTS | 
|---|
| 2384 | @vindex noinst_SCRIPTS | 
|---|
| 2385 |  | 
|---|
| 2386 | Script objects can be installed in @code{bindir}, @code{sbindir}, | 
|---|
| 2387 | @code{libexecdir}, or @code{pkgdatadir}. | 
|---|
| 2388 |  | 
|---|
| 2389 |  | 
|---|
| 2390 | @node Headers, Data, Scripts, Other objects | 
|---|
| 2391 | @section Header files | 
|---|
| 2392 |  | 
|---|
| 2393 | @cindex _HEADERS primary, defined | 
|---|
| 2394 | @cindex HEADERS primary, defined | 
|---|
| 2395 | @cindex Primary variable, HEADERS | 
|---|
| 2396 |  | 
|---|
| 2397 | @vindex noinst_HEADERS | 
|---|
| 2398 |  | 
|---|
| 2399 | Header files are specified by the @samp{HEADERS} family of variables. | 
|---|
| 2400 | Generally header files are not installed, so the @code{noinst_HEADERS} | 
|---|
| 2401 | variable will be the most used. | 
|---|
| 2402 | @vindex HEADERS | 
|---|
| 2403 |  | 
|---|
| 2404 | All header files must be listed somewhere; missing ones will not appear | 
|---|
| 2405 | in the distribution.  Often it is clearest to list uninstalled headers | 
|---|
| 2406 | with the rest of the sources for a program.  @xref{A Program}.  Headers | 
|---|
| 2407 | listed in a @samp{_SOURCES} variable need not be listed in any | 
|---|
| 2408 | @samp{_HEADERS} variable. | 
|---|
| 2409 |  | 
|---|
| 2410 | @cindex HEADERS, installation directories | 
|---|
| 2411 | @cindex Installing headers | 
|---|
| 2412 |  | 
|---|
| 2413 | @vindex include_HEADERS | 
|---|
| 2414 | @vindex oldinclude_HEADERS | 
|---|
| 2415 | @vindex pkginclude_HEADERS | 
|---|
| 2416 |  | 
|---|
| 2417 | Headers can be installed in @code{includedir}, @code{oldincludedir}, or | 
|---|
| 2418 | @code{pkgincludedir}. | 
|---|
| 2419 |  | 
|---|
| 2420 |  | 
|---|
| 2421 | @node Data, Sources, Headers, Other objects | 
|---|
| 2422 | @section Architecture-independent data files | 
|---|
| 2423 |  | 
|---|
| 2424 | @cindex _DATA primary, defined | 
|---|
| 2425 | @cindex DATA primary, defined | 
|---|
| 2426 | @cindex Primary variable, DATA | 
|---|
| 2427 |  | 
|---|
| 2428 | Automake supports the installation of miscellaneous data files using the | 
|---|
| 2429 | @samp{DATA} family of variables. | 
|---|
| 2430 | @vindex DATA | 
|---|
| 2431 |  | 
|---|
| 2432 | @vindex data_DATA | 
|---|
| 2433 | @vindex sysconf_DATA | 
|---|
| 2434 | @vindex sharedstate_DATA | 
|---|
| 2435 | @vindex localstate_DATA | 
|---|
| 2436 | @vindex pkgdata_DATA | 
|---|
| 2437 |  | 
|---|
| 2438 | Such data can be installed in the directories @code{datadir}, | 
|---|
| 2439 | @code{sysconfdir}, @code{sharedstatedir}, @code{localstatedir}, or | 
|---|
| 2440 | @code{pkgdatadir}. | 
|---|
| 2441 |  | 
|---|
| 2442 | By default, data files are @emph{not} included in a distribution. | 
|---|
| 2443 |  | 
|---|
| 2444 | Here is how Automake installs its auxiliary data files: | 
|---|
| 2445 |  | 
|---|
| 2446 | @example | 
|---|
| 2447 | pkgdata_DATA = clean-kr.am clean.am @dots{} | 
|---|
| 2448 | @end example | 
|---|
| 2449 |  | 
|---|
| 2450 |  | 
|---|
| 2451 | @node Sources,  , Data, Other objects | 
|---|
| 2452 | @section Built sources | 
|---|
| 2453 |  | 
|---|
| 2454 | @cindex BUILT_SOURCES, defined | 
|---|
| 2455 |  | 
|---|
| 2456 | Occasionally a file which would otherwise be called @samp{source} | 
|---|
| 2457 | (e.g. a C @samp{.h} file) is actually derived from some other file. | 
|---|
| 2458 | Such files should be listed in the @code{BUILT_SOURCES} variable. | 
|---|
| 2459 | @vindex BUILT_SOURCES | 
|---|
| 2460 |  | 
|---|
| 2461 | Built sources are also not compiled by default.  You must explicitly | 
|---|
| 2462 | mention them in some other @samp{_SOURCES} variable for this to happen. | 
|---|
| 2463 |  | 
|---|
| 2464 | Note that, in some cases, @code{BUILT_SOURCES} will work in somewhat | 
|---|
| 2465 | surprising ways.  In order to get the built sources to work with | 
|---|
| 2466 | automatic dependency tracking, the @file{Makefile} must depend on | 
|---|
| 2467 | @code{$(BUILT_SOURCES)}.  This can cause these sources to be rebuilt at | 
|---|
| 2468 | what might seem like funny times. | 
|---|
| 2469 |  | 
|---|
| 2470 |  | 
|---|
| 2471 | @node Other GNU Tools, Documentation, Other objects, Top | 
|---|
| 2472 | @chapter Other GNU Tools | 
|---|
| 2473 |  | 
|---|
| 2474 | Since Automake is primarily intended to generate @file{Makefile.in}s for | 
|---|
| 2475 | use in GNU programs, it tries hard to interoperate with other GNU tools. | 
|---|
| 2476 |  | 
|---|
| 2477 | @menu | 
|---|
| 2478 | * Emacs Lisp::                  Emacs Lisp | 
|---|
| 2479 | * gettext::                     Gettext | 
|---|
| 2480 | * Guile::                       Guile | 
|---|
| 2481 | * Libtool::                     Libtool | 
|---|
| 2482 | * Java::                        Java | 
|---|
| 2483 | @end menu | 
|---|
| 2484 |  | 
|---|
| 2485 |  | 
|---|
| 2486 | @node Emacs Lisp, gettext, Other GNU Tools, Other GNU Tools | 
|---|
| 2487 | @section Emacs Lisp | 
|---|
| 2488 |  | 
|---|
| 2489 | @cindex _LISP primary, defined | 
|---|
| 2490 | @cindex LISP primary, defined | 
|---|
| 2491 | @cindex Primary variable, LISP | 
|---|
| 2492 |  | 
|---|
| 2493 | @vindex LISP | 
|---|
| 2494 | @vindex lisp_LISP | 
|---|
| 2495 | @vindex noinst_LISP | 
|---|
| 2496 |  | 
|---|
| 2497 | Automake provides some support for Emacs Lisp.  The @samp{LISP} primary | 
|---|
| 2498 | is used to hold a list of @file{.el} files.  Possible prefixes for this | 
|---|
| 2499 | primary are @samp{lisp_} and @samp{noinst_}.  Note that if | 
|---|
| 2500 | @code{lisp_LISP} is defined, then @file{configure.in} must run | 
|---|
| 2501 | @code{AM_PATH_LISPDIR} (@pxref{Macros}). | 
|---|
| 2502 |  | 
|---|
| 2503 | @vindex ELCFILES | 
|---|
| 2504 |  | 
|---|
| 2505 | By default Automake will byte-compile all Emacs Lisp source files using | 
|---|
| 2506 | the Emacs found by @code{AM_PATH_LISPDIR}.  If you wish to avoid | 
|---|
| 2507 | byte-compiling, simply define the variable @code{ELCFILES} to be empty. | 
|---|
| 2508 | Byte-compiled Emacs Lisp files are not portable among all versions of | 
|---|
| 2509 | Emacs, so it makes sense to turn this off if you expect sites to have | 
|---|
| 2510 | more than one version of Emacs installed.  Furthermore, many packages | 
|---|
| 2511 | don't actually benefit from byte-compilation.  Still, we recommend that | 
|---|
| 2512 | you leave it enabled by default.  It is probably better for sites with | 
|---|
| 2513 | strange setups to cope for themselves than to make the installation less | 
|---|
| 2514 | nice for everybody else. | 
|---|
| 2515 |  | 
|---|
| 2516 |  | 
|---|
| 2517 | @node gettext, Guile, Emacs Lisp, Other GNU Tools | 
|---|
| 2518 | @section Gettext | 
|---|
| 2519 |  | 
|---|
| 2520 | @cindex GNU Gettext support | 
|---|
| 2521 | @cindex Gettext support | 
|---|
| 2522 | @cindex Support for GNU Gettext | 
|---|
| 2523 |  | 
|---|
| 2524 | If @code{AM_GNU_GETTEXT} is seen in @file{configure.in}, then Automake | 
|---|
| 2525 | turns on support for GNU gettext, a message catalog system for | 
|---|
| 2526 | internationalization | 
|---|
| 2527 | (@pxref{GNU Gettext, , , gettext, GNU gettext utilities}). | 
|---|
| 2528 |  | 
|---|
| 2529 | The @code{gettext} support in Automake requires the addition of two | 
|---|
| 2530 | subdirectories to the package, @file{intl} and @file{po}.  Automake | 
|---|
| 2531 | insures that these directories exist and are mentioned in | 
|---|
| 2532 | @code{SUBDIRS}. | 
|---|
| 2533 |  | 
|---|
| 2534 | Furthermore, Automake checks that the definition of @code{ALL_LINGUAS} | 
|---|
| 2535 | in @file{configure.in} corresponds to all the valid @file{.po} files, | 
|---|
| 2536 | and nothing more. | 
|---|
| 2537 |  | 
|---|
| 2538 |  | 
|---|
| 2539 | @node Guile, Libtool, gettext, Other GNU Tools | 
|---|
| 2540 | @section Guile | 
|---|
| 2541 |  | 
|---|
| 2542 | Automake provides some automatic support for writing Guile modules. | 
|---|
| 2543 | Automake will turn on Guile support if the @code{AM_INIT_GUILE_MODULE} | 
|---|
| 2544 | macro is used in @file{configure.in}. | 
|---|
| 2545 |  | 
|---|
| 2546 | Right now Guile support just means that the @code{AM_INIT_GUILE_MODULE} | 
|---|
| 2547 | macro is understood to mean: | 
|---|
| 2548 | @itemize @bullet | 
|---|
| 2549 | @item | 
|---|
| 2550 | @code{AM_INIT_AUTOMAKE} is run. | 
|---|
| 2551 |  | 
|---|
| 2552 | @item | 
|---|
| 2553 | @code{AC_CONFIG_AUX_DIR} is run, with a path of @file{..}. | 
|---|
| 2554 | @end itemize | 
|---|
| 2555 |  | 
|---|
| 2556 | As the Guile module code matures, no doubt the Automake support will | 
|---|
| 2557 | grow as well. | 
|---|
| 2558 |  | 
|---|
| 2559 |  | 
|---|
| 2560 | @node Libtool, Java, Guile, Other GNU Tools | 
|---|
| 2561 | @section Libtool | 
|---|
| 2562 |  | 
|---|
| 2563 | Automake provides support for GNU Libtool (@pxref{Top, , Introduction, | 
|---|
| 2564 | libtool, The Libtool Manual}) with the @samp{LTLIBRARIES} primary. | 
|---|
| 2565 | @xref{A Shared Library}. | 
|---|
| 2566 |  | 
|---|
| 2567 |  | 
|---|
| 2568 | @node Java,  , Libtool, Other GNU Tools | 
|---|
| 2569 | @section Java | 
|---|
| 2570 |  | 
|---|
| 2571 | @cindex _JAVA primary, defined | 
|---|
| 2572 | @cindex JAVA primary, defined | 
|---|
| 2573 | @cindex Primary variable, JAVA | 
|---|
| 2574 |  | 
|---|
| 2575 | Automake provides some minimal support for Java compilation with the | 
|---|
| 2576 | @samp{JAVA} primary. | 
|---|
| 2577 |  | 
|---|
| 2578 | Any @file{.java} files listed in a @samp{_JAVA} variable will be | 
|---|
| 2579 | compiled with @code{JAVAC} at build time.  By default, @file{.class} | 
|---|
| 2580 | files are not included in the distribution. | 
|---|
| 2581 |  | 
|---|
| 2582 | @cindex JAVA restrictions | 
|---|
| 2583 | @cindex Restrictions for JAVA | 
|---|
| 2584 |  | 
|---|
| 2585 | Currently Automake enforces the restriction that only one @samp{_JAVA} | 
|---|
| 2586 | primary can be used in a given @file{Makefile.am}.  The reason for this | 
|---|
| 2587 | restriction is that, in general, it isn't possible to know which | 
|---|
| 2588 | @file{.class} files were generated from which @file{.java} files -- so | 
|---|
| 2589 | it would be impossible to know which files to install where. | 
|---|
| 2590 |  | 
|---|
| 2591 |  | 
|---|
| 2592 | @node Documentation, Install, Other GNU Tools, Top | 
|---|
| 2593 | @chapter Building documentation | 
|---|
| 2594 |  | 
|---|
| 2595 | Currently Automake provides support for Texinfo and man pages. | 
|---|
| 2596 |  | 
|---|
| 2597 | @menu | 
|---|
| 2598 | * Texinfo::                     Texinfo | 
|---|
| 2599 | * Man pages::                   Man pages | 
|---|
| 2600 | @end menu | 
|---|
| 2601 |  | 
|---|
| 2602 |  | 
|---|
| 2603 | @node Texinfo, Man pages, Documentation, Documentation | 
|---|
| 2604 | @section Texinfo | 
|---|
| 2605 |  | 
|---|
| 2606 | @cindex _TEXINFOS primary, defined | 
|---|
| 2607 | @cindex TEXINFOS primary, defined | 
|---|
| 2608 | @cindex Primary variable, TEXINFOS | 
|---|
| 2609 |  | 
|---|
| 2610 | If the current directory contains Texinfo source, you must declare it | 
|---|
| 2611 | with the @samp{TEXINFOS} primary.  Generally Texinfo files are converted | 
|---|
| 2612 | into info, and thus the @code{info_TEXINFOS} macro is most commonly used | 
|---|
| 2613 | here.  Note that any Texinfo source file must end in the @file{.texi} or | 
|---|
| 2614 | @file{.texinfo} extension. | 
|---|
| 2615 | @vindex TEXINFOS | 
|---|
| 2616 | @vindex info_TEXINFOS | 
|---|
| 2617 |  | 
|---|
| 2618 | @cindex Texinfo macro, VERSION | 
|---|
| 2619 | @cindex Texinfo macro, UPDATED | 
|---|
| 2620 | @cindex Texinfo macro, EDITION | 
|---|
| 2621 |  | 
|---|
| 2622 | @cindex VERSION Texinfo macro | 
|---|
| 2623 | @cindex UPDATED Texinfo macro | 
|---|
| 2624 | @cindex EDITION Texinfo macro | 
|---|
| 2625 |  | 
|---|
| 2626 | @cindex mdate-sh | 
|---|
| 2627 |  | 
|---|
| 2628 | If the @file{.texi} file @code{@@include}s @file{version.texi}, then | 
|---|
| 2629 | that file will be automatically generated.  The file @file{version.texi} | 
|---|
| 2630 | defines three Texinfo macros you can reference: @code{EDITION}, | 
|---|
| 2631 | @code{VERSION}, and @code{UPDATED}.  The first two hold the version | 
|---|
| 2632 | number of your package (but are kept separate for clarity); the last is | 
|---|
| 2633 | the date the primary file was last modified.  The @file{version.texi} | 
|---|
| 2634 | support requires the @code{mdate-sh} program; this program is supplied | 
|---|
| 2635 | with Automake and automatically included when @code{automake} is invoked | 
|---|
| 2636 | with the @code{--add-missing} option. | 
|---|
| 2637 |  | 
|---|
| 2638 | Sometimes an info file actually depends on more than one @file{.texi} | 
|---|
| 2639 | file.  For instance, in GNU Hello, @file{hello.texi} includes the file | 
|---|
| 2640 | @file{gpl.texi}.  You can tell Automake about these dependencies using | 
|---|
| 2641 | the @code{@var{texi}_TEXINFOS} variable.  Here is how GNU Hello does it: | 
|---|
| 2642 | @vindex TEXINFOS | 
|---|
| 2643 | @vindex _TEXINFOS | 
|---|
| 2644 |  | 
|---|
| 2645 | @example | 
|---|
| 2646 | info_TEXINFOS = hello.texi | 
|---|
| 2647 | hello_TEXINFOS = gpl.texi | 
|---|
| 2648 | @end example | 
|---|
| 2649 |  | 
|---|
| 2650 | @cindex texinfo.tex | 
|---|
| 2651 |  | 
|---|
| 2652 | By default, Automake requires the file @file{texinfo.tex} to appear in | 
|---|
| 2653 | the same directory as the Texinfo source.  However, if you used | 
|---|
| 2654 | @code{AC_CONFIG_AUX_DIR} in @file{configure.in} (@pxref{Input, , Finding | 
|---|
| 2655 | `configure' Input, autoconf, The Autoconf Manual}), then | 
|---|
| 2656 | @file{texinfo.tex} is looked for there.  Automake supplies | 
|---|
| 2657 | @file{texinfo.tex} if @samp{--add-missing} is given. | 
|---|
| 2658 |  | 
|---|
| 2659 | @vindex TEXINFO_TEX | 
|---|
| 2660 |  | 
|---|
| 2661 | If your package has Texinfo files in many directories, you can use the | 
|---|
| 2662 | variable @code{TEXINFO_TEX} to tell Automake where to find the canonical | 
|---|
| 2663 | @file{texinfo.tex} for your package.  The value of this variable should | 
|---|
| 2664 | be the relative path from the current @file{Makefile.am} to | 
|---|
| 2665 | @file{texinfo.tex}: | 
|---|
| 2666 |  | 
|---|
| 2667 | @example | 
|---|
| 2668 | TEXINFO_TEX = ../doc/texinfo.tex | 
|---|
| 2669 | @end example | 
|---|
| 2670 |  | 
|---|
| 2671 | @opindex no-texinfo.tex | 
|---|
| 2672 |  | 
|---|
| 2673 | The option @samp{no-texinfo.tex} can be used to eliminate the | 
|---|
| 2674 | requirement for @file{texinfo.tex}.  Use of the variable | 
|---|
| 2675 | @code{TEXINFO_TEX} is preferable, however, because that allows the | 
|---|
| 2676 | @code{dvi} target to still work. | 
|---|
| 2677 |  | 
|---|
| 2678 | @cindex Target, install-info | 
|---|
| 2679 | @cindex Target, noinstall-info | 
|---|
| 2680 | @cindex install-info target | 
|---|
| 2681 | @cindex noinstall-info target | 
|---|
| 2682 |  | 
|---|
| 2683 | @opindex no-installinfo | 
|---|
| 2684 | @trindex install-info | 
|---|
| 2685 |  | 
|---|
| 2686 | Automake generates an @code{install-info} target; some people apparently | 
|---|
| 2687 | use this.  By default, info pages are installed by @samp{make install}. | 
|---|
| 2688 | This can be prevented via the @code{no-installinfo} option. | 
|---|
| 2689 |  | 
|---|
| 2690 |  | 
|---|
| 2691 | @node Man pages,  , Texinfo, Documentation | 
|---|
| 2692 | @section Man pages | 
|---|
| 2693 |  | 
|---|
| 2694 | @cindex _MANS primary, defined | 
|---|
| 2695 | @cindex MANS primary, defined | 
|---|
| 2696 | @cindex Primary variable, MANS | 
|---|
| 2697 |  | 
|---|
| 2698 | A package can also include man pages (but see the GNU standards on this | 
|---|
| 2699 | matter, @ref{Man Pages, , , standards, The GNU Coding Standards}.)  Man | 
|---|
| 2700 | pages are declared using the @samp{MANS} primary.  Generally the | 
|---|
| 2701 | @code{man_MANS} macro is used.  Man pages are automatically installed in | 
|---|
| 2702 | the correct subdirectory of @code{mandir}, based on the file extension. | 
|---|
| 2703 | They are not automatically included in the distribution. | 
|---|
| 2704 | @vindex MANS | 
|---|
| 2705 | @vindex man_MANS | 
|---|
| 2706 |  | 
|---|
| 2707 | @cindex Target, install-man | 
|---|
| 2708 | @cindex Target, noinstall-man | 
|---|
| 2709 | @cindex install-man target | 
|---|
| 2710 | @cindex noinstall-man target | 
|---|
| 2711 |  | 
|---|
| 2712 | @c Use @samp{make install} per documentation: (texi)code. | 
|---|
| 2713 | By default, man pages are installed by @samp{make install}.  However, | 
|---|
| 2714 | since the GNU project does not require man pages, many maintainers do | 
|---|
| 2715 | not expend effort to keep the man pages up to date.  In these cases, the | 
|---|
| 2716 | @code{no-installman} option will prevent the man pages from being | 
|---|
| 2717 | installed by default.  The user can still explicitly install them via | 
|---|
| 2718 | @samp{make install-man}. | 
|---|
| 2719 | @opindex no-installman | 
|---|
| 2720 | @trindex install-man | 
|---|
| 2721 |  | 
|---|
| 2722 | Here is how the documentation is handled in GNU @code{cpio} (which | 
|---|
| 2723 | includes both Texinfo documentation and man pages): | 
|---|
| 2724 |  | 
|---|
| 2725 | @example | 
|---|
| 2726 | info_TEXINFOS = cpio.texi | 
|---|
| 2727 | man_MANS = cpio.1 mt.1 | 
|---|
| 2728 | EXTRA_DIST = $(man_MANS) | 
|---|
| 2729 | @end example | 
|---|
| 2730 |  | 
|---|
| 2731 | Texinfo source and info pages are all considered to be source for the | 
|---|
| 2732 | purposes of making a distribution. | 
|---|
| 2733 |  | 
|---|
| 2734 | Man pages are not currently considered to be source, because it is not | 
|---|
| 2735 | uncommon for man pages to be automatically generated.  For the same | 
|---|
| 2736 | reason, they are not automatically included in the distribution. | 
|---|
| 2737 |  | 
|---|
| 2738 |  | 
|---|
| 2739 | @node Install, Clean, Documentation, Top | 
|---|
| 2740 | @chapter What Gets Installed | 
|---|
| 2741 |  | 
|---|
| 2742 | @cindex Installation support | 
|---|
| 2743 | @cindex make install support | 
|---|
| 2744 |  | 
|---|
| 2745 | Naturally, Automake handles the details of actually installing your | 
|---|
| 2746 | program once it has been built.  All @code{PROGRAMS}, @code{SCRIPTS}, | 
|---|
| 2747 | @code{LIBRARIES}, @code{LISP}, @code{DATA} and @code{HEADERS} are | 
|---|
| 2748 | automatically installed in the appropriate places. | 
|---|
| 2749 |  | 
|---|
| 2750 | Automake also handles installing any specified info and man pages. | 
|---|
| 2751 |  | 
|---|
| 2752 | Automake generates separate @code{install-data} and @code{install-exec} | 
|---|
| 2753 | targets, in case the installer is installing on multiple machines which | 
|---|
| 2754 | share directory structure---these targets allow the machine-independent | 
|---|
| 2755 | parts to be installed only once.  The @code{install} target depends on | 
|---|
| 2756 | both of these targets. | 
|---|
| 2757 | @trindex install-data | 
|---|
| 2758 | @trindex install-exec | 
|---|
| 2759 | @trindex install | 
|---|
| 2760 |  | 
|---|
| 2761 | Automake also generates an @code{uninstall} target, an | 
|---|
| 2762 | @code{installdirs} target, and an @code{install-strip} target. | 
|---|
| 2763 | @trindex uninstall | 
|---|
| 2764 | @trindex installdirs | 
|---|
| 2765 | @trindex install-strip | 
|---|
| 2766 |  | 
|---|
| 2767 | It is possible to extend this mechanism by defining an | 
|---|
| 2768 | @code{install-exec-local} or @code{install-data-local} target.  If these | 
|---|
| 2769 | targets exist, they will be run at @samp{make install} time. | 
|---|
| 2770 | @trindex install-exec-local | 
|---|
| 2771 | @trindex install-data-local | 
|---|
| 2772 |  | 
|---|
| 2773 | Variables using the standard directory prefixes @samp{data}, | 
|---|
| 2774 | @samp{info}, @samp{man}, @samp{include}, @samp{oldinclude}, | 
|---|
| 2775 | @samp{pkgdata}, or @samp{pkginclude} (e.g. @samp{data_DATA}) are | 
|---|
| 2776 | installed by @samp{install-data}. | 
|---|
| 2777 |  | 
|---|
| 2778 | Variables using the standard directory prefixes @samp{bin}, @samp{sbin}, | 
|---|
| 2779 | @samp{libexec}, @samp{sysconf}, @samp{localstate}, @samp{lib}, or | 
|---|
| 2780 | @samp{pkglib} (e.g. @samp{bin_PROGRAMS}) are installed by | 
|---|
| 2781 | @samp{install-exec}. | 
|---|
| 2782 |  | 
|---|
| 2783 | Any variable using a user-defined directory prefix with @samp{exec} in | 
|---|
| 2784 | the name (e.g. @samp{myexecbin_PROGRAMS} is installed by | 
|---|
| 2785 | @samp{install-exec}.  All other user-defined prefixes are installed by | 
|---|
| 2786 | @samp{install-data}. | 
|---|
| 2787 |  | 
|---|
| 2788 | @vindex DESTDIR | 
|---|
| 2789 | Automake generates support for the @samp{DESTDIR} variable in all | 
|---|
| 2790 | install rules.  @samp{DESTDIR} is used during the @samp{make install} | 
|---|
| 2791 | step to relocate install objects into a staging area.  Each object and | 
|---|
| 2792 | path is prefixed with the value of @samp{DESTDIR} before being copied | 
|---|
| 2793 | into the install area.  Here is an example of typical DESTDIR usage: | 
|---|
| 2794 |  | 
|---|
| 2795 | @example | 
|---|
| 2796 | make DESTDIR=/tmp/staging install | 
|---|
| 2797 | @end example | 
|---|
| 2798 |  | 
|---|
| 2799 | This places install objects in a directory tree built under | 
|---|
| 2800 | @file{/tmp/staging}.  If @file{/gnu/bin/foo} and | 
|---|
| 2801 | @file{/gnu/share/aclocal/foo.m4} are to be installed, the above command | 
|---|
| 2802 | would install @file{/tmp/staging/gnu/bin/foo} and | 
|---|
| 2803 | @file{/tmp/staging/gnu/share/aclocal/foo.m4}. | 
|---|
| 2804 |  | 
|---|
| 2805 | This feature is commonly used to build install images and packages.  For | 
|---|
| 2806 | more information, see @ref{Makefile Conventions, , , standards, The GNU | 
|---|
| 2807 | Coding Standards}. | 
|---|
| 2808 |  | 
|---|
| 2809 |  | 
|---|
| 2810 | @node Clean, Dist, Install, Top | 
|---|
| 2811 | @chapter What Gets Cleaned | 
|---|
| 2812 |  | 
|---|
| 2813 | @cindex make clean support | 
|---|
| 2814 |  | 
|---|
| 2815 | The GNU Makefile Standards specify a number of different clean rules. | 
|---|
| 2816 | @c FIXME xref | 
|---|
| 2817 | Generally the files that can be cleaned are determined automatically by | 
|---|
| 2818 | Automake.  Of course, Automake also recognizes some variables that can | 
|---|
| 2819 | be defined to specify additional files to clean.  These variables are | 
|---|
| 2820 | @code{MOSTLYCLEANFILES}, @code{CLEANFILES}, @code{DISTCLEANFILES}, and | 
|---|
| 2821 | @code{MAINTAINERCLEANFILES}. | 
|---|
| 2822 | @vindex MOSTLYCLEANFILES | 
|---|
| 2823 | @vindex CLEANFILES | 
|---|
| 2824 | @vindex DISTCLEANFILES | 
|---|
| 2825 | @vindex MAINTAINERCLEANFILES | 
|---|
| 2826 |  | 
|---|
| 2827 |  | 
|---|
| 2828 | @node Dist, Tests, Clean, Top | 
|---|
| 2829 | @chapter What Goes in a Distribution | 
|---|
| 2830 |  | 
|---|
| 2831 | @cindex make dist | 
|---|
| 2832 | @cindex make distcheck | 
|---|
| 2833 |  | 
|---|
| 2834 | The @code{dist} target in the generated @file{Makefile.in} can be used | 
|---|
| 2835 | to generate a gzip'd @code{tar} file for distribution.  The tar file is | 
|---|
| 2836 | named based on the @samp{PACKAGE} and @samp{VERSION} variables; more | 
|---|
| 2837 | precisely it is named @samp{@var{package}-@var{version}.tar.gz}. | 
|---|
| 2838 | @cvindex PACKAGE | 
|---|
| 2839 | @cvindex VERSION | 
|---|
| 2840 | @trindex dist | 
|---|
| 2841 | You can use the @code{make} variable @samp{GZIP_ENV} to control how gzip | 
|---|
| 2842 | is run.  The default setting is @samp{--best}. | 
|---|
| 2843 |  | 
|---|
| 2844 | For the most part, the files to distribute are automatically found by | 
|---|
| 2845 | Automake: all source files are automatically included in a distribution, | 
|---|
| 2846 | as are all @file{Makefile.am}s and @file{Makefile.in}s.  Automake also | 
|---|
| 2847 | has a built-in list of commonly used files which, if present in the | 
|---|
| 2848 | current directory, are automatically included.  This list is printed by | 
|---|
| 2849 | @samp{automake --help}.  Also, files which are read by @code{configure} | 
|---|
| 2850 | (i.e. the source files corresponding to the files specified in the | 
|---|
| 2851 | @code{AC_OUTPUT} invocation) are automatically distributed. | 
|---|
| 2852 |  | 
|---|
| 2853 | Still, sometimes there are files which must be distributed, but which | 
|---|
| 2854 | are not covered in the automatic rules.  These files should be listed in | 
|---|
| 2855 | the @code{EXTRA_DIST} variable.  You can mention files from | 
|---|
| 2856 | subdirectories in @code{EXTRA_DIST}.  You can also mention a directory | 
|---|
| 2857 | there; in this case the entire directory will be recursively copied into | 
|---|
| 2858 | the distribution. | 
|---|
| 2859 | @vindex EXTRA_DIST | 
|---|
| 2860 |  | 
|---|
| 2861 | If you define @code{SUBDIRS}, Automake will recursively include the | 
|---|
| 2862 | subdirectories in the distribution.  If @code{SUBDIRS} is defined | 
|---|
| 2863 | conditionally (@pxref{Conditionals}), Automake will normally include all | 
|---|
| 2864 | directories that could possibly appear in @code{SUBDIRS} in the | 
|---|
| 2865 | distribution.  If you need to specify the set of directories | 
|---|
| 2866 | conditionally, you can set the variable @code{DIST_SUBDIRS} to the exact | 
|---|
| 2867 | list of subdirectories to include in the distribution. | 
|---|
| 2868 | @vindex DIST_SUBDIRS | 
|---|
| 2869 |  | 
|---|
| 2870 | @trindex dist-hook | 
|---|
| 2871 |  | 
|---|
| 2872 | Occasionally it is useful to be able to change the distribution before | 
|---|
| 2873 | it is packaged up.  If the @code{dist-hook} target exists, it is run | 
|---|
| 2874 | after the distribution directory is filled, but before the actual tar | 
|---|
| 2875 | (or shar) file is created.  One way to use this is for distributing | 
|---|
| 2876 | files in subdirectories for which a new @file{Makefile.am} is overkill: | 
|---|
| 2877 |  | 
|---|
| 2878 | @example | 
|---|
| 2879 | dist-hook: | 
|---|
| 2880 | mkdir $(distdir)/random | 
|---|
| 2881 | cp -p $(srcdir)/random/a1 $(srcdir)/random/a2 $(distdir)/random | 
|---|
| 2882 | @end example | 
|---|
| 2883 |  | 
|---|
| 2884 | Automake also generates a @code{distcheck} target which can be help to | 
|---|
| 2885 | ensure that a given distribution will actually work.  @code{distcheck} | 
|---|
| 2886 | makes a distribution, and then tries to do a @code{VPATH} build. | 
|---|
| 2887 | @trindex distcheck | 
|---|
| 2888 | @c FIXME: document distcheck-hook here | 
|---|
| 2889 |  | 
|---|
| 2890 |  | 
|---|
| 2891 | @node Tests, Options, Dist, Top | 
|---|
| 2892 | @chapter Support for test suites | 
|---|
| 2893 |  | 
|---|
| 2894 | @cindex Test suites | 
|---|
| 2895 | @cindex make check | 
|---|
| 2896 |  | 
|---|
| 2897 | Automake supports two forms of test suites. | 
|---|
| 2898 |  | 
|---|
| 2899 | If the variable @code{TESTS} is defined, its value is taken to be a list | 
|---|
| 2900 | of programs to run in order to do the testing.  The programs can either | 
|---|
| 2901 | be derived objects or source objects; the generated rule will look both | 
|---|
| 2902 | in @code{srcdir} and @file{.}.  Programs needing data files should look | 
|---|
| 2903 | for them in @code{srcdir} (which is both an environment variable and a | 
|---|
| 2904 | make variable) so they work when building in a separate directory | 
|---|
| 2905 | (@pxref{Build Directories, , Build Directories , autoconf, The Autoconf | 
|---|
| 2906 | Manual}), and in particular for the @code{distcheck} target | 
|---|
| 2907 | (@pxref{Dist}). | 
|---|
| 2908 |  | 
|---|
| 2909 | @cindex Exit status 77, special interpretation | 
|---|
| 2910 |  | 
|---|
| 2911 | The number of failures will be printed at the end of the run.  If a | 
|---|
| 2912 | given test program exits with a status of 77, then its result is ignored | 
|---|
| 2913 | in the final count.  This feature allows non-portable tests to be | 
|---|
| 2914 | ignored in environments where they don't make sense. | 
|---|
| 2915 |  | 
|---|
| 2916 | The variable @code{TESTS_ENVIRONMENT} can be used to set environment | 
|---|
| 2917 | variables for the test run; the environment variable @code{srcdir} is | 
|---|
| 2918 | set in the rule.  If all your test programs are scripts, you can also | 
|---|
| 2919 | set @code{TESTS_ENVIRONMENT} to an invocation of the shell (e.g. | 
|---|
| 2920 | @samp{$(SHELL) -x}); this can be useful for debugging the tests. | 
|---|
| 2921 | @vindex TESTS | 
|---|
| 2922 | @vindex TESTS_ENVIRONMENT | 
|---|
| 2923 |  | 
|---|
| 2924 | If @uref{ftp://prep.ai.mit.edu/pub/gnu/dejagnu-1.3.tar.gz, | 
|---|
| 2925 | @samp{dejagnu}} appears in @code{AUTOMAKE_OPTIONS}, then a | 
|---|
| 2926 | @code{dejagnu}-based test suite is assumed.  The value of the variable | 
|---|
| 2927 | @code{DEJATOOL} is passed as the @code{--tool} argument to | 
|---|
| 2928 | @code{runtest}; it defaults to the name of the package. | 
|---|
| 2929 |  | 
|---|
| 2930 | The variable @code{RUNTESTDEFAULTFLAGS} holds the @code{--tool} and | 
|---|
| 2931 | @code{--srcdir} flags that are passed to dejagnu by default; this can be | 
|---|
| 2932 | overridden if necessary. | 
|---|
| 2933 | @vindex RUNTESTDEFAULTFLAGS | 
|---|
| 2934 |  | 
|---|
| 2935 | The variables @code{EXPECT}, @code{RUNTEST} and @code{RUNTESTFLAGS} can | 
|---|
| 2936 | also be overridden to provide project-specific values.  For instance, | 
|---|
| 2937 | you will need to do this if you are testing a compiler toolchain, | 
|---|
| 2938 | because the default values do not take into account host and target | 
|---|
| 2939 | names. | 
|---|
| 2940 | @opindex dejagnu | 
|---|
| 2941 | @vindex DEJATOOL | 
|---|
| 2942 | @vindex EXPECT | 
|---|
| 2943 | @vindex RUNTEST | 
|---|
| 2944 | @vindex RUNTESTFLAGS | 
|---|
| 2945 | @c FIXME xref dejagnu | 
|---|
| 2946 |  | 
|---|
| 2947 | In either case, the testing is done via @samp{make check}. | 
|---|
| 2948 |  | 
|---|
| 2949 |  | 
|---|
| 2950 | @node Options, Miscellaneous, Tests, Top | 
|---|
| 2951 | @chapter Changing Automake's Behavior | 
|---|
| 2952 |  | 
|---|
| 2953 | Various features of Automake can be controlled by options in the | 
|---|
| 2954 | @file{Makefile.am}.  Such options are listed in a special variable named | 
|---|
| 2955 | @code{AUTOMAKE_OPTIONS}.  Currently understood options are: | 
|---|
| 2956 | @vindex AUTOMAKE_OPTIONS | 
|---|
| 2957 |  | 
|---|
| 2958 | @table @asis | 
|---|
| 2959 | @item @code{gnits} | 
|---|
| 2960 | @itemx @code{gnu} | 
|---|
| 2961 | @itemx @code{foreign} | 
|---|
| 2962 | @item @code{cygnus} | 
|---|
| 2963 | @cindex Option, gnits | 
|---|
| 2964 | @cindex Option, gnu | 
|---|
| 2965 | @cindex Option, foreign | 
|---|
| 2966 | @cindex Option, cygnus | 
|---|
| 2967 |  | 
|---|
| 2968 | Set the strictness as appropriate.  The @code{gnits} option also implies | 
|---|
| 2969 | @code{readme-alpha} and @code{check-news}. | 
|---|
| 2970 |  | 
|---|
| 2971 | @item @code{ansi2knr} | 
|---|
| 2972 | @itemx @code{path/ansi2knr} | 
|---|
| 2973 | @cindex Option, ansi2knr | 
|---|
| 2974 | Turn on automatic de-ANSI-fication.  @xref{ANSI}.  If preceded by a | 
|---|
| 2975 | path, the generated @file{Makefile.in} will look in the specified | 
|---|
| 2976 | directory to find the @file{ansi2knr} program.  Generally the path | 
|---|
| 2977 | should be a relative path to another directory in the same distribution | 
|---|
| 2978 | (though Automake currently does not check this). | 
|---|
| 2979 |  | 
|---|
| 2980 | @item @code{check-news} | 
|---|
| 2981 | @cindex Option, check-news | 
|---|
| 2982 | Cause @code{make dist} to fail unless the current version number appears | 
|---|
| 2983 | in the first few lines of the @file{NEWS} file. | 
|---|
| 2984 |  | 
|---|
| 2985 | @item @code{dejagnu} | 
|---|
| 2986 | @cindex Option, dejagnu | 
|---|
| 2987 | Cause @code{dejagnu}-specific rules to be generated.  @xref{Tests}. | 
|---|
| 2988 |  | 
|---|
| 2989 | @item @code{dist-shar} | 
|---|
| 2990 | @cindex Option, dist-shar | 
|---|
| 2991 | Generate a @code{dist-shar} target as well as the ordinary @code{dist} | 
|---|
| 2992 | target.  This new target will create a shar archive of the | 
|---|
| 2993 | distribution. | 
|---|
| 2994 | @trindex dist-shar | 
|---|
| 2995 |  | 
|---|
| 2996 | @item @code{dist-zip} | 
|---|
| 2997 | @cindex Option, dist-zip | 
|---|
| 2998 | Generate a @code{dist-zip} target as well as the ordinary @code{dist} | 
|---|
| 2999 | target.  This new target will create a zip archive of the distribution. | 
|---|
| 3000 | @trindex dist-zip | 
|---|
| 3001 |  | 
|---|
| 3002 | @item @code{dist-tarZ} | 
|---|
| 3003 | @cindex Option, dist-tarZ | 
|---|
| 3004 | Generate a @code{dist-tarZ} target as well as the ordinary @code{dist} | 
|---|
| 3005 | target.  This new target will create a compressed tar archive of the | 
|---|
| 3006 | distribution; a traditional @code{tar} and @code{compress} will be | 
|---|
| 3007 | assumed.  Warning: if you are actually using @code{GNU tar}, then the | 
|---|
| 3008 | generated archive might contain nonportable constructs. | 
|---|
| 3009 | @trindex dist-tarZ | 
|---|
| 3010 |  | 
|---|
| 3011 | @item @code{no-dependencies} | 
|---|
| 3012 | @cindex Option, no-dependencies | 
|---|
| 3013 | This is similar to using @samp{--include-deps} on the command line, but | 
|---|
| 3014 | is useful for those situations where you don't have the necessary bits | 
|---|
| 3015 | to make automatic dependency tracking work @xref{Dependencies}.  In this | 
|---|
| 3016 | case the effect is to effectively disable automatic dependency tracking. | 
|---|
| 3017 |  | 
|---|
| 3018 | @item @code{no-installinfo} | 
|---|
| 3019 | @cindex Option, no-installinfo | 
|---|
| 3020 | The generated @file{Makefile.in} will not cause info pages to be built | 
|---|
| 3021 | or installed by default.  However, @code{info} and @code{install-info} | 
|---|
| 3022 | targets will still be available.  This option is disallowed at | 
|---|
| 3023 | @samp{GNU} strictness and above. | 
|---|
| 3024 | @trindex info | 
|---|
| 3025 | @trindex install-info | 
|---|
| 3026 |  | 
|---|
| 3027 | @item @code{no-installman} | 
|---|
| 3028 | @cindex Option, no-installman | 
|---|
| 3029 | The generated @file{Makefile.in} will not cause man pages to be | 
|---|
| 3030 | installed by default.  However, an @code{install-man} target will still | 
|---|
| 3031 | be available for optional installation.  This option is disallowed at | 
|---|
| 3032 | @samp{GNU} strictness and above. | 
|---|
| 3033 | @trindex install-man | 
|---|
| 3034 |  | 
|---|
| 3035 | @item @code{no-texinfo.tex} | 
|---|
| 3036 | @cindex Option, no-texinfo | 
|---|
| 3037 | Don't require @file{texinfo.tex}, even if there are texinfo files in | 
|---|
| 3038 | this directory. | 
|---|
| 3039 |  | 
|---|
| 3040 | @item @code{readme-alpha} | 
|---|
| 3041 | @cindex Option, readme-alpha | 
|---|
| 3042 | If this release is an alpha release, and the file @file{README-alpha} | 
|---|
| 3043 | exists, then it will be added to the distribution.  If this option is | 
|---|
| 3044 | given, version numbers are expected to follow one of two forms.  The | 
|---|
| 3045 | first form is @samp{@var{MAJOR}.@var{MINOR}.@var{ALPHA}}, where each | 
|---|
| 3046 | element is a number; the final period and number should be left off for | 
|---|
| 3047 | non-alpha releases.  The second form is | 
|---|
| 3048 | @samp{@var{MAJOR}.@var{MINOR}@var{ALPHA}}, where @var{ALPHA} is a | 
|---|
| 3049 | letter; it should be omitted for non-alpha releases. | 
|---|
| 3050 |  | 
|---|
| 3051 | @item @var{version} | 
|---|
| 3052 | @cindex Option, version | 
|---|
| 3053 | A version number (e.g. @samp{0.30}) can be specified.  If Automake is not | 
|---|
| 3054 | newer than the version specified, creation of the @file{Makefile.in} | 
|---|
| 3055 | will be suppressed. | 
|---|
| 3056 | @end table | 
|---|
| 3057 |  | 
|---|
| 3058 | Unrecognized options are diagnosed by @code{automake}. | 
|---|
| 3059 |  | 
|---|
| 3060 |  | 
|---|
| 3061 | @node Miscellaneous, Include, Options, Top | 
|---|
| 3062 | @chapter Miscellaneous Rules | 
|---|
| 3063 |  | 
|---|
| 3064 | There are a few rules and variables that didn't fit anywhere else. | 
|---|
| 3065 |  | 
|---|
| 3066 | @menu | 
|---|
| 3067 | * Tags::                        Interfacing to etags and mkid | 
|---|
| 3068 | * Suffixes::                    Handling new file extensions | 
|---|
| 3069 | @end menu | 
|---|
| 3070 |  | 
|---|
| 3071 |  | 
|---|
| 3072 | @node Tags, Suffixes, Miscellaneous, Miscellaneous | 
|---|
| 3073 | @section Interfacing to @code{etags} | 
|---|
| 3074 |  | 
|---|
| 3075 | @cindex TAGS support | 
|---|
| 3076 |  | 
|---|
| 3077 | Automake will generate rules to generate @file{TAGS} files for use with | 
|---|
| 3078 | GNU Emacs under some circumstances. | 
|---|
| 3079 |  | 
|---|
| 3080 | If any C, C++ or Fortran 77 source code or headers are present, then | 
|---|
| 3081 | @code{tags} and @code{TAGS} targets will be generated for the directory. | 
|---|
| 3082 | @trindex tags | 
|---|
| 3083 |  | 
|---|
| 3084 | At the topmost directory of a multi-directory package, a @code{tags} | 
|---|
| 3085 | target file will be generated which, when run, will generate a | 
|---|
| 3086 | @file{TAGS} file that includes by reference all @file{TAGS} files from | 
|---|
| 3087 | subdirectories. | 
|---|
| 3088 |  | 
|---|
| 3089 | Also, if the variable @code{ETAGS_ARGS} is defined, a @code{tags} target | 
|---|
| 3090 | will be generated.  This variable is intended for use in directories | 
|---|
| 3091 | which contain taggable source that @code{etags} does not understand. | 
|---|
| 3092 | @vindex ETAGS_ARGS | 
|---|
| 3093 |  | 
|---|
| 3094 | Here is how Automake generates tags for its source, and for nodes in its | 
|---|
| 3095 | Texinfo file: | 
|---|
| 3096 |  | 
|---|
| 3097 | @example | 
|---|
| 3098 | ETAGS_ARGS = automake.in --lang=none \ | 
|---|
| 3099 | --regex='/^@@node[ \t]+\([^,]+\)/\1/' automake.texi | 
|---|
| 3100 | @end example | 
|---|
| 3101 |  | 
|---|
| 3102 | If you add filenames to @samp{ETAGS_ARGS}, you will probably also | 
|---|
| 3103 | want to set @samp{TAGS_DEPENDENCIES}.  The contents of this variable | 
|---|
| 3104 | are added directly to the dependencies for the @code{tags} target. | 
|---|
| 3105 | @vindex TAGS_DEPENDENCIES | 
|---|
| 3106 |  | 
|---|
| 3107 | Automake will also generate an @code{ID} target which will run | 
|---|
| 3108 | @code{mkid} on the source.  This is only supported on a | 
|---|
| 3109 | directory-by-directory basis. | 
|---|
| 3110 | @trindex id | 
|---|
| 3111 |  | 
|---|
| 3112 |  | 
|---|
| 3113 | @node Suffixes,  , Tags, Miscellaneous | 
|---|
| 3114 | @section Handling new file extensions | 
|---|
| 3115 |  | 
|---|
| 3116 | @cindex Adding new SUFFIXES | 
|---|
| 3117 | @cindex SUFFIXES, adding | 
|---|
| 3118 |  | 
|---|
| 3119 | It is sometimes useful to introduce a new implicit rule to handle a file | 
|---|
| 3120 | type that Automake does not know about.  If this is done, you must | 
|---|
| 3121 | notify GNU Make of the new suffixes.  This can be done by putting a list | 
|---|
| 3122 | of new suffixes in the @code{SUFFIXES} variable. | 
|---|
| 3123 | @vindex SUFFIXES | 
|---|
| 3124 |  | 
|---|
| 3125 | For instance, currently Automake does not provide any Java support.  If | 
|---|
| 3126 | you wrote a macro to generate @samp{.class} files from @samp{.java} | 
|---|
| 3127 | source files, you would also need to add these suffixes to the list: | 
|---|
| 3128 |  | 
|---|
| 3129 | @example | 
|---|
| 3130 | SUFFIXES = .java .class | 
|---|
| 3131 | @end example | 
|---|
| 3132 |  | 
|---|
| 3133 |  | 
|---|
| 3134 | @node Include, Conditionals, Miscellaneous, Top | 
|---|
| 3135 | @chapter Include | 
|---|
| 3136 |  | 
|---|
| 3137 | @cmindex include | 
|---|
| 3138 | To include another file (perhaps for common rules), | 
|---|
| 3139 | the following syntax is supported: | 
|---|
| 3140 |  | 
|---|
| 3141 | include ($(srcdir)|$(top_srcdir))/filename | 
|---|
| 3142 |  | 
|---|
| 3143 | Using files in the current directory: | 
|---|
| 3144 | @example | 
|---|
| 3145 | include $(srcdir)/Makefile.extra | 
|---|
| 3146 | @end example | 
|---|
| 3147 |  | 
|---|
| 3148 | @example | 
|---|
| 3149 | include Makefile.generated | 
|---|
| 3150 | @end example | 
|---|
| 3151 |  | 
|---|
| 3152 | Using a file in the top level directory: | 
|---|
| 3153 | @example | 
|---|
| 3154 | include $(top_srcdir)/filename | 
|---|
| 3155 | @end example | 
|---|
| 3156 |  | 
|---|
| 3157 |  | 
|---|
| 3158 | @node Conditionals, Gnits, Include, Top | 
|---|
| 3159 | @chapter Conditionals | 
|---|
| 3160 |  | 
|---|
| 3161 | @cindex Conditionals | 
|---|
| 3162 |  | 
|---|
| 3163 | Automake supports a simple type of conditionals. | 
|---|
| 3164 |  | 
|---|
| 3165 | @cvindex AM_CONDITIONAL | 
|---|
| 3166 | Before using a conditional, you must define it by using | 
|---|
| 3167 | @code{AM_CONDITIONAL} in the @code{configure.in} file (@pxref{Macros}). | 
|---|
| 3168 | The @code{AM_CONDITIONAL} macro takes two arguments. | 
|---|
| 3169 |  | 
|---|
| 3170 | The first argument to @code{AM_CONDITIONAL} is the name of the | 
|---|
| 3171 | conditional.  This should be a simple string starting with a letter and | 
|---|
| 3172 | containing only letters, digits, and underscores. | 
|---|
| 3173 |  | 
|---|
| 3174 | The second argument to @code{AM_CONDITIONAL} is a shell condition, | 
|---|
| 3175 | suitable for use in a shell @code{if} statement.  The condition is | 
|---|
| 3176 | evaluated when @code{configure} is run. | 
|---|
| 3177 |  | 
|---|
| 3178 | @cindex --enable-debug, example | 
|---|
| 3179 | @cindex Example conditional --enable-debug | 
|---|
| 3180 | @cindex Conditional example,  --enable-debug | 
|---|
| 3181 |  | 
|---|
| 3182 | Conditionals typically depend upon options which the user provides to | 
|---|
| 3183 | the @code{configure} script.  Here is an example of how to write a | 
|---|
| 3184 | conditional which is true if the user uses the @samp{--enable-debug} | 
|---|
| 3185 | option. | 
|---|
| 3186 |  | 
|---|
| 3187 | @example | 
|---|
| 3188 | AC_ARG_ENABLE(debug, | 
|---|
| 3189 | [  --enable-debug    Turn on debugging], | 
|---|
| 3190 | [case "$@{enableval@}" in | 
|---|
| 3191 | yes) debug=true ;; | 
|---|
| 3192 | no)  debug=false ;; | 
|---|
| 3193 | *) AC_MSG_ERROR(bad value $@{enableval@} for --enable-debug) ;; | 
|---|
| 3194 | esac],[debug=false]) | 
|---|
| 3195 | AM_CONDITIONAL(DEBUG, test x$debug = xtrue) | 
|---|
| 3196 | @end example | 
|---|
| 3197 |  | 
|---|
| 3198 | Here is an example of how to use that conditional in @file{Makefile.am}: | 
|---|
| 3199 |  | 
|---|
| 3200 | @cmindex if | 
|---|
| 3201 | @cmindex endif | 
|---|
| 3202 | @cmindex else | 
|---|
| 3203 |  | 
|---|
| 3204 | @example | 
|---|
| 3205 | if DEBUG | 
|---|
| 3206 | DBG = debug | 
|---|
| 3207 | else | 
|---|
| 3208 | DBG = | 
|---|
| 3209 | endif | 
|---|
| 3210 | noinst_PROGRAMS = $(DBG) | 
|---|
| 3211 | @end example | 
|---|
| 3212 |  | 
|---|
| 3213 | This trivial example could also be handled using EXTRA_PROGRAMS | 
|---|
| 3214 | (@pxref{A Program}). | 
|---|
| 3215 |  | 
|---|
| 3216 | You may only test a single variable in an @code{if} statement.  The | 
|---|
| 3217 | @code{else} statement may be omitted.  Conditionals may be nested to any | 
|---|
| 3218 | depth. | 
|---|
| 3219 |  | 
|---|
| 3220 | Note that conditionals in Automake are not the same as conditionals in | 
|---|
| 3221 | GNU Make.  Automake conditionals are checked at configure time by the | 
|---|
| 3222 | @file{configure} script, and affect the translation from | 
|---|
| 3223 | @file{Makefile.in} to @file{Makefile}.  They are based on options passed | 
|---|
| 3224 | to @file{configure} and on results that @file{configure} has discovered | 
|---|
| 3225 | about the host system.  GNU Make conditionals are checked at @code{make} | 
|---|
| 3226 | time, and are based on variables passed to the make program or defined | 
|---|
| 3227 | in the @file{Makefile}. | 
|---|
| 3228 |  | 
|---|
| 3229 | Automake conditionals will work with any make program. | 
|---|
| 3230 |  | 
|---|
| 3231 |  | 
|---|
| 3232 | @node Gnits, Cygnus, Conditionals, Top | 
|---|
| 3233 | @chapter The effect of @code{--gnu} and @code{--gnits} | 
|---|
| 3234 |  | 
|---|
| 3235 | @cindex --gnu, required files | 
|---|
| 3236 | @cindex --gnu, complete description | 
|---|
| 3237 |  | 
|---|
| 3238 | The @samp{--gnu} option (or @samp{gnu} in the @samp{AUTOMAKE_OPTIONS} | 
|---|
| 3239 | variable) causes @code{automake} to check the following: | 
|---|
| 3240 |  | 
|---|
| 3241 | @itemize @bullet | 
|---|
| 3242 | @item | 
|---|
| 3243 | The files @file{INSTALL}, @file{NEWS}, @file{README}, @file{COPYING}, | 
|---|
| 3244 | @file{AUTHORS}, and @file{ChangeLog} are required at the topmost | 
|---|
| 3245 | directory of the package. | 
|---|
| 3246 |  | 
|---|
| 3247 | @item | 
|---|
| 3248 | The options @samp{no-installman} and @samp{no-installinfo} are | 
|---|
| 3249 | prohibited. | 
|---|
| 3250 | @end itemize | 
|---|
| 3251 |  | 
|---|
| 3252 | Note that this option will be extended in the future to do even more | 
|---|
| 3253 | checking; it is advisable to be familiar with the precise requirements | 
|---|
| 3254 | of the GNU standards.  Also, @samp{--gnu} can require certain | 
|---|
| 3255 | non-standard GNU programs to exist for use by various maintainer-only | 
|---|
| 3256 | targets; for instance in the future @code{pathchk} might be required for | 
|---|
| 3257 | @samp{make dist}. | 
|---|
| 3258 |  | 
|---|
| 3259 | @cindex --gnits, complete description | 
|---|
| 3260 |  | 
|---|
| 3261 | The @samp{--gnits} option does everything that @samp{--gnu} does, and | 
|---|
| 3262 | checks the following as well: | 
|---|
| 3263 |  | 
|---|
| 3264 | @itemize @bullet | 
|---|
| 3265 | @item | 
|---|
| 3266 | @samp{make dist} will check to make sure the @file{NEWS} file has been | 
|---|
| 3267 | updated to the current version. | 
|---|
| 3268 |  | 
|---|
| 3269 | @item | 
|---|
| 3270 | The file @file{COPYING.LIB} is prohibited.  The LGPL is apparently | 
|---|
| 3271 | considered a failed experiment. | 
|---|
| 3272 |  | 
|---|
| 3273 | @item | 
|---|
| 3274 | @samp{VERSION} is checked to make sure its format complies with Gnits | 
|---|
| 3275 | standards. | 
|---|
| 3276 | @c FIXME xref when standards are finished | 
|---|
| 3277 |  | 
|---|
| 3278 | @item | 
|---|
| 3279 | @cindex README-alpha | 
|---|
| 3280 | If @samp{VERSION} indicates that this is an alpha release, and the file | 
|---|
| 3281 | @file{README-alpha} appears in the topmost directory of a package, then | 
|---|
| 3282 | it is included in the distribution.  This is done in @samp{--gnits} | 
|---|
| 3283 | mode, and no other, because this mode is the only one where version | 
|---|
| 3284 | number formats are constrained, and hence the only mode where Automake | 
|---|
| 3285 | can automatically determine whether @file{README-alpha} should be | 
|---|
| 3286 | included. | 
|---|
| 3287 |  | 
|---|
| 3288 | @item | 
|---|
| 3289 | The file @file{THANKS} is required. | 
|---|
| 3290 | @end itemize | 
|---|
| 3291 |  | 
|---|
| 3292 |  | 
|---|
| 3293 | @node Cygnus, Extending, Gnits, Top | 
|---|
| 3294 | @chapter The effect of @code{--cygnus} | 
|---|
| 3295 |  | 
|---|
| 3296 | @cindex Cygnus strictness | 
|---|
| 3297 |  | 
|---|
| 3298 | Cygnus Solutions has slightly different rules for how a | 
|---|
| 3299 | @file{Makefile.in} is to be constructed.  Passing @samp{--cygnus} to | 
|---|
| 3300 | @code{automake} will cause any generated @file{Makefile.in} to comply | 
|---|
| 3301 | with Cygnus rules. | 
|---|
| 3302 |  | 
|---|
| 3303 | Here are the precise effects of @samp{--cygnus}: | 
|---|
| 3304 |  | 
|---|
| 3305 | @itemize @bullet | 
|---|
| 3306 | @item | 
|---|
| 3307 | Info files are always created in the build directory, and not in the | 
|---|
| 3308 | source directory. | 
|---|
| 3309 |  | 
|---|
| 3310 | @item | 
|---|
| 3311 | @file{texinfo.tex} is not required if a Texinfo source file is | 
|---|
| 3312 | specified.  The assumption is that the file will be supplied, but in a | 
|---|
| 3313 | place that Automake cannot find.  This assumption is an artifact of how | 
|---|
| 3314 | Cygnus packages are typically bundled. | 
|---|
| 3315 |  | 
|---|
| 3316 | @item | 
|---|
| 3317 | @samp{make dist} will look for files in the build directory as well as | 
|---|
| 3318 | the source directory.  This is required to support putting info files | 
|---|
| 3319 | into the build directory. | 
|---|
| 3320 |  | 
|---|
| 3321 | @item | 
|---|
| 3322 | Certain tools will be searched for in the build tree as well as in the | 
|---|
| 3323 | user's @samp{PATH}.  These tools are @code{runtest}, @code{expect}, | 
|---|
| 3324 | @code{makeinfo} and @code{texi2dvi}. | 
|---|
| 3325 |  | 
|---|
| 3326 | @item | 
|---|
| 3327 | @code{--foreign} is implied. | 
|---|
| 3328 |  | 
|---|
| 3329 | @item | 
|---|
| 3330 | The options @samp{no-installinfo} and @samp{no-dependencies} are | 
|---|
| 3331 | implied. | 
|---|
| 3332 |  | 
|---|
| 3333 | @item | 
|---|
| 3334 | The macros @samp{AM_MAINTAINER_MODE} and @samp{AM_CYGWIN32} are | 
|---|
| 3335 | required. | 
|---|
| 3336 |  | 
|---|
| 3337 | @item | 
|---|
| 3338 | The @code{check} target doesn't depend on @code{all}. | 
|---|
| 3339 | @end itemize | 
|---|
| 3340 |  | 
|---|
| 3341 | GNU maintainers are advised to use @samp{gnu} strictness in preference | 
|---|
| 3342 | to the special Cygnus mode. | 
|---|
| 3343 |  | 
|---|
| 3344 |  | 
|---|
| 3345 | @node Extending, Distributing, Cygnus, Top | 
|---|
| 3346 | @chapter When Automake Isn't Enough | 
|---|
| 3347 |  | 
|---|
| 3348 | Automake's implicit copying semantics means that many problems can be | 
|---|
| 3349 | worked around by simply adding some @code{make} targets and rules to | 
|---|
| 3350 | @file{Makefile.in}.  Automake will ignore these additions. | 
|---|
| 3351 |  | 
|---|
| 3352 | @cindex -local targets | 
|---|
| 3353 | @cindex local targets | 
|---|
| 3354 |  | 
|---|
| 3355 | There are some caveats to doing this.  Although you can overload a | 
|---|
| 3356 | target already used by Automake, it is often inadvisable, particularly | 
|---|
| 3357 | in the topmost directory of a non-flat package.  However, various useful | 
|---|
| 3358 | targets have a @samp{-local} version you can specify in your | 
|---|
| 3359 | @file{Makefile.in}.  Automake will supplement the standard target with | 
|---|
| 3360 | these user-supplied targets. | 
|---|
| 3361 |  | 
|---|
| 3362 | @trindex  all-local | 
|---|
| 3363 | @trindex  info-local | 
|---|
| 3364 | @trindex  dvi-local | 
|---|
| 3365 | @trindex  check-local | 
|---|
| 3366 | @trindex  install-data-local | 
|---|
| 3367 | @trindex  install-exec-local | 
|---|
| 3368 | @trindex  uninstall-local | 
|---|
| 3369 | @trindex  mostlyclean-local | 
|---|
| 3370 | @trindex  clean-local | 
|---|
| 3371 | @trindex  distclean-local | 
|---|
| 3372 |  | 
|---|
| 3373 | The targets that support a local version are @code{all}, @code{info}, | 
|---|
| 3374 | @code{dvi}, @code{check}, @code{install-data}, @code{install-exec}, | 
|---|
| 3375 | @code{uninstall}, and the various @code{clean} targets | 
|---|
| 3376 | (@code{mostlyclean}, @code{clean}, @code{distclean}, and | 
|---|
| 3377 | @code{maintainer-clean}).  Note that there are no | 
|---|
| 3378 | @code{uninstall-exec-local} or @code{uninstall-data-local} targets; just | 
|---|
| 3379 | use @code{uninstall-local}.  It doesn't make sense to uninstall just | 
|---|
| 3380 | data or just executables. | 
|---|
| 3381 | @trindex all | 
|---|
| 3382 | @trindex info | 
|---|
| 3383 | @trindex dvi | 
|---|
| 3384 | @trindex check | 
|---|
| 3385 | @trindex install-data | 
|---|
| 3386 | @trindex install-exec | 
|---|
| 3387 | @trindex uninstall | 
|---|
| 3388 |  | 
|---|
| 3389 | For instance, here is one way to install a file in @file{/etc}: | 
|---|
| 3390 |  | 
|---|
| 3391 | @example | 
|---|
| 3392 | install-data-local: | 
|---|
| 3393 | $(INSTALL_DATA) $(srcdir)/afile /etc/afile | 
|---|
| 3394 | @end example | 
|---|
| 3395 |  | 
|---|
| 3396 | @cindex -hook targets | 
|---|
| 3397 | @cindex hook targets | 
|---|
| 3398 |  | 
|---|
| 3399 | Some targets also have a way to run another target, called a @dfn{hook}, | 
|---|
| 3400 | after their work is done.  The hook is named after the principal target, | 
|---|
| 3401 | with @samp{-hook} appended.  The targets allowing hooks are | 
|---|
| 3402 | @code{install-data}, @code{install-exec}, @code{dist}, and | 
|---|
| 3403 | @code{distcheck}. | 
|---|
| 3404 | @trindex install-data-hook | 
|---|
| 3405 | @trindex install-exec-hook | 
|---|
| 3406 | @trindex dist-hook | 
|---|
| 3407 |  | 
|---|
| 3408 | For instance, here is how to create a hard link to an installed program: | 
|---|
| 3409 |  | 
|---|
| 3410 | @example | 
|---|
| 3411 | install-exec-hook: | 
|---|
| 3412 | ln $(bindir)/program $(bindir)/proglink | 
|---|
| 3413 | @end example | 
|---|
| 3414 |  | 
|---|
| 3415 | @c FIXME should include discussion of variables you can use in these | 
|---|
| 3416 | @c rules | 
|---|
| 3417 |  | 
|---|
| 3418 |  | 
|---|
| 3419 | @node Distributing, Future, Extending, Top | 
|---|
| 3420 | @chapter Distributing @file{Makefile.in}s | 
|---|
| 3421 |  | 
|---|
| 3422 | Automake places no restrictions on the distribution of the resulting | 
|---|
| 3423 | @file{Makefile.in}s.  We still encourage software authors to distribute | 
|---|
| 3424 | their work under terms like those of the GPL, but doing so is not | 
|---|
| 3425 | required to use Automake. | 
|---|
| 3426 |  | 
|---|
| 3427 | Some of the files that can be automatically installed via the | 
|---|
| 3428 | @code{--add-missing} switch do fall under the GPL; examine each file | 
|---|
| 3429 | to see. | 
|---|
| 3430 |  | 
|---|
| 3431 |  | 
|---|
| 3432 | @node Future, Macro and Variable Index, Distributing, Top | 
|---|
| 3433 | @chapter Some ideas for the future | 
|---|
| 3434 |  | 
|---|
| 3435 | @cindex Future directions | 
|---|
| 3436 |  | 
|---|
| 3437 | Here are some things that might happen in the future: | 
|---|
| 3438 |  | 
|---|
| 3439 | @itemize @bullet | 
|---|
| 3440 | @item | 
|---|
| 3441 | HTML support. | 
|---|
| 3442 |  | 
|---|
| 3443 | @item | 
|---|
| 3444 | The output will be cleaned up.  For instance, only variables which are | 
|---|
| 3445 | actually used will appear in the generated @file{Makefile.in}. | 
|---|
| 3446 |  | 
|---|
| 3447 | @item | 
|---|
| 3448 | There will be support for automatically recoding a distribution.  The | 
|---|
| 3449 | intent is to allow a maintainer to use whatever character set is most | 
|---|
| 3450 | convenient locally, but for all distributions to be Unicode or | 
|---|
| 3451 | @w{ISO 10646} with the UTF-8 encoding. | 
|---|
| 3452 |  | 
|---|
| 3453 | @cindex Guile rewrite | 
|---|
| 3454 |  | 
|---|
| 3455 | @item | 
|---|
| 3456 | Rewrite in Guile.  This won't happen in the near future, but it will | 
|---|
| 3457 | eventually happen. | 
|---|
| 3458 | @end itemize | 
|---|
| 3459 |  | 
|---|
| 3460 |  | 
|---|
| 3461 | @page | 
|---|
| 3462 | @node Macro and Variable Index, General Index, Future, Top | 
|---|
| 3463 | @unnumbered Macro and Variable Index | 
|---|
| 3464 |  | 
|---|
| 3465 | @printindex vr | 
|---|
| 3466 |  | 
|---|
| 3467 |  | 
|---|
| 3468 | @page | 
|---|
| 3469 | @node General Index,  , Macro and Variable Index, Top | 
|---|
| 3470 | @unnumbered General Index | 
|---|
| 3471 |  | 
|---|
| 3472 | @printindex cp | 
|---|
| 3473 |  | 
|---|
| 3474 |  | 
|---|
| 3475 | @page | 
|---|
| 3476 | @contents | 
|---|
| 3477 | @bye | 
|---|