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