| 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 Software development | 
|---|
| 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 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 | 
|---|
| 24 | Free Software Foundation, Inc. | 
|---|
| 25 |  | 
|---|
| 26 | Permission is granted to make and distribute verbatim copies of | 
|---|
| 27 | this manual provided the copyright notice and this permission notice | 
|---|
| 28 | are preserved on all copies. | 
|---|
| 29 |  | 
|---|
| 30 | @ignore | 
|---|
| 31 | Permission is granted to process this file through TeX and print the | 
|---|
| 32 | results, provided the printed document carries copying permission | 
|---|
| 33 | notice identical to this one except for the removal of this paragraph | 
|---|
| 34 |  | 
|---|
| 35 |  | 
|---|
| 36 | @end ignore | 
|---|
| 37 | Permission is granted to copy and distribute modified versions of this | 
|---|
| 38 | manual under the conditions for verbatim copying, provided that the entire | 
|---|
| 39 | resulting derived work is distributed under the terms of a permission | 
|---|
| 40 | notice identical to this one. | 
|---|
| 41 |  | 
|---|
| 42 | Permission is granted to copy and distribute translations of this manual | 
|---|
| 43 | into another language, under the above conditions for modified versions, | 
|---|
| 44 | except that this permission notice may be stated in a translation approved | 
|---|
| 45 | by the Foundation. | 
|---|
| 46 | @end ifinfo | 
|---|
| 47 |  | 
|---|
| 48 |  | 
|---|
| 49 | @titlepage | 
|---|
| 50 | @title GNU Automake | 
|---|
| 51 | @subtitle For version @value{VERSION}, @value{UPDATED} | 
|---|
| 52 | @author David MacKenzie and Tom Tromey | 
|---|
| 53 |  | 
|---|
| 54 | @page | 
|---|
| 55 | @vskip 0pt plus 1filll | 
|---|
| 56 | Copyright @copyright{} 1995, 1996, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. | 
|---|
| 57 | @sp 2 | 
|---|
| 58 | This is the first edition of the GNU Automake documentation,@* | 
|---|
| 59 | and is consistent with GNU Automake @value{VERSION}.@* | 
|---|
| 60 | @sp 2 | 
|---|
| 61 | Published by the Free Software Foundation @* | 
|---|
| 62 | 59 Temple Place - Suite 330, @* | 
|---|
| 63 | Boston, MA 02111-1307 USA @* | 
|---|
| 64 |  | 
|---|
| 65 | Permission is granted to make and distribute verbatim copies of | 
|---|
| 66 | this manual provided the copyright notice and this permission notice | 
|---|
| 67 | are preserved on all copies. | 
|---|
| 68 |  | 
|---|
| 69 | Permission is granted to copy and distribute modified versions of this | 
|---|
| 70 | manual under the conditions for verbatim copying, provided that the entire | 
|---|
| 71 | resulting derived work is distributed under the terms of a permission | 
|---|
| 72 | notice identical to this one. | 
|---|
| 73 |  | 
|---|
| 74 | Permission is granted to copy and distribute translations of this manual | 
|---|
| 75 | into another language, under the above conditions for modified versions, | 
|---|
| 76 | except that this permission notice may be stated in a translation | 
|---|
| 77 | approved by the Free Software Foundation. | 
|---|
| 78 | @end titlepage | 
|---|
| 79 |  | 
|---|
| 80 | @c Define an index of configure output variables. | 
|---|
| 81 | @defcodeindex ov | 
|---|
| 82 | @c Define an index of configure variables. | 
|---|
| 83 | @defcodeindex cv | 
|---|
| 84 | @c Define an index of options. | 
|---|
| 85 | @defcodeindex op | 
|---|
| 86 | @c Define an index of targets. | 
|---|
| 87 | @defcodeindex tr | 
|---|
| 88 | @c Define an index of commands. | 
|---|
| 89 | @defcodeindex cm | 
|---|
| 90 |  | 
|---|
| 91 | @c Put the macros and variables into their own index. | 
|---|
| 92 | @c @syncodeindex fn cp | 
|---|
| 93 | @syncodeindex ov vr | 
|---|
| 94 | @syncodeindex cv vr | 
|---|
| 95 | @syncodeindex fn vr | 
|---|
| 96 |  | 
|---|
| 97 | @c Put everything else into one index (arbitrarily chosen to be the concept index). | 
|---|
| 98 | @syncodeindex op cp | 
|---|
| 99 | @syncodeindex tr cp | 
|---|
| 100 | @syncodeindex cm cp | 
|---|
| 101 |  | 
|---|
| 102 | @ifnottex | 
|---|
| 103 | @node Top, Introduction, (dir), (dir) | 
|---|
| 104 | @comment  node-name,  next,  previous,  up | 
|---|
| 105 | @top GNU Automake | 
|---|
| 106 |  | 
|---|
| 107 | This file documents the GNU Automake package.  Automake is a program | 
|---|
| 108 | which creates GNU standards-compliant Makefiles from template files. | 
|---|
| 109 | This edition documents version @value{VERSION}. | 
|---|
| 110 |  | 
|---|
| 111 | @menu | 
|---|
| 112 | * Introduction::                Automake's purpose | 
|---|
| 113 | * Generalities::                General ideas | 
|---|
| 114 | * Examples::                    Some example packages | 
|---|
| 115 | * Invoking Automake::           Creating a Makefile.in | 
|---|
| 116 | * configure::                   Scanning configure.ac or configure.in | 
|---|
| 117 | * Top level::                   The top-level Makefile.am | 
|---|
| 118 | * Alternative::                 An alternative approach to subdirectories | 
|---|
| 119 | * Rebuilding::                  Automatic rebuilding of Makefile | 
|---|
| 120 | * Programs::                    Building programs and libraries | 
|---|
| 121 | * Other objects::               Other derived objects | 
|---|
| 122 | * Other GNU Tools::             Other GNU Tools | 
|---|
| 123 | * Documentation::               Building documentation | 
|---|
| 124 | * Install::                     What gets installed | 
|---|
| 125 | * Clean::                       What gets cleaned | 
|---|
| 126 | * Dist::                        What goes in a distribution | 
|---|
| 127 | * Tests::                       Support for test suites | 
|---|
| 128 | * Options::                     Changing Automake's behavior | 
|---|
| 129 | * Miscellaneous::               Miscellaneous rules | 
|---|
| 130 | * Include::                     Including extra files in an Automake template. | 
|---|
| 131 | * Conditionals::                Conditionals | 
|---|
| 132 | * Gnits::                       The effect of @code{--gnu} and @code{--gnits} | 
|---|
| 133 | * Cygnus::                      The effect of @code{--cygnus} | 
|---|
| 134 | * Extending::                   Extending Automake | 
|---|
| 135 | * Distributing::                Distributing the Makefile.in | 
|---|
| 136 | * API versioning::              About compatibility between Automake versions | 
|---|
| 137 | * FAQ::                         Frequently Asked Questions | 
|---|
| 138 | * Macro and Variable Index:: | 
|---|
| 139 | * General Index:: | 
|---|
| 140 | @end menu | 
|---|
| 141 |  | 
|---|
| 142 | @end ifnottex | 
|---|
| 143 |  | 
|---|
| 144 |  | 
|---|
| 145 | @node Introduction, Generalities, Top, Top | 
|---|
| 146 | @chapter Introduction | 
|---|
| 147 |  | 
|---|
| 148 | Automake is a tool for automatically generating @file{Makefile.in}s from | 
|---|
| 149 | files called @file{Makefile.am}.  Each @file{Makefile.am} is basically a | 
|---|
| 150 | series of @code{make} variable definitions@footnote{These variables are | 
|---|
| 151 | also called @dfn{make macros} in Make terminology, however in this | 
|---|
| 152 | manual we reserve the term @dfn{macro} for Autoconf's macros.}, with | 
|---|
| 153 | rules being thrown in occasionally.  The generated @file{Makefile.in}s | 
|---|
| 154 | are compliant with the GNU Makefile standards. | 
|---|
| 155 |  | 
|---|
| 156 | @cindex GNU Makefile standards | 
|---|
| 157 |  | 
|---|
| 158 | The GNU Makefile Standards Document | 
|---|
| 159 | (@pxref{Makefile Conventions, , , standards, The GNU Coding Standards}) | 
|---|
| 160 | is long, complicated, and subject to change.  The goal of Automake is to | 
|---|
| 161 | remove the burden of Makefile maintenance from the back of the | 
|---|
| 162 | individual GNU maintainer (and put it on the back of the Automake | 
|---|
| 163 | maintainer). | 
|---|
| 164 |  | 
|---|
| 165 | The typical Automake input file is simply a series of variable definitions. | 
|---|
| 166 | Each such file is processed to create a @file{Makefile.in}.  There | 
|---|
| 167 | should generally be one @file{Makefile.am} per directory of a project. | 
|---|
| 168 |  | 
|---|
| 169 | @cindex Constraints of Automake | 
|---|
| 170 | @cindex Automake constraints | 
|---|
| 171 |  | 
|---|
| 172 | Automake does constrain a project in certain ways; for instance it | 
|---|
| 173 | assumes that the project uses Autoconf (@pxref{Top, , Introduction, | 
|---|
| 174 | autoconf, The Autoconf Manual}), and enforces certain restrictions on | 
|---|
| 175 | the @file{configure.in} contents@footnote{Autoconf 2.50 promotes | 
|---|
| 176 | @file{configure.ac} over @file{configure.in}.  The rest of this | 
|---|
| 177 | documentation will refer to @file{configure.in} as this use is not yet | 
|---|
| 178 | spread, but Automake supports @file{configure.ac} too.}. | 
|---|
| 179 |  | 
|---|
| 180 | @cindex Automake requirements | 
|---|
| 181 | @cindex Requirements, Automake | 
|---|
| 182 |  | 
|---|
| 183 | Automake requires @code{perl} in order to generate the | 
|---|
| 184 | @file{Makefile.in}s.  However, the distributions created by Automake are | 
|---|
| 185 | fully GNU standards-compliant, and do not require @code{perl} in order | 
|---|
| 186 | to be built. | 
|---|
| 187 |  | 
|---|
| 188 | @cindex BUGS, reporting | 
|---|
| 189 | @cindex Reporting BUGS | 
|---|
| 190 | @cindex E-mail, bug reports | 
|---|
| 191 |  | 
|---|
| 192 | Mail suggestions and bug reports for Automake to | 
|---|
| 193 | @email{bug-automake@@gnu.org}. | 
|---|
| 194 |  | 
|---|
| 195 |  | 
|---|
| 196 | @node Generalities, Examples, Introduction, Top | 
|---|
| 197 | @chapter General ideas | 
|---|
| 198 |  | 
|---|
| 199 | The following sections cover a few basic ideas that will help you | 
|---|
| 200 | understand how Automake works. | 
|---|
| 201 |  | 
|---|
| 202 | @menu | 
|---|
| 203 | * General Operation::           General operation of Automake | 
|---|
| 204 | * Strictness::                  Standards conformance checking | 
|---|
| 205 | * Uniform::                     The Uniform Naming Scheme | 
|---|
| 206 | * Canonicalization::            How derived variables are named | 
|---|
| 207 | * User Variables::              Variables reserved for the user | 
|---|
| 208 | * Auxiliary Programs::          Programs automake might require | 
|---|
| 209 | @end menu | 
|---|
| 210 |  | 
|---|
| 211 |  | 
|---|
| 212 | @node General Operation, Strictness, Generalities, Generalities | 
|---|
| 213 | @section General Operation | 
|---|
| 214 |  | 
|---|
| 215 | Automake works by reading a @file{Makefile.am} and generating a | 
|---|
| 216 | @file{Makefile.in}.  Certain variables and targets defined in the | 
|---|
| 217 | @file{Makefile.am} instruct Automake to generate more specialized code; | 
|---|
| 218 | for instance, a @samp{bin_PROGRAMS} variable definition will cause targets | 
|---|
| 219 | for compiling and linking programs to be generated. | 
|---|
| 220 |  | 
|---|
| 221 | @cindex Non-standard targets | 
|---|
| 222 | @cindex cvs-dist, non-standard example | 
|---|
| 223 | @trindex cvs-dist | 
|---|
| 224 |  | 
|---|
| 225 | The variable definitions and targets in the @file{Makefile.am} are copied | 
|---|
| 226 | verbatim into the generated file.  This allows you to add arbitrary code | 
|---|
| 227 | into the generated @file{Makefile.in}.  For instance the Automake | 
|---|
| 228 | distribution includes a non-standard @code{cvs-dist} target, which the | 
|---|
| 229 | Automake maintainer uses to make distributions from his source control | 
|---|
| 230 | system. | 
|---|
| 231 |  | 
|---|
| 232 | @cindex GNU make extensions | 
|---|
| 233 |  | 
|---|
| 234 | Note that most GNU make extensions are not recognized by Automake.  Using | 
|---|
| 235 | such extensions in a @file{Makefile.am} will lead to errors or confusing | 
|---|
| 236 | behavior. | 
|---|
| 237 |  | 
|---|
| 238 | @cindex Append operator | 
|---|
| 239 | A special exception is that the GNU make append operator, @samp{+=}, is | 
|---|
| 240 | supported.  This operator appends its right hand argument to the variable | 
|---|
| 241 | specified on the left.  Automake will translate the operator into | 
|---|
| 242 | an ordinary @samp{=} operator; @samp{+=} will thus work with any make program. | 
|---|
| 243 |  | 
|---|
| 244 | Automake tries to keep comments grouped with any adjoining targets or | 
|---|
| 245 | variable definitions. | 
|---|
| 246 |  | 
|---|
| 247 | @cindex Make targets, overriding | 
|---|
| 248 | @cindex Overriding make targets | 
|---|
| 249 |  | 
|---|
| 250 | A target defined in @file{Makefile.am} generally overrides any such | 
|---|
| 251 | target of a similar name that would be automatically generated by | 
|---|
| 252 | @code{automake}.  Although this is a supported feature, it is generally | 
|---|
| 253 | best to avoid making use of it, as sometimes the generated rules are | 
|---|
| 254 | very particular. | 
|---|
| 255 |  | 
|---|
| 256 | @cindex Variables, overriding | 
|---|
| 257 | @cindex Overriding make variables | 
|---|
| 258 |  | 
|---|
| 259 | Similarly, a variable defined in @file{Makefile.am} or @code{AC_SUBST}'ed | 
|---|
| 260 | from @file{configure.in} will override any definition of the variable that | 
|---|
| 261 | @code{automake} would ordinarily create.  This feature is more often | 
|---|
| 262 | useful than the ability to override a target definition.  Be warned that | 
|---|
| 263 | many of the variables generated by @code{automake} are considered to be for | 
|---|
| 264 | internal use only, and their names might change in future releases. | 
|---|
| 265 |  | 
|---|
| 266 | @cindex Recursive operation of Automake | 
|---|
| 267 | @cindex Automake, recursive operation | 
|---|
| 268 | @cindex Example of recursive operation | 
|---|
| 269 |  | 
|---|
| 270 | When examining a variable definition, Automake will recursively examine | 
|---|
| 271 | variables referenced in the definition.  For example, if Automake is | 
|---|
| 272 | looking at the content of @code{foo_SOURCES} in this snippet | 
|---|
| 273 |  | 
|---|
| 274 | @example | 
|---|
| 275 | xs = a.c b.c | 
|---|
| 276 | foo_SOURCES = c.c $(xs) | 
|---|
| 277 | @end example | 
|---|
| 278 |  | 
|---|
| 279 | it would use the files @file{a.c}, @file{b.c}, and @file{c.c} as the | 
|---|
| 280 | contents of @code{foo_SOURCES}. | 
|---|
| 281 |  | 
|---|
| 282 | @cindex ## (special Automake comment) | 
|---|
| 283 | @cindex Special Automake comment | 
|---|
| 284 | @cindex Comment, special to Automake | 
|---|
| 285 |  | 
|---|
| 286 | Automake also allows a form of comment which is @emph{not} copied into | 
|---|
| 287 | the output; all lines beginning with @samp{##} (leading spaces allowed) | 
|---|
| 288 | are completely ignored by Automake. | 
|---|
| 289 |  | 
|---|
| 290 | It is customary to make the first line of @file{Makefile.am} read: | 
|---|
| 291 |  | 
|---|
| 292 | @cindex Makefile.am, first line | 
|---|
| 293 | @cindex First line of Makefile.am | 
|---|
| 294 |  | 
|---|
| 295 | @example | 
|---|
| 296 | ## Process this file with automake to produce Makefile.in | 
|---|
| 297 | @end example | 
|---|
| 298 |  | 
|---|
| 299 | @c FIXME discuss putting a copyright into Makefile.am here?  I would but | 
|---|
| 300 | @c I don't know quite what to say. | 
|---|
| 301 |  | 
|---|
| 302 | @c FIXME document customary ordering of Makefile.am here! | 
|---|
| 303 |  | 
|---|
| 304 |  | 
|---|
| 305 | @node Strictness, Uniform, General Operation, Generalities | 
|---|
| 306 | @section Strictness | 
|---|
| 307 |  | 
|---|
| 308 | @cindex Non-GNU packages | 
|---|
| 309 |  | 
|---|
| 310 | While Automake is intended to be used by maintainers of GNU packages, it | 
|---|
| 311 | does make some effort to accommodate those who wish to use it, but do | 
|---|
| 312 | not want to use all the GNU conventions. | 
|---|
| 313 |  | 
|---|
| 314 | @cindex Strictness, defined | 
|---|
| 315 | @cindex Strictness, foreign | 
|---|
| 316 | @cindex foreign strictness | 
|---|
| 317 | @cindex Strictness, gnu | 
|---|
| 318 | @cindex gnu strictness | 
|---|
| 319 | @cindex Strictness, gnits | 
|---|
| 320 | @cindex gnits strictness | 
|---|
| 321 |  | 
|---|
| 322 | To this end, Automake supports three levels of @dfn{strictness}---the | 
|---|
| 323 | strictness indicating how stringently Automake should check standards | 
|---|
| 324 | conformance. | 
|---|
| 325 |  | 
|---|
| 326 | The valid strictness levels are: | 
|---|
| 327 |  | 
|---|
| 328 | @table @samp | 
|---|
| 329 | @item foreign | 
|---|
| 330 | Automake will check for only those things which are absolutely | 
|---|
| 331 | required for proper operations.  For instance, whereas GNU standards | 
|---|
| 332 | dictate the existence of a @file{NEWS} file, it will not be required in | 
|---|
| 333 | this mode.  The name comes from the fact that Automake is intended to be | 
|---|
| 334 | used for GNU programs; these relaxed rules are not the standard mode of | 
|---|
| 335 | operation. | 
|---|
| 336 |  | 
|---|
| 337 | @item gnu | 
|---|
| 338 | Automake will check---as much as possible---for compliance to the GNU | 
|---|
| 339 | standards for packages.  This is the default. | 
|---|
| 340 |  | 
|---|
| 341 | @item gnits | 
|---|
| 342 | Automake will check for compliance to the as-yet-unwritten @dfn{Gnits | 
|---|
| 343 | standards}.  These are based on the GNU standards, but are even more | 
|---|
| 344 | detailed.  Unless you are a Gnits standards contributor, it is | 
|---|
| 345 | recommended that you avoid this option until such time as the Gnits | 
|---|
| 346 | standard is actually published (which may never happen). | 
|---|
| 347 | @end table | 
|---|
| 348 |  | 
|---|
| 349 | For more information on the precise implications of the strictness | 
|---|
| 350 | level, see @ref{Gnits}. | 
|---|
| 351 |  | 
|---|
| 352 | Automake also has a special ``cygnus'' mode which is similar to | 
|---|
| 353 | strictness but handled differently.  This mode is useful for packages | 
|---|
| 354 | which are put into a ``Cygnus'' style tree (e.g., the GCC tree).  For | 
|---|
| 355 | more information on this mode, see @ref{Cygnus}. | 
|---|
| 356 |  | 
|---|
| 357 |  | 
|---|
| 358 | @node Uniform, Canonicalization, Strictness, Generalities | 
|---|
| 359 | @section The Uniform Naming Scheme | 
|---|
| 360 |  | 
|---|
| 361 | @cindex Uniform naming scheme | 
|---|
| 362 |  | 
|---|
| 363 | Automake variables generally follow a @dfn{uniform naming scheme} that | 
|---|
| 364 | makes it easy to decide how programs (and other derived objects) are | 
|---|
| 365 | built, and how they are installed.  This scheme also supports | 
|---|
| 366 | @code{configure} time determination of what should be built. | 
|---|
| 367 |  | 
|---|
| 368 | @cindex _PROGRAMS primary variable | 
|---|
| 369 | @cindex PROGRAMS primary variable | 
|---|
| 370 | @cindex Primary variable, PROGRAMS | 
|---|
| 371 | @cindex Primary variable, defined | 
|---|
| 372 |  | 
|---|
| 373 | At @code{make} time, certain variables are used to determine which | 
|---|
| 374 | objects are to be built.  The variable names are made of several pieces | 
|---|
| 375 | which are concatenated together. | 
|---|
| 376 |  | 
|---|
| 377 | The piece which tells automake what is being built is commonly called | 
|---|
| 378 | the @dfn{primary}.  For instance, the primary @code{PROGRAMS} holds a | 
|---|
| 379 | list of programs which are to be compiled and linked. | 
|---|
| 380 | @vindex PROGRAMS | 
|---|
| 381 |  | 
|---|
| 382 | @cindex pkglibdir, defined | 
|---|
| 383 | @cindex pkgincludedir, defined | 
|---|
| 384 | @cindex pkgdatadir, defined | 
|---|
| 385 |  | 
|---|
| 386 | @vindex pkglibdir | 
|---|
| 387 | @vindex pkgincludedir | 
|---|
| 388 | @vindex pkgdatadir | 
|---|
| 389 |  | 
|---|
| 390 | A different set of names is used to decide where the built objects | 
|---|
| 391 | should be installed.  These names are prefixes to the primary which | 
|---|
| 392 | indicate which standard directory should be used as the installation | 
|---|
| 393 | directory.  The standard directory names are given in the GNU standards | 
|---|
| 394 | (@pxref{Directory Variables, , , standards, The GNU Coding Standards}). | 
|---|
| 395 | Automake extends this list with @code{pkglibdir}, @code{pkgincludedir}, | 
|---|
| 396 | and @code{pkgdatadir}; these are the same as the non-@samp{pkg} | 
|---|
| 397 | versions, but with @samp{@@PACKAGE@@} appended.  For instance, | 
|---|
| 398 | @code{pkglibdir} is defined as @code{$(libdir)/@@PACKAGE@@}. | 
|---|
| 399 | @cvindex PACKAGE, directory | 
|---|
| 400 |  | 
|---|
| 401 | @cindex EXTRA_, prepending | 
|---|
| 402 |  | 
|---|
| 403 | For each primary, there is one additional variable named by prepending | 
|---|
| 404 | @samp{EXTRA_} to the primary name.  This variable is used to list | 
|---|
| 405 | objects which may or may not be built, depending on what | 
|---|
| 406 | @code{configure} decides.  This variable is required because Automake | 
|---|
| 407 | must statically know the entire list of objects that may be built in | 
|---|
| 408 | order to generate a @file{Makefile.in} that will work in all cases. | 
|---|
| 409 |  | 
|---|
| 410 | @cindex EXTRA_PROGRAMS, defined | 
|---|
| 411 | @cindex Example, EXTRA_PROGRAMS | 
|---|
| 412 | @cindex cpio example | 
|---|
| 413 |  | 
|---|
| 414 | For instance, @code{cpio} decides at configure time which programs are | 
|---|
| 415 | built.  Some of the programs are installed in @code{bindir}, and some | 
|---|
| 416 | are installed in @code{sbindir}: | 
|---|
| 417 |  | 
|---|
| 418 | @example | 
|---|
| 419 | EXTRA_PROGRAMS = mt rmt | 
|---|
| 420 | bin_PROGRAMS = cpio pax | 
|---|
| 421 | sbin_PROGRAMS = @@MORE_PROGRAMS@@ | 
|---|
| 422 | @end example | 
|---|
| 423 |  | 
|---|
| 424 | Defining a primary without a prefix as a variable, e.g., | 
|---|
| 425 | @code{PROGRAMS}, is an error. | 
|---|
| 426 |  | 
|---|
| 427 | Note that the common @samp{dir} suffix is left off when constructing the | 
|---|
| 428 | variable names; thus one writes @samp{bin_PROGRAMS} and not | 
|---|
| 429 | @samp{bindir_PROGRAMS}. | 
|---|
| 430 |  | 
|---|
| 431 | Not every sort of object can be installed in every directory.  Automake | 
|---|
| 432 | will flag those attempts it finds in error. | 
|---|
| 433 | Automake will also diagnose obvious misspellings in directory names. | 
|---|
| 434 |  | 
|---|
| 435 | @cindex Extending list of installation directories | 
|---|
| 436 | @cindex Installation directories, extending list | 
|---|
| 437 |  | 
|---|
| 438 | Sometimes the standard directories---even as augmented by Automake--- | 
|---|
| 439 | are not enough.  In particular it is sometimes useful, for clarity, to | 
|---|
| 440 | install objects in a subdirectory of some predefined directory.  To this | 
|---|
| 441 | end, Automake allows you to extend the list of possible installation | 
|---|
| 442 | directories.  A given prefix (e.g. @samp{zar}) is valid if a variable of | 
|---|
| 443 | the same name with @samp{dir} appended is defined (e.g. @code{zardir}). | 
|---|
| 444 |  | 
|---|
| 445 | @cindex HTML support, example | 
|---|
| 446 |  | 
|---|
| 447 | For instance, until HTML support is part of Automake, you could use this | 
|---|
| 448 | to install raw HTML documentation: | 
|---|
| 449 |  | 
|---|
| 450 | @example | 
|---|
| 451 | htmldir = $(prefix)/html | 
|---|
| 452 | html_DATA = automake.html | 
|---|
| 453 | @end example | 
|---|
| 454 |  | 
|---|
| 455 | @cindex noinst primary prefix, definition | 
|---|
| 456 |  | 
|---|
| 457 | The special prefix @samp{noinst} indicates that the objects in question | 
|---|
| 458 | should be built but not installed at all.  This is usually used for | 
|---|
| 459 | objects required to build the rest of your package, for instance static | 
|---|
| 460 | libraries (@pxref{A Library}), or helper scripts. | 
|---|
| 461 |  | 
|---|
| 462 | @cindex check primary prefix, definition | 
|---|
| 463 |  | 
|---|
| 464 | The special prefix @samp{check} indicates that the objects in question | 
|---|
| 465 | should not be built until the @code{make check} command is run.  Those | 
|---|
| 466 | objects are not installed either. | 
|---|
| 467 |  | 
|---|
| 468 | The current primary names are @samp{PROGRAMS}, @samp{LIBRARIES}, | 
|---|
| 469 | @samp{LISP}, @samp{PYTHON}, @samp{JAVA}, @samp{SCRIPTS}, @samp{DATA}, | 
|---|
| 470 | @samp{HEADERS}, @samp{MANS}, and @samp{TEXINFOS}. | 
|---|
| 471 | @vindex PROGRAMS | 
|---|
| 472 | @vindex LIBRARIES | 
|---|
| 473 | @vindex LISP | 
|---|
| 474 | @vindex PYTHON | 
|---|
| 475 | @vindex JAVA | 
|---|
| 476 | @vindex SCRIPTS | 
|---|
| 477 | @vindex DATA | 
|---|
| 478 | @vindex HEADERS | 
|---|
| 479 | @vindex MANS | 
|---|
| 480 | @vindex TEXINFOS | 
|---|
| 481 |  | 
|---|
| 482 | Some primaries also allow additional prefixes which control other | 
|---|
| 483 | aspects of @code{automake}'s behavior.  The currently defined prefixes | 
|---|
| 484 | are @samp{dist_}, @samp{nodist_}, and @samp{nobase_}.  These prefixes | 
|---|
| 485 | are explained later (@pxref{Program and Library Variables}). | 
|---|
| 486 |  | 
|---|
| 487 |  | 
|---|
| 488 | @node Canonicalization, User Variables, Uniform, Generalities | 
|---|
| 489 | @section How derived variables are named | 
|---|
| 490 |  | 
|---|
| 491 | @cindex canonicalizing Automake variables | 
|---|
| 492 |  | 
|---|
| 493 | Sometimes a Makefile variable name is derived from some text the | 
|---|
| 494 | maintainer supplies.  For instance, a program name listed in | 
|---|
| 495 | @samp{_PROGRAMS} is rewritten into the name of a @samp{_SOURCES} | 
|---|
| 496 | variable.  In cases like this, Automake canonicalizes the text, so that | 
|---|
| 497 | program names and the like do not have to follow Makefile variable naming | 
|---|
| 498 | rules.  All characters in the name except for letters, numbers, the | 
|---|
| 499 | strudel (@@), and the underscore are turned into underscores when making | 
|---|
| 500 | variable references. | 
|---|
| 501 |  | 
|---|
| 502 | For example, if your program is named @code{sniff-glue}, the derived | 
|---|
| 503 | variable name would be @code{sniff_glue_SOURCES}, not | 
|---|
| 504 | @code{sniff-glue_SOURCES}.  Similarly the sources for a library named | 
|---|
| 505 | @code{libmumble++.a} should be listed in the | 
|---|
| 506 | @code{libmumble___a_SOURCES} variable. | 
|---|
| 507 |  | 
|---|
| 508 | The strudel is an addition, to make the use of Autoconf substitutions in | 
|---|
| 509 | variable names less obfuscating. | 
|---|
| 510 |  | 
|---|
| 511 |  | 
|---|
| 512 | @node User Variables, Auxiliary Programs, Canonicalization, Generalities | 
|---|
| 513 | @section Variables reserved for the user | 
|---|
| 514 |  | 
|---|
| 515 | @cindex variables, reserved for the user | 
|---|
| 516 | @cindex user variables | 
|---|
| 517 |  | 
|---|
| 518 | Some @code{Makefile} variables are reserved by the GNU Coding Standards | 
|---|
| 519 | for the use of the ``user'' -- the person building the package.  For | 
|---|
| 520 | instance, @code{CFLAGS} is one such variable. | 
|---|
| 521 |  | 
|---|
| 522 | Sometimes package developers are tempted to set user variables such as | 
|---|
| 523 | @code{CFLAGS} because it appears to make their job easier -- they don't | 
|---|
| 524 | have to introduce a second variable into every target. | 
|---|
| 525 |  | 
|---|
| 526 | However, the package itself should never set a user variable, | 
|---|
| 527 | particularly not to include switches which are required for proper | 
|---|
| 528 | compilation of the package.  Since these variables are documented as | 
|---|
| 529 | being for the package builder, that person rightfully expects to be able | 
|---|
| 530 | to override any of these variables at build time. | 
|---|
| 531 |  | 
|---|
| 532 | To get around this problem, automake introduces an automake-specific | 
|---|
| 533 | shadow variable for each user flag variable.  (Shadow variables are not | 
|---|
| 534 | introduced for variables like @code{CC}, where they would make no | 
|---|
| 535 | sense.)  The shadow variable is named by prepending @samp{AM_} to the | 
|---|
| 536 | user variable's name.  For instance, the shadow variable for | 
|---|
| 537 | @code{YFLAGS} is @code{AM_YFLAGS}. | 
|---|
| 538 |  | 
|---|
| 539 |  | 
|---|
| 540 | @node Auxiliary Programs,  , User Variables, Generalities | 
|---|
| 541 | @section Programs automake might require | 
|---|
| 542 |  | 
|---|
| 543 | @cindex Programs, auxiliary | 
|---|
| 544 | @cindex Auxiliary programs | 
|---|
| 545 |  | 
|---|
| 546 | Automake sometimes requires helper programs so that the generated | 
|---|
| 547 | @file{Makefile} can do its work properly.  There are a fairly large | 
|---|
| 548 | number of them, and we list them here. | 
|---|
| 549 |  | 
|---|
| 550 | @table @code | 
|---|
| 551 | @item ansi2knr.c | 
|---|
| 552 | @itemx ansi2knr.1 | 
|---|
| 553 | These two files are used by the automatic de-ANSI-fication support | 
|---|
| 554 | (@pxref{ANSI}). | 
|---|
| 555 |  | 
|---|
| 556 | @item compile | 
|---|
| 557 | This is a wrapper for compilers which don't accept both @samp{-c} and | 
|---|
| 558 | @samp{-o} at the same time.  It is only used when absolutely required. | 
|---|
| 559 | Such compilers are rare. | 
|---|
| 560 |  | 
|---|
| 561 | @item config.guess | 
|---|
| 562 | @itemx config.sub | 
|---|
| 563 | These programs compute the canonical triplets for the given build, host, | 
|---|
| 564 | or target architecture.  These programs are updated regularly to support | 
|---|
| 565 | new architectures and fix probes broken by changes in new kernel | 
|---|
| 566 | versions.  You are encouraged to fetch the latest versions of these | 
|---|
| 567 | files from @url{ftp://ftp.gnu.org/gnu/config/} before making a release. | 
|---|
| 568 |  | 
|---|
| 569 | @item depcomp | 
|---|
| 570 | This program understands how to run a compiler so that it will generate | 
|---|
| 571 | not only the desired output but also dependency information which is | 
|---|
| 572 | then used by the automatic dependency tracking feature. | 
|---|
| 573 |  | 
|---|
| 574 | @item elisp-comp | 
|---|
| 575 | This program is used to byte-compile Emacs Lisp code. | 
|---|
| 576 |  | 
|---|
| 577 | @item install-sh | 
|---|
| 578 | This is a replacement for the @code{install} program which works on | 
|---|
| 579 | platforms where @code{install} is unavailable or unusable. | 
|---|
| 580 |  | 
|---|
| 581 | @item mdate-sh | 
|---|
| 582 | This script is used to generate a @file{version.texi} file.  It examines | 
|---|
| 583 | a file and prints some date information about it. | 
|---|
| 584 |  | 
|---|
| 585 | @item missing | 
|---|
| 586 | This wraps a number of programs which are typically only required by | 
|---|
| 587 | maintainers.  If the program in question doesn't exist, @code{missing} | 
|---|
| 588 | prints an informative warning and attempts to fix things so that the | 
|---|
| 589 | build can continue. | 
|---|
| 590 |  | 
|---|
| 591 | @item mkinstalldirs | 
|---|
| 592 | This works around the fact that @code{mkdir -p} is not portable. | 
|---|
| 593 |  | 
|---|
| 594 | @item py-compile | 
|---|
| 595 | This is used to byte-compile Python scripts. | 
|---|
| 596 |  | 
|---|
| 597 | @item texinfo.tex | 
|---|
| 598 | Not a program, this file is required for @code{make dvi}, @code{make ps} | 
|---|
| 599 | and @code{make pdf} to work when Texinfo sources are in the package. | 
|---|
| 600 |  | 
|---|
| 601 | @item ylwrap | 
|---|
| 602 | This program wraps @code{lex} and @code{yacc} and ensures that, for | 
|---|
| 603 | instance, multiple @code{yacc} instances can be invoked in a single | 
|---|
| 604 | directory in parallel. | 
|---|
| 605 |  | 
|---|
| 606 | @end table | 
|---|
| 607 |  | 
|---|
| 608 |  | 
|---|
| 609 | @node Examples, Invoking Automake, Generalities, Top | 
|---|
| 610 | @chapter Some example packages | 
|---|
| 611 |  | 
|---|
| 612 | @menu | 
|---|
| 613 | * Complete::                    A simple example, start to finish | 
|---|
| 614 | * Hello::                       A classic program | 
|---|
| 615 | * true::                        Building true and false | 
|---|
| 616 | @end menu | 
|---|
| 617 |  | 
|---|
| 618 |  | 
|---|
| 619 | @node Complete, Hello, Examples, Examples | 
|---|
| 620 | @section A simple example, start to finish | 
|---|
| 621 |  | 
|---|
| 622 | @cindex Complete example | 
|---|
| 623 |  | 
|---|
| 624 | Let's suppose you just finished writing @code{zardoz}, a program to make | 
|---|
| 625 | your head float from vortex to vortex.  You've been using Autoconf to | 
|---|
| 626 | provide a portability framework, but your @file{Makefile.in}s have been | 
|---|
| 627 | ad-hoc.  You want to make them bulletproof, so you turn to Automake. | 
|---|
| 628 |  | 
|---|
| 629 | @cindex AM_INIT_AUTOMAKE, example use | 
|---|
| 630 |  | 
|---|
| 631 | The first step is to update your @file{configure.in} to include the | 
|---|
| 632 | commands that @code{automake} needs.  The way to do this is to add an | 
|---|
| 633 | @code{AM_INIT_AUTOMAKE} call just after @code{AC_INIT}: | 
|---|
| 634 |  | 
|---|
| 635 | @example | 
|---|
| 636 | AC_INIT(zardoz, 1.0) | 
|---|
| 637 | AM_INIT_AUTOMAKE | 
|---|
| 638 | @dots{} | 
|---|
| 639 | @end example | 
|---|
| 640 |  | 
|---|
| 641 | Since your program doesn't have any complicating factors (e.g., it | 
|---|
| 642 | doesn't use @code{gettext}, it doesn't want to build a shared library), | 
|---|
| 643 | you're done with this part.  That was easy! | 
|---|
| 644 |  | 
|---|
| 645 | @cindex aclocal program, introduction | 
|---|
| 646 | @cindex aclocal.m4, preexisting | 
|---|
| 647 | @cindex acinclude.m4, defined | 
|---|
| 648 |  | 
|---|
| 649 | Now you must regenerate @file{configure}.  But to do that, you'll need | 
|---|
| 650 | to tell @code{autoconf} how to find the new macro you've used.  The | 
|---|
| 651 | easiest way to do this is to use the @code{aclocal} program to generate | 
|---|
| 652 | your @file{aclocal.m4} for you.  But wait@dots{} maybe you already have an | 
|---|
| 653 | @file{aclocal.m4}, because you had to write some hairy macros for your | 
|---|
| 654 | program.  The @code{aclocal} program lets you put your own macros into | 
|---|
| 655 | @file{acinclude.m4}, so simply rename and then run: | 
|---|
| 656 |  | 
|---|
| 657 | @example | 
|---|
| 658 | mv aclocal.m4 acinclude.m4 | 
|---|
| 659 | aclocal | 
|---|
| 660 | autoconf | 
|---|
| 661 | @end example | 
|---|
| 662 |  | 
|---|
| 663 | @cindex zardoz example | 
|---|
| 664 |  | 
|---|
| 665 | Now it is time to write your @file{Makefile.am} for @code{zardoz}. | 
|---|
| 666 | Since @code{zardoz} is a user program, you want to install it where the | 
|---|
| 667 | rest of the user programs go: @code{bindir}.  Additionally, | 
|---|
| 668 | @code{zardoz} has some Texinfo documentation.  Your @file{configure.in} | 
|---|
| 669 | script uses @code{AC_REPLACE_FUNCS}, so you need to link against | 
|---|
| 670 | @samp{$(LIBOBJS)}.  So here's what you'd write: | 
|---|
| 671 |  | 
|---|
| 672 | @example | 
|---|
| 673 | bin_PROGRAMS = zardoz | 
|---|
| 674 | zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c | 
|---|
| 675 | zardoz_LDADD = $(LIBOBJS) | 
|---|
| 676 |  | 
|---|
| 677 | info_TEXINFOS = zardoz.texi | 
|---|
| 678 | @end example | 
|---|
| 679 |  | 
|---|
| 680 | Now you can run @code{automake --add-missing} to generate your | 
|---|
| 681 | @file{Makefile.in} and grab any auxiliary files you might need, and | 
|---|
| 682 | you're done! | 
|---|
| 683 |  | 
|---|
| 684 |  | 
|---|
| 685 | @node Hello, true, Complete, Examples | 
|---|
| 686 | @section A classic program | 
|---|
| 687 |  | 
|---|
| 688 | @cindex Example, GNU Hello | 
|---|
| 689 | @cindex Hello example | 
|---|
| 690 | @cindex GNU Hello, example | 
|---|
| 691 |  | 
|---|
| 692 | @uref{ftp://prep.ai.mit.edu/pub/gnu/hello-1.3.tar.gz, GNU hello} is | 
|---|
| 693 | renowned for its classic simplicity and versatility.  This section shows | 
|---|
| 694 | how Automake could be used with the GNU Hello package.  The examples | 
|---|
| 695 | below are from the latest beta version of GNU Hello, but with all of the | 
|---|
| 696 | maintainer-only code stripped out, as well as all copyright comments. | 
|---|
| 697 |  | 
|---|
| 698 | Of course, GNU Hello is somewhat more featureful than your traditional | 
|---|
| 699 | two-liner.  GNU Hello is internationalized, does option processing, and | 
|---|
| 700 | has a manual and a test suite. | 
|---|
| 701 |  | 
|---|
| 702 | @cindex configure.in, from GNU Hello | 
|---|
| 703 | @cindex GNU Hello, configure.in | 
|---|
| 704 | @cindex Hello, configure.in | 
|---|
| 705 |  | 
|---|
| 706 | Here is the @file{configure.in} from GNU Hello. | 
|---|
| 707 | @strong{Please note:} The calls to @code{AC_INIT} and @code{AM_INIT_AUTOMAKE} | 
|---|
| 708 | in this example use a deprecated syntax.  For the current approach, | 
|---|
| 709 | see the description of @code{AM_INIT_AUTOMAKE} in @ref{Public macros}. | 
|---|
| 710 |  | 
|---|
| 711 | @c FIXME: This definitely requires an update, e.g. to GNU Hello 2.1.1. | 
|---|
| 712 |  | 
|---|
| 713 | @example | 
|---|
| 714 | dnl Process this file with autoconf to produce a configure script. | 
|---|
| 715 | AC_INIT(src/hello.c) | 
|---|
| 716 | AM_INIT_AUTOMAKE(hello, 1.3.11) | 
|---|
| 717 | AM_CONFIG_HEADER(config.h) | 
|---|
| 718 |  | 
|---|
| 719 | dnl Set of available languages. | 
|---|
| 720 | ALL_LINGUAS="de fr es ko nl no pl pt sl sv" | 
|---|
| 721 |  | 
|---|
| 722 | dnl Checks for programs. | 
|---|
| 723 | AC_PROG_CC | 
|---|
| 724 | AC_ISC_POSIX | 
|---|
| 725 |  | 
|---|
| 726 | dnl Checks for libraries. | 
|---|
| 727 |  | 
|---|
| 728 | dnl Checks for header files. | 
|---|
| 729 | AC_STDC_HEADERS | 
|---|
| 730 | AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h) | 
|---|
| 731 |  | 
|---|
| 732 | dnl Checks for library functions. | 
|---|
| 733 | AC_FUNC_ALLOCA | 
|---|
| 734 |  | 
|---|
| 735 | dnl Check for st_blksize in struct stat | 
|---|
| 736 | AC_ST_BLKSIZE | 
|---|
| 737 |  | 
|---|
| 738 | dnl internationalization macros | 
|---|
| 739 | AM_GNU_GETTEXT | 
|---|
| 740 | AC_OUTPUT([Makefile doc/Makefile intl/Makefile po/Makefile.in \ | 
|---|
| 741 | src/Makefile tests/Makefile tests/hello], | 
|---|
| 742 | [chmod +x tests/hello]) | 
|---|
| 743 | @end example | 
|---|
| 744 |  | 
|---|
| 745 | The @samp{AM_} macros are provided by Automake (or the Gettext library); | 
|---|
| 746 | the rest are standard Autoconf macros. | 
|---|
| 747 |  | 
|---|
| 748 |  | 
|---|
| 749 | The top-level @file{Makefile.am}: | 
|---|
| 750 |  | 
|---|
| 751 | @example | 
|---|
| 752 | EXTRA_DIST = BUGS ChangeLog.O | 
|---|
| 753 | SUBDIRS = doc intl po src tests | 
|---|
| 754 | @end example | 
|---|
| 755 |  | 
|---|
| 756 | As you can see, all the work here is really done in subdirectories. | 
|---|
| 757 |  | 
|---|
| 758 | The @file{po} and @file{intl} directories are automatically generated | 
|---|
| 759 | using @code{gettextize}; they will not be discussed here. | 
|---|
| 760 |  | 
|---|
| 761 | @cindex Texinfo file handling example | 
|---|
| 762 | @cindex Example, handling Texinfo files | 
|---|
| 763 |  | 
|---|
| 764 | In @file{doc/Makefile.am} we see: | 
|---|
| 765 |  | 
|---|
| 766 | @example | 
|---|
| 767 | info_TEXINFOS = hello.texi | 
|---|
| 768 | hello_TEXINFOS = gpl.texi | 
|---|
| 769 | @end example | 
|---|
| 770 |  | 
|---|
| 771 | This is sufficient to build, install, and distribute the GNU Hello | 
|---|
| 772 | manual. | 
|---|
| 773 |  | 
|---|
| 774 | @cindex Regression test example | 
|---|
| 775 | @cindex Example, regression test | 
|---|
| 776 |  | 
|---|
| 777 | Here is @file{tests/Makefile.am}: | 
|---|
| 778 |  | 
|---|
| 779 | @example | 
|---|
| 780 | TESTS = hello | 
|---|
| 781 | EXTRA_DIST = hello.in testdata | 
|---|
| 782 | @end example | 
|---|
| 783 |  | 
|---|
| 784 | The script @file{hello} is generated by @code{configure}, and is the | 
|---|
| 785 | only test case.  @code{make check} will run this test. | 
|---|
| 786 |  | 
|---|
| 787 | @cindex INCLUDES, example usage | 
|---|
| 788 |  | 
|---|
| 789 | Last we have @file{src/Makefile.am}, where all the real work is done: | 
|---|
| 790 | @c FIXME: As all the Hello World excerpts in this manual, this | 
|---|
| 791 | @c shows deprecated features (here: $(INCLUDES)). | 
|---|
| 792 |  | 
|---|
| 793 | @example | 
|---|
| 794 | bin_PROGRAMS = hello | 
|---|
| 795 | hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h | 
|---|
| 796 | hello_LDADD = @@INTLLIBS@@ @@ALLOCA@@ | 
|---|
| 797 | localedir = $(datadir)/locale | 
|---|
| 798 | INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\" | 
|---|
| 799 | @end example | 
|---|
| 800 |  | 
|---|
| 801 |  | 
|---|
| 802 | @node true,  , Hello, Examples | 
|---|
| 803 | @section Building true and false | 
|---|
| 804 |  | 
|---|
| 805 | @cindex Example, false and true | 
|---|
| 806 | @cindex false Example | 
|---|
| 807 | @cindex true Example | 
|---|
| 808 |  | 
|---|
| 809 | Here is another, trickier example.  It shows how to generate two | 
|---|
| 810 | programs (@code{true} and @code{false}) from the same source file | 
|---|
| 811 | (@file{true.c}).  The difficult part is that each compilation of | 
|---|
| 812 | @file{true.c} requires different @code{cpp} flags. | 
|---|
| 813 |  | 
|---|
| 814 | @example | 
|---|
| 815 | bin_PROGRAMS = true false | 
|---|
| 816 | false_SOURCES = | 
|---|
| 817 | false_LDADD = false.o | 
|---|
| 818 |  | 
|---|
| 819 | true.o: true.c | 
|---|
| 820 | $(COMPILE) -DEXIT_CODE=0 -c true.c | 
|---|
| 821 |  | 
|---|
| 822 | false.o: true.c | 
|---|
| 823 | $(COMPILE) -DEXIT_CODE=1 -o false.o -c true.c | 
|---|
| 824 | @end example | 
|---|
| 825 |  | 
|---|
| 826 | Note that there is no @code{true_SOURCES} definition.  Automake will | 
|---|
| 827 | implicitly assume that there is a source file named @file{true.c}, and | 
|---|
| 828 | define rules to compile @file{true.o} and link @file{true}.  The | 
|---|
| 829 | @code{true.o: true.c} rule supplied by the above @file{Makefile.am}, | 
|---|
| 830 | will override the Automake generated rule to build @file{true.o}. | 
|---|
| 831 |  | 
|---|
| 832 | @code{false_SOURCES} is defined to be empty---that way no implicit value | 
|---|
| 833 | is substituted.  Because we have not listed the source of | 
|---|
| 834 | @file{false}, we have to tell Automake how to link the program.  This is | 
|---|
| 835 | the purpose of the @code{false_LDADD} line.  A @code{false_DEPENDENCIES} | 
|---|
| 836 | variable, holding the dependencies of the @file{false} target will be | 
|---|
| 837 | automatically generated by Automake from the content of | 
|---|
| 838 | @code{false_LDADD}. | 
|---|
| 839 |  | 
|---|
| 840 | The above rules won't work if your compiler doesn't accept both | 
|---|
| 841 | @samp{-c} and @samp{-o}.  The simplest fix for this is to introduce a | 
|---|
| 842 | bogus dependency (to avoid problems with a parallel @code{make}): | 
|---|
| 843 |  | 
|---|
| 844 | @example | 
|---|
| 845 | true.o: true.c false.o | 
|---|
| 846 | $(COMPILE) -DEXIT_CODE=0 -c true.c | 
|---|
| 847 |  | 
|---|
| 848 | false.o: true.c | 
|---|
| 849 | $(COMPILE) -DEXIT_CODE=1 -c true.c && mv true.o false.o | 
|---|
| 850 | @end example | 
|---|
| 851 |  | 
|---|
| 852 | Also, these explicit rules do not work if the de-ANSI-fication feature | 
|---|
| 853 | is used (@pxref{ANSI}).  Supporting de-ANSI-fication requires a little | 
|---|
| 854 | more work: | 
|---|
| 855 |  | 
|---|
| 856 | @example | 
|---|
| 857 | true._o: true._c false.o | 
|---|
| 858 | $(COMPILE) -DEXIT_CODE=0 -c true.c | 
|---|
| 859 |  | 
|---|
| 860 | false._o: true._c | 
|---|
| 861 | $(COMPILE) -DEXIT_CODE=1 -c true.c && mv true._o false.o | 
|---|
| 862 | @end example | 
|---|
| 863 |  | 
|---|
| 864 | As it turns out, there is also a much easier way to do this same task. | 
|---|
| 865 | Some of the above techniques are useful enough that we've kept the | 
|---|
| 866 | example in the manual.  However if you were to build @code{true} and | 
|---|
| 867 | @code{false} in real life, you would probably use per-program | 
|---|
| 868 | compilation flags, like so: | 
|---|
| 869 |  | 
|---|
| 870 | @example | 
|---|
| 871 | bin_PROGRAMS = false true | 
|---|
| 872 |  | 
|---|
| 873 | false_SOURCES = true.c | 
|---|
| 874 | false_CPPFLAGS = -DEXIT_CODE=1 | 
|---|
| 875 |  | 
|---|
| 876 | true_SOURCES = true.c | 
|---|
| 877 | true_CPPFLAGS = -DEXIT_CODE=0 | 
|---|
| 878 | @end example | 
|---|
| 879 |  | 
|---|
| 880 | In this case Automake will cause @file{true.c} to be compiled twice, | 
|---|
| 881 | with different flags.  De-ANSI-fication will work automatically.  In | 
|---|
| 882 | this instance, the names of the object files would be chosen by | 
|---|
| 883 | automake; they would be @file{false-true.o} and @file{true-true.o}. | 
|---|
| 884 | (The name of the object files rarely matters.) | 
|---|
| 885 |  | 
|---|
| 886 |  | 
|---|
| 887 | @node Invoking Automake, configure, Examples, Top | 
|---|
| 888 | @chapter Creating a @file{Makefile.in} | 
|---|
| 889 |  | 
|---|
| 890 | @cindex Multiple configure.in files | 
|---|
| 891 | @cindex Invoking Automake | 
|---|
| 892 | @cindex Automake, invoking | 
|---|
| 893 |  | 
|---|
| 894 | To create all the @file{Makefile.in}s for a package, run the | 
|---|
| 895 | @code{automake} program in the top level directory, with no arguments. | 
|---|
| 896 | @code{automake} will automatically find each appropriate | 
|---|
| 897 | @file{Makefile.am} (by scanning @file{configure.in}; @pxref{configure}) | 
|---|
| 898 | and generate the corresponding @file{Makefile.in}.  Note that | 
|---|
| 899 | @code{automake} has a rather simplistic view of what constitutes a | 
|---|
| 900 | package; it assumes that a package has only one @file{configure.in}, at | 
|---|
| 901 | the top.  If your package has multiple @file{configure.in}s, then you | 
|---|
| 902 | must run @code{automake} in each directory holding a | 
|---|
| 903 | @file{configure.in}.  (Alternatively, you may rely on Autoconf's | 
|---|
| 904 | @code{autoreconf}, which is able to recurse your package tree and run | 
|---|
| 905 | @code{automake} where appropriate.) | 
|---|
| 906 |  | 
|---|
| 907 | You can optionally give @code{automake} an argument; @file{.am} is | 
|---|
| 908 | appended to the argument and the result is used as the name of the input | 
|---|
| 909 | file.  This feature is generally only used to automatically rebuild an | 
|---|
| 910 | out-of-date @file{Makefile.in}.  Note that @code{automake} must always | 
|---|
| 911 | be run from the topmost directory of a project, even if being used to | 
|---|
| 912 | regenerate the @file{Makefile.in} in some subdirectory.  This is | 
|---|
| 913 | necessary because @code{automake} must scan @file{configure.in}, and | 
|---|
| 914 | because @code{automake} uses the knowledge that a @file{Makefile.in} is | 
|---|
| 915 | in a subdirectory to change its behavior in some cases. | 
|---|
| 916 |  | 
|---|
| 917 | @vindex AUTOCONF | 
|---|
| 918 | Automake will run @code{autoconf} to scan @file{configure.in} and its | 
|---|
| 919 | dependencies (@file{aclocal.m4}), therefore @code{autoconf} must be in | 
|---|
| 920 | your @code{PATH}.  If there is an @code{AUTOCONF} variable in your | 
|---|
| 921 | environment it will be used instead of @code{autoconf}, this allows you | 
|---|
| 922 | to select a particular version of Autoconf.  By the way, don't | 
|---|
| 923 | misunderstand this paragraph: Automake runs @code{autoconf} to | 
|---|
| 924 | @strong{scan} your @file{configure.in}, this won't build | 
|---|
| 925 | @file{configure} and you still have to run @code{autoconf} yourself for | 
|---|
| 926 | this purpose. | 
|---|
| 927 |  | 
|---|
| 928 | @cindex Automake options | 
|---|
| 929 | @cindex Options, Automake | 
|---|
| 930 | @cindex Strictness, command line | 
|---|
| 931 |  | 
|---|
| 932 | @code{automake} accepts the following options: | 
|---|
| 933 |  | 
|---|
| 934 | @cindex Extra files distributed with Automake | 
|---|
| 935 | @cindex Files distributed with Automake | 
|---|
| 936 | @cindex config.guess | 
|---|
| 937 |  | 
|---|
| 938 | @table @samp | 
|---|
| 939 | @item -a | 
|---|
| 940 | @itemx --add-missing | 
|---|
| 941 | @opindex -a | 
|---|
| 942 | @opindex --add-missing | 
|---|
| 943 | Automake requires certain common files to exist in certain situations; | 
|---|
| 944 | for instance @file{config.guess} is required if @file{configure.in} runs | 
|---|
| 945 | @code{AC_CANONICAL_HOST}.  Automake is distributed with several of these | 
|---|
| 946 | files (@pxref{Auxiliary Programs}); this option will cause the missing | 
|---|
| 947 | ones to be automatically added to the package, whenever possible.  In | 
|---|
| 948 | general if Automake tells you a file is missing, try using this option. | 
|---|
| 949 | By default Automake tries to make a symbolic link pointing to its own | 
|---|
| 950 | copy of the missing file; this can be changed with @code{--copy}. | 
|---|
| 951 |  | 
|---|
| 952 | Many of the potentially-missing files are common scripts whose | 
|---|
| 953 | location may be specified via the @code{AC_CONFIG_AUX_DIR} macro. | 
|---|
| 954 | Therefore, @code{AC_CONFIG_AUX_DIR}'s setting affects whether a | 
|---|
| 955 | file is considered missing, and where the missing file is added | 
|---|
| 956 | (@pxref{Optional}). | 
|---|
| 957 |  | 
|---|
| 958 | @item --libdir=@var{dir} | 
|---|
| 959 | @opindex --libdir | 
|---|
| 960 | Look for Automake data files in directory @var{dir} instead of in the | 
|---|
| 961 | installation directory.  This is typically used for debugging. | 
|---|
| 962 |  | 
|---|
| 963 | @item -c | 
|---|
| 964 | @opindex -c | 
|---|
| 965 | @itemx --copy | 
|---|
| 966 | @opindex --copy | 
|---|
| 967 | When used with @code{--add-missing}, causes installed files to be | 
|---|
| 968 | copied.  The default is to make a symbolic link. | 
|---|
| 969 |  | 
|---|
| 970 | @item --cygnus | 
|---|
| 971 | @opindex --cygnus | 
|---|
| 972 | Causes the generated @file{Makefile.in}s to follow Cygnus rules, instead | 
|---|
| 973 | of GNU or Gnits rules.  For more information, see @ref{Cygnus}. | 
|---|
| 974 |  | 
|---|
| 975 | @item -f | 
|---|
| 976 | @opindex -f | 
|---|
| 977 | @itemx --force-missing | 
|---|
| 978 | @opindex --force-missing | 
|---|
| 979 | When used with @code{--add-missing}, causes standard files to be reinstalled | 
|---|
| 980 | even if they already exist in the source tree.  This involves removing | 
|---|
| 981 | the file from the source tree before creating the new symlink (or, with | 
|---|
| 982 | @code{--copy}, copying the new file). | 
|---|
| 983 |  | 
|---|
| 984 | @item --foreign | 
|---|
| 985 | @opindex --foreign | 
|---|
| 986 | Set the global strictness to @samp{foreign}.  For more information, see | 
|---|
| 987 | @ref{Strictness}. | 
|---|
| 988 |  | 
|---|
| 989 | @item --gnits | 
|---|
| 990 | @opindex --gnits | 
|---|
| 991 | Set the global strictness to @samp{gnits}.  For more information, see | 
|---|
| 992 | @ref{Gnits}. | 
|---|
| 993 |  | 
|---|
| 994 | @item --gnu | 
|---|
| 995 | @opindex --gnu | 
|---|
| 996 | Set the global strictness to @samp{gnu}.  For more information, see | 
|---|
| 997 | @ref{Gnits}.  This is the default strictness. | 
|---|
| 998 |  | 
|---|
| 999 | @item --help | 
|---|
| 1000 | @opindex --help | 
|---|
| 1001 | Print a summary of the command line options and exit. | 
|---|
| 1002 |  | 
|---|
| 1003 | @item -i | 
|---|
| 1004 | @itemx --ignore-deps | 
|---|
| 1005 | @opindex -i | 
|---|
| 1006 | This disables the dependency tracking feature in generated | 
|---|
| 1007 | @file{Makefile}s; see @ref{Dependencies}. | 
|---|
| 1008 |  | 
|---|
| 1009 | @item --include-deps | 
|---|
| 1010 | @opindex --include-deps | 
|---|
| 1011 | This enables the dependency tracking feature.  This feature is enabled | 
|---|
| 1012 | by default.  This option is provided for historical reasons only and | 
|---|
| 1013 | probably should not be used. | 
|---|
| 1014 |  | 
|---|
| 1015 | @item --no-force | 
|---|
| 1016 | @opindex --no-force | 
|---|
| 1017 | Ordinarily @code{automake} creates all @file{Makefile.in}s mentioned in | 
|---|
| 1018 | @file{configure.in}.  This option causes it to only update those | 
|---|
| 1019 | @file{Makefile.in}s which are out of date with respect to one of their | 
|---|
| 1020 | dependents. | 
|---|
| 1021 |  | 
|---|
| 1022 | Due to a bug in its implementation, this option is currently ignored. | 
|---|
| 1023 | It will be fixed in Automake 1.8. | 
|---|
| 1024 |  | 
|---|
| 1025 | @item -o @var{dir} | 
|---|
| 1026 | @itemx --output-dir=@var{dir} | 
|---|
| 1027 | @opindex -o | 
|---|
| 1028 | @opindex --output-dir | 
|---|
| 1029 | Put the generated @file{Makefile.in} in the directory @var{dir}. | 
|---|
| 1030 | Ordinarily each @file{Makefile.in} is created in the directory of the | 
|---|
| 1031 | corresponding @file{Makefile.am}.  This option is deprecated and will be | 
|---|
| 1032 | removed in a future release. | 
|---|
| 1033 |  | 
|---|
| 1034 | @item -v | 
|---|
| 1035 | @itemx --verbose | 
|---|
| 1036 | @opindex -v | 
|---|
| 1037 | @opindex --verbose | 
|---|
| 1038 | Cause Automake to print information about which files are being read or | 
|---|
| 1039 | created. | 
|---|
| 1040 |  | 
|---|
| 1041 | @item --version | 
|---|
| 1042 | @opindex --version | 
|---|
| 1043 | Print the version number of Automake and exit. | 
|---|
| 1044 |  | 
|---|
| 1045 | @item -W CATEGORY | 
|---|
| 1046 | @item --warnings=@var{category} | 
|---|
| 1047 | @opindex -W | 
|---|
| 1048 | @opindex --warnings | 
|---|
| 1049 | Output warnings falling in @var{category}.  @var{category} can be | 
|---|
| 1050 | one of: | 
|---|
| 1051 | @table @samp | 
|---|
| 1052 | @item gnu | 
|---|
| 1053 | warnings related to the GNU Coding Standards | 
|---|
| 1054 | (@pxref{Top, , , standards, The GNU Coding Standards}). | 
|---|
| 1055 | @item obsolete | 
|---|
| 1056 | obsolete features or constructions | 
|---|
| 1057 | @item portability | 
|---|
| 1058 | portability issues (e.g., use of Make features which are known not portable) | 
|---|
| 1059 | @item syntax | 
|---|
| 1060 | weird syntax, unused variables, typos | 
|---|
| 1061 | @item unsupported | 
|---|
| 1062 | unsupported or incomplete features | 
|---|
| 1063 | @item all | 
|---|
| 1064 | all the warnings | 
|---|
| 1065 | @item none | 
|---|
| 1066 | turn off all the warnings | 
|---|
| 1067 | @item error | 
|---|
| 1068 | treat warnings as errors | 
|---|
| 1069 | @end table | 
|---|
| 1070 |  | 
|---|
| 1071 | A category can be turned off by prefixing its name with @samp{no-}.  For | 
|---|
| 1072 | instance @samp{-Wno-syntax} will hide the warnings about unused | 
|---|
| 1073 | variables. | 
|---|
| 1074 |  | 
|---|
| 1075 | The categories output by default are @samp{syntax} and | 
|---|
| 1076 | @samp{unsupported}.  Additionally, @samp{gnu} is enabled in @samp{--gnu} and | 
|---|
| 1077 | @samp{--gnits} strictness. | 
|---|
| 1078 |  | 
|---|
| 1079 | @samp{portability} warnings are currently disabled by default, but they | 
|---|
| 1080 | will be enabled in @samp{--gnu} and @samp{--gnits} strictness in a | 
|---|
| 1081 | future release. | 
|---|
| 1082 |  | 
|---|
| 1083 | @vindex WARNINGS | 
|---|
| 1084 | The environment variable @samp{WARNINGS} can contain a comma separated | 
|---|
| 1085 | list of categories to enable.  It will be taken into account before the | 
|---|
| 1086 | command-line switches, this way @samp{-Wnone} will also ignore any | 
|---|
| 1087 | warning category enabled by @samp{WARNINGS}.  This variable is also used | 
|---|
| 1088 | by other tools like @command{autoconf}; unknown categories are ignored | 
|---|
| 1089 | for this reason. | 
|---|
| 1090 |  | 
|---|
| 1091 | @end table | 
|---|
| 1092 |  | 
|---|
| 1093 |  | 
|---|
| 1094 | @node configure, Top level, Invoking Automake, Top | 
|---|
| 1095 | @chapter Scanning @file{configure.in} | 
|---|
| 1096 |  | 
|---|
| 1097 | @cindex configure.in, scanning | 
|---|
| 1098 | @cindex Scanning configure.in | 
|---|
| 1099 |  | 
|---|
| 1100 | Automake scans the package's @file{configure.in} to determine certain | 
|---|
| 1101 | information about the package.  Some @code{autoconf} macros are required | 
|---|
| 1102 | and some variables must be defined in @file{configure.in}.  Automake | 
|---|
| 1103 | will also use information from @file{configure.in} to further tailor its | 
|---|
| 1104 | output. | 
|---|
| 1105 |  | 
|---|
| 1106 | Automake also supplies some Autoconf macros to make the maintenance | 
|---|
| 1107 | easier.  These macros can automatically be put into your | 
|---|
| 1108 | @file{aclocal.m4} using the @code{aclocal} program. | 
|---|
| 1109 |  | 
|---|
| 1110 | @menu | 
|---|
| 1111 | * Requirements::                Configuration requirements | 
|---|
| 1112 | * Optional::                    Other things Automake recognizes | 
|---|
| 1113 | * Invoking aclocal::            Auto-generating aclocal.m4 | 
|---|
| 1114 | * aclocal options::             aclocal command line arguments | 
|---|
| 1115 | * Macro search path::           Modifying aclocal's search path | 
|---|
| 1116 | * Macros::                      Autoconf macros supplied with Automake | 
|---|
| 1117 | * Extending aclocal::           Writing your own aclocal macros | 
|---|
| 1118 | @end menu | 
|---|
| 1119 |  | 
|---|
| 1120 |  | 
|---|
| 1121 | @node Requirements, Optional, configure, configure | 
|---|
| 1122 | @section Configuration requirements | 
|---|
| 1123 |  | 
|---|
| 1124 | @cindex Automake requirements | 
|---|
| 1125 | @cindex Requirements of Automake | 
|---|
| 1126 |  | 
|---|
| 1127 | The one real requirement of Automake is that your @file{configure.in} | 
|---|
| 1128 | call @code{AM_INIT_AUTOMAKE}.  This macro does several things which are | 
|---|
| 1129 | required for proper Automake operation (@pxref{Macros}). | 
|---|
| 1130 | @cvindex AM_INIT_AUTOMAKE | 
|---|
| 1131 |  | 
|---|
| 1132 | Here are the other macros which Automake requires but which are not run | 
|---|
| 1133 | by @code{AM_INIT_AUTOMAKE}: | 
|---|
| 1134 |  | 
|---|
| 1135 | @table @code | 
|---|
| 1136 | @item AC_CONFIG_FILES | 
|---|
| 1137 | @itemx AC_OUTPUT | 
|---|
| 1138 | Automake uses these to determine which files to create (@pxref{Output, , | 
|---|
| 1139 | Creating Output Files, autoconf, The Autoconf Manual}).  A listed file | 
|---|
| 1140 | is considered to be an Automake generated @file{Makefile} if there | 
|---|
| 1141 | exists a file with the same name and the @file{.am} extension appended. | 
|---|
| 1142 | Typically, @code{AC_CONFIG_FILES([foo/Makefile])} will cause Automake to | 
|---|
| 1143 | generate @file{foo/Makefile.in} if @file{foo/Makefile.am} exists. | 
|---|
| 1144 |  | 
|---|
| 1145 | These files are all removed by @code{make distclean}. | 
|---|
| 1146 | @cvindex AC_CONFIG_FILES | 
|---|
| 1147 | @cvindex AC_OUTPUT | 
|---|
| 1148 | @end table | 
|---|
| 1149 |  | 
|---|
| 1150 |  | 
|---|
| 1151 | @node Optional, Invoking aclocal, Requirements, configure | 
|---|
| 1152 | @section Other things Automake recognizes | 
|---|
| 1153 |  | 
|---|
| 1154 | @cindex Macros Automake recognizes | 
|---|
| 1155 | @cindex Recognized macros by Automake | 
|---|
| 1156 |  | 
|---|
| 1157 | Every time Automake is run it calls Autoconf to trace | 
|---|
| 1158 | @file{configure.in}.  This way it can recognize the use of certain | 
|---|
| 1159 | macros and tailor the generated @file{Makefile.in} appropriately. | 
|---|
| 1160 | Currently recognized macros and their effects are: | 
|---|
| 1161 |  | 
|---|
| 1162 | @table @code | 
|---|
| 1163 | @item AC_CONFIG_HEADERS | 
|---|
| 1164 | Automake will generate rules to rebuild these headers.  Older versions | 
|---|
| 1165 | of Automake required the use of @code{AM_CONFIG_HEADER} | 
|---|
| 1166 | (@pxref{Macros}); this is no longer the case today. | 
|---|
| 1167 | @cvindex AC_CONFIG_HEADERS | 
|---|
| 1168 |  | 
|---|
| 1169 | @item AC_CONFIG_AUX_DIR | 
|---|
| 1170 | Automake will look for various helper scripts, such as | 
|---|
| 1171 | @file{mkinstalldirs}, in the directory named in this macro invocation. | 
|---|
| 1172 | @c This list is accurate relative to version 1.7.2 | 
|---|
| 1173 | (The full list of scripts is: @file{config.guess}, @file{config.sub}, | 
|---|
| 1174 | @file{depcomp}, @file{elisp-comp}, @file{compile}, @file{install-sh}, | 
|---|
| 1175 | @file{ltmain.sh}, @file{mdate-sh}, @file{missing}, @file{mkinstalldirs}, | 
|---|
| 1176 | @file{py-compile}, @file{texinfo.tex}, and @file{ylwrap}.)  Not all | 
|---|
| 1177 | scripts are always searched for; some scripts will only be sought if the | 
|---|
| 1178 | generated @file{Makefile.in} requires them. | 
|---|
| 1179 | @cvindex AC_CONFIG_AUX_DIR | 
|---|
| 1180 |  | 
|---|
| 1181 | If @code{AC_CONFIG_AUX_DIR} is not given, the scripts are looked for in | 
|---|
| 1182 | their @samp{standard} locations.  For @file{mdate-sh}, | 
|---|
| 1183 | @file{texinfo.tex}, and @file{ylwrap}, the standard location is the | 
|---|
| 1184 | source directory corresponding to the current @file{Makefile.am}.  For | 
|---|
| 1185 | the rest, the standard location is the first one of @file{.}, @file{..}, | 
|---|
| 1186 | or @file{../..} (relative to the top source directory) that provides any | 
|---|
| 1187 | one of the helper scripts.  @xref{Input, , Finding `configure' Input, | 
|---|
| 1188 | autoconf, The Autoconf Manual}. | 
|---|
| 1189 |  | 
|---|
| 1190 | Required files from @code{AC_CONFIG_AUX_DIR} are automatically | 
|---|
| 1191 | distributed, even if there is no @file{Makefile.am} in this directory. | 
|---|
| 1192 |  | 
|---|
| 1193 | @item AC_CANONICAL_HOST | 
|---|
| 1194 | Automake will ensure that @file{config.guess} and @file{config.sub} | 
|---|
| 1195 | exist.  Also, the @file{Makefile} variables @samp{host_alias} and | 
|---|
| 1196 | @samp{host_triplet} are introduced.  See @ref{Canonicalizing, , | 
|---|
| 1197 | Getting the Canonical System Type, autoconf, The Autoconf Manual}. | 
|---|
| 1198 | @cvindex AC_CANONICAL_HOST | 
|---|
| 1199 | @vindex host_alias | 
|---|
| 1200 | @vindex host_triplet | 
|---|
| 1201 |  | 
|---|
| 1202 | @item AC_CANONICAL_SYSTEM | 
|---|
| 1203 | This is similar to @code{AC_CANONICAL_HOST}, but also defines the | 
|---|
| 1204 | @file{Makefile} variables @samp{build_alias} and @samp{target_alias}. | 
|---|
| 1205 | @xref{Canonicalizing, , Getting the Canonical System Type, autoconf, The | 
|---|
| 1206 | Autoconf Manual}. | 
|---|
| 1207 | @cvindex AC_CANONICAL_SYSTEM | 
|---|
| 1208 | @vindex build_alias | 
|---|
| 1209 | @vindex target_alias | 
|---|
| 1210 |  | 
|---|
| 1211 | @item AC_LIBSOURCE | 
|---|
| 1212 | @itemx AC_LIBSOURCES | 
|---|
| 1213 | @itemx AC_LIBOBJ | 
|---|
| 1214 | Automake will automatically distribute any file listed in | 
|---|
| 1215 | @code{AC_LIBSOURCE} or @code{AC_LIBSOURCES}. | 
|---|
| 1216 |  | 
|---|
| 1217 | Note that the @code{AC_LIBOBJ} macro calls @code{AC_LIBSOURCE}.  So if | 
|---|
| 1218 | an Autoconf macro is documented to call @code{AC_LIBOBJ([file])}, then | 
|---|
| 1219 | @file{file.c} will be distributed automatically by Automake.  This | 
|---|
| 1220 | encompasses many macros like @code{AC_FUNC_ALLOCA}, | 
|---|
| 1221 | @code{AC_FUNC_MEMCMP}, @code{AC_REPLACE_FUNCS}, and others. | 
|---|
| 1222 | @cvindex AC_LIBOBJ | 
|---|
| 1223 | @cvindex AC_LIBSOURCE | 
|---|
| 1224 | @cvindex AC_LIBSOURCES | 
|---|
| 1225 |  | 
|---|
| 1226 | By the way, direct assignments to @code{LIBOBJS} are no longer | 
|---|
| 1227 | supported.  You should always use @code{AC_LIBOBJ} for this purpose. | 
|---|
| 1228 | @xref{AC_LIBOBJ vs LIBOBJS, , @code{AC_LIBOBJ} vs. @code{LIBOBJS}, | 
|---|
| 1229 | autoconf, The Autoconf Manual}. | 
|---|
| 1230 | @cvindex LIBOBJS | 
|---|
| 1231 |  | 
|---|
| 1232 | @item AC_PROG_RANLIB | 
|---|
| 1233 | This is required if any libraries are built in the package. | 
|---|
| 1234 | @xref{Particular Programs, , Particular Program Checks, autoconf, The | 
|---|
| 1235 | Autoconf Manual}. | 
|---|
| 1236 | @cvindex AC_PROG_RANLIB | 
|---|
| 1237 |  | 
|---|
| 1238 | @item AC_PROG_CXX | 
|---|
| 1239 | This is required if any C++ source is included.  @xref{Particular | 
|---|
| 1240 | Programs, , Particular Program Checks, autoconf, The Autoconf Manual}. | 
|---|
| 1241 | @cvindex AC_PROG_CXX | 
|---|
| 1242 |  | 
|---|
| 1243 | @item AC_PROG_F77 | 
|---|
| 1244 | This is required if any Fortran 77 source is included.  This macro is | 
|---|
| 1245 | distributed with Autoconf version 2.13 and later.  @xref{Particular | 
|---|
| 1246 | Programs, , Particular Program Checks, autoconf, The Autoconf Manual}. | 
|---|
| 1247 | @cvindex AC_PROG_F77 | 
|---|
| 1248 |  | 
|---|
| 1249 | @item AC_F77_LIBRARY_LDFLAGS | 
|---|
| 1250 | This is required for programs and shared libraries that are a mixture of | 
|---|
| 1251 | languages that include Fortran 77 (@pxref{Mixing Fortran 77 With C and | 
|---|
| 1252 | C++}).  @xref{Macros, , Autoconf macros supplied with Automake}. | 
|---|
| 1253 | @cvindex AC_F77_LIBRARY_LDFLAGS | 
|---|
| 1254 |  | 
|---|
| 1255 | @item AC_PROG_LIBTOOL | 
|---|
| 1256 | Automake will turn on processing for @code{libtool} (@pxref{Top, , | 
|---|
| 1257 | Introduction, libtool, The Libtool Manual}). | 
|---|
| 1258 | @cvindex AC_PROG_LIBTOOL | 
|---|
| 1259 |  | 
|---|
| 1260 | @item AC_PROG_YACC | 
|---|
| 1261 | If a Yacc source file is seen, then you must either use this macro or | 
|---|
| 1262 | define the variable @samp{YACC} in @file{configure.in}.  The former is | 
|---|
| 1263 | preferred (@pxref{Particular Programs, , Particular Program Checks, | 
|---|
| 1264 | autoconf, The Autoconf Manual}). | 
|---|
| 1265 | @cvindex AC_PROG_YACC | 
|---|
| 1266 | @cvindex YACC | 
|---|
| 1267 |  | 
|---|
| 1268 | @item AC_PROG_LEX | 
|---|
| 1269 | If a Lex source file is seen, then this macro must be used. | 
|---|
| 1270 | @xref{Particular Programs, , Particular Program Checks, autoconf, The | 
|---|
| 1271 | Autoconf Manual}. | 
|---|
| 1272 | @cvindex AC_PROG_LEX | 
|---|
| 1273 |  | 
|---|
| 1274 | @item AC_SUBST | 
|---|
| 1275 | @cvindex AC_SUBST | 
|---|
| 1276 | The first argument is automatically defined as a variable in each | 
|---|
| 1277 | generated @file{Makefile.in}.  @xref{Setting Output Variables, , Setting | 
|---|
| 1278 | Output Variables, autoconf, The Autoconf Manual}. | 
|---|
| 1279 |  | 
|---|
| 1280 | If the Autoconf manual says that a macro calls @code{AC_SUBST} for | 
|---|
| 1281 | @var{var}, or defines the output variable @var{var} then @var{var} will | 
|---|
| 1282 | be defined in each @file{Makefile.in} generated by Automake. | 
|---|
| 1283 | E.g. @code{AC_PATH_XTRA} defines @code{X_CFLAGS} and @code{X_LIBS}, so | 
|---|
| 1284 | you can use these variables in any @file{Makefile.am} if | 
|---|
| 1285 | @code{AC_PATH_XTRA} is called. | 
|---|
| 1286 |  | 
|---|
| 1287 | @item AM_C_PROTOTYPES | 
|---|
| 1288 | This is required when using automatic de-ANSI-fication; see @ref{ANSI}. | 
|---|
| 1289 | @cvindex AM_C_PROTOTYPES | 
|---|
| 1290 |  | 
|---|
| 1291 | @item AM_GNU_GETTEXT | 
|---|
| 1292 | This macro is required for packages which use GNU gettext | 
|---|
| 1293 | (@pxref{gettext}).  It is distributed with gettext.  If Automake sees | 
|---|
| 1294 | this macro it ensures that the package meets some of gettext's | 
|---|
| 1295 | requirements. | 
|---|
| 1296 | @cvindex AM_GNU_GETTEXT | 
|---|
| 1297 |  | 
|---|
| 1298 | @item AM_MAINTAINER_MODE | 
|---|
| 1299 | @opindex --enable-maintainer-mode | 
|---|
| 1300 | This macro adds a @samp{--enable-maintainer-mode} option to | 
|---|
| 1301 | @code{configure}.  If this is used, @code{automake} will cause | 
|---|
| 1302 | @samp{maintainer-only} rules to be turned off by default in the | 
|---|
| 1303 | generated @file{Makefile.in}s. This macro defines the | 
|---|
| 1304 | @samp{MAINTAINER_MODE} conditional, which you can use in your own | 
|---|
| 1305 | @file{Makefile.am}. | 
|---|
| 1306 | @cvindex AM_MAINTAINER_MODE | 
|---|
| 1307 |  | 
|---|
| 1308 | @end table | 
|---|
| 1309 |  | 
|---|
| 1310 |  | 
|---|
| 1311 | @node Invoking aclocal, aclocal options, Optional, configure | 
|---|
| 1312 | @section Auto-generating aclocal.m4 | 
|---|
| 1313 |  | 
|---|
| 1314 | @cindex Invoking aclocal | 
|---|
| 1315 | @cindex aclocal, Invoking | 
|---|
| 1316 |  | 
|---|
| 1317 | Automake includes a number of Autoconf macros which can be used in your | 
|---|
| 1318 | package; some of them are actually required by Automake in certain | 
|---|
| 1319 | situations.  These macros must be defined in your @file{aclocal.m4}; | 
|---|
| 1320 | otherwise they will not be seen by @code{autoconf}. | 
|---|
| 1321 |  | 
|---|
| 1322 | The @code{aclocal} program will automatically generate @file{aclocal.m4} | 
|---|
| 1323 | files based on the contents of @file{configure.in}.  This provides a | 
|---|
| 1324 | convenient way to get Automake-provided macros, without having to | 
|---|
| 1325 | search around.  Also, the @code{aclocal} mechanism allows other packages | 
|---|
| 1326 | to supply their own macros. | 
|---|
| 1327 |  | 
|---|
| 1328 | At startup, @code{aclocal} scans all the @file{.m4} files it can find, | 
|---|
| 1329 | looking for macro definitions (@pxref{Macro search path}).  Then it | 
|---|
| 1330 | scans @file{configure.in}.  Any | 
|---|
| 1331 | mention of one of the macros found in the first step causes that macro, | 
|---|
| 1332 | and any macros it in turn requires, to be put into @file{aclocal.m4}. | 
|---|
| 1333 |  | 
|---|
| 1334 | The contents of @file{acinclude.m4}, if it exists, are also | 
|---|
| 1335 | automatically included in @file{aclocal.m4}.  This is useful for | 
|---|
| 1336 | incorporating local macros into @file{configure}. | 
|---|
| 1337 |  | 
|---|
| 1338 | @code{aclocal} tries to be smart about looking for new @code{AC_DEFUN}s | 
|---|
| 1339 | in the files it scans.  It also | 
|---|
| 1340 | tries to copy the full text of the scanned file into @file{aclocal.m4}, | 
|---|
| 1341 | including both @samp{#} and @samp{dnl} comments.  If you want to make a | 
|---|
| 1342 | comment which will be completely ignored by @code{aclocal}, use | 
|---|
| 1343 | @samp{##} as the comment leader. | 
|---|
| 1344 |  | 
|---|
| 1345 | @menu | 
|---|
| 1346 | * aclocal options::             Options supported by aclocal | 
|---|
| 1347 | * Macro search path::           How aclocal finds .m4 files | 
|---|
| 1348 | @end menu | 
|---|
| 1349 |  | 
|---|
| 1350 | @node aclocal options, Macro search path, Invoking aclocal, configure | 
|---|
| 1351 | @section aclocal options | 
|---|
| 1352 |  | 
|---|
| 1353 | @cindex aclocal, Options | 
|---|
| 1354 | @cindex Options, aclocal | 
|---|
| 1355 |  | 
|---|
| 1356 | @code{aclocal} accepts the following options: | 
|---|
| 1357 |  | 
|---|
| 1358 | @table @code | 
|---|
| 1359 | @item --acdir=@var{dir} | 
|---|
| 1360 | @opindex --acdir | 
|---|
| 1361 | Look for the macro files in @var{dir} instead of the installation | 
|---|
| 1362 | directory.  This is typically used for debugging. | 
|---|
| 1363 |  | 
|---|
| 1364 | @item --help | 
|---|
| 1365 | @opindex --help | 
|---|
| 1366 | Print a summary of the command line options and exit. | 
|---|
| 1367 |  | 
|---|
| 1368 | @item -I @var{dir} | 
|---|
| 1369 | @opindex -I | 
|---|
| 1370 | Add the directory @var{dir} to the list of directories searched for | 
|---|
| 1371 | @file{.m4} files. | 
|---|
| 1372 |  | 
|---|
| 1373 | @item --output=@var{file} | 
|---|
| 1374 | @opindex --output | 
|---|
| 1375 | Cause the output to be put into @var{file} instead of @file{aclocal.m4}. | 
|---|
| 1376 |  | 
|---|
| 1377 | @item --print-ac-dir | 
|---|
| 1378 | @opindex --print-ac-dir | 
|---|
| 1379 | Prints the name of the directory which @code{aclocal} will search to | 
|---|
| 1380 | find third-party @file{.m4} files.  When this option is given, normal | 
|---|
| 1381 | processing is suppressed.  This option can be used by a package to | 
|---|
| 1382 | determine where to install a macro file. | 
|---|
| 1383 |  | 
|---|
| 1384 | @item --verbose | 
|---|
| 1385 | @opindex --verbose | 
|---|
| 1386 | Print the names of the files it examines. | 
|---|
| 1387 |  | 
|---|
| 1388 | @item --version | 
|---|
| 1389 | @opindex --version | 
|---|
| 1390 | Print the version number of Automake and exit. | 
|---|
| 1391 | @end table | 
|---|
| 1392 |  | 
|---|
| 1393 | @node Macro search path, Macros, aclocal options, configure | 
|---|
| 1394 | @section Macro search path | 
|---|
| 1395 |  | 
|---|
| 1396 | @cindex Macro search path | 
|---|
| 1397 | @cindex aclocal search path | 
|---|
| 1398 |  | 
|---|
| 1399 | By default, @command{aclocal} searches for @file{.m4} files in the following | 
|---|
| 1400 | directories, in this order: | 
|---|
| 1401 |  | 
|---|
| 1402 | @table @code | 
|---|
| 1403 | @item @var{acdir-APIVERSION} | 
|---|
| 1404 | This is where the @file{.m4} macros distributed with automake itself | 
|---|
| 1405 | are stored.  @var{APIVERSION} depends on the automake release used; | 
|---|
| 1406 | for automake 1.6.x, @var{APIVERSION} = @code{1.6}. | 
|---|
| 1407 |  | 
|---|
| 1408 | @item @var{acdir} | 
|---|
| 1409 | This directory is intended for third party @file{.m4} files, and is | 
|---|
| 1410 | configured when @command{automake} itself is built.  This is | 
|---|
| 1411 | @file{@@datadir@@/aclocal/}, which typically | 
|---|
| 1412 | expands to @file{$@{prefix@}/share/aclocal/}.  To find the compiled-in | 
|---|
| 1413 | value of @var{acdir}, use the @code{--print-ac-dir} option | 
|---|
| 1414 | (@pxref{aclocal options}). | 
|---|
| 1415 | @end table | 
|---|
| 1416 |  | 
|---|
| 1417 | As an example, suppose that automake-1.6.2 was configured with | 
|---|
| 1418 | @code{--prefix=/usr/local}.  Then, the search path would be: | 
|---|
| 1419 |  | 
|---|
| 1420 | @enumerate | 
|---|
| 1421 | @item @file{/usr/local/share/aclocal-1.6/} | 
|---|
| 1422 | @item @file{/usr/local/share/aclocal/} | 
|---|
| 1423 | @end enumerate | 
|---|
| 1424 |  | 
|---|
| 1425 | As explained in (@pxref{aclocal options}), there are several options that | 
|---|
| 1426 | can be used to change or extend this search path. | 
|---|
| 1427 |  | 
|---|
| 1428 | @subsection Modifying the macro search path: @code{--acdir} | 
|---|
| 1429 |  | 
|---|
| 1430 | The most obvious option to modify the search path is | 
|---|
| 1431 | @code{--acdir=@var{dir}}, which changes default directory and | 
|---|
| 1432 | drops the @var{APIVERSION} directory.  For example, if one specifies | 
|---|
| 1433 | @code{--acdir=/opt/private/}, then the search path becomes: | 
|---|
| 1434 |  | 
|---|
| 1435 | @enumerate | 
|---|
| 1436 | @item @file{/opt/private/} | 
|---|
| 1437 | @end enumerate | 
|---|
| 1438 |  | 
|---|
| 1439 | Note that this option, @code{--acdir}, is intended for use | 
|---|
| 1440 | by the internal automake test suite only; it is not ordinarily | 
|---|
| 1441 | needed by end-users. | 
|---|
| 1442 |  | 
|---|
| 1443 | @subsection Modifying the macro search path: @code{-I @var{dir}} | 
|---|
| 1444 |  | 
|---|
| 1445 | Any extra directories specified using @code{-I} options | 
|---|
| 1446 | (@pxref{aclocal options}) are @emph{prepended} to this search list.  Thus, | 
|---|
| 1447 | @code{aclocal -I /foo -I /bar} results in the following search path: | 
|---|
| 1448 |  | 
|---|
| 1449 | @enumerate | 
|---|
| 1450 | @item @file{/foo} | 
|---|
| 1451 | @item @file{/bar} | 
|---|
| 1452 | @item @var{acdir}-@var{APIVERSION} | 
|---|
| 1453 | @item @var{acdir} | 
|---|
| 1454 | @end enumerate | 
|---|
| 1455 |  | 
|---|
| 1456 | @subsection Modifying the macro search path: @file{dirlist} | 
|---|
| 1457 | @cindex @file{dirlist} | 
|---|
| 1458 |  | 
|---|
| 1459 | There is a third mechanism for customizing the search path.  If a | 
|---|
| 1460 | @file{dirlist} file exists in @var{acdir}, then that file is assumed to | 
|---|
| 1461 | contain a list of directories, one per line, to be added to the search | 
|---|
| 1462 | list.  These directories are searched @emph{after} all other | 
|---|
| 1463 | directories. | 
|---|
| 1464 |  | 
|---|
| 1465 | For example, suppose | 
|---|
| 1466 | @file{@var{acdir}/dirlist} contains the following: | 
|---|
| 1467 |  | 
|---|
| 1468 | @example | 
|---|
| 1469 | /test1 | 
|---|
| 1470 | /test2 | 
|---|
| 1471 | @end example | 
|---|
| 1472 |  | 
|---|
| 1473 | @noindent | 
|---|
| 1474 | and that @code{aclocal} was called with the @code{-I /foo -I /bar} options. | 
|---|
| 1475 | Then, the search path would be | 
|---|
| 1476 |  | 
|---|
| 1477 | @enumerate | 
|---|
| 1478 | @item @file{/foo} | 
|---|
| 1479 | @item @file{/bar} | 
|---|
| 1480 | @item @var{acdir}-@var{APIVERSION} | 
|---|
| 1481 | @item @var{acdir} | 
|---|
| 1482 | @item @file{/test1} | 
|---|
| 1483 | @item @file{/test2} | 
|---|
| 1484 | @end enumerate | 
|---|
| 1485 |  | 
|---|
| 1486 | If the @code{--acdir=@var{dir}} option is used, then @command{aclocal} | 
|---|
| 1487 | will search for the @file{dirlist} file in @var{dir}.  In the | 
|---|
| 1488 | @code{--acdir=/opt/private/} example above, @command{aclocal} would look | 
|---|
| 1489 | for @file{/opt/private/dirlist}.  Again, however, the @code{--acdir} | 
|---|
| 1490 | option is intended for use by the internal automake test suite only; | 
|---|
| 1491 | @code{--acdir} is not ordinarily needed by end-users. | 
|---|
| 1492 |  | 
|---|
| 1493 | @file{dirlist} is useful in the following situation: suppose that | 
|---|
| 1494 | @code{automake} version @code{1.6.2} is installed with | 
|---|
| 1495 | $prefix=/usr by the system vendor. Thus, the default search | 
|---|
| 1496 | directories are | 
|---|
| 1497 |  | 
|---|
| 1498 | @enumerate | 
|---|
| 1499 | @item @file{/usr/share/aclocal-1.6/} | 
|---|
| 1500 | @item @file{/usr/share/aclocal/} | 
|---|
| 1501 | @end enumerate | 
|---|
| 1502 |  | 
|---|
| 1503 | However, suppose further that many packages have been manually | 
|---|
| 1504 | installed on the system, with $prefix=/usr/local, as is typical. | 
|---|
| 1505 | In that case, many of these ``extra'' @file{.m4} files are in | 
|---|
| 1506 | @file{/usr/local/share/aclocal}.  The only way to force | 
|---|
| 1507 | @file{/usr/bin/aclocal} to find these ``extra'' @file{.m4} files | 
|---|
| 1508 | is to always call @code{aclocal -I /usr/local/share/aclocal}. | 
|---|
| 1509 | This is inconvenient.  With @file{dirlist}, one may create the file | 
|---|
| 1510 |  | 
|---|
| 1511 | @file{/usr/share/aclocal/dirlist} | 
|---|
| 1512 |  | 
|---|
| 1513 | @noindent | 
|---|
| 1514 | which contains only the single line | 
|---|
| 1515 |  | 
|---|
| 1516 | @file{/usr/local/share/aclocal} | 
|---|
| 1517 |  | 
|---|
| 1518 | Now, the ``default'' search path on the affected system is | 
|---|
| 1519 |  | 
|---|
| 1520 | @enumerate | 
|---|
| 1521 | @item @file{/usr/share/aclocal-1.6/} | 
|---|
| 1522 | @item @file{/usr/share/aclocal/} | 
|---|
| 1523 | @item @file{/usr/local/share/aclocal/} | 
|---|
| 1524 | @end enumerate | 
|---|
| 1525 |  | 
|---|
| 1526 | without the need for @code{-I} options; @code{-I} options can be reserved | 
|---|
| 1527 | for project-specific needs (@file{my-source-dir/m4/}), rather than | 
|---|
| 1528 | using it to work around local system-dependent tool installation | 
|---|
| 1529 | directories. | 
|---|
| 1530 |  | 
|---|
| 1531 | Similarly, @file{dirlist} can be handy if you have installed a local | 
|---|
| 1532 | copy Automake on your account and want @command{aclocal} to look for | 
|---|
| 1533 | macros installed at other places on the system. | 
|---|
| 1534 |  | 
|---|
| 1535 | @node Macros, Extending aclocal, Macro search path, configure | 
|---|
| 1536 | @section Autoconf macros supplied with Automake | 
|---|
| 1537 |  | 
|---|
| 1538 | Automake ships with several Autoconf macros that you can use from your | 
|---|
| 1539 | @file{configure.in}.  When you use one of them it will be included by | 
|---|
| 1540 | @code{aclocal} in @file{aclocal.m4}. | 
|---|
| 1541 |  | 
|---|
| 1542 | @menu | 
|---|
| 1543 | * Public macros::               Macros that you can use. | 
|---|
| 1544 | * Private macros::              Macros that you should not use. | 
|---|
| 1545 | @end menu | 
|---|
| 1546 |  | 
|---|
| 1547 | @c consider generating the following subsections automatically from m4 files. | 
|---|
| 1548 |  | 
|---|
| 1549 | @node Public macros, Private macros, Macros, Macros | 
|---|
| 1550 | @subsection Public macros | 
|---|
| 1551 |  | 
|---|
| 1552 | @table @code | 
|---|
| 1553 | @item AM_CONFIG_HEADER | 
|---|
| 1554 | Automake will generate rules to automatically regenerate the config | 
|---|
| 1555 | header.  This obsolete macro is a synonym of @code{AC_CONFIG_HEADERS} | 
|---|
| 1556 | today (@pxref{Optional}). | 
|---|
| 1557 | @cvindex AM_CONFIG_HEADER | 
|---|
| 1558 |  | 
|---|
| 1559 | @item AM_ENABLE_MULTILIB | 
|---|
| 1560 | This is used when a ``multilib'' library is being built.  The first | 
|---|
| 1561 | optional argument is the name of the @file{Makefile} being generated; it | 
|---|
| 1562 | defaults to @samp{Makefile}.  The second option argument is used to find | 
|---|
| 1563 | the top source directory; it defaults to the empty string (generally | 
|---|
| 1564 | this should not be used unless you are familiar with the internals). | 
|---|
| 1565 | @xref{Multilibs}. | 
|---|
| 1566 |  | 
|---|
| 1567 | @item AM_C_PROTOTYPES | 
|---|
| 1568 | Check to see if function prototypes are understood by the compiler.  If | 
|---|
| 1569 | so, define @samp{PROTOTYPES} and set the output variables @samp{U} and | 
|---|
| 1570 | @samp{ANSI2KNR} to the empty string.  Otherwise, set @samp{U} to | 
|---|
| 1571 | @samp{_} and @samp{ANSI2KNR} to @samp{./ansi2knr}.  Automake uses these | 
|---|
| 1572 | values to implement automatic de-ANSI-fication. | 
|---|
| 1573 | @cvindex AM_C_PROTOTYPES | 
|---|
| 1574 |  | 
|---|
| 1575 | @item AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL | 
|---|
| 1576 | If the use of @code{TIOCGWINSZ} requires @file{<sys/ioctl.h>}, then | 
|---|
| 1577 | define @code{GWINSZ_IN_SYS_IOCTL}.  Otherwise @code{TIOCGWINSZ} can be | 
|---|
| 1578 | found in @file{<termios.h>}. | 
|---|
| 1579 | @cvindex AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL | 
|---|
| 1580 |  | 
|---|
| 1581 | @item AM_INIT_AUTOMAKE([OPTIONS]) | 
|---|
| 1582 | @itemx AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) | 
|---|
| 1583 | Runs many macros required for proper operation of the generated Makefiles. | 
|---|
| 1584 |  | 
|---|
| 1585 | This macro has two forms, the first of which is preferred. | 
|---|
| 1586 | In this form, @code{AM_INIT_AUTOMAKE} is called with a | 
|---|
| 1587 | single argument --- a space-separated list of Automake options which should | 
|---|
| 1588 | be applied to every @file{Makefile.am} in the tree.  The effect is as if | 
|---|
| 1589 | each option were listed in @code{AUTOMAKE_OPTIONS}. | 
|---|
| 1590 |  | 
|---|
| 1591 | The second, deprecated, form of @code{AM_INIT_AUTOMAKE} has two required | 
|---|
| 1592 | arguments: the package and the version number.  This form is | 
|---|
| 1593 | obsolete because the @var{package} and @var{version} can be obtained | 
|---|
| 1594 | from Autoconf's @code{AC_INIT} macro (which itself has an old and a new | 
|---|
| 1595 | form). | 
|---|
| 1596 |  | 
|---|
| 1597 | If your @file{configure.in} has: | 
|---|
| 1598 | @example | 
|---|
| 1599 | AC_INIT(src/foo.c) | 
|---|
| 1600 | AM_INIT_AUTOMAKE(mumble, 1.5) | 
|---|
| 1601 | @end example | 
|---|
| 1602 | you can modernize it as follows: | 
|---|
| 1603 | @example | 
|---|
| 1604 | AC_INIT(mumble, 1.5) | 
|---|
| 1605 | AC_CONFIG_SRCDIR(src/foo.c) | 
|---|
| 1606 | AM_INIT_AUTOMAKE | 
|---|
| 1607 | @end example | 
|---|
| 1608 |  | 
|---|
| 1609 | Note that if you're upgrading your @file{configure.in} from an earlier | 
|---|
| 1610 | version of Automake, it is not always correct to simply move the package | 
|---|
| 1611 | and version arguments from @code{AM_INIT_AUTOMAKE} directly to | 
|---|
| 1612 | @code{AC_INIT}, as in the example above.  The first argument to | 
|---|
| 1613 | @code{AC_INIT} should be the name of your package (e.g. @samp{GNU Automake}), | 
|---|
| 1614 | not the tarball name (e.g. @samp{automake}) that you used to pass to | 
|---|
| 1615 | @code{AM_INIT_AUTOMAKE}.  Autoconf tries to derive a tarball name from | 
|---|
| 1616 | the package name, which should work for most but not all package names. | 
|---|
| 1617 | (If it doesn't work for yours, you can use the | 
|---|
| 1618 | four-argument form of @code{AC_INIT} --- supported in Autoconf versions | 
|---|
| 1619 | greater than 2.52g --- to provide the tarball name explicitly). | 
|---|
| 1620 |  | 
|---|
| 1621 | By default this macro @code{AC_DEFINE}'s @samp{PACKAGE} and | 
|---|
| 1622 | @samp{VERSION}.  This can be avoided by passing the @samp{no-define} | 
|---|
| 1623 | option, as in: | 
|---|
| 1624 | @example | 
|---|
| 1625 | AM_INIT_AUTOMAKE([gnits 1.5 no-define dist-bzip2]) | 
|---|
| 1626 | @end example | 
|---|
| 1627 | or by passing a third non-empty argument to the obsolete form. | 
|---|
| 1628 |  | 
|---|
| 1629 | @cvindex PACKAGE, prevent definition | 
|---|
| 1630 | @cvindex VERSION, prevent definition | 
|---|
| 1631 |  | 
|---|
| 1632 |  | 
|---|
| 1633 | @item AM_PATH_LISPDIR | 
|---|
| 1634 | Searches for the program @code{emacs}, and, if found, sets the output | 
|---|
| 1635 | variable @code{lispdir} to the full path to Emacs' site-lisp directory. | 
|---|
| 1636 |  | 
|---|
| 1637 | Note that this test assumes the @code{emacs} found to be a version that | 
|---|
| 1638 | supports Emacs Lisp (such as @sc{gnu} Emacs or XEmacs).  Other emacsen | 
|---|
| 1639 | can cause this test to hang (some, like old versions of MicroEmacs, | 
|---|
| 1640 | start up in interactive mode, requiring @samp{C-x C-c} to exit, which | 
|---|
| 1641 | is hardly obvious for a non-emacs user).  In most cases, however, you | 
|---|
| 1642 | should be able to use @samp{C-c} to kill the test.  In order to avoid | 
|---|
| 1643 | problems, you can set @code{EMACS} to ``no'' in the environment, or | 
|---|
| 1644 | use the @samp{--with-lispdir} option to @command{configure} to | 
|---|
| 1645 | explicitly set the correct path (if you're sure you have an @code{emacs} | 
|---|
| 1646 | that supports Emacs Lisp. | 
|---|
| 1647 | @cvindex AM_PATH_LISPDIR | 
|---|
| 1648 |  | 
|---|
| 1649 | @item AM_PROG_AS | 
|---|
| 1650 | Use this macro when you have assembly code in your project.  This will | 
|---|
| 1651 | choose the assembler for you (by default the C compiler) and set | 
|---|
| 1652 | @code{CCAS}, and will also set @code{CCASFLAGS} if required. | 
|---|
| 1653 |  | 
|---|
| 1654 | @item AM_PROG_CC_C_O | 
|---|
| 1655 | This is like @code{AC_PROG_CC_C_O}, but it generates its results in the | 
|---|
| 1656 | manner required by automake.  You must use this instead of | 
|---|
| 1657 | @code{AC_PROG_CC_C_O} when you need this functionality. | 
|---|
| 1658 |  | 
|---|
| 1659 | @item AM_PROG_CC_STDC | 
|---|
| 1660 | If the C compiler is not in ANSI C mode by default, try to add an option | 
|---|
| 1661 | to output variable @code{CC} to make it so.  This macro tries various | 
|---|
| 1662 | options that select ANSI C on some system or another.  It considers the | 
|---|
| 1663 | compiler to be in ANSI C mode if it handles function prototypes correctly. | 
|---|
| 1664 |  | 
|---|
| 1665 | If you use this macro, you should check after calling it whether the C | 
|---|
| 1666 | compiler has been set to accept ANSI C; if not, the shell variable | 
|---|
| 1667 | @code{am_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source | 
|---|
| 1668 | code in ANSI C, you can make an un-ANSIfied copy of it by using the | 
|---|
| 1669 | @code{ansi2knr} option (@pxref{ANSI}). | 
|---|
| 1670 |  | 
|---|
| 1671 | This macro is a relic from the time Autoconf didn't offer such a | 
|---|
| 1672 | feature.  @code{AM_PROG_CC_STDC}'s logic has now been merged into | 
|---|
| 1673 | Autoconf's @code{AC_PROG_CC} macro, therefore you should use the latter | 
|---|
| 1674 | instead.  Chances are you are already using @code{AC_PROG_CC}, so you | 
|---|
| 1675 | can simply remove the @code{AM_PROG_CC_STDC} call and turn all | 
|---|
| 1676 | occurrences of @code{$am_cv_prog_cc_stdc} into | 
|---|
| 1677 | @code{$ac_cv_prog_cc_stdc}.  @code{AM_PROG_CC_STDC} will be marked as | 
|---|
| 1678 | obsolete (in the Autoconf sense) in Automake 1.8. | 
|---|
| 1679 |  | 
|---|
| 1680 | @item AM_PROG_LEX | 
|---|
| 1681 | @cindex HP-UX 10, lex problems | 
|---|
| 1682 | @cindex lex problems with HP-UX 10 | 
|---|
| 1683 | Like @code{AC_PROG_LEX} (@pxref{Particular Programs, , Particular | 
|---|
| 1684 | Program Checks, autoconf, The Autoconf Manual}), but uses the | 
|---|
| 1685 | @code{missing} script on systems that do not have @code{lex}. | 
|---|
| 1686 | @samp{HP-UX 10} is one such system. | 
|---|
| 1687 |  | 
|---|
| 1688 | @item AM_PROG_GCJ | 
|---|
| 1689 | This macro finds the @code{gcj} program or causes an error.  It sets | 
|---|
| 1690 | @samp{GCJ} and @samp{GCJFLAGS}.  @code{gcj} is the Java front-end to the | 
|---|
| 1691 | GNU Compiler Collection. | 
|---|
| 1692 | @cvindex AM_PROG_GCJ | 
|---|
| 1693 |  | 
|---|
| 1694 | @item AM_SYS_POSIX_TERMIOS | 
|---|
| 1695 | @cvindex am_cv_sys_posix_termios | 
|---|
| 1696 | @cindex POSIX termios headers | 
|---|
| 1697 | @cindex termios POSIX headers | 
|---|
| 1698 | Check to see if POSIX termios headers and functions are available on the | 
|---|
| 1699 | system.  If so, set the shell variable @code{am_cv_sys_posix_termios} to | 
|---|
| 1700 | @samp{yes}.  If not, set the variable to @samp{no}. | 
|---|
| 1701 |  | 
|---|
| 1702 | @item AM_WITH_DMALLOC | 
|---|
| 1703 | @cvindex WITH_DMALLOC | 
|---|
| 1704 | @cindex dmalloc, support for | 
|---|
| 1705 | @opindex --with-dmalloc | 
|---|
| 1706 | Add support for the | 
|---|
| 1707 | @uref{ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz, dmalloc} | 
|---|
| 1708 | package.  If the user configures with @samp{--with-dmalloc}, then define | 
|---|
| 1709 | @code{WITH_DMALLOC} and add @samp{-ldmalloc} to @code{LIBS}. | 
|---|
| 1710 |  | 
|---|
| 1711 | @item AM_WITH_REGEX | 
|---|
| 1712 | @cvindex WITH_REGEX | 
|---|
| 1713 | @opindex --with-regex | 
|---|
| 1714 | @cindex regex package | 
|---|
| 1715 | @cindex rx package | 
|---|
| 1716 | Adds @samp{--with-regex} to the @code{configure} command line.  If | 
|---|
| 1717 | specified (the default), then the @samp{regex} regular expression | 
|---|
| 1718 | library is used, @file{regex.o} is put into @samp{LIBOBJS}, and | 
|---|
| 1719 | @samp{WITH_REGEX} is defined.  If @samp{--without-regex} is given, then | 
|---|
| 1720 | the @samp{rx} regular expression library is used, and @file{rx.o} is put | 
|---|
| 1721 | into @samp{LIBOBJS}. | 
|---|
| 1722 |  | 
|---|
| 1723 | @end table | 
|---|
| 1724 |  | 
|---|
| 1725 | @node Private macros,  , Public macros, Macros | 
|---|
| 1726 | @subsection Private macros | 
|---|
| 1727 |  | 
|---|
| 1728 | The following macros are private macros you should not call directly. | 
|---|
| 1729 | They are called by the other public macros when appropriate.  Do not | 
|---|
| 1730 | rely on them, as they might be changed in a future version.  Consider | 
|---|
| 1731 | them as implementation details; or better, do not consider them at all: | 
|---|
| 1732 | skip this section! | 
|---|
| 1733 |  | 
|---|
| 1734 | @table @code | 
|---|
| 1735 | @item _AM_DEPENDENCIES | 
|---|
| 1736 | @itemx AM_SET_DEPDIR | 
|---|
| 1737 | @itemx AM_DEP_TRACK | 
|---|
| 1738 | @itemx AM_OUTPUT_DEPENDENCY_COMMANDS | 
|---|
| 1739 | These macros are used to implement Automake's automatic dependency | 
|---|
| 1740 | tracking scheme.  They are called automatically by automake when | 
|---|
| 1741 | required, and there should be no need to invoke them manually. | 
|---|
| 1742 |  | 
|---|
| 1743 | @item AM_MAKE_INCLUDE | 
|---|
| 1744 | This macro is used to discover how the user's @code{make} handles | 
|---|
| 1745 | @code{include} statements.  This macro is automatically invoked when | 
|---|
| 1746 | needed; there should be no need to invoke it manually. | 
|---|
| 1747 |  | 
|---|
| 1748 | @item AM_PROG_INSTALL_STRIP | 
|---|
| 1749 | This is used to find a version of @code{install} which can be used to | 
|---|
| 1750 | @code{strip} a program at installation time.  This macro is | 
|---|
| 1751 | automatically included when required. | 
|---|
| 1752 |  | 
|---|
| 1753 | @item AM_SANITY_CHECK | 
|---|
| 1754 | This checks to make sure that a file created in the build directory is | 
|---|
| 1755 | newer than a file in the source directory.  This can fail on systems | 
|---|
| 1756 | where the clock is set incorrectly.  This macro is automatically run | 
|---|
| 1757 | from @code{AM_INIT_AUTOMAKE}. | 
|---|
| 1758 |  | 
|---|
| 1759 | @end table | 
|---|
| 1760 |  | 
|---|
| 1761 |  | 
|---|
| 1762 |  | 
|---|
| 1763 | @node Extending aclocal,  , Macros, configure | 
|---|
| 1764 | @section Writing your own aclocal macros | 
|---|
| 1765 |  | 
|---|
| 1766 | @cindex aclocal, extending | 
|---|
| 1767 | @cindex Extending aclocal | 
|---|
| 1768 |  | 
|---|
| 1769 | The @command{aclocal} program doesn't have any built-in knowledge of any | 
|---|
| 1770 | macros, so it is easy to extend it with your own macros. | 
|---|
| 1771 |  | 
|---|
| 1772 | This can be used by libraries which want to supply their own Autoconf | 
|---|
| 1773 | macros for use by other programs.  For instance the @command{gettext} | 
|---|
| 1774 | library supplies a macro @code{AM_GNU_GETTEXT} which should be used by | 
|---|
| 1775 | any package using @command{gettext}.  When the library is installed, it | 
|---|
| 1776 | installs this macro so that @command{aclocal} will find it. | 
|---|
| 1777 |  | 
|---|
| 1778 | A macro file's name should end in @file{.m4}.  Such files should be | 
|---|
| 1779 | installed in @file{$(datadir)/aclocal}.  This is as simple as writing: | 
|---|
| 1780 |  | 
|---|
| 1781 | @example | 
|---|
| 1782 | aclocaldir = $(datadir)/aclocal | 
|---|
| 1783 | aclocal_DATA = mymacro.m4 myothermacro.m4 | 
|---|
| 1784 | @end example | 
|---|
| 1785 |  | 
|---|
| 1786 | A file of macros should be a series of properly quoted | 
|---|
| 1787 | @code{AC_DEFUN}'s (@pxref{Macro Definitions, , , autoconf, The | 
|---|
| 1788 | Autoconf Manual}).  The @command{aclocal} programs also understands | 
|---|
| 1789 | @code{AC_REQUIRE} (@pxref{Prerequisite Macros, , , autoconf, The | 
|---|
| 1790 | Autoconf Manual}), so it is safe to put each macro in a separate file. | 
|---|
| 1791 | Each file should have no side effects but macro definitions. | 
|---|
| 1792 | Especially, any call to @code{AC_PREREQ} should be done inside the | 
|---|
| 1793 | defined macro, not at the beginning of the file. | 
|---|
| 1794 |  | 
|---|
| 1795 | @cindex underquoted AC_DEFUN | 
|---|
| 1796 | @cvindex AC_DEFUN | 
|---|
| 1797 | @cvindex AC_PREREQ | 
|---|
| 1798 |  | 
|---|
| 1799 | Starting with Automake 1.8, @command{aclocal} will warn about all | 
|---|
| 1800 | underquoted calls to @code{AC_DEFUN}.  We realize this will annoy a | 
|---|
| 1801 | lot of people, because @command{aclocal} was not so strict in the past | 
|---|
| 1802 | and many third party macros are underquoted; and we have to apologize | 
|---|
| 1803 | for this temporary inconvenience.  The reason we have to be stricter | 
|---|
| 1804 | is that a future implementation of @command{aclocal} will have to | 
|---|
| 1805 | temporary include all these third party @file{.m4} files, maybe | 
|---|
| 1806 | several times, even those which are not actually needed.  Doing so | 
|---|
| 1807 | should alleviate many problem of the current implementation, however | 
|---|
| 1808 | it requires a stricter style from the macro authors.  Hopefully it is | 
|---|
| 1809 | easy to revise the existing macros.  For instance | 
|---|
| 1810 | @example | 
|---|
| 1811 | # bad style | 
|---|
| 1812 | AC_PREREQ(2.57) | 
|---|
| 1813 | AC_DEFUN(AX_FOOBAR, | 
|---|
| 1814 | [AC_REQUIRE([AX_SOMETHING])dnl | 
|---|
| 1815 | AX_FOO | 
|---|
| 1816 | AX_BAR | 
|---|
| 1817 | ]) | 
|---|
| 1818 | @end example | 
|---|
| 1819 | @noindent | 
|---|
| 1820 | should be rewritten as | 
|---|
| 1821 | @example | 
|---|
| 1822 | AC_DEFUN([AX_FOOBAR], | 
|---|
| 1823 | [AC_PREREQ(2.57)dnl | 
|---|
| 1824 | AC_REQUIRE([AX_SOMETHING])dnl | 
|---|
| 1825 | AX_FOO | 
|---|
| 1826 | AX_BAR | 
|---|
| 1827 | ]) | 
|---|
| 1828 | @end example | 
|---|
| 1829 |  | 
|---|
| 1830 | Wrapping the @code{AC_PREREQ} call inside the macro ensures that | 
|---|
| 1831 | Autoconf 2.57 will not be required if @code{AX_FOOBAR} is not actually | 
|---|
| 1832 | used.  Most importantly, quoting the first argument of @code{AC_DEFUN} | 
|---|
| 1833 | allows the macro to be redefined or included twice (otherwise this | 
|---|
| 1834 | first argument would be expansed during the second definition). | 
|---|
| 1835 |  | 
|---|
| 1836 | If you have been directed here by the @command{aclocal} diagnostic but | 
|---|
| 1837 | are not the maintainer of the implicated macro, you will want to | 
|---|
| 1838 | contact the maintainer of that macro.  Please make sure you have the | 
|---|
| 1839 | last version of the macro and that the problem already hasn't been | 
|---|
| 1840 | reported before doing so: people tend to work faster when they aren't | 
|---|
| 1841 | flooded by mails. | 
|---|
| 1842 |  | 
|---|
| 1843 |  | 
|---|
| 1844 | @node Top level, Alternative, configure, Top | 
|---|
| 1845 | @chapter The top-level @file{Makefile.am} | 
|---|
| 1846 |  | 
|---|
| 1847 | @section Recursing subdirectories | 
|---|
| 1848 |  | 
|---|
| 1849 | @cindex SUBDIRS, explained | 
|---|
| 1850 |  | 
|---|
| 1851 | In packages with subdirectories, the top level @file{Makefile.am} must | 
|---|
| 1852 | tell Automake which subdirectories are to be built.  This is done via | 
|---|
| 1853 | the @code{SUBDIRS} variable. | 
|---|
| 1854 | @vindex SUBDIRS | 
|---|
| 1855 |  | 
|---|
| 1856 | The @code{SUBDIRS} variable holds a list of subdirectories in which | 
|---|
| 1857 | building of various sorts can occur.  Many targets (e.g. @code{all}) in | 
|---|
| 1858 | the generated @file{Makefile} will run both locally and in all specified | 
|---|
| 1859 | subdirectories.  Note that the directories listed in @code{SUBDIRS} are | 
|---|
| 1860 | not required to contain @file{Makefile.am}s; only @file{Makefile}s | 
|---|
| 1861 | (after configuration).  This allows inclusion of libraries from packages | 
|---|
| 1862 | which do not use Automake (such as @code{gettext}). | 
|---|
| 1863 |  | 
|---|
| 1864 | In packages that use subdirectories, the top-level @file{Makefile.am} is | 
|---|
| 1865 | often very short.  For instance, here is the @file{Makefile.am} from the | 
|---|
| 1866 | GNU Hello distribution: | 
|---|
| 1867 |  | 
|---|
| 1868 | @example | 
|---|
| 1869 | EXTRA_DIST = BUGS ChangeLog.O README-alpha | 
|---|
| 1870 | SUBDIRS = doc intl po src tests | 
|---|
| 1871 | @end example | 
|---|
| 1872 |  | 
|---|
| 1873 | When Automake invokes @code{make} in a subdirectory, it uses the value | 
|---|
| 1874 | of the @code{MAKE} variable.  It passes the value of the variable | 
|---|
| 1875 | @code{AM_MAKEFLAGS} to the @code{make} invocation; this can be set in | 
|---|
| 1876 | @file{Makefile.am} if there are flags you must always pass to | 
|---|
| 1877 | @code{make}. | 
|---|
| 1878 | @vindex MAKE | 
|---|
| 1879 | @vindex MAKEFLAGS | 
|---|
| 1880 |  | 
|---|
| 1881 | The directories mentioned in @code{SUBDIRS} must be direct children of | 
|---|
| 1882 | the current directory.  For instance, you cannot put @samp{src/subdir} | 
|---|
| 1883 | into @code{SUBDIRS}.  Instead you should put @code{SUBDIRS = subdir} | 
|---|
| 1884 | into @file{src/Makefile.am}.  Automake can be used to construct packages | 
|---|
| 1885 | of arbitrary depth this way. | 
|---|
| 1886 |  | 
|---|
| 1887 | By default, Automake generates @file{Makefiles} which work depth-first | 
|---|
| 1888 | (@samp{postfix}).  However, it is possible to change this ordering.  You | 
|---|
| 1889 | can do this by putting @samp{.} into @code{SUBDIRS}.  For instance, | 
|---|
| 1890 | putting @samp{.}  first will cause a @samp{prefix} ordering of | 
|---|
| 1891 | directories.  All @samp{clean} targets are run in reverse order of build | 
|---|
| 1892 | targets. | 
|---|
| 1893 |  | 
|---|
| 1894 | @section Conditional subdirectories | 
|---|
| 1895 | @cindex Subdirectories, building conditionally | 
|---|
| 1896 | @cindex Conditional subdirectories | 
|---|
| 1897 | @cindex @code{SUBDIRS}, conditional | 
|---|
| 1898 | @cindex Conditional @code{SUBDIRS} | 
|---|
| 1899 |  | 
|---|
| 1900 | It is possible to define the @code{SUBDIRS} variable conditionally if, | 
|---|
| 1901 | like in the case of GNU @code{Inetutils}, you want to only build a | 
|---|
| 1902 | subset of the entire package. | 
|---|
| 1903 |  | 
|---|
| 1904 | To illustrate how this works, let's assume we have two directories | 
|---|
| 1905 | @file{src/} and @file{opt/}.  @file{src/} should always be built, but we | 
|---|
| 1906 | want to decide in @code{./configure} whether @file{opt/} will be built | 
|---|
| 1907 | or not.  (For this example we will assume that @file{opt/} should be | 
|---|
| 1908 | built when the variable @code{$want_opt} was set to @code{yes}.) | 
|---|
| 1909 |  | 
|---|
| 1910 | Running @code{make} should thus recurse into @file{src/} always, and | 
|---|
| 1911 | then maybe in @file{opt/}. | 
|---|
| 1912 |  | 
|---|
| 1913 | However @code{make dist} should always recurse into both @file{src/} and | 
|---|
| 1914 | @file{opt/}.  Because @file{opt/} should be distributed even if it is | 
|---|
| 1915 | not needed in the current configuration. This means @file{opt/Makefile} | 
|---|
| 1916 | should be created unconditionally.  @footnote{Don't try seeking a | 
|---|
| 1917 | solution where @file{opt/Makefile} is created conditionally, this is a | 
|---|
| 1918 | lot trickier than the solutions presented here.} | 
|---|
| 1919 |  | 
|---|
| 1920 | There are two ways to setup a project like this.  You can use Automake | 
|---|
| 1921 | conditionals (@pxref{Conditionals}) or use Autoconf @code{AC_SUBST} | 
|---|
| 1922 | variables (@pxref{Setting Output Variables, , Setting Output Variables, | 
|---|
| 1923 | autoconf, The Autoconf Manual}).  Using Automake conditionals is the | 
|---|
| 1924 | preferred solution. | 
|---|
| 1925 |  | 
|---|
| 1926 | @subsection Conditional subdirectories with @code{AM_CONDITIONAL} | 
|---|
| 1927 | @cindex @code{SUBDIRS} and @code{AM_CONDITIONAL} | 
|---|
| 1928 | @cindex @code{AM_CONDITIONAL} and @code{SUBDIRS} | 
|---|
| 1929 |  | 
|---|
| 1930 | @c The test case for the setup described here is | 
|---|
| 1931 | @c     test/subdircond2.test | 
|---|
| 1932 | @c Try to keep it in sync. | 
|---|
| 1933 |  | 
|---|
| 1934 | @file{configure} should output the @file{Makefile} for each directory | 
|---|
| 1935 | and define a condition into which @file{opt/} should be built. | 
|---|
| 1936 |  | 
|---|
| 1937 | @example | 
|---|
| 1938 | @dots{} | 
|---|
| 1939 | AM_CONDITIONAL([COND_OPT], [test "$want_opt" = yes]) | 
|---|
| 1940 | AC_CONFIG_FILES([Makefile src/Makefile opt/Makefile]) | 
|---|
| 1941 | @dots{} | 
|---|
| 1942 | @end example | 
|---|
| 1943 |  | 
|---|
| 1944 | Then @code{SUBDIRS} can be defined in the top-level @file{Makefile.am} | 
|---|
| 1945 | as follows. | 
|---|
| 1946 |  | 
|---|
| 1947 | @example | 
|---|
| 1948 | if COND_OPT | 
|---|
| 1949 | MAYBE_OPT = opt | 
|---|
| 1950 | endif | 
|---|
| 1951 | SUBDIRS = src $(MAYBE_OPT) | 
|---|
| 1952 | @end example | 
|---|
| 1953 |  | 
|---|
| 1954 | As you can see, running @code{make} will rightly recurse into | 
|---|
| 1955 | @file{src/} and maybe @file{opt/}. | 
|---|
| 1956 |  | 
|---|
| 1957 | @vindex DIST_SUBDIRS | 
|---|
| 1958 | As you can't see, running @code{make dist} will recurse into both | 
|---|
| 1959 | @file{src/} and @file{opt/} directories because @code{make dist}, unlike | 
|---|
| 1960 | @code{make all}, doesn't use the @code{SUBDIRS} variable.  It uses the | 
|---|
| 1961 | @code{DIST_SUBDIRS} variable. | 
|---|
| 1962 |  | 
|---|
| 1963 | In this case Automake will define @code{DIST_SUBDIRS = src opt} | 
|---|
| 1964 | automatically because it knows that @code{MAYBE_OPT} can contain | 
|---|
| 1965 | @code{opt} in some condition. | 
|---|
| 1966 |  | 
|---|
| 1967 | @subsection Conditional subdirectories with @code{AC_SUBST} | 
|---|
| 1968 | @cindex @code{SUBDIRS} and @code{AC_SUBST} | 
|---|
| 1969 | @cindex @code{AC_SUBST} and @code{SUBDIRS} | 
|---|
| 1970 |  | 
|---|
| 1971 | @c The test case for the setup described here is | 
|---|
| 1972 | @c     test/subdircond3.test | 
|---|
| 1973 | @c Try to keep it in sync. | 
|---|
| 1974 |  | 
|---|
| 1975 | Another idea is to define @code{MAYBE_OPT} from @file{./configure} using | 
|---|
| 1976 | @code{AC_SUBST}: | 
|---|
| 1977 |  | 
|---|
| 1978 | @example | 
|---|
| 1979 | @dots{} | 
|---|
| 1980 | if test "$want_opt" = yes; then | 
|---|
| 1981 | MAYBE_OPT=opt | 
|---|
| 1982 | else | 
|---|
| 1983 | MAYBE_OPT= | 
|---|
| 1984 | fi | 
|---|
| 1985 | AC_SUBST([MAYBE_OPT]) | 
|---|
| 1986 | AC_CONFIG_FILES([Makefile src/Makefile opt/Makefile]) | 
|---|
| 1987 | @dots{} | 
|---|
| 1988 | @end example | 
|---|
| 1989 |  | 
|---|
| 1990 | In this case the top-level @file{Makefile.am} should look as follows. | 
|---|
| 1991 |  | 
|---|
| 1992 | @example | 
|---|
| 1993 | SUBDIRS = src $(MAYBE_OPT) | 
|---|
| 1994 | DIST_SUBDIRS = src opt | 
|---|
| 1995 | @end example | 
|---|
| 1996 |  | 
|---|
| 1997 | The drawback is that since Automake cannot guess what the possible | 
|---|
| 1998 | values of @code{MAYBE_OPT} are, it is necessary to define | 
|---|
| 1999 | @code{DIST_SUBDIRS}. | 
|---|
| 2000 |  | 
|---|
| 2001 | @subsection How @code{DIST_SUBDIRS} is used | 
|---|
| 2002 | @cindex @code{DIST_SUBDIRS}, explained | 
|---|
| 2003 |  | 
|---|
| 2004 | As shown in the above examples, @code{DIST_SUBDIRS} is used by targets | 
|---|
| 2005 | that need to recurse in all directories, even those which have been | 
|---|
| 2006 | conditionally left out of the build. | 
|---|
| 2007 |  | 
|---|
| 2008 | Precisely, @code{DIST_SUBDIRS} is used by @code{make dist}, @code{make | 
|---|
| 2009 | distclean}, and @code{make maintainer-clean}.  All other recursive | 
|---|
| 2010 | targets use @code{SUBDIRS}. | 
|---|
| 2011 |  | 
|---|
| 2012 | Automake will define @code{DIST_SUBDIRS} automatically from the | 
|---|
| 2013 | possibles values of @code{SUBDIRS} in all conditions. | 
|---|
| 2014 |  | 
|---|
| 2015 | If @code{SUBDIRS} contains @code{AC_SUBST} variables, | 
|---|
| 2016 | @code{DIST_SUBDIRS} will not be defined correctly because Automake | 
|---|
| 2017 | doesn't know the possible values of these variables.  In this case | 
|---|
| 2018 | @code{DIST_SUBDIRS} needs to be defined manually. | 
|---|
| 2019 |  | 
|---|
| 2020 |  | 
|---|
| 2021 | @node Alternative, Rebuilding, Top level, Top | 
|---|
| 2022 | @chapter An Alternative Approach to Subdirectories | 
|---|
| 2023 |  | 
|---|
| 2024 | If you've ever read Peter Miller's excellent paper, | 
|---|
| 2025 | @uref{http://www.pcug.org.au/~millerp/rmch/recu-make-cons-harm.html, | 
|---|
| 2026 | Recursive Make Considered Harmful}, the preceding section on the use of | 
|---|
| 2027 | subdirectories will probably come as unwelcome advice.  For those who | 
|---|
| 2028 | haven't read the paper, Miller's main thesis is that recursive | 
|---|
| 2029 | @code{make} invocations are both slow and error-prone. | 
|---|
| 2030 |  | 
|---|
| 2031 | Automake provides sufficient cross-directory support @footnote{We | 
|---|
| 2032 | believe.  This work is new and there are probably warts. | 
|---|
| 2033 | @xref{Introduction}, for information on reporting bugs.} to enable you | 
|---|
| 2034 | to write a single @file{Makefile.am} for a complex multi-directory | 
|---|
| 2035 | package. | 
|---|
| 2036 |  | 
|---|
| 2037 |  | 
|---|
| 2038 | By default an installable file specified in a subdirectory will have its | 
|---|
| 2039 | directory name stripped before installation.  For instance, in this | 
|---|
| 2040 | example, the header file will be installed as | 
|---|
| 2041 | @file{$(includedir)/stdio.h}: | 
|---|
| 2042 |  | 
|---|
| 2043 | @example | 
|---|
| 2044 | include_HEADERS = inc/stdio.h | 
|---|
| 2045 | @end example | 
|---|
| 2046 |  | 
|---|
| 2047 | @cindex nobase_ | 
|---|
| 2048 | @cindex Path stripping, avoiding | 
|---|
| 2049 | @cindex Avoiding path stripping | 
|---|
| 2050 |  | 
|---|
| 2051 | However, the @samp{nobase_} prefix can be used to circumvent this path | 
|---|
| 2052 | stripping.  In this example, the header file will be installed as | 
|---|
| 2053 | @file{$(includedir)/sys/types.h}: | 
|---|
| 2054 |  | 
|---|
| 2055 | @example | 
|---|
| 2056 | nobase_include_HEADERS = sys/types.h | 
|---|
| 2057 | @end example | 
|---|
| 2058 |  | 
|---|
| 2059 | @cindex nobase_ and dist_ or nodist_ | 
|---|
| 2060 | @cindex dist_ and nobase_ | 
|---|
| 2061 | @cindex nodist_ and nobase_ | 
|---|
| 2062 |  | 
|---|
| 2063 | @samp{nobase_} should be specified first when used in conjunction with | 
|---|
| 2064 | either @samp{dist_} or @samp{nodist_} (@pxref{Dist}).  For instance: | 
|---|
| 2065 |  | 
|---|
| 2066 | @example | 
|---|
| 2067 | nobase_dist_pkgdata_DATA = images/vortex.pgm | 
|---|
| 2068 | @end example | 
|---|
| 2069 |  | 
|---|
| 2070 | @node Rebuilding, Programs, Alternative, Top | 
|---|
| 2071 | @chapter Rebuilding Makefiles | 
|---|
| 2072 |  | 
|---|
| 2073 | Automake generates rules to automatically rebuild @file{Makefile}s, | 
|---|
| 2074 | @file{configure}, and other derived files like @file{Makefile.in}. | 
|---|
| 2075 |  | 
|---|
| 2076 | If you are using @code{AM_MAINTAINER_MODE} in @file{configure.in}, then | 
|---|
| 2077 | these automatic rebuilding rules are only enabled in maintainer mode. | 
|---|
| 2078 |  | 
|---|
| 2079 | Sometimes you need to run @code{aclocal} with an argument like @code{-I} | 
|---|
| 2080 | to tell it where to find @file{.m4} files.  Since sometimes @code{make} | 
|---|
| 2081 | will automatically run @code{aclocal}, you need a way to specify these | 
|---|
| 2082 | arguments.  You can do this by defining @code{ACLOCAL_AMFLAGS}; this | 
|---|
| 2083 | holds arguments which are passed verbatim to @code{aclocal}.  This variable | 
|---|
| 2084 | is only useful in the top-level @file{Makefile.am}. | 
|---|
| 2085 | @vindex ACLOCAL_AMFLAGS | 
|---|
| 2086 |  | 
|---|
| 2087 |  | 
|---|
| 2088 | @node Programs, Other objects, Rebuilding, Top | 
|---|
| 2089 | @chapter Building Programs and Libraries | 
|---|
| 2090 |  | 
|---|
| 2091 | A large part of Automake's functionality is dedicated to making it easy | 
|---|
| 2092 | to build programs and libraries. | 
|---|
| 2093 |  | 
|---|
| 2094 | @menu | 
|---|
| 2095 | * A Program::                   Building a program | 
|---|
| 2096 | * A Library::                   Building a library | 
|---|
| 2097 | * A Shared Library::            Building a Libtool library | 
|---|
| 2098 | * Program and Library Variables::  Variables controlling program and | 
|---|
| 2099 | library builds | 
|---|
| 2100 | * LIBOBJS::                     Special handling for LIBOBJS and ALLOCA | 
|---|
| 2101 | * Program variables::           Variables used when building a program | 
|---|
| 2102 | * Yacc and Lex::                Yacc and Lex support | 
|---|
| 2103 | * C++ Support:: | 
|---|
| 2104 | * Assembly Support:: | 
|---|
| 2105 | * Fortran 77 Support:: | 
|---|
| 2106 | * Java Support:: | 
|---|
| 2107 | * Support for Other Languages:: | 
|---|
| 2108 | * ANSI::                        Automatic de-ANSI-fication | 
|---|
| 2109 | * Dependencies::                Automatic dependency tracking | 
|---|
| 2110 | * EXEEXT::                      Support for executable extensions | 
|---|
| 2111 | @end menu | 
|---|
| 2112 |  | 
|---|
| 2113 |  | 
|---|
| 2114 | @node A Program, A Library, Programs, Programs | 
|---|
| 2115 | @section Building a program | 
|---|
| 2116 |  | 
|---|
| 2117 | In order to build a program, you need to tell Automake which sources | 
|---|
| 2118 | are part of it, and which libraries it should be linked with. | 
|---|
| 2119 |  | 
|---|
| 2120 | This section also covers conditional compilation of sources or | 
|---|
| 2121 | programs.  Most of the comments about these also apply to libraries | 
|---|
| 2122 | (@pxref{A Library}) and libtool libraries (@pxref{A Shared Library}). | 
|---|
| 2123 |  | 
|---|
| 2124 | @menu | 
|---|
| 2125 | * Program Sources::             Defining program sources | 
|---|
| 2126 | * Linking::                     Linking with libraries or extra objects | 
|---|
| 2127 | * Conditional Sources::         Handling conditional sources | 
|---|
| 2128 | * Conditional Programs::        Building program conditionally | 
|---|
| 2129 | @end menu | 
|---|
| 2130 |  | 
|---|
| 2131 | @node Program Sources, Linking, A Program, A Program | 
|---|
| 2132 | @subsection Defining program sources | 
|---|
| 2133 |  | 
|---|
| 2134 | @cindex PROGRAMS, bindir | 
|---|
| 2135 | @vindex bin_PROGRAMS | 
|---|
| 2136 | @vindex sbin_PROGRAMS | 
|---|
| 2137 | @vindex libexec_PROGRAMS | 
|---|
| 2138 | @vindex pkglib_PROGRAMS | 
|---|
| 2139 | @vindex noinst_PROGRAMS | 
|---|
| 2140 | @vindex check_PROGRAMS | 
|---|
| 2141 |  | 
|---|
| 2142 | In a directory containing source that gets built into a program (as | 
|---|
| 2143 | opposed to a library or a script), the @samp{PROGRAMS} primary is used. | 
|---|
| 2144 | Programs can be installed in @code{bindir}, @code{sbindir}, | 
|---|
| 2145 | @code{libexecdir}, @code{pkglibdir}, or not at all (@samp{noinst}). | 
|---|
| 2146 | They can also be built only for @code{make check}, in which case the | 
|---|
| 2147 | prefix is @samp{check}. | 
|---|
| 2148 |  | 
|---|
| 2149 | For instance: | 
|---|
| 2150 |  | 
|---|
| 2151 | @example | 
|---|
| 2152 | bin_PROGRAMS = hello | 
|---|
| 2153 | @end example | 
|---|
| 2154 |  | 
|---|
| 2155 | In this simple case, the resulting @file{Makefile.in} will contain code | 
|---|
| 2156 | to generate a program named @code{hello}. | 
|---|
| 2157 |  | 
|---|
| 2158 | Associated with each program are several assisting variables which are | 
|---|
| 2159 | named after the program.  These variables are all optional, and have | 
|---|
| 2160 | reasonable defaults.  Each variable, its use, and default is spelled out | 
|---|
| 2161 | below; we use the ``hello'' example throughout. | 
|---|
| 2162 |  | 
|---|
| 2163 | The variable @code{hello_SOURCES} is used to specify which source files | 
|---|
| 2164 | get built into an executable: | 
|---|
| 2165 |  | 
|---|
| 2166 | @example | 
|---|
| 2167 | hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h | 
|---|
| 2168 | @end example | 
|---|
| 2169 |  | 
|---|
| 2170 | This causes each mentioned @samp{.c} file to be compiled into the | 
|---|
| 2171 | corresponding @samp{.o}.  Then all are linked to produce @file{hello}. | 
|---|
| 2172 |  | 
|---|
| 2173 | @cindex _SOURCES primary, defined | 
|---|
| 2174 | @cindex SOURCES primary, defined | 
|---|
| 2175 | @cindex Primary variable, SOURCES | 
|---|
| 2176 |  | 
|---|
| 2177 | If @samp{hello_SOURCES} is not specified, then it defaults to the single | 
|---|
| 2178 | file @file{hello.c}; that is, the default is to compile a single C file | 
|---|
| 2179 | whose base name is the name of the program itself.  (This is a terrible | 
|---|
| 2180 | default but we are stuck with it for historical reasons.) | 
|---|
| 2181 | @vindex _SOURCES | 
|---|
| 2182 | @vindex SOURCES | 
|---|
| 2183 |  | 
|---|
| 2184 | Multiple programs can be built in a single directory.  Multiple programs | 
|---|
| 2185 | can share a single source file, which must be listed in each | 
|---|
| 2186 | @samp{_SOURCES} definition. | 
|---|
| 2187 |  | 
|---|
| 2188 | @cindex Header files in _SOURCES | 
|---|
| 2189 | @cindex _SOURCES and header files | 
|---|
| 2190 |  | 
|---|
| 2191 | Header files listed in a @samp{_SOURCES} definition will be included in | 
|---|
| 2192 | the distribution but otherwise ignored.  In case it isn't obvious, you | 
|---|
| 2193 | should not include the header file generated by @file{configure} in a | 
|---|
| 2194 | @samp{_SOURCES} variable; this file should not be distributed.  Lex | 
|---|
| 2195 | (@samp{.l}) and Yacc (@samp{.y}) files can also be listed; see @ref{Yacc | 
|---|
| 2196 | and Lex}. | 
|---|
| 2197 |  | 
|---|
| 2198 |  | 
|---|
| 2199 | @node Linking, Conditional Sources, Program Sources, A Program | 
|---|
| 2200 | @subsection Linking the program | 
|---|
| 2201 |  | 
|---|
| 2202 | If you need to link against libraries that are not found by | 
|---|
| 2203 | @code{configure}, you can use @code{LDADD} to do so.  This variable is | 
|---|
| 2204 | used to specify additional objects or libraries to link with; it is | 
|---|
| 2205 | inappropriate for specifying specific linker flags, you should use | 
|---|
| 2206 | @code{AM_LDFLAGS} for this purpose. | 
|---|
| 2207 | @vindex LDADD | 
|---|
| 2208 | @vindex AM_LDFLAGS | 
|---|
| 2209 |  | 
|---|
| 2210 | @cindex prog_LDADD, defined | 
|---|
| 2211 |  | 
|---|
| 2212 | Sometimes, multiple programs are built in one directory but do not share | 
|---|
| 2213 | the same link-time requirements.  In this case, you can use the | 
|---|
| 2214 | @samp{@var{prog}_LDADD} variable (where @var{prog} is the name of the | 
|---|
| 2215 | program as it appears in some @samp{_PROGRAMS} variable, and usually | 
|---|
| 2216 | written in lowercase) to override the global @code{LDADD}.  If this | 
|---|
| 2217 | variable exists for a given program, then that program is not linked | 
|---|
| 2218 | using @code{LDADD}. | 
|---|
| 2219 | @vindex _LDADD | 
|---|
| 2220 |  | 
|---|
| 2221 | For instance, in GNU cpio, @code{pax}, @code{cpio} and @code{mt} are | 
|---|
| 2222 | linked against the library @file{libcpio.a}.  However, @code{rmt} is | 
|---|
| 2223 | built in the same directory, and has no such link requirement.  Also, | 
|---|
| 2224 | @code{mt} and @code{rmt} are only built on certain architectures.  Here | 
|---|
| 2225 | is what cpio's @file{src/Makefile.am} looks like (abridged): | 
|---|
| 2226 |  | 
|---|
| 2227 | @example | 
|---|
| 2228 | bin_PROGRAMS = cpio pax @@MT@@ | 
|---|
| 2229 | libexec_PROGRAMS = @@RMT@@ | 
|---|
| 2230 | EXTRA_PROGRAMS = mt rmt | 
|---|
| 2231 |  | 
|---|
| 2232 | LDADD = ../lib/libcpio.a @@INTLLIBS@@ | 
|---|
| 2233 | rmt_LDADD = | 
|---|
| 2234 |  | 
|---|
| 2235 | cpio_SOURCES = @dots{} | 
|---|
| 2236 | pax_SOURCES = @dots{} | 
|---|
| 2237 | mt_SOURCES = @dots{} | 
|---|
| 2238 | rmt_SOURCES = @dots{} | 
|---|
| 2239 | @end example | 
|---|
| 2240 |  | 
|---|
| 2241 | @cindex _LDFLAGS, defined | 
|---|
| 2242 |  | 
|---|
| 2243 | @samp{@var{prog}_LDADD} is inappropriate for passing program-specific | 
|---|
| 2244 | linker flags (except for @samp{-l}, @samp{-L}, @samp{-dlopen} and | 
|---|
| 2245 | @samp{-dlpreopen}).  So, use the @samp{@var{prog}_LDFLAGS} variable for | 
|---|
| 2246 | this purpose. | 
|---|
| 2247 | @vindex _LDFLAGS | 
|---|
| 2248 |  | 
|---|
| 2249 | @cindex _DEPENDENCIES, defined | 
|---|
| 2250 |  | 
|---|
| 2251 | It is also occasionally useful to have a program depend on some other | 
|---|
| 2252 | target which is not actually part of that program.  This can be done | 
|---|
| 2253 | using the @samp{@var{prog}_DEPENDENCIES} variable.  Each program depends | 
|---|
| 2254 | on the contents of such a variable, but no further interpretation is | 
|---|
| 2255 | done. | 
|---|
| 2256 |  | 
|---|
| 2257 | If @samp{@var{prog}_DEPENDENCIES} is not supplied, it is computed by | 
|---|
| 2258 | Automake.  The automatically-assigned value is the contents of | 
|---|
| 2259 | @samp{@var{prog}_LDADD}, with most configure substitutions, @samp{-l}, | 
|---|
| 2260 | @samp{-L}, @samp{-dlopen} and @samp{-dlpreopen} options removed.  The | 
|---|
| 2261 | configure substitutions that are left in are only @samp{@@LIBOBJS@@} and | 
|---|
| 2262 | @samp{@@ALLOCA@@}; these are left because it is known that they will not | 
|---|
| 2263 | cause an invalid value for @samp{@var{prog}_DEPENDENCIES} to be | 
|---|
| 2264 | generated. | 
|---|
| 2265 |  | 
|---|
| 2266 |  | 
|---|
| 2267 | @node Conditional Sources, Conditional Programs, Linking, A Program | 
|---|
| 2268 | @subsection Conditional compilation of sources | 
|---|
| 2269 |  | 
|---|
| 2270 | You can't put a configure substitution (e.g., @samp{@@FOO@@}) into a | 
|---|
| 2271 | @samp{_SOURCES} variable.  The reason for this is a bit hard to explain, | 
|---|
| 2272 | but suffice to say that it simply won't work.  Automake will give an | 
|---|
| 2273 | error if you try to do this. | 
|---|
| 2274 |  | 
|---|
| 2275 | Fortunately there are two other ways to achieve the same result.  One is | 
|---|
| 2276 | to use configure substitutions in @code{_LDADD} variables, the other is | 
|---|
| 2277 | to use an Automake conditional. | 
|---|
| 2278 |  | 
|---|
| 2279 | @subsubsection Conditional compilation using @code{_LDADD} substitutions | 
|---|
| 2280 |  | 
|---|
| 2281 | @cindex EXTRA_prog_SOURCES, defined | 
|---|
| 2282 |  | 
|---|
| 2283 | Automake must know all the source files that could possibly go into a | 
|---|
| 2284 | program, even if not all the files are built in every circumstance.  Any | 
|---|
| 2285 | files which are only conditionally built should be listed in the | 
|---|
| 2286 | appropriate @samp{EXTRA_} variable.  For instance, if | 
|---|
| 2287 | @file{hello-linux.c} or @file{hello-generic.c} were conditionally included | 
|---|
| 2288 | in @code{hello}, the @file{Makefile.am} would contain: | 
|---|
| 2289 |  | 
|---|
| 2290 | @example | 
|---|
| 2291 | bin_PROGRAMS = hello | 
|---|
| 2292 | hello_SOURCES = hello-common.c | 
|---|
| 2293 | EXTRA_hello_SOURCES = hello-linux.c hello-generic.c | 
|---|
| 2294 | hello_LDADD = @@HELLO_SYSTEM@@ | 
|---|
| 2295 | hello_DEPENDENCIES = @@HELLO_SYSTEM@@ | 
|---|
| 2296 | @end example | 
|---|
| 2297 |  | 
|---|
| 2298 | @noindent | 
|---|
| 2299 | You can then setup the @code{@@HELLO_SYSTEM@@} substitution from | 
|---|
| 2300 | @file{configure.in}: | 
|---|
| 2301 |  | 
|---|
| 2302 | @example | 
|---|
| 2303 | @dots{} | 
|---|
| 2304 | case $host in | 
|---|
| 2305 | *linux*) HELLO_SYSTEM='hello-linux.$(OBJEXT)' ;; | 
|---|
| 2306 | *)       HELLO_SYSTEM='hello-generic.$(OBJEXT)' ;; | 
|---|
| 2307 | esac | 
|---|
| 2308 | AC_SUBST([HELLO_SYSTEM]) | 
|---|
| 2309 | @dots{} | 
|---|
| 2310 | @end example | 
|---|
| 2311 |  | 
|---|
| 2312 | In this case, @code{HELLO_SYSTEM} should be replaced by | 
|---|
| 2313 | @file{hello-linux.o} or @file{hello-bsd.o}, and added to | 
|---|
| 2314 | @code{hello_DEPENDENCIES} and @code{hello_LDADD} in order to be built | 
|---|
| 2315 | and linked in. | 
|---|
| 2316 |  | 
|---|
| 2317 | @subsubsection Conditional compilation using Automake conditionals | 
|---|
| 2318 |  | 
|---|
| 2319 | An often simpler way to compile source files conditionally is to use | 
|---|
| 2320 | Automake conditionals.  For instance, you could use this | 
|---|
| 2321 | @file{Makefile.am} construct to build the same @file{hello} example: | 
|---|
| 2322 |  | 
|---|
| 2323 | @example | 
|---|
| 2324 | bin_PROGRAMS = hello | 
|---|
| 2325 | if LINUX | 
|---|
| 2326 | hello_SOURCES = hello-linux.c hello-common.c | 
|---|
| 2327 | else | 
|---|
| 2328 | hello_SOURCES = hello-generic.c hello-common.c | 
|---|
| 2329 | endif | 
|---|
| 2330 | @end example | 
|---|
| 2331 |  | 
|---|
| 2332 | In this case, your @file{configure.in} should setup the @code{LINUX} | 
|---|
| 2333 | conditional using @code{AM_CONDITIONAL} (@pxref{Conditionals}). | 
|---|
| 2334 |  | 
|---|
| 2335 | When using conditionals like this you don't need to use the | 
|---|
| 2336 | @samp{EXTRA_} variable, because Automake will examine the contents of | 
|---|
| 2337 | each variable to construct the complete list of source files. | 
|---|
| 2338 |  | 
|---|
| 2339 | If your program uses a lot of files, you will probably prefer a | 
|---|
| 2340 | conditional @code{+=}. | 
|---|
| 2341 |  | 
|---|
| 2342 | @example | 
|---|
| 2343 | bin_PROGRAMS = hello | 
|---|
| 2344 | hello_SOURCES = hello-common.c | 
|---|
| 2345 | if LINUX | 
|---|
| 2346 | hello_SOURCES += hello-linux.c | 
|---|
| 2347 | else | 
|---|
| 2348 | hello_SOURCES += hello-generic.c | 
|---|
| 2349 | endif | 
|---|
| 2350 | @end example | 
|---|
| 2351 |  | 
|---|
| 2352 | @node Conditional Programs,  , Conditional Sources, A Program | 
|---|
| 2353 | @subsection Conditional compilation of programs | 
|---|
| 2354 | @cindex Conditional programs | 
|---|
| 2355 | @cindex Programs, conditional | 
|---|
| 2356 |  | 
|---|
| 2357 | Sometimes it is useful to determine the programs that are to be built | 
|---|
| 2358 | at configure time.  For instance, GNU @code{cpio} only builds | 
|---|
| 2359 | @code{mt} and @code{rmt} under special circumstances.  The means to | 
|---|
| 2360 | achieve conditional compilation of programs are the same you can use | 
|---|
| 2361 | to compile source files conditionally: substitutions or conditionals. | 
|---|
| 2362 |  | 
|---|
| 2363 | @subsubsection Conditional programs using @code{configure} substitutions | 
|---|
| 2364 |  | 
|---|
| 2365 | In this case, you must notify Automake of all the programs that can | 
|---|
| 2366 | possibly be built, but at the same time cause the generated | 
|---|
| 2367 | @file{Makefile.in} to use the programs specified by @code{configure}. | 
|---|
| 2368 | This is done by having @code{configure} substitute values into each | 
|---|
| 2369 | @samp{_PROGRAMS} definition, while listing all optionally built programs | 
|---|
| 2370 | in @code{EXTRA_PROGRAMS}. | 
|---|
| 2371 | @vindex EXTRA_PROGRAMS | 
|---|
| 2372 | @cindex EXTRA_PROGRAMS, defined | 
|---|
| 2373 |  | 
|---|
| 2374 | @example | 
|---|
| 2375 | bin_PROGRAMS = cpio pax $(MT) | 
|---|
| 2376 | libexec_PROGRAMS = $(RMT) | 
|---|
| 2377 | EXTRA_PROGRAMS = mt rmt | 
|---|
| 2378 | @end example | 
|---|
| 2379 |  | 
|---|
| 2380 | As explained in @ref{EXEEXT}, Automake will rewrite | 
|---|
| 2381 | @code{bin_PROGRAMS}, @code{libexec_PROGRAMS}, and | 
|---|
| 2382 | @code{EXTRA_PROGRAMS}, appending @code{$(EXEEXT)} to each binary. | 
|---|
| 2383 | Obviously it cannot rewrite values obtained at run-time through | 
|---|
| 2384 | @code{configure} substitutions, therefore you should take care of | 
|---|
| 2385 | appending @code{$(EXEEXT)} yourself, as in @code{AC_SUBST([MT], | 
|---|
| 2386 | ['mt$@{EXEEXT@}'])}. | 
|---|
| 2387 |  | 
|---|
| 2388 | @subsubsection Conditional programs using Automake conditionals | 
|---|
| 2389 |  | 
|---|
| 2390 | You can also use Automake conditionals (@pxref{Conditionals}) to | 
|---|
| 2391 | select programs to be built.  In this case you don't have to worry | 
|---|
| 2392 | about @code{$(EXEEXT)} or @code{EXTRA_PROGRAMS}. | 
|---|
| 2393 |  | 
|---|
| 2394 | @example | 
|---|
| 2395 | bin_PROGRAMS = cpio pax | 
|---|
| 2396 | if WANT_MT | 
|---|
| 2397 | bin_PROGRAMS += mt | 
|---|
| 2398 | endif | 
|---|
| 2399 | if WANT_RMT | 
|---|
| 2400 | libexec_PROGRAMS = rmt | 
|---|
| 2401 | endif | 
|---|
| 2402 | @end example | 
|---|
| 2403 |  | 
|---|
| 2404 |  | 
|---|
| 2405 | @node A Library, A Shared Library, A Program, Programs | 
|---|
| 2406 | @section Building a library | 
|---|
| 2407 |  | 
|---|
| 2408 | @cindex _LIBRARIES primary, defined | 
|---|
| 2409 | @cindex LIBRARIES primary, defined | 
|---|
| 2410 | @cindex Primary variable, LIBRARIES | 
|---|
| 2411 |  | 
|---|
| 2412 | @vindex lib_LIBRARIES | 
|---|
| 2413 | @vindex pkglib_LIBRARIES | 
|---|
| 2414 | @vindex noinst_LIBRARIES | 
|---|
| 2415 |  | 
|---|
| 2416 | Building a library is much like building a program.  In this case, the | 
|---|
| 2417 | name of the primary is @samp{LIBRARIES}.  Libraries can be installed in | 
|---|
| 2418 | @code{libdir} or @code{pkglibdir}. | 
|---|
| 2419 |  | 
|---|
| 2420 | @xref{A Shared Library}, for information on how to build shared | 
|---|
| 2421 | libraries using libtool and the @samp{LTLIBRARIES} primary. | 
|---|
| 2422 |  | 
|---|
| 2423 | Each @samp{_LIBRARIES} variable is a list of the libraries to be built. | 
|---|
| 2424 | For instance to create a library named @file{libcpio.a}, but not install | 
|---|
| 2425 | it, you would write: | 
|---|
| 2426 |  | 
|---|
| 2427 | @example | 
|---|
| 2428 | noinst_LIBRARIES = libcpio.a | 
|---|
| 2429 | @end example | 
|---|
| 2430 |  | 
|---|
| 2431 | The sources that go into a library are determined exactly as they are | 
|---|
| 2432 | for programs, via the @samp{_SOURCES} variables.  Note that the library | 
|---|
| 2433 | name is canonicalized (@pxref{Canonicalization}), so the @samp{_SOURCES} | 
|---|
| 2434 | variable corresponding to @file{liblob.a} is @samp{liblob_a_SOURCES}, | 
|---|
| 2435 | not @samp{liblob.a_SOURCES}. | 
|---|
| 2436 |  | 
|---|
| 2437 | @cindex _LIBADD primary, defined | 
|---|
| 2438 | @cindex LIBADD primary, defined | 
|---|
| 2439 | @cindex Primary variable, LIBADD | 
|---|
| 2440 |  | 
|---|
| 2441 | Extra objects can be added to a library using the | 
|---|
| 2442 | @samp{@var{library}_LIBADD} variable.  This should be used for objects | 
|---|
| 2443 | determined by @code{configure}.  Again from @code{cpio}: | 
|---|
| 2444 | @vindex _LIBADD | 
|---|
| 2445 | @vindex LIBADD | 
|---|
| 2446 |  | 
|---|
| 2447 | @example | 
|---|
| 2448 | libcpio_a_LIBADD = $(LIBOBJS) $(ALLOCA) | 
|---|
| 2449 | @end example | 
|---|
| 2450 |  | 
|---|
| 2451 | In addition, sources for extra objects that will not exist until | 
|---|
| 2452 | configure-time must be added to the @code{BUILT_SOURCES} variable | 
|---|
| 2453 | (@pxref{Sources}). | 
|---|
| 2454 |  | 
|---|
| 2455 |  | 
|---|
| 2456 | @node A Shared Library, Program and Library Variables, A Library, Programs | 
|---|
| 2457 | @section Building a Shared Library | 
|---|
| 2458 |  | 
|---|
| 2459 | @cindex Shared libraries, support for | 
|---|
| 2460 |  | 
|---|
| 2461 | Building shared libraries portably is a relatively complex matter. | 
|---|
| 2462 | For this reason, GNU Libtool (@pxref{Top, , Introduction, libtool, The | 
|---|
| 2463 | Libtool Manual}) was created to help build shared libraries in a | 
|---|
| 2464 | platform-independent way. | 
|---|
| 2465 |  | 
|---|
| 2466 | @menu | 
|---|
| 2467 | * Libtool Concept::             Introducing Libtool | 
|---|
| 2468 | * Libtool Libraries::           Declaring Libtool Libraries | 
|---|
| 2469 | * Conditional Libtool Libraries::  Building Libtool Libraries Conditionally | 
|---|
| 2470 | * Conditional Libtool Sources::  Choosing Library Sources Conditionally | 
|---|
| 2471 | * Libtool Convenience Libraries::  Building Convenience Libtool Libraries | 
|---|
| 2472 | * Libtool Modules::             Building Libtool Modules | 
|---|
| 2473 | * Libtool Flags::               Using _LIBADD and _LDFLAGS | 
|---|
| 2474 | * LTLIBOBJ::                    Using $(LTLIBOBJ) | 
|---|
| 2475 | * Libtool Issues::              Common Issues Related to Libtool's Use | 
|---|
| 2476 | @end menu | 
|---|
| 2477 |  | 
|---|
| 2478 | @node Libtool Concept, Libtool Libraries, A Shared Library, A Shared Library | 
|---|
| 2479 | @subsection The Libtool Concept | 
|---|
| 2480 |  | 
|---|
| 2481 | @cindex libtool, introduction | 
|---|
| 2482 | @cindex libtool library, definition | 
|---|
| 2483 | @cindex suffix .la, defined | 
|---|
| 2484 | @cindex .la suffix, defined | 
|---|
| 2485 |  | 
|---|
| 2486 | Libtool abstracts shared and static libraries into a unified | 
|---|
| 2487 | concept henceforth called @dfn{libtool libraries}.  Libtool libraries | 
|---|
| 2488 | are files using the @file{.la} suffix, and can designate a static | 
|---|
| 2489 | library, a shared library, or maybe both.  Their exact nature cannot | 
|---|
| 2490 | be determined until @file{./configure} is run: not all platforms | 
|---|
| 2491 | support all kinds of libraries, and users can explicitly select which | 
|---|
| 2492 | libraries should be built.  (However the package's maintainers can | 
|---|
| 2493 | tune the default, @xref{AC_PROG_LIBTOOL, , The @code{AC_PROG_LIBTOOL} | 
|---|
| 2494 | macro, libtool, The Libtool Manual}.) | 
|---|
| 2495 |  | 
|---|
| 2496 | @cindex suffix .lo, defined | 
|---|
| 2497 | Because object files for shared and static libraries must be compiled | 
|---|
| 2498 | differently, libtool is also used during compilation.  Object files | 
|---|
| 2499 | built by libtool are called @dfn{libtool objects}: these are files | 
|---|
| 2500 | using the @file{.lo} suffix.  Libtool libraries are built from these | 
|---|
| 2501 | libtool objects. | 
|---|
| 2502 |  | 
|---|
| 2503 | You should not assume anything about the structure of @file{.la} or | 
|---|
| 2504 | @file{.lo} files and how libtool constructs them: this is libtool's | 
|---|
| 2505 | concern, and the last thing one wants is to learn about libtool's | 
|---|
| 2506 | guts.  However the existence of these files matters, because they are | 
|---|
| 2507 | used as targets and dependencies in @file{Makefile}s when building | 
|---|
| 2508 | libtool libraries.  There are situations where you may have to refer | 
|---|
| 2509 | to these, for instance when expressing dependencies for building | 
|---|
| 2510 | source files conditionally (@pxref{Conditional Libtool Sources}). | 
|---|
| 2511 |  | 
|---|
| 2512 | @cindex libltdl, introduction | 
|---|
| 2513 |  | 
|---|
| 2514 | People considering writing a plug-in system, with dynamically loaded | 
|---|
| 2515 | modules, should look into @file{libltdl}: libtool's dlopening library | 
|---|
| 2516 | (@pxref{Using libltdl, , Using libltdl, libtool, The Libtool Manual}). | 
|---|
| 2517 | This offers a portable dlopening facility to load libtool libraries | 
|---|
| 2518 | dynamically, and can also achieve static linking where unavoidable. | 
|---|
| 2519 |  | 
|---|
| 2520 | Before we discuss how to use libtool with Automake in details, it | 
|---|
| 2521 | should be noted that the libtool manual also has a section about how | 
|---|
| 2522 | to use Automake with libtool (@pxref{Using Automake, , Using Automake | 
|---|
| 2523 | with Libtool, libtool, The Libtool Manual}). | 
|---|
| 2524 |  | 
|---|
| 2525 | @node Libtool Libraries, Conditional Libtool Libraries, Libtool Concept, A Shared Library | 
|---|
| 2526 | @subsection Building Libtool Libraries | 
|---|
| 2527 |  | 
|---|
| 2528 | @cindex _LTLIBRARIES primary, defined | 
|---|
| 2529 | @cindex LTLIBRARIES primary, defined | 
|---|
| 2530 | @cindex Primary variable, LTLIBRARIES | 
|---|
| 2531 | @cindex Example of shared libraries | 
|---|
| 2532 | @vindex lib_LTLIBRARIES | 
|---|
| 2533 | @vindex pkglib_LTLIBRARIES | 
|---|
| 2534 |  | 
|---|
| 2535 | Automake uses libtool to build libraries declared with the | 
|---|
| 2536 | @samp{LTLIBRARIES} primary.  Each @samp{_LTLIBRARIES} variable is a | 
|---|
| 2537 | list of libtool libraries to build.  For instance, to create a libtool | 
|---|
| 2538 | library named @file{libgettext.la}, and install it in @samp{libdir}, | 
|---|
| 2539 | write: | 
|---|
| 2540 |  | 
|---|
| 2541 | @example | 
|---|
| 2542 | lib_LTLIBRARIES = libgettext.la | 
|---|
| 2543 | libgettext_la_SOURCES = gettext.c gettext.h @dots{} | 
|---|
| 2544 | @end example | 
|---|
| 2545 |  | 
|---|
| 2546 | Automake predefines the variable @samp{pkglibdir}, so you can use | 
|---|
| 2547 | @code{pkglib_LTLIBRARIES} to install libraries in | 
|---|
| 2548 | @code{$(libdir)/@@PACKAGE@@/}. | 
|---|
| 2549 |  | 
|---|
| 2550 | @node Conditional Libtool Libraries, Conditional Libtool Sources, Libtool Libraries, A Shared Library | 
|---|
| 2551 | @subsection Building Libtool Libraries Conditionally | 
|---|
| 2552 | @cindex libtool libraries, conditional | 
|---|
| 2553 | @cindex conditional libtool libraries | 
|---|
| 2554 |  | 
|---|
| 2555 | Like conditional programs (@pxref{Conditional Programs}), there are | 
|---|
| 2556 | two main ways to build conditional libraries: using Automake | 
|---|
| 2557 | conditionals or using Autoconf @code{AC_SUBST}itutions. | 
|---|
| 2558 |  | 
|---|
| 2559 | The important implementation detail you have to be aware of is that | 
|---|
| 2560 | the place where a library will be installed matters to libtool: it | 
|---|
| 2561 | needs to be indicated @emph{at link-time} using the @code{-rpath} | 
|---|
| 2562 | option. | 
|---|
| 2563 |  | 
|---|
| 2564 | For libraries whose destination directory is known when Automake runs, | 
|---|
| 2565 | Automake will automatically supply the appropriate @samp{-rpath} | 
|---|
| 2566 | option to libtool. This is the case for libraries listed explicitly in | 
|---|
| 2567 | some installable @code{_LTLIBRARIES} variables such as | 
|---|
| 2568 | @code{lib_LTLIBRARIES}. | 
|---|
| 2569 |  | 
|---|
| 2570 | However, for libraries determined at configure time (and thus | 
|---|
| 2571 | mentioned in @code{EXTRA_LTLIBRARIES}), Automake does not know the | 
|---|
| 2572 | final installation directory.  For such libraries you must add the | 
|---|
| 2573 | @samp{-rpath} option to the appropriate @samp{_LDFLAGS} variable by | 
|---|
| 2574 | hand. | 
|---|
| 2575 |  | 
|---|
| 2576 | The examples below illustrate the differences between these two methods. | 
|---|
| 2577 |  | 
|---|
| 2578 | Here is an example where @code{$(WANTEDLIBS)} is an @code{AC_SUBST}ed | 
|---|
| 2579 | variable set at @file{./configure}-time to either @file{libfoo.la}, | 
|---|
| 2580 | @file{libbar.la}, both, or none.  Although @code{$(WANTEDLIBS)} | 
|---|
| 2581 | appears in the @code{lib_LTLIBRARIES}, Automake cannot guess it | 
|---|
| 2582 | relates to @file{libfoo.la} or @file{libbar.la} by the time it creates | 
|---|
| 2583 | the link rule for these two libraries.  Therefore the @code{-rpath} | 
|---|
| 2584 | argument must be explicitly supplied. | 
|---|
| 2585 |  | 
|---|
| 2586 | @example | 
|---|
| 2587 | EXTRA_LTLIBRARIES = libfoo.la libbar.la | 
|---|
| 2588 | lib_LTLIBRARIES = $(WANTEDLIBS) | 
|---|
| 2589 | libfoo_la_SOURCES = foo.c @dots{} | 
|---|
| 2590 | libfoo_la_LDFLAGS = -rpath '$(libdir)' | 
|---|
| 2591 | libbar_la_SOURCES = bar.c @dots{} | 
|---|
| 2592 | libbar_la_LDFLAGS = -rpath '$(libdir)' | 
|---|
| 2593 | @end example | 
|---|
| 2594 |  | 
|---|
| 2595 | Here is how the same @file{Makefile.am} would look using Automake | 
|---|
| 2596 | conditionals named @code{WANT_LIBFOO} and @code{WANT_LIBBAR}.  Now | 
|---|
| 2597 | Automake is able to compute the @code{-rpath} setting itself, because | 
|---|
| 2598 | it's clear that both libraries will end up in @code{$(libdir)} if they | 
|---|
| 2599 | are installed. | 
|---|
| 2600 |  | 
|---|
| 2601 | @example | 
|---|
| 2602 | lib_LTLIBRARIES = | 
|---|
| 2603 | if WANT_LIBFOO | 
|---|
| 2604 | lib_LTLIBRARIES += libfoo.la | 
|---|
| 2605 | endif | 
|---|
| 2606 | if WANT_LIBBAR | 
|---|
| 2607 | lib_LTLIBRARIES += libbar.la | 
|---|
| 2608 | endif | 
|---|
| 2609 | libfoo_la_SOURCES = foo.c @dots{} | 
|---|
| 2610 | libbar_la_SOURCES = bar.c @dots{} | 
|---|
| 2611 | @end example | 
|---|
| 2612 |  | 
|---|
| 2613 | @node Conditional Libtool Sources, Libtool Convenience Libraries, Conditional Libtool Libraries, A Shared Library | 
|---|
| 2614 | @subsection Libtool Libraries with Conditional Sources | 
|---|
| 2615 |  | 
|---|
| 2616 | Conditional compilation of sources in a library can be achieved in the | 
|---|
| 2617 | same way as conditional compilation of sources in a program | 
|---|
| 2618 | (@pxref{Conditional Sources}).  The only difference is that | 
|---|
| 2619 | @code{_LIBADD} should be used instead of @code{_LDADD} and that it | 
|---|
| 2620 | should mention libtool objects (@file{.lo} files). | 
|---|
| 2621 |  | 
|---|
| 2622 | So, to mimic the @file{hello} example from @ref{Conditional Sources}, | 
|---|
| 2623 | we could build a @file{libhello.la} library using either | 
|---|
| 2624 | @file{hello-linux.c} or @file{hello-generic.c} with the following | 
|---|
| 2625 | @file{Makefile.am}. | 
|---|
| 2626 |  | 
|---|
| 2627 | @example | 
|---|
| 2628 | lib_LTLIBRARIES = libhello.la | 
|---|
| 2629 | libhello_la_SOURCES = hello-common.c | 
|---|
| 2630 | EXTRA_libhello_la_SOURCES = hello-linux.c hello-generic.c | 
|---|
| 2631 | libhello_la_LIBADD = $(HELLO_SYSTEM) | 
|---|
| 2632 | libhello_la_DEPENDENCIES = $(HELLO_SYSTEM) | 
|---|
| 2633 | @end example | 
|---|
| 2634 |  | 
|---|
| 2635 | @noindent | 
|---|
| 2636 | And make sure @code{$(HELLO_SYSTEM)} is set to either | 
|---|
| 2637 | @file{hello-linux.lo} or @file{hello-generic.lo} in | 
|---|
| 2638 | @file{./configure}. | 
|---|
| 2639 |  | 
|---|
| 2640 | Or we could simply use an Automake conditional as follows. | 
|---|
| 2641 |  | 
|---|
| 2642 | @example | 
|---|
| 2643 | lib_LTLIBRARIES = libhello.la | 
|---|
| 2644 | libhello_la_SOURCES = hello-common.c | 
|---|
| 2645 | if LINUX | 
|---|
| 2646 | libhello_la_SOURCES += hello-linux.c | 
|---|
| 2647 | else | 
|---|
| 2648 | libhello_la_SOURCES += hello-generic.c | 
|---|
| 2649 | endif | 
|---|
| 2650 | @end example | 
|---|
| 2651 |  | 
|---|
| 2652 | @node Libtool Convenience Libraries, Libtool Modules, Conditional Libtool Sources, A Shared Library | 
|---|
| 2653 | @subsection Libtool Convenience Libraries | 
|---|
| 2654 | @cindex convenience libraries, libtool | 
|---|
| 2655 | @cindex libtool convenience libraries | 
|---|
| 2656 | @vindex noinst_LTLIBRARIES | 
|---|
| 2657 | @vindex check_LTLIBRARIES | 
|---|
| 2658 |  | 
|---|
| 2659 | Sometimes you want to build libtool libraries which should not be | 
|---|
| 2660 | installed.  These are called @dfn{libtool convenience libraries} and | 
|---|
| 2661 | are typically used to encapsulate many sublibraries, later gathered | 
|---|
| 2662 | into one big installed library. | 
|---|
| 2663 |  | 
|---|
| 2664 | Libtool convenience libraries are declared by | 
|---|
| 2665 | @code{noinst_LTLIBRARIES}, @code{check_LTLIBRARIES}, or even | 
|---|
| 2666 | @code{EXTRA_LTLIBRARIES}.  Unlike installed libtool libraries they do | 
|---|
| 2667 | not need an @code{-rpath} flag at link time (actually this is the only | 
|---|
| 2668 | difference). | 
|---|
| 2669 |  | 
|---|
| 2670 | Convenience libraries listed in @code{noinst_LTLIBRARIES} are always | 
|---|
| 2671 | built.  Those listed in @code{check_LTLIBRARIES} are built only upon | 
|---|
| 2672 | @code{make check}.  Finally, libraries listed in | 
|---|
| 2673 | @code{EXTRA_LTLIBRARIES} are never built explicitly: Automake outputs | 
|---|
| 2674 | rules to build them, but if the library does not appear as a Makefile | 
|---|
| 2675 | dependency anywhere it won't be built (this is why | 
|---|
| 2676 | @code{EXTRA_LTLIBRARIES} is used for conditional compilation). | 
|---|
| 2677 |  | 
|---|
| 2678 | Here is a sample setup merging libtool convenience libraries from | 
|---|
| 2679 | subdirectories into one main @file{libtop.la} library. | 
|---|
| 2680 |  | 
|---|
| 2681 | @example | 
|---|
| 2682 | # -- Top-level Makefile.am -- | 
|---|
| 2683 | SUBDIRS = sub1 sub2 @dots{} | 
|---|
| 2684 | lib_LTLIBRARIES = libtop.la | 
|---|
| 2685 | libtop_la_SOURCES = | 
|---|
| 2686 | libtop_la_LIBADD = \ | 
|---|
| 2687 | sub1/libsub1.la \ | 
|---|
| 2688 | sub2/libsub2.la \ | 
|---|
| 2689 | @dots{} | 
|---|
| 2690 |  | 
|---|
| 2691 | # -- sub1/Makefile.am -- | 
|---|
| 2692 | noinst_LTLIBRARIES = libsub1.la | 
|---|
| 2693 | libsub1_la_SOURCES = @dots{} | 
|---|
| 2694 |  | 
|---|
| 2695 | # -- sub2/Makefile.am -- | 
|---|
| 2696 | # showing nested convenience libraries | 
|---|
| 2697 | SUBDIRS = sub2.1 sub2.2 @dots{} | 
|---|
| 2698 | noinst_LTLIBRARIES = libsub2.la | 
|---|
| 2699 | libsub2_la_SOURCES = | 
|---|
| 2700 | libsub2_la_LIBADD = \ | 
|---|
| 2701 | sub21/libsub21.la \ | 
|---|
| 2702 | sub22/libsub22.la \ | 
|---|
| 2703 | @dots{} | 
|---|
| 2704 | @end example | 
|---|
| 2705 |  | 
|---|
| 2706 | @node Libtool Modules, Libtool Flags, Libtool Convenience Libraries, A Shared Library | 
|---|
| 2707 | @subsection Libtool Modules | 
|---|
| 2708 | @cindex modules, libtool | 
|---|
| 2709 | @cindex libtool modules | 
|---|
| 2710 | @cindex -module, libtool | 
|---|
| 2711 |  | 
|---|
| 2712 | These are libtool libraries meant to be dlopened.  They are | 
|---|
| 2713 | indicated to libtool by passing @code{-module} at link-time. | 
|---|
| 2714 |  | 
|---|
| 2715 | @example | 
|---|
| 2716 | pkglib_LTLIBRARIES = mymodule.la | 
|---|
| 2717 | mymodule_la_SOURCES = doit.c | 
|---|
| 2718 | mymodule_LDFLAGS = -module | 
|---|
| 2719 | @end example | 
|---|
| 2720 |  | 
|---|
| 2721 | Ordinarily, Automake requires that a Library's name starts with | 
|---|
| 2722 | @samp{lib}.  However, when building a dynamically loadable module you | 
|---|
| 2723 | might wish to use a "nonstandard" name. | 
|---|
| 2724 |  | 
|---|
| 2725 | @node Libtool Flags, LTLIBOBJ, Libtool Modules, A Shared Library | 
|---|
| 2726 | @subsection _LIBADD and _LDFLAGS | 
|---|
| 2727 | @cindex _LIBADD, libtool | 
|---|
| 2728 | @cindex _LDFLAGS, libtool | 
|---|
| 2729 |  | 
|---|
| 2730 | As shown in previous sections, the @samp{@var{library}_LIBADD} | 
|---|
| 2731 | variable should be used to list extra libtool objects (@file{.lo} | 
|---|
| 2732 | files) or libtool libraries (@file{.la}) to add to @var{library}. | 
|---|
| 2733 |  | 
|---|
| 2734 | The @samp{@var{library}_LDFLAGS} variable is the place to list | 
|---|
| 2735 | additional libtool flags, such as @samp{-version-info}, | 
|---|
| 2736 | @samp{-static}, and a lot more.  See @xref{Link mode, , Using libltdl, | 
|---|
| 2737 | libtool, The Libtool Manual}. | 
|---|
| 2738 |  | 
|---|
| 2739 | @node LTLIBOBJ, Libtool Issues, Libtool Flags, A Shared Library | 
|---|
| 2740 | @subsection @code{LTLIBOBJS} | 
|---|
| 2741 | @cindex @code{LTLIBOBJS}, special handling | 
|---|
| 2742 | @vindex LTLIBOBJS | 
|---|
| 2743 | @vindex LIBOBJS | 
|---|
| 2744 | @cvindex AC_LIBOBJ | 
|---|
| 2745 |  | 
|---|
| 2746 | Where an ordinary library might include @code{$(LIBOBJS)}, a libtool | 
|---|
| 2747 | library must use @code{$(LTLIBOBJS)}.  This is required because the | 
|---|
| 2748 | object files that libtool operates on do not necessarily end in | 
|---|
| 2749 | @file{.o}. | 
|---|
| 2750 |  | 
|---|
| 2751 | Nowadays, the computation of @code{LTLIBOBJS} from @code{LIBOBJS} is | 
|---|
| 2752 | performed automatically by Autoconf (@pxref{AC_LIBOBJ vs LIBOBJS, , | 
|---|
| 2753 | @code{AC_LIBOBJ} vs. @code{LIBOBJS}, autoconf, The Autoconf Manual}). | 
|---|
| 2754 |  | 
|---|
| 2755 | @node Libtool Issues,  , LTLIBOBJ, A Shared Library | 
|---|
| 2756 | @subsection Common Issues Related to Libtool's Use | 
|---|
| 2757 |  | 
|---|
| 2758 | @subsubsection @code{required file `./ltmain.sh' not found} | 
|---|
| 2759 | @cindex ltmain.sh not found | 
|---|
| 2760 | @cindex libtoolize, no longer run by Automake | 
|---|
| 2761 | @cindex libtoolize and autoreconf | 
|---|
| 2762 | @cindex autoreconf and libtoolize | 
|---|
| 2763 | @cindex bootstrap.sh and autoreconf | 
|---|
| 2764 | @cindex autogen.sh and autoreconf | 
|---|
| 2765 |  | 
|---|
| 2766 | Libtool comes with a tool called @command{libtoolize} that will | 
|---|
| 2767 | install libtool's supporting files into a package.  Running this | 
|---|
| 2768 | command will install @file{ltmain.sh}.  You should execute it before | 
|---|
| 2769 | @command{aclocal} and @command{automake}. | 
|---|
| 2770 |  | 
|---|
| 2771 | People upgrading old packages to newer autotools are likely to face | 
|---|
| 2772 | this issue because older Automake versions used to call | 
|---|
| 2773 | @command{libtoolize}.  Therefore old build scripts do not call | 
|---|
| 2774 | @command{libtoolize}. | 
|---|
| 2775 |  | 
|---|
| 2776 | Since Automake 1.6, it has been decided that running | 
|---|
| 2777 | @command{libtoolize} was none of Automake's business.  Instead, that | 
|---|
| 2778 | functionality has been moved into the @command{autoreconf} command | 
|---|
| 2779 | (@pxref{autoreconf Invocation, , Using @command{autoreconf}, autoconf, | 
|---|
| 2780 | The Autoconf Manual}).  If you do not want to remember what to run and | 
|---|
| 2781 | when, just learn the @command{autoreconf} command.  Hopefully, | 
|---|
| 2782 | replacing existing @file{bootstrap.sh} or @file{autogen.sh} scripts by | 
|---|
| 2783 | a call to @command{autoreconf} should also free you from any similar | 
|---|
| 2784 | incompatible change in the future. | 
|---|
| 2785 |  | 
|---|
| 2786 | @subsubsection Objects @code{created with both libtool and without} | 
|---|
| 2787 |  | 
|---|
| 2788 | Sometimes, the same source file is used both to build a libtool | 
|---|
| 2789 | library and to build another non-libtool target (be it a program or | 
|---|
| 2790 | another library). | 
|---|
| 2791 |  | 
|---|
| 2792 | Let's consider the following @file{Makefile.am}. | 
|---|
| 2793 |  | 
|---|
| 2794 | @example | 
|---|
| 2795 | bin_PROGRAMS = prog | 
|---|
| 2796 | prog_SOURCES = prog.c foo.c @dots{} | 
|---|
| 2797 |  | 
|---|
| 2798 | lib_LTLIBRARIES = libfoo.la | 
|---|
| 2799 | libfoo_la_SOURCES = foo.c @dots{} | 
|---|
| 2800 | @end example | 
|---|
| 2801 |  | 
|---|
| 2802 | @noindent | 
|---|
| 2803 | (In this trivial case the issue could be avoided by linking | 
|---|
| 2804 | @file{libfoo.la} with @file{prog} instead of listing @file{foo.c} in | 
|---|
| 2805 | @code{prog_SOURCES}.  But let's assume we really want to keep | 
|---|
| 2806 | @file{prog} and @file{libfoo.la} separate.) | 
|---|
| 2807 |  | 
|---|
| 2808 | Technically, it means that we should build @file{foo.$(OBJEXT)} for | 
|---|
| 2809 | @file{prog}, and @file{foo.lo} for @file{libfoo.la}.  The problem is | 
|---|
| 2810 | that in the course of creating @file{foo.lo}, libtool may erase (or | 
|---|
| 2811 | replace) @file{foo.$(OBJEXT)} -- and this cannot be avoided. | 
|---|
| 2812 |  | 
|---|
| 2813 | Therefore, when Automake detects this situation it will complain | 
|---|
| 2814 | with a message such as | 
|---|
| 2815 | @example | 
|---|
| 2816 | object `foo.$(OBJEXT)' created both with libtool and without | 
|---|
| 2817 | @end example | 
|---|
| 2818 |  | 
|---|
| 2819 | A workaround for this issue is to ensure that these two objects get | 
|---|
| 2820 | different basenames.  As explained in @ref{renamed objects}, this | 
|---|
| 2821 | happens automatically when per-targets flags are used. | 
|---|
| 2822 |  | 
|---|
| 2823 | @example | 
|---|
| 2824 | bin_PROGRAMS = prog | 
|---|
| 2825 | prog_SOURCES = prog.c foo.c @dots{} | 
|---|
| 2826 | prog_CFLAGS = $(AM_CFLAGS) | 
|---|
| 2827 |  | 
|---|
| 2828 | lib_LTLIBRARIES = libfoo.la | 
|---|
| 2829 | libfoo_la_SOURCES = foo.c @dots{} | 
|---|
| 2830 | @end example | 
|---|
| 2831 |  | 
|---|
| 2832 | @noindent | 
|---|
| 2833 | Adding @code{prog_CFLAGS = $(AM_CFLAGS)} is almost a no-op, because | 
|---|
| 2834 | when the @code{prog_CFLAGS} is defined, it is used instead of | 
|---|
| 2835 | @code{AM_CFLAGS}.  However as a side effect it will cause | 
|---|
| 2836 | @file{prog.c} and @file{foo.c} to be compiled as | 
|---|
| 2837 | @file{prog-prog.$(OBJEXT)} and @file{prog-foo.$(OBJEXT)} which solves | 
|---|
| 2838 | the issue. | 
|---|
| 2839 |  | 
|---|
| 2840 | @node Program and Library Variables, LIBOBJS, A Shared Library, Programs | 
|---|
| 2841 | @section Program and Library Variables | 
|---|
| 2842 |  | 
|---|
| 2843 | Associated with each program are a collection of variables which can be | 
|---|
| 2844 | used to modify how that program is built.  There is a similar list of | 
|---|
| 2845 | such variables for each library.  The canonical name of the program (or | 
|---|
| 2846 | library) is used as a base for naming these variables. | 
|---|
| 2847 |  | 
|---|
| 2848 | In the list below, we use the name ``maude'' to refer to the program or | 
|---|
| 2849 | library.  In your @file{Makefile.am} you would replace this with the | 
|---|
| 2850 | canonical name of your program.  This list also refers to ``maude'' as a | 
|---|
| 2851 | program, but in general the same rules apply for both static and dynamic | 
|---|
| 2852 | libraries; the documentation below notes situations where programs and | 
|---|
| 2853 | libraries differ. | 
|---|
| 2854 |  | 
|---|
| 2855 | @table @samp | 
|---|
| 2856 | @item maude_SOURCES | 
|---|
| 2857 | This variable, if it exists, lists all the source files which are | 
|---|
| 2858 | compiled to build the program.  These files are added to the | 
|---|
| 2859 | distribution by default.  When building the program, Automake will cause | 
|---|
| 2860 | each source file to be compiled to a single @file{.o} file (or | 
|---|
| 2861 | @file{.lo} when using libtool).  Normally these object files are named | 
|---|
| 2862 | after the source file, but other factors can change this.  If a file in | 
|---|
| 2863 | the @samp{_SOURCES} variable has an unrecognized extension, Automake | 
|---|
| 2864 | will do one of two things with it.  If a suffix rule exists for turning | 
|---|
| 2865 | files with the unrecognized extension into @file{.o} files, then | 
|---|
| 2866 | automake will treat this file as it will any other source file | 
|---|
| 2867 | (@pxref{Support for Other Languages}).  Otherwise, the file will be | 
|---|
| 2868 | ignored as though it were a header file. | 
|---|
| 2869 |  | 
|---|
| 2870 | The prefixes @samp{dist_} and @samp{nodist_} can be used to control | 
|---|
| 2871 | whether files listed in a @samp{_SOURCES} variable are distributed. | 
|---|
| 2872 | @samp{dist_} is redundant, as sources are distributed by default, but it | 
|---|
| 2873 | can be specified for clarity if desired. | 
|---|
| 2874 |  | 
|---|
| 2875 | It is possible to have both @samp{dist_} and @samp{nodist_} variants of | 
|---|
| 2876 | a given @samp{_SOURCES} variable at once; this lets you easily | 
|---|
| 2877 | distribute some files and not others, for instance: | 
|---|
| 2878 |  | 
|---|
| 2879 | @example | 
|---|
| 2880 | nodist_maude_SOURCES = nodist.c | 
|---|
| 2881 | dist_maude_SOURCES = dist-me.c | 
|---|
| 2882 | @end example | 
|---|
| 2883 |  | 
|---|
| 2884 | By default the output file (on Unix systems, the @file{.o} file) will be | 
|---|
| 2885 | put into the current build directory.  However, if the option | 
|---|
| 2886 | @code{subdir-objects} is in effect in the current directory then the | 
|---|
| 2887 | @file{.o} file will be put into the subdirectory named after the source | 
|---|
| 2888 | file.  For instance, with @code{subdir-objects} enabled, | 
|---|
| 2889 | @file{sub/dir/file.c} will be compiled to @file{sub/dir/file.o}.  Some | 
|---|
| 2890 | people prefer this mode of operation.  You can specify | 
|---|
| 2891 | @code{subdir-objects} in @code{AUTOMAKE_OPTIONS} (@pxref{Options}). | 
|---|
| 2892 | @cindex Subdirectory, objects in | 
|---|
| 2893 | @cindex Objects in subdirectory | 
|---|
| 2894 |  | 
|---|
| 2895 |  | 
|---|
| 2896 | @item EXTRA_maude_SOURCES | 
|---|
| 2897 | Automake needs to know the list of files you intend to compile | 
|---|
| 2898 | @emph{statically}.  For one thing, this is the only way Automake has of | 
|---|
| 2899 | knowing what sort of language support a given @file{Makefile.in} | 
|---|
| 2900 | requires.  @footnote{There are other, more obscure reasons reasons for | 
|---|
| 2901 | this limitation as well.}  This means that, for example, you can't put a | 
|---|
| 2902 | configure substitution like @samp{@@my_sources@@} into a @samp{_SOURCES} | 
|---|
| 2903 | variable.  If you intend to conditionally compile source files and use | 
|---|
| 2904 | @file{configure} to substitute the appropriate object names into, e.g., | 
|---|
| 2905 | @samp{_LDADD} (see below), then you should list the corresponding source | 
|---|
| 2906 | files in the @samp{EXTRA_} variable. | 
|---|
| 2907 |  | 
|---|
| 2908 | This variable also supports @samp{dist_} and @samp{nodist_} prefixes, | 
|---|
| 2909 | e.g., @samp{nodist_EXTRA_maude_SOURCES}. | 
|---|
| 2910 |  | 
|---|
| 2911 | @item maude_AR | 
|---|
| 2912 | A static library is created by default by invoking @code{$(AR) cru} | 
|---|
| 2913 | followed by the name of the library and then the objects being put into | 
|---|
| 2914 | the library.  You can override this by setting the @samp{_AR} variable. | 
|---|
| 2915 | This is usually used with C++; some C++ compilers require a special | 
|---|
| 2916 | invocation in order to instantiate all the templates which should go | 
|---|
| 2917 | into a library.  For instance, the SGI C++ compiler likes this variable set | 
|---|
| 2918 | like so: | 
|---|
| 2919 | @example | 
|---|
| 2920 | libmaude_a_AR = $(CXX) -ar -o | 
|---|
| 2921 | @end example | 
|---|
| 2922 |  | 
|---|
| 2923 | @item maude_LIBADD | 
|---|
| 2924 | Extra objects can be added to a @emph{library} using the @samp{_LIBADD} | 
|---|
| 2925 | variable.  For instance this should be used for objects determined by | 
|---|
| 2926 | @code{configure} (@pxref{A Library}). | 
|---|
| 2927 |  | 
|---|
| 2928 | @item maude_LDADD | 
|---|
| 2929 | Extra objects can be added to a @emph{program} by listing them in the | 
|---|
| 2930 | @samp{_LDADD} variable.  For instance this should be used for objects | 
|---|
| 2931 | determined by @code{configure} (@pxref{Linking}). | 
|---|
| 2932 |  | 
|---|
| 2933 | @samp{_LDADD} and @samp{_LIBADD} are inappropriate for passing | 
|---|
| 2934 | program-specific linker flags (except for @samp{-l}, @samp{-L}, | 
|---|
| 2935 | @samp{-dlopen} and @samp{-dlpreopen}).  Use the @samp{_LDFLAGS} variable | 
|---|
| 2936 | for this purpose. | 
|---|
| 2937 |  | 
|---|
| 2938 | For instance, if your @file{configure.in} uses @code{AC_PATH_XTRA}, you | 
|---|
| 2939 | could link your program against the X libraries like so: | 
|---|
| 2940 |  | 
|---|
| 2941 | @example | 
|---|
| 2942 | maude_LDADD = $(X_PRE_LIBS) $(X_LIBS) $(X_EXTRA_LIBS) | 
|---|
| 2943 | @end example | 
|---|
| 2944 |  | 
|---|
| 2945 | @item maude_LDFLAGS | 
|---|
| 2946 | This variable is used to pass extra flags to the link step of a program | 
|---|
| 2947 | or a shared library. | 
|---|
| 2948 |  | 
|---|
| 2949 | @item maude_DEPENDENCIES | 
|---|
| 2950 | It is also occasionally useful to have a program depend on some other | 
|---|
| 2951 | target which is not actually part of that program.  This can be done | 
|---|
| 2952 | using the @samp{_DEPENDENCIES} variable.  Each program depends on the | 
|---|
| 2953 | contents of such a variable, but no further interpretation is done. | 
|---|
| 2954 |  | 
|---|
| 2955 | If @samp{_DEPENDENCIES} is not supplied, it is computed by Automake. | 
|---|
| 2956 | The automatically-assigned value is the contents of @samp{_LDADD} or | 
|---|
| 2957 | @samp{_LIBADD}, with most configure substitutions, @samp{-l}, @samp{-L}, | 
|---|
| 2958 | @samp{-dlopen} and @samp{-dlpreopen} options removed.  The configure | 
|---|
| 2959 | substitutions that are left in are only @samp{$(LIBOBJS)} and | 
|---|
| 2960 | @samp{$(ALLOCA)}; these are left because it is known that they will not | 
|---|
| 2961 | cause an invalid value for @samp{_DEPENDENCIES} to be generated. | 
|---|
| 2962 |  | 
|---|
| 2963 | @item maude_LINK | 
|---|
| 2964 | You can override the linker on a per-program basis.  By default the | 
|---|
| 2965 | linker is chosen according to the languages used by the program.  For | 
|---|
| 2966 | instance, a program that includes C++ source code would use the C++ | 
|---|
| 2967 | compiler to link.  The @samp{_LINK} variable must hold the name of a | 
|---|
| 2968 | command which can be passed all the @file{.o} file names as arguments. | 
|---|
| 2969 | Note that the name of the underlying program is @emph{not} passed to | 
|---|
| 2970 | @samp{_LINK}; typically one uses @samp{$@@}: | 
|---|
| 2971 |  | 
|---|
| 2972 | @example | 
|---|
| 2973 | maude_LINK = $(CCLD) -magic -o $@@ | 
|---|
| 2974 | @end example | 
|---|
| 2975 |  | 
|---|
| 2976 | @item maude_CCASFLAGS | 
|---|
| 2977 | @itemx maude_CFLAGS | 
|---|
| 2978 | @itemx maude_CPPFLAGS | 
|---|
| 2979 | @itemx maude_CXXFLAGS | 
|---|
| 2980 | @itemx maude_FFLAGS | 
|---|
| 2981 | @itemx maude_GCJFLAGS | 
|---|
| 2982 | @itemx maude_LFLAGS | 
|---|
| 2983 | @itemx maude_OBJCFLAGS | 
|---|
| 2984 | @itemx maude_RFLAGS | 
|---|
| 2985 | @itemx maude_YFLAGS | 
|---|
| 2986 | @cindex per-target compilation flags, defined | 
|---|
| 2987 | Automake allows you to set compilation flags on a per-program (or | 
|---|
| 2988 | per-library) basis.  A single source file can be included in several | 
|---|
| 2989 | programs, and it will potentially be compiled with different flags for | 
|---|
| 2990 | each program.  This works for any language directly supported by | 
|---|
| 2991 | Automake.  These @dfn{per-target compilation flags} are | 
|---|
| 2992 | @samp{_CCASFLAGS}, | 
|---|
| 2993 | @samp{_CFLAGS}, | 
|---|
| 2994 | @samp{_CPPFLAGS}, | 
|---|
| 2995 | @samp{_CXXFLAGS}, | 
|---|
| 2996 | @samp{_FFLAGS}, | 
|---|
| 2997 | @samp{_GCJFLAGS}, | 
|---|
| 2998 | @samp{_LFLAGS}, | 
|---|
| 2999 | @samp{_OBJCFLAGS}, | 
|---|
| 3000 | @samp{_RFLAGS}, and | 
|---|
| 3001 | @samp{_YFLAGS}. | 
|---|
| 3002 |  | 
|---|
| 3003 | When using a per-target compilation flag, Automake will choose a | 
|---|
| 3004 | different name for the intermediate object files.  Ordinarily a file | 
|---|
| 3005 | like @file{sample.c} will be compiled to produce @file{sample.o}. | 
|---|
| 3006 | However, if the program's @samp{_CFLAGS} variable is set, then the | 
|---|
| 3007 | object file will be named, for instance, @file{maude-sample.o}. | 
|---|
| 3008 | (See also @ref{renamed objects}.) | 
|---|
| 3009 |  | 
|---|
| 3010 | In compilations with per-target flags, the ordinary @samp{AM_} form of | 
|---|
| 3011 | the flags variable is @emph{not} automatically included in the | 
|---|
| 3012 | compilation (however, the user form of the variable @emph{is} included). | 
|---|
| 3013 | So for instance, if you want the hypothetical @file{maude} compilations | 
|---|
| 3014 | to also use the value of @samp{AM_CFLAGS}, you would need to write: | 
|---|
| 3015 |  | 
|---|
| 3016 | @example | 
|---|
| 3017 | maude_CFLAGS = @dots{} your flags @dots{} $(AM_CFLAGS) | 
|---|
| 3018 | @end example | 
|---|
| 3019 |  | 
|---|
| 3020 |  | 
|---|
| 3021 | @item maude_DEPENDENCIES | 
|---|
| 3022 | It is also occasionally useful to have a program depend on some other | 
|---|
| 3023 | target which is not actually part of that program.  This can be done | 
|---|
| 3024 | using the @samp{_DEPENDENCIES} variable.  Each program depends on the | 
|---|
| 3025 | contents of such a variable, but no further interpretation is done. | 
|---|
| 3026 |  | 
|---|
| 3027 | If @samp{_DEPENDENCIES} is not supplied, it is computed by Automake. | 
|---|
| 3028 | The automatically-assigned value is the contents of @samp{_LDADD} or | 
|---|
| 3029 | @samp{_LIBADD}, with most configure substitutions, @samp{-l}, @samp{-L}, | 
|---|
| 3030 | @samp{-dlopen} and @samp{-dlpreopen} options removed.  The configure | 
|---|
| 3031 | substitutions that are left in are only @samp{@@LIBOBJS@@} and | 
|---|
| 3032 | @samp{@@ALLOCA@@}; these are left because it is known that they will not | 
|---|
| 3033 | cause an invalid value for @samp{_DEPENDENCIES} to be generated. | 
|---|
| 3034 |  | 
|---|
| 3035 | @item maude_SHORTNAME | 
|---|
| 3036 | On some platforms the allowable file names are very short.  In order to | 
|---|
| 3037 | support these systems and per-program compilation flags at the same | 
|---|
| 3038 | time, Automake allows you to set a ``short name'' which will influence | 
|---|
| 3039 | how intermediate object files are named.  For instance, if you set | 
|---|
| 3040 | @samp{maude_SHORTNAME} to @samp{m}, then in the above per-program | 
|---|
| 3041 | compilation flag example the object file would be named | 
|---|
| 3042 | @file{m-sample.o} rather than @file{maude-sample.o}.  This facility is | 
|---|
| 3043 | rarely needed in practice, and we recommend avoiding it until you find | 
|---|
| 3044 | it is required. | 
|---|
| 3045 | @end table | 
|---|
| 3046 |  | 
|---|
| 3047 |  | 
|---|
| 3048 | @node LIBOBJS, Program variables, Program and Library Variables, Programs | 
|---|
| 3049 | @section Special handling for LIBOBJS and ALLOCA | 
|---|
| 3050 |  | 
|---|
| 3051 | @cindex @code{LIBOBJS}, special handling | 
|---|
| 3052 | @cindex @code{ALLOCA}, special handling | 
|---|
| 3053 |  | 
|---|
| 3054 | Automake explicitly recognizes the use of @code{$(LIBOBJS)} and | 
|---|
| 3055 | @code{$(ALLOCA)}, and uses this information, plus the list of | 
|---|
| 3056 | @code{LIBOBJS} files derived from @file{configure.in} to automatically | 
|---|
| 3057 | include the appropriate source files in the distribution (@pxref{Dist}). | 
|---|
| 3058 | These source files are also automatically handled in the | 
|---|
| 3059 | dependency-tracking scheme; see @xref{Dependencies}. | 
|---|
| 3060 |  | 
|---|
| 3061 | @code{$(LIBOBJS)} and @code{$(ALLOCA)} are specially recognized in any | 
|---|
| 3062 | @samp{_LDADD} or @samp{_LIBADD} variable. | 
|---|
| 3063 |  | 
|---|
| 3064 |  | 
|---|
| 3065 | @node Program variables, Yacc and Lex, LIBOBJS, Programs | 
|---|
| 3066 | @section Variables used when building a program | 
|---|
| 3067 |  | 
|---|
| 3068 | Occasionally it is useful to know which @file{Makefile} variables | 
|---|
| 3069 | Automake uses for compilations; for instance you might need to do your | 
|---|
| 3070 | own compilation in some special cases. | 
|---|
| 3071 |  | 
|---|
| 3072 | Some variables are inherited from Autoconf; these are @code{CC}, | 
|---|
| 3073 | @code{CFLAGS}, @code{CPPFLAGS}, @code{DEFS}, @code{LDFLAGS}, and | 
|---|
| 3074 | @code{LIBS}. | 
|---|
| 3075 | @vindex CC | 
|---|
| 3076 | @vindex CFLAGS | 
|---|
| 3077 | @vindex CPPFLAGS | 
|---|
| 3078 | @vindex DEFS | 
|---|
| 3079 | @vindex LDFLAGS | 
|---|
| 3080 | @vindex LIBS | 
|---|
| 3081 |  | 
|---|
| 3082 | There are some additional variables which Automake itself defines: | 
|---|
| 3083 |  | 
|---|
| 3084 | @vtable @code | 
|---|
| 3085 | @item AM_CPPFLAGS | 
|---|
| 3086 | The contents of this variable are passed to every compilation which invokes | 
|---|
| 3087 | the C preprocessor; it is a list of arguments to the preprocessor.  For | 
|---|
| 3088 | instance, @samp{-I} and @samp{-D} options should be listed here. | 
|---|
| 3089 |  | 
|---|
| 3090 | Automake already provides some @samp{-I} options automatically.  In | 
|---|
| 3091 | particular it generates @samp{-I$(srcdir)}, @samp{-I.}, and a @samp{-I} | 
|---|
| 3092 | pointing to the directory holding @file{config.h} (if you've used | 
|---|
| 3093 | @code{AC_CONFIG_HEADERS} or @code{AM_CONFIG_HEADER}).  You can disable | 
|---|
| 3094 | the default @samp{-I} options using the @samp{nostdinc} option. | 
|---|
| 3095 |  | 
|---|
| 3096 | @code{AM_CPPFLAGS} is ignored in preference to a per-executable (or | 
|---|
| 3097 | per-library) @code{_CPPFLAGS} variable if it is defined. | 
|---|
| 3098 |  | 
|---|
| 3099 | @item INCLUDES | 
|---|
| 3100 | This does the same job as @samp{AM_CPPFLAGS}.  It is an older name for | 
|---|
| 3101 | the same functionality.  This variable is deprecated; we suggest using | 
|---|
| 3102 | @samp{AM_CPPFLAGS} instead. | 
|---|
| 3103 |  | 
|---|
| 3104 | @item AM_CFLAGS | 
|---|
| 3105 | This is the variable which the @file{Makefile.am} author can use to pass | 
|---|
| 3106 | in additional C compiler flags.  It is more fully documented elsewhere. | 
|---|
| 3107 | In some situations, this is not used, in preference to the | 
|---|
| 3108 | per-executable (or per-library) @code{_CFLAGS}. | 
|---|
| 3109 |  | 
|---|
| 3110 | @item COMPILE | 
|---|
| 3111 | This is the command used to actually compile a C source file.  The | 
|---|
| 3112 | filename is appended to form the complete command line. | 
|---|
| 3113 |  | 
|---|
| 3114 | @item AM_LDFLAGS | 
|---|
| 3115 | This is the variable which the @file{Makefile.am} author can use to pass | 
|---|
| 3116 | in additional linker flags.  In some situations, this is not used, in | 
|---|
| 3117 | preference to the per-executable (or per-library) @code{_LDFLAGS}. | 
|---|
| 3118 |  | 
|---|
| 3119 | @item LINK | 
|---|
| 3120 | This is the command used to actually link a C program.  It already | 
|---|
| 3121 | includes @samp{-o $@@} and the usual variable references (for instance, | 
|---|
| 3122 | @code{CFLAGS}); it takes as ``arguments'' the names of the object files | 
|---|
| 3123 | and libraries to link in. | 
|---|
| 3124 | @end vtable | 
|---|
| 3125 |  | 
|---|
| 3126 |  | 
|---|
| 3127 | @node Yacc and Lex, C++ Support, Program variables, Programs | 
|---|
| 3128 | @section Yacc and Lex support | 
|---|
| 3129 |  | 
|---|
| 3130 | Automake has somewhat idiosyncratic support for Yacc and Lex. | 
|---|
| 3131 |  | 
|---|
| 3132 | Automake assumes that the @file{.c} file generated by @code{yacc} (or | 
|---|
| 3133 | @code{lex}) should be named using the basename of the input file.  That | 
|---|
| 3134 | is, for a yacc source file @file{foo.y}, Automake will cause the | 
|---|
| 3135 | intermediate file to be named @file{foo.c} (as opposed to | 
|---|
| 3136 | @file{y.tab.c}, which is more traditional). | 
|---|
| 3137 |  | 
|---|
| 3138 | The extension of a yacc source file is used to determine the extension | 
|---|
| 3139 | of the resulting @samp{C} or @samp{C++} file.  Files with the extension | 
|---|
| 3140 | @samp{.y} will be turned into @samp{.c} files; likewise, @samp{.yy} will | 
|---|
| 3141 | become @samp{.cc}; @samp{.y++}, @samp{c++}; and @samp{.yxx}, | 
|---|
| 3142 | @samp{.cxx}. | 
|---|
| 3143 |  | 
|---|
| 3144 | Likewise, lex source files can be used to generate @samp{C} or | 
|---|
| 3145 | @samp{C++}; the extensions @samp{.l}, @samp{.ll}, @samp{.l++}, and | 
|---|
| 3146 | @samp{.lxx} are recognized. | 
|---|
| 3147 |  | 
|---|
| 3148 | You should never explicitly mention the intermediate (@samp{C} or | 
|---|
| 3149 | @samp{C++}) file in any @samp{SOURCES} variable; only list the source | 
|---|
| 3150 | file. | 
|---|
| 3151 |  | 
|---|
| 3152 | The intermediate files generated by @code{yacc} (or @code{lex}) will be | 
|---|
| 3153 | included in any distribution that is made.  That way the user doesn't | 
|---|
| 3154 | need to have @code{yacc} or @code{lex}. | 
|---|
| 3155 |  | 
|---|
| 3156 | If a @code{yacc} source file is seen, then your @file{configure.in} must | 
|---|
| 3157 | define the variable @samp{YACC}.  This is most easily done by invoking | 
|---|
| 3158 | the macro @samp{AC_PROG_YACC} (@pxref{Particular Programs, , Particular | 
|---|
| 3159 | Program Checks, autoconf, The Autoconf Manual}). | 
|---|
| 3160 |  | 
|---|
| 3161 | When @code{yacc} is invoked, it is passed @samp{YFLAGS} and | 
|---|
| 3162 | @samp{AM_YFLAGS}.  The former is a user variable and the latter is | 
|---|
| 3163 | intended for the @file{Makefile.am} author. | 
|---|
| 3164 |  | 
|---|
| 3165 | @samp{AM_YFLAGS} is usually used to pass the @code{-d} option to | 
|---|
| 3166 | @code{yacc}.  Automake knows what this means and will automatically | 
|---|
| 3167 | adjust its rules to update and distribute the header file built by | 
|---|
| 3168 | @code{yacc -d}.  What Automake cannot guess, though, is where this | 
|---|
| 3169 | header will be used: it is up to you to ensure the header gets built | 
|---|
| 3170 | before it is first used.  Typically this is necessary in order for | 
|---|
| 3171 | dependency tracking to work when the header is included by another | 
|---|
| 3172 | file.  The common solution is listing the header file in | 
|---|
| 3173 | @code{BUILT_SOURCES} (@pxref{Sources}) as follows. | 
|---|
| 3174 |  | 
|---|
| 3175 | @example | 
|---|
| 3176 | BUILT_SOURCES = parser.h | 
|---|
| 3177 | AM_YFLAGS = -d | 
|---|
| 3178 | bin_PROGRAMS = foo | 
|---|
| 3179 | foo_SOURCES = @dots{} parser.y @dots{} | 
|---|
| 3180 | @end example | 
|---|
| 3181 |  | 
|---|
| 3182 | If a @code{lex} source file is seen, then your @file{configure.in} | 
|---|
| 3183 | must define the variable @samp{LEX}.  You can use @samp{AC_PROG_LEX} | 
|---|
| 3184 | to do this (@pxref{Particular Programs, , Particular Program Checks, | 
|---|
| 3185 | autoconf, The Autoconf Manual}), but using @code{AM_PROG_LEX} macro | 
|---|
| 3186 | (@pxref{Macros}) is recommended. | 
|---|
| 3187 |  | 
|---|
| 3188 | When @code{lex} is invoked, it is passed @samp{LFLAGS} and | 
|---|
| 3189 | @samp{AM_LFLAGS}.  The former is a user variable and the latter is | 
|---|
| 3190 | intended for the @file{Makefile.am} author. | 
|---|
| 3191 |  | 
|---|
| 3192 |  | 
|---|
| 3193 |  | 
|---|
| 3194 | @cindex ylwrap | 
|---|
| 3195 | @cindex yacc, multiple parsers | 
|---|
| 3196 | @cindex Multiple yacc parsers | 
|---|
| 3197 | @cindex Multiple lex lexers | 
|---|
| 3198 | @cindex lex, multiple lexers | 
|---|
| 3199 |  | 
|---|
| 3200 |  | 
|---|
| 3201 | Automake makes it possible to include multiple @code{yacc} (or | 
|---|
| 3202 | @code{lex}) source files in a single program.  When there is more than | 
|---|
| 3203 | one distinct @code{yacc} (or @code{lex}) source file in a directory, | 
|---|
| 3204 | Automake uses a small program called @code{ylwrap} to run @code{yacc} | 
|---|
| 3205 | (or @code{lex}) in a subdirectory.  This is necessary because yacc's | 
|---|
| 3206 | output filename is fixed, and a parallel make could conceivably invoke | 
|---|
| 3207 | more than one instance of @code{yacc} simultaneously.  The @code{ylwrap} | 
|---|
| 3208 | program is distributed with Automake.  It should appear in the directory | 
|---|
| 3209 | specified by @samp{AC_CONFIG_AUX_DIR} (@pxref{Input, , Finding | 
|---|
| 3210 | `configure' Input, autoconf, The Autoconf Manual}), or the current | 
|---|
| 3211 | directory if that macro is not used in @file{configure.in}. | 
|---|
| 3212 |  | 
|---|
| 3213 | For @code{yacc}, simply managing locking is insufficient.  The output of | 
|---|
| 3214 | @code{yacc} always uses the same symbol names internally, so it isn't | 
|---|
| 3215 | possible to link two @code{yacc} parsers into the same executable. | 
|---|
| 3216 |  | 
|---|
| 3217 | We recommend using the following renaming hack used in @code{gdb}: | 
|---|
| 3218 | @example | 
|---|
| 3219 | #define yymaxdepth c_maxdepth | 
|---|
| 3220 | #define yyparse c_parse | 
|---|
| 3221 | #define yylex   c_lex | 
|---|
| 3222 | #define yyerror c_error | 
|---|
| 3223 | #define yylval  c_lval | 
|---|
| 3224 | #define yychar  c_char | 
|---|
| 3225 | #define yydebug c_debug | 
|---|
| 3226 | #define yypact  c_pact | 
|---|
| 3227 | #define yyr1    c_r1 | 
|---|
| 3228 | #define yyr2    c_r2 | 
|---|
| 3229 | #define yydef   c_def | 
|---|
| 3230 | #define yychk   c_chk | 
|---|
| 3231 | #define yypgo   c_pgo | 
|---|
| 3232 | #define yyact   c_act | 
|---|
| 3233 | #define yyexca  c_exca | 
|---|
| 3234 | #define yyerrflag c_errflag | 
|---|
| 3235 | #define yynerrs c_nerrs | 
|---|
| 3236 | #define yyps    c_ps | 
|---|
| 3237 | #define yypv    c_pv | 
|---|
| 3238 | #define yys     c_s | 
|---|
| 3239 | #define yy_yys  c_yys | 
|---|
| 3240 | #define yystate c_state | 
|---|
| 3241 | #define yytmp   c_tmp | 
|---|
| 3242 | #define yyv     c_v | 
|---|
| 3243 | #define yy_yyv  c_yyv | 
|---|
| 3244 | #define yyval   c_val | 
|---|
| 3245 | #define yylloc  c_lloc | 
|---|
| 3246 | #define yyreds  c_reds | 
|---|
| 3247 | #define yytoks  c_toks | 
|---|
| 3248 | #define yylhs   c_yylhs | 
|---|
| 3249 | #define yylen   c_yylen | 
|---|
| 3250 | #define yydefred c_yydefred | 
|---|
| 3251 | #define yydgoto c_yydgoto | 
|---|
| 3252 | #define yysindex c_yysindex | 
|---|
| 3253 | #define yyrindex c_yyrindex | 
|---|
| 3254 | #define yygindex c_yygindex | 
|---|
| 3255 | #define yytable  c_yytable | 
|---|
| 3256 | #define yycheck  c_yycheck | 
|---|
| 3257 | #define yyname   c_yyname | 
|---|
| 3258 | #define yyrule   c_yyrule | 
|---|
| 3259 | @end example | 
|---|
| 3260 |  | 
|---|
| 3261 | For each define, replace the @samp{c_} prefix with whatever you like. | 
|---|
| 3262 | These defines work for @code{bison}, @code{byacc}, and traditional | 
|---|
| 3263 | @code{yacc}s.  If you find a parser generator that uses a symbol not | 
|---|
| 3264 | covered here, please report the new name so it can be added to the list. | 
|---|
| 3265 |  | 
|---|
| 3266 |  | 
|---|
| 3267 | @node C++ Support, Assembly Support, Yacc and Lex, Programs | 
|---|
| 3268 | @section C++ Support | 
|---|
| 3269 |  | 
|---|
| 3270 | @cindex C++ support | 
|---|
| 3271 | @cindex Support for C++ | 
|---|
| 3272 |  | 
|---|
| 3273 | Automake includes full support for C++. | 
|---|
| 3274 |  | 
|---|
| 3275 | Any package including C++ code must define the output variable | 
|---|
| 3276 | @samp{CXX} in @file{configure.in}; the simplest way to do this is to use | 
|---|
| 3277 | the @code{AC_PROG_CXX} macro (@pxref{Particular Programs, , Particular | 
|---|
| 3278 | Program Checks, autoconf, The Autoconf Manual}). | 
|---|
| 3279 |  | 
|---|
| 3280 | A few additional variables are defined when a C++ source file is seen: | 
|---|
| 3281 |  | 
|---|
| 3282 | @vtable @code | 
|---|
| 3283 | @item CXX | 
|---|
| 3284 | The name of the C++ compiler. | 
|---|
| 3285 |  | 
|---|
| 3286 | @item CXXFLAGS | 
|---|
| 3287 | Any flags to pass to the C++ compiler. | 
|---|
| 3288 |  | 
|---|
| 3289 | @item AM_CXXFLAGS | 
|---|
| 3290 | The maintainer's variant of @code{CXXFLAGS}. | 
|---|
| 3291 |  | 
|---|
| 3292 | @item CXXCOMPILE | 
|---|
| 3293 | The command used to actually compile a C++ source file.  The file name | 
|---|
| 3294 | is appended to form the complete command line. | 
|---|
| 3295 |  | 
|---|
| 3296 | @item CXXLINK | 
|---|
| 3297 | The command used to actually link a C++ program. | 
|---|
| 3298 | @end vtable | 
|---|
| 3299 |  | 
|---|
| 3300 |  | 
|---|
| 3301 | @node Assembly Support, Fortran 77 Support, C++ Support, Programs | 
|---|
| 3302 | @section Assembly Support | 
|---|
| 3303 |  | 
|---|
| 3304 | Automake includes some support for assembly code. | 
|---|
| 3305 |  | 
|---|
| 3306 | The variable @code{CCAS} holds the name of the compiler used to build | 
|---|
| 3307 | assembly code.  This compiler must work a bit like a C compiler; in | 
|---|
| 3308 | particular it must accept @samp{-c} and @samp{-o}.  The value of | 
|---|
| 3309 | @code{CCASFLAGS} is passed to the compilation. | 
|---|
| 3310 | @vindex CCAS | 
|---|
| 3311 | @vindex CCASFLAGS | 
|---|
| 3312 |  | 
|---|
| 3313 | You are required to set @code{CCAS} and @code{CCASFLAGS} via | 
|---|
| 3314 | @file{configure.in}.  The autoconf macro @code{AM_PROG_AS} will do this | 
|---|
| 3315 | for you.  Unless they are already set, it simply sets @code{CCAS} to the | 
|---|
| 3316 | C compiler and @code{CCASFLAGS} to the C compiler flags. | 
|---|
| 3317 |  | 
|---|
| 3318 | Only the suffixes @samp{.s} and @samp{.S} are recognized by | 
|---|
| 3319 | @code{automake} as being files containing assembly code. | 
|---|
| 3320 |  | 
|---|
| 3321 |  | 
|---|
| 3322 | @node Fortran 77 Support, Java Support, Assembly Support, Programs | 
|---|
| 3323 | @comment  node-name,  next,  previous,  up | 
|---|
| 3324 | @section Fortran 77 Support | 
|---|
| 3325 |  | 
|---|
| 3326 | @cindex Fortran 77 support | 
|---|
| 3327 | @cindex Support for Fortran 77 | 
|---|
| 3328 |  | 
|---|
| 3329 | Automake includes full support for Fortran 77. | 
|---|
| 3330 |  | 
|---|
| 3331 | Any package including Fortran 77 code must define the output variable | 
|---|
| 3332 | @samp{F77} in @file{configure.in}; the simplest way to do this is to use | 
|---|
| 3333 | the @code{AC_PROG_F77} macro (@pxref{Particular Programs, , Particular | 
|---|
| 3334 | Program Checks, autoconf, The Autoconf Manual}).  @xref{Fortran 77 and | 
|---|
| 3335 | Autoconf}. | 
|---|
| 3336 |  | 
|---|
| 3337 | A few additional variables are defined when a Fortran 77 source file is | 
|---|
| 3338 | seen: | 
|---|
| 3339 |  | 
|---|
| 3340 | @vtable @code | 
|---|
| 3341 |  | 
|---|
| 3342 | @item F77 | 
|---|
| 3343 | The name of the Fortran 77 compiler. | 
|---|
| 3344 |  | 
|---|
| 3345 | @item FFLAGS | 
|---|
| 3346 | Any flags to pass to the Fortran 77 compiler. | 
|---|
| 3347 |  | 
|---|
| 3348 | @item AM_FFLAGS | 
|---|
| 3349 | The maintainer's variant of @code{FFLAGS}. | 
|---|
| 3350 |  | 
|---|
| 3351 | @item RFLAGS | 
|---|
| 3352 | Any flags to pass to the Ratfor compiler. | 
|---|
| 3353 |  | 
|---|
| 3354 | @item AM_RFLAGS | 
|---|
| 3355 | The maintainer's variant of @code{RFLAGS}. | 
|---|
| 3356 |  | 
|---|
| 3357 | @item F77COMPILE | 
|---|
| 3358 | The command used to actually compile a Fortran 77 source file.  The file | 
|---|
| 3359 | name is appended to form the complete command line. | 
|---|
| 3360 |  | 
|---|
| 3361 | @item FLINK | 
|---|
| 3362 | The command used to actually link a pure Fortran 77 program or shared | 
|---|
| 3363 | library. | 
|---|
| 3364 |  | 
|---|
| 3365 | @end vtable | 
|---|
| 3366 |  | 
|---|
| 3367 | Automake can handle preprocessing Fortran 77 and Ratfor source files in | 
|---|
| 3368 | addition to compiling them@footnote{Much, if not most, of the | 
|---|
| 3369 | information in the following sections pertaining to preprocessing | 
|---|
| 3370 | Fortran 77 programs was taken almost verbatim from @ref{Catalogue of | 
|---|
| 3371 | Rules, , Catalogue of Rules, make, The GNU Make Manual}.}.  Automake | 
|---|
| 3372 | also contains some support for creating programs and shared libraries | 
|---|
| 3373 | that are a mixture of Fortran 77 and other languages (@pxref{Mixing | 
|---|
| 3374 | Fortran 77 With C and C++}). | 
|---|
| 3375 |  | 
|---|
| 3376 | These issues are covered in the following sections. | 
|---|
| 3377 |  | 
|---|
| 3378 | @menu | 
|---|
| 3379 | * Preprocessing Fortran 77:: | 
|---|
| 3380 | * Compiling Fortran 77 Files:: | 
|---|
| 3381 | * Mixing Fortran 77 With C and C++:: | 
|---|
| 3382 | * Fortran 77 and Autoconf:: | 
|---|
| 3383 | @end menu | 
|---|
| 3384 |  | 
|---|
| 3385 |  | 
|---|
| 3386 | @node Preprocessing Fortran 77, Compiling Fortran 77 Files, Fortran 77 Support, Fortran 77 Support | 
|---|
| 3387 | @comment  node-name,  next,  previous,  up | 
|---|
| 3388 | @subsection Preprocessing Fortran 77 | 
|---|
| 3389 |  | 
|---|
| 3390 | @cindex Preprocessing Fortran 77 | 
|---|
| 3391 | @cindex Fortran 77, Preprocessing | 
|---|
| 3392 | @cindex Ratfor programs | 
|---|
| 3393 |  | 
|---|
| 3394 | @file{N.f} is made automatically from @file{N.F} or @file{N.r}.  This | 
|---|
| 3395 | rule runs just the preprocessor to convert a preprocessable Fortran 77 | 
|---|
| 3396 | or Ratfor source file into a strict Fortran 77 source file.  The precise | 
|---|
| 3397 | command used is as follows: | 
|---|
| 3398 |  | 
|---|
| 3399 | @table @file | 
|---|
| 3400 |  | 
|---|
| 3401 | @item .F | 
|---|
| 3402 | @code{$(F77) -F $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)} | 
|---|
| 3403 |  | 
|---|
| 3404 | @item .r | 
|---|
| 3405 | @code{$(F77) -F $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)} | 
|---|
| 3406 |  | 
|---|
| 3407 | @end table | 
|---|
| 3408 |  | 
|---|
| 3409 |  | 
|---|
| 3410 | @node Compiling Fortran 77 Files, Mixing Fortran 77 With C and C++, Preprocessing Fortran 77, Fortran 77 Support | 
|---|
| 3411 | @comment  node-name,  next,  previous,  up | 
|---|
| 3412 | @subsection Compiling Fortran 77 Files | 
|---|
| 3413 |  | 
|---|
| 3414 | @file{N.o} is made automatically from @file{N.f}, @file{N.F} or | 
|---|
| 3415 | @file{N.r} by running the Fortran 77 compiler.  The precise command used | 
|---|
| 3416 | is as follows: | 
|---|
| 3417 |  | 
|---|
| 3418 | @table @file | 
|---|
| 3419 |  | 
|---|
| 3420 | @item .f | 
|---|
| 3421 | @code{$(F77) -c $(AM_FFLAGS) $(FFLAGS)} | 
|---|
| 3422 |  | 
|---|
| 3423 | @item .F | 
|---|
| 3424 | @code{$(F77) -c $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)} | 
|---|
| 3425 |  | 
|---|
| 3426 | @item .r | 
|---|
| 3427 | @code{$(F77) -c $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)} | 
|---|
| 3428 |  | 
|---|
| 3429 | @end table | 
|---|
| 3430 |  | 
|---|
| 3431 |  | 
|---|
| 3432 | @node Mixing Fortran 77 With C and C++, Fortran 77 and Autoconf, Compiling Fortran 77 Files, Fortran 77 Support | 
|---|
| 3433 | @comment  node-name,  next,  previous,  up | 
|---|
| 3434 | @subsection Mixing Fortran 77 With C and C++ | 
|---|
| 3435 |  | 
|---|
| 3436 | @cindex Fortran 77, mixing with C and C++ | 
|---|
| 3437 | @cindex Mixing Fortran 77 with C and C++ | 
|---|
| 3438 | @cindex Linking Fortran 77 with C and C++ | 
|---|
| 3439 | @cindex cfortran | 
|---|
| 3440 | @cindex Mixing Fortran 77 with C and/or C++ | 
|---|
| 3441 |  | 
|---|
| 3442 | Automake currently provides @emph{limited} support for creating programs | 
|---|
| 3443 | and shared libraries that are a mixture of Fortran 77 and C and/or C++. | 
|---|
| 3444 | However, there are many other issues related to mixing Fortran 77 with | 
|---|
| 3445 | other languages that are @emph{not} (currently) handled by Automake, but | 
|---|
| 3446 | that are handled by other packages@footnote{For example, | 
|---|
| 3447 | @uref{http://www-zeus.desy.de/~burow/cfortran/, the cfortran package} | 
|---|
| 3448 | addresses all of these inter-language issues, and runs under nearly all | 
|---|
| 3449 | Fortran 77, C and C++ compilers on nearly all platforms.  However, | 
|---|
| 3450 | @code{cfortran} is not yet Free Software, but it will be in the next | 
|---|
| 3451 | major release.}. | 
|---|
| 3452 |  | 
|---|
| 3453 | @page | 
|---|
| 3454 | Automake can help in two ways: | 
|---|
| 3455 |  | 
|---|
| 3456 | @enumerate | 
|---|
| 3457 | @item | 
|---|
| 3458 | Automatic selection of the linker depending on which combinations of | 
|---|
| 3459 | source code. | 
|---|
| 3460 |  | 
|---|
| 3461 | @item | 
|---|
| 3462 | Automatic selection of the appropriate linker flags (e.g. @samp{-L} and | 
|---|
| 3463 | @samp{-l}) to pass to the automatically selected linker in order to link | 
|---|
| 3464 | in the appropriate Fortran 77 intrinsic and run-time libraries. | 
|---|
| 3465 |  | 
|---|
| 3466 | @cindex FLIBS, defined | 
|---|
| 3467 | These extra Fortran 77 linker flags are supplied in the output variable | 
|---|
| 3468 | @code{FLIBS} by the @code{AC_F77_LIBRARY_LDFLAGS} Autoconf macro | 
|---|
| 3469 | supplied with newer versions of Autoconf (Autoconf version 2.13 and | 
|---|
| 3470 | later).  @xref{Fortran 77 Compiler Characteristics, , , autoconf, The | 
|---|
| 3471 | Autoconf}. | 
|---|
| 3472 | @end enumerate | 
|---|
| 3473 |  | 
|---|
| 3474 | If Automake detects that a program or shared library (as mentioned in | 
|---|
| 3475 | some @code{_PROGRAMS} or @code{_LTLIBRARIES} primary) contains source | 
|---|
| 3476 | code that is a mixture of Fortran 77 and C and/or C++, then it requires | 
|---|
| 3477 | that the macro @code{AC_F77_LIBRARY_LDFLAGS} be called in | 
|---|
| 3478 | @file{configure.in}, and that either @code{$(FLIBS)} or @code{@@FLIBS@@} | 
|---|
| 3479 | appear in the appropriate @code{_LDADD} (for programs) or @code{_LIBADD} | 
|---|
| 3480 | (for shared libraries) variables.  It is the responsibility of the | 
|---|
| 3481 | person writing the @file{Makefile.am} to make sure that @code{$(FLIBS)} | 
|---|
| 3482 | or @code{@@FLIBS@@} appears in the appropriate @code{_LDADD} or | 
|---|
| 3483 | @code{_LIBADD} variable. | 
|---|
| 3484 |  | 
|---|
| 3485 | @cindex Mixed language example | 
|---|
| 3486 | @cindex Example, mixed language | 
|---|
| 3487 |  | 
|---|
| 3488 | For example, consider the following @file{Makefile.am}: | 
|---|
| 3489 |  | 
|---|
| 3490 | @example | 
|---|
| 3491 | bin_PROGRAMS = foo | 
|---|
| 3492 | foo_SOURCES  = main.cc foo.f | 
|---|
| 3493 | foo_LDADD    = libfoo.la @@FLIBS@@ | 
|---|
| 3494 |  | 
|---|
| 3495 | pkglib_LTLIBRARIES = libfoo.la | 
|---|
| 3496 | libfoo_la_SOURCES  = bar.f baz.c zardoz.cc | 
|---|
| 3497 | libfoo_la_LIBADD   = $(FLIBS) | 
|---|
| 3498 | @end example | 
|---|
| 3499 |  | 
|---|
| 3500 | In this case, Automake will insist that @code{AC_F77_LIBRARY_LDFLAGS} | 
|---|
| 3501 | is mentioned in @file{configure.in}.  Also, if @code{@@FLIBS@@} hadn't | 
|---|
| 3502 | been mentioned in @code{foo_LDADD} and @code{libfoo_la_LIBADD}, then | 
|---|
| 3503 | Automake would have issued a warning. | 
|---|
| 3504 |  | 
|---|
| 3505 |  | 
|---|
| 3506 | @page | 
|---|
| 3507 | @menu | 
|---|
| 3508 | * How the Linker is Chosen:: | 
|---|
| 3509 | @end menu | 
|---|
| 3510 |  | 
|---|
| 3511 | @node How the Linker is Chosen,  , Mixing Fortran 77 With C and C++, Mixing Fortran 77 With C and C++ | 
|---|
| 3512 | @comment  node-name,  next,  previous,  up | 
|---|
| 3513 | @subsubsection How the Linker is Chosen | 
|---|
| 3514 |  | 
|---|
| 3515 | @cindex Automatic linker selection | 
|---|
| 3516 | @cindex Selecting the linker automatically | 
|---|
| 3517 |  | 
|---|
| 3518 | The following diagram demonstrates under what conditions a particular | 
|---|
| 3519 | linker is chosen by Automake. | 
|---|
| 3520 |  | 
|---|
| 3521 | For example, if Fortran 77, C and C++ source code were to be compiled | 
|---|
| 3522 | into a program, then the C++ linker will be used.  In this case, if the | 
|---|
| 3523 | C or Fortran 77 linkers required any special libraries that weren't | 
|---|
| 3524 | included by the C++ linker, then they must be manually added to an | 
|---|
| 3525 | @code{_LDADD} or @code{_LIBADD} variable by the user writing the | 
|---|
| 3526 | @file{Makefile.am}. | 
|---|
| 3527 |  | 
|---|
| 3528 | @example | 
|---|
| 3529 | \              Linker | 
|---|
| 3530 | source      \ | 
|---|
| 3531 | code        \     C        C++     Fortran | 
|---|
| 3532 | -----------------  +---------+---------+---------+ | 
|---|
| 3533 | |         |         |         | | 
|---|
| 3534 | C                  |    x    |         |         | | 
|---|
| 3535 | |         |         |         | | 
|---|
| 3536 | +---------+---------+---------+ | 
|---|
| 3537 | |         |         |         | | 
|---|
| 3538 | C++            |         |    x    |         | | 
|---|
| 3539 | |         |         |         | | 
|---|
| 3540 | +---------+---------+---------+ | 
|---|
| 3541 | |         |         |         | | 
|---|
| 3542 | Fortran  |         |         |    x    | | 
|---|
| 3543 | |         |         |         | | 
|---|
| 3544 | +---------+---------+---------+ | 
|---|
| 3545 | |         |         |         | | 
|---|
| 3546 | C + C++            |         |    x    |         | | 
|---|
| 3547 | |         |         |         | | 
|---|
| 3548 | +---------+---------+---------+ | 
|---|
| 3549 | |         |         |         | | 
|---|
| 3550 | C +       Fortran  |         |         |    x    | | 
|---|
| 3551 | |         |         |         | | 
|---|
| 3552 | +---------+---------+---------+ | 
|---|
| 3553 | |         |         |         | | 
|---|
| 3554 | C++ + Fortran  |         |    x    |         | | 
|---|
| 3555 | |         |         |         | | 
|---|
| 3556 | +---------+---------+---------+ | 
|---|
| 3557 | |         |         |         | | 
|---|
| 3558 | C + C++ + Fortran  |         |    x    |         | | 
|---|
| 3559 | |         |         |         | | 
|---|
| 3560 | +---------+---------+---------+ | 
|---|
| 3561 | @end example | 
|---|
| 3562 |  | 
|---|
| 3563 |  | 
|---|
| 3564 | @node Fortran 77 and Autoconf,  , Mixing Fortran 77 With C and C++, Fortran 77 Support | 
|---|
| 3565 | @comment  node-name,  next,  previous,  up | 
|---|
| 3566 | @subsection Fortran 77 and Autoconf | 
|---|
| 3567 |  | 
|---|
| 3568 | The current Automake support for Fortran 77 requires a recent enough | 
|---|
| 3569 | version of Autoconf that also includes support for Fortran 77.  Full | 
|---|
| 3570 | Fortran 77 support was added to Autoconf 2.13, so you will want to use | 
|---|
| 3571 | that version of Autoconf or later. | 
|---|
| 3572 |  | 
|---|
| 3573 |  | 
|---|
| 3574 | @node Java Support, Support for Other Languages, Fortran 77 Support, Programs | 
|---|
| 3575 | @comment  node-name,  next,  previous,  up | 
|---|
| 3576 | @section Java Support | 
|---|
| 3577 |  | 
|---|
| 3578 | @cindex Java support | 
|---|
| 3579 | @cindex Support for Java | 
|---|
| 3580 |  | 
|---|
| 3581 | Automake includes support for compiled Java, using @code{gcj}, the Java | 
|---|
| 3582 | front end to the GNU Compiler Collection. | 
|---|
| 3583 |  | 
|---|
| 3584 | Any package including Java code to be compiled must define the output | 
|---|
| 3585 | variable @samp{GCJ} in @file{configure.in}; the variable @samp{GCJFLAGS} | 
|---|
| 3586 | must also be defined somehow (either in @file{configure.in} or | 
|---|
| 3587 | @file{Makefile.am}).  The simplest way to do this is to use the | 
|---|
| 3588 | @code{AM_PROG_GCJ} macro. | 
|---|
| 3589 |  | 
|---|
| 3590 | @vindex GCJFLAGS | 
|---|
| 3591 |  | 
|---|
| 3592 | By default, programs including Java source files are linked with | 
|---|
| 3593 | @code{gcj}. | 
|---|
| 3594 |  | 
|---|
| 3595 | As always, the contents of @samp{AM_GCJFLAGS} are passed to every | 
|---|
| 3596 | compilation invoking @code{gcj} (in its role as an ahead-of-time | 
|---|
| 3597 | compiler -- when invoking it to create @file{.class} files, | 
|---|
| 3598 | @samp{AM_JAVACFLAGS} is used instead).  If it is necessary to pass | 
|---|
| 3599 | options to @code{gcj} from @file{Makefile.am}, this variable, and not | 
|---|
| 3600 | the user variable @samp{GCJFLAGS}, should be used. | 
|---|
| 3601 |  | 
|---|
| 3602 | @vindex AM_GCJFLAGS | 
|---|
| 3603 |  | 
|---|
| 3604 | @code{gcj} can be used to compile @file{.java}, @file{.class}, | 
|---|
| 3605 | @file{.zip}, or @file{.jar} files. | 
|---|
| 3606 |  | 
|---|
| 3607 | When linking, @code{gcj} requires that the main class be specified | 
|---|
| 3608 | using the @samp{--main=} option.  The easiest way to do this is to use | 
|---|
| 3609 | the @code{_LDFLAGS} variable for the program. | 
|---|
| 3610 |  | 
|---|
| 3611 |  | 
|---|
| 3612 | @node Support for Other Languages, ANSI, Java Support, Programs | 
|---|
| 3613 | @comment  node-name,  next,  previous,  up | 
|---|
| 3614 | @section Support for Other Languages | 
|---|
| 3615 |  | 
|---|
| 3616 | Automake currently only includes full support for C, C++ (@pxref{C++ | 
|---|
| 3617 | Support}), Fortran 77 (@pxref{Fortran 77 Support}), and Java | 
|---|
| 3618 | (@pxref{Java Support}).  There is only rudimentary support for other | 
|---|
| 3619 | languages, support for which will be improved based on user demand. | 
|---|
| 3620 |  | 
|---|
| 3621 | Some limited support for adding your own languages is available via the | 
|---|
| 3622 | suffix rule handling; see @ref{Suffixes}. | 
|---|
| 3623 |  | 
|---|
| 3624 |  | 
|---|
| 3625 | @node ANSI, Dependencies, Support for Other Languages, Programs | 
|---|
| 3626 | @section Automatic de-ANSI-fication | 
|---|
| 3627 |  | 
|---|
| 3628 | @cindex de-ANSI-fication, defined | 
|---|
| 3629 |  | 
|---|
| 3630 | Although the GNU standards allow the use of ANSI C, this can have the | 
|---|
| 3631 | effect of limiting portability of a package to some older compilers | 
|---|
| 3632 | (notably the SunOS C compiler). | 
|---|
| 3633 |  | 
|---|
| 3634 | Automake allows you to work around this problem on such machines by | 
|---|
| 3635 | @dfn{de-ANSI-fying} each source file before the actual compilation takes | 
|---|
| 3636 | place. | 
|---|
| 3637 |  | 
|---|
| 3638 | @vindex AUTOMAKE_OPTIONS | 
|---|
| 3639 | @opindex ansi2knr | 
|---|
| 3640 |  | 
|---|
| 3641 | If the @file{Makefile.am} variable @code{AUTOMAKE_OPTIONS} | 
|---|
| 3642 | (@pxref{Options}) contains the option @code{ansi2knr} then code to | 
|---|
| 3643 | handle de-ANSI-fication is inserted into the generated | 
|---|
| 3644 | @file{Makefile.in}. | 
|---|
| 3645 |  | 
|---|
| 3646 | This causes each C source file in the directory to be treated as ANSI C@. | 
|---|
| 3647 | If an ANSI C compiler is available, it is used.  If no ANSI C compiler | 
|---|
| 3648 | is available, the @code{ansi2knr} program is used to convert the source | 
|---|
| 3649 | files into K&R C, which is then compiled. | 
|---|
| 3650 |  | 
|---|
| 3651 | The @code{ansi2knr} program is simple-minded.  It assumes the source | 
|---|
| 3652 | code will be formatted in a particular way; see the @code{ansi2knr} man | 
|---|
| 3653 | page for details. | 
|---|
| 3654 |  | 
|---|
| 3655 | Support for de-ANSI-fication requires the source files @file{ansi2knr.c} | 
|---|
| 3656 | and @file{ansi2knr.1} to be in the same package as the ANSI C source; | 
|---|
| 3657 | these files are distributed with Automake.  Also, the package | 
|---|
| 3658 | @file{configure.in} must call the macro @code{AM_C_PROTOTYPES} | 
|---|
| 3659 | (@pxref{Macros}). | 
|---|
| 3660 | @cvindex AM_C_PROTOTYPES | 
|---|
| 3661 |  | 
|---|
| 3662 | Automake also handles finding the @code{ansi2knr} support files in some | 
|---|
| 3663 | other directory in the current package.  This is done by prepending the | 
|---|
| 3664 | relative path to the appropriate directory to the @code{ansi2knr} | 
|---|
| 3665 | option.  For instance, suppose the package has ANSI C code in the | 
|---|
| 3666 | @file{src} and @file{lib} subdirectories.  The files @file{ansi2knr.c} and | 
|---|
| 3667 | @file{ansi2knr.1} appear in @file{lib}.  Then this could appear in | 
|---|
| 3668 | @file{src/Makefile.am}: | 
|---|
| 3669 |  | 
|---|
| 3670 | @example | 
|---|
| 3671 | AUTOMAKE_OPTIONS = ../lib/ansi2knr | 
|---|
| 3672 | @end example | 
|---|
| 3673 |  | 
|---|
| 3674 | If no directory prefix is given, the files are assumed to be in the | 
|---|
| 3675 | current directory. | 
|---|
| 3676 |  | 
|---|
| 3677 | Note that automatic de-ANSI-fication will not work when the package is | 
|---|
| 3678 | being built for a different host architecture.  That is because automake | 
|---|
| 3679 | currently has no way to build @code{ansi2knr} for the build machine. | 
|---|
| 3680 |  | 
|---|
| 3681 | @c FIXME: this paragraph might be better moved to an `upgrading' section. | 
|---|
| 3682 | @cindex @code{LTLIBOBJS} and @code{ansi2knr} | 
|---|
| 3683 | @cindex @code{LIBOBJS} and @code{ansi2knr} | 
|---|
| 3684 | @cindex @code{ansi2knr} and @code{LTLIBOBJS} | 
|---|
| 3685 | @cindex @code{ansi2knr} and @code{LIBOBJS} | 
|---|
| 3686 | Using @code{LIBOBJS} with source de-ANSI-fication used to require | 
|---|
| 3687 | hand-crafted code in @file{configure} to append @code{$U} to basenames | 
|---|
| 3688 | in @code{LIBOBJS}.  This is no longer true today.  Starting with version | 
|---|
| 3689 | 2.54, Autoconf takes care of rewriting @code{LIBOBJS} and | 
|---|
| 3690 | @code{LTLIBOBJS}.  (@pxref{AC_LIBOBJ vs LIBOBJS, , @code{AC_LIBOBJ} | 
|---|
| 3691 | vs. @code{LIBOBJS}, autoconf, The Autoconf Manual}) | 
|---|
| 3692 |  | 
|---|
| 3693 | @node Dependencies, EXEEXT, ANSI, Programs | 
|---|
| 3694 | @section Automatic dependency tracking | 
|---|
| 3695 |  | 
|---|
| 3696 | As a developer it is often painful to continually update the | 
|---|
| 3697 | @file{Makefile.in} whenever the include-file dependencies change in a | 
|---|
| 3698 | project.  Automake supplies a way to automatically track dependency | 
|---|
| 3699 | changes. | 
|---|
| 3700 |  | 
|---|
| 3701 | @cindex Dependency tracking | 
|---|
| 3702 | @cindex Automatic dependency tracking | 
|---|
| 3703 |  | 
|---|
| 3704 | Automake always uses complete dependencies for a compilation, including | 
|---|
| 3705 | system headers.  Automake's model is that dependency computation should | 
|---|
| 3706 | be a side effect of the build.  To this end, dependencies are computed | 
|---|
| 3707 | by running all compilations through a special wrapper program called | 
|---|
| 3708 | @code{depcomp}.  @code{depcomp} understands how to coax many different C | 
|---|
| 3709 | and C++ compilers into generating dependency information in the format | 
|---|
| 3710 | it requires.  @code{automake -a} will install @code{depcomp} into your | 
|---|
| 3711 | source tree for you.  If @code{depcomp} can't figure out how to properly | 
|---|
| 3712 | invoke your compiler, dependency tracking will simply be disabled for | 
|---|
| 3713 | your build. | 
|---|
| 3714 |  | 
|---|
| 3715 | @cindex depcomp | 
|---|
| 3716 |  | 
|---|
| 3717 | Experience with earlier versions of Automake @footnote{See | 
|---|
| 3718 | @uref{http://sources.redhat.com/automake/dependencies.html} for more | 
|---|
| 3719 | information on the history and experiences with automatic dependency | 
|---|
| 3720 | tracking in Automake} taught us that it is not reliable to generate | 
|---|
| 3721 | dependencies only on the maintainer's system, as configurations vary too | 
|---|
| 3722 | much.  So instead Automake implements dependency tracking at build time. | 
|---|
| 3723 |  | 
|---|
| 3724 | Automatic dependency tracking can be suppressed by putting | 
|---|
| 3725 | @code{no-dependencies} in the variable @code{AUTOMAKE_OPTIONS}, or | 
|---|
| 3726 | passing @code{no-dependencies} as an argument to @code{AM_INIT_AUTOMAKE} | 
|---|
| 3727 | (this should be the preferred way).  Or, you can invoke @code{automake} | 
|---|
| 3728 | with the @code{-i} option.  Dependency tracking is enabled by default. | 
|---|
| 3729 |  | 
|---|
| 3730 | @vindex AUTOMAKE_OPTIONS | 
|---|
| 3731 | @opindex no-dependencies | 
|---|
| 3732 |  | 
|---|
| 3733 | The person building your package also can choose to disable dependency | 
|---|
| 3734 | tracking by configuring with @code{--disable-dependency-tracking}. | 
|---|
| 3735 |  | 
|---|
| 3736 | @cindex Disabling dependency tracking | 
|---|
| 3737 | @cindex Dependency tracking, disabling | 
|---|
| 3738 |  | 
|---|
| 3739 |  | 
|---|
| 3740 | @node EXEEXT,  , Dependencies, Programs | 
|---|
| 3741 | @section Support for executable extensions | 
|---|
| 3742 |  | 
|---|
| 3743 | @cindex Executable extension | 
|---|
| 3744 | @cindex Extension, executable | 
|---|
| 3745 | @cindex Windows | 
|---|
| 3746 |  | 
|---|
| 3747 | On some platforms, such as Windows, executables are expected to have an | 
|---|
| 3748 | extension such as @samp{.exe}.  On these platforms, some compilers (GCC | 
|---|
| 3749 | among them) will automatically generate @file{foo.exe} when asked to | 
|---|
| 3750 | generate @file{foo}. | 
|---|
| 3751 |  | 
|---|
| 3752 | Automake provides mostly-transparent support for this.  Unfortunately | 
|---|
| 3753 | @emph{mostly} doesn't yet mean @emph{fully}.  Until the English | 
|---|
| 3754 | dictionary is revised, you will have to assist Automake if your package | 
|---|
| 3755 | must support those platforms. | 
|---|
| 3756 |  | 
|---|
| 3757 | One thing you must be aware of is that, internally, Automake rewrites | 
|---|
| 3758 | something like this: | 
|---|
| 3759 |  | 
|---|
| 3760 | @example | 
|---|
| 3761 | bin_PROGRAMS = liver | 
|---|
| 3762 | @end example | 
|---|
| 3763 |  | 
|---|
| 3764 | to this: | 
|---|
| 3765 |  | 
|---|
| 3766 | @example | 
|---|
| 3767 | bin_PROGRAMS = liver$(EXEEXT) | 
|---|
| 3768 | @end example | 
|---|
| 3769 |  | 
|---|
| 3770 | The targets Automake generates are likewise given the @samp{$(EXEEXT)} | 
|---|
| 3771 | extension.  @code{EXEEXT} | 
|---|
| 3772 |  | 
|---|
| 3773 | However, Automake cannot apply this rewriting to @code{configure} | 
|---|
| 3774 | substitutions.  This means that if you are conditionally building a | 
|---|
| 3775 | program using such a substitution, then your @file{configure.in} must | 
|---|
| 3776 | take care to add @samp{$(EXEEXT)} when constructing the output variable. | 
|---|
| 3777 |  | 
|---|
| 3778 | With Autoconf 2.13 and earlier, you must explicitly use @code{AC_EXEEXT} | 
|---|
| 3779 | to get this support.  With Autoconf 2.50, @code{AC_EXEEXT} is run | 
|---|
| 3780 | automatically if you configure a compiler (say, through | 
|---|
| 3781 | @code{AC_PROG_CC}). | 
|---|
| 3782 |  | 
|---|
| 3783 | Sometimes maintainers like to write an explicit link rule for their | 
|---|
| 3784 | program.  Without executable extension support, this is easy---you | 
|---|
| 3785 | simply write a target with the same name as the program.  However, when | 
|---|
| 3786 | executable extension support is enabled, you must instead add the | 
|---|
| 3787 | @samp{$(EXEEXT)} suffix. | 
|---|
| 3788 |  | 
|---|
| 3789 | Unfortunately, due to the change in Autoconf 2.50, this means you must | 
|---|
| 3790 | always add this extension.  However, this is a problem for maintainers | 
|---|
| 3791 | who know their package will never run on a platform that has executable | 
|---|
| 3792 | extensions.  For those maintainers, the @code{no-exeext} option | 
|---|
| 3793 | (@pxref{Options}) will disable this feature.  This works in a fairly | 
|---|
| 3794 | ugly way; if @code{no-exeext} is seen, then the presence of a target | 
|---|
| 3795 | named @code{foo} in @file{Makefile.am} will override an | 
|---|
| 3796 | automake-generated target of the form @code{foo$(EXEEXT)}.  Without the | 
|---|
| 3797 | @code{no-exeext} option, this use will give an error. | 
|---|
| 3798 |  | 
|---|
| 3799 |  | 
|---|
| 3800 | @node Other objects, Other GNU Tools, Programs, Top | 
|---|
| 3801 | @chapter Other Derived Objects | 
|---|
| 3802 |  | 
|---|
| 3803 | Automake can handle derived objects which are not C programs.  Sometimes | 
|---|
| 3804 | the support for actually building such objects must be explicitly | 
|---|
| 3805 | supplied, but Automake will still automatically handle installation and | 
|---|
| 3806 | distribution. | 
|---|
| 3807 |  | 
|---|
| 3808 | @menu | 
|---|
| 3809 | * Scripts::                     Executable scripts | 
|---|
| 3810 | * Headers::                     Header files | 
|---|
| 3811 | * Data::                        Architecture-independent data files | 
|---|
| 3812 | * Sources::                     Derived sources | 
|---|
| 3813 | @end menu | 
|---|
| 3814 |  | 
|---|
| 3815 |  | 
|---|
| 3816 | @node Scripts, Headers, Other objects, Other objects | 
|---|
| 3817 | @section Executable Scripts | 
|---|
| 3818 |  | 
|---|
| 3819 | @cindex _SCRIPTS primary, defined | 
|---|
| 3820 | @cindex SCRIPTS primary, defined | 
|---|
| 3821 | @cindex Primary variable, SCRIPTS | 
|---|
| 3822 |  | 
|---|
| 3823 | It is possible to define and install programs which are scripts.  Such | 
|---|
| 3824 | programs are listed using the @samp{SCRIPTS} primary name.  Automake | 
|---|
| 3825 | doesn't define any dependencies for scripts; the @file{Makefile.am} | 
|---|
| 3826 | should include the appropriate rules. | 
|---|
| 3827 | @vindex SCRIPTS | 
|---|
| 3828 |  | 
|---|
| 3829 | Automake does not assume that scripts are derived objects; such objects | 
|---|
| 3830 | must be deleted by hand (@pxref{Clean}). | 
|---|
| 3831 |  | 
|---|
| 3832 | The @code{automake} program itself is a Perl script that is generated at | 
|---|
| 3833 | configure time from @file{automake.in}.  Here is how this is handled: | 
|---|
| 3834 |  | 
|---|
| 3835 | @example | 
|---|
| 3836 | bin_SCRIPTS = automake | 
|---|
| 3837 | @end example | 
|---|
| 3838 |  | 
|---|
| 3839 | Since @code{automake} appears in the @code{AC_OUTPUT} macro, a target | 
|---|
| 3840 | for it is automatically generated, and it is also automatically cleaned | 
|---|
| 3841 | (despite the fact it's a script). | 
|---|
| 3842 |  | 
|---|
| 3843 | @cindex SCRIPTS, installation directories | 
|---|
| 3844 | @cindex Installing scripts | 
|---|
| 3845 |  | 
|---|
| 3846 | @vindex bin_SCRIPTS | 
|---|
| 3847 | @vindex sbin_SCRIPTS | 
|---|
| 3848 | @vindex libexec_SCRIPTS | 
|---|
| 3849 | @vindex pkgdata_SCRIPTS | 
|---|
| 3850 | @vindex noinst_SCRIPTS | 
|---|
| 3851 | @vindex check_SCRIPTS | 
|---|
| 3852 |  | 
|---|
| 3853 | Script objects can be installed in @code{bindir}, @code{sbindir}, | 
|---|
| 3854 | @code{libexecdir}, or @code{pkgdatadir}. | 
|---|
| 3855 |  | 
|---|
| 3856 | Scripts that need not being installed can be listed in | 
|---|
| 3857 | @code{noinst_SCRIPTS}, and among them, those which are needed only by | 
|---|
| 3858 | @code{make check} should go in @code{check_SCRIPTS}. | 
|---|
| 3859 |  | 
|---|
| 3860 |  | 
|---|
| 3861 | @node Headers, Data, Scripts, Other objects | 
|---|
| 3862 | @section Header files | 
|---|
| 3863 |  | 
|---|
| 3864 | @cindex _HEADERS primary, defined | 
|---|
| 3865 | @cindex HEADERS primary, defined | 
|---|
| 3866 | @cindex Primary variable, HEADERS | 
|---|
| 3867 |  | 
|---|
| 3868 | @vindex noinst_HEADERS | 
|---|
| 3869 |  | 
|---|
| 3870 | Header files are specified by the @samp{HEADERS} family of variables. | 
|---|
| 3871 | Generally header files are not installed, so the @code{noinst_HEADERS} | 
|---|
| 3872 | variable will be the most used.  @footnote{However, for the case of a | 
|---|
| 3873 | non-installed header file that is actually used by a particular program, | 
|---|
| 3874 | we recommend listing it in the program's @samp{_SOURCES} variable | 
|---|
| 3875 | instead of in @code{noinst_HEADERS}.  We believe this is more clear.} | 
|---|
| 3876 | @vindex HEADERS | 
|---|
| 3877 |  | 
|---|
| 3878 | All header files must be listed somewhere; missing ones will not appear | 
|---|
| 3879 | in the distribution.  Often it is clearest to list uninstalled headers | 
|---|
| 3880 | with the rest of the sources for a program.  @xref{A Program}.  Headers | 
|---|
| 3881 | listed in a @samp{_SOURCES} variable need not be listed in any | 
|---|
| 3882 | @samp{_HEADERS} variable. | 
|---|
| 3883 |  | 
|---|
| 3884 | @cindex HEADERS, installation directories | 
|---|
| 3885 | @cindex Installing headers | 
|---|
| 3886 |  | 
|---|
| 3887 | @vindex include_HEADERS | 
|---|
| 3888 | @vindex oldinclude_HEADERS | 
|---|
| 3889 | @vindex pkginclude_HEADERS | 
|---|
| 3890 |  | 
|---|
| 3891 | Headers can be installed in @code{includedir}, @code{oldincludedir}, or | 
|---|
| 3892 | @code{pkgincludedir}. | 
|---|
| 3893 |  | 
|---|
| 3894 |  | 
|---|
| 3895 | @node Data, Sources, Headers, Other objects | 
|---|
| 3896 | @section Architecture-independent data files | 
|---|
| 3897 |  | 
|---|
| 3898 | @cindex _DATA primary, defined | 
|---|
| 3899 | @cindex DATA primary, defined | 
|---|
| 3900 | @cindex Primary variable, DATA | 
|---|
| 3901 |  | 
|---|
| 3902 | Automake supports the installation of miscellaneous data files using the | 
|---|
| 3903 | @samp{DATA} family of variables. | 
|---|
| 3904 | @vindex DATA | 
|---|
| 3905 |  | 
|---|
| 3906 | @vindex data_DATA | 
|---|
| 3907 | @vindex sysconf_DATA | 
|---|
| 3908 | @vindex sharedstate_DATA | 
|---|
| 3909 | @vindex localstate_DATA | 
|---|
| 3910 | @vindex pkgdata_DATA | 
|---|
| 3911 |  | 
|---|
| 3912 | Such data can be installed in the directories @code{datadir}, | 
|---|
| 3913 | @code{sysconfdir}, @code{sharedstatedir}, @code{localstatedir}, or | 
|---|
| 3914 | @code{pkgdatadir}. | 
|---|
| 3915 |  | 
|---|
| 3916 | By default, data files are @emph{not} included in a distribution.  Of | 
|---|
| 3917 | course, you can use the @samp{dist_} prefix to change this on a | 
|---|
| 3918 | per-variable basis. | 
|---|
| 3919 |  | 
|---|
| 3920 | Here is how Automake declares its auxiliary data files: | 
|---|
| 3921 |  | 
|---|
| 3922 | @example | 
|---|
| 3923 | dist_pkgdata_DATA = clean-kr.am clean.am @dots{} | 
|---|
| 3924 | @end example | 
|---|
| 3925 |  | 
|---|
| 3926 |  | 
|---|
| 3927 | @node Sources,  , Data, Other objects | 
|---|
| 3928 | @section Built sources | 
|---|
| 3929 |  | 
|---|
| 3930 | Because Automake's automatic dependency tracking works as a side-effect | 
|---|
| 3931 | of compilation (@pxref{Dependencies}) there is a bootstrap issue: a | 
|---|
| 3932 | target should not be compiled before its dependencies are made, but | 
|---|
| 3933 | these dependencies are unknown until the target is first compiled. | 
|---|
| 3934 |  | 
|---|
| 3935 | Ordinarily this is not a problem, because dependencies are distributed | 
|---|
| 3936 | sources: they preexist and do not need to be built.  Suppose that | 
|---|
| 3937 | @file{foo.c} includes @file{foo.h}.  When it first compiles | 
|---|
| 3938 | @file{foo.o}, @command{make} only knows that @file{foo.o} depends on | 
|---|
| 3939 | @file{foo.c}.  As a side-effect of this compilation @code{depcomp} | 
|---|
| 3940 | records the @file{foo.h} dependency so that following invocations of | 
|---|
| 3941 | @command{make} will honor it.  In these conditions, it's clear there is | 
|---|
| 3942 | no problem: either @file{foo.o} doesn't exist and has to be built | 
|---|
| 3943 | (regardless of the dependencies), either accurate dependencies exist and | 
|---|
| 3944 | they can be used to decide whether @file{foo.o} should be rebuilt. | 
|---|
| 3945 |  | 
|---|
| 3946 | It's a different story if @file{foo.h} doesn't exist by the first | 
|---|
| 3947 | @command{make} run.  For instance there might be a rule to build | 
|---|
| 3948 | @file{foo.h}.  This time @file{file.o}'s build will fail because the | 
|---|
| 3949 | compiler can't find @file{foo.h}. @command{make} failed to trigger the | 
|---|
| 3950 | rule to build @file{foo.h} first by lack of dependency information. | 
|---|
| 3951 |  | 
|---|
| 3952 | @vindex BUILT_SOURCES | 
|---|
| 3953 | @cindex BUILT_SOURCES, defined | 
|---|
| 3954 |  | 
|---|
| 3955 | The @code{BUILT_SOURCES} variable is a workaround for this problem.  A | 
|---|
| 3956 | source file listed in @code{BUILT_SOURCES} is made on @code{make all} | 
|---|
| 3957 | or @code{make check} (or even @code{make install}) before other | 
|---|
| 3958 | targets are processed.  However, such a source file is not | 
|---|
| 3959 | @emph{compiled} unless explicitly requested by mentioning it in some | 
|---|
| 3960 | other @samp{_SOURCES} variable. | 
|---|
| 3961 |  | 
|---|
| 3962 | So, to conclude our introductory example, we could use | 
|---|
| 3963 | @code{BUILT_SOURCES = foo.h} to ensure @file{foo.h} gets built before | 
|---|
| 3964 | any other target (including @file{foo.o}) during @code{make all} or | 
|---|
| 3965 | @code{make check}. | 
|---|
| 3966 |  | 
|---|
| 3967 | @code{BUILT_SOURCES} is actually a bit of a misnomer, as any file which | 
|---|
| 3968 | must be created early in the build process can be listed in this | 
|---|
| 3969 | variable.  Moreover, all built sources do not necessarily have to be | 
|---|
| 3970 | listed in @code{BUILT_SOURCES}.  For instance a generated @file{.c} file | 
|---|
| 3971 | doesn't need to appear in @code{BUILT_SOURCES} (unless it is included by | 
|---|
| 3972 | another source), because it's a known dependency of the associated | 
|---|
| 3973 | object. | 
|---|
| 3974 |  | 
|---|
| 3975 | It might be important to emphasize that @code{BUILT_SOURCES} is | 
|---|
| 3976 | honored only by @code{make all}, @code{make check} and @code{make | 
|---|
| 3977 | install}.  This means you cannot build a specific target (e.g., | 
|---|
| 3978 | @code{make foo}) in a clean tree if it depends on a built source. | 
|---|
| 3979 | However it will succeed if you have run @code{make all} earlier, | 
|---|
| 3980 | because accurate dependencies are already available. | 
|---|
| 3981 |  | 
|---|
| 3982 | The next section illustrates and discusses the handling of built sources | 
|---|
| 3983 | on a toy example. | 
|---|
| 3984 |  | 
|---|
| 3985 | @menu | 
|---|
| 3986 | * Built sources example::       Several ways to handle built sources. | 
|---|
| 3987 | @end menu | 
|---|
| 3988 |  | 
|---|
| 3989 | @node Built sources example,  , Sources, Sources | 
|---|
| 3990 | @subsection Built sources example | 
|---|
| 3991 |  | 
|---|
| 3992 | Suppose that @file{foo.c} includes @file{bindir.h}, which is | 
|---|
| 3993 | installation-dependent and not distributed: it needs to be built.  Here | 
|---|
| 3994 | @file{bindir.h} defines the preprocessor macro @code{bindir} to the | 
|---|
| 3995 | value of the @command{make} variable @code{bindir} (inherited from | 
|---|
| 3996 | @file{configure}). | 
|---|
| 3997 |  | 
|---|
| 3998 | We suggest several implementations below.  It's not meant to be an | 
|---|
| 3999 | exhaustive listing of all ways to handle built sources, but it will give | 
|---|
| 4000 | you a few ideas if you encounter this issue. | 
|---|
| 4001 |  | 
|---|
| 4002 | @unnumberedsubsec First try | 
|---|
| 4003 |  | 
|---|
| 4004 | This first implementation will illustrate the bootstrap issue mentioned | 
|---|
| 4005 | in the previous section (@pxref{Sources}). | 
|---|
| 4006 |  | 
|---|
| 4007 | Here is a tentative @file{Makefile.am}. | 
|---|
| 4008 |  | 
|---|
| 4009 | @example | 
|---|
| 4010 | # This won't work. | 
|---|
| 4011 | bin_PROGRAMS = foo | 
|---|
| 4012 | foo_SOURCES = foo.c | 
|---|
| 4013 | nodist_foo_SOURCES = bindir.h | 
|---|
| 4014 | CLEANFILES = bindir.h | 
|---|
| 4015 | bindir.h: Makefile | 
|---|
| 4016 | echo '#define bindir "$(bindir)"' >$@@ | 
|---|
| 4017 | @end example | 
|---|
| 4018 |  | 
|---|
| 4019 | This setup doesn't work, because Automake doesn't know that @file{foo.c} | 
|---|
| 4020 | includes @file{bindir.h}.  Remember, automatic dependency tracking works | 
|---|
| 4021 | as a side-effect of compilation, so the dependencies of @file{foo.o} will | 
|---|
| 4022 | be known only after @file{foo.o} has been compiled (@pxref{Dependencies}). | 
|---|
| 4023 | The symptom is as follows. | 
|---|
| 4024 |  | 
|---|
| 4025 | @example | 
|---|
| 4026 | % make | 
|---|
| 4027 | source='foo.c' object='foo.o' libtool=no \ | 
|---|
| 4028 | depfile='.deps/foo.Po' tmpdepfile='.deps/foo.TPo' \ | 
|---|
| 4029 | depmode=gcc /bin/sh ./depcomp \ | 
|---|
| 4030 | gcc -I. -I. -g -O2 -c `test -f 'foo.c' || echo './'`foo.c | 
|---|
| 4031 | foo.c:2: bindir.h: No such file or directory | 
|---|
| 4032 | make: *** [foo.o] Error 1 | 
|---|
| 4033 | @end example | 
|---|
| 4034 |  | 
|---|
| 4035 | @unnumberedsubsec Using @code{BUILT_SOURCES} | 
|---|
| 4036 |  | 
|---|
| 4037 | A solution is to require @file{bindir.h} to be built before anything | 
|---|
| 4038 | else.  This is what @code{BUILT_SOURCES} is meant for (@pxref{Sources}). | 
|---|
| 4039 |  | 
|---|
| 4040 | @example | 
|---|
| 4041 | bin_PROGRAMS = foo | 
|---|
| 4042 | foo_SOURCES = foo.c | 
|---|
| 4043 | BUILT_SOURCES = bindir.h | 
|---|
| 4044 | CLEANFILES = bindir.h | 
|---|
| 4045 | bindir.h: Makefile | 
|---|
| 4046 | echo '#define bindir "$(bindir)"' >$@@ | 
|---|
| 4047 | @end example | 
|---|
| 4048 |  | 
|---|
| 4049 | See how @file{bindir.h} get built first: | 
|---|
| 4050 |  | 
|---|
| 4051 | @example | 
|---|
| 4052 | % make | 
|---|
| 4053 | echo '#define bindir "/usr/local/bin"' >bindir.h | 
|---|
| 4054 | make  all-am | 
|---|
| 4055 | make[1]: Entering directory `/home/adl/tmp' | 
|---|
| 4056 | source='foo.c' object='foo.o' libtool=no \ | 
|---|
| 4057 | depfile='.deps/foo.Po' tmpdepfile='.deps/foo.TPo' \ | 
|---|
| 4058 | depmode=gcc /bin/sh ./depcomp \ | 
|---|
| 4059 | gcc -I. -I. -g -O2 -c `test -f 'foo.c' || echo './'`foo.c | 
|---|
| 4060 | gcc  -g -O2   -o foo  foo.o | 
|---|
| 4061 | make[1]: Leaving directory `/home/adl/tmp' | 
|---|
| 4062 | @end example | 
|---|
| 4063 |  | 
|---|
| 4064 | However, as said earlier, @code{BUILT_SOURCES} applies only to the | 
|---|
| 4065 | @code{all}, @code{check}, and @code{install} targets.  It still fails | 
|---|
| 4066 | if you try to run @code{make foo} explicitly: | 
|---|
| 4067 |  | 
|---|
| 4068 | @example | 
|---|
| 4069 | % make clean | 
|---|
| 4070 | test -z "bindir.h" || rm -f bindir.h | 
|---|
| 4071 | test -z "foo" || rm -f foo | 
|---|
| 4072 | rm -f *.o core *.core | 
|---|
| 4073 | % : > .deps/foo.Po # Suppress previously recorded dependencies | 
|---|
| 4074 | % make foo | 
|---|
| 4075 | source='foo.c' object='foo.o' libtool=no \ | 
|---|
| 4076 | depfile='.deps/foo.Po' tmpdepfile='.deps/foo.TPo' \ | 
|---|
| 4077 | depmode=gcc /bin/sh ./depcomp \ | 
|---|
| 4078 | gcc -I. -I. -g -O2 -c `test -f 'foo.c' || echo './'`foo.c | 
|---|
| 4079 | foo.c:2: bindir.h: No such file or directory | 
|---|
| 4080 | make: *** [foo.o] Error 1 | 
|---|
| 4081 | @end example | 
|---|
| 4082 |  | 
|---|
| 4083 | @unnumberedsubsec Recording dependencies manually | 
|---|
| 4084 |  | 
|---|
| 4085 | Usually people are happy enough with @code{BUILT_SOURCES} because they | 
|---|
| 4086 | never run targets such as @code{make foo} before @code{make all}, as in | 
|---|
| 4087 | the previous example.  However if this matters to you, you can avoid | 
|---|
| 4088 | @code{BUILT_SOURCES} and record such dependencies explicitly in the | 
|---|
| 4089 | @file{Makefile.am}. | 
|---|
| 4090 |  | 
|---|
| 4091 | @example | 
|---|
| 4092 | bin_PROGRAMS = foo | 
|---|
| 4093 | foo_SOURCES = foo.c | 
|---|
| 4094 | foo.$(OBJEXT): bindir.h | 
|---|
| 4095 | CLEANFILES = bindir.h | 
|---|
| 4096 | bindir.h: Makefile | 
|---|
| 4097 | echo '#define bindir "$(bindir)"' >$@@ | 
|---|
| 4098 | @end example | 
|---|
| 4099 |  | 
|---|
| 4100 | You don't have to list @emph{all} the dependencies of @code{foo.o} | 
|---|
| 4101 | explicitly, only those which might need to be built.  If a dependency | 
|---|
| 4102 | already exists, it will not hinder the first compilation and will be | 
|---|
| 4103 | recorded by the normal dependency tracking code.  (Note that after this | 
|---|
| 4104 | first compilation the dependency tracking code will also have recorded | 
|---|
| 4105 | the dependency between @code{foo.o} and @code{bindir.h}; so our explicit | 
|---|
| 4106 | dependency is really useful to the first build only.) | 
|---|
| 4107 |  | 
|---|
| 4108 | Adding explicit dependencies like this can be a bit dangerous if you are | 
|---|
| 4109 | not careful enough.  This is due to the way Automake tries not to | 
|---|
| 4110 | overwrite your rules (it assumes you know better than it). | 
|---|
| 4111 | @code{foo.$(OBJEXT): bindir.h} supersedes any rule Automake may want to | 
|---|
| 4112 | output to build @code{foo.$(OBJEXT)}.  It happens to work in this case | 
|---|
| 4113 | because Automake doesn't have to output any @code{foo.$(OBJEXT):} | 
|---|
| 4114 | target: it relies on a suffix rule instead (i.e., @code{.c.$(OBJEXT):}). | 
|---|
| 4115 | Always check the generated @file{Makefile.in} if you do this. | 
|---|
| 4116 |  | 
|---|
| 4117 | @unnumberedsubsec Build @file{bindir.h} from @file{configure} | 
|---|
| 4118 |  | 
|---|
| 4119 | It's possible to define this preprocessor macro from @file{configure}, | 
|---|
| 4120 | either in @file{config.h} (@pxref{Defining Directories, , Defining | 
|---|
| 4121 | Directories, autoconf, The Autoconf Manual}), or by processing a | 
|---|
| 4122 | @file{bindir.h.in} file using @code{AC_CONFIG_FILES} | 
|---|
| 4123 | (@pxref{Configuration Actions, ,Configuration Actions, autoconf, The | 
|---|
| 4124 | Autoconf Manual}). | 
|---|
| 4125 |  | 
|---|
| 4126 | At this point it should be clear that building @file{bindir.h} from | 
|---|
| 4127 | @file{configure} work well for this example.  @file{bindir.h} will exist | 
|---|
| 4128 | before you build any target, hence will not cause any dependency issue. | 
|---|
| 4129 |  | 
|---|
| 4130 | The Makefile can be shrunk as follows.  We do not even have to mention | 
|---|
| 4131 | @file{bindir.h}. | 
|---|
| 4132 |  | 
|---|
| 4133 | @example | 
|---|
| 4134 | bin_PROGRAMS = foo | 
|---|
| 4135 | foo_SOURCES = foo.c | 
|---|
| 4136 | @end example | 
|---|
| 4137 |  | 
|---|
| 4138 | However, it's not always possible to build sources from | 
|---|
| 4139 | @file{configure}, especially when these sources are generated by a tool | 
|---|
| 4140 | that needs to be built first... | 
|---|
| 4141 |  | 
|---|
| 4142 | @unnumberedsubsec Build @file{bindir.c}, not @file{bindir.h}. | 
|---|
| 4143 |  | 
|---|
| 4144 | Another attractive idea is to define @code{bindir} as a variable or | 
|---|
| 4145 | function exported from @file{bindir.o}, and build @file{bindir.c} | 
|---|
| 4146 | instead of @file{bindir.h}. | 
|---|
| 4147 |  | 
|---|
| 4148 | @example | 
|---|
| 4149 | noinst_PROGRAMS = foo | 
|---|
| 4150 | foo_SOURCES = foo.c bindir.h | 
|---|
| 4151 | nodist_foo_SOURCES = bindir.c | 
|---|
| 4152 | CLEANFILES = bindir.c | 
|---|
| 4153 | bindir.c: Makefile | 
|---|
| 4154 | echo 'const char bindir[] = "$(bindir)";' >$@ | 
|---|
| 4155 | @end example | 
|---|
| 4156 |  | 
|---|
| 4157 | @file{bindir.h} contains just the variable's declaration and doesn't | 
|---|
| 4158 | need to be built, so it won't cause any trouble.  @file{bindir.o} is | 
|---|
| 4159 | always dependent on @file{bindir.c}, so @file{bindir.c} will get built | 
|---|
| 4160 | first. | 
|---|
| 4161 |  | 
|---|
| 4162 | @unnumberedsubsec Which is best? | 
|---|
| 4163 |  | 
|---|
| 4164 | There is no panacea, of course.  Each solution has its merits and | 
|---|
| 4165 | drawbacks. | 
|---|
| 4166 |  | 
|---|
| 4167 | You cannot use @code{BUILT_SOURCES} if the ability to run @code{make | 
|---|
| 4168 | foo} on a clean tree is important to you. | 
|---|
| 4169 |  | 
|---|
| 4170 | You won't add explicit dependencies if you are leery of overriding | 
|---|
| 4171 | an Automake target by mistake. | 
|---|
| 4172 |  | 
|---|
| 4173 | Building files from @file{./configure} is not always possible, neither | 
|---|
| 4174 | is converting @file{.h} files into @file{.c} files. | 
|---|
| 4175 |  | 
|---|
| 4176 |  | 
|---|
| 4177 | @node Other GNU Tools, Documentation, Other objects, Top | 
|---|
| 4178 | @chapter Other GNU Tools | 
|---|
| 4179 |  | 
|---|
| 4180 | Since Automake is primarily intended to generate @file{Makefile.in}s for | 
|---|
| 4181 | use in GNU programs, it tries hard to interoperate with other GNU tools. | 
|---|
| 4182 |  | 
|---|
| 4183 | @menu | 
|---|
| 4184 | * Emacs Lisp::                  Emacs Lisp | 
|---|
| 4185 | * gettext::                     Gettext | 
|---|
| 4186 | * Libtool::                     Libtool | 
|---|
| 4187 | * Java::                        Java | 
|---|
| 4188 | * Python::                      Python | 
|---|
| 4189 | @end menu | 
|---|
| 4190 |  | 
|---|
| 4191 |  | 
|---|
| 4192 | @node Emacs Lisp, gettext, Other GNU Tools, Other GNU Tools | 
|---|
| 4193 | @section Emacs Lisp | 
|---|
| 4194 |  | 
|---|
| 4195 | @cindex _LISP primary, defined | 
|---|
| 4196 | @cindex LISP primary, defined | 
|---|
| 4197 | @cindex Primary variable, LISP | 
|---|
| 4198 |  | 
|---|
| 4199 | @vindex LISP | 
|---|
| 4200 | @vindex lisp_LISP | 
|---|
| 4201 | @vindex noinst_LISP | 
|---|
| 4202 |  | 
|---|
| 4203 | Automake provides some support for Emacs Lisp.  The @samp{LISP} primary | 
|---|
| 4204 | is used to hold a list of @file{.el} files.  Possible prefixes for this | 
|---|
| 4205 | primary are @samp{lisp_} and @samp{noinst_}.  Note that if | 
|---|
| 4206 | @code{lisp_LISP} is defined, then @file{configure.in} must run | 
|---|
| 4207 | @code{AM_PATH_LISPDIR} (@pxref{Macros}). | 
|---|
| 4208 |  | 
|---|
| 4209 | @vindex ELCFILES | 
|---|
| 4210 |  | 
|---|
| 4211 | By default Automake will byte-compile all Emacs Lisp source files using | 
|---|
| 4212 | the Emacs found by @code{AM_PATH_LISPDIR}.  If you wish to avoid | 
|---|
| 4213 | byte-compiling, simply define the variable @code{ELCFILES} to be empty. | 
|---|
| 4214 | Byte-compiled Emacs Lisp files are not portable among all versions of | 
|---|
| 4215 | Emacs, so it makes sense to turn this off if you expect sites to have | 
|---|
| 4216 | more than one version of Emacs installed.  Furthermore, many packages | 
|---|
| 4217 | don't actually benefit from byte-compilation.  Still, we recommend that | 
|---|
| 4218 | you leave it enabled by default.  It is probably better for sites with | 
|---|
| 4219 | strange setups to cope for themselves than to make the installation less | 
|---|
| 4220 | nice for everybody else. | 
|---|
| 4221 |  | 
|---|
| 4222 | @vindex dist_lisp_LISP | 
|---|
| 4223 | @vindex dist_noinst_LISP | 
|---|
| 4224 | Lisp sources are not distributed by default.  You can prefix the | 
|---|
| 4225 | @code{LISP} primary with @code{dist_}, as in @code{dist_lisp_LISP} or | 
|---|
| 4226 | @code{dist_noinst_LISP}, to indicate that these files should be | 
|---|
| 4227 | distributed. | 
|---|
| 4228 |  | 
|---|
| 4229 | @node gettext, Libtool, Emacs Lisp, Other GNU Tools | 
|---|
| 4230 | @section Gettext | 
|---|
| 4231 |  | 
|---|
| 4232 | @cindex GNU Gettext support | 
|---|
| 4233 | @cindex Gettext support | 
|---|
| 4234 | @cindex Support for GNU Gettext | 
|---|
| 4235 |  | 
|---|
| 4236 | If @code{AM_GNU_GETTEXT} is seen in @file{configure.in}, then Automake | 
|---|
| 4237 | turns on support for GNU gettext, a message catalog system for | 
|---|
| 4238 | internationalization | 
|---|
| 4239 | (@pxref{GNU Gettext, , , gettext, GNU gettext utilities}). | 
|---|
| 4240 |  | 
|---|
| 4241 | The @code{gettext} support in Automake requires the addition of two | 
|---|
| 4242 | subdirectories to the package, @file{intl} and @file{po}.  Automake | 
|---|
| 4243 | insures that these directories exist and are mentioned in | 
|---|
| 4244 | @code{SUBDIRS}. | 
|---|
| 4245 |  | 
|---|
| 4246 |  | 
|---|
| 4247 | @node Libtool, Java, gettext, Other GNU Tools | 
|---|
| 4248 | @section Libtool | 
|---|
| 4249 |  | 
|---|
| 4250 | Automake provides support for GNU Libtool (@pxref{Top, , Introduction, | 
|---|
| 4251 | libtool, The Libtool Manual}) with the @samp{LTLIBRARIES} primary. | 
|---|
| 4252 | @xref{A Shared Library}. | 
|---|
| 4253 |  | 
|---|
| 4254 |  | 
|---|
| 4255 | @node Java, Python, Libtool, Other GNU Tools | 
|---|
| 4256 | @section Java | 
|---|
| 4257 |  | 
|---|
| 4258 | @cindex _JAVA primary, defined | 
|---|
| 4259 | @cindex JAVA primary, defined | 
|---|
| 4260 | @cindex Primary variable, JAVA | 
|---|
| 4261 |  | 
|---|
| 4262 | Automake provides some minimal support for Java compilation with the | 
|---|
| 4263 | @samp{JAVA} primary. | 
|---|
| 4264 |  | 
|---|
| 4265 | Any @file{.java} files listed in a @samp{_JAVA} variable will be | 
|---|
| 4266 | compiled with @code{JAVAC} at build time.  By default, @file{.class} | 
|---|
| 4267 | files are not included in the distribution. | 
|---|
| 4268 |  | 
|---|
| 4269 | @cindex JAVA restrictions | 
|---|
| 4270 | @cindex Restrictions for JAVA | 
|---|
| 4271 |  | 
|---|
| 4272 | Currently Automake enforces the restriction that only one @samp{_JAVA} | 
|---|
| 4273 | primary can be used in a given @file{Makefile.am}.  The reason for this | 
|---|
| 4274 | restriction is that, in general, it isn't possible to know which | 
|---|
| 4275 | @file{.class} files were generated from which @file{.java} files -- so | 
|---|
| 4276 | it would be impossible to know which files to install where.  For | 
|---|
| 4277 | instance, a @file{.java} file can define multiple classes; the resulting | 
|---|
| 4278 | @file{.class} file names cannot be predicted without parsing the | 
|---|
| 4279 | @file{.java} file. | 
|---|
| 4280 |  | 
|---|
| 4281 | There are a few variables which are used when compiling Java sources: | 
|---|
| 4282 |  | 
|---|
| 4283 | @vtable @code | 
|---|
| 4284 | @item JAVAC | 
|---|
| 4285 | The name of the Java compiler.  This defaults to @samp{javac}. | 
|---|
| 4286 |  | 
|---|
| 4287 | @item JAVACFLAGS | 
|---|
| 4288 | The flags to pass to the compiler.  This is considered to be a user | 
|---|
| 4289 | variable (@pxref{User Variables}). | 
|---|
| 4290 |  | 
|---|
| 4291 | @item AM_JAVACFLAGS | 
|---|
| 4292 | More flags to pass to the Java compiler.  This, and not | 
|---|
| 4293 | @code{JAVACFLAGS}, should be used when it is necessary to put Java | 
|---|
| 4294 | compiler flags into @file{Makefile.am}. | 
|---|
| 4295 |  | 
|---|
| 4296 | @item JAVAROOT | 
|---|
| 4297 | The value of this variable is passed to the @samp{-d} option to | 
|---|
| 4298 | @code{javac}.  It defaults to @samp{$(top_builddir)}. | 
|---|
| 4299 |  | 
|---|
| 4300 | @item CLASSPATH_ENV | 
|---|
| 4301 | This variable is an @code{sh} expression which is used to set the | 
|---|
| 4302 | @code{CLASSPATH} environment variable on the @code{javac} command line. | 
|---|
| 4303 | (In the future we will probably handle class path setting differently.) | 
|---|
| 4304 | @end vtable | 
|---|
| 4305 |  | 
|---|
| 4306 |  | 
|---|
| 4307 | @node Python,  , Java, Other GNU Tools | 
|---|
| 4308 | @section Python | 
|---|
| 4309 |  | 
|---|
| 4310 | @cindex _PYTHON primary, defined | 
|---|
| 4311 | @cindex PYTHON primary, defined | 
|---|
| 4312 | @cindex Primary variable, PYTHON | 
|---|
| 4313 |  | 
|---|
| 4314 |  | 
|---|
| 4315 | Automake provides support for Python compilation with the @samp{PYTHON} | 
|---|
| 4316 | primary. | 
|---|
| 4317 |  | 
|---|
| 4318 | Any files listed in a @samp{_PYTHON} variable will be byte-compiled with | 
|---|
| 4319 | @code{py-compile} at install time.  @code{py-compile} actually creates | 
|---|
| 4320 | both standard (@file{.pyc}) and byte-compiled (@file{.pyo}) versions of | 
|---|
| 4321 | the source files.  Note that because byte-compilation occurs at install | 
|---|
| 4322 | time, any files listed in @samp{noinst_PYTHON} will not be compiled. | 
|---|
| 4323 | Python source files are included in the distribution by default. | 
|---|
| 4324 |  | 
|---|
| 4325 | Automake ships with an Autoconf macro called @code{AM_PATH_PYTHON} which | 
|---|
| 4326 | will determine some Python-related directory variables (see below).  If | 
|---|
| 4327 | you have called @code{AM_PATH_PYTHON} from @file{configure.in}, then you | 
|---|
| 4328 | may use the following variables to list you Python source files in your | 
|---|
| 4329 | variables: @samp{python_PYTHON}, @samp{pkgpython_PYTHON}, | 
|---|
| 4330 | @samp{pyexecdir_PYTHON}, @samp{pkgpyexecdir_PYTHON}, depending where you | 
|---|
| 4331 | want your files installed. | 
|---|
| 4332 |  | 
|---|
| 4333 | @code{AM_PATH_PYTHON} takes a single optional argument.  This argument, | 
|---|
| 4334 | if present, is the minimum version of Python which can be used for this | 
|---|
| 4335 | package.  If the version of Python found on the system is older than the | 
|---|
| 4336 | required version, then @code{AM_PATH_PYTHON} will cause an error. | 
|---|
| 4337 |  | 
|---|
| 4338 | @code{AM_PATH_PYTHON} creates several output variables based on the | 
|---|
| 4339 | Python installation found during configuration. | 
|---|
| 4340 |  | 
|---|
| 4341 | @vtable @code | 
|---|
| 4342 | @item PYTHON | 
|---|
| 4343 | The name of the Python executable. | 
|---|
| 4344 |  | 
|---|
| 4345 | @item PYTHON_VERSION | 
|---|
| 4346 | The Python version number, in the form @var{major}.@var{minor} | 
|---|
| 4347 | (e.g. @samp{1.5}).  This is currently the value of | 
|---|
| 4348 | @code{sys.version[:3]}. | 
|---|
| 4349 |  | 
|---|
| 4350 | @item PYTHON_PREFIX | 
|---|
| 4351 | The string @code{$@{prefix@}}.  This term may be used in future work | 
|---|
| 4352 | which needs the contents of Python's @code{sys.prefix}, but general | 
|---|
| 4353 | consensus is to always use the value from configure. | 
|---|
| 4354 |  | 
|---|
| 4355 | @item PYTHON_EXEC_PREFIX | 
|---|
| 4356 | The string @code{$@{exec_prefix@}}.  This term may be used in future work | 
|---|
| 4357 | which needs the contents of Python's @code{sys.exec_prefix}, but general | 
|---|
| 4358 | consensus is to always use the value from configure. | 
|---|
| 4359 |  | 
|---|
| 4360 | @item PYTHON_PLATFORM | 
|---|
| 4361 | The canonical name used by Python to describe the operating system, as | 
|---|
| 4362 | given by @code{sys.platform}.  This value is sometimes needed when | 
|---|
| 4363 | building Python extensions. | 
|---|
| 4364 |  | 
|---|
| 4365 | @item pythondir | 
|---|
| 4366 | The directory name for the @file{site-packages} subdirectory of the | 
|---|
| 4367 | standard Python install tree. | 
|---|
| 4368 |  | 
|---|
| 4369 | @item pkgpythondir | 
|---|
| 4370 | This is is the directory under @code{pythondir} which is named after the | 
|---|
| 4371 | package.  That is, it is @samp{$(pythondir)/$(PACKAGE)}.  It is provided | 
|---|
| 4372 | as a convenience. | 
|---|
| 4373 |  | 
|---|
| 4374 | @item pyexecdir | 
|---|
| 4375 | This is the directory where Python extension modules (shared libraries) | 
|---|
| 4376 | should be installed. | 
|---|
| 4377 |  | 
|---|
| 4378 | @item pkgpyexecdir | 
|---|
| 4379 | This is a convenience variable which is defined as | 
|---|
| 4380 | @samp{$(pyexecdir)/$(PACKAGE)}. | 
|---|
| 4381 | @end vtable | 
|---|
| 4382 |  | 
|---|
| 4383 | All these directory variables have values that start with either | 
|---|
| 4384 | @code{$@{prefix@}} or @code{$@{exec_prefix@}} unexpanded.  This works | 
|---|
| 4385 | fine in @file{Makefiles}, but it makes these variables hard to use in | 
|---|
| 4386 | @file{configure}.  This is mandated by the GNU coding standards, so | 
|---|
| 4387 | that the user can run @code{make prefix=/foo install}.  The Autoconf | 
|---|
| 4388 | manual has a section with more details on this topic | 
|---|
| 4389 | (@pxref{Installation Directory Variables, , Installation Directory | 
|---|
| 4390 | Variables, autoconf, The Autoconf Manual}). | 
|---|
| 4391 |  | 
|---|
| 4392 |  | 
|---|
| 4393 | @node Documentation, Install, Other GNU Tools, Top | 
|---|
| 4394 | @chapter Building documentation | 
|---|
| 4395 |  | 
|---|
| 4396 | Currently Automake provides support for Texinfo and man pages. | 
|---|
| 4397 |  | 
|---|
| 4398 | @menu | 
|---|
| 4399 | * Texinfo::                     Texinfo | 
|---|
| 4400 | * Man pages::                   Man pages | 
|---|
| 4401 | @end menu | 
|---|
| 4402 |  | 
|---|
| 4403 |  | 
|---|
| 4404 | @node Texinfo, Man pages, Documentation, Documentation | 
|---|
| 4405 | @section Texinfo | 
|---|
| 4406 |  | 
|---|
| 4407 | @cindex _TEXINFOS primary, defined | 
|---|
| 4408 | @cindex TEXINFOS primary, defined | 
|---|
| 4409 | @cindex Primary variable, TEXINFOS | 
|---|
| 4410 |  | 
|---|
| 4411 | If the current directory contains Texinfo source, you must declare it | 
|---|
| 4412 | with the @samp{TEXINFOS} primary.  Generally Texinfo files are converted | 
|---|
| 4413 | into info, and thus the @code{info_TEXINFOS} variable is most commonly used | 
|---|
| 4414 | here.  Any Texinfo source file must end in the @file{.texi}, | 
|---|
| 4415 | @file{.txi}, or @file{.texinfo} extension.  We recommend @file{.texi} | 
|---|
| 4416 | for new manuals. | 
|---|
| 4417 | @vindex TEXINFOS | 
|---|
| 4418 | @vindex info_TEXINFOS | 
|---|
| 4419 |  | 
|---|
| 4420 | Automake generates rules to build @file{.info}, @file{.dvi}, @file{.ps}, | 
|---|
| 4421 | and @file{.pdf} files from your Texinfo sources.  The @file{.info} files | 
|---|
| 4422 | are built by @code{make all} and installed by @code{make install} | 
|---|
| 4423 | (unless you use @code{no-installinfo}, see below).  The other files can | 
|---|
| 4424 | be built on request by @code{make dvi}, @code{make ps}, and @code{make | 
|---|
| 4425 | pdf}. | 
|---|
| 4426 |  | 
|---|
| 4427 | @cindex Texinfo flag, VERSION | 
|---|
| 4428 | @cindex Texinfo flag, UPDATED | 
|---|
| 4429 | @cindex Texinfo flag, EDITION | 
|---|
| 4430 | @cindex Texinfo flag, UPDATED-MONTH | 
|---|
| 4431 |  | 
|---|
| 4432 | @cindex VERSION Texinfo flag | 
|---|
| 4433 | @cindex UPDATED Texinfo flag | 
|---|
| 4434 | @cindex EDITION Texinfo flag | 
|---|
| 4435 | @cindex UPDATED-MONTH Texinfo flag | 
|---|
| 4436 |  | 
|---|
| 4437 | @cindex mdate-sh | 
|---|
| 4438 |  | 
|---|
| 4439 | If the @file{.texi} file @code{@@include}s @file{version.texi}, then | 
|---|
| 4440 | that file will be automatically generated.  The file @file{version.texi} | 
|---|
| 4441 | defines four Texinfo flag you can reference using | 
|---|
| 4442 | @code{@@value@{EDITION@}}, @code{@@value@{VERSION@}}, | 
|---|
| 4443 | @code{@@value@{UPDATED@}}, and @code{@@value@{UPDATED-MONTH@}}. | 
|---|
| 4444 |  | 
|---|
| 4445 | @table @code | 
|---|
| 4446 | @item EDITION | 
|---|
| 4447 | @itemx VERSION | 
|---|
| 4448 | Both of these flags hold the version number of your program.  They are | 
|---|
| 4449 | kept separate for clarity. | 
|---|
| 4450 |  | 
|---|
| 4451 | @item UPDATED | 
|---|
| 4452 | This holds the date the primary @file{.texi} file was last modified. | 
|---|
| 4453 |  | 
|---|
| 4454 | @item UPDATED-MONTH | 
|---|
| 4455 | This holds the name of the month in which the primary @file{.texi} file | 
|---|
| 4456 | was last modified. | 
|---|
| 4457 | @end table | 
|---|
| 4458 |  | 
|---|
| 4459 | The @file{version.texi} support requires the @code{mdate-sh} program; | 
|---|
| 4460 | this program is supplied with Automake and automatically included when | 
|---|
| 4461 | @code{automake} is invoked with the @code{--add-missing} option. | 
|---|
| 4462 |  | 
|---|
| 4463 | If you have multiple Texinfo files, and you want to use the | 
|---|
| 4464 | @file{version.texi} feature, then you have to have a separate version | 
|---|
| 4465 | file for each Texinfo file.  Automake will treat any include in a | 
|---|
| 4466 | Texinfo file that matches @samp{vers*.texi} just as an automatically | 
|---|
| 4467 | generated version file. | 
|---|
| 4468 |  | 
|---|
| 4469 | When an info file is rebuilt, the program named by the @code{MAKEINFO} | 
|---|
| 4470 | variable is used to invoke it.  If the @code{makeinfo} program is found | 
|---|
| 4471 | on the system then it will be used by default; otherwise @code{missing} | 
|---|
| 4472 | will be used instead.  The flags in the variables @code{MAKEINFOFLAGS} | 
|---|
| 4473 | and @code{AM_MAKEINFOFLAGS} will be passed to the @code{makeinfo} | 
|---|
| 4474 | invocation; the first of these is intended for use by the user | 
|---|
| 4475 | (@pxref{User Variables}) and the second by the @file{Makefile.am} | 
|---|
| 4476 | writer. | 
|---|
| 4477 | @vindex MAKEINFO | 
|---|
| 4478 | @vindex MAKEINFOFLAGS | 
|---|
| 4479 | @vindex AM_MAKEINFOFLAGS | 
|---|
| 4480 |  | 
|---|
| 4481 | Sometimes an info file actually depends on more than one @file{.texi} | 
|---|
| 4482 | file.  For instance, in GNU Hello, @file{hello.texi} includes the file | 
|---|
| 4483 | @file{gpl.texi}.  You can tell Automake about these dependencies using | 
|---|
| 4484 | the @code{@var{texi}_TEXINFOS} variable.  Here is how GNU Hello does it: | 
|---|
| 4485 | @vindex TEXINFOS | 
|---|
| 4486 | @vindex _TEXINFOS | 
|---|
| 4487 |  | 
|---|
| 4488 | @example | 
|---|
| 4489 | info_TEXINFOS = hello.texi | 
|---|
| 4490 | hello_TEXINFOS = gpl.texi | 
|---|
| 4491 | @end example | 
|---|
| 4492 |  | 
|---|
| 4493 | @cindex texinfo.tex | 
|---|
| 4494 |  | 
|---|
| 4495 | By default, Automake requires the file @file{texinfo.tex} to appear in | 
|---|
| 4496 | the same directory as the Texinfo source.  However, if you used | 
|---|
| 4497 | @code{AC_CONFIG_AUX_DIR} in @file{configure.in} (@pxref{Input, , Finding | 
|---|
| 4498 | `configure' Input, autoconf, The Autoconf Manual}), then | 
|---|
| 4499 | @file{texinfo.tex} is looked for there.  Automake supplies | 
|---|
| 4500 | @file{texinfo.tex} if @samp{--add-missing} is given. | 
|---|
| 4501 |  | 
|---|
| 4502 | @vindex TEXINFO_TEX | 
|---|
| 4503 |  | 
|---|
| 4504 | If your package has Texinfo files in many directories, you can use the | 
|---|
| 4505 | variable @code{TEXINFO_TEX} to tell Automake where to find the canonical | 
|---|
| 4506 | @file{texinfo.tex} for your package.  The value of this variable should | 
|---|
| 4507 | be the relative path from the current @file{Makefile.am} to | 
|---|
| 4508 | @file{texinfo.tex}: | 
|---|
| 4509 |  | 
|---|
| 4510 | @example | 
|---|
| 4511 | TEXINFO_TEX = ../doc/texinfo.tex | 
|---|
| 4512 | @end example | 
|---|
| 4513 |  | 
|---|
| 4514 | @opindex no-texinfo.tex | 
|---|
| 4515 |  | 
|---|
| 4516 | The option @samp{no-texinfo.tex} can be used to eliminate the | 
|---|
| 4517 | requirement for @file{texinfo.tex}.  Use of the variable | 
|---|
| 4518 | @code{TEXINFO_TEX} is preferable, however, because that allows the | 
|---|
| 4519 | @code{dvi}, @code{ps}, and @code{pdf} targets to still work. | 
|---|
| 4520 |  | 
|---|
| 4521 | @cindex Target, install-info | 
|---|
| 4522 | @cindex Target, noinstall-info | 
|---|
| 4523 | @cindex install-info target | 
|---|
| 4524 | @cindex noinstall-info target | 
|---|
| 4525 |  | 
|---|
| 4526 | @opindex no-installinfo | 
|---|
| 4527 | @trindex install-info | 
|---|
| 4528 |  | 
|---|
| 4529 | Automake generates an @code{install-info} target; some people apparently | 
|---|
| 4530 | use this.  By default, info pages are installed by @samp{make install}. | 
|---|
| 4531 | This can be prevented via the @code{no-installinfo} option. | 
|---|
| 4532 |  | 
|---|
| 4533 |  | 
|---|
| 4534 | @node Man pages,  , Texinfo, Documentation | 
|---|
| 4535 | @section Man pages | 
|---|
| 4536 |  | 
|---|
| 4537 | @cindex _MANS primary, defined | 
|---|
| 4538 | @cindex MANS primary, defined | 
|---|
| 4539 | @cindex Primary variable, MANS | 
|---|
| 4540 |  | 
|---|
| 4541 | A package can also include man pages (but see the GNU standards on this | 
|---|
| 4542 | matter, @ref{Man Pages, , , standards, The GNU Coding Standards}.)  Man | 
|---|
| 4543 | pages are declared using the @samp{MANS} primary.  Generally the | 
|---|
| 4544 | @code{man_MANS} variable is used.  Man pages are automatically installed in | 
|---|
| 4545 | the correct subdirectory of @code{mandir}, based on the file extension. | 
|---|
| 4546 | @vindex MANS | 
|---|
| 4547 | @vindex man_MANS | 
|---|
| 4548 |  | 
|---|
| 4549 | File extensions such as @samp{.1c} are handled by looking for the valid | 
|---|
| 4550 | part of the extension and using that to determine the correct | 
|---|
| 4551 | subdirectory of @code{mandir}.  Valid section names are the digits | 
|---|
| 4552 | @samp{0} through @samp{9}, and the letters @samp{l} and @samp{n}. | 
|---|
| 4553 |  | 
|---|
| 4554 | Sometimes developers prefer to name a man page something like | 
|---|
| 4555 | @file{foo.man} in the source, and then rename it to have the correct | 
|---|
| 4556 | suffix, e.g. @file{foo.1}, when installing the file.  Automake also | 
|---|
| 4557 | supports this mode.  For a valid section named @var{SECTION}, there is a | 
|---|
| 4558 | corresponding directory named @samp{man@var{SECTION}dir}, and a | 
|---|
| 4559 | corresponding @samp{_MANS} variable.  Files listed in such a variable | 
|---|
| 4560 | are installed in the indicated section.  If the file already has a | 
|---|
| 4561 | valid suffix, then it is installed as-is; otherwise the file suffix is | 
|---|
| 4562 | changed to match the section. | 
|---|
| 4563 |  | 
|---|
| 4564 | For instance, consider this example: | 
|---|
| 4565 | @example | 
|---|
| 4566 | man1_MANS = rename.man thesame.1 alsothesame.1c | 
|---|
| 4567 | @end example | 
|---|
| 4568 |  | 
|---|
| 4569 | In this case, @file{rename.man} will be renamed to @file{rename.1} when | 
|---|
| 4570 | installed, but the other files will keep their names. | 
|---|
| 4571 |  | 
|---|
| 4572 | @cindex Target, install-man | 
|---|
| 4573 | @cindex Target, noinstall-man | 
|---|
| 4574 | @cindex install-man target | 
|---|
| 4575 | @cindex noinstall-man target | 
|---|
| 4576 |  | 
|---|
| 4577 | @c Use @samp{make install} per documentation: (texi)code. | 
|---|
| 4578 | By default, man pages are installed by @samp{make install}.  However, | 
|---|
| 4579 | since the GNU project does not require man pages, many maintainers do | 
|---|
| 4580 | not expend effort to keep the man pages up to date.  In these cases, the | 
|---|
| 4581 | @code{no-installman} option will prevent the man pages from being | 
|---|
| 4582 | installed by default.  The user can still explicitly install them via | 
|---|
| 4583 | @samp{make install-man}. | 
|---|
| 4584 | @opindex no-installman | 
|---|
| 4585 | @trindex install-man | 
|---|
| 4586 |  | 
|---|
| 4587 | Here is how the man pages are handled in GNU @code{cpio} (which includes | 
|---|
| 4588 | both Texinfo documentation and man pages): | 
|---|
| 4589 |  | 
|---|
| 4590 | @example | 
|---|
| 4591 | man_MANS = cpio.1 mt.1 | 
|---|
| 4592 | EXTRA_DIST = $(man_MANS) | 
|---|
| 4593 | @end example | 
|---|
| 4594 |  | 
|---|
| 4595 | Man pages are not currently considered to be source, because it is not | 
|---|
| 4596 | uncommon for man pages to be automatically generated.  Therefore they | 
|---|
| 4597 | are not automatically included in the distribution.  However, this can | 
|---|
| 4598 | be changed by use of the @samp{dist_} prefix. | 
|---|
| 4599 |  | 
|---|
| 4600 | The @samp{nobase_} prefix is meaningless for man pages and is | 
|---|
| 4601 | disallowed. | 
|---|
| 4602 |  | 
|---|
| 4603 |  | 
|---|
| 4604 | @node Install, Clean, Documentation, Top | 
|---|
| 4605 | @chapter What Gets Installed | 
|---|
| 4606 |  | 
|---|
| 4607 | @cindex Installation support | 
|---|
| 4608 | @cindex make install support | 
|---|
| 4609 |  | 
|---|
| 4610 | @section Basics of installation | 
|---|
| 4611 |  | 
|---|
| 4612 | Naturally, Automake handles the details of actually installing your | 
|---|
| 4613 | program once it has been built.  All files named by the various | 
|---|
| 4614 | primaries are automatically installed in the appropriate places when the | 
|---|
| 4615 | user runs @code{make install}. | 
|---|
| 4616 |  | 
|---|
| 4617 | A file named in a primary is installed by copying the built file into | 
|---|
| 4618 | the appropriate directory.  The base name of the file is used when | 
|---|
| 4619 | installing. | 
|---|
| 4620 |  | 
|---|
| 4621 | @example | 
|---|
| 4622 | bin_PROGRAMS = hello subdir/goodbye | 
|---|
| 4623 | @end example | 
|---|
| 4624 |  | 
|---|
| 4625 | In this example, both @samp{hello} and @samp{goodbye} will be installed | 
|---|
| 4626 | in @code{$(bindir)}. | 
|---|
| 4627 |  | 
|---|
| 4628 | Sometimes it is useful to avoid the basename step at install time.  For | 
|---|
| 4629 | instance, you might have a number of header files in subdirectories of | 
|---|
| 4630 | the source tree which are laid out precisely how you want to install | 
|---|
| 4631 | them.  In this situation you can use the @samp{nobase_} prefix to | 
|---|
| 4632 | suppress the base name step.  For example: | 
|---|
| 4633 |  | 
|---|
| 4634 | @example | 
|---|
| 4635 | nobase_include_HEADERS = stdio.h sys/types.h | 
|---|
| 4636 | @end example | 
|---|
| 4637 |  | 
|---|
| 4638 | Will install @file{stdio.h} in @code{$(includedir)} and @file{types.h} | 
|---|
| 4639 | in @code{$(includedir)/sys}. | 
|---|
| 4640 |  | 
|---|
| 4641 | @section The two parts of install | 
|---|
| 4642 |  | 
|---|
| 4643 | Automake generates separate @code{install-data} and @code{install-exec} | 
|---|
| 4644 | targets, in case the installer is installing on multiple machines which | 
|---|
| 4645 | share directory structure---these targets allow the machine-independent | 
|---|
| 4646 | parts to be installed only once.  @code{install-exec} installs | 
|---|
| 4647 | platform-dependent files, and @code{install-data} installs | 
|---|
| 4648 | platform-independent files.  The @code{install} target depends on both | 
|---|
| 4649 | of these targets.  While Automake tries to automatically segregate | 
|---|
| 4650 | objects into the correct category, the @file{Makefile.am} author is, in | 
|---|
| 4651 | the end, responsible for making sure this is done correctly. | 
|---|
| 4652 | @trindex install-data | 
|---|
| 4653 | @trindex install-exec | 
|---|
| 4654 | @trindex install | 
|---|
| 4655 | @cindex Install, two parts of | 
|---|
| 4656 |  | 
|---|
| 4657 | Variables using the standard directory prefixes @samp{data}, | 
|---|
| 4658 | @samp{info}, @samp{man}, @samp{include}, @samp{oldinclude}, | 
|---|
| 4659 | @samp{pkgdata}, or @samp{pkginclude} (e.g. @samp{data_DATA}) are | 
|---|
| 4660 | installed by @samp{install-data}. | 
|---|
| 4661 |  | 
|---|
| 4662 | Variables using the standard directory prefixes @samp{bin}, @samp{sbin}, | 
|---|
| 4663 | @samp{libexec}, @samp{sysconf}, @samp{localstate}, @samp{lib}, or | 
|---|
| 4664 | @samp{pkglib} (e.g. @samp{bin_PROGRAMS}) are installed by | 
|---|
| 4665 | @samp{install-exec}. | 
|---|
| 4666 |  | 
|---|
| 4667 | Any variable using a user-defined directory prefix with @samp{exec} in | 
|---|
| 4668 | the name (e.g. @samp{myexecbin_PROGRAMS} is installed by | 
|---|
| 4669 | @samp{install-exec}.  All other user-defined prefixes are installed by | 
|---|
| 4670 | @samp{install-data}. | 
|---|
| 4671 |  | 
|---|
| 4672 | @section Extending installation | 
|---|
| 4673 |  | 
|---|
| 4674 | It is possible to extend this mechanism by defining an | 
|---|
| 4675 | @code{install-exec-local} or @code{install-data-local} target.  If these | 
|---|
| 4676 | targets exist, they will be run at @samp{make install} time.  These | 
|---|
| 4677 | rules can do almost anything; care is required. | 
|---|
| 4678 | @trindex install-exec-local | 
|---|
| 4679 | @trindex install-data-local | 
|---|
| 4680 |  | 
|---|
| 4681 | Automake also supports two install hooks, @code{install-exec-hook} and | 
|---|
| 4682 | @code{install-data-hook}.  These hooks are run after all other install | 
|---|
| 4683 | rules of the appropriate type, exec or data, have completed.  So, for | 
|---|
| 4684 | instance, it is possible to perform post-installation modifications | 
|---|
| 4685 | using an install hook. | 
|---|
| 4686 | @cindex Install hook | 
|---|
| 4687 |  | 
|---|
| 4688 | @section Staged installs | 
|---|
| 4689 |  | 
|---|
| 4690 | @vindex DESTDIR | 
|---|
| 4691 | Automake generates support for the @samp{DESTDIR} variable in all | 
|---|
| 4692 | install rules.  @samp{DESTDIR} is used during the @samp{make install} | 
|---|
| 4693 | step to relocate install objects into a staging area.  Each object and | 
|---|
| 4694 | path is prefixed with the value of @samp{DESTDIR} before being copied | 
|---|
| 4695 | into the install area.  Here is an example of typical DESTDIR usage: | 
|---|
| 4696 |  | 
|---|
| 4697 | @example | 
|---|
| 4698 | make DESTDIR=/tmp/staging install | 
|---|
| 4699 | @end example | 
|---|
| 4700 |  | 
|---|
| 4701 | This places install objects in a directory tree built under | 
|---|
| 4702 | @file{/tmp/staging}.  If @file{/gnu/bin/foo} and | 
|---|
| 4703 | @file{/gnu/share/aclocal/foo.m4} are to be installed, the above command | 
|---|
| 4704 | would install @file{/tmp/staging/gnu/bin/foo} and | 
|---|
| 4705 | @file{/tmp/staging/gnu/share/aclocal/foo.m4}. | 
|---|
| 4706 |  | 
|---|
| 4707 | This feature is commonly used to build install images and packages.  For | 
|---|
| 4708 | more information, see @ref{Makefile Conventions, , , standards, The GNU | 
|---|
| 4709 | Coding Standards}. | 
|---|
| 4710 |  | 
|---|
| 4711 | Support for @samp{DESTDIR} is implemented by coding it directly into the | 
|---|
| 4712 | install rules.  If your @file{Makefile.am} uses a local install rule | 
|---|
| 4713 | (e.g., @code{install-exec-local}) or an install hook, then you must | 
|---|
| 4714 | write that code to respect @samp{DESTDIR}. | 
|---|
| 4715 |  | 
|---|
| 4716 | @section Rules for the user | 
|---|
| 4717 |  | 
|---|
| 4718 | Automake also generates an @code{uninstall} target, an | 
|---|
| 4719 | @code{installdirs} target, and an @code{install-strip} target. | 
|---|
| 4720 | @trindex uninstall | 
|---|
| 4721 | @trindex installdirs | 
|---|
| 4722 | @trindex install-strip | 
|---|
| 4723 |  | 
|---|
| 4724 | Automake supports @code{uninstall-local} and @code{uninstall-hook}. | 
|---|
| 4725 | There is no notion of separate uninstalls for ``exec'' and ``data'', as | 
|---|
| 4726 | these features would not provide additional functionality. | 
|---|
| 4727 |  | 
|---|
| 4728 | Note that @code{uninstall} is not meant as a replacement for a real | 
|---|
| 4729 | packaging tool. | 
|---|
| 4730 |  | 
|---|
| 4731 |  | 
|---|
| 4732 | @node Clean, Dist, Install, Top | 
|---|
| 4733 | @chapter What Gets Cleaned | 
|---|
| 4734 |  | 
|---|
| 4735 | @cindex make clean support | 
|---|
| 4736 |  | 
|---|
| 4737 | The GNU Makefile Standards specify a number of different clean rules. | 
|---|
| 4738 | See @xref{Standard Targets, , Standard Targets for Users, standards, | 
|---|
| 4739 | The GNU Coding Standards}. | 
|---|
| 4740 |  | 
|---|
| 4741 | Generally the files that can be cleaned are determined automatically by | 
|---|
| 4742 | Automake.  Of course, Automake also recognizes some variables that can | 
|---|
| 4743 | be defined to specify additional files to clean.  These variables are | 
|---|
| 4744 | @code{MOSTLYCLEANFILES}, @code{CLEANFILES}, @code{DISTCLEANFILES}, and | 
|---|
| 4745 | @code{MAINTAINERCLEANFILES}. | 
|---|
| 4746 | @vindex MOSTLYCLEANFILES | 
|---|
| 4747 | @vindex CLEANFILES | 
|---|
| 4748 | @vindex DISTCLEANFILES | 
|---|
| 4749 | @vindex MAINTAINERCLEANFILES | 
|---|
| 4750 |  | 
|---|
| 4751 | As the GNU Standards aren't always explicit as to which files should be | 
|---|
| 4752 | removed by which target, we've adopted a heuristic which we believe was | 
|---|
| 4753 | first formulated by Fran@,{c}ois Pinard: | 
|---|
| 4754 |  | 
|---|
| 4755 | @itemize @bullet | 
|---|
| 4756 | @item | 
|---|
| 4757 | If @code{make} built it, and it is commonly something that one would | 
|---|
| 4758 | want to rebuild (for instance, a @file{.o} file), then | 
|---|
| 4759 | @code{mostlyclean} should delete it. | 
|---|
| 4760 |  | 
|---|
| 4761 | @item | 
|---|
| 4762 | Otherwise, if @code{make} built it, then @code{clean} should delete it. | 
|---|
| 4763 |  | 
|---|
| 4764 | @item | 
|---|
| 4765 | If @code{configure} built it, then @code{distclean} should delete it. | 
|---|
| 4766 |  | 
|---|
| 4767 | @item | 
|---|
| 4768 | If the maintainer built it (for instance, a @file{.info} file), then | 
|---|
| 4769 | @code{maintainer-clean} should delete it.  However | 
|---|
| 4770 | @code{maintainer-clean} should not delete anything that needs to exist | 
|---|
| 4771 | in order to run @code{./configure && make}. | 
|---|
| 4772 | @end itemize | 
|---|
| 4773 |  | 
|---|
| 4774 | We recommend that you follow this same set of heuristics in your | 
|---|
| 4775 | @file{Makefile.am}. | 
|---|
| 4776 |  | 
|---|
| 4777 |  | 
|---|
| 4778 | @node Dist, Tests, Clean, Top | 
|---|
| 4779 | @chapter What Goes in a Distribution | 
|---|
| 4780 |  | 
|---|
| 4781 | @section Basics of distribution | 
|---|
| 4782 |  | 
|---|
| 4783 | @cindex make dist | 
|---|
| 4784 |  | 
|---|
| 4785 | The @code{dist} target in the generated @file{Makefile.in} can be used | 
|---|
| 4786 | to generate a gzip'd @code{tar} file and other flavors of archive for | 
|---|
| 4787 | distribution.  The files is named based on the @samp{PACKAGE} and | 
|---|
| 4788 | @samp{VERSION} variables defined by @code{AM_INIT_AUTOMAKE} | 
|---|
| 4789 | (@pxref{Macros}); more precisely the gzip'd @code{tar} file is named | 
|---|
| 4790 | @samp{@var{package}-@var{version}.tar.gz}. | 
|---|
| 4791 | @cvindex PACKAGE | 
|---|
| 4792 | @cvindex VERSION | 
|---|
| 4793 | @trindex dist | 
|---|
| 4794 | You can use the @code{make} variable @samp{GZIP_ENV} to control how gzip | 
|---|
| 4795 | is run.  The default setting is @samp{--best}. | 
|---|
| 4796 |  | 
|---|
| 4797 | For the most part, the files to distribute are automatically found by | 
|---|
| 4798 | Automake: all source files are automatically included in a distribution, | 
|---|
| 4799 | as are all @file{Makefile.am}s and @file{Makefile.in}s.  Automake also | 
|---|
| 4800 | has a built-in list of commonly used files which are automatically | 
|---|
| 4801 | included if they are found in the current directory (either physically, | 
|---|
| 4802 | or as the target of a @file{Makefile.am} rule).  This list is printed by | 
|---|
| 4803 | @samp{automake --help}.  Also, files which are read by @code{configure} | 
|---|
| 4804 | (i.e. the source files corresponding to the files specified in various | 
|---|
| 4805 | Autoconf macros such as @code{AC_CONFIG_FILES} and siblings) are | 
|---|
| 4806 | automatically distributed.  Helper scripts installed with | 
|---|
| 4807 | @samp{automake --add-missing} are also distributed. | 
|---|
| 4808 |  | 
|---|
| 4809 | Still, sometimes there are files which must be distributed, but which | 
|---|
| 4810 | are not covered in the automatic rules.  These files should be listed in | 
|---|
| 4811 | the @code{EXTRA_DIST} variable.  You can mention files from | 
|---|
| 4812 | subdirectories in @code{EXTRA_DIST}. | 
|---|
| 4813 |  | 
|---|
| 4814 | You can also mention a directory in @code{EXTRA_DIST}; in this case the | 
|---|
| 4815 | entire directory will be recursively copied into the distribution. | 
|---|
| 4816 | Please note that this will also copy @emph{everything} in the directory, | 
|---|
| 4817 | including CVS/RCS version control files.  We recommend against using | 
|---|
| 4818 | this feature. | 
|---|
| 4819 | @vindex EXTRA_DIST | 
|---|
| 4820 |  | 
|---|
| 4821 | If you define @code{SUBDIRS}, Automake will recursively include the | 
|---|
| 4822 | subdirectories in the distribution.  If @code{SUBDIRS} is defined | 
|---|
| 4823 | conditionally (@pxref{Conditionals}), Automake will normally include all | 
|---|
| 4824 | directories that could possibly appear in @code{SUBDIRS} in the | 
|---|
| 4825 | distribution.  If you need to specify the set of directories | 
|---|
| 4826 | conditionally, you can set the variable @code{DIST_SUBDIRS} to the exact | 
|---|
| 4827 | list of subdirectories to include in the distribution (@pxref{Top level}). | 
|---|
| 4828 | @vindex DIST_SUBDIRS | 
|---|
| 4829 |  | 
|---|
| 4830 | @section Fine-grained distribution control | 
|---|
| 4831 |  | 
|---|
| 4832 | Sometimes you need tighter control over what does @emph{not} go into the | 
|---|
| 4833 | distribution; for instance you might have source files which are | 
|---|
| 4834 | generated and which you do not want to distribute.  In this case | 
|---|
| 4835 | Automake gives fine-grained control using the @samp{dist} and | 
|---|
| 4836 | @samp{nodist} prefixes.  Any primary or @samp{_SOURCES} variable can be | 
|---|
| 4837 | prefixed with @samp{dist_} to add the listed files to the distribution. | 
|---|
| 4838 | Similarly, @samp{nodist_} can be used to omit the files from the | 
|---|
| 4839 | distribution. | 
|---|
| 4840 | @vindex dist_ | 
|---|
| 4841 | @vindex nodist_ | 
|---|
| 4842 |  | 
|---|
| 4843 | As an example, here is how you would cause some data to be distributed | 
|---|
| 4844 | while leaving some source code out of the distribution: | 
|---|
| 4845 |  | 
|---|
| 4846 | @example | 
|---|
| 4847 | dist_data_DATA = distribute-this | 
|---|
| 4848 | bin_PROGRAMS = foo | 
|---|
| 4849 | nodist_foo_SOURCES = do-not-distribute.c | 
|---|
| 4850 | @end example | 
|---|
| 4851 |  | 
|---|
| 4852 | @section The dist hook | 
|---|
| 4853 |  | 
|---|
| 4854 | @trindex dist-hook | 
|---|
| 4855 | Occasionally it is useful to be able to change the distribution before | 
|---|
| 4856 | it is packaged up.  If the @code{dist-hook} target exists, it is run | 
|---|
| 4857 | after the distribution directory is filled, but before the actual tar | 
|---|
| 4858 | (or shar) file is created.  One way to use this is for distributing | 
|---|
| 4859 | files in subdirectories for which a new @file{Makefile.am} is overkill: | 
|---|
| 4860 |  | 
|---|
| 4861 | @example | 
|---|
| 4862 | dist-hook: | 
|---|
| 4863 | mkdir $(distdir)/random | 
|---|
| 4864 | cp -p $(srcdir)/random/a1 $(srcdir)/random/a2 $(distdir)/random | 
|---|
| 4865 | @end example | 
|---|
| 4866 |  | 
|---|
| 4867 | Another way to to use this is for removing unnecessary files that get | 
|---|
| 4868 | recursively included by specifying a directory in EXTRA_DIST: | 
|---|
| 4869 |  | 
|---|
| 4870 | @example | 
|---|
| 4871 | EXTRA_DIST = doc | 
|---|
| 4872 |  | 
|---|
| 4873 | dist-hook: | 
|---|
| 4874 | rm -rf `find $(distdir)/doc -name CVS` | 
|---|
| 4875 | @end example | 
|---|
| 4876 |  | 
|---|
| 4877 | @section Checking the distribution | 
|---|
| 4878 |  | 
|---|
| 4879 | @cindex make distcheck | 
|---|
| 4880 | @cindex make distcleancheck | 
|---|
| 4881 | @vindex distcleancheck_listfiles | 
|---|
| 4882 | @cindex make distuninstallcheck | 
|---|
| 4883 | @vindex distuninstallcheck_listfiles | 
|---|
| 4884 |  | 
|---|
| 4885 | Automake also generates a @code{distcheck} target which can be of help | 
|---|
| 4886 | to ensure that a given distribution will actually work. | 
|---|
| 4887 | @code{distcheck} makes a distribution, then tries to do a @code{VPATH} | 
|---|
| 4888 | build, run the test suite, and finally make another tarfile to ensure the | 
|---|
| 4889 | distribution is self-contained. | 
|---|
| 4890 | @trindex distcheck | 
|---|
| 4891 |  | 
|---|
| 4892 | Building the package involves running @code{./configure}.  If you need | 
|---|
| 4893 | to supply additional flags to @code{configure}, define them in the | 
|---|
| 4894 | @code{DISTCHECK_CONFIGURE_FLAGS} variable, either in your top-level | 
|---|
| 4895 | @file{Makefile.am}, or on the command line when invoking @code{make}. | 
|---|
| 4896 | @vindex DISTCHECK_CONFIGURE_FLAGS | 
|---|
| 4897 |  | 
|---|
| 4898 | If the target @code{distcheck-hook} is defined in your | 
|---|
| 4899 | @file{Makefile.am}, then it will be invoked by @code{distcheck} after | 
|---|
| 4900 | the new distribution has been unpacked, but before the unpacked copy is | 
|---|
| 4901 | configured and built.  Your @code{distcheck-hook} can do almost | 
|---|
| 4902 | anything, though as always caution is advised.  Generally this hook is | 
|---|
| 4903 | used to check for potential distribution errors not caught by the | 
|---|
| 4904 | standard mechanism. | 
|---|
| 4905 |  | 
|---|
| 4906 | Speaking about potential distribution errors, @code{distcheck} will also | 
|---|
| 4907 | ensure that the @code{distclean} target actually removes all built | 
|---|
| 4908 | files.  This is done by running @code{make distcleancheck} at the end of | 
|---|
| 4909 | the @code{VPATH} build.  By default, @code{distcleancheck} will run | 
|---|
| 4910 | @code{distclean} and then make sure the build tree has been emptied by | 
|---|
| 4911 | running @code{$(distcleancheck_listfiles)}.  Usually this check will | 
|---|
| 4912 | find generated files that you forgot to add to the @code{DISTCLEANFILES} | 
|---|
| 4913 | variable (@pxref{Clean}). | 
|---|
| 4914 | @trindex distcleancheck | 
|---|
| 4915 |  | 
|---|
| 4916 | The @code{distcleancheck} behavior should be OK for most packages, | 
|---|
| 4917 | otherwise you have the possibility to override the definition of | 
|---|
| 4918 | either the @code{distcleancheck} target, or the | 
|---|
| 4919 | @code{$(distcleancheck_listfiles)} variable.  For instance to disable | 
|---|
| 4920 | @code{distcleancheck} completely, add the following rule to your | 
|---|
| 4921 | top-level @file{Makefile.am}: | 
|---|
| 4922 | @vindex distcleancheck_listfiles | 
|---|
| 4923 |  | 
|---|
| 4924 | @example | 
|---|
| 4925 | distcleancheck: | 
|---|
| 4926 | @@: | 
|---|
| 4927 | @end example | 
|---|
| 4928 |  | 
|---|
| 4929 | If you want @code{distcleancheck} to ignore built files which have not | 
|---|
| 4930 | been cleaned because they are also part of the distribution, add the | 
|---|
| 4931 | following definition instead: | 
|---|
| 4932 |  | 
|---|
| 4933 | @example | 
|---|
| 4934 | distcleancheck_listfiles = \ | 
|---|
| 4935 | find -type f -exec sh -c 'test -f $(srcdir)/@{@} || echo @{@}' ';' | 
|---|
| 4936 | @end example | 
|---|
| 4937 |  | 
|---|
| 4938 | The above definition is not the default because it's usually an error if | 
|---|
| 4939 | your Makefiles cause some distributed files to be rebuilt when the user | 
|---|
| 4940 | build the package.  (Think about the user missing the tool required to | 
|---|
| 4941 | build the file; or if the required tool is built by your package, | 
|---|
| 4942 | consider the cross-compilation case where it can't be run.)  There is | 
|---|
| 4943 | a FAQ entry about this (@pxref{distcleancheck}), make sure you read it | 
|---|
| 4944 | before playing with @code{distcleancheck_listfiles}. | 
|---|
| 4945 |  | 
|---|
| 4946 | @code{distcheck} also checks that the @code{uninstall} target works | 
|---|
| 4947 | properly, both for ordinary and @samp{DESTDIR} builds.  It does this | 
|---|
| 4948 | by invoking @code{make uninstall}, and then it checks the install tree | 
|---|
| 4949 | to see if any files are left over.  This check will make sure that you | 
|---|
| 4950 | correctly coded your @code{uninstall}-related targets. | 
|---|
| 4951 |  | 
|---|
| 4952 | By default, the checking is done by the @code{distuninstallcheck} target, | 
|---|
| 4953 | and the list of files in the install tree is generated by | 
|---|
| 4954 | @code{$(distuninstallcheck_listfiles}) (this is a variable whose value is | 
|---|
| 4955 | a shell command to run that prints the list of files to stdout). | 
|---|
| 4956 |  | 
|---|
| 4957 | Either of these can be overridden to modify the behavior of | 
|---|
| 4958 | @code{distcheck}.  For instance, to disable this check completely, you | 
|---|
| 4959 | would write: | 
|---|
| 4960 |  | 
|---|
| 4961 | @example | 
|---|
| 4962 | distuninstallcheck: | 
|---|
| 4963 | @@: | 
|---|
| 4964 | @end example | 
|---|
| 4965 |  | 
|---|
| 4966 | @section The types of distributions | 
|---|
| 4967 |  | 
|---|
| 4968 | @trindex dist-gzip | 
|---|
| 4969 | Automake generates a @samp{.tar.gz} file when asked to create a | 
|---|
| 4970 | distribution and other archives formats, @ref{Options}.  The target | 
|---|
| 4971 | @code{dist-gzip} generates the @samp{.tar.gz} file only. | 
|---|
| 4972 |  | 
|---|
| 4973 |  | 
|---|
| 4974 | @node Tests, Options, Dist, Top | 
|---|
| 4975 | @chapter Support for test suites | 
|---|
| 4976 |  | 
|---|
| 4977 | @cindex Test suites | 
|---|
| 4978 | @cindex make check | 
|---|
| 4979 |  | 
|---|
| 4980 | Automake supports two forms of test suites. | 
|---|
| 4981 |  | 
|---|
| 4982 | @section Simple Tests | 
|---|
| 4983 |  | 
|---|
| 4984 | If the variable @code{TESTS} is defined, its value is taken to be a list | 
|---|
| 4985 | of programs to run in order to do the testing.  The programs can either | 
|---|
| 4986 | be derived objects or source objects; the generated rule will look both | 
|---|
| 4987 | in @code{srcdir} and @file{.}.  Programs needing data files should look | 
|---|
| 4988 | for them in @code{srcdir} (which is both an environment variable and a | 
|---|
| 4989 | make variable) so they work when building in a separate directory | 
|---|
| 4990 | (@pxref{Build Directories, , Build Directories , autoconf, The Autoconf | 
|---|
| 4991 | Manual}), and in particular for the @code{distcheck} target | 
|---|
| 4992 | (@pxref{Dist}). | 
|---|
| 4993 |  | 
|---|
| 4994 | @cindex Exit status 77, special interpretation | 
|---|
| 4995 |  | 
|---|
| 4996 | The number of failures will be printed at the end of the run.  If a | 
|---|
| 4997 | given test program exits with a status of 77, then its result is ignored | 
|---|
| 4998 | in the final count.  This feature allows non-portable tests to be | 
|---|
| 4999 | ignored in environments where they don't make sense. | 
|---|
| 5000 |  | 
|---|
| 5001 | The variable @code{TESTS_ENVIRONMENT} can be used to set environment | 
|---|
| 5002 | variables for the test run; the environment variable @code{srcdir} is | 
|---|
| 5003 | set in the rule.  If all your test programs are scripts, you can also | 
|---|
| 5004 | set @code{TESTS_ENVIRONMENT} to an invocation of the shell (e.g. | 
|---|
| 5005 | @samp{$(SHELL) -x}); this can be useful for debugging the tests. | 
|---|
| 5006 | @vindex TESTS | 
|---|
| 5007 | @vindex TESTS_ENVIRONMENT | 
|---|
| 5008 |  | 
|---|
| 5009 | @cindex Tests, expected failure | 
|---|
| 5010 | @cindex Expected test failure | 
|---|
| 5011 |  | 
|---|
| 5012 | You may define the variable @code{XFAIL_TESTS} to a list of tests | 
|---|
| 5013 | (usually a subset of @code{TESTS}) that are expected to fail.  This will | 
|---|
| 5014 | reverse the result of those tests. | 
|---|
| 5015 | @vindex XFAIL_TESTS | 
|---|
| 5016 |  | 
|---|
| 5017 | Automake ensures that each program listed in @code{TESTS} is built | 
|---|
| 5018 | before any tests are run; you can list both source and derived programs | 
|---|
| 5019 | in @code{TESTS}.  For instance, you might want to run a C program as a | 
|---|
| 5020 | test.  To do this you would list its name in @code{TESTS} and also in | 
|---|
| 5021 | @code{check_PROGRAMS}, and then specify it as you would any other | 
|---|
| 5022 | program. | 
|---|
| 5023 |  | 
|---|
| 5024 | @section DejaGnu Tests | 
|---|
| 5025 |  | 
|---|
| 5026 | If @uref{ftp://ftp.gnu.org/gnu/dejagnu/, @samp{dejagnu}} appears in | 
|---|
| 5027 | @code{AUTOMAKE_OPTIONS}, then a @code{dejagnu}-based test suite is | 
|---|
| 5028 | assumed.  The variable @code{DEJATOOL} is a list of names which are | 
|---|
| 5029 | passed, one at a time, as the @code{--tool} argument to @code{runtest} | 
|---|
| 5030 | invocations; it defaults to the name of the package. | 
|---|
| 5031 |  | 
|---|
| 5032 | The variable @code{RUNTESTDEFAULTFLAGS} holds the @code{--tool} and | 
|---|
| 5033 | @code{--srcdir} flags that are passed to dejagnu by default; this can be | 
|---|
| 5034 | overridden if necessary. | 
|---|
| 5035 | @vindex RUNTESTDEFAULTFLAGS | 
|---|
| 5036 |  | 
|---|
| 5037 | The variables @code{EXPECT} and @code{RUNTEST} can | 
|---|
| 5038 | also be overridden to provide project-specific values.  For instance, | 
|---|
| 5039 | you will need to do this if you are testing a compiler toolchain, | 
|---|
| 5040 | because the default values do not take into account host and target | 
|---|
| 5041 | names. | 
|---|
| 5042 | @opindex dejagnu | 
|---|
| 5043 | @vindex DEJATOOL | 
|---|
| 5044 | @vindex EXPECT | 
|---|
| 5045 | @vindex RUNTEST | 
|---|
| 5046 |  | 
|---|
| 5047 | The contents of the variable @code{RUNTESTFLAGS} are passed to the | 
|---|
| 5048 | @code{runtest} invocation.  This is considered a ``user variable'' | 
|---|
| 5049 | (@pxref{User Variables}).  If you need to set @code{runtest} flags in | 
|---|
| 5050 | @file{Makefile.am}, you can use @code{AM_RUNTESTFLAGS} instead. | 
|---|
| 5051 | @vindex RUNTESTFLAGS | 
|---|
| 5052 | @vindex AM_RUNTESTFLAGS | 
|---|
| 5053 |  | 
|---|
| 5054 | @cindex @file{site.exp} | 
|---|
| 5055 | Automake will generate rules to create a local @file{site.exp} file, | 
|---|
| 5056 | defining various variables detected by @code{./configure}.  This file | 
|---|
| 5057 | is automatically read by DejaGnu.  It is OK for the user of a package | 
|---|
| 5058 | to edit this file in order to tune the test suite.  However this is | 
|---|
| 5059 | not the place where the test suite author should define new variables: | 
|---|
| 5060 | this should be done elsewhere in the real test suite code. | 
|---|
| 5061 | Especially, @file{site.exp} should not be distributed. | 
|---|
| 5062 |  | 
|---|
| 5063 | For more information regarding DejaGnu test suites, see @xref{Top, , , | 
|---|
| 5064 | dejagnu, The DejaGnu Manual}. | 
|---|
| 5065 |  | 
|---|
| 5066 | In either case, the testing is done via @samp{make check}. | 
|---|
| 5067 |  | 
|---|
| 5068 | @section Install Tests | 
|---|
| 5069 |  | 
|---|
| 5070 | The @code{installcheck} target is available to the user as a way to run | 
|---|
| 5071 | any tests after the package has been installed.  You can add tests to | 
|---|
| 5072 | this by writing an @code{installcheck-local} target. | 
|---|
| 5073 |  | 
|---|
| 5074 |  | 
|---|
| 5075 | @node Options, Miscellaneous, Tests, Top | 
|---|
| 5076 | @chapter Changing Automake's Behavior | 
|---|
| 5077 |  | 
|---|
| 5078 | Various features of Automake can be controlled by options in the | 
|---|
| 5079 | @file{Makefile.am}.  Such options are applied on a per-@file{Makefile} | 
|---|
| 5080 | basis when listed in a special @file{Makefile} variable named | 
|---|
| 5081 | @code{AUTOMAKE_OPTIONS}.  They are applied globally to all processed | 
|---|
| 5082 | @file{Makefiles} when listed in the first argument of | 
|---|
| 5083 | @code{AM_INIT_AUTOMAKE} in @file{configure.in}.  Currently understood | 
|---|
| 5084 | options are: | 
|---|
| 5085 | @vindex AUTOMAKE_OPTIONS | 
|---|
| 5086 |  | 
|---|
| 5087 | @table @asis | 
|---|
| 5088 | @item @code{gnits} | 
|---|
| 5089 | @itemx @code{gnu} | 
|---|
| 5090 | @itemx @code{foreign} | 
|---|
| 5091 | @itemx @code{cygnus} | 
|---|
| 5092 | @cindex Option, gnits | 
|---|
| 5093 | @cindex Option, gnu | 
|---|
| 5094 | @cindex Option, foreign | 
|---|
| 5095 | @cindex Option, cygnus | 
|---|
| 5096 |  | 
|---|
| 5097 | Set the strictness as appropriate.  The @code{gnits} option also implies | 
|---|
| 5098 | @code{readme-alpha} and @code{check-news}. | 
|---|
| 5099 |  | 
|---|
| 5100 | @item @code{ansi2knr} | 
|---|
| 5101 | @itemx @code{@var{path}/ansi2knr} | 
|---|
| 5102 | @cindex Option, ansi2knr | 
|---|
| 5103 | Turn on automatic de-ANSI-fication.  @xref{ANSI}.  If preceded by a | 
|---|
| 5104 | path, the generated @file{Makefile.in} will look in the specified | 
|---|
| 5105 | directory to find the @file{ansi2knr} program.  The path should be a | 
|---|
| 5106 | relative path to another directory in the same distribution (Automake | 
|---|
| 5107 | currently does not check this). | 
|---|
| 5108 |  | 
|---|
| 5109 | @item @code{check-news} | 
|---|
| 5110 | @cindex Option, check-news | 
|---|
| 5111 | Cause @code{make dist} to fail unless the current version number appears | 
|---|
| 5112 | in the first few lines of the @file{NEWS} file. | 
|---|
| 5113 |  | 
|---|
| 5114 | @item @code{dejagnu} | 
|---|
| 5115 | @cindex Option, dejagnu | 
|---|
| 5116 | Cause @code{dejagnu}-specific rules to be generated.  @xref{Tests}. | 
|---|
| 5117 |  | 
|---|
| 5118 | @item @code{dist-bzip2} | 
|---|
| 5119 | @cindex Option, dist-bzip2 | 
|---|
| 5120 | Generate a @code{dist-bzip2} target, creating a bzip2 tar archive of the | 
|---|
| 5121 | distribution.  @code{dist} will create it in addition to the other | 
|---|
| 5122 | formats.  bzip2 archives are frequently smaller than gzipped archives. | 
|---|
| 5123 | @trindex dist-bzip2 | 
|---|
| 5124 |  | 
|---|
| 5125 | @item @code{dist-shar} | 
|---|
| 5126 | @cindex Option, dist-shar | 
|---|
| 5127 | Generate a @code{dist-shar} target, creating a shar archive of the | 
|---|
| 5128 | distribution.  @code{dist} will create it in addition to the other | 
|---|
| 5129 | formats. | 
|---|
| 5130 | @trindex dist-shar | 
|---|
| 5131 |  | 
|---|
| 5132 | @item @code{dist-zip} | 
|---|
| 5133 | @cindex Option, dist-zip | 
|---|
| 5134 | Generate a @code{dist-zip} target, creating a zip archive of the | 
|---|
| 5135 | distribution.  @code{dist} will create it in addition to the other | 
|---|
| 5136 | formats. | 
|---|
| 5137 | @trindex dist-zip | 
|---|
| 5138 |  | 
|---|
| 5139 | @item @code{dist-tarZ} | 
|---|
| 5140 | @cindex Option, dist-tarZ | 
|---|
| 5141 | Generate a @code{dist-tarZ} target, creating a compressed tar archive of | 
|---|
| 5142 | the distribution.  @code{dist} will create it in addition to the other | 
|---|
| 5143 | formats. | 
|---|
| 5144 | @trindex dist-tarZ | 
|---|
| 5145 |  | 
|---|
| 5146 | @item @code{no-define} | 
|---|
| 5147 | @cindex Option, no-define | 
|---|
| 5148 | This options is meaningful only when passed as an argument to | 
|---|
| 5149 | @code{AM_INIT_AUTOMAKE}.  It will prevent the @code{PACKAGE} and | 
|---|
| 5150 | @code{VERSION} variables to be @code{AC_DEFINE}d. | 
|---|
| 5151 |  | 
|---|
| 5152 | @item @code{no-dependencies} | 
|---|
| 5153 | @cindex Option, no-dependencies | 
|---|
| 5154 | This is similar to using @samp{--include-deps} on the command line, but | 
|---|
| 5155 | is useful for those situations where you don't have the necessary bits | 
|---|
| 5156 | to make automatic dependency tracking work @xref{Dependencies}.  In this | 
|---|
| 5157 | case the effect is to effectively disable automatic dependency tracking. | 
|---|
| 5158 |  | 
|---|
| 5159 | @item @code{no-exeext} | 
|---|
| 5160 | @cindex Option, no-exeext | 
|---|
| 5161 | If your @file{Makefile.am} defines a target @samp{foo}, it will override | 
|---|
| 5162 | a target named @samp{foo$(EXEEXT)}.  This is necessary when | 
|---|
| 5163 | @code{EXEEXT} is found to be empty.  However, by default automake will | 
|---|
| 5164 | generate an error for this use.  The @code{no-exeext} option will | 
|---|
| 5165 | disable this error.  This is intended for use only where it is known in | 
|---|
| 5166 | advance that the package will not be ported to Windows, or any other | 
|---|
| 5167 | operating system using extensions on executables. | 
|---|
| 5168 |  | 
|---|
| 5169 | @item @code{no-installinfo} | 
|---|
| 5170 | @cindex Option, no-installinfo | 
|---|
| 5171 | The generated @file{Makefile.in} will not cause info pages to be built | 
|---|
| 5172 | or installed by default.  However, @code{info} and @code{install-info} | 
|---|
| 5173 | targets will still be available.  This option is disallowed at | 
|---|
| 5174 | @samp{GNU} strictness and above. | 
|---|
| 5175 | @trindex info | 
|---|
| 5176 | @trindex install-info | 
|---|
| 5177 |  | 
|---|
| 5178 | @item @code{no-installman} | 
|---|
| 5179 | @cindex Option, no-installman | 
|---|
| 5180 | The generated @file{Makefile.in} will not cause man pages to be | 
|---|
| 5181 | installed by default.  However, an @code{install-man} target will still | 
|---|
| 5182 | be available for optional installation.  This option is disallowed at | 
|---|
| 5183 | @samp{GNU} strictness and above. | 
|---|
| 5184 | @trindex install-man | 
|---|
| 5185 |  | 
|---|
| 5186 | @item @code{nostdinc} | 
|---|
| 5187 | @cindex Option, nostdinc | 
|---|
| 5188 | This option can be used to disable the standard @samp{-I} options which | 
|---|
| 5189 | are ordinarily automatically provided by Automake. | 
|---|
| 5190 |  | 
|---|
| 5191 | @item @code{no-texinfo.tex} | 
|---|
| 5192 | @cindex Option, no-texinfo | 
|---|
| 5193 | Don't require @file{texinfo.tex}, even if there are texinfo files in | 
|---|
| 5194 | this directory. | 
|---|
| 5195 |  | 
|---|
| 5196 | @item @code{readme-alpha} | 
|---|
| 5197 | @cindex Option, readme-alpha | 
|---|
| 5198 | If this release is an alpha release, and the file @file{README-alpha} | 
|---|
| 5199 | exists, then it will be added to the distribution.  If this option is | 
|---|
| 5200 | given, version numbers are expected to follow one of two forms.  The | 
|---|
| 5201 | first form is @samp{@var{MAJOR}.@var{MINOR}.@var{ALPHA}}, where each | 
|---|
| 5202 | element is a number; the final period and number should be left off for | 
|---|
| 5203 | non-alpha releases.  The second form is | 
|---|
| 5204 | @samp{@var{MAJOR}.@var{MINOR}@var{ALPHA}}, where @var{ALPHA} is a | 
|---|
| 5205 | letter; it should be omitted for non-alpha releases. | 
|---|
| 5206 |  | 
|---|
| 5207 | @item @code{std-options} | 
|---|
| 5208 | @cindex Options, std-options | 
|---|
| 5209 | @cindex make installcheck | 
|---|
| 5210 | Make the @code{installcheck} target check that installed scripts and | 
|---|
| 5211 | programs support the @code{--help} and @code{--version} options. | 
|---|
| 5212 | This also provides a basic check that the program's | 
|---|
| 5213 | run-time dependencies are satisfied after installation. | 
|---|
| 5214 |  | 
|---|
| 5215 | @vindex AM_INSTALLCHECK_STD_OPTIONS_EXEMPT | 
|---|
| 5216 | In a few situations, programs (or scripts) have to be exempted from this | 
|---|
| 5217 | test.  For instance @command{false} (from GNU sh-utils) is never | 
|---|
| 5218 | successful, even for @code{--help} or @code{--version}.  You can list | 
|---|
| 5219 | such programs in the variable @code{AM_INSTALLCHECK_STD_OPTIONS_EXEMPT}. | 
|---|
| 5220 | Programs (not scripts) listed in this variable should be suffixed by | 
|---|
| 5221 | @code{$(EXEEXT)} for the sake of Win32 or OS/2.  For instance suppose we | 
|---|
| 5222 | build @code{false} as a program but @code{true.sh} as a script, and that | 
|---|
| 5223 | neither of them support @code{--help} or @code{--version}: | 
|---|
| 5224 |  | 
|---|
| 5225 | @example | 
|---|
| 5226 | AUTOMAKE_OPTIONS = std-options | 
|---|
| 5227 | bin_PROGRAMS = false ... | 
|---|
| 5228 | bin_SCRIPTS = true.sh ... | 
|---|
| 5229 | AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = false$(EXEEXT) true.sh | 
|---|
| 5230 | @end example | 
|---|
| 5231 |  | 
|---|
| 5232 | @item @code{subdir-objects} | 
|---|
| 5233 | If this option is specified, then objects are placed into the | 
|---|
| 5234 | subdirectory of the build directory corresponding to the subdirectory of | 
|---|
| 5235 | the source file.  For instance if the source file is | 
|---|
| 5236 | @file{subdir/file.cxx}, then the output file would be | 
|---|
| 5237 | @file{subdir/file.o}. | 
|---|
| 5238 |  | 
|---|
| 5239 | @item @var{version} | 
|---|
| 5240 | @cindex Option, version | 
|---|
| 5241 | A version number (e.g. @samp{0.30}) can be specified.  If Automake is not | 
|---|
| 5242 | newer than the version specified, creation of the @file{Makefile.in} | 
|---|
| 5243 | will be suppressed. | 
|---|
| 5244 |  | 
|---|
| 5245 | @item @code{-W@var{category}} or @code{--warnings=@var{category}} | 
|---|
| 5246 | @cindex Option, warnings | 
|---|
| 5247 | These options behave exactly like their command-line counterpart | 
|---|
| 5248 | (@pxref{Invoking Automake}).  This allows you to enable or disable some | 
|---|
| 5249 | warning categories on a per-file basis.  You can also setup some warnings | 
|---|
| 5250 | for your entire project; for instance try @code{AM_INIT_AUTOMAKE([-Wall])} | 
|---|
| 5251 | in your @file{configure.in}. | 
|---|
| 5252 |  | 
|---|
| 5253 | @end table | 
|---|
| 5254 |  | 
|---|
| 5255 | Unrecognized options are diagnosed by @code{automake}. | 
|---|
| 5256 |  | 
|---|
| 5257 | If you want an option to apply to all the files in the tree, you can use | 
|---|
| 5258 | the @code{AM_INIT_AUTOMAKE} macro in @file{configure.in}. | 
|---|
| 5259 | @xref{Macros}. | 
|---|
| 5260 |  | 
|---|
| 5261 |  | 
|---|
| 5262 | @node Miscellaneous, Include, Options, Top | 
|---|
| 5263 | @chapter Miscellaneous Rules | 
|---|
| 5264 |  | 
|---|
| 5265 | There are a few rules and variables that didn't fit anywhere else. | 
|---|
| 5266 |  | 
|---|
| 5267 | @menu | 
|---|
| 5268 | * Tags::                        Interfacing to etags and mkid | 
|---|
| 5269 | * Suffixes::                    Handling new file extensions | 
|---|
| 5270 | * Multilibs::                   Support for multilibs. | 
|---|
| 5271 | @end menu | 
|---|
| 5272 |  | 
|---|
| 5273 |  | 
|---|
| 5274 | @node Tags, Suffixes, Miscellaneous, Miscellaneous | 
|---|
| 5275 | @section Interfacing to @code{etags} | 
|---|
| 5276 |  | 
|---|
| 5277 | @cindex TAGS support | 
|---|
| 5278 |  | 
|---|
| 5279 | Automake will generate rules to generate @file{TAGS} files for use with | 
|---|
| 5280 | GNU Emacs under some circumstances. | 
|---|
| 5281 |  | 
|---|
| 5282 | If any C, C++ or Fortran 77 source code or headers are present, then | 
|---|
| 5283 | @code{tags} and @code{TAGS} targets will be generated for the directory. | 
|---|
| 5284 | @trindex tags | 
|---|
| 5285 |  | 
|---|
| 5286 | At the topmost directory of a multi-directory package, a @code{tags} | 
|---|
| 5287 | target file will be generated which, when run, will generate a | 
|---|
| 5288 | @file{TAGS} file that includes by reference all @file{TAGS} files from | 
|---|
| 5289 | subdirectories. | 
|---|
| 5290 |  | 
|---|
| 5291 | The @code{tags} target will also be generated if the variable | 
|---|
| 5292 | @code{ETAGS_ARGS} is defined.  This variable is intended for use in | 
|---|
| 5293 | directories which contain taggable source that @code{etags} does not | 
|---|
| 5294 | understand.  The user can use the @code{ETAGSFLAGS} to pass additional | 
|---|
| 5295 | flags to @code{etags}; @code{AM_ETAGSFLAGS} is also available for use in | 
|---|
| 5296 | @file{Makefile.am}. | 
|---|
| 5297 | @vindex ETAGS_ARGS | 
|---|
| 5298 | @vindex ETAGSFLAGS | 
|---|
| 5299 | @vindex AM_ETAGSFLAGS | 
|---|
| 5300 |  | 
|---|
| 5301 | Here is how Automake generates tags for its source, and for nodes in its | 
|---|
| 5302 | Texinfo file: | 
|---|
| 5303 |  | 
|---|
| 5304 | @example | 
|---|
| 5305 | ETAGS_ARGS = automake.in --lang=none \ | 
|---|
| 5306 | --regex='/^@@node[ \t]+\([^,]+\)/\1/' automake.texi | 
|---|
| 5307 | @end example | 
|---|
| 5308 |  | 
|---|
| 5309 | If you add filenames to @samp{ETAGS_ARGS}, you will probably also | 
|---|
| 5310 | want to set @samp{TAGS_DEPENDENCIES}.  The contents of this variable | 
|---|
| 5311 | are added directly to the dependencies for the @code{tags} target. | 
|---|
| 5312 | @vindex TAGS_DEPENDENCIES | 
|---|
| 5313 |  | 
|---|
| 5314 | Automake also generates a @code{ctags} target which can be used to | 
|---|
| 5315 | build @command{vi}-style @file{tags} files.  The variable @code{CTAGS} | 
|---|
| 5316 | is the name of the program to invoke (by default @samp{ctags}); | 
|---|
| 5317 | @code{CTAGSFLAGS} can be used by the user to pass additional flags, | 
|---|
| 5318 | and @code{AM_CTAGSFLAGS} can be used by the @file{Makefile.am}. | 
|---|
| 5319 |  | 
|---|
| 5320 | Automake will also generate an @code{ID} target which will run | 
|---|
| 5321 | @code{mkid} on the source.  This is only supported on a | 
|---|
| 5322 | directory-by-directory basis. | 
|---|
| 5323 | @trindex id | 
|---|
| 5324 |  | 
|---|
| 5325 | Automake also supports the @uref{http://www.gnu.org/software/global/, | 
|---|
| 5326 | GNU Global Tags program}.  The @code{GTAGS} target runs Global Tags | 
|---|
| 5327 | automatically and puts the result in the top build directory.  The | 
|---|
| 5328 | variable @code{GTAGS_ARGS} holds arguments which are passed to | 
|---|
| 5329 | @code{gtags}. | 
|---|
| 5330 | @vindex GTAGS_ARGS | 
|---|
| 5331 |  | 
|---|
| 5332 |  | 
|---|
| 5333 | @node Suffixes, Multilibs, Tags, Miscellaneous | 
|---|
| 5334 | @section Handling new file extensions | 
|---|
| 5335 |  | 
|---|
| 5336 | @cindex Adding new SUFFIXES | 
|---|
| 5337 | @cindex SUFFIXES, adding | 
|---|
| 5338 | @vindex SUFFIXES | 
|---|
| 5339 |  | 
|---|
| 5340 | It is sometimes useful to introduce a new implicit rule to handle a file | 
|---|
| 5341 | type that Automake does not know about. | 
|---|
| 5342 |  | 
|---|
| 5343 | For instance, suppose you had a compiler which could compile @samp{.foo} | 
|---|
| 5344 | files to @samp{.o} files.  You would simply define an suffix rule for | 
|---|
| 5345 | your language: | 
|---|
| 5346 |  | 
|---|
| 5347 | @example | 
|---|
| 5348 | .foo.o: | 
|---|
| 5349 | foocc -c -o $@@ $< | 
|---|
| 5350 | @end example | 
|---|
| 5351 |  | 
|---|
| 5352 | Then you could directly use a @samp{.foo} file in a @samp{_SOURCES} | 
|---|
| 5353 | variable and expect the correct results: | 
|---|
| 5354 |  | 
|---|
| 5355 | @example | 
|---|
| 5356 | bin_PROGRAMS = doit | 
|---|
| 5357 | doit_SOURCES = doit.foo | 
|---|
| 5358 | @end example | 
|---|
| 5359 |  | 
|---|
| 5360 | This was the simpler and more common case.  In other cases, you will | 
|---|
| 5361 | have to help Automake to figure which extensions you are defining your | 
|---|
| 5362 | suffix rule for.  This usually happens when your extensions does not | 
|---|
| 5363 | start with a dot.  Then, all you have to do is to put a list of new | 
|---|
| 5364 | suffixes in the @code{SUFFIXES} variable @strong{before} you define your | 
|---|
| 5365 | implicit rule. | 
|---|
| 5366 |  | 
|---|
| 5367 | For instance the following definition prevents Automake to misinterpret | 
|---|
| 5368 | @samp{.idlC.cpp:} as an attempt to transform @samp{.idlC} into | 
|---|
| 5369 | @samp{.cpp}. | 
|---|
| 5370 |  | 
|---|
| 5371 | @example | 
|---|
| 5372 | SUFFIXES = .idl C.cpp | 
|---|
| 5373 | .idlC.cpp: | 
|---|
| 5374 | # whatever | 
|---|
| 5375 | @end example | 
|---|
| 5376 |  | 
|---|
| 5377 | As you may have noted, the @code{SUFFIXES} variable behaves like the | 
|---|
| 5378 | @code{.SUFFIXES} special target of @code{make}.  You should not touch | 
|---|
| 5379 | @code{.SUFFIXES} yourself, but use @code{SUFFIXES} instead and let | 
|---|
| 5380 | Automake generate the suffix list for @code{.SUFFIXES}.  Any given | 
|---|
| 5381 | @code{SUFFIXES} go at the start of the generated suffixes list, followed | 
|---|
| 5382 | by Automake generated suffixes not already in the list. | 
|---|
| 5383 |  | 
|---|
| 5384 | @node Multilibs,  , Suffixes, Miscellaneous | 
|---|
| 5385 | @section Support for Multilibs | 
|---|
| 5386 |  | 
|---|
| 5387 | Automake has support for an obscure feature called multilibs.  A | 
|---|
| 5388 | @dfn{multilib} is a library which is built for multiple different ABIs | 
|---|
| 5389 | at a single time; each time the library is built with a different target | 
|---|
| 5390 | flag combination.  This is only useful when the library is intended to | 
|---|
| 5391 | be cross-compiled, and it is almost exclusively used for compiler | 
|---|
| 5392 | support libraries. | 
|---|
| 5393 |  | 
|---|
| 5394 | The multilib support is still experimental.  Only use it if you are | 
|---|
| 5395 | familiar with multilibs and can debug problems you might encounter. | 
|---|
| 5396 |  | 
|---|
| 5397 |  | 
|---|
| 5398 | @node Include, Conditionals, Miscellaneous, Top | 
|---|
| 5399 | @chapter Include | 
|---|
| 5400 |  | 
|---|
| 5401 | @cmindex include | 
|---|
| 5402 | @cindex Including Makefile fragment | 
|---|
| 5403 | @cindex Makefile fragment, including | 
|---|
| 5404 |  | 
|---|
| 5405 | Automake supports an @code{include} directive which can be used to | 
|---|
| 5406 | include other @file{Makefile} fragments when @code{automake} is run. | 
|---|
| 5407 | Note that these fragments are read and interpreted by @code{automake}, | 
|---|
| 5408 | not by @code{make}.  As with conditionals, @code{make} has no idea that | 
|---|
| 5409 | @code{include} is in use. | 
|---|
| 5410 |  | 
|---|
| 5411 | There are two forms of @code{include}: | 
|---|
| 5412 |  | 
|---|
| 5413 | @table @code | 
|---|
| 5414 | @item include $(srcdir)/file | 
|---|
| 5415 | Include a fragment which is found relative to the current source | 
|---|
| 5416 | directory. | 
|---|
| 5417 |  | 
|---|
| 5418 | @item include $(top_srcdir)/file | 
|---|
| 5419 | Include a fragment which is found relative to the top source directory. | 
|---|
| 5420 | @end table | 
|---|
| 5421 |  | 
|---|
| 5422 | Note that if a fragment is included inside a conditional, then the | 
|---|
| 5423 | condition applies to the entire contents of that fragment. | 
|---|
| 5424 |  | 
|---|
| 5425 | Makefile fragments included this way are always distributed because | 
|---|
| 5426 | there are needed to rebuild @file{Makefile.in}. | 
|---|
| 5427 |  | 
|---|
| 5428 | @node Conditionals, Gnits, Include, Top | 
|---|
| 5429 | @chapter Conditionals | 
|---|
| 5430 |  | 
|---|
| 5431 | @cindex Conditionals | 
|---|
| 5432 |  | 
|---|
| 5433 | Automake supports a simple type of conditionals. | 
|---|
| 5434 |  | 
|---|
| 5435 | @cvindex AM_CONDITIONAL | 
|---|
| 5436 | Before using a conditional, you must define it by using | 
|---|
| 5437 | @code{AM_CONDITIONAL} in the @code{configure.in} file (@pxref{Macros}). | 
|---|
| 5438 |  | 
|---|
| 5439 | @defmac AM_CONDITIONAL (@var{conditional}, @var{condition}) | 
|---|
| 5440 | The conditional name, @var{conditional}, should be a simple string | 
|---|
| 5441 | starting with a letter and containing only letters, digits, and | 
|---|
| 5442 | underscores.  It must be different from @samp{TRUE} and @samp{FALSE} | 
|---|
| 5443 | which are reserved by Automake. | 
|---|
| 5444 |  | 
|---|
| 5445 | The shell @var{condition} (suitable for use in a shell @code{if} | 
|---|
| 5446 | statement) is evaluated when @code{configure} is run.  Note that you | 
|---|
| 5447 | must arrange for @emph{every} @code{AM_CONDITIONAL} to be invoked every | 
|---|
| 5448 | time @code{configure} is run -- if @code{AM_CONDITIONAL} is run | 
|---|
| 5449 | conditionally (e.g., in a shell @code{if} statement), then the result | 
|---|
| 5450 | will confuse automake. | 
|---|
| 5451 | @end defmac | 
|---|
| 5452 |  | 
|---|
| 5453 | @cindex --enable-debug, example | 
|---|
| 5454 | @cindex Example conditional --enable-debug | 
|---|
| 5455 | @cindex Conditional example,  --enable-debug | 
|---|
| 5456 |  | 
|---|
| 5457 | Conditionals typically depend upon options which the user provides to | 
|---|
| 5458 | the @code{configure} script.  Here is an example of how to write a | 
|---|
| 5459 | conditional which is true if the user uses the @samp{--enable-debug} | 
|---|
| 5460 | option. | 
|---|
| 5461 |  | 
|---|
| 5462 | @example | 
|---|
| 5463 | AC_ARG_ENABLE(debug, | 
|---|
| 5464 | [  --enable-debug    Turn on debugging], | 
|---|
| 5465 | [case "$@{enableval@}" in | 
|---|
| 5466 | yes) debug=true ;; | 
|---|
| 5467 | no)  debug=false ;; | 
|---|
| 5468 | *) AC_MSG_ERROR(bad value $@{enableval@} for --enable-debug) ;; | 
|---|
| 5469 | esac],[debug=false]) | 
|---|
| 5470 | AM_CONDITIONAL(DEBUG, test x$debug = xtrue) | 
|---|
| 5471 | @end example | 
|---|
| 5472 |  | 
|---|
| 5473 | Here is an example of how to use that conditional in @file{Makefile.am}: | 
|---|
| 5474 |  | 
|---|
| 5475 | @cmindex if | 
|---|
| 5476 | @cmindex endif | 
|---|
| 5477 | @cmindex else | 
|---|
| 5478 |  | 
|---|
| 5479 | @example | 
|---|
| 5480 | if DEBUG | 
|---|
| 5481 | DBG = debug | 
|---|
| 5482 | else | 
|---|
| 5483 | DBG = | 
|---|
| 5484 | endif | 
|---|
| 5485 | noinst_PROGRAMS = $(DBG) | 
|---|
| 5486 | @end example | 
|---|
| 5487 |  | 
|---|
| 5488 | This trivial example could also be handled using EXTRA_PROGRAMS | 
|---|
| 5489 | (@pxref{Conditional Programs}). | 
|---|
| 5490 |  | 
|---|
| 5491 | You may only test a single variable in an @code{if} statement, possibly | 
|---|
| 5492 | negated using @samp{!}.  The @code{else} statement may be omitted. | 
|---|
| 5493 | Conditionals may be nested to any depth.  You may specify an argument to | 
|---|
| 5494 | @code{else} in which case it must be the negation of the condition used | 
|---|
| 5495 | for the current @code{if}.  Similarly you may specify the condition | 
|---|
| 5496 | which is closed by an @code{end}: | 
|---|
| 5497 |  | 
|---|
| 5498 | @example | 
|---|
| 5499 | if DEBUG | 
|---|
| 5500 | DBG = debug | 
|---|
| 5501 | else !DEBUG | 
|---|
| 5502 | DBG = | 
|---|
| 5503 | endif !DEBUG | 
|---|
| 5504 | @end example | 
|---|
| 5505 |  | 
|---|
| 5506 | @noindent | 
|---|
| 5507 | Unbalanced conditions are errors. | 
|---|
| 5508 |  | 
|---|
| 5509 | Note that conditionals in Automake are not the same as conditionals in | 
|---|
| 5510 | GNU Make.  Automake conditionals are checked at configure time by the | 
|---|
| 5511 | @file{configure} script, and affect the translation from | 
|---|
| 5512 | @file{Makefile.in} to @file{Makefile}.  They are based on options passed | 
|---|
| 5513 | to @file{configure} and on results that @file{configure} has discovered | 
|---|
| 5514 | about the host system.  GNU Make conditionals are checked at @code{make} | 
|---|
| 5515 | time, and are based on variables passed to the make program or defined | 
|---|
| 5516 | in the @file{Makefile}. | 
|---|
| 5517 |  | 
|---|
| 5518 | Automake conditionals will work with any make program. | 
|---|
| 5519 |  | 
|---|
| 5520 |  | 
|---|
| 5521 | @node Gnits, Cygnus, Conditionals, Top | 
|---|
| 5522 | @chapter The effect of @code{--gnu} and @code{--gnits} | 
|---|
| 5523 |  | 
|---|
| 5524 | @cindex --gnu, required files | 
|---|
| 5525 | @cindex --gnu, complete description | 
|---|
| 5526 |  | 
|---|
| 5527 | The @samp{--gnu} option (or @samp{gnu} in the @samp{AUTOMAKE_OPTIONS} | 
|---|
| 5528 | variable) causes @code{automake} to check the following: | 
|---|
| 5529 |  | 
|---|
| 5530 | @itemize @bullet | 
|---|
| 5531 | @item | 
|---|
| 5532 | The files @file{INSTALL}, @file{NEWS}, @file{README}, @file{AUTHORS}, | 
|---|
| 5533 | and @file{ChangeLog}, plus one of @file{COPYING.LIB}, @file{COPYING.LESSER} | 
|---|
| 5534 | or @file{COPYING}, are required at the topmost directory of the package. | 
|---|
| 5535 |  | 
|---|
| 5536 | @item | 
|---|
| 5537 | The options @samp{no-installman} and @samp{no-installinfo} are | 
|---|
| 5538 | prohibited. | 
|---|
| 5539 | @end itemize | 
|---|
| 5540 |  | 
|---|
| 5541 | Note that this option will be extended in the future to do even more | 
|---|
| 5542 | checking; it is advisable to be familiar with the precise requirements | 
|---|
| 5543 | of the GNU standards.  Also, @samp{--gnu} can require certain | 
|---|
| 5544 | non-standard GNU programs to exist for use by various maintainer-only | 
|---|
| 5545 | targets; for instance in the future @code{pathchk} might be required for | 
|---|
| 5546 | @samp{make dist}. | 
|---|
| 5547 |  | 
|---|
| 5548 | @cindex --gnits, complete description | 
|---|
| 5549 |  | 
|---|
| 5550 | The @samp{--gnits} option does everything that @samp{--gnu} does, and | 
|---|
| 5551 | checks the following as well: | 
|---|
| 5552 |  | 
|---|
| 5553 | @itemize @bullet | 
|---|
| 5554 | @item | 
|---|
| 5555 | @samp{make installcheck} will check to make sure that the @code{--help} | 
|---|
| 5556 | and @code{--version} really print a usage message and a version string, | 
|---|
| 5557 | respectively.  This is the @code{std-options} option (@pxref{Options}). | 
|---|
| 5558 |  | 
|---|
| 5559 | @item | 
|---|
| 5560 | @samp{make dist} will check to make sure the @file{NEWS} file has been | 
|---|
| 5561 | updated to the current version. | 
|---|
| 5562 |  | 
|---|
| 5563 | @item | 
|---|
| 5564 | @samp{VERSION} is checked to make sure its format complies with Gnits | 
|---|
| 5565 | standards. | 
|---|
| 5566 | @c FIXME xref when standards are finished | 
|---|
| 5567 |  | 
|---|
| 5568 | @item | 
|---|
| 5569 | @cindex README-alpha | 
|---|
| 5570 | If @samp{VERSION} indicates that this is an alpha release, and the file | 
|---|
| 5571 | @file{README-alpha} appears in the topmost directory of a package, then | 
|---|
| 5572 | it is included in the distribution.  This is done in @samp{--gnits} | 
|---|
| 5573 | mode, and no other, because this mode is the only one where version | 
|---|
| 5574 | number formats are constrained, and hence the only mode where Automake | 
|---|
| 5575 | can automatically determine whether @file{README-alpha} should be | 
|---|
| 5576 | included. | 
|---|
| 5577 |  | 
|---|
| 5578 | @item | 
|---|
| 5579 | The file @file{THANKS} is required. | 
|---|
| 5580 | @end itemize | 
|---|
| 5581 |  | 
|---|
| 5582 |  | 
|---|
| 5583 | @node Cygnus, Extending, Gnits, Top | 
|---|
| 5584 | @chapter The effect of @code{--cygnus} | 
|---|
| 5585 |  | 
|---|
| 5586 | @cindex Cygnus strictness | 
|---|
| 5587 |  | 
|---|
| 5588 | Some packages, notably GNU GCC and GNU gdb, have a build environment | 
|---|
| 5589 | originally written at Cygnus Support (subsequently renamed Cygnus | 
|---|
| 5590 | Solutions, and then later purchased by Red Hat).  Packages with this | 
|---|
| 5591 | ancestry are sometimes referred to as ``Cygnus'' trees. | 
|---|
| 5592 |  | 
|---|
| 5593 | A Cygnus tree has slightly different rules for how a @file{Makefile.in} | 
|---|
| 5594 | is to be constructed.  Passing @samp{--cygnus} to @code{automake} will | 
|---|
| 5595 | cause any generated @file{Makefile.in} to comply with Cygnus rules. | 
|---|
| 5596 |  | 
|---|
| 5597 | Here are the precise effects of @samp{--cygnus}: | 
|---|
| 5598 |  | 
|---|
| 5599 | @itemize @bullet | 
|---|
| 5600 | @item | 
|---|
| 5601 | Info files are always created in the build directory, and not in the | 
|---|
| 5602 | source directory. | 
|---|
| 5603 |  | 
|---|
| 5604 | @item | 
|---|
| 5605 | @file{texinfo.tex} is not required if a Texinfo source file is | 
|---|
| 5606 | specified.  The assumption is that the file will be supplied, but in a | 
|---|
| 5607 | place that Automake cannot find.  This assumption is an artifact of how | 
|---|
| 5608 | Cygnus packages are typically bundled. | 
|---|
| 5609 |  | 
|---|
| 5610 | @item | 
|---|
| 5611 | @samp{make dist} is not supported, and the rules for it are not | 
|---|
| 5612 | generated.  Cygnus-style trees use their own distribution mechanism. | 
|---|
| 5613 |  | 
|---|
| 5614 | @item | 
|---|
| 5615 | Certain tools will be searched for in the build tree as well as in the | 
|---|
| 5616 | user's @samp{PATH}.  These tools are @code{runtest}, @code{expect}, | 
|---|
| 5617 | @code{makeinfo} and @code{texi2dvi}. | 
|---|
| 5618 |  | 
|---|
| 5619 | @item | 
|---|
| 5620 | @code{--foreign} is implied. | 
|---|
| 5621 |  | 
|---|
| 5622 | @item | 
|---|
| 5623 | The options @samp{no-installinfo} and @samp{no-dependencies} are | 
|---|
| 5624 | implied. | 
|---|
| 5625 |  | 
|---|
| 5626 | @item | 
|---|
| 5627 | The macros @samp{AM_MAINTAINER_MODE} and @samp{AM_CYGWIN32} are | 
|---|
| 5628 | required. | 
|---|
| 5629 |  | 
|---|
| 5630 | @item | 
|---|
| 5631 | The @code{check} target doesn't depend on @code{all}. | 
|---|
| 5632 | @end itemize | 
|---|
| 5633 |  | 
|---|
| 5634 | GNU maintainers are advised to use @samp{gnu} strictness in preference | 
|---|
| 5635 | to the special Cygnus mode.  Some day, perhaps, the differences between | 
|---|
| 5636 | Cygnus trees and GNU trees will disappear (for instance, as GCC is made | 
|---|
| 5637 | more standards compliant).  At that time the special Cygnus mode will be | 
|---|
| 5638 | removed. | 
|---|
| 5639 |  | 
|---|
| 5640 |  | 
|---|
| 5641 | @node Extending, Distributing, Cygnus, Top | 
|---|
| 5642 | @chapter When Automake Isn't Enough | 
|---|
| 5643 |  | 
|---|
| 5644 | Automake's implicit copying semantics means that many problems can be | 
|---|
| 5645 | worked around by simply adding some @code{make} targets and rules to | 
|---|
| 5646 | @file{Makefile.in}.  Automake will ignore these additions. | 
|---|
| 5647 |  | 
|---|
| 5648 | @cindex -local targets | 
|---|
| 5649 | @cindex local targets | 
|---|
| 5650 |  | 
|---|
| 5651 | There are some caveats to doing this.  Although you can overload a | 
|---|
| 5652 | target already used by Automake, it is often inadvisable, particularly | 
|---|
| 5653 | in the topmost directory of a package with subdirectories.  However, | 
|---|
| 5654 | various useful targets have a @samp{-local} version you can specify in | 
|---|
| 5655 | your @file{Makefile.in}.  Automake will supplement the standard target | 
|---|
| 5656 | with these user-supplied targets. | 
|---|
| 5657 |  | 
|---|
| 5658 | @trindex  all | 
|---|
| 5659 | @trindex  all-local | 
|---|
| 5660 | @trindex  info | 
|---|
| 5661 | @trindex  info-local | 
|---|
| 5662 | @trindex  dvi | 
|---|
| 5663 | @trindex  dvi-local | 
|---|
| 5664 | @trindex  ps | 
|---|
| 5665 | @trindex  ps-local | 
|---|
| 5666 | @trindex  pdf | 
|---|
| 5667 | @trindex  pdf-local | 
|---|
| 5668 | @trindex  check | 
|---|
| 5669 | @trindex  check-local | 
|---|
| 5670 | @trindex  install | 
|---|
| 5671 | @trindex  install-data-local | 
|---|
| 5672 | @trindex  install-exec | 
|---|
| 5673 | @trindex  install-exec-local | 
|---|
| 5674 | @trindex  uninstall | 
|---|
| 5675 | @trindex  uninstall-local | 
|---|
| 5676 | @trindex  mostlyclean | 
|---|
| 5677 | @trindex  mostlyclean-local | 
|---|
| 5678 | @trindex  clean | 
|---|
| 5679 | @trindex  clean-local | 
|---|
| 5680 | @trindex  distclean | 
|---|
| 5681 | @trindex  distclean-local | 
|---|
| 5682 | @trindex  installdirs | 
|---|
| 5683 | @trindex  installdirs-local | 
|---|
| 5684 | @trindex  installcheck | 
|---|
| 5685 | @trindex  installcheck-local | 
|---|
| 5686 |  | 
|---|
| 5687 | The targets that support a local version are @code{all}, @code{info}, | 
|---|
| 5688 | @code{dvi}, @code{ps}, @code{pdf}, @code{check}, @code{install-data}, | 
|---|
| 5689 | @code{install-exec}, @code{uninstall}, @code{installdirs}, | 
|---|
| 5690 | @code{installcheck} and the various @code{clean} targets | 
|---|
| 5691 | (@code{mostlyclean}, @code{clean}, @code{distclean}, and | 
|---|
| 5692 | @code{maintainer-clean}).  Note that there are no | 
|---|
| 5693 | @code{uninstall-exec-local} or @code{uninstall-data-local} targets; just | 
|---|
| 5694 | use @code{uninstall-local}.  It doesn't make sense to uninstall just | 
|---|
| 5695 | data or just executables. | 
|---|
| 5696 |  | 
|---|
| 5697 | For instance, here is one way to install a file in @file{/etc}: | 
|---|
| 5698 |  | 
|---|
| 5699 | @example | 
|---|
| 5700 | install-data-local: | 
|---|
| 5701 | $(INSTALL_DATA) $(srcdir)/afile $(DESTDIR)/etc/afile | 
|---|
| 5702 | @end example | 
|---|
| 5703 |  | 
|---|
| 5704 | @cindex -hook targets | 
|---|
| 5705 | @cindex hook targets | 
|---|
| 5706 |  | 
|---|
| 5707 | Some targets also have a way to run another target, called a @dfn{hook}, | 
|---|
| 5708 | after their work is done.  The hook is named after the principal target, | 
|---|
| 5709 | with @samp{-hook} appended.  The targets allowing hooks are | 
|---|
| 5710 | @code{install-data}, @code{install-exec}, @code{uninstall}, @code{dist}, | 
|---|
| 5711 | and @code{distcheck}. | 
|---|
| 5712 | @trindex install-data-hook | 
|---|
| 5713 | @trindex install-exec-hook | 
|---|
| 5714 | @trindex uninstall-hook | 
|---|
| 5715 | @trindex dist-hook | 
|---|
| 5716 |  | 
|---|
| 5717 | For instance, here is how to create a hard link to an installed program: | 
|---|
| 5718 |  | 
|---|
| 5719 | @example | 
|---|
| 5720 | install-exec-hook: | 
|---|
| 5721 | ln $(DESTDIR)$(bindir)/program$(EXEEXT) \ | 
|---|
| 5722 | $(DESTDIR)$(bindir)/proglink$(EXEEXT) | 
|---|
| 5723 | @end example | 
|---|
| 5724 |  | 
|---|
| 5725 | Although cheaper and more portable than symbolic links, hard links | 
|---|
| 5726 | will not work everywhere (for instance OS/2 does not have | 
|---|
| 5727 | @command{ln}).  Ideally you should fall back to @code{cp -p} when | 
|---|
| 5728 | @code{ln} does not work.  An easy way, if symbolic links are | 
|---|
| 5729 | acceptable to you, is to add @code{AC_PROG_LN_S} to | 
|---|
| 5730 | @file{configure.in} (@pxref{Particular Programs, , Particular Program | 
|---|
| 5731 | Checks, autoconf, The Autoconf Manual}) and use @code{$(LN_S)} in | 
|---|
| 5732 | @file{Makefile.am}. | 
|---|
| 5733 |  | 
|---|
| 5734 | @cindex versioned binaries, installing | 
|---|
| 5735 | @cindex installing versioned binaries | 
|---|
| 5736 | @cindex LN_S example | 
|---|
| 5737 | For instance, here is how you could install a versioned copy of a | 
|---|
| 5738 | program using @code{$(LN_S)}: | 
|---|
| 5739 |  | 
|---|
| 5740 | @example | 
|---|
| 5741 | install-exec-hook: | 
|---|
| 5742 | cd $(DESTDIR)$(bindir) && \ | 
|---|
| 5743 | mv -f prog$(EXEEXT) prog-$(VERSION)$(EXEEXT) && \ | 
|---|
| 5744 | $(LN_S) prog-$(VERSION)$(EXEEXT) prog$(EXEEXT) | 
|---|
| 5745 | @end example | 
|---|
| 5746 |  | 
|---|
| 5747 | Note that we rename the program so that a new version will erase the | 
|---|
| 5748 | symbolic link, not the real binary.  Also we @code{cd} into the | 
|---|
| 5749 | destination directory in order to create relative links. | 
|---|
| 5750 |  | 
|---|
| 5751 | @c FIXME should include discussion of variables you can use in these | 
|---|
| 5752 | @c rules | 
|---|
| 5753 |  | 
|---|
| 5754 | @node Distributing, API versioning, Extending, Top | 
|---|
| 5755 | @chapter Distributing @file{Makefile.in}s | 
|---|
| 5756 |  | 
|---|
| 5757 | Automake places no restrictions on the distribution of the resulting | 
|---|
| 5758 | @file{Makefile.in}s.  We still encourage software authors to distribute | 
|---|
| 5759 | their work under terms like those of the GPL, but doing so is not | 
|---|
| 5760 | required to use Automake. | 
|---|
| 5761 |  | 
|---|
| 5762 | Some of the files that can be automatically installed via the | 
|---|
| 5763 | @code{--add-missing} switch do fall under the GPL@.  However, these also | 
|---|
| 5764 | have a special exception allowing you to distribute them with your | 
|---|
| 5765 | package, regardless of the licensing you choose. | 
|---|
| 5766 |  | 
|---|
| 5767 |  | 
|---|
| 5768 | @node API versioning, FAQ, Distributing, Top | 
|---|
| 5769 | @chapter Automake API versioning | 
|---|
| 5770 |  | 
|---|
| 5771 | New Automake releases usually include bug fixes and new features. | 
|---|
| 5772 | Unfortunately they may also introduce new bugs and incompatibilities. | 
|---|
| 5773 | This makes four reasons why a package may require a particular Automake | 
|---|
| 5774 | version. | 
|---|
| 5775 |  | 
|---|
| 5776 | Things get worse when maintaining a large tree of packages, each one | 
|---|
| 5777 | requiring a different version of Automake.  In the past, this meant that | 
|---|
| 5778 | any developer (and sometime users) had to install several versions of | 
|---|
| 5779 | Automake in different places, and switch @samp{$PATH} appropriately for | 
|---|
| 5780 | each package. | 
|---|
| 5781 |  | 
|---|
| 5782 | Starting with version 1.6, Automake installs versioned binaries.  This | 
|---|
| 5783 | means you can install several versions of Automake in the same | 
|---|
| 5784 | @samp{$prefix}, and can select an arbitrary Automake version by running | 
|---|
| 5785 | @samp{automake-1.6} or @samp{automake-1.7} without juggling with | 
|---|
| 5786 | @samp{$PATH}.  Furthermore, @file{Makefile}'s generated by Automake 1.6 | 
|---|
| 5787 | will use @samp{automake-1.6} explicitly in their rebuild rules. | 
|---|
| 5788 |  | 
|---|
| 5789 | Note that @samp{1.6} in @samp{automake-1.6} is Automake's API version, | 
|---|
| 5790 | not Automake's version.  If a bug fix release is made, for instance | 
|---|
| 5791 | Automake 1.6.1, the API version will remain 1.6.  This means that a | 
|---|
| 5792 | package which work with Automake 1.6 should also work with 1.6.1; after | 
|---|
| 5793 | all, this is what people expect from bug fix releases. | 
|---|
| 5794 |  | 
|---|
| 5795 | Note that if your package relies on a feature or a bug fix introduced in | 
|---|
| 5796 | a release, you can pass this version as an option to Automake to ensure | 
|---|
| 5797 | older releases will not be used.  For instance, use this in your | 
|---|
| 5798 | @file{configure.in}: | 
|---|
| 5799 |  | 
|---|
| 5800 | @example | 
|---|
| 5801 | AM_INIT_AUTOMAKE(1.6.1)    dnl Require Automake 1.6.1 or better. | 
|---|
| 5802 | @end example | 
|---|
| 5803 | @noindent | 
|---|
| 5804 | or, in a particular @file{Makefile.am}: | 
|---|
| 5805 |  | 
|---|
| 5806 | @example | 
|---|
| 5807 | AUTOMAKE_OPTIONS = 1.6.1   # Require Automake 1.6.1 or better. | 
|---|
| 5808 | @end example | 
|---|
| 5809 | @noindent | 
|---|
| 5810 | Automake will print an error message if its version is | 
|---|
| 5811 | older than the requested version. | 
|---|
| 5812 |  | 
|---|
| 5813 |  | 
|---|
| 5814 | @heading What is in the API | 
|---|
| 5815 |  | 
|---|
| 5816 | Automake's programming interface is not easy to define.  Basically it | 
|---|
| 5817 | should include at least all @strong{documented} variables and targets | 
|---|
| 5818 | that a @samp{Makefile.am} author can use, any behavior associated with | 
|---|
| 5819 | them (e.g. the places where @samp{-hook}'s are run), the command line | 
|---|
| 5820 | interface of @samp{automake} and @samp{aclocal}, @dots{} | 
|---|
| 5821 |  | 
|---|
| 5822 | @heading What is not in the API | 
|---|
| 5823 |  | 
|---|
| 5824 | Every undocumented variable, target, or command line option, is not part | 
|---|
| 5825 | of the API@.  You should avoid using them, as they could change from one | 
|---|
| 5826 | version to the other (even in bug fix releases, if this helps to fix a | 
|---|
| 5827 | bug). | 
|---|
| 5828 |  | 
|---|
| 5829 | If it turns out you need to use such a undocumented feature, contact | 
|---|
| 5830 | @email{automake@@gnu.org} and try to get it documented and exercised by | 
|---|
| 5831 | the test-suite. | 
|---|
| 5832 |  | 
|---|
| 5833 | @node FAQ, Macro and Variable Index, API versioning, Top | 
|---|
| 5834 | @chapter Frequently Asked Questions about Automake | 
|---|
| 5835 |  | 
|---|
| 5836 | This chapter covers some questions that often come up on the mailing | 
|---|
| 5837 | lists. | 
|---|
| 5838 |  | 
|---|
| 5839 | @menu | 
|---|
| 5840 | * CVS::                         CVS and generated files | 
|---|
| 5841 | * maintainer-mode::             missing and AM_MAINTAINER_MODE | 
|---|
| 5842 | * wildcards::                   Why doesn't Automake support wildcards? | 
|---|
| 5843 | * distcleancheck::              Files left in build directory after distclean | 
|---|
| 5844 | * renamed objects::             Why are object files sometimes renamed? | 
|---|
| 5845 | @end menu | 
|---|
| 5846 |  | 
|---|
| 5847 | @node CVS, maintainer-mode, FAQ, FAQ | 
|---|
| 5848 | @section CVS and generated files | 
|---|
| 5849 |  | 
|---|
| 5850 | @subsection Background: distributed generated files | 
|---|
| 5851 | @cindex generated files, distributed | 
|---|
| 5852 | @cindex rebuild rules | 
|---|
| 5853 |  | 
|---|
| 5854 | Packages made with Autoconf and Automake ship with some generated | 
|---|
| 5855 | files like @file{configure} or @file{Makefile.in}.  These files were | 
|---|
| 5856 | generated on the developer's host and are distributed so that | 
|---|
| 5857 | end-users do not have to install the maintainer tools required to | 
|---|
| 5858 | rebuild them.  Other generated files like Lex scanners, Yacc parsers, | 
|---|
| 5859 | or Info documentation, are usually distributed on similar grounds. | 
|---|
| 5860 |  | 
|---|
| 5861 | Automake outputs rules in @file{Makefile}s to rebuild these files.  For | 
|---|
| 5862 | instance @command{make} will run @command{autoconf} to rebuild | 
|---|
| 5863 | @file{configure} whenever @file{configure.in} is changed.  This makes | 
|---|
| 5864 | development safer by ensuring a @file{configure} is never out-of-date | 
|---|
| 5865 | with respect to @file{configure.in}. | 
|---|
| 5866 |  | 
|---|
| 5867 | As generated files shipped in packages are up-to-date, and because | 
|---|
| 5868 | @command{tar} preserves timestamps, these rebuild rules are not | 
|---|
| 5869 | triggered when a user unpacks and builds a package. | 
|---|
| 5870 |  | 
|---|
| 5871 | @subsection Background: CVS and timestamps | 
|---|
| 5872 | @cindex timestamps and CVS | 
|---|
| 5873 | @cindex CVS and timestamps | 
|---|
| 5874 |  | 
|---|
| 5875 | Unless you use CVS keywords (in which case files must be updated at | 
|---|
| 5876 | commit time), CVS preserves timestamps during @code{cvs commit} and | 
|---|
| 5877 | @code{cvs import -d} operations. | 
|---|
| 5878 |  | 
|---|
| 5879 | When you check out a file using @code{cvs checkout} its timestamp is | 
|---|
| 5880 | set to that of the revision which is being checked out. | 
|---|
| 5881 |  | 
|---|
| 5882 | However, during @command{cvs update}, files will have the date of the | 
|---|
| 5883 | update, not the original timestamp of this revision.  This is meant to | 
|---|
| 5884 | make sure that @command{make} notices sources files have been updated. | 
|---|
| 5885 |  | 
|---|
| 5886 | This timestamp shift is troublesome when both sources and generated | 
|---|
| 5887 | files are kept under CVS.  Because CVS processes files in alphabetical | 
|---|
| 5888 | order, @file{configure.in} will appear older than @file{configure} | 
|---|
| 5889 | after a @command{cvs update} that updates both files, even if | 
|---|
| 5890 | @file{configure} was newer than @file{configure.in} when it was | 
|---|
| 5891 | checked in.  Calling @code{make} will then trigger a spurious rebuild | 
|---|
| 5892 | of @file{configure}. | 
|---|
| 5893 |  | 
|---|
| 5894 | @subsection Living with CVS in Autoconfiscated projects | 
|---|
| 5895 | @cindex CVS and generated files | 
|---|
| 5896 | @cindex generated files and CVS | 
|---|
| 5897 |  | 
|---|
| 5898 | There are basically two clans amongst maintainers: those who keep all | 
|---|
| 5899 | distributed files under CVS, including generated files, and those who | 
|---|
| 5900 | keep generated files @emph{out} of CVS. | 
|---|
| 5901 |  | 
|---|
| 5902 | @subsubheading All files in CVS | 
|---|
| 5903 |  | 
|---|
| 5904 | @itemize @bullet | 
|---|
| 5905 | @item | 
|---|
| 5906 | The CVS repository contains all distributed files so you know exactly | 
|---|
| 5907 | what is distributed, and you can checkout any prior version entirely. | 
|---|
| 5908 |  | 
|---|
| 5909 | @item | 
|---|
| 5910 | Maintainers can see how generated files evolve (for instance you can | 
|---|
| 5911 | see what happens to your @file{Makefile.in}s when you upgrade Automake | 
|---|
| 5912 | and make sure they look OK). | 
|---|
| 5913 |  | 
|---|
| 5914 | @item | 
|---|
| 5915 | Users do not need the autotools to build a checkout of the project, it | 
|---|
| 5916 | works just like a released tarball. | 
|---|
| 5917 |  | 
|---|
| 5918 | @item | 
|---|
| 5919 | If users use @command{cvs update} to update their copy, instead of | 
|---|
| 5920 | @command{cvs checkout} to fetch a fresh one, timestamps will be | 
|---|
| 5921 | inaccurate.  Some rebuild rules will be triggered and attempt to | 
|---|
| 5922 | run developer tools such as @command{autoconf} or @command{automake}. | 
|---|
| 5923 |  | 
|---|
| 5924 | Actually, calls to such tools are all wrapped into a call to the | 
|---|
| 5925 | @command{missing} script discussed later (@pxref{maintainer-mode}). | 
|---|
| 5926 | @command{missing} will take care of fixing the timestamps when these | 
|---|
| 5927 | tools are not installed, so that the build can continue. | 
|---|
| 5928 |  | 
|---|
| 5929 | @item | 
|---|
| 5930 | In distributed development, developers are likely to have different | 
|---|
| 5931 | version of the maintainer tools installed.  In this case rebuilds | 
|---|
| 5932 | triggered by timestamp lossage will lead to spurious changes | 
|---|
| 5933 | to generated files.  There are several solutions to this: | 
|---|
| 5934 |  | 
|---|
| 5935 | @itemize | 
|---|
| 5936 | @item | 
|---|
| 5937 | All developers should use the same versions, so that the rebuilt files | 
|---|
| 5938 | are identical to files in CVS.  (This starts to be difficult when each | 
|---|
| 5939 | project you work on uses different versions.) | 
|---|
| 5940 | @item | 
|---|
| 5941 | Or people use a script to fix the timestamp after a checkout (the GCC | 
|---|
| 5942 | folks have such a script). | 
|---|
| 5943 | @item | 
|---|
| 5944 | Or @file{configure.in} uses @code{AM_MAINTAINER_MODE}, which will | 
|---|
| 5945 | disable all these rebuild rules by default.  This is further discussed | 
|---|
| 5946 | in @ref{maintainer-mode}. | 
|---|
| 5947 | @end itemize | 
|---|
| 5948 |  | 
|---|
| 5949 | @item | 
|---|
| 5950 | Although we focused on spurious rebuilds, the converse can also | 
|---|
| 5951 | happen.  CVS's timestamp handling can also let you think an | 
|---|
| 5952 | out-of-date file is up-to-date. | 
|---|
| 5953 |  | 
|---|
| 5954 | For instance, suppose a developer has modified @file{Makefile.am} and | 
|---|
| 5955 | rebuilt @file{Makefile.in}, and then decide to do a last-minute change | 
|---|
| 5956 | to @file{Makefile.am} right before checking in both files (without | 
|---|
| 5957 | rebuilding @file{Makefile.in} to account for the change). | 
|---|
| 5958 |  | 
|---|
| 5959 | This last change to @file{Makefile.am} make the copy of | 
|---|
| 5960 | @file{Makefile.in} out-of-date.  Since CVS processes files | 
|---|
| 5961 | alphabetically, when another developer @code{cvs update} his or her | 
|---|
| 5962 | tree, @file{Makefile.in} will happen to be newer than | 
|---|
| 5963 | @file{Makefile.am}.  This other developer will not see | 
|---|
| 5964 | @file{Makefile.in} is out-of-date. | 
|---|
| 5965 |  | 
|---|
| 5966 | @end itemize | 
|---|
| 5967 |  | 
|---|
| 5968 | @subsubheading Generated files out of CVS | 
|---|
| 5969 |  | 
|---|
| 5970 | One way to get CVS and @code{make} working peacefully is to never | 
|---|
| 5971 | store generated files in CVS, i.e., do not CVS-control files which are | 
|---|
| 5972 | @code{Makefile} targets (or @emph{derived} files in Make terminology). | 
|---|
| 5973 |  | 
|---|
| 5974 | This way developers are not annoyed by changes to generated files.  It | 
|---|
| 5975 | does not matter if they all have different versions (assuming they are | 
|---|
| 5976 | compatible, of course).  And finally, timestamps are not lost, changes | 
|---|
| 5977 | to sources files can't be missed as in the | 
|---|
| 5978 | @file{Makefile.am}/@file{Makefile.in} example discussed earlier. | 
|---|
| 5979 |  | 
|---|
| 5980 | The drawback is that the CVS repository is not an exact copy of what | 
|---|
| 5981 | is distributed and that users now need to install various development | 
|---|
| 5982 | tools (maybe even specific versions) before they can build a checkout. | 
|---|
| 5983 | But, after all, CVS's job is versioning, not distribution. | 
|---|
| 5984 |  | 
|---|
| 5985 | Allowing developers to use different versions of their tools can also | 
|---|
| 5986 | hide bugs during distributed development.  Indeed, developers will be | 
|---|
| 5987 | using (hence testing) their own generated files, instead of the | 
|---|
| 5988 | generated files that will be released actually.  The developer who | 
|---|
| 5989 | prepares the tarball might be using a version of the tool that | 
|---|
| 5990 | produces bogus output (for instance a non-portable C file), something | 
|---|
| 5991 | other developers could have noticed if they weren't using their own | 
|---|
| 5992 | versions of this tool. | 
|---|
| 5993 |  | 
|---|
| 5994 | @subsection Third-party files | 
|---|
| 5995 | @cindex CVS and third-party files | 
|---|
| 5996 | @cindex third-party files and CVS | 
|---|
| 5997 |  | 
|---|
| 5998 | Another class of files not discussed here (because they do not cause | 
|---|
| 5999 | timestamp issues) are files which are shipped with a package, but | 
|---|
| 6000 | maintained elsewhere.  For instance tools like @command{gettextize} | 
|---|
| 6001 | and @command{autopoint} (from Gettext) or @command{libtoolize} (from | 
|---|
| 6002 | Libtool), will install or update files in your package. | 
|---|
| 6003 |  | 
|---|
| 6004 | These files, whether they are kept under CVS or not, raise similar | 
|---|
| 6005 | concerns about version mismatch between developers' tools.  The | 
|---|
| 6006 | Gettext manual has a section about this, see @ref{CVS Issues, CVS | 
|---|
| 6007 | Issues, Integrating with CVS, gettext, GNU gettext tools}. | 
|---|
| 6008 |  | 
|---|
| 6009 | @node maintainer-mode, wildcards, CVS, FAQ | 
|---|
| 6010 | @section @command{missing} and @code{AM_MAINTAINER_MODE} | 
|---|
| 6011 |  | 
|---|
| 6012 | @subsection @command{missing} | 
|---|
| 6013 | @cindex missing, purpose | 
|---|
| 6014 |  | 
|---|
| 6015 | The @command{missing} script is a wrapper around several maintainer | 
|---|
| 6016 | tools, designed to warn users if a maintainer tool is required but | 
|---|
| 6017 | missing.  Typical maintainer tools are @command{autoconf}, | 
|---|
| 6018 | @command{automake}, @command{bison}, etc.  Because file generated by | 
|---|
| 6019 | these tools are shipped with the other sources of a package, these | 
|---|
| 6020 | tools shouldn't be required during a user build and they are not | 
|---|
| 6021 | checked for in @file{configure}. | 
|---|
| 6022 |  | 
|---|
| 6023 | However, if for some reason a rebuild rule is triggered and involves a | 
|---|
| 6024 | missing tool, @command{missing} will notice it and warn the user. | 
|---|
| 6025 | Besides the warning, when a tool is missing, @command{missing} will | 
|---|
| 6026 | attempt to fix timestamps in a way which allow the build to continue. | 
|---|
| 6027 | For instance @command{missing} will touch @file{configure} if | 
|---|
| 6028 | @command{autoconf} is not installed.  When all distributed files are | 
|---|
| 6029 | kept under CVS, this feature of @command{missing} allows user | 
|---|
| 6030 | @emph{with no maintainer tools} to build a package off CVS, bypassing | 
|---|
| 6031 | any timestamp inconsistency implied by @code{cvs update}. | 
|---|
| 6032 |  | 
|---|
| 6033 | If the required tool is installed, @command{missing} will run it and | 
|---|
| 6034 | won't attempt to continue after failures.  This is correct during | 
|---|
| 6035 | development: developers love fixing failures.  However, users with | 
|---|
| 6036 | wrong versions of maintainer tools may get an error when the rebuild | 
|---|
| 6037 | rule is spuriously triggered, halting the build.  This failure to let | 
|---|
| 6038 | the build continue is one of the arguments of the | 
|---|
| 6039 | @code{AM_MAINTAINER_MODE} advocates. | 
|---|
| 6040 |  | 
|---|
| 6041 | @subsection @code{AM_MAINTAINER_MODE} | 
|---|
| 6042 | @cindex AM_MAINTAINER_MODE, purpose | 
|---|
| 6043 | @cvindex AM_MAINTAINER_MODE | 
|---|
| 6044 |  | 
|---|
| 6045 | @code{AM_MAINTAINER_MODE} disables the so called "rebuild rules" by | 
|---|
| 6046 | default.  If you have @code{AM_MAINTAINER_MODE} in | 
|---|
| 6047 | @file{configure.ac}, and run @code{./configure && make}, then | 
|---|
| 6048 | @command{make} will *never* attempt to rebuilt @file{configure}, | 
|---|
| 6049 | @file{Makefile.in}s, Lex or Yacc outputs, etc.  I.e., this disables | 
|---|
| 6050 | build rules for files which are usually distributed and that users | 
|---|
| 6051 | should normally not have to update. | 
|---|
| 6052 |  | 
|---|
| 6053 | If you run @code{./configure --enable-maintainer-mode}, then these | 
|---|
| 6054 | rebuild rules will be active. | 
|---|
| 6055 |  | 
|---|
| 6056 | People use @code{AM_MAINTAINER_MODE} either because they do want their | 
|---|
| 6057 | users (or themselves) annoyed by timestamps lossage (@pxref{CVS}), or | 
|---|
| 6058 | because they simply can't stand the rebuild rules and prefer running | 
|---|
| 6059 | maintainer tools explicitly. | 
|---|
| 6060 |  | 
|---|
| 6061 | @code{AM_MAINTAINER_MODE} also allows you to disable some custom build | 
|---|
| 6062 | rules conditionally.  Some developers use this feature to disable | 
|---|
| 6063 | rules that need exotic tools that users may not have available. | 
|---|
| 6064 |  | 
|---|
| 6065 | Several years ago Fran@,{c}ois Pinard pointed out several arguments | 
|---|
| 6066 | against @code{AM_MAINTAINER_MODE}.  Most of them relate to insecurity. | 
|---|
| 6067 | By removing dependencies you get non-dependable builds: change to | 
|---|
| 6068 | sources files can have no effect on generated files and this can be | 
|---|
| 6069 | very confusing when unnoticed.  He adds that security shouldn't be | 
|---|
| 6070 | reserved to maintainers (what @code{--enable-maintainer-mode} | 
|---|
| 6071 | suggests), on the contrary.  If one user has to modify a | 
|---|
| 6072 | @file{Makefile.am}, then either @file{Makefile.in} should be updated | 
|---|
| 6073 | or a warning should be output (this is what Automake uses | 
|---|
| 6074 | @code{missing} for) but the last thing you want is that nothing | 
|---|
| 6075 | happens and the user doesn't notice it (this is what happens when | 
|---|
| 6076 | rebuild rules are disabled by @code{AM_MAINTAINER_MODE}). | 
|---|
| 6077 |  | 
|---|
| 6078 | Jim Meyering, the inventor of the @code{AM_MAINTAINER_MODE} macro was | 
|---|
| 6079 | swayed by Fran@,{c}ois's arguments, and got rid of | 
|---|
| 6080 | @code{AM_MAINTAINER_MODE} in all of his packages. | 
|---|
| 6081 |  | 
|---|
| 6082 | Still many people continue to use @code{AM_MAINTAINER_MODE}, because | 
|---|
| 6083 | it helps them working on projects where all files are kept under CVS, | 
|---|
| 6084 | and because @command{missing} isn't enough if you have the wrong | 
|---|
| 6085 | version of the tools. | 
|---|
| 6086 |  | 
|---|
| 6087 |  | 
|---|
| 6088 | @node wildcards, distcleancheck, maintainer-mode, FAQ | 
|---|
| 6089 | @section Why doesn't Automake support wildcards? | 
|---|
| 6090 | @cindex wildcards | 
|---|
| 6091 |  | 
|---|
| 6092 | Developers are lazy.  They often would like to use wildcards in | 
|---|
| 6093 | @file{Makefile.am}s, so they don't need to remember they have to | 
|---|
| 6094 | update @file{Makefile.am}s every time they add, delete, or rename a | 
|---|
| 6095 | file. | 
|---|
| 6096 |  | 
|---|
| 6097 | There are several objections to this: | 
|---|
| 6098 | @itemize | 
|---|
| 6099 | @item | 
|---|
| 6100 | When using CVS (or similar) developers need to remember they have to | 
|---|
| 6101 | run @code{cvs add} or @code{cvs rm} anyway.  Updating | 
|---|
| 6102 | @file{Makefile.am} accordingly quickly becomes a reflex. | 
|---|
| 6103 |  | 
|---|
| 6104 | Conversely, if your application doesn't compile | 
|---|
| 6105 | because you forgot to add a file in @file{Makefile.am}, it will help | 
|---|
| 6106 | you remember to @code{cvs add} it. | 
|---|
| 6107 |  | 
|---|
| 6108 | @item | 
|---|
| 6109 | Using wildcards makes easy to distribute files by mistake.  For | 
|---|
| 6110 | instance some code a developer is experimenting with (a test case, | 
|---|
| 6111 | say) but which should not be part of the distribution. | 
|---|
| 6112 |  | 
|---|
| 6113 | @item | 
|---|
| 6114 | Using wildcards it's easy to omit some files by mistake.  For | 
|---|
| 6115 | instance one developer creates a new file, uses it at many places, | 
|---|
| 6116 | but forget to commit it.  Another developer then checkout the | 
|---|
| 6117 | incomplete project and is able to run `make dist' successfully, | 
|---|
| 6118 | even though a file is missing. | 
|---|
| 6119 |  | 
|---|
| 6120 | @item | 
|---|
| 6121 | Listing files, you control *exactly* what you distribute. | 
|---|
| 6122 | If some file that should be distributed is missing from your | 
|---|
| 6123 | tree, @code{make dist} will complain.  Besides, you don't distribute | 
|---|
| 6124 | more than what you listed. | 
|---|
| 6125 |  | 
|---|
| 6126 | @item | 
|---|
| 6127 | Finally it's really hard to @file{forget} adding a file to | 
|---|
| 6128 | @file{Makefile.am}, because if you don't add it, it doesn't get | 
|---|
| 6129 | compiled nor installed, so you can't even test it. | 
|---|
| 6130 | @end itemize | 
|---|
| 6131 |  | 
|---|
| 6132 | Still, these are philosophical objections, and as such you may disagree, | 
|---|
| 6133 | or find enough value in wildcards to dismiss all of them.  Before you | 
|---|
| 6134 | start writing a patch against Automake to teach it about wildcards, | 
|---|
| 6135 | let's see the main technical issue: portability. | 
|---|
| 6136 |  | 
|---|
| 6137 | Although @code{$(wildcard ...)} works with GNU @command{make}, it is | 
|---|
| 6138 | not portable to other @command{make} implementations. | 
|---|
| 6139 |  | 
|---|
| 6140 | The only way Automake could support @command{$(wildcard ...)} is by | 
|---|
| 6141 | expending @command{$(wildcard ...)} when @command{automake} is run. | 
|---|
| 6142 | Resulting @file{Makefile.in}s would be portable since they would | 
|---|
| 6143 | list all files and not use @code{$(wildcard ...)}.  However that | 
|---|
| 6144 | means developers need to remember they must run @code{automake} each | 
|---|
| 6145 | time they add, delete, or rename files. | 
|---|
| 6146 |  | 
|---|
| 6147 | Compared to editing @file{Makefile.am}, this is really little win.  Sure, | 
|---|
| 6148 | it's easier and faster to type @code{automake; make} than to type | 
|---|
| 6149 | @code{emacs Makefile.am; make}.  But nobody bothered enough to write a | 
|---|
| 6150 | patch add support for this syntax.  Some people use scripts to | 
|---|
| 6151 | generated file lists in @file{Makefile.am} or in separate | 
|---|
| 6152 | @file{Makefile} fragments. | 
|---|
| 6153 |  | 
|---|
| 6154 | Even if you don't care about portability, and are tempted to use | 
|---|
| 6155 | @code{$(wildcard ...)} anyway because you target only GNU Make, you | 
|---|
| 6156 | should know there are many places where Automake need to know exactly | 
|---|
| 6157 | which files should be processed.  As Automake doesn't know how to | 
|---|
| 6158 | expand @code{$(wildcard ...)}, you cannot use it in these places. | 
|---|
| 6159 | @code{$(wildcard ...)} is a black box comparable to @code{AC_SUBST}ed | 
|---|
| 6160 | variables as far Automake is concerned. | 
|---|
| 6161 |  | 
|---|
| 6162 | You can get warnings about @code{$(wildcard ...}) constructs using the | 
|---|
| 6163 | @code{-Wportability} flag. | 
|---|
| 6164 |  | 
|---|
| 6165 | @node distcleancheck, renamed objects, wildcards, FAQ | 
|---|
| 6166 | @section Files left in build directory after distclean | 
|---|
| 6167 | @cindex distclean, diagnostic | 
|---|
| 6168 | @cindex dependencies and distributed files | 
|---|
| 6169 | @trindex distclean | 
|---|
| 6170 | @trindex distcleancheck | 
|---|
| 6171 |  | 
|---|
| 6172 | This is a diagnostic you might encounter while running @code{make | 
|---|
| 6173 | distcheck}. | 
|---|
| 6174 |  | 
|---|
| 6175 | As explained in @ref{Dist}, @code{make distcheck} attempts to build | 
|---|
| 6176 | and check your package for errors like this one. | 
|---|
| 6177 |  | 
|---|
| 6178 | @code{make distcheck} will perform a @code{VPATH} build of your | 
|---|
| 6179 | package, and then call @code{make distclean}.  Files left in the build | 
|---|
| 6180 | directory after @code{make distclean} has run are listed after this | 
|---|
| 6181 | error. | 
|---|
| 6182 |  | 
|---|
| 6183 | This diagnostic really covers two kinds of errors: | 
|---|
| 6184 |  | 
|---|
| 6185 | @itemize @bullet | 
|---|
| 6186 | @item | 
|---|
| 6187 | files that are forgotten by distclean; | 
|---|
| 6188 | @item | 
|---|
| 6189 | distributed files that are erroneously rebuilt. | 
|---|
| 6190 | @end itemize | 
|---|
| 6191 |  | 
|---|
| 6192 | The former left-over files are not distributed, so the fix is to mark | 
|---|
| 6193 | them for cleaning (@pxref{Clean}), this is obvious and doesn't deserve | 
|---|
| 6194 | more explanations. | 
|---|
| 6195 |  | 
|---|
| 6196 | The latter bug is not always easy to understand and fix, so let's | 
|---|
| 6197 | proceed with an example.  Suppose our package contains a program for | 
|---|
| 6198 | which we want to build a man page using @command{help2man}.  GNU | 
|---|
| 6199 | @command{help2man} produces simple manual pages from the @code{--help} | 
|---|
| 6200 | and @code{--version} output of other commands (@pxref{Top, , Overview, | 
|---|
| 6201 | help2man, The Help2man Manual}).  Because we don't to force want our | 
|---|
| 6202 | users to install @command{help2man}, we decide to distribute the | 
|---|
| 6203 | generated man page using the following setup. | 
|---|
| 6204 |  | 
|---|
| 6205 | @example | 
|---|
| 6206 | # This Makefile.am is bogus. | 
|---|
| 6207 | bin_PROGRAMS = foo | 
|---|
| 6208 | foo_SOURCES = foo.c | 
|---|
| 6209 | dist_man_MANS = foo.1 | 
|---|
| 6210 |  | 
|---|
| 6211 | foo.1: foo$(EXEEXT) | 
|---|
| 6212 | help2man --output=foo.1 ./foo$(EXEEXT) | 
|---|
| 6213 | @end example | 
|---|
| 6214 |  | 
|---|
| 6215 | This will effectively distribute the man page.  However, | 
|---|
| 6216 | @code{make distcheck} will fail with: | 
|---|
| 6217 |  | 
|---|
| 6218 | @example | 
|---|
| 6219 | ERROR: files left in build directory after distclean: | 
|---|
| 6220 | ./foo.1 | 
|---|
| 6221 | @end example | 
|---|
| 6222 |  | 
|---|
| 6223 | Why was @file{foo.1} rebuilt?  Because although distributed, | 
|---|
| 6224 | @file{foo.1} depends on a non-distributed built file: | 
|---|
| 6225 | @file{foo$(EXEEXT)}.  @file{foo$(EXEEXT)} is built by the user, so it | 
|---|
| 6226 | will always appear to be newer than the distributed @file{foo.1}. | 
|---|
| 6227 |  | 
|---|
| 6228 | @code{make distcheck} caught an inconsistency in our package.  Our | 
|---|
| 6229 | intent was to distribute @file{foo.1} so users do not need installing | 
|---|
| 6230 | @command{help2man}, however since this our rule causes this file to be | 
|---|
| 6231 | always rebuilt, users @emph{do} need @command{help2man}.  Either we | 
|---|
| 6232 | should ensure that @file{foo.1} is not rebuilt by users, or there is | 
|---|
| 6233 | no point in distributing @file{foo.1}. | 
|---|
| 6234 |  | 
|---|
| 6235 | More generally, the rule is that distributed files should never depend | 
|---|
| 6236 | on non-distributed built files.  If you distribute something | 
|---|
| 6237 | generated, distribute its sources. | 
|---|
| 6238 |  | 
|---|
| 6239 | One way to fix the above example, while still distributing | 
|---|
| 6240 | @file{foo.1} is to not depend on @file{foo$(EXEEXT)}.  For instance, | 
|---|
| 6241 | assuming @command{foo --version} and @command{foo --help} do not | 
|---|
| 6242 | change unless @file{foo.c} or @file{configure.ac} change, we could | 
|---|
| 6243 | write the following @file{Makefile.am}: | 
|---|
| 6244 |  | 
|---|
| 6245 | @example | 
|---|
| 6246 | bin_PROGRAMS = foo | 
|---|
| 6247 | foo_SOURCES = foo.c | 
|---|
| 6248 | dist_man_MANS = foo.1 | 
|---|
| 6249 |  | 
|---|
| 6250 | foo.1: foo.c $(top_srcdir)/configure.ac | 
|---|
| 6251 | $(MAKE) $(AM_MAKEFLAGS) foo$(EXEEXT) | 
|---|
| 6252 | help2man --output=foo.1 ./foo$(EXEEXT) | 
|---|
| 6253 | @end example | 
|---|
| 6254 |  | 
|---|
| 6255 | This way, @file{foo.1} will not get rebuilt every time | 
|---|
| 6256 | @file{foo$(EXEEXT)} changes.  The @command{make} call makes sure | 
|---|
| 6257 | @file{foo$(EXEEXT)} is up-to-date before @command{help2man}.  Another | 
|---|
| 6258 | way to ensure this would be to use separate directories for binaries | 
|---|
| 6259 | and man pages, and set @code{SUBDIRS} so that binaries are built | 
|---|
| 6260 | before man pages. | 
|---|
| 6261 |  | 
|---|
| 6262 | We could also decide not to distribute @file{foo.1}.  In | 
|---|
| 6263 | this case it's fine to have @file{foo.1} dependent upon | 
|---|
| 6264 | @file{foo$(EXEEXT)}, since both will have to be rebuilt. | 
|---|
| 6265 | However it would be impossible to build the package in a | 
|---|
| 6266 | cross-compilation, because building @file{foo.1} involves | 
|---|
| 6267 | an @emph{execution} of @file{foo$(EXEEXT)}. | 
|---|
| 6268 |  | 
|---|
| 6269 | Another context where such errors are common is when distributed files | 
|---|
| 6270 | are built by tools which are built by the package.  The pattern is similar: | 
|---|
| 6271 |  | 
|---|
| 6272 | @example | 
|---|
| 6273 | distributed-file: built-tools distributed-sources | 
|---|
| 6274 | build-command | 
|---|
| 6275 | @end example | 
|---|
| 6276 |  | 
|---|
| 6277 | @noindent | 
|---|
| 6278 | should be changed to | 
|---|
| 6279 |  | 
|---|
| 6280 | @example | 
|---|
| 6281 | distributed-file: distributed-sources | 
|---|
| 6282 | $(MAKE) $(AM_MAKEFLAGS) built-tools | 
|---|
| 6283 | build-command | 
|---|
| 6284 | @end example | 
|---|
| 6285 |  | 
|---|
| 6286 | @noindent | 
|---|
| 6287 | or you could choose not to distribute @file{distributed-file}, if | 
|---|
| 6288 | cross-compilation does not matter. | 
|---|
| 6289 |  | 
|---|
| 6290 | The points made through these examples are worth a summary: | 
|---|
| 6291 |  | 
|---|
| 6292 | @cartouche | 
|---|
| 6293 | @itemize | 
|---|
| 6294 | @item | 
|---|
| 6295 | Distributed files should never depend upon non-distributed built | 
|---|
| 6296 | files. | 
|---|
| 6297 | @item | 
|---|
| 6298 | Distributed files should be distributed will all their dependencies. | 
|---|
| 6299 | @item | 
|---|
| 6300 | If a file is @emph{intended} be rebuilt by users, there is no point in | 
|---|
| 6301 | distributing it. | 
|---|
| 6302 | @end itemize | 
|---|
| 6303 | @end cartouche | 
|---|
| 6304 |  | 
|---|
| 6305 | @vrindex distcleancheck_listfiles | 
|---|
| 6306 | For desperate cases, it's always possible to disable this check by | 
|---|
| 6307 | setting @code{distcleancheck_listfiles} as documented in @ref{Dist}. | 
|---|
| 6308 | Make sure you do understand the reason why @code{make distcheck} | 
|---|
| 6309 | complains before you do this.  @code{distcleancheck_listfiles} is a | 
|---|
| 6310 | way to @emph{hide} errors, not to fix them.  You can always do better. | 
|---|
| 6311 |  | 
|---|
| 6312 | @node renamed objects,  , distcleancheck, FAQ | 
|---|
| 6313 | @section Why are object files sometimes renamed? | 
|---|
| 6314 |  | 
|---|
| 6315 | This happens when per-target compilation flags are used.  Object | 
|---|
| 6316 | files need to be renamed just in case they would clash with object | 
|---|
| 6317 | files compiled from the same sources, but with different flags. | 
|---|
| 6318 | Consider the following example. | 
|---|
| 6319 |  | 
|---|
| 6320 | @example | 
|---|
| 6321 | bin_PROGRAMS = true false | 
|---|
| 6322 | true_SOURCES = generic.c | 
|---|
| 6323 | true_CPPFLAGS = -DEXIT_CODE=0 | 
|---|
| 6324 | false_SOURCES = generic.c | 
|---|
| 6325 | false_CPPFLAGS = -DEXIT_CODE=1 | 
|---|
| 6326 | @end example | 
|---|
| 6327 | @noindent | 
|---|
| 6328 | Obviously the two programs are built from the same source, but it | 
|---|
| 6329 | would be bad if they shared the same object, because @file{generic.o} | 
|---|
| 6330 | cannot be built with both @code{-DEXIT_CODE=0} *and* | 
|---|
| 6331 | @code{-DEXIT_CODE=1}.  Therefore @command{automake} outputs rules to | 
|---|
| 6332 | build two different objects: @file{true-generic.o} and | 
|---|
| 6333 | @file{false-generic.o}. | 
|---|
| 6334 |  | 
|---|
| 6335 | @command{automake} doesn't actually look whether sources files are | 
|---|
| 6336 | shared to decide if it must rename objects.  It will just rename all | 
|---|
| 6337 | objects of a target as soon as it sees per-target compilation flags | 
|---|
| 6338 | are used. | 
|---|
| 6339 |  | 
|---|
| 6340 | It's OK to share object files when per-target compilation flags are not | 
|---|
| 6341 | used.  For instance @file{true} and @file{false} will both use | 
|---|
| 6342 | @file{version.o} in the following example. | 
|---|
| 6343 |  | 
|---|
| 6344 | @example | 
|---|
| 6345 | AM_CPPFLAGS = -DVERSION=1.0 | 
|---|
| 6346 | bin_PROGRAMS = true false | 
|---|
| 6347 | true_SOURCES = true.c version.c | 
|---|
| 6348 | false_SOURCES = false.c version.c | 
|---|
| 6349 | @end example | 
|---|
| 6350 |  | 
|---|
| 6351 | Note that the renaming of objects is also affected by the | 
|---|
| 6352 | @code{_SHORTNAME} variable (@pxref{Program and Library Variables}). | 
|---|
| 6353 |  | 
|---|
| 6354 | @page | 
|---|
| 6355 | @node Macro and Variable Index, General Index, FAQ, Top | 
|---|
| 6356 | @unnumbered Macro and Variable Index | 
|---|
| 6357 |  | 
|---|
| 6358 | @printindex vr | 
|---|
| 6359 |  | 
|---|
| 6360 |  | 
|---|
| 6361 | @page | 
|---|
| 6362 | @node General Index,  , Macro and Variable Index, Top | 
|---|
| 6363 | @unnumbered General Index | 
|---|
| 6364 |  | 
|---|
| 6365 | @printindex cp | 
|---|
| 6366 |  | 
|---|
| 6367 |  | 
|---|
| 6368 | @page | 
|---|
| 6369 | @contents | 
|---|
| 6370 | @bye | 
|---|