[3120] | 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
|
---|