Tweak m4_do semantics.
[autoconf.git] / doc / autoconf.texi
blobd27aeb283942c009cbb8fd8f1a0ec2da04b0cdf0
1 \input texinfo @c -*-texinfo-*-
2 @comment ========================================================
3 @comment %**start of header
4 @setfilename autoconf.info
5 @include version.texi
6 @settitle Autoconf
7 @setchapternewpage odd
8 @ifnothtml
9 @setcontentsaftertitlepage
10 @end ifnothtml
11 @finalout
13 @c @ovar(ARG)
14 @c ----------
15 @c The ARG is an optional argument.  To be used for macro arguments in
16 @c their documentation (@defmac).
17 @macro ovar{varname}
18 @r{[}@var{\varname\}@r{]}@c
19 @end macro
21 @c @dvar(ARG, DEFAULT)
22 @c -------------------
23 @c The ARG is an optional argument, defaulting to DEFAULT.  To be used
24 @c for macro arguments in their documentation (@defmac).
25 @macro dvar{varname, default}
26 @r{[}@var{\varname\} = @samp{\default\}@r{]}@c
27 @end macro
29 @c Handling the indexes with Texinfo yields several different problems.
31 @c Because we want to drop out the AC_ part of the macro names in the
32 @c printed manual, but not in the other outputs, we need a layer above
33 @c the usual @acindex{} etc.  That's why we first define indexes such as
34 @c acx meant to become the macro @acindex.  First of all, using ``ac_''
35 @c does not work with makeinfo, and using ``ac1'' doesn't work with TeX.
36 @c So use something more regular ``acx''.  Then you finish with a printed
37 @c index saying ``index is not existent''.  Of course: you ought to use
38 @c two letters :(  So you use capitals.
40 @c Second, when defining a macro in the TeX world, following spaces are
41 @c eaten.  But then, since we embed @acxindex commands that use the end
42 @c of line as an end marker, the whole things wrecks itself.  So make
43 @c sure you do *force* an additional end of line, add a ``@c''.
45 @c Finally, you might want to get rid of TeX expansion, using --expand
46 @c with texi2dvi.  But then you wake up an old problem: we use macros
47 @c in @defmac etc. where TeX does perform the expansion, but not makeinfo.
49 @c Define an environment variable index.
50 @defcodeindex ev
51 @c Define an output variable index.
52 @defcodeindex ov
53 @c Define a CPP variable index.
54 @defcodeindex cv
55 @c Define an Autoconf macro index that @defmac doesn't write to.
56 @defcodeindex AC
57 @c Define an Autotest macro index that @defmac doesn't write to.
58 @defcodeindex AT
59 @c Define an M4sugar macro index that @defmac doesn't write to.
60 @defcodeindex MS
61 @c Define an index for *foreign* programs: `mv' etc.  Used for the
62 @c portability sections and so on.
63 @defindex pr
65 @c shortindexflag
66 @c --------------
67 @c Shall we factor AC_ out of the Autoconf macro index etc.?
68 @iftex
69 @set shortindexflag
70 @end iftex
72 @c @acindex{MACRO}
73 @c ---------------
74 @c Registering an AC_\MACRO\.
75 @ifset shortindexflag
76 @macro acindex{macro}
77 @ACindex \macro\
79 @end macro
80 @end ifset
81 @ifclear shortindexflag
82 @macro acindex{macro}
83 @ACindex AC_\macro\
84 @end macro
85 @end ifclear
87 @c @ahindex{MACRO}
88 @c ---------------
89 @c Registering an AH_\MACRO\.
90 @macro ahindex{macro}
91 @ACindex AH_\macro\
93 @end macro
95 @c @asindex{MACRO}
96 @c ---------------
97 @c Registering an AS_\MACRO\.
98 @ifset shortindexflag
99 @macro asindex{macro}
100 @MSindex \macro\
102 @end macro
103 @end ifset
104 @ifclear shortindexflag
105 @macro asindex{macro}
106 @MSindex AS_\macro\
107 @end macro
108 @end ifclear
110 @c @atindex{MACRO}
111 @c ---------------
112 @c Registering an AT_\MACRO\.
113 @ifset shortindexflag
114 @macro atindex{macro}
115 @ATindex \macro\
117 @end macro
118 @end ifset
119 @ifclear shortindexflag
120 @macro atindex{macro}
121 @ATindex AT_\macro\
122 @end macro
123 @end ifclear
125 @c @auindex{MACRO}
126 @c ---------------
127 @c Registering an AU_\MACRO\.
128 @macro auindex{macro}
129 @ACindex AU_\macro\
131 @end macro
133 @c @hdrindex{MACRO}
134 @c ----------------
135 @c Indexing a header.
136 @macro hdrindex{macro}
137 @prindex @file{\macro\}
139 @end macro
141 @c @msindex{MACRO}
142 @c ---------------
143 @c Registering an m4_\MACRO\.
144 @ifset shortindexflag
145 @macro msindex{macro}
146 @MSindex \macro\
148 @end macro
149 @end ifset
150 @ifclear shortindexflag
151 @macro msindex{macro}
152 @MSindex m4_\macro\
153 @end macro
154 @end ifclear
157 @c Define an index for functions: `alloca' etc.  Used for the
158 @c portability sections and so on.  We can't use `fn' (aka `fnindex),
159 @c since `@defmac' goes into it => we'd get all the macros too.
161 @c   FIXME: Aaarg!  It seems there are too many indices for TeX :(
163 @c   ! No room for a new @write .
164 @c   l.112 @defcodeindex fu
166 @c   so don't define yet another one :(  Just put some tags before each
167 @c   @prindex which is actually a @funindex.
169 @c   @defcodeindex fu
172 @c   @c Put the programs and functions into their own index.
173 @c   @syncodeindex fu pr
175 @comment %**end of header
176 @comment ========================================================
178 @copying
180 This manual is for @acronym{GNU} Autoconf
181 (version @value{VERSION}, @value{UPDATED}),
182 a package for creating scripts to configure source code packages using
183 templates and an M4 macro package.
185 Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
186 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
188 @quotation
189 Permission is granted to copy, distribute and/or modify this document
190 under the terms of the @acronym{GNU} Free Documentation License,
191 Version 1.2 or any later version published by the Free Software
192 Foundation; with no Invariant Sections, with the Front-Cover texts
193 being ``A @acronym{GNU} Manual,'' and with the Back-Cover Texts as in
194 (a) below.  A copy of the license is included in the section entitled
195 ``@acronym{GNU} Free Documentation License.''
197 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
198 modify this @acronym{GNU} manual.  Buying copies from the @acronym{FSF}
199 supports it in developing @acronym{GNU} and promoting software
200 freedom.''
201 @end quotation
202 @end copying
206 @dircategory Software development
207 @direntry
208 * Autoconf: (autoconf).         Create source code configuration scripts.
209 @end direntry
211 @dircategory Individual utilities
212 @direntry
213 * autoscan: (autoconf)autoscan Invocation.
214                                 Semi-automatic @file{configure.ac} writing
215 * ifnames: (autoconf)ifnames Invocation.        Listing conditionals in source.
216 * autoconf-invocation: (autoconf)autoconf Invocation.
217                                 How to create configuration scripts
218 * autoreconf: (autoconf)autoreconf Invocation.
219                                 Remaking multiple @command{configure} scripts
220 * autoheader: (autoconf)autoheader Invocation.
221                                 How to create configuration templates
222 * autom4te: (autoconf)autom4te Invocation.
223                                 The Autoconf executables backbone
224 * configure: (autoconf)configure Invocation.    Configuring a package.
225 * autoupdate: (autoconf)autoupdate Invocation.
226                                 Automatic update of @file{configure.ac}
227 * config.status: (autoconf)config.status Invocation. Recreating configurations.
228 * testsuite: (autoconf)testsuite Invocation.    Running an Autotest test suite.
229 @end direntry
231 @titlepage
232 @title Autoconf
233 @subtitle Creating Automatic Configuration Scripts
234 @subtitle for version @value{VERSION}, @value{UPDATED}
235 @author David MacKenzie
236 @author Ben Elliston
237 @author Akim Demaille
238 @page
239 @vskip 0pt plus 1filll
240 @insertcopying
241 @end titlepage
243 @contents
246 @ifnottex
247 @node Top
248 @top Autoconf
249 @insertcopying
250 @end ifnottex
252 @c The master menu, created with texinfo-master-menu, goes here.
254 @menu
255 * Introduction::                Autoconf's purpose, strengths, and weaknesses
256 * The GNU Build System::        A set of tools for portable software packages
257 * Making configure Scripts::    How to organize and produce Autoconf scripts
258 * Setup::                       Initialization and output
259 * Existing Tests::              Macros that check for particular features
260 * Writing Tests::               How to write new feature checks
261 * Results::                     What to do with results from feature checks
262 * Programming in M4::           Layers on top of which Autoconf is written
263 * Writing Autoconf Macros::     Adding new macros to Autoconf
264 * Portable Shell::              Shell script portability pitfalls
265 * Portable Make::               Makefile portability pitfalls
266 * Portable C and C++::          C and C++ portability pitfalls
267 * Manual Configuration::        Selecting features that can't be guessed
268 * Site Configuration::          Local defaults for @command{configure}
269 * Running configure Scripts::   How to use the Autoconf output
270 * config.status Invocation::    Recreating a configuration
271 * Obsolete Constructs::         Kept for backward compatibility
272 * Using Autotest::              Creating portable test suites
273 * FAQ::                         Frequent Autoconf Questions, with answers
274 * History::                     History of Autoconf
275 * GNU Free Documentation License::  License for copying this manual
276 * Indices::                     Indices of symbols, concepts, etc.
278 @detailmenu
279  --- The Detailed Node Listing ---
281 The @acronym{GNU} Build System
283 * Automake::                    Escaping makefile hell
284 * Gnulib::                      The @acronym{GNU} portability library
285 * Libtool::                     Building libraries portably
286 * Pointers::                    More info on the @acronym{GNU} build system
288 Making @command{configure} Scripts
290 * Writing Autoconf Input::      What to put in an Autoconf input file
291 * autoscan Invocation::         Semi-automatic @file{configure.ac} writing
292 * ifnames Invocation::          Listing the conditionals in source code
293 * autoconf Invocation::         How to create configuration scripts
294 * autoreconf Invocation::       Remaking multiple @command{configure} scripts
296 Writing @file{configure.ac}
298 * Shell Script Compiler::       Autoconf as solution of a problem
299 * Autoconf Language::           Programming in Autoconf
300 * Autoconf Input Layout::       Standard organization of @file{configure.ac}
302 Initialization and Output Files
304 * Initializing configure::      Option processing etc.
305 * Versioning::                  Dealing with Autoconf versions
306 * Notices::                     Copyright, version numbers in @command{configure}
307 * Input::                       Where Autoconf should find files
308 * Output::                      Outputting results from the configuration
309 * Configuration Actions::       Preparing the output based on results
310 * Configuration Files::         Creating output files
311 * Makefile Substitutions::      Using output variables in makefiles
312 * Configuration Headers::       Creating a configuration header file
313 * Configuration Commands::      Running arbitrary instantiation commands
314 * Configuration Links::         Links depending on the configuration
315 * Subdirectories::              Configuring independent packages together
316 * Default Prefix::              Changing the default installation prefix
318 Substitutions in Makefiles
320 * Preset Output Variables::     Output variables that are always set
321 * Installation Directory Variables::  Other preset output variables
322 * Changed Directory Variables:: Warnings about @file{datarootdir}
323 * Build Directories::           Supporting multiple concurrent compiles
324 * Automatic Remaking::          Makefile rules for configuring
326 Configuration Header Files
328 * Header Templates::            Input for the configuration headers
329 * autoheader Invocation::       How to create configuration templates
330 * Autoheader Macros::           How to specify CPP templates
332 Existing Tests
334 * Common Behavior::             Macros' standard schemes
335 * Alternative Programs::        Selecting between alternative programs
336 * Files::                       Checking for the existence of files
337 * Libraries::                   Library archives that might be missing
338 * Library Functions::           C library functions that might be missing
339 * Header Files::                Header files that might be missing
340 * Declarations::                Declarations that may be missing
341 * Structures::                  Structures or members that might be missing
342 * Types::                       Types that might be missing
343 * Compilers and Preprocessors::  Checking for compiling programs
344 * System Services::             Operating system services
345 * Posix Variants::              Special kludges for specific Posix variants
346 * Erlang Libraries::            Checking for the existence of Erlang libraries
348 Common Behavior
350 * Standard Symbols::            Symbols defined by the macros
351 * Default Includes::            Includes used by the generic macros
353 Alternative Programs
355 * Particular Programs::         Special handling to find certain programs
356 * Generic Programs::            How to find other programs
358 Library Functions
360 * Function Portability::        Pitfalls with usual functions
361 * Particular Functions::        Special handling to find certain functions
362 * Generic Functions::           How to find other functions
364 Header Files
366 * Header Portability::          Collected knowledge on common headers
367 * Particular Headers::          Special handling to find certain headers
368 * Generic Headers::             How to find other headers
370 Declarations
372 * Particular Declarations::     Macros to check for certain declarations
373 * Generic Declarations::        How to find other declarations
375 Structures
377 * Particular Structures::       Macros to check for certain structure members
378 * Generic Structures::          How to find other structure members
380 Types
382 * Particular Types::            Special handling to find certain types
383 * Generic Types::               How to find other types
385 Compilers and Preprocessors
387 * Specific Compiler Characteristics::  Some portability issues
388 * Generic Compiler Characteristics::  Language independent tests and features
389 * C Compiler::                  Checking its characteristics
390 * C++ Compiler::                Likewise
391 * Objective C Compiler::        Likewise
392 * Erlang Compiler and Interpreter::  Likewise
393 * Fortran Compiler::            Likewise
395 Writing Tests
397 * Language Choice::             Selecting which language to use for testing
398 * Writing Test Programs::       Forging source files for compilers
399 * Running the Preprocessor::    Detecting preprocessor symbols
400 * Running the Compiler::        Detecting language or header features
401 * Running the Linker::          Detecting library features
402 * Runtime::                     Testing for runtime features
403 * Systemology::                 A zoology of operating systems
404 * Multiple Cases::              Tests for several possible values
406 Writing Test Programs
408 * Guidelines::                  General rules for writing test programs
409 * Test Functions::              Avoiding pitfalls in test programs
410 * Generating Sources::          Source program boilerplate
412 Results of Tests
414 * Defining Symbols::            Defining C preprocessor symbols
415 * Setting Output Variables::    Replacing variables in output files
416 * Special Chars in Variables::  Characters to beware of in variables
417 * Caching Results::             Speeding up subsequent @command{configure} runs
418 * Printing Messages::           Notifying @command{configure} users
420 Caching Results
422 * Cache Variable Names::        Shell variables used in caches
423 * Cache Files::                 Files @command{configure} uses for caching
424 * Cache Checkpointing::         Loading and saving the cache file
426 Programming in M4
428 * M4 Quotation::                Protecting macros from unwanted expansion
429 * Using autom4te::              The Autoconf executables backbone
430 * Programming in M4sugar::      Convenient pure M4 macros
431 * Programming in M4sh::         Common shell Constructs
432 * File Descriptor Macros::      File descriptor macros for input and output
434 M4 Quotation
436 * Active Characters::           Characters that change the behavior of M4
437 * One Macro Call::              Quotation and one macro call
438 * Quoting and Parameters::      M4 vs. shell parameters
439 * Quotation and Nested Macros::  Macros calling macros
440 * Changequote is Evil::         Worse than INTERCAL: M4 + changequote
441 * Quadrigraphs::                Another way to escape special characters
442 * Quotation Rule Of Thumb::     One parenthesis, one quote
444 Using @command{autom4te}
446 * autom4te Invocation::         A @acronym{GNU} M4 wrapper
447 * Customizing autom4te::        Customizing the Autoconf package
449 Programming in M4sugar
451 * Redefined M4 Macros::         M4 builtins changed in M4sugar
452 * Diagnostic Macros::           Diagnostic messages from M4sugar
453 * Diversion support::           Diversions in M4sugar
454 * Conditional constructs::      Conditions in M4
455 * Looping constructs::          Iteration in M4
456 * Evaluation Macros::           More quotation and evaluation control
457 * Text processing Macros::      String manipulation in M4
458 * Number processing Macros::    Arithmetic computation in M4
459 * Set manipulation Macros::     Set manipulation in M4
460 * Forbidden Patterns::          Catching unexpanded macros
462 Writing Autoconf Macros
464 * Macro Definitions::           Basic format of an Autoconf macro
465 * Macro Names::                 What to call your new macros
466 * Reporting Messages::          Notifying @command{autoconf} users
467 * Dependencies Between Macros::  What to do when macros depend on other macros
468 * Obsoleting Macros::           Warning about old ways of doing things
469 * Coding Style::                Writing Autoconf macros @`a la Autoconf
471 Dependencies Between Macros
473 * Prerequisite Macros::         Ensuring required information
474 * Suggested Ordering::          Warning about possible ordering problems
475 * One-Shot Macros::             Ensuring a macro is called only once
477 Portable Shell Programming
479 * Shellology::                  A zoology of shells
480 * Here-Documents::              Quirks and tricks
481 * File Descriptors::            FDs and redirections
482 * File System Conventions::     File names
483 * Shell Pattern Matching::      Pattern matching
484 * Shell Substitutions::         Variable and command expansions
485 * Assignments::                 Varying side effects of assignments
486 * Parentheses::                 Parentheses in shell scripts
487 * Slashes::                     Slashes in shell scripts
488 * Special Shell Variables::     Variables you should not change
489 * Shell Functions::             What to look out for if you use them
490 * Limitations of Builtins::     Portable use of not so portable /bin/sh
491 * Limitations of Usual Tools::  Portable use of portable tools
493 Portable Make Programming
495 * $< in Ordinary Make Rules::   $< in ordinary rules
496 * Failure in Make Rules::       Failing portably in rules
497 * Special Chars in Names::      Special Characters in Macro Names
498 * Backslash-Newline-Newline::   Empty last lines in macro definitions
499 * Backslash-Newline Comments::  Spanning comments across line boundaries
500 * Long Lines in Makefiles::     Line length limitations
501 * Macros and Submakes::         @code{make macro=value} and submakes
502 * The Make Macro MAKEFLAGS::    @code{$(MAKEFLAGS)} portability issues
503 * The Make Macro SHELL::        @code{$(SHELL)} portability issues
504 * Comments in Make Rules::      Other problems with Make comments
505 * obj/ and Make::               Don't name a subdirectory @file{obj}
506 * make -k Status::              Exit status of @samp{make -k}
507 * VPATH and Make::              @code{VPATH} woes
508 * Single Suffix Rules::         Single suffix rules and separated dependencies
509 * Timestamps and Make::         Subsecond timestamp resolution
511 @code{VPATH} and Make
513 * VPATH and Double-colon::      Problems with @samp{::} on ancient hosts
514 * $< in Explicit Rules::        @code{$<} does not work in ordinary rules
515 * Automatic Rule Rewriting::    @code{VPATH} goes wild on Solaris
516 * Tru64 Directory Magic::       @command{mkdir} goes wild on Tru64
517 * Make Target Lookup::          More details about @code{VPATH} lookup
519 Portable C and C++ Programming
521 * Varieties of Unportability::  How to make your programs unportable
522 * Integer Overflow::            When integers get too large
523 * Preprocessor Arithmetic::     @code{#if} expression problems
524 * Null Pointers::               Properties of null pointers
525 * Buffer Overruns::             Subscript errors and the like
526 * Volatile Objects::            @code{volatile} and signals
527 * Floating Point Portability::  Portable floating-point arithmetic
528 * Exiting Portably::            Exiting and the exit status
530 Manual Configuration
532 * Specifying Names::            Specifying the system type
533 * Canonicalizing::              Getting the canonical system type
534 * Using System Type::           What to do with the system type
536 Site Configuration
538 * Help Formatting::             Customizing @samp{configure --help}
539 * External Software::           Working with other optional software
540 * Package Options::             Selecting optional features
541 * Pretty Help Strings::         Formatting help string
542 * Option Checking::             Controlling checking of @command{configure} options
543 * Site Details::                Configuring site details
544 * Transforming Names::          Changing program names when installing
545 * Site Defaults::               Giving @command{configure} local defaults
547 Transforming Program Names When Installing
549 * Transformation Options::      @command{configure} options to transform names
550 * Transformation Examples::     Sample uses of transforming names
551 * Transformation Rules::        Makefile uses of transforming names
553 Running @command{configure} Scripts
555 * Basic Installation::          Instructions for typical cases
556 * Compilers and Options::       Selecting compilers and optimization
557 * Multiple Architectures::      Compiling for multiple architectures at once
558 * Installation Names::          Installing in different directories
559 * Optional Features::           Selecting optional features
560 * System Type::                 Specifying the system type
561 * Sharing Defaults::            Setting site-wide defaults for @command{configure}
562 * Defining Variables::          Specifying the compiler etc.
563 * configure Invocation::        Changing how @command{configure} runs
565 Obsolete Constructs
567 * Obsolete config.status Use::  Obsolete convention for @command{config.status}
568 * acconfig Header::             Additional entries in @file{config.h.in}
569 * autoupdate Invocation::       Automatic update of @file{configure.ac}
570 * Obsolete Macros::             Backward compatibility macros
571 * Autoconf 1::                  Tips for upgrading your files
572 * Autoconf 2.13::               Some fresher tips
574 Upgrading From Version 1
576 * Changed File Names::          Files you might rename
577 * Changed Makefiles::           New things to put in @file{Makefile.in}
578 * Changed Macros::              Macro calls you might replace
579 * Changed Results::             Changes in how to check test results
580 * Changed Macro Writing::       Better ways to write your own macros
582 Upgrading From Version 2.13
584 * Changed Quotation::           Broken code which used to work
585 * New Macros::                  Interaction with foreign macros
586 * Hosts and Cross-Compilation::  Bugward compatibility kludges
587 * AC_LIBOBJ vs LIBOBJS::        LIBOBJS is a forbidden token
588 * AC_FOO_IFELSE vs AC_TRY_FOO::  A more generic scheme for testing sources
590 Generating Test Suites with Autotest
592 * Using an Autotest Test Suite::  Autotest and the user
593 * Writing Testsuites::          Autotest macros
594 * testsuite Invocation::        Running @command{testsuite} scripts
595 * Making testsuite Scripts::    Using autom4te to create @command{testsuite}
597 Using an Autotest Test Suite
599 * testsuite Scripts::           The concepts of Autotest
600 * Autotest Logs::               Their contents
602 Frequent Autoconf Questions, with answers
604 * Distributing::                Distributing @command{configure} scripts
605 * Why GNU M4::                  Why not use the standard M4?
606 * Bootstrapping::               Autoconf and @acronym{GNU} M4 require each other?
607 * Why Not Imake::               Why @acronym{GNU} uses @command{configure} instead of Imake
608 * Defining Directories::        Passing @code{datadir} to program
609 * Autom4te Cache::              What is it?  Can I remove it?
610 * Present But Cannot Be Compiled::  Compiler and Preprocessor Disagree
612 History of Autoconf
614 * Genesis::                     Prehistory and naming of @command{configure}
615 * Exodus::                      The plagues of M4 and Perl
616 * Leviticus::                   The priestly code of portability arrives
617 * Numbers::                     Growth and contributors
618 * Deuteronomy::                 Approaching the promises of easy configuration
620 Indices
622 * Environment Variable Index::  Index of environment variables used
623 * Output Variable Index::       Index of variables set in output files
624 * Preprocessor Symbol Index::   Index of C preprocessor symbols defined
625 * Autoconf Macro Index::        Index of Autoconf macros
626 * M4 Macro Index::              Index of M4, M4sugar, and M4sh macros
627 * Autotest Macro Index::        Index of Autotest macros
628 * Program & Function Index::    Index of those with portability problems
629 * Concept Index::               General index
631 @end detailmenu
632 @end menu
634 @c ============================================================= Introduction.
636 @node Introduction
637 @chapter Introduction
638 @cindex Introduction
640 @flushright
641 A physicist, an engineer, and a computer scientist were discussing the
642 nature of God.  ``Surely a Physicist,'' said the physicist, ``because
643 early in the Creation, God made Light; and you know, Maxwell's
644 equations, the dual nature of electromagnetic waves, the relativistic
645 consequences@dots{}'' ``An Engineer!,'' said the engineer, ``because
646 before making Light, God split the Chaos into Land and Water; it takes a
647 hell of an engineer to handle that big amount of mud, and orderly
648 separation of solids from liquids@dots{}'' The computer scientist
649 shouted: ``And the Chaos, where do you think it was coming from, hmm?''
651 ---Anonymous
652 @end flushright
653 @c (via Franc,ois Pinard)
655 Autoconf is a tool for producing shell scripts that automatically
656 configure software source code packages to adapt to many kinds of
657 Posix-like systems.  The configuration scripts produced by Autoconf
658 are independent of Autoconf when they are run, so their users do not
659 need to have Autoconf.
661 The configuration scripts produced by Autoconf require no manual user
662 intervention when run; they do not normally even need an argument
663 specifying the system type.  Instead, they individually test for the
664 presence of each feature that the software package they are for might need.
665 (Before each check, they print a one-line message stating what they are
666 checking for, so the user doesn't get too bored while waiting for the
667 script to finish.)  As a result, they deal well with systems that are
668 hybrids or customized from the more common Posix variants.  There is
669 no need to maintain files that list the features supported by each
670 release of each variant of Posix.
672 For each software package that Autoconf is used with, it creates a
673 configuration script from a template file that lists the system features
674 that the package needs or can use.  After the shell code to recognize
675 and respond to a system feature has been written, Autoconf allows it to
676 be shared by many software packages that can use (or need) that feature.
677 If it later turns out that the shell code needs adjustment for some
678 reason, it needs to be changed in only one place; all of the
679 configuration scripts can be regenerated automatically to take advantage
680 of the updated code.
682 @c "Those who do not understand Unix are condemned to reinvent it, poorly."
683 @c --Henry Spencer, 1987 (see http://en.wikipedia.org/wiki/Unix_philosophy)
684 Those who do not understand Autoconf are condemned to reinvent it, poorly.
685 The primary goal of Autoconf is making the @emph{user's} life easier;
686 making the @emph{maintainer's} life easier is only a secondary goal.
687 Put another way, the primary goal is not to make the generation of
688 @file{configure} automatic for package maintainers (although patches
689 along that front are welcome, since package maintainers form the user
690 base of Autoconf); rather, the goal is to make @file{configure}
691 painless, portable, and predictable for the end user of each
692 @dfn{autoconfiscated} package.  And to this degree, Autoconf is highly
693 successful at its goal --- most complaints to the Autoconf list are
694 about difficulties in writing Autoconf input, and not in the behavior of
695 the resulting @file{configure}.  Even packages that don't use Autoconf
696 will generally provide a @file{configure} script, and the most common
697 complaint about these alternative home-grown scripts is that they fail
698 to meet one or more of the @acronym{GNU} Coding Standards that users
699 have come to expect from Autoconf-generated @file{configure} scripts.
701 The Metaconfig package is similar in purpose to Autoconf, but the
702 scripts it produces require manual user intervention, which is quite
703 inconvenient when configuring large source trees.  Unlike Metaconfig
704 scripts, Autoconf scripts can support cross-compiling, if some care is
705 taken in writing them.
707 Autoconf does not solve all problems related to making portable
708 software packages---for a more complete solution, it should be used in
709 concert with other @acronym{GNU} build tools like Automake and
710 Libtool.  These other tools take on jobs like the creation of a
711 portable, recursive makefile with all of the standard targets,
712 linking of shared libraries, and so on.  @xref{The GNU Build System},
713 for more information.
715 Autoconf imposes some restrictions on the names of macros used with
716 @code{#if} in C programs (@pxref{Preprocessor Symbol Index}).
718 Autoconf requires @acronym{GNU} M4 version 1.4.5 or later in order to
719 generate the scripts.  It uses features that some versions of M4,
720 including @acronym{GNU} M4 1.3, do not have.  Autoconf works better
721 with @acronym{GNU} M4 version 1.4.11 or later, though this is not
722 required.
724 @xref{Autoconf 1}, for information about upgrading from version 1.
725 @xref{History}, for the story of Autoconf's development.  @xref{FAQ},
726 for answers to some common questions about Autoconf.
728 See the @uref{http://www.gnu.org/software/autoconf/,
729 Autoconf web page} for up-to-date information, details on the mailing
730 lists, pointers to a list of known bugs, etc.
732 Mail suggestions to @email{autoconf@@gnu.org, the Autoconf mailing
733 list}.  Past suggestions are
734 @uref{http://lists.gnu.org/archive/html/autoconf/, archived}.
736 Mail bug reports to @email{bug-autoconf@@gnu.org, the
737 Autoconf Bugs mailing list}.  Past bug reports are
738 @uref{http://lists.gnu.org/archive/html/bug-autoconf/, archived}.
740 If possible, first check that your bug is
741 not already solved in current development versions, and that it has not
742 been reported yet.  Be sure to include all the needed information and a
743 short @file{configure.ac} that demonstrates the problem.
745 Autoconf's development tree is accessible via @command{git}; see the
746 @uref{http://savannah.gnu.org/projects/autoconf/, Autoconf
747 Summary} for details, or view
748 @uref{http://git.sv.gnu.org/gitweb/?p=autoconf.git, the actual
749 repository}.  Anonymous @acronym{CVS} access is also available, see
750 @file{README} for more details.  Patches relative to the
751 current @command{git} version can be sent for review to the
752 @email{autoconf-patches@@gnu.org, Autoconf Patches mailing list}.
753 Discussions on past patches are
754 @uref{http://lists.gnu.org/@/archive/@/html/@/autoconf-patches/,
755 archived}, and all commits are archived in the read-only
756 @email{autoconf-commit@@gnu.org, Autoconf Commit mailing list}, which is
757 also @uref{http://lists.gnu.org/@/archive/@/html/@/autoconf-commit/,
758 archived}.
760 Because of its mission, the Autoconf package itself
761 includes only a set of often-used
762 macros that have already demonstrated their usefulness.  Nevertheless,
763 if you wish to share your macros, or find existing ones, see the
764 @uref{http://autoconf-archive.cryp.to/, Autoconf Macro
765 Archive}, which is kindly run by @email{simons@@cryp.to,
766 Peter Simons}.
769 @c ================================================= The GNU Build System
771 @node The GNU Build System
772 @chapter The @acronym{GNU} Build System
773 @cindex @acronym{GNU} build system
775 Autoconf solves an important problem---reliable discovery of
776 system-specific build and runtime information---but this is only one
777 piece of the puzzle for the development of portable software.  To this
778 end, the @acronym{GNU} project has developed a suite of integrated
779 utilities to finish the job Autoconf started: the @acronym{GNU} build
780 system, whose most important components are Autoconf, Automake, and
781 Libtool.  In this chapter, we introduce you to those tools, point you
782 to sources of more information, and try to convince you to use the
783 entire @acronym{GNU} build system for your software.
785 @menu
786 * Automake::                    Escaping makefile hell
787 * Gnulib::                      The @acronym{GNU} portability library
788 * Libtool::                     Building libraries portably
789 * Pointers::                    More info on the @acronym{GNU} build system
790 @end menu
792 @node Automake
793 @section Automake
795 The ubiquity of @command{make} means that a makefile is almost the
796 only viable way to distribute automatic build rules for software, but
797 one quickly runs into its numerous limitations.  Its lack of
798 support for automatic dependency tracking, recursive builds in
799 subdirectories, reliable timestamps (e.g., for network file systems), and
800 so on, mean that developers must painfully (and often incorrectly)
801 reinvent the wheel for each project.  Portability is non-trivial, thanks
802 to the quirks of @command{make} on many systems.  On top of all this is the
803 manual labor required to implement the many standard targets that users
804 have come to expect (@code{make install}, @code{make distclean},
805 @code{make uninstall}, etc.).  Since you are, of course, using Autoconf,
806 you also have to insert repetitive code in your @code{Makefile.in} to
807 recognize @code{@@CC@@}, @code{@@CFLAGS@@}, and other substitutions
808 provided by @command{configure}.  Into this mess steps @dfn{Automake}.
809 @cindex Automake
811 Automake allows you to specify your build needs in a @code{Makefile.am}
812 file with a vastly simpler and more powerful syntax than that of a plain
813 makefile, and then generates a portable @code{Makefile.in} for
814 use with Autoconf.  For example, the @code{Makefile.am} to build and
815 install a simple ``Hello world'' program might look like:
817 @example
818 bin_PROGRAMS = hello
819 hello_SOURCES = hello.c
820 @end example
822 @noindent
823 The resulting @code{Makefile.in} (~400 lines) automatically supports all
824 the standard targets, the substitutions provided by Autoconf, automatic
825 dependency tracking, @code{VPATH} building, and so on.  @command{make}
826 builds the @code{hello} program, and @code{make install} installs it
827 in @file{/usr/local/bin} (or whatever prefix was given to
828 @command{configure}, if not @file{/usr/local}).
830 The benefits of Automake increase for larger packages (especially ones
831 with subdirectories), but even for small programs the added convenience
832 and portability can be substantial.  And that's not all@enddots{}
834 @node Gnulib
835 @section Gnulib
837 @acronym{GNU} software has a well-deserved reputation for running on
838 many different types of systems.  While our primary goal is to write
839 software for the @acronym{GNU} system, many users and developers have
840 been introduced to us through the systems that they were already using.
842 @cindex Gnulib
843 Gnulib is a central location for common @acronym{GNU} code, intended to
844 be shared among free software packages.  Its components are typically
845 shared at the source level, rather than being a library that gets built,
846 installed, and linked against.  The idea is to copy files from Gnulib
847 into your own source tree.  There is no distribution tarball; developers
848 should just grab source modules from the repository.  The source files
849 are available online, under various licenses, mostly @acronym{GNU}
850 @acronym{GPL} or @acronym{GNU} @acronym{LGPL}.
852 Gnulib modules typically contain C source code along with Autoconf
853 macros used to configure the source code.  For example, the Gnulib
854 @code{stdbool} module implements a @file{stdbool.h} header that nearly
855 conforms to C99, even on old-fashioned hosts that lack @file{stdbool.h}.
856 This module contains a source file for the replacement header, along
857 with an Autoconf macro that arranges to use the replacement header on
858 old-fashioned systems.
860 @node Libtool
861 @section Libtool
863 Often, one wants to build not only programs, but libraries, so that
864 other programs can benefit from the fruits of your labor.  Ideally, one
865 would like to produce @emph{shared} (dynamically linked) libraries,
866 which can be used by multiple programs without duplication on disk or in
867 memory and can be updated independently of the linked programs.
868 Producing shared libraries portably, however, is the stuff of
869 nightmares---each system has its own incompatible tools, compiler flags,
870 and magic incantations.  Fortunately, @acronym{GNU} provides a solution:
871 @dfn{Libtool}.
872 @cindex Libtool
874 Libtool handles all the requirements of building shared libraries for
875 you, and at this time seems to be the @emph{only} way to do so with any
876 portability.  It also handles many other headaches, such as: the
877 interaction of Make rules with the variable suffixes of
878 shared libraries, linking reliably with shared libraries before they are
879 installed by the superuser, and supplying a consistent versioning system
880 (so that different versions of a library can be installed or upgraded
881 without breaking binary compatibility).  Although Libtool, like
882 Autoconf, can be used without Automake, it is most simply utilized in
883 conjunction with Automake---there, Libtool is used automatically
884 whenever shared libraries are needed, and you need not know its syntax.
886 @node Pointers
887 @section Pointers
889 Developers who are used to the simplicity of @command{make} for small
890 projects on a single system might be daunted at the prospect of
891 learning to use Automake and Autoconf.  As your software is
892 distributed to more and more users, however, you otherwise
893 quickly find yourself putting lots of effort into reinventing the
894 services that the @acronym{GNU} build tools provide, and making the
895 same mistakes that they once made and overcame.  (Besides, since
896 you're already learning Autoconf, Automake is a piece of cake.)
898 There are a number of places that you can go to for more information on
899 the @acronym{GNU} build tools.
901 @itemize @minus
903 @item Web
905 The home pages for
906 @uref{http://www.gnu.org/@/software/@/autoconf/, Autoconf},
907 @uref{http://www.gnu.org/@/software/@/automake/, Automake},
908 @uref{http://www.gnu.org/@/software/@/gnulib/, Gnulib}, and
909 @uref{http://www.gnu.org/@/software/@/libtool/, Libtool}.
911 @item Automake Manual
913 @xref{Top, , Automake, automake, @acronym{GNU} Automake}, for more
914 information on Automake.
916 @item Books
918 The book @cite{@acronym{GNU} Autoconf, Automake and
919 Libtool}@footnote{@cite{@acronym{GNU} Autoconf, Automake and Libtool},
920 by G. V. Vaughan, B. Elliston, T. Tromey, and I. L. Taylor.  SAMS (originally
921 New Riders), 2000, ISBN 1578701902.} describes the complete @acronym{GNU}
922 build environment.  You can also find
923 @uref{http://sources.redhat.com/@/autobook/, the entire book on-line}.
925 @end itemize
927 @c ================================================= Making configure Scripts.
929 @node Making configure Scripts
930 @chapter Making @command{configure} Scripts
931 @cindex @file{aclocal.m4}
932 @cindex @command{configure}
934 The configuration scripts that Autoconf produces are by convention
935 called @command{configure}.  When run, @command{configure} creates several
936 files, replacing configuration parameters in them with appropriate
937 values.  The files that @command{configure} creates are:
939 @itemize @minus
940 @item
941 one or more @file{Makefile} files, usually one in each subdirectory of the
942 package (@pxref{Makefile Substitutions});
944 @item
945 optionally, a C header file, the name of which is configurable,
946 containing @code{#define} directives (@pxref{Configuration Headers});
948 @item
949 a shell script called @file{config.status} that, when run, recreates
950 the files listed above (@pxref{config.status Invocation});
952 @item
953 an optional shell script normally called @file{config.cache}
954 (created when using @samp{configure --config-cache}) that
955 saves the results of running many of the tests (@pxref{Cache Files});
957 @item
958 a file called @file{config.log} containing any messages produced by
959 compilers, to help debugging if @command{configure} makes a mistake.
960 @end itemize
962 @cindex @file{configure.in}
963 @cindex @file{configure.ac}
964 To create a @command{configure} script with Autoconf, you need to write an
965 Autoconf input file @file{configure.ac} (or @file{configure.in}) and run
966 @command{autoconf} on it.  If you write your own feature tests to
967 supplement those that come with Autoconf, you might also write files
968 called @file{aclocal.m4} and @file{acsite.m4}.  If you use a C header
969 file to contain @code{#define} directives, you might also run
970 @command{autoheader}, and you can distribute the generated file
971 @file{config.h.in} with the package.
973 Here is a diagram showing how the files that can be used in
974 configuration are produced.  Programs that are executed are suffixed by
975 @samp{*}.  Optional files are enclosed in square brackets (@samp{[]}).
976 @command{autoconf} and @command{autoheader} also read the installed Autoconf
977 macro files (by reading @file{autoconf.m4}).
979 @noindent
980 Files used in preparing a software package for distribution:
981 @example
982 your source files --> [autoscan*] --> [configure.scan] --> configure.ac
984 @group
985 configure.ac --.
986                |   .------> autoconf* -----> configure
987 [aclocal.m4] --+---+
988                |   `-----> [autoheader*] --> [config.h.in]
989 [acsite.m4] ---'
990 @end group
992 Makefile.in -------------------------------> Makefile.in
993 @end example
995 @noindent
996 Files used in configuring a software package:
997 @example
998 @group
999                        .-------------> [config.cache]
1000 configure* ------------+-------------> config.log
1001                        |
1002 [config.h.in] -.       v            .-> [config.h] -.
1003                +--> config.status* -+               +--> make*
1004 Makefile.in ---'                    `-> Makefile ---'
1005 @end group
1006 @end example
1008 @menu
1009 * Writing Autoconf Input::      What to put in an Autoconf input file
1010 * autoscan Invocation::         Semi-automatic @file{configure.ac} writing
1011 * ifnames Invocation::          Listing the conditionals in source code
1012 * autoconf Invocation::         How to create configuration scripts
1013 * autoreconf Invocation::       Remaking multiple @command{configure} scripts
1014 @end menu
1016 @node Writing Autoconf Input
1017 @section Writing @file{configure.ac}
1019 To produce a @command{configure} script for a software package, create a
1020 file called @file{configure.ac} that contains invocations of the
1021 Autoconf macros that test the system features your package needs or can
1022 use.  Autoconf macros already exist to check for many features; see
1023 @ref{Existing Tests}, for their descriptions.  For most other features,
1024 you can use Autoconf template macros to produce custom checks; see
1025 @ref{Writing Tests}, for information about them.  For especially tricky
1026 or specialized features, @file{configure.ac} might need to contain some
1027 hand-crafted shell commands; see @ref{Portable Shell}.  The
1028 @command{autoscan} program can give you a good start in writing
1029 @file{configure.ac} (@pxref{autoscan Invocation}, for more information).
1031 Previous versions of Autoconf promoted the name @file{configure.in},
1032 which is somewhat ambiguous (the tool needed to process this file is not
1033 described by its extension), and introduces a slight confusion with
1034 @file{config.h.in} and so on (for which @samp{.in} means ``to be
1035 processed by @command{configure}'').  Using @file{configure.ac} is now
1036 preferred.
1038 @menu
1039 * Shell Script Compiler::       Autoconf as solution of a problem
1040 * Autoconf Language::           Programming in Autoconf
1041 * Autoconf Input Layout::       Standard organization of @file{configure.ac}
1042 @end menu
1044 @node Shell Script Compiler
1045 @subsection A Shell Script Compiler
1047 Just as for any other computer language, in order to properly program
1048 @file{configure.ac} in Autoconf you must understand @emph{what} problem
1049 the language tries to address and @emph{how} it does so.
1051 The problem Autoconf addresses is that the world is a mess.  After all,
1052 you are using Autoconf in order to have your package compile easily on
1053 all sorts of different systems, some of them being extremely hostile.
1054 Autoconf itself bears the price for these differences: @command{configure}
1055 must run on all those systems, and thus @command{configure} must limit itself
1056 to their lowest common denominator of features.
1058 Naturally, you might then think of shell scripts; who needs
1059 @command{autoconf}?  A set of properly written shell functions is enough to
1060 make it easy to write @command{configure} scripts by hand.  Sigh!
1061 Unfortunately, shell functions do not belong to the least common
1062 denominator; therefore, where you would like to define a function and
1063 use it ten times, you would instead need to copy its body ten times.
1064 Even in 2007, where shells without any function support are far and
1065 few between, there are pitfalls to avoid when making use of them.
1067 So, what is really needed is some kind of compiler, @command{autoconf},
1068 that takes an Autoconf program, @file{configure.ac}, and transforms it
1069 into a portable shell script, @command{configure}.
1071 How does @command{autoconf} perform this task?
1073 There are two obvious possibilities: creating a brand new language or
1074 extending an existing one.  The former option is attractive: all
1075 sorts of optimizations could easily be implemented in the compiler and
1076 many rigorous checks could be performed on the Autoconf program
1077 (e.g., rejecting any non-portable construct).  Alternatively, you can
1078 extend an existing language, such as the @code{sh} (Bourne shell)
1079 language.
1081 Autoconf does the latter: it is a layer on top of @code{sh}.  It was
1082 therefore most convenient to implement @command{autoconf} as a macro
1083 expander: a program that repeatedly performs @dfn{macro expansions} on
1084 text input, replacing macro calls with macro bodies and producing a pure
1085 @code{sh} script in the end.  Instead of implementing a dedicated
1086 Autoconf macro expander, it is natural to use an existing
1087 general-purpose macro language, such as M4, and implement the extensions
1088 as a set of M4 macros.
1091 @node Autoconf Language
1092 @subsection The Autoconf Language
1093 @cindex quotation
1095 The Autoconf language differs from many other computer
1096 languages because it treats actual code the same as plain text.  Whereas
1097 in C, for instance, data and instructions have different syntactic
1098 status, in Autoconf their status is rigorously the same.  Therefore, we
1099 need a means to distinguish literal strings from text to be expanded:
1100 quotation.
1102 When calling macros that take arguments, there must not be any white
1103 space between the macro name and the open parenthesis.  Arguments should
1104 be enclosed within the M4 quote characters @samp{[} and @samp{]}, and be
1105 separated by commas.  Any leading blanks or newlines in arguments are ignored,
1106 unless they are quoted.  You should always quote an argument that
1107 might contain a macro name, comma, parenthesis, or a leading blank or
1108 newline.  This rule applies recursively for every macro
1109 call, including macros called from other macros.
1111 For instance:
1113 @example
1114 AC_CHECK_HEADER([stdio.h],
1115                 [AC_DEFINE([HAVE_STDIO_H], [1],
1116                    [Define to 1 if you have <stdio.h>.])],
1117                 [AC_MSG_ERROR([Sorry, can't do anything for you])])
1118 @end example
1120 @noindent
1121 is quoted properly.  You may safely simplify its quotation to:
1123 @example
1124 AC_CHECK_HEADER([stdio.h],
1125                 [AC_DEFINE([HAVE_STDIO_H], 1,
1126                    [Define to 1 if you have <stdio.h>.])],
1127                 [AC_MSG_ERROR([Sorry, can't do anything for you])])
1128 @end example
1130 @noindent
1131 because @samp{1} cannot contain a macro call.  Here, the argument of
1132 @code{AC_MSG_ERROR} must be quoted; otherwise, its comma would be
1133 interpreted as an argument separator.  Also, the second and third arguments
1134 of @samp{AC_CHECK_HEADER} must be quoted, since they contain
1135 macro calls.  The three arguments @samp{HAVE_STDIO_H}, @samp{stdio.h},
1136 and @samp{Define to 1 if you have <stdio.h>.} do not need quoting, but
1137 if you unwisely defined a macro with a name like @samp{Define} or
1138 @samp{stdio} then they would need quoting.  Cautious Autoconf users
1139 would keep the quotes, but many Autoconf users find such precautions
1140 annoying, and would rewrite the example as follows:
1142 @example
1143 AC_CHECK_HEADER(stdio.h,
1144                 [AC_DEFINE(HAVE_STDIO_H, 1,
1145                    [Define to 1 if you have <stdio.h>.])],
1146                 [AC_MSG_ERROR([Sorry, can't do anything for you])])
1147 @end example
1149 @noindent
1150 This is safe, so long as you adopt good naming conventions and do not
1151 define macros with names like @samp{HAVE_STDIO_H}, @samp{stdio}, or
1152 @samp{h}.  Though it is also safe here to omit the quotes around
1153 @samp{Define to 1 if you have <stdio.h>.} this is not recommended, as
1154 message strings are more likely to inadvertently contain commas.
1156 The following example is wrong and dangerous, as it is underquoted:
1158 @example
1159 AC_CHECK_HEADER(stdio.h,
1160                 AC_DEFINE(HAVE_STDIO_H, 1,
1161                    Define to 1 if you have <stdio.h>.),
1162                 AC_MSG_ERROR([Sorry, can't do anything for you]))
1163 @end example
1165 In other cases, you may have to use text that also resembles a macro
1166 call.  You must quote that text even when it is not passed as a macro
1167 argument:
1169 @example
1170 echo "Hard rock was here!  --[AC_DC]"
1171 @end example
1173 @noindent
1174 which results in:
1176 @example
1177 echo "Hard rock was here!  --AC_DC"
1178 @end example
1180 @noindent
1181 When you use the same text in a macro argument, you must therefore have
1182 an extra quotation level (since one is stripped away by the macro
1183 substitution).  In general, then, it is a good idea to @emph{use double
1184 quoting for all literal string arguments}:
1186 @example
1187 AC_MSG_WARN([[AC_DC stinks  --Iron Maiden]])
1188 @end example
1190 You are now able to understand one of the constructs of Autoconf that
1191 has been continually misunderstood@dots{}  The rule of thumb is that
1192 @emph{whenever you expect macro expansion, expect quote expansion};
1193 i.e., expect one level of quotes to be lost.  For instance:
1195 @example
1196 AC_COMPILE_IFELSE([char b[10];], [], [AC_MSG_ERROR([you lose])])
1197 @end example
1199 @noindent
1200 is incorrect: here, the first argument of @code{AC_COMPILE_IFELSE} is
1201 @samp{char b[10];} and is expanded once, which results in
1202 @samp{char b10;}.  (There was an idiom common in Autoconf's past to
1203 address this issue via the M4 @code{changequote} primitive, but do not
1204 use it!)  Let's take a closer look: the author meant the first argument
1205 to be understood as a literal, and therefore it must be quoted twice:
1207 @example
1208 AC_COMPILE_IFELSE([[char b[10];]], [], [AC_MSG_ERROR([you lose])])
1209 @end example
1211 @noindent
1212 Voil@`a, you actually produce @samp{char b[10];} this time!
1214 On the other hand, descriptions (e.g., the last parameter of
1215 @code{AC_DEFINE} or @code{AS_HELP_STRING}) are not literals---they
1216 are subject to line breaking, for example---and should not be double quoted.
1217 Even if these descriptions are short and are not actually broken, double
1218 quoting them yields weird results.
1220 Some macros take optional arguments, which this documentation represents
1221 as @ovar{arg} (not to be confused with the quote characters).  You may
1222 just leave them empty, or use @samp{[]} to make the emptiness of the
1223 argument explicit, or you may simply omit the trailing commas.  The
1224 three lines below are equivalent:
1226 @example
1227 AC_CHECK_HEADERS([stdio.h], [], [], [])
1228 AC_CHECK_HEADERS([stdio.h],,,)
1229 AC_CHECK_HEADERS([stdio.h])
1230 @end example
1232 It is best to put each macro call on its own line in
1233 @file{configure.ac}.  Most of the macros don't add extra newlines; they
1234 rely on the newline after the macro call to terminate the commands.
1235 This approach makes the generated @command{configure} script a little
1236 easier to read by not inserting lots of blank lines.  It is generally
1237 safe to set shell variables on the same line as a macro call, because
1238 the shell allows assignments without intervening newlines.
1240 You can include comments in @file{configure.ac} files by starting them
1241 with the @samp{#}.  For example, it is helpful to begin
1242 @file{configure.ac} files with a line like this:
1244 @example
1245 # Process this file with autoconf to produce a configure script.
1246 @end example
1248 @node Autoconf Input Layout
1249 @subsection Standard @file{configure.ac} Layout
1251 The order in which @file{configure.ac} calls the Autoconf macros is not
1252 important, with a few exceptions.  Every @file{configure.ac} must
1253 contain a call to @code{AC_INIT} before the checks, and a call to
1254 @code{AC_OUTPUT} at the end (@pxref{Output}).  Additionally, some macros
1255 rely on other macros having been called first, because they check
1256 previously set values of some variables to decide what to do.  These
1257 macros are noted in the individual descriptions (@pxref{Existing
1258 Tests}), and they also warn you when @command{configure} is created if they
1259 are called out of order.
1261 To encourage consistency, here is a suggested order for calling the
1262 Autoconf macros.  Generally speaking, the things near the end of this
1263 list are those that could depend on things earlier in it.  For example,
1264 library functions could be affected by types and libraries.
1266 @display
1267 @group
1268 Autoconf requirements
1269 @code{AC_INIT(@var{package}, @var{version}, @var{bug-report-address})}
1270 information on the package
1271 checks for programs
1272 checks for libraries
1273 checks for header files
1274 checks for types
1275 checks for structures
1276 checks for compiler characteristics
1277 checks for library functions
1278 checks for system services
1279 @code{AC_CONFIG_FILES(@r{[}@var{file@dots{}}@r{]})}
1280 @code{AC_OUTPUT}
1281 @end group
1282 @end display
1285 @node autoscan Invocation
1286 @section Using @command{autoscan} to Create @file{configure.ac}
1287 @cindex @command{autoscan}
1289 The @command{autoscan} program can help you create and/or maintain a
1290 @file{configure.ac} file for a software package.  @command{autoscan}
1291 examines source files in the directory tree rooted at a directory given
1292 as a command line argument, or the current directory if none is given.
1293 It searches the source files for common portability problems and creates
1294 a file @file{configure.scan} which is a preliminary @file{configure.ac}
1295 for that package, and checks a possibly existing @file{configure.ac} for
1296 completeness.
1298 When using @command{autoscan} to create a @file{configure.ac}, you
1299 should manually examine @file{configure.scan} before renaming it to
1300 @file{configure.ac}; it probably needs some adjustments.
1301 Occasionally, @command{autoscan} outputs a macro in the wrong order
1302 relative to another macro, so that @command{autoconf} produces a warning;
1303 you need to move such macros manually.  Also, if you want the package to
1304 use a configuration header file, you must add a call to
1305 @code{AC_CONFIG_HEADERS} (@pxref{Configuration Headers}).  You might
1306 also have to change or add some @code{#if} directives to your program in
1307 order to make it work with Autoconf (@pxref{ifnames Invocation}, for
1308 information about a program that can help with that job).
1310 When using @command{autoscan} to maintain a @file{configure.ac}, simply
1311 consider adding its suggestions.  The file @file{autoscan.log}
1312 contains detailed information on why a macro is requested.
1314 @command{autoscan} uses several data files (installed along with Autoconf)
1315 to determine which macros to output when it finds particular symbols in
1316 a package's source files.  These data files all have the same format:
1317 each line consists of a symbol, one or more blanks, and the Autoconf macro to
1318 output if that symbol is encountered.  Lines starting with @samp{#} are
1319 comments.
1321 @command{autoscan} accepts the following options:
1323 @table @option
1324 @item --help
1325 @itemx -h
1326 Print a summary of the command line options and exit.
1328 @item --version
1329 @itemx -V
1330 Print the version number of Autoconf and exit.
1332 @item --verbose
1333 @itemx -v
1334 Print the names of the files it examines and the potentially interesting
1335 symbols it finds in them.  This output can be voluminous.
1337 @item --include=@var{dir}
1338 @itemx -I @var{dir}
1339 Append @var{dir} to the include path.  Multiple invocations accumulate.
1341 @item --prepend-include=@var{dir}
1342 @itemx -B @var{dir}
1343 Prepend @var{dir} to the include path.  Multiple invocations accumulate.
1344 @end table
1346 @node ifnames Invocation
1347 @section Using @command{ifnames} to List Conditionals
1348 @cindex @command{ifnames}
1350 @command{ifnames} can help you write @file{configure.ac} for a software
1351 package.  It prints the identifiers that the package already uses in C
1352 preprocessor conditionals.  If a package has already been set up to have
1353 some portability, @command{ifnames} can thus help you figure out what its
1354 @command{configure} needs to check for.  It may help fill in some gaps in a
1355 @file{configure.ac} generated by @command{autoscan} (@pxref{autoscan
1356 Invocation}).
1358 @command{ifnames} scans all of the C source files named on the command line
1359 (or the standard input, if none are given) and writes to the standard
1360 output a sorted list of all the identifiers that appear in those files
1361 in @code{#if}, @code{#elif}, @code{#ifdef}, or @code{#ifndef}
1362 directives.  It prints each identifier on a line, followed by a
1363 space-separated list of the files in which that identifier occurs.
1365 @noindent
1366 @command{ifnames} accepts the following options:
1368 @table @option
1369 @item --help
1370 @itemx -h
1371 Print a summary of the command line options and exit.
1373 @item --version
1374 @itemx -V
1375 Print the version number of Autoconf and exit.
1376 @end table
1378 @node autoconf Invocation
1379 @section Using @command{autoconf} to Create @command{configure}
1380 @cindex @command{autoconf}
1382 To create @command{configure} from @file{configure.ac}, run the
1383 @command{autoconf} program with no arguments.  @command{autoconf} processes
1384 @file{configure.ac} with the M4 macro processor, using the
1385 Autoconf macros.  If you give @command{autoconf} an argument, it reads that
1386 file instead of @file{configure.ac} and writes the configuration script
1387 to the standard output instead of to @command{configure}.  If you give
1388 @command{autoconf} the argument @option{-}, it reads from the standard
1389 input instead of @file{configure.ac} and writes the configuration script
1390 to the standard output.
1392 The Autoconf macros are defined in several files.  Some of the files are
1393 distributed with Autoconf; @command{autoconf} reads them first.  Then it
1394 looks for the optional file @file{acsite.m4} in the directory that
1395 contains the distributed Autoconf macro files, and for the optional file
1396 @file{aclocal.m4} in the current directory.  Those files can contain
1397 your site's or the package's own Autoconf macro definitions
1398 (@pxref{Writing Autoconf Macros}, for more information).  If a macro is
1399 defined in more than one of the files that @command{autoconf} reads, the
1400 last definition it reads overrides the earlier ones.
1402 @command{autoconf} accepts the following options:
1404 @table @option
1405 @item --help
1406 @itemx -h
1407 Print a summary of the command line options and exit.
1409 @item --version
1410 @itemx -V
1411 Print the version number of Autoconf and exit.
1413 @item --verbose
1414 @itemx -v
1415 Report processing steps.
1417 @item --debug
1418 @itemx -d
1419 Don't remove the temporary files.
1421 @item --force
1422 @itemx -f
1423 Remake @file{configure} even if newer than its input files.
1425 @item --include=@var{dir}
1426 @itemx -I @var{dir}
1427 Append @var{dir} to the include path.  Multiple invocations accumulate.
1429 @item --prepend-include=@var{dir}
1430 @itemx -B @var{dir}
1431 Prepend @var{dir} to the include path.  Multiple invocations accumulate.
1433 @item --output=@var{file}
1434 @itemx -o @var{file}
1435 Save output (script or trace) to @var{file}.  The file @option{-} stands
1436 for the standard output.
1438 @item --warnings=@var{category}
1439 @itemx -W @var{category}
1440 @evindex WARNINGS
1441 Report the warnings related to @var{category} (which can actually be a
1442 comma separated list).  @xref{Reporting Messages}, macro
1443 @code{AC_DIAGNOSE}, for a comprehensive list of categories.  Special
1444 values include:
1446 @table @samp
1447 @item all
1448 report all the warnings
1450 @item none
1451 report none
1453 @item error
1454 treats warnings as errors
1456 @item no-@var{category}
1457 disable warnings falling into @var{category}
1458 @end table
1460 Warnings about @samp{syntax} are enabled by default, and the environment
1461 variable @env{WARNINGS}, a comma separated list of categories, is
1462 honored as well.  Passing @option{-W @var{category}} actually behaves as if
1463 you had passed @option{--warnings syntax,$WARNINGS,@var{category}}.  If
1464 you want to disable the defaults and @env{WARNINGS}, but (for example)
1465 enable the warnings about obsolete constructs, you would use @option{-W
1466 none,obsolete}.
1468 @cindex Back trace
1469 @cindex Macro invocation stack
1470 Because @command{autoconf} uses @command{autom4te} behind the scenes, it
1471 displays a back trace for errors, but not for warnings; if you want
1472 them, just pass @option{-W error}.  @xref{autom4te Invocation}, for some
1473 examples.
1475 @item --trace=@var{macro}[:@var{format}]
1476 @itemx -t @var{macro}[:@var{format}]
1477 Do not create the @command{configure} script, but list the calls to
1478 @var{macro} according to the @var{format}.  Multiple @option{--trace}
1479 arguments can be used to list several macros.  Multiple @option{--trace}
1480 arguments for a single macro are not cumulative; instead, you should
1481 just make @var{format} as long as needed.
1483 The @var{format} is a regular string, with newlines if desired, and
1484 several special escape codes.  It defaults to @samp{$f:$l:$n:$%}; see
1485 @ref{autom4te Invocation}, for details on the @var{format}.
1487 @item --initialization
1488 @itemx -i
1489 By default, @option{--trace} does not trace the initialization of the
1490 Autoconf macros (typically the @code{AC_DEFUN} definitions).  This
1491 results in a noticeable speedup, but can be disabled by this option.
1492 @end table
1495 It is often necessary to check the content of a @file{configure.ac}
1496 file, but parsing it yourself is extremely fragile and error-prone.  It
1497 is suggested that you rely upon @option{--trace} to scan
1498 @file{configure.ac}.  For instance, to find the list of variables that
1499 are substituted, use:
1501 @example
1502 @group
1503 $ @kbd{autoconf -t AC_SUBST}
1504 configure.ac:2:AC_SUBST:ECHO_C
1505 configure.ac:2:AC_SUBST:ECHO_N
1506 configure.ac:2:AC_SUBST:ECHO_T
1507 @i{More traces deleted}
1508 @end group
1509 @end example
1511 @noindent
1512 The example below highlights the difference between @samp{$@@},
1513 @samp{$*}, and @samp{$%}.
1515 @example
1516 @group
1517 $ @kbd{cat configure.ac}
1518 AC_DEFINE(This, is, [an
1519 [example]])
1520 $ @kbd{autoconf -t 'AC_DEFINE:@@: $@@}
1521 *: $*
1522 %: $%'
1523 @@: [This],[is],[an
1524 [example]]
1525 *: This,is,an
1526 [example]
1527 %: This:is:an [example]
1528 @end group
1529 @end example
1531 @noindent
1532 The @var{format} gives you a lot of freedom:
1534 @example
1535 @group
1536 $ @kbd{autoconf -t 'AC_SUBST:$$ac_subst@{"$1"@} = "$f:$l";'}
1537 $ac_subst@{"ECHO_C"@} = "configure.ac:2";
1538 $ac_subst@{"ECHO_N"@} = "configure.ac:2";
1539 $ac_subst@{"ECHO_T"@} = "configure.ac:2";
1540 @i{More traces deleted}
1541 @end group
1542 @end example
1544 @noindent
1545 A long @var{separator} can be used to improve the readability of complex
1546 structures, and to ease their parsing (for instance when no single
1547 character is suitable as a separator):
1549 @example
1550 @group
1551 $ @kbd{autoconf -t 'AM_MISSING_PROG:$@{|:::::|@}*'}
1552 ACLOCAL|:::::|aclocal|:::::|$missing_dir
1553 AUTOCONF|:::::|autoconf|:::::|$missing_dir
1554 AUTOMAKE|:::::|automake|:::::|$missing_dir
1555 @i{More traces deleted}
1556 @end group
1557 @end example
1559 @node autoreconf Invocation
1560 @section Using @command{autoreconf} to Update @command{configure} Scripts
1561 @cindex @command{autoreconf}
1563 Installing the various components of the @acronym{GNU} Build System can be
1564 tedious: running @command{autopoint} for Gettext, @command{automake} for
1565 @file{Makefile.in} etc.@: in each directory.  It may be needed either
1566 because some tools such as @command{automake} have been updated on your
1567 system, or because some of the sources such as @file{configure.ac} have
1568 been updated, or finally, simply in order to install the @acronym{GNU} Build
1569 System in a fresh tree.
1571 @command{autoreconf} runs @command{autoconf}, @command{autoheader},
1572 @command{aclocal}, @command{automake}, @command{libtoolize}, and
1573 @command{autopoint} (when appropriate) repeatedly to update the
1574 @acronym{GNU} Build System in the specified directories and their
1575 subdirectories (@pxref{Subdirectories}).  By default, it only remakes
1576 those files that are older than their sources.  The environment variables
1577 @env{AUTOCONF}, @env{AUTOHEADER}, @env{AUTOMAKE}, @env{ACLOCAL},
1578 @env{AUTOPOINT}, @env{LIBTOOLIZE}, @env{M4}, and @env{MAKE} may be used
1579 to override the invocation of the respective tools.
1581 If you install a new version of some tool, you can make
1582 @command{autoreconf} remake @emph{all} of the files by giving it the
1583 @option{--force} option.
1585 @xref{Automatic Remaking}, for Make rules to automatically
1586 rebuild @command{configure} scripts when their source files change.  That
1587 method handles the timestamps of configuration header templates
1588 properly, but does not pass @option{--autoconf-dir=@var{dir}} or
1589 @option{--localdir=@var{dir}}.
1591 @cindex Gettext
1592 @cindex @command{autopoint}
1593 Gettext supplies the @command{autopoint} command to add translation
1594 infrastructure to a source package.  If you use @command{autopoint},
1595 your @file{configure.ac} should invoke both @code{AM_GNU_GETTEXT} and
1596 @code{AM_GNU_GETTEXT_VERSION(@var{gettext-version})}.  @xref{autopoint
1597 Invocation, , Invoking the @code{autopoint} Program, gettext,
1598 @acronym{GNU} @code{gettext} utilities}, for further details.
1600 @noindent
1601 @command{autoreconf} accepts the following options:
1603 @table @option
1604 @item --help
1605 @itemx -h
1606 Print a summary of the command line options and exit.
1608 @item --version
1609 @itemx -V
1610 Print the version number of Autoconf and exit.
1612 @item --verbose
1613 Print the name of each directory @command{autoreconf} examines and the
1614 commands it runs.  If given two or more times, pass @option{--verbose}
1615 to subordinate tools that support it.
1617 @item --debug
1618 @itemx -d
1619 Don't remove the temporary files.
1621 @item --force
1622 @itemx -f
1623 Remake even @file{configure} scripts and configuration headers that are
1624 newer than their input files (@file{configure.ac} and, if present,
1625 @file{aclocal.m4}).
1627 @item --install
1628 @itemx -i
1629 Install the missing auxiliary files in the package.  By default, files
1630 are copied; this can be changed with @option{--symlink}.
1632 If deemed appropriate, this option triggers calls to
1633 @samp{automake --add-missing},
1634 @samp{libtoolize}, @samp{autopoint}, etc.
1636 @item --no-recursive
1637 Do not rebuild files in subdirectories to configure (see @ref{Subdirectories},
1638 macro @code{AC_CONFIG_SUBDIRS}).
1640 @item --symlink
1641 @itemx -s
1642 When used with @option{--install}, install symbolic links to the missing
1643 auxiliary files instead of copying them.
1645 @item --make
1646 @itemx -m
1647 When the directories were configured, update the configuration by
1648 running @samp{./config.status --recheck && ./config.status}, and then
1649 run @samp{make}.
1651 @item --include=@var{dir}
1652 @itemx -I @var{dir}
1653 Append @var{dir} to the include path.  Multiple invocations accumulate.
1654 Passed on to @command{autoconf} and @command{autoheader} internally.
1656 @item --prepend-include=@var{dir}
1657 @itemx -B @var{dir}
1658 Prepend @var{dir} to the include path.  Multiple invocations accumulate.
1659 Passed on to @command{autoconf} and @command{autoheader} internally.
1661 @item --warnings=@var{category}
1662 @itemx -W @var{category}
1663 @evindex WARNINGS
1664 Report the warnings related to @var{category} (which can actually be a
1665 comma separated list).
1667 @table @samp
1668 @item cross
1669 related to cross compilation issues.
1671 @item obsolete
1672 report the uses of obsolete constructs.
1674 @item portability
1675 portability issues
1677 @item syntax
1678 dubious syntactic constructs.
1680 @item all
1681 report all the warnings
1683 @item none
1684 report none
1686 @item error
1687 treats warnings as errors
1689 @item no-@var{category}
1690 disable warnings falling into @var{category}
1691 @end table
1693 Warnings about @samp{syntax} are enabled by default, and the environment
1694 variable @env{WARNINGS}, a comma separated list of categories, is
1695 honored as well.  Passing @option{-W @var{category}} actually behaves as if
1696 you had passed @option{--warnings syntax,$WARNINGS,@var{category}}.  If
1697 you want to disable the defaults and @env{WARNINGS}, but (for example)
1698 enable the warnings about obsolete constructs, you would use @option{-W
1699 none,obsolete}.
1700 @end table
1702 If you want @command{autoreconf} to pass flags that are not listed here
1703 on to @command{aclocal}, set @code{ACLOCAL_AMFLAGS} in your @file{Makefile.am}.
1704 Due to a limitation in the Autoconf implementation these flags currently
1705 must be set on a single line in @file{Makefile.am}, without any
1706 backslash-newlines.
1708 @c ========================================= Initialization and Output Files.
1710 @node Setup
1711 @chapter Initialization and Output Files
1713 Autoconf-generated @command{configure} scripts need some information about
1714 how to initialize, such as how to find the package's source files and
1715 about the output files to produce.  The following sections describe the
1716 initialization and the creation of output files.
1718 @menu
1719 * Initializing configure::      Option processing etc.
1720 * Versioning::                  Dealing with Autoconf versions
1721 * Notices::                     Copyright, version numbers in @command{configure}
1722 * Input::                       Where Autoconf should find files
1723 * Output::                      Outputting results from the configuration
1724 * Configuration Actions::       Preparing the output based on results
1725 * Configuration Files::         Creating output files
1726 * Makefile Substitutions::      Using output variables in makefiles
1727 * Configuration Headers::       Creating a configuration header file
1728 * Configuration Commands::      Running arbitrary instantiation commands
1729 * Configuration Links::         Links depending on the configuration
1730 * Subdirectories::              Configuring independent packages together
1731 * Default Prefix::              Changing the default installation prefix
1732 @end menu
1734 @node Initializing configure
1735 @section Initializing @command{configure}
1737 Every @command{configure} script must call @code{AC_INIT} before doing
1738 anything else.  The only other required macro is @code{AC_OUTPUT}
1739 (@pxref{Output}).
1741 @anchor{AC_INIT}
1742 @defmac AC_INIT (@var{package}, @var{version}, @ovar{bug-report}, @
1743   @ovar{tarname})
1744 @acindex{INIT}
1745 Process any command-line arguments and perform various initializations
1746 and verifications.
1748 Set the name of the @var{package} and its @var{version}.  These are
1749 typically used in @option{--version} support, including that of
1750 @command{configure}.  The optional argument @var{bug-report} should be
1751 the email to which users should send bug reports.  The package
1752 @var{tarname} differs from @var{package}: the latter designates the full
1753 package name (e.g., @samp{GNU Autoconf}), while the former is meant for
1754 distribution tar ball names (e.g., @samp{autoconf}).  It defaults to
1755 @var{package} with @samp{GNU } stripped, lower-cased, and all characters
1756 other than alphanumerics and underscores are changed to @samp{-}.
1758 It is preferable that the arguments of @code{AC_INIT} be static, i.e.,
1759 there should not be any shell computation, but they can be computed by
1762 The following M4 macros (e.g., @code{AC_PACKAGE_NAME}), output variables
1763 (e.g., @code{PACKAGE_NAME}), and preprocessor symbols (e.g.,
1764 @code{PACKAGE_NAME}), are defined by @code{AC_INIT}:
1766 @table @asis
1767 @item @code{AC_PACKAGE_NAME}, @code{PACKAGE_NAME}
1768 @acindex{PACKAGE_NAME}
1769 @ovindex PACKAGE_NAME
1770 @cvindex PACKAGE_NAME
1771 Exactly @var{package}.
1773 @item @code{AC_PACKAGE_TARNAME}, @code{PACKAGE_TARNAME}
1774 @acindex{PACKAGE_TARNAME}
1775 @ovindex PACKAGE_TARNAME
1776 @cvindex PACKAGE_TARNAME
1777 Exactly @var{tarname}.
1779 @item @code{AC_PACKAGE_VERSION}, @code{PACKAGE_VERSION}
1780 @acindex{PACKAGE_VERSION}
1781 @ovindex PACKAGE_VERSION
1782 @cvindex PACKAGE_VERSION
1783 Exactly @var{version}.
1785 @item @code{AC_PACKAGE_STRING}, @code{PACKAGE_STRING}
1786 @acindex{PACKAGE_STRING}
1787 @ovindex PACKAGE_STRING
1788 @cvindex PACKAGE_STRING
1789 Exactly @samp{@var{package} @var{version}}.
1791 @item @code{AC_PACKAGE_BUGREPORT}, @code{PACKAGE_BUGREPORT}
1792 @acindex{PACKAGE_BUGREPORT}
1793 @ovindex PACKAGE_BUGREPORT
1794 @cvindex PACKAGE_BUGREPORT
1795 Exactly @var{bug-report}.
1796 @end table
1797 @end defmac
1799 If your @command{configure} script does its own option processing, it
1800 should inspect @samp{$@@} or @samp{$*} immediately after calling
1801 @code{AC_INIT}, because other Autoconf macros liberally use the
1802 @command{set} command to process strings, and this has the side effect
1803 of updating @samp{$@@} and @samp{$*}.  However, we suggest that you use
1804 standard macros like @code{AC_ARG_ENABLE} instead of attempting to
1805 implement your own option processing.  @xref{Site Configuration}.
1807 @node Versioning
1808 @section Dealing with Autoconf versions
1809 @cindex Autoconf version
1810 @cindex version, Autoconf
1812 The following optional macros can be used to help choose the minimum
1813 version of Autoconf that can successfully compile a given
1814 @file{configure.ac}.
1816 @defmac AC_PREREQ (@var{version})
1817 @acindex{PREREQ}
1818 @cindex Version
1819 Ensure that a recent enough version of Autoconf is being used.  If the
1820 version of Autoconf being used to create @command{configure} is
1821 earlier than @var{version}, print an error message to the standard
1822 error output and exit with failure (exit status is 63).  For example:
1824 @example
1825 AC_PREREQ([@value{VERSION}])
1826 @end example
1828 This macro is the only macro that may be used before @code{AC_INIT}, but
1829 for consistency, you are invited not to do so.
1830 @end defmac
1832 @defmac AC_AUTOCONF_VERSION
1833 @acindex{AUTOCONF_VERSION}
1834 This macro was introduced in Autoconf 2.62.  It identifies the version
1835 of Autoconf that is currently parsing the input file, in a format
1836 suitable for @code{m4_version_compare} (@pxref{m4_version_compare}); in
1837 other words, for this release of Autoconf, its value is
1838 @samp{@value{VERSION}}.  One potential use of this macro is for writing
1839 conditional fallbacks based on when a feature was added to Autoconf,
1840 rather than using @code{AC_PREREQ} to require the newer version of
1841 Autoconf.  However, remember that the Autoconf philosophy favors feature
1842 checks over version checks.
1844 You should not expand this macro directly; use
1845 @samp{m4_defn([AC_AUTOCONF_VERSION])} instead.  This is because some
1846 users might
1847 have a beta version of Autoconf installed, with arbitrary letters
1848 included in its version string.  This means it is possible for the
1849 version string to contain the name of a defined macro, such that
1850 expanding @code{AC_AUTOCONF_VERSION} would trigger the expansion of that
1851 macro during rescanning, and change the version string to be different
1852 than what you intended to check.
1853 @end defmac
1855 @node Notices
1856 @section Notices in @command{configure}
1857 @cindex Notices in @command{configure}
1859 The following macros manage version numbers for @command{configure}
1860 scripts.  Using them is optional.
1862 @defmac AC_COPYRIGHT (@var{copyright-notice})
1863 @acindex{COPYRIGHT}
1864 @cindex Copyright Notice
1865 State that, in addition to the Free Software Foundation's copyright on
1866 the Autoconf macros, parts of your @command{configure} are covered by the
1867 @var{copyright-notice}.
1869 The @var{copyright-notice} shows up in both the head of
1870 @command{configure} and in @samp{configure --version}.
1871 @end defmac
1874 @defmac AC_REVISION (@var{revision-info})
1875 @acindex{REVISION}
1876 @cindex Revision
1877 Copy revision stamp @var{revision-info} into the @command{configure}
1878 script, with any dollar signs or double-quotes removed.  This macro lets
1879 you put a revision stamp from @file{configure.ac} into @command{configure}
1880 without @acronym{RCS} or @acronym{CVS} changing it when you check in
1881 @command{configure}.  That way, you can determine easily which revision of
1882 @file{configure.ac} a particular @command{configure} corresponds to.
1884 For example, this line in @file{configure.ac}:
1886 @c The @w prevents RCS from changing the example in the manual.
1887 @example
1888 AC_REVISION([@w{$}Revision: 1.30 $])
1889 @end example
1891 @noindent
1892 produces this in @command{configure}:
1894 @example
1895 #!/bin/sh
1896 # From configure.ac Revision: 1.30
1897 @end example
1898 @end defmac
1901 @node Input
1902 @section Finding @command{configure} Input
1904 @anchor{AC_CONFIG_SRCDIR}
1905 @defmac AC_CONFIG_SRCDIR (@var{unique-file-in-source-dir})
1906 @acindex{CONFIG_SRCDIR}
1907 @var{unique-file-in-source-dir} is some file that is in the package's
1908 source directory; @command{configure} checks for this file's existence to
1909 make sure that the directory that it is told contains the source code in
1910 fact does.  Occasionally people accidentally specify the wrong directory
1911 with @option{--srcdir}; this is a safety check.  @xref{configure
1912 Invocation}, for more information.
1913 @end defmac
1916 @c FIXME: Remove definitively once --install explained.
1918 @c Small packages may store all their macros in @code{aclocal.m4}.  As the
1919 @c set of macros grows, or for maintenance reasons, a maintainer may prefer
1920 @c to split the macros in several files.  In this case, Autoconf must be
1921 @c told which files to load, and in which order.
1923 @c @defmac AC_INCLUDE (@var{file}@dots{})
1924 @c @acindex{INCLUDE}
1925 @c @c FIXME: There is no longer shell globbing.
1926 @c Read the macro definitions that appear in the listed files.  A list of
1927 @c space-separated file names or shell globbing patterns is expected.  The
1928 @c files are read in the order they're listed.
1930 @c Because the order of definition of macros is important (only the last
1931 @c definition of a macro is used), beware that it is @code{AC_INIT} that
1932 @c loads @file{acsite.m4} and @file{aclocal.m4}.  Note that
1933 @c @code{AC_INCLUDE}ing a file before @code{AC_INIT} or within
1934 @c @file{aclocal.m4} is different from doing so after @code{AC_INIT}: in
1935 @c the latter case, non-macro lines from included files may end up in the
1936 @c @file{configure} script, whereas in the former case, they'd be discarded
1937 @c just like any text that appear before @code{AC_INIT}.
1938 @c @end defmac
1940 Packages that do manual configuration or use the @command{install} program
1941 might need to tell @command{configure} where to find some other shell
1942 scripts by calling @code{AC_CONFIG_AUX_DIR}, though the default places
1943 it looks are correct for most cases.
1945 @defmac AC_CONFIG_AUX_DIR (@var{dir})
1946 @acindex{CONFIG_AUX_DIR}
1947 Use the auxiliary build tools (e.g., @file{install-sh},
1948 @file{config.sub}, @file{config.guess}, Cygnus @command{configure},
1949 Automake and Libtool scripts, etc.)@: that are in directory @var{dir}.
1950 These are auxiliary files used in configuration.  @var{dir} can be
1951 either absolute or relative to @file{@var{srcdir}}.  The default is
1952 @file{@var{srcdir}} or @file{@var{srcdir}/..} or
1953 @file{@var{srcdir}/../..}, whichever is the first that contains
1954 @file{install-sh}.  The other files are not checked for, so that using
1955 @code{AC_PROG_INSTALL} does not automatically require distributing the
1956 other auxiliary files.  It checks for @file{install.sh} also, but that
1957 name is obsolete because some @code{make} have a rule that creates
1958 @file{install} from it if there is no makefile.
1960 The auxiliary directory is commonly named @file{build-aux}.
1961 If you need portability to @acronym{DOS} variants, do not name the
1962 auxiliary directory @file{aux}.  @xref{File System Conventions}.
1963 @end defmac
1965 @defmac AC_REQUIRE_AUX_FILE (@var{file})
1966 @acindex{REQUIRE_AUX_FILE}
1967 Declares that @var{file} is expected in the directory defined above.  In
1968 Autoconf proper, this macro does nothing: its sole purpose is to be
1969 traced by third-party tools to produce a list of expected auxiliary
1970 files.  For instance it is called by macros like @code{AC_PROG_INSTALL}
1971 (@pxref{Particular Programs}) or @code{AC_CANONICAL_BUILD}
1972 (@pxref{Canonicalizing}) to register the auxiliary files they need.
1973 @end defmac
1975 Similarly, packages that use @command{aclocal} should declare where
1976 local macros can be found using @code{AC_CONFIG_MACRO_DIR}.
1978 @defmac AC_CONFIG_MACRO_DIR (@var{dir})
1979 @acindex{CONFIG_MACRO_DIR}
1980 Specify @var{dir} as the location of additional local Autoconf macros.
1981 This macro is intended for use by future versions of commands like
1982 @command{autoreconf} that trace macro calls.  It should be called
1983 directly from @file{configure.ac} so that tools that install macros for
1984 @command{aclocal} can find the macros' declarations.
1986 Note that if you use @command{aclocal} from Automake to generate
1987 @file{aclocal.m4}, you must also set @code{ACLOCAL_AMFLAGS = -I
1988 @var{dir}} in your top-level @file{Makefile.am}.  Due to a limitation in
1989 the Autoconf implementation of @command{autoreconf}, these include
1990 directives currently must be set on a single line in @file{Makefile.am},
1991 without any backslash-newlines.
1992 @end defmac
1995 @node Output
1996 @section Outputting Files
1997 @cindex Outputting files
1999 Every Autoconf script, e.g., @file{configure.ac}, should finish by
2000 calling @code{AC_OUTPUT}.  That is the macro that generates and runs
2001 @file{config.status}, which in turn creates the makefiles and any
2002 other files resulting from configuration.  This is the only required
2003 macro besides @code{AC_INIT} (@pxref{Input}).
2005 @anchor{AC_OUTPUT}
2006 @defmac AC_OUTPUT
2007 @acindex{OUTPUT}
2008 @cindex Instantiation
2009 Generate @file{config.status} and launch it.  Call this macro once, at
2010 the end of @file{configure.ac}.
2012 @file{config.status} performs all the configuration actions: all the
2013 output files (see @ref{Configuration Files}, macro
2014 @code{AC_CONFIG_FILES}), header files (see @ref{Configuration Headers},
2015 macro @code{AC_CONFIG_HEADERS}), commands (see @ref{Configuration
2016 Commands}, macro @code{AC_CONFIG_COMMANDS}), links (see
2017 @ref{Configuration Links}, macro @code{AC_CONFIG_LINKS}), subdirectories
2018 to configure (see @ref{Subdirectories}, macro @code{AC_CONFIG_SUBDIRS})
2019 are honored.
2021 The location of your @code{AC_OUTPUT} invocation is the exact point
2022 where configuration actions are taken: any code afterwards is
2023 executed by @code{configure} once @command{config.status} was run.  If
2024 you want to bind actions to @command{config.status} itself
2025 (independently of whether @command{configure} is being run), see
2026 @ref{Configuration Commands, , Running Arbitrary Configuration
2027 Commands}.
2028 @end defmac
2030 Historically, the usage of @code{AC_OUTPUT} was somewhat different.
2031 @xref{Obsolete Macros}, for a description of the arguments that
2032 @code{AC_OUTPUT} used to support.
2035 If you run @command{make} in subdirectories, you should run it using the
2036 @code{make} variable @code{MAKE}.  Most versions of @command{make} set
2037 @code{MAKE} to the name of the @command{make} program plus any options it
2038 was given.  (But many do not include in it the values of any variables
2039 set on the command line, so those are not passed on automatically.)
2040 Some old versions of @command{make} do not set this variable.  The
2041 following macro allows you to use it even with those versions.
2043 @anchor{AC_PROG_MAKE_SET}
2044 @defmac AC_PROG_MAKE_SET
2045 @acindex{PROG_MAKE_SET}
2046 @ovindex SET_MAKE
2047 If the Make command, @code{$MAKE} if set or else @samp{make}, predefines
2048 @code{$(MAKE)}, define output variable @code{SET_MAKE} to be empty.
2049 Otherwise, define @code{SET_MAKE} to a macro definition that sets
2050 @code{$(MAKE)}, such as @samp{MAKE=make}.  Calls @code{AC_SUBST} for
2051 @code{SET_MAKE}.
2052 @end defmac
2054 If you use this macro, place a line like this in each @file{Makefile.in}
2055 that runs @code{MAKE} on other directories:
2057 @example
2058 @@SET_MAKE@@
2059 @end example
2063 @node Configuration Actions
2064 @section Performing Configuration Actions
2065 @cindex Configuration actions
2067 @file{configure} is designed so that it appears to do everything itself,
2068 but there is actually a hidden slave: @file{config.status}.
2069 @file{configure} is in charge of examining your system, but it is
2070 @file{config.status} that actually takes the proper actions based on the
2071 results of @file{configure}.  The most typical task of
2072 @file{config.status} is to @emph{instantiate} files.
2074 This section describes the common behavior of the four standard
2075 instantiating macros: @code{AC_CONFIG_FILES}, @code{AC_CONFIG_HEADERS},
2076 @code{AC_CONFIG_COMMANDS} and @code{AC_CONFIG_LINKS}.  They all
2077 have this prototype:
2079 @c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
2080 @c awful.
2081 @example
2082 AC_CONFIG_FOOS(@var{tag}@dots{}, [@var{commands}], [@var{init-cmds}])
2083 @end example
2085 @noindent
2086 where the arguments are:
2088 @table @var
2089 @item tag@dots{}
2090 A blank-or-newline-separated list of tags, which are typically the names of
2091 the files to instantiate.
2093 You are encouraged to use literals as @var{tags}.  In particular, you
2094 should avoid
2096 @example
2097 @dots{} && my_foos="$my_foos fooo"
2098 @dots{} && my_foos="$my_foos foooo"
2099 AC_CONFIG_FOOS([$my_foos])
2100 @end example
2102 @noindent
2103 and use this instead:
2105 @example
2106 @dots{} && AC_CONFIG_FOOS([fooo])
2107 @dots{} && AC_CONFIG_FOOS([foooo])
2108 @end example
2110 The macros @code{AC_CONFIG_FILES} and @code{AC_CONFIG_HEADERS} use
2111 special @var{tag} values: they may have the form @samp{@var{output}} or
2112 @samp{@var{output}:@var{inputs}}.  The file @var{output} is instantiated
2113 from its templates, @var{inputs} (defaulting to @samp{@var{output}.in}).
2115 @samp{AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk)]},
2116 for example, asks for
2117 the creation of the file @file{Makefile} that contains the expansion of the
2118 output variables in the concatenation of @file{boiler/top.mk} and
2119 @file{boiler/bot.mk}.
2121 The special value @samp{-} might be used to denote the standard output
2122 when used in @var{output}, or the standard input when used in the
2123 @var{inputs}.  You most probably don't need to use this in
2124 @file{configure.ac}, but it is convenient when using the command line
2125 interface of @file{./config.status}, see @ref{config.status Invocation},
2126 for more details.
2128 The @var{inputs} may be absolute or relative file names.  In the latter
2129 case they are first looked for in the build tree, and then in the source
2130 tree.
2132 @item commands
2133 Shell commands output literally into @file{config.status}, and
2134 associated with a tag that the user can use to tell @file{config.status}
2135 which the commands to run.  The commands are run each time a @var{tag}
2136 request is given to @file{config.status}, typically each time the file
2137 @file{@var{tag}} is created.
2139 The variables set during the execution of @command{configure} are
2140 @emph{not} available here: you first need to set them via the
2141 @var{init-cmds}.  Nonetheless the following variables are precomputed:
2143 @table @code
2144 @item srcdir
2145 The name of the top source directory, assuming that the working
2146 directory is the top build directory.  This
2147 is what the @command{configure} option @option{--srcdir} sets.
2149 @item ac_top_srcdir
2150 The name of the top source directory, assuming that the working
2151 directory is the current build directory.
2154 @item ac_top_build_prefix
2155 The name of the top build directory, assuming that the working
2156 directory is the current build directory.
2157 It can be empty, or else ends with a slash, so that you may concatenate
2160 @item ac_srcdir
2161 The name of the corresponding source directory, assuming that the
2162 working directory is the current build directory.
2163 @end table
2165 @noindent
2166 The @dfn{current} directory refers to the directory (or
2167 pseudo-directory) containing the input part of @var{tags}.  For
2168 instance, running
2170 @example
2171 AC_CONFIG_COMMANDS([deep/dir/out:in/in.in], [@dots{}], [@dots{}])
2172 @end example
2174 @noindent
2175  with @option{--srcdir=../package} produces the following values:
2177 @example
2178 # Argument of --srcdir
2179 srcdir='../package'
2180 # Reversing deep/dir
2181 ac_top_build_prefix='../../'
2182 # Concatenation of $ac_top_build_prefix and srcdir
2183 ac_top_srcdir='../../../package'
2184 # Concatenation of $ac_top_srcdir and deep/dir
2185 ac_srcdir='../../../package/deep/dir'
2186 @end example
2188 @noindent
2189 independently of @samp{in/in.in}.
2191 @item init-cmds
2192 Shell commands output @emph{unquoted} near the beginning of
2193 @file{config.status}, and executed each time @file{config.status} runs
2194 (regardless of the tag).  Because they are unquoted, for example,
2195 @samp{$var} is output as the value of @code{var}.  @var{init-cmds}
2196 is typically used by @file{configure} to give @file{config.status} some
2197 variables it needs to run the @var{commands}.
2199 You should be extremely cautious in your variable names: all the
2200 @var{init-cmds} share the same name space and may overwrite each other
2201 in unpredictable ways.  Sorry@enddots{}
2202 @end table
2204 All these macros can be called multiple times, with different
2205 @var{tag} values, of course!
2208 @node Configuration Files
2209 @section Creating Configuration Files
2210 @cindex Creating configuration files
2211 @cindex Configuration file creation
2213 Be sure to read the previous section, @ref{Configuration Actions}.
2215 @anchor{AC_CONFIG_FILES}
2216 @defmac AC_CONFIG_FILES (@var{file}@dots{}, @ovar{cmds}, @ovar{init-cmds})
2217 @acindex{CONFIG_FILES}
2218 Make @code{AC_OUTPUT} create each @file{@var{file}} by copying an input
2219 file (by default @file{@var{file}.in}), substituting the output variable
2220 values.
2221 @c Before we used to have this feature, which was later rejected
2222 @c because it complicates the writing of makefiles:
2223 @c If the file would be unchanged, it is left untouched, to preserve
2224 @c timestamp.
2225 This macro is one of the instantiating macros; see @ref{Configuration
2226 Actions}.  @xref{Makefile Substitutions}, for more information on using
2227 output variables.  @xref{Setting Output Variables}, for more information
2228 on creating them.  This macro creates the directory that the file is in
2229 if it doesn't exist.  Usually, makefiles are created this way,
2230 but other files, such as @file{.gdbinit}, can be specified as well.
2232 Typical calls to @code{AC_CONFIG_FILES} look like this:
2234 @example
2235 AC_CONFIG_FILES([Makefile src/Makefile man/Makefile X/Imakefile])
2236 AC_CONFIG_FILES([autoconf], [chmod +x autoconf])
2237 @end example
2239 You can override an input file name by appending to @var{file} a
2240 colon-separated list of input files.  Examples:
2242 @example
2243 AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk]
2244                 [lib/Makefile:boiler/lib.mk])
2245 @end example
2247 @noindent
2248 Doing this allows you to keep your file names acceptable to
2249 @acronym{DOS} variants, or
2250 to prepend and/or append boilerplate to the file.
2251 @end defmac
2255 @node Makefile Substitutions
2256 @section Substitutions in Makefiles
2257 @cindex Substitutions in makefiles
2258 @cindex Makefile substitutions
2260 Each subdirectory in a distribution that contains something to be
2261 compiled or installed should come with a file @file{Makefile.in}, from
2262 which @command{configure} creates a file @file{Makefile} in that directory.
2263 To create @file{Makefile}, @command{configure} performs a simple variable
2264 substitution, replacing occurrences of @samp{@@@var{variable}@@} in
2265 @file{Makefile.in} with the value that @command{configure} has determined
2266 for that variable.  Variables that are substituted into output files in
2267 this way are called @dfn{output variables}.  They are ordinary shell
2268 variables that are set in @command{configure}.  To make @command{configure}
2269 substitute a particular variable into the output files, the macro
2270 @code{AC_SUBST} must be called with that variable name as an argument.
2271 Any occurrences of @samp{@@@var{variable}@@} for other variables are
2272 left unchanged.  @xref{Setting Output Variables}, for more information
2273 on creating output variables with @code{AC_SUBST}.
2275 A software package that uses a @command{configure} script should be
2276 distributed with a file @file{Makefile.in}, but no makefile; that
2277 way, the user has to properly configure the package for the local system
2278 before compiling it.
2280 @xref{Makefile Conventions, , Makefile Conventions, standards, The
2281 @acronym{GNU} Coding Standards}, for more information on what to put in
2282 makefiles.
2284 @menu
2285 * Preset Output Variables::     Output variables that are always set
2286 * Installation Directory Variables::  Other preset output variables
2287 * Changed Directory Variables:: Warnings about @file{datarootdir}
2288 * Build Directories::           Supporting multiple concurrent compiles
2289 * Automatic Remaking::          Makefile rules for configuring
2290 @end menu
2292 @node Preset Output Variables
2293 @subsection Preset Output Variables
2294 @cindex Output variables
2296 Some output variables are preset by the Autoconf macros.  Some of the
2297 Autoconf macros set additional output variables, which are mentioned in
2298 the descriptions for those macros.  @xref{Output Variable Index}, for a
2299 complete list of output variables.  @xref{Installation Directory
2300 Variables}, for the list of the preset ones related to installation
2301 directories.  Below are listed the other preset ones.  They all are
2302 precious variables (@pxref{Setting Output Variables},
2303 @code{AC_ARG_VAR}).
2305 @c Just say no to ASCII sorting!  We're humans, not computers.
2306 @c These variables are listed as they would be in a dictionary:
2307 @c actor
2308 @c Actress
2309 @c actress
2311 @defvar CFLAGS
2312 @ovindex CFLAGS
2313 Debugging and optimization options for the C compiler.  If it is not set
2314 in the environment when @command{configure} runs, the default value is set
2315 when you call @code{AC_PROG_CC} (or empty if you don't).  @command{configure}
2316 uses this variable when compiling or linking programs to test for C features.
2318 If a compiler option affects only the behavior of the preprocessor
2319 (e.g., @option{-D @var{name}}), it should be put into @code{CPPFLAGS}
2320 instead.  If it affects only the linker (e.g., @option{-L
2321 @var{directory}}), it should be put into @code{LDFLAGS} instead.  If it
2322 affects only the compiler proper, @code{CFLAGS} is the natural home for
2323 it.  If an option affects multiple phases of the compiler, though,
2324 matters get tricky.  One approach to put such options directly into
2325 @code{CC}, e.g., @code{CC='gcc -m64'}.  Another is to put them into both
2326 @code{CPPFLAGS} and @code{LDFLAGS}, but not into @code{CFLAGS}.
2328 @end defvar
2330 @defvar configure_input
2331 @ovindex configure_input
2332 A comment saying that the file was generated automatically by
2333 @command{configure} and giving the name of the input file.
2334 @code{AC_OUTPUT} adds a comment line containing this variable to the top
2335 of every makefile it creates.  For other files, you should
2336 reference this variable in a comment at the top of each input file.  For
2337 example, an input shell script should begin like this:
2339 @example
2340 #!/bin/sh
2341 # @@configure_input@@
2342 @end example
2344 @noindent
2345 The presence of that line also reminds people editing the file that it
2346 needs to be processed by @command{configure} in order to be used.
2347 @end defvar
2349 @defvar CPPFLAGS
2350 @ovindex CPPFLAGS
2351 Preprocessor options for the C, C++, and Objective C preprocessors and
2352 compilers.  If
2353 it is not set in the environment when @command{configure} runs, the default
2354 value is empty.  @command{configure} uses this variable when preprocessing
2355 or compiling programs to test for C, C++, and Objective C features.
2357 This variable's contents should contain options like @option{-I},
2358 @option{-D}, and @option{-U} that affect only the behavior of the
2359 preprocessor.  Please see the explanation of @code{CFLAGS} for what you
2360 can do if an option affects other phases of the compiler as well.
2362 Currently, @command{configure} always links as part of a single
2363 invocation of the compiler that also preprocesses and compiles, so it
2364 uses this variable also when linking programs.  However, it is unwise to
2365 depend on this behavior because the @acronym{GNU} coding standards do
2366 not require it and many packages do not use @code{CPPFLAGS} when linking
2367 programs.
2369 @xref{Special Chars in Variables}, for limitations that @code{CPPFLAGS}
2370 might run into.
2371 @end defvar
2373 @defvar CXXFLAGS
2374 @ovindex CXXFLAGS
2375 Debugging and optimization options for the C++ compiler.  It acts like
2376 @code{CFLAGS}, but for C++ instead of C.
2377 @end defvar
2379 @defvar DEFS
2380 @ovindex DEFS
2381 @option{-D} options to pass to the C compiler.  If @code{AC_CONFIG_HEADERS}
2382 is called, @command{configure} replaces @samp{@@DEFS@@} with
2383 @option{-DHAVE_CONFIG_H} instead (@pxref{Configuration Headers}).  This
2384 variable is not defined while @command{configure} is performing its tests,
2385 only when creating the output files.  @xref{Setting Output Variables}, for
2386 how to check the results of previous tests.
2387 @end defvar
2389 @defvar ECHO_C
2390 @defvarx ECHO_N
2391 @defvarx ECHO_T
2392 @ovindex ECHO_C
2393 @ovindex ECHO_N
2394 @ovindex ECHO_T
2395 How does one suppress the trailing newline from @command{echo} for
2396 question-answer message pairs?  These variables provide a way:
2398 @example
2399 echo $ECHO_N "And the winner is... $ECHO_C"
2400 sleep 100000000000
2401 echo "$@{ECHO_T@}dead."
2402 @end example
2404 @noindent
2405 Some old and uncommon @command{echo} implementations offer no means to
2406 achieve this, in which case @code{ECHO_T} is set to tab.  You might not
2407 want to use it.
2408 @end defvar
2410 @defvar ERLCFLAGS
2411 @ovindex ERLCFLAGS
2412 Debugging and optimization options for the Erlang compiler.  If it is not set
2413 in the environment when @command{configure} runs, the default value is empty.
2414 @command{configure} uses this variable when compiling
2415 programs to test for Erlang features.
2416 @end defvar
2418 @defvar FCFLAGS
2419 @ovindex FCFLAGS
2420 Debugging and optimization options for the Fortran compiler.  If it
2421 is not set in the environment when @command{configure} runs, the default
2422 value is set when you call @code{AC_PROG_FC} (or empty if you don't).
2423 @command{configure} uses this variable when compiling or linking
2424 programs to test for Fortran features.
2425 @end defvar
2427 @defvar FFLAGS
2428 @ovindex FFLAGS
2429 Debugging and optimization options for the Fortran 77 compiler.  If it
2430 is not set in the environment when @command{configure} runs, the default
2431 value is set when you call @code{AC_PROG_F77} (or empty if you don't).
2432 @command{configure} uses this variable when compiling or linking
2433 programs to test for Fortran 77 features.
2434 @end defvar
2436 @defvar LDFLAGS
2437 @ovindex LDFLAGS
2438 Options for the linker.  If it is not set
2439 in the environment when @command{configure} runs, the default value is empty.
2440 @command{configure} uses this variable when linking programs to test for
2441 C, C++, Objective C, and Fortran features.
2443 This variable's contents should contain options like @option{-s} and
2444 @option{-L} that affect only the behavior of the linker.  Please see the
2445 explanation of @code{CFLAGS} for what you can do if an option also
2446 affects other phases of the compiler.
2448 Don't use this variable to pass library names
2449 (@option{-l}) to the linker; use @code{LIBS} instead.
2450 @end defvar
2452 @defvar LIBS
2453 @ovindex LIBS
2454 @option{-l} options to pass to the linker.  The default value is empty,
2455 but some Autoconf macros may prepend extra libraries to this variable if
2456 those libraries are found and provide necessary functions, see
2457 @ref{Libraries}.  @command{configure} uses this variable when linking
2458 programs to test for C, C++, and Fortran features.
2459 @end defvar
2461 @defvar OBJCFLAGS
2462 @ovindex OBJCFLAGS
2463 Debugging and optimization options for the Objective C compiler.  It
2464 acts like @code{CFLAGS}, but for Objective C instead of C.
2465 @end defvar
2467 @defvar builddir
2468 @ovindex builddir
2469 Rigorously equal to @samp{.}.  Added for symmetry only.
2470 @end defvar
2472 @defvar abs_builddir
2473 @ovindex abs_builddir
2474 Absolute name of @code{builddir}.
2475 @end defvar
2477 @defvar top_builddir
2478 @ovindex top_builddir
2479 The relative name of the top level of the current build tree.  In the
2480 top-level directory, this is the same as @code{builddir}.
2481 @end defvar
2483 @defvar top_build_prefix
2484 @ovindex top_build_prefix
2485 The relative name of the top level of the current build tree with final
2486 slash if nonemtpy.  This is the same as @code{top_builddir}, except that
2487 it contains of zero of more runs of @code{../}, so it should not be
2488 appended with a slash for concatenation.  This helps for @command{make}
2489 implementations that otherwise do not treat @file{./file} and @file{file}
2490 as equal in the toplevel build directory.
2491 @end defvar
2493 @defvar abs_top_builddir
2494 @ovindex abs_top_builddir
2495 Absolute name of @code{top_builddir}.
2496 @end defvar
2498 @defvar srcdir
2499 @ovindex srcdir
2500 The name of the directory that contains the source code for
2501 that makefile.
2502 @end defvar
2504 @defvar abs_srcdir
2505 @ovindex abs_srcdir
2506 Absolute name of @code{srcdir}.
2507 @end defvar
2509 @defvar top_srcdir
2510 @ovindex top_srcdir
2511 The name of the top-level source code directory for the
2512 package.  In the top-level directory, this is the same as @code{srcdir}.
2513 @end defvar
2515 @defvar abs_top_srcdir
2516 @ovindex abs_top_srcdir
2517 Absolute name of @code{top_srcdir}.
2518 @end defvar
2520 @node Installation Directory Variables
2521 @subsection Installation Directory Variables
2522 @cindex Installation directories
2523 @cindex Directories, installation
2525 The following variables specify the directories for
2526 package installation, see @ref{Directory Variables, , Variables for
2527 Installation Directories, standards, The @acronym{GNU} Coding
2528 Standards}, for more information.  Each variable corresponds to an
2529 argument of @command{configure}; trailing slashes are stripped so that
2530 expressions such as @samp{$@{prefix@}/lib} expand with only one slash
2531 between directory names.  See the end of this section for
2532 details on when and how to use these variables.
2534 @defvar bindir
2535 @ovindex bindir
2536 The directory for installing executables that users run.
2537 @end defvar
2539 @defvar datadir
2540 @ovindex datadir
2541 The directory for installing idiosyncratic read-only
2542 architecture-independent data.
2543 @end defvar
2545 @defvar datarootdir
2546 @ovindex datarootdir
2547 The root of the directory tree for read-only architecture-independent
2548 data files.
2549 @end defvar
2551 @defvar docdir
2552 @ovindex docdir
2553 The directory for installing documentation files (other than Info and
2554 man).
2555 @end defvar
2557 @defvar dvidir
2558 @ovindex dvidir
2559 The directory for installing documentation files in DVI format.
2560 @end defvar
2562 @defvar exec_prefix
2563 @ovindex exec_prefix
2564 The installation prefix for architecture-dependent files.  By default
2565 it's the same as @var{prefix}.  You should avoid installing anything
2566 directly to @var{exec_prefix}.  However, the default value for
2567 directories containing architecture-dependent files should be relative
2568 to @var{exec_prefix}.
2569 @end defvar
2571 @defvar htmldir
2572 @ovindex htmldir
2573 The directory for installing HTML documentation.
2574 @end defvar
2576 @defvar includedir
2577 @ovindex includedir
2578 The directory for installing C header files.
2579 @end defvar
2581 @defvar infodir
2582 @ovindex infodir
2583 The directory for installing documentation in Info format.
2584 @end defvar
2586 @defvar libdir
2587 @ovindex libdir
2588 The directory for installing object code libraries.
2589 @end defvar
2591 @defvar libexecdir
2592 @ovindex libexecdir
2593 The directory for installing executables that other programs run.
2594 @end defvar
2596 @defvar localedir
2597 @ovindex localedir
2598 The directory for installing locale-dependent but
2599 architecture-independent data, such as message catalogs.  This directory
2600 usually has a subdirectory per locale.
2601 @end defvar
2603 @defvar localstatedir
2604 @ovindex localstatedir
2605 The directory for installing modifiable single-machine data.
2606 @end defvar
2608 @defvar mandir
2609 @ovindex mandir
2610 The top-level directory for installing documentation in man format.
2611 @end defvar
2613 @defvar oldincludedir
2614 @ovindex oldincludedir
2615 The directory for installing C header files for non-@acronym{GCC} compilers.
2616 @end defvar
2618 @defvar pdfdir
2619 @ovindex pdfdir
2620 The directory for installing PDF documentation.
2621 @end defvar
2623 @defvar prefix
2624 @ovindex prefix
2625 The common installation prefix for all files.  If @var{exec_prefix}
2626 is defined to a different value, @var{prefix} is used only for
2627 architecture-independent files.
2628 @end defvar
2630 @defvar psdir
2631 @ovindex psdir
2632 The directory for installing PostScript documentation.
2633 @end defvar
2635 @defvar sbindir
2636 @ovindex sbindir
2637 The directory for installing executables that system
2638 administrators run.
2639 @end defvar
2641 @defvar sharedstatedir
2642 @ovindex sharedstatedir
2643 The directory for installing modifiable architecture-independent data.
2644 @end defvar
2646 @defvar sysconfdir
2647 @ovindex sysconfdir
2648 The directory for installing read-only single-machine data.
2649 @end defvar
2652 Most of these variables have values that rely on @code{prefix} or
2653 @code{exec_prefix}.  It is deliberate that the directory output
2654 variables keep them unexpanded: typically @samp{@@datarootdir@@} is
2655 replaced by @samp{$@{prefix@}/share}, not @samp{/usr/local/share}, and
2656 @samp{@@datadir@@} is replaced by @samp{$@{datarootdir@}}.
2658 This behavior is mandated by the @acronym{GNU} coding standards, so that when
2659 the user runs:
2661 @table @samp
2662 @item make
2663 she can still specify a different prefix from the one specified to
2664 @command{configure}, in which case, if needed, the package should hard
2665 code dependencies corresponding to the make-specified prefix.
2667 @item make install
2668 she can specify a different installation location, in which case the
2669 package @emph{must} still depend on the location which was compiled in
2670 (i.e., never recompile when @samp{make install} is run).  This is an
2671 extremely important feature, as many people may decide to install all
2672 the files of a package grouped together, and then install links from
2673 the final locations to there.
2674 @end table
2676 In order to support these features, it is essential that
2677 @code{datarootdir} remains being defined as @samp{$@{prefix@}/share} to
2678 depend upon the current value of @code{prefix}.
2680 A corollary is that you should not use these variables except in
2681 makefiles.  For instance, instead of trying to evaluate @code{datadir}
2682 in @file{configure} and hard-coding it in makefiles using
2683 e.g., @samp{AC_DEFINE_UNQUOTED([DATADIR], ["$datadir"], [Data directory.])},
2684 you should add
2685 @option{-DDATADIR='$(datadir)'} to your makefile's definition of
2686 @code{CPPFLAGS} (@code{AM_CPPFLAGS} if you are also using Automake).
2688 Similarly, you should not rely on @code{AC_CONFIG_FILES} to replace
2689 @code{datadir} and friends in your shell scripts and other files; instead,
2690 let @command{make} manage their replacement.  For instance Autoconf
2691 ships templates of its shell scripts ending with @samp{.in}, and uses a
2692 makefile snippet similar to the following to build scripts like
2693 @command{autoheader} and @command{autom4te}:
2695 @example
2696 @group
2697 edit = sed \
2698         -e 's|@@datadir[@@]|$(pkgdatadir)|g' \
2699         -e 's|@@prefix[@@]|$(prefix)|g'
2700 @end group
2702 @group
2703 autoheader autom4te: Makefile
2704         rm -f $@@ $@@.tmp
2705         $(edit) '$(srcdir)/$@@.in' >$@@.tmp
2706         chmod +x $@@.tmp
2707         chmod a-w $@@.tmp
2708         mv $@@.tmp $@@
2709 @end group
2711 @group
2712 autoheader: $(srcdir)/autoheader.in
2713 autom4te: $(srcdir)/autom4te.in
2714 @end group
2715 @end example
2717 Some details are noteworthy:
2719 @table @asis
2720 @item @samp{@@datadir[@@]}
2721 The brackets prevent @command{configure} from replacing
2722 @samp{@@datadir@@} in the Sed expression itself.
2723 Brackets are preferable to a backslash here, since
2724 Posix says @samp{\@@} is not portable.
2726 @item @samp{$(pkgdatadir)}
2727 Don't use @samp{@@pkgdatadir@@}!  Use the matching makefile variable
2728 instead.
2730 @item @samp{/}
2731 Don't use @samp{/} in the Sed expressions that replace file names since
2732 most likely the
2733 variables you use, such as @samp{$(pkgdatadir)}, contain @samp{/}.
2734 Use a shell metacharacter instead, such as @samp{|}.
2736 @item special characters
2737 File names, file name components, and the value of @code{VPATH} should
2738 not contain shell metacharacters or white
2739 space.  @xref{Special Chars in Variables}.
2741 @item dependency on @file{Makefile}
2742 Since @code{edit} uses values that depend on the configuration specific
2743 values (@code{prefix}, etc.)@: and not only on @code{VERSION} and so forth,
2744 the output depends on @file{Makefile}, not @file{configure.ac}.
2746 @item @samp{$@@}
2747 The main rule is generic, and uses @samp{$@@} extensively to
2748 avoid the need for multiple copies of the rule.
2750 @item Separated dependencies and single suffix rules
2751 You can't use them!  The above snippet cannot be (portably) rewritten
2754 @example
2755 autoconf autoheader: Makefile
2756 @group
2757 .in:
2758         rm -f $@@ $@@.tmp
2759         $(edit) $< >$@@.tmp
2760         chmod +x $@@.tmp
2761         mv $@@.tmp $@@
2762 @end group
2763 @end example
2765 @xref{Single Suffix Rules}, for details.
2767 @item @samp{$(srcdir)}
2768 Be sure to specify the name of the source directory,
2769 otherwise the package won't support separated builds.
2770 @end table
2772 For the more specific installation of Erlang libraries, the following variables
2773 are defined:
2775 @defvar ERLANG_INSTALL_LIB_DIR
2776 @ovindex ERLANG_INSTALL_LIB_DIR
2777 @acindex{ERLANG_SUBST_INSTALL_LIB_DIR}
2778 The common parent directory of Erlang library installation directories.
2779 This variable is set by calling the @code{AC_ERLANG_SUBST_INSTALL_LIB_DIR}
2780 macro in @file{configure.ac}.
2781 @end defvar
2783 @defvar ERLANG_INSTALL_LIB_DIR_@var{library}
2784 @ovindex ERLANG_INSTALL_LIB_DIR_@var{library}
2785 @acindex{ERLANG_SUBST_INSTALL_LIB_SUBDIR}
2786 The installation directory for Erlang library @var{library}.
2787 This variable is set by calling the
2788 @samp{AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR(@var{library}, @var{version}}
2789 macro in @file{configure.ac}.
2790 @end defvar
2792 @xref{Erlang Libraries}, for details.
2795 @node Changed Directory Variables
2796 @subsection Changed Directory Variables
2797 @cindex @file{datarootdir}
2799 In Autoconf 2.60, the set of directory variables has changed, and the
2800 defaults of some variables have been adjusted
2801 (@pxref{Installation Directory Variables}) to changes in the
2802 @acronym{GNU} Coding Standards.  Notably, @file{datadir}, @file{infodir}, and
2803 @file{mandir} are now expressed in terms of @file{datarootdir}.  If you are
2804 upgrading from an earlier Autoconf version, you may need to adjust your files
2805 to ensure that the directory variables are substituted correctly
2806 (@pxref{Defining Directories}), and that a definition of @file{datarootdir} is
2807 in place.  For example, in a @file{Makefile.in}, adding
2809 @example
2810 datarootdir = @@datarootdir@@
2811 @end example
2813 @noindent
2814 is usually sufficient.  If you use Automake to create @file{Makefile.in},
2815 it will add this for you.
2817 To help with the transition, Autoconf warns about files that seem to use
2818 @code{datarootdir} without defining it.  In some cases, it then expands
2819 the value of @code{$datarootdir} in substitutions of the directory
2820 variables.  The following example shows such a warning:
2822 @example
2823 $ @kbd{cat configure.ac}
2824 AC_INIT
2825 AC_CONFIG_FILES([Makefile])
2826 AC_OUTPUT
2827 $ @kbd{cat Makefile.in}
2828 prefix = @@prefix@@
2829 datadir = @@datadir@@
2830 $ @kbd{autoconf}
2831 $ @kbd{configure}
2832 configure: creating ./config.status
2833 config.status: creating Makefile
2834 config.status: WARNING:
2835                Makefile.in seems to ignore the --datarootdir setting
2836 $ @kbd{cat Makefile}
2837 prefix = /usr/local
2838 datadir = $@{prefix@}/share
2839 @end example
2841 Usually one can easily change the file to accommodate both older and newer
2842 Autoconf releases:
2844 @example
2845 $ @kbd{cat Makefile.in}
2846 prefix = @@prefix@@
2847 datarootdir = @@datarootdir@@
2848 datadir = @@datadir@@
2849 $ @kbd{configure}
2850 configure: creating ./config.status
2851 config.status: creating Makefile
2852 $ @kbd{cat Makefile}
2853 prefix = /usr/local
2854 datarootdir = $@{prefix@}/share
2855 datadir = $@{datarootdir@}
2856 @end example
2858 @acindex{DATAROOTDIR_CHECKED}
2859 In some cases, however, the checks may not be able to detect that a suitable
2860 initialization of @code{datarootdir} is in place, or they may fail to detect
2861 that such an initialization is necessary in the output file.  If, after
2862 auditing your package, there are still spurious @file{configure} warnings about
2863 @code{datarootdir}, you may add the line
2865 @example
2866 AC_DEFUN([AC_DATAROOTDIR_CHECKED])
2867 @end example
2869 @noindent
2870 to your @file{configure.ac} to disable the warnings.  This is an exception
2871 to the usual rule that you should not define a macro whose name begins with
2872 @code{AC_} (@pxref{Macro Names}).
2876 @node Build Directories
2877 @subsection Build Directories
2878 @cindex Build directories
2879 @cindex Directories, build
2881 You can support compiling a software package for several architectures
2882 simultaneously from the same copy of the source code.  The object files
2883 for each architecture are kept in their own directory.
2885 To support doing this, @command{make} uses the @code{VPATH} variable to
2886 find the files that are in the source directory.  @acronym{GNU} Make
2887 can do this.  Most other recent @command{make} programs can do this as
2888 well, though they may have difficulties and it is often simpler to
2889 recommend @acronym{GNU} @command{make} (@pxref{VPATH and Make}).  Older
2890 @command{make} programs do not support @code{VPATH}; when using them, the
2891 source code must be in the same directory as the object files.
2893 To support @code{VPATH}, each @file{Makefile.in} should contain two
2894 lines that look like:
2896 @example
2897 srcdir = @@srcdir@@
2898 VPATH = @@srcdir@@
2899 @end example
2901 Do not set @code{VPATH} to the value of another variable, for example
2902 @samp{VPATH = $(srcdir)}, because some versions of @command{make} do not do
2903 variable substitutions on the value of @code{VPATH}.
2905 @command{configure} substitutes the correct value for @code{srcdir} when
2906 it produces @file{Makefile}.
2908 Do not use the @code{make} variable @code{$<}, which expands to the
2909 file name of the file in the source directory (found with @code{VPATH}),
2910 except in implicit rules.  (An implicit rule is one such as @samp{.c.o},
2911 which tells how to create a @file{.o} file from a @file{.c} file.)  Some
2912 versions of @command{make} do not set @code{$<} in explicit rules; they
2913 expand it to an empty value.
2915 Instead, Make command lines should always refer to source
2916 files by prefixing them with @samp{$(srcdir)/}.  For example:
2918 @example
2919 time.info: time.texinfo
2920         $(MAKEINFO) '$(srcdir)/time.texinfo'
2921 @end example
2923 @node Automatic Remaking
2924 @subsection Automatic Remaking
2925 @cindex Automatic remaking
2926 @cindex Remaking automatically
2928 You can put rules like the following in the top-level @file{Makefile.in}
2929 for a package to automatically update the configuration information when
2930 you change the configuration files.  This example includes all of the
2931 optional files, such as @file{aclocal.m4} and those related to
2932 configuration header files.  Omit from the @file{Makefile.in} rules for
2933 any of these files that your package does not use.
2935 The @samp{$(srcdir)/} prefix is included because of limitations in the
2936 @code{VPATH} mechanism.
2938 The @file{stamp-} files are necessary because the timestamps of
2939 @file{config.h.in} and @file{config.h} are not changed if remaking
2940 them does not change their contents.  This feature avoids unnecessary
2941 recompilation.  You should include the file @file{stamp-h.in} your
2942 package's distribution, so that @command{make} considers
2943 @file{config.h.in} up to date.  Don't use @command{touch}
2944 (@pxref{Limitations of Usual Tools}); instead, use @command{echo} (using
2945 @command{date} would cause needless differences, hence @acronym{CVS}
2946 conflicts, etc.).
2948 @example
2949 @group
2950 $(srcdir)/configure: configure.ac aclocal.m4
2951         cd '$(srcdir)' && autoconf
2953 # autoheader might not change config.h.in, so touch a stamp file.
2954 $(srcdir)/config.h.in: stamp-h.in
2955 $(srcdir)/stamp-h.in: configure.ac aclocal.m4
2956         cd '$(srcdir)' && autoheader
2957         echo timestamp > '$(srcdir)/stamp-h.in'
2959 config.h: stamp-h
2960 stamp-h: config.h.in config.status
2961         ./config.status
2963 Makefile: Makefile.in config.status
2964         ./config.status
2966 config.status: configure
2967         ./config.status --recheck
2968 @end group
2969 @end example
2971 @noindent
2972 (Be careful if you copy these lines directly into your makefile, as you
2973 need to convert the indented lines to start with the tab character.)
2975 In addition, you should use
2977 @example
2978 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
2979 @end example
2981 @noindent
2982 so @file{config.status} ensures that @file{config.h} is considered up to
2983 date.  @xref{Output}, for more information about @code{AC_OUTPUT}.
2985 @xref{config.status Invocation}, for more examples of handling
2986 configuration-related dependencies.
2988 @node Configuration Headers
2989 @section Configuration Header Files
2990 @cindex Configuration Header
2991 @cindex @file{config.h}
2993 When a package contains more than a few tests that define C preprocessor
2994 symbols, the command lines to pass @option{-D} options to the compiler
2995 can get quite long.  This causes two problems.  One is that the
2996 @command{make} output is hard to visually scan for errors.  More
2997 seriously, the command lines can exceed the length limits of some
2998 operating systems.  As an alternative to passing @option{-D} options to
2999 the compiler, @command{configure} scripts can create a C header file
3000 containing @samp{#define} directives.  The @code{AC_CONFIG_HEADERS}
3001 macro selects this kind of output.  Though it can be called anywhere
3002 between @code{AC_INIT} and @code{AC_OUTPUT}, it is customary to call
3003 it right after @code{AC_INIT}.
3005 The package should @samp{#include} the configuration header file before
3006 any other header files, to prevent inconsistencies in declarations (for
3007 example, if it redefines @code{const}).
3009 To provide for VPATH builds, remember to pass the C compiler a @option{-I.}
3010 option (or @option{-I..}; whichever directory contains @file{config.h}).
3011 Even if you use @samp{#include "config.h"}, the preprocessor searches only
3012 the directory of the currently read file, i.e., the source directory, not
3013 the build directory.
3015 With the appropriate @option{-I} option, you can use
3016 @samp{#include <config.h>}.  Actually, it's a good habit to use it,
3017 because in the rare case when the source directory contains another
3018 @file{config.h}, the build directory should be searched first.
3021 @defmac AC_CONFIG_HEADERS (@var{header} @dots{}, @ovar{cmds}, @ovar{init-cmds})
3022 @acindex{CONFIG_HEADERS}
3023 @cvindex HAVE_CONFIG_H
3024 This macro is one of the instantiating macros; see @ref{Configuration
3025 Actions}.  Make @code{AC_OUTPUT} create the file(s) in the
3026 blank-or-newline-separated list @var{header} containing C preprocessor
3027 @code{#define} statements, and replace @samp{@@DEFS@@} in generated
3028 files with @option{-DHAVE_CONFIG_H} instead of the value of @code{DEFS}.
3029 The usual name for @var{header} is @file{config.h}.
3031 If @var{header} already exists and its contents are identical to what
3032 @code{AC_OUTPUT} would put in it, it is left alone.  Doing this allows
3033 making some changes in the configuration without needlessly causing
3034 object files that depend on the header file to be recompiled.
3036 Usually the input file is named @file{@var{header}.in}; however, you can
3037 override the input file name by appending to @var{header} a
3038 colon-separated list of input files.  For example, you might need to make
3039 the input file name acceptable to @acronym{DOS} variants:
3041 @example
3042 AC_CONFIG_HEADERS([config.h:config.hin])
3043 @end example
3045 @end defmac
3047 @defmac AH_HEADER
3048 @ahindex{HEADER}
3049 This macro is defined as the name of the first declared config header
3050 and undefined if no config headers have been declared up to this point.
3051 A third-party macro may, for example, require use of a config header
3052 without invoking AC_CONFIG_HEADERS twice, like this:
3054 @example
3055 AC_CONFIG_COMMANDS_PRE(
3056         [m4_ifndef([AH_HEADER], [AC_CONFIG_HEADERS([config.h])])])
3057 @end example
3059 @end defmac
3061 @xref{Configuration Actions}, for more details on @var{header}.
3063 @menu
3064 * Header Templates::            Input for the configuration headers
3065 * autoheader Invocation::       How to create configuration templates
3066 * Autoheader Macros::           How to specify CPP templates
3067 @end menu
3069 @node Header Templates
3070 @subsection Configuration Header Templates
3071 @cindex Configuration Header Template
3072 @cindex Header templates
3073 @cindex @file{config.h.in}
3075 Your distribution should contain a template file that looks as you want
3076 the final header file to look, including comments, with @code{#undef}
3077 statements which are used as hooks.  For example, suppose your
3078 @file{configure.ac} makes these calls:
3080 @example
3081 AC_CONFIG_HEADERS([conf.h])
3082 AC_CHECK_HEADERS([unistd.h])
3083 @end example
3085 @noindent
3086 Then you could have code like the following in @file{conf.h.in}.
3087 The @file{conf.h} created by @command{configure} defines @samp{HAVE_UNISTD_H}
3088 to 1, if and only if the system has @file{unistd.h}.
3090 @example
3091 @group
3092 /* Define as 1 if you have unistd.h.  */
3093 #undef HAVE_UNISTD_H
3094 @end group
3095 @end example
3097 The format of the template file is stricter than what the C preprocessor
3098 is required to accept.  A directive line should contain only whitespace,
3099 @samp{#undef}, and @samp{HAVE_UNISTD_H}.  The use of @samp{#define}
3100 instead of @samp{#undef}, or of comments on the same line as
3101 @samp{#undef}, is strongly discouraged.  Each hook should only be listed
3102 once.  Other preprocessor lines, such as @samp{#ifdef} or
3103 @samp{#include}, are copied verbatim from the template into the
3104 generated header.
3106 Since it is a tedious task to keep a template header up to date, you may
3107 use @command{autoheader} to generate it, see @ref{autoheader Invocation}.
3109 During the instantiation of the header, each @samp{#undef} line in the
3110 template file for each symbol defined by @samp{AC_DEFINE} is changed to an
3111 appropriate @samp{#define}. If the corresponding @samp{AC_DEFINE} has not
3112 been executed during the @command{configure} run, the @samp{#undef} line is
3113 commented out.  (This is important, e.g., for @samp{_POSIX_SOURCE}:
3114 on many systems, it can be implicitly defined by the compiler, and
3115 undefining it in the header would then break compilation of subsequent
3116 headers.)
3118 Currently, @emph{all} remaining @samp{#undef} lines in the header
3119 template are commented out, whether or not there was a corresponding
3120 @samp{AC_DEFINE} for the macro name; but this behavior is not guaranteed
3121 for future releases of Autoconf.
3123 Generally speaking, since you should not use @samp{#define}, and you
3124 cannot guarantee whether a @samp{#undef} directive in the header
3125 template will be converted to a @samp{#define} or commented out in the
3126 generated header file, the template file cannot be used for conditional
3127 definition effects.  Consequently, if you need to use the construct
3129 @example
3130 @group
3131 #ifdef THIS
3132 # define THAT
3133 #endif
3134 @end group
3135 @end example
3137 @noindent
3138 you must place it outside of the template.
3139 If you absolutely need to hook it to the config header itself, please put
3140 the directives to a separate file, and @samp{#include} that file from the
3141 config header template.  If you are using @command{autoheader}, you would
3142 probably use @samp{AH_BOTTOM} to append the @samp{#include} directive.
3145 @node autoheader Invocation
3146 @subsection Using @command{autoheader} to Create @file{config.h.in}
3147 @cindex @command{autoheader}
3149 The @command{autoheader} program can create a template file of C
3150 @samp{#define} statements for @command{configure} to use.
3151 It searches for the first invocation of @code{AC_CONFIG_HEADERS} in
3152 @file{configure} sources to determine the name of the template.
3153 (If the first call of @code{AC_CONFIG_HEADERS} specifies more than one
3154 input file name, @command{autoheader} uses the first one.)
3156 It is recommended that only one input file is used.  If you want to append
3157 a boilerplate code, it is preferable to use
3158 @samp{AH_BOTTOM([#include <conf_post.h>])}.
3159 File @file{conf_post.h} is not processed during the configuration then,
3160 which make things clearer.  Analogically, @code{AH_TOP} can be used to
3161 prepend a boilerplate code.
3163 In order to do its job, @command{autoheader} needs you to document all
3164 of the symbols that you might use.  Typically this is done via an
3165 @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED} call whose first argument
3166 is a literal symbol and whose third argument describes the symbol
3167 (@pxref{Defining Symbols}).  Alternatively, you can use
3168 @code{AH_TEMPLATE} (@pxref{Autoheader Macros}), or you can supply a
3169 suitable input file for a subsequent configuration header file.
3170 Symbols defined by Autoconf's builtin tests are already documented properly;
3171 you need to document only those that you
3172 define yourself.
3174 You might wonder why @command{autoheader} is needed: after all, why
3175 would @command{configure} need to ``patch'' a @file{config.h.in} to
3176 produce a @file{config.h} instead of just creating @file{config.h} from
3177 scratch?  Well, when everything rocks, the answer is just that we are
3178 wasting our time maintaining @command{autoheader}: generating
3179 @file{config.h} directly is all that is needed.  When things go wrong,
3180 however, you'll be thankful for the existence of @command{autoheader}.
3182 The fact that the symbols are documented is important in order to
3183 @emph{check} that @file{config.h} makes sense.  The fact that there is a
3184 well-defined list of symbols that should be defined (or not) is
3185 also important for people who are porting packages to environments where
3186 @command{configure} cannot be run: they just have to @emph{fill in the
3187 blanks}.
3189 But let's come back to the point: the invocation of @command{autoheader}@dots{}
3191 If you give @command{autoheader} an argument, it uses that file instead
3192 of @file{configure.ac} and writes the header file to the standard output
3193 instead of to @file{config.h.in}.  If you give @command{autoheader} an
3194 argument of @option{-}, it reads the standard input instead of
3195 @file{configure.ac} and writes the header file to the standard output.
3197 @command{autoheader} accepts the following options:
3199 @table @option
3200 @item --help
3201 @itemx -h
3202 Print a summary of the command line options and exit.
3204 @item --version
3205 @itemx -V
3206 Print the version number of Autoconf and exit.
3208 @item --verbose
3209 @itemx -v
3210 Report processing steps.
3212 @item --debug
3213 @itemx -d
3214 Don't remove the temporary files.
3216 @item --force
3217 @itemx -f
3218 Remake the template file even if newer than its input files.
3220 @item --include=@var{dir}
3221 @itemx -I @var{dir}
3222 Append @var{dir} to the include path.  Multiple invocations accumulate.
3224 @item --prepend-include=@var{dir}
3225 @itemx -B @var{dir}
3226 Prepend @var{dir} to the include path.  Multiple invocations accumulate.
3228 @item --warnings=@var{category}
3229 @itemx -W @var{category}
3230 @evindex WARNINGS
3231 Report the warnings related to @var{category} (which can actually be a
3232 comma separated list).  Current categories include:
3234 @table @samp
3235 @item obsolete
3236 report the uses of obsolete constructs
3238 @item all
3239 report all the warnings
3241 @item none
3242 report none
3244 @item error
3245 treats warnings as errors
3247 @item no-@var{category}
3248 disable warnings falling into @var{category}
3249 @end table
3251 @end table
3255 @node Autoheader Macros
3256 @subsection Autoheader Macros
3257 @cindex Autoheader macros
3259 @command{autoheader} scans @file{configure.ac} and figures out which C
3260 preprocessor symbols it might define.  It knows how to generate
3261 templates for symbols defined by @code{AC_CHECK_HEADERS},
3262 @code{AC_CHECK_FUNCS} etc., but if you @code{AC_DEFINE} any additional
3263 symbol, you must define a template for it.  If there are missing
3264 templates, @command{autoheader} fails with an error message.
3266 The template for a @var{symbol} is created
3267 by @command{autoheader} from
3268 the @var{description} argument to an @code{AC_DEFINE};
3269 see @ref{Defining Symbols}.
3271 For special needs, you can use the following macros.
3274 @defmac AH_TEMPLATE (@var{key}, @var{description})
3275 @ahindex{TEMPLATE}
3276 Tell @command{autoheader} to generate a template for @var{key}.  This macro
3277 generates standard templates just like @code{AC_DEFINE} when a
3278 @var{description} is given.
3280 For example:
3282 @example
3283 AH_TEMPLATE([CRAY_STACKSEG_END],
3284             [Define to one of _getb67, GETB67, getb67
3285              for Cray-2 and Cray-YMP systems.  This
3286              function is required for alloca.c support
3287              on those systems.])
3288 @end example
3290 @noindent
3291 generates the following template, with the description properly
3292 justified.
3294 @example
3295 /* Define to one of _getb67, GETB67, getb67 for Cray-2 and
3296    Cray-YMP systems.  This function is required for alloca.c
3297    support on those systems.  */
3298 #undef CRAY_STACKSEG_END
3299 @end example
3300 @end defmac
3303 @defmac AH_VERBATIM (@var{key}, @var{template})
3304 @ahindex{VERBATIM}
3305 Tell @command{autoheader} to include the @var{template} as-is in the header
3306 template file.  This @var{template} is associated with the @var{key},
3307 which is used to sort all the different templates and guarantee their
3308 uniqueness.  It should be a symbol that can be defined via @code{AC_DEFINE}.
3309 @end defmac
3312 @defmac AH_TOP (@var{text})
3313 @ahindex{TOP}
3314 Include @var{text} at the top of the header template file.
3315 @end defmac
3318 @defmac AH_BOTTOM (@var{text})
3319 @ahindex{BOTTOM}
3320 Include @var{text} at the bottom of the header template file.
3321 @end defmac
3324 Please note that @var{text} gets included ``verbatim'' to the template file,
3325 not to the resulting config header, so it can easily get mangled when the
3326 template is processed.  There is rarely a need for something other than
3328 @example
3329 AH_BOTTOM([#include <custom.h>])
3330 @end example
3334 @node Configuration Commands
3335 @section Running Arbitrary Configuration Commands
3336 @cindex Configuration commands
3337 @cindex Commands for configuration
3339 You can execute arbitrary commands before, during, and after
3340 @file{config.status} is run.  The three following macros accumulate the
3341 commands to run when they are called multiple times.
3342 @code{AC_CONFIG_COMMANDS} replaces the obsolete macro
3343 @code{AC_OUTPUT_COMMANDS}; see @ref{Obsolete Macros}, for details.
3345 @anchor{AC_CONFIG_COMMANDS}
3346 @defmac AC_CONFIG_COMMANDS (@var{tag}@dots{}, @ovar{cmds}, @ovar{init-cmds})
3347 @acindex{CONFIG_COMMANDS}
3348 Specify additional shell commands to run at the end of
3349 @file{config.status}, and shell commands to initialize any variables
3350 from @command{configure}.  Associate the commands with @var{tag}.
3351 Since typically the @var{cmds} create a file, @var{tag} should
3352 naturally be the name of that file.  If needed, the directory hosting
3353 @var{tag} is created.  This macro is one of the instantiating macros;
3354 see @ref{Configuration Actions}.
3356 Here is an unrealistic example:
3357 @example
3358 fubar=42
3359 AC_CONFIG_COMMANDS([fubar],
3360                    [echo this is extra $fubar, and so on.],
3361                    [fubar=$fubar])
3362 @end example
3364 Here is a better one:
3365 @example
3366 AC_CONFIG_COMMANDS([timestamp], [date >timestamp])
3367 @end example
3368 @end defmac
3370 The following two macros look similar, but in fact they are not of the same
3371 breed: they are executed directly by @file{configure}, so you cannot use
3372 @file{config.status} to rerun them.
3374 @c Yet it is good to leave them here.  The user sees them together and
3375 @c decides which best fits their needs.
3377 @defmac AC_CONFIG_COMMANDS_PRE (@var{cmds})
3378 @acindex{CONFIG_COMMANDS_PRE}
3379 Execute the @var{cmds} right before creating @file{config.status}.
3381 This macro presents the last opportunity to call @code{AC_SUBST},
3382 @code{AC_DEFINE}, or @code{AC_CONFIG_FOOS} macros.
3383 @end defmac
3385 @defmac AC_CONFIG_COMMANDS_POST (@var{cmds})
3386 @acindex{CONFIG_COMMANDS_POST}
3387 Execute the @var{cmds} right after creating @file{config.status}.
3388 @end defmac
3393 @node Configuration Links
3394 @section Creating Configuration Links
3395 @cindex Configuration links
3396 @cindex Links for configuration
3398 You may find it convenient to create links whose destinations depend upon
3399 results of tests.  One can use @code{AC_CONFIG_COMMANDS} but the
3400 creation of relative symbolic links can be delicate when the package is
3401 built in a directory different from the source directory.
3403 @anchor{AC_CONFIG_LINKS}
3404 @defmac AC_CONFIG_LINKS (@var{dest}:@var{source}@dots{}, @ovar{cmds}, @
3405   @ovar{init-cmds})
3406 @acindex{CONFIG_LINKS}
3407 @cindex Links
3408 Make @code{AC_OUTPUT} link each of the existing files @var{source} to
3409 the corresponding link name @var{dest}.  Makes a symbolic link if
3410 possible, otherwise a hard link if possible, otherwise a copy.  The
3411 @var{dest} and @var{source} names should be relative to the top level
3412 source or build directory.  This macro is one of the instantiating
3413 macros; see @ref{Configuration Actions}.
3415 For example, this call:
3417 @example
3418 AC_CONFIG_LINKS([host.h:config/$machine.h
3419                 object.h:config/$obj_format.h])
3420 @end example
3422 @noindent
3423 creates in the current directory @file{host.h} as a link to
3424 @file{@var{srcdir}/config/$machine.h}, and @file{object.h} as a
3425 link to @file{@var{srcdir}/config/$obj_format.h}.
3427 The tempting value @samp{.} for @var{dest} is invalid: it makes it
3428 impossible for @samp{config.status} to guess the links to establish.
3430 One can then run:
3431 @example
3432 ./config.status host.h object.h
3433 @end example
3434 @noindent
3435 to create the links.
3436 @end defmac
3440 @node Subdirectories
3441 @section Configuring Other Packages in Subdirectories
3442 @cindex Configure subdirectories
3443 @cindex Subdirectory configure
3445 In most situations, calling @code{AC_OUTPUT} is sufficient to produce
3446 makefiles in subdirectories.  However, @command{configure} scripts
3447 that control more than one independent package can use
3448 @code{AC_CONFIG_SUBDIRS} to run @command{configure} scripts for other
3449 packages in subdirectories.
3451 @defmac AC_CONFIG_SUBDIRS (@var{dir} @dots{})
3452 @acindex{CONFIG_SUBDIRS}
3453 @ovindex subdirs
3454 Make @code{AC_OUTPUT} run @command{configure} in each subdirectory
3455 @var{dir} in the given blank-or-newline-separated list.  Each @var{dir} should
3456 be a literal, i.e., please do not use:
3458 @example
3459 if test "$package_foo_enabled" = yes; then
3460   $my_subdirs="$my_subdirs foo"
3462 AC_CONFIG_SUBDIRS([$my_subdirs])
3463 @end example
3465 @noindent
3466 because this prevents @samp{./configure --help=recursive} from
3467 displaying the options of the package @code{foo}.  Instead, you should
3468 write:
3470 @example
3471 if test "$package_foo_enabled" = yes; then
3472   AC_CONFIG_SUBDIRS([foo])
3474 @end example
3476 If a given @var{dir} is not found, an error is reported: if the
3477 subdirectory is optional, write:
3479 @example
3480 if test -d "$srcdir/foo"; then
3481   AC_CONFIG_SUBDIRS([foo])
3483 @end example
3485 @c NB: Yes, below we mean configure.in, not configure.ac.
3486 If a given @var{dir} contains @command{configure.gnu}, it is run instead
3487 of @command{configure}.  This is for packages that might use a
3488 non-Autoconf script @command{Configure}, which can't be called through a
3489 wrapper @command{configure} since it would be the same file on
3490 case-insensitive file systems.  Likewise, if a @var{dir} contains
3491 @file{configure.in} but no @command{configure}, the Cygnus
3492 @command{configure} script found by @code{AC_CONFIG_AUX_DIR} is used.
3494 The subdirectory @command{configure} scripts are given the same command
3495 line options that were given to this @command{configure} script, with minor
3496 changes if needed, which include:
3498 @itemize @minus
3499 @item
3500 adjusting a relative name for the cache file;
3502 @item
3503 adjusting a relative name for the source directory;
3505 @item
3506 propagating the current value of @code{$prefix}, including if it was
3507 defaulted, and if the default values of the top level and of the subdirectory
3508 @file{configure} differ.
3509 @end itemize
3511 This macro also sets the output variable @code{subdirs} to the list of
3512 directories @samp{@var{dir} @dots{}}.  Make rules can use
3513 this variable to determine which subdirectories to recurse into.
3515 This macro may be called multiple times.
3516 @end defmac
3518 @node Default Prefix
3519 @section Default Prefix
3520 @cindex Install prefix
3521 @cindex Prefix for install
3523 By default, @command{configure} sets the prefix for files it installs to
3524 @file{/usr/local}.  The user of @command{configure} can select a different
3525 prefix using the @option{--prefix} and @option{--exec-prefix} options.
3526 There are two ways to change the default: when creating
3527 @command{configure}, and when running it.
3529 Some software packages might want to install in a directory other than
3530 @file{/usr/local} by default.  To accomplish that, use the
3531 @code{AC_PREFIX_DEFAULT} macro.
3533 @defmac AC_PREFIX_DEFAULT (@var{prefix})
3534 @acindex{PREFIX_DEFAULT}
3535 Set the default installation prefix to @var{prefix} instead of
3536 @file{/usr/local}.
3537 @end defmac
3539 It may be convenient for users to have @command{configure} guess the
3540 installation prefix from the location of a related program that they
3541 have already installed.  If you wish to do that, you can call
3542 @code{AC_PREFIX_PROGRAM}.
3544 @anchor{AC_PREFIX_PROGRAM}
3545 @defmac AC_PREFIX_PROGRAM (@var{program})
3546 @acindex{PREFIX_PROGRAM}
3547 If the user did not specify an installation prefix (using the
3548 @option{--prefix} option), guess a value for it by looking for
3549 @var{program} in @env{PATH}, the way the shell does.  If @var{program}
3550 is found, set the prefix to the parent of the directory containing
3551 @var{program}, else default the prefix as described above
3552 (@file{/usr/local} or @code{AC_PREFIX_DEFAULT}).  For example, if
3553 @var{program} is @code{gcc} and the @env{PATH} contains
3554 @file{/usr/local/gnu/bin/gcc}, set the prefix to @file{/usr/local/gnu}.
3555 @end defmac
3559 @c ======================================================== Existing tests
3561 @node Existing Tests
3562 @chapter Existing Tests
3564 These macros test for particular system features that packages might
3565 need or want to use.  If you need to test for a kind of feature that
3566 none of these macros check for, you can probably do it by calling
3567 primitive test macros with appropriate arguments (@pxref{Writing
3568 Tests}).
3570 These tests print messages telling the user which feature they're
3571 checking for, and what they find.  They cache their results for future
3572 @command{configure} runs (@pxref{Caching Results}).
3574 Some of these macros set output variables.  @xref{Makefile
3575 Substitutions}, for how to get their values.  The phrase ``define
3576 @var{name}'' is used below as a shorthand to mean ``define the C
3577 preprocessor symbol @var{name} to the value 1''.  @xref{Defining
3578 Symbols}, for how to get those symbol definitions into your program.
3580 @menu
3581 * Common Behavior::             Macros' standard schemes
3582 * Alternative Programs::        Selecting between alternative programs
3583 * Files::                       Checking for the existence of files
3584 * Libraries::                   Library archives that might be missing
3585 * Library Functions::           C library functions that might be missing
3586 * Header Files::                Header files that might be missing
3587 * Declarations::                Declarations that may be missing
3588 * Structures::                  Structures or members that might be missing
3589 * Types::                       Types that might be missing
3590 * Compilers and Preprocessors::  Checking for compiling programs
3591 * System Services::             Operating system services
3592 * Posix Variants::              Special kludges for specific Posix variants
3593 * Erlang Libraries::            Checking for the existence of Erlang libraries
3594 @end menu
3596 @node Common Behavior
3597 @section Common Behavior
3598 @cindex Common autoconf behavior
3600 Much effort has been expended to make Autoconf easy to learn.  The most
3601 obvious way to reach this goal is simply to enforce standard interfaces
3602 and behaviors, avoiding exceptions as much as possible.  Because of
3603 history and inertia, unfortunately, there are still too many exceptions
3604 in Autoconf; nevertheless, this section describes some of the common
3605 rules.
3607 @menu
3608 * Standard Symbols::            Symbols defined by the macros
3609 * Default Includes::            Includes used by the generic macros
3610 @end menu
3612 @node Standard Symbols
3613 @subsection Standard Symbols
3614 @cindex Standard symbols
3616 All the generic macros that @code{AC_DEFINE} a symbol as a result of
3617 their test transform their @var{argument} values to a standard alphabet.
3618 First, @var{argument} is converted to upper case and any asterisks
3619 (@samp{*}) are each converted to @samp{P}.  Any remaining characters
3620 that are not alphanumeric are converted to underscores.
3622 For instance,
3624 @example
3625 AC_CHECK_TYPES([struct $Expensive*])
3626 @end example
3628 @noindent
3629 defines the symbol @samp{HAVE_STRUCT__EXPENSIVEP} if the check
3630 succeeds.
3633 @node Default Includes
3634 @subsection Default Includes
3635 @cindex Default includes
3636 @cindex Includes, default
3638 Several tests depend upon a set of header files.  Since these headers
3639 are not universally available, tests actually have to provide a set of
3640 protected includes, such as:
3642 @example
3643 @group
3644 #ifdef TIME_WITH_SYS_TIME
3645 # include <sys/time.h>
3646 # include <time.h>
3647 #else
3648 # ifdef HAVE_SYS_TIME_H
3649 #  include <sys/time.h>
3650 # else
3651 #  include <time.h>
3652 # endif
3653 #endif
3654 @end group
3655 @end example
3657 @noindent
3658 Unless you know exactly what you are doing, you should avoid using
3659 unconditional includes, and check the existence of the headers you
3660 include beforehand (@pxref{Header Files}).
3662 Most generic macros use the following macro to provide the default set
3663 of includes:
3665 @defmac AC_INCLUDES_DEFAULT (@ovar{include-directives})
3666 @acindex{INCLUDES_DEFAULT}
3667 Expand to @var{include-directives} if defined, otherwise to:
3669 @example
3670 @group
3671 #include <stdio.h>
3672 #ifdef HAVE_SYS_TYPES_H
3673 # include <sys/types.h>
3674 #endif
3675 #ifdef HAVE_SYS_STAT_H
3676 # include <sys/stat.h>
3677 #endif
3678 #ifdef STDC_HEADERS
3679 # include <stdlib.h>
3680 # include <stddef.h>
3681 #else
3682 # ifdef HAVE_STDLIB_H
3683 #  include <stdlib.h>
3684 # endif
3685 #endif
3686 #ifdef HAVE_STRING_H
3687 # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
3688 #  include <memory.h>
3689 # endif
3690 # include <string.h>
3691 #endif
3692 #ifdef HAVE_STRINGS_H
3693 # include <strings.h>
3694 #endif
3695 #ifdef HAVE_INTTYPES_H
3696 # include <inttypes.h>
3697 #endif
3698 #ifdef HAVE_STDINT_H
3699 # include <stdint.h>
3700 #endif
3701 #ifdef HAVE_UNISTD_H
3702 # include <unistd.h>
3703 #endif
3704 @end group
3705 @end example
3707 If the default includes are used, then check for the presence of these
3708 headers and their compatibility, i.e., you don't need to run
3709 @code{AC_HEADER_STDC}, nor check for @file{stdlib.h} etc.
3711 These headers are checked for in the same order as they are included.
3712 For instance, on some systems @file{string.h} and @file{strings.h} both
3713 exist, but conflict.  Then @code{HAVE_STRING_H} is defined, not
3714 @code{HAVE_STRINGS_H}.
3715 @end defmac
3717 @node Alternative Programs
3718 @section Alternative Programs
3719 @cindex Programs, checking
3721 These macros check for the presence or behavior of particular programs.
3722 They are used to choose between several alternative programs and to
3723 decide what to do once one has been chosen.  If there is no macro
3724 specifically defined to check for a program you need, and you don't need
3725 to check for any special properties of it, then you can use one of the
3726 general program-check macros.
3728 @menu
3729 * Particular Programs::         Special handling to find certain programs
3730 * Generic Programs::            How to find other programs
3731 @end menu
3733 @node Particular Programs
3734 @subsection Particular Program Checks
3736 These macros check for particular programs---whether they exist, and
3737 in some cases whether they support certain features.
3739 @defmac AC_PROG_AWK
3740 @acindex{PROG_AWK}
3741 @ovindex AWK
3742 Check for @code{gawk}, @code{mawk}, @code{nawk}, and @code{awk}, in that
3743 order, and set output variable @code{AWK} to the first one that is found.
3744 It tries @code{gawk} first because that is reported to be the
3745 best implementation.
3746 @end defmac
3748 @defmac AC_PROG_GREP
3749 @acindex{PROG_GREP}
3750 @ovindex GREP
3751 Look for the best available @code{grep} or @code{ggrep} that accepts the
3752 longest input lines possible, and that supports multiple @option{-e} options.
3753 Set the output variable @code{GREP} to whatever is chosen.
3754 @xref{Limitations of Usual Tools}, for more information about
3755 portability problems with the @command{grep} command family.
3756 @end defmac
3758 @defmac AC_PROG_EGREP
3759 @acindex{PROG_EGREP}
3760 @ovindex EGREP
3761 Check whether @code{$GREP -E} works, or else look for the best available
3762 @code{egrep} or @code{gegrep} that accepts the longest input lines possible.
3763 Set the output variable @code{EGREP} to whatever is chosen.
3764 @end defmac
3766 @defmac AC_PROG_FGREP
3767 @acindex{PROG_FGREP}
3768 @ovindex FGREP
3769 Check whether @code{$GREP -F} works, or else look for the best available
3770 @code{fgrep} or @code{gfgrep} that accepts the longest input lines possible.
3771 Set the output variable @code{FGREP} to whatever is chosen.
3772 @end defmac
3774 @defmac AC_PROG_INSTALL
3775 @acindex{PROG_INSTALL}
3776 @ovindex INSTALL
3777 @ovindex INSTALL_PROGRAM
3778 @ovindex INSTALL_DATA
3779 @ovindex INSTALL_SCRIPT
3780 Set output variable @code{INSTALL} to the name of a @acronym{BSD}-compatible
3781 @command{install} program, if one is found in the current @env{PATH}.
3782 Otherwise, set @code{INSTALL} to @samp{@var{dir}/install-sh -c},
3783 checking the directories specified to @code{AC_CONFIG_AUX_DIR} (or its
3784 default directories) to determine @var{dir} (@pxref{Output}).  Also set
3785 the variables @code{INSTALL_PROGRAM} and @code{INSTALL_SCRIPT} to
3786 @samp{$@{INSTALL@}} and @code{INSTALL_DATA} to @samp{$@{INSTALL@} -m 644}.
3788 @samp{@@INSTALL@@} is special, as its value may vary for different
3789 configuration files.
3791 This macro screens out various instances of @command{install} known not to
3792 work.  It prefers to find a C program rather than a shell script, for
3793 speed.  Instead of @file{install-sh}, it can also use @file{install.sh},
3794 but that name is obsolete because some @command{make} programs have a rule
3795 that creates @file{install} from it if there is no makefile.  Further, this
3796 macro requires @command{install} to be able to install multiple files into a
3797 target directory in a single invocation.
3799 Autoconf comes with a copy of @file{install-sh} that you can use.  If
3800 you use @code{AC_PROG_INSTALL}, you must include either
3801 @file{install-sh} or @file{install.sh} in your distribution; otherwise
3802 @command{configure} produces an error message saying it can't find
3803 them---even if the system you're on has a good @command{install} program.
3804 This check is a safety measure to prevent you from accidentally leaving
3805 that file out, which would prevent your package from installing on
3806 systems that don't have a @acronym{BSD}-compatible @command{install} program.
3808 If you need to use your own installation program because it has features
3809 not found in standard @command{install} programs, there is no reason to use
3810 @code{AC_PROG_INSTALL}; just put the file name of your program into your
3811 @file{Makefile.in} files.
3812 @end defmac
3814 @defmac AC_PROG_MKDIR_P
3815 @acindex{PROG_MKDIR_P}
3816 @ovindex MKDIR_P
3817 Set output variable @code{MKDIR_P} to a program that ensures that for
3818 each argument, a directory named by this argument exists, creating it
3819 and its parent directories if needed, and without race conditions when
3820 two instances of the program attempt to make the same directory at
3821 nearly the same time.
3823 This macro uses the @samp{mkdir -p} command if possible.  Otherwise, it
3824 falls back on invoking @command{install-sh} with the @option{-d} option,
3825 so your package should
3826 contain @file{install-sh} as described under @code{AC_PROG_INSTALL}.
3827 An @file{install-sh} file that predates Autoconf 2.60 or Automake 1.10
3828 is vulnerable to race conditions, so if you want to support parallel
3829 installs from
3830 different packages into the same directory you need to make sure you
3831 have an up-to-date @file{install-sh}.  In particular, be careful about
3832 using @samp{autoreconf -if} if your Automake predates Automake 1.10.
3834 This macro is related to the @code{AS_MKDIR_P} macro (@pxref{Programming
3835 in M4sh}), but it sets an output variable intended for use in other
3836 files, whereas @code{AS_MKDIR_P} is intended for use in scripts like
3837 @command{configure}.  Also, @code{AS_MKDIR_P} does not accept options,
3838 but @code{MKDIR_P} supports the @option{-m} option, e.g., a makefile
3839 might invoke @code{$(MKDIR_P) -m 0 dir} to create an inaccessible
3840 directory, and conversely a makefile should use @code{$(MKDIR_P) --
3841 $(FOO)} if @var{FOO} might yield a value that begins with @samp{-}.
3842 Finally, @code{AS_MKDIR_P} does not check for race condition
3843 vulnerability, whereas @code{AC_PROG_MKDIR_P} does.
3845 @samp{@@MKDIR_P@@} is special, as its value may vary for different
3846 configuration files.
3847 @end defmac
3849 @anchor{AC_PROG_LEX}
3850 @defmac AC_PROG_LEX
3851 @acindex{PROG_LEX}
3852 @ovindex LEX
3853 @ovindex LEXLIB
3854 @cvindex YYTEXT_POINTER
3855 @ovindex LEX_OUTPUT_ROOT
3856 If @code{flex} is found, set output variable @code{LEX} to @samp{flex}
3857 and @code{LEXLIB} to @option{-lfl}, if that library is in a standard
3858 place.  Otherwise set @code{LEX} to @samp{lex} and @code{LEXLIB} to
3859 @option{-ll}.
3861 Define @code{YYTEXT_POINTER} if @code{yytext} defaults to @samp{char *} instead
3862 of to @samp{char []}.  Also set output variable @code{LEX_OUTPUT_ROOT} to
3863 the base of the file name that the lexer generates; usually
3864 @file{lex.yy}, but sometimes something else.  These results vary
3865 according to whether @code{lex} or @code{flex} is being used.
3867 You are encouraged to use Flex in your sources, since it is both more
3868 pleasant to use than plain Lex and the C source it produces is portable.
3869 In order to ensure portability, however, you must either provide a
3870 function @code{yywrap} or, if you don't use it (e.g., your scanner has
3871 no @samp{#include}-like feature), simply include a @samp{%noyywrap}
3872 statement in the scanner's source.  Once this done, the scanner is
3873 portable (unless @emph{you} felt free to use nonportable constructs) and
3874 does not depend on any library.  In this case, and in this case only, it
3875 is suggested that you use this Autoconf snippet:
3877 @example
3878 AC_PROG_LEX
3879 if test "$LEX" != flex; then
3880   LEX="$SHELL $missing_dir/missing flex"
3881   AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
3882   AC_SUBST([LEXLIB], [''])
3884 @end example
3886 The shell script @command{missing} can be found in the Automake
3887 distribution.
3889 To ensure backward compatibility, Automake's @code{AM_PROG_LEX} invokes
3890 (indirectly) this macro twice, which causes an annoying but benign
3891 ``@code{AC_PROG_LEX} invoked multiple times'' warning.  Future versions
3892 of Automake will fix this issue; meanwhile, just ignore this message.
3894 As part of running the test, this macro may delete any file in the
3895 configuration directory named @file{lex.yy.c} or @file{lexyy.c}.
3896 @end defmac
3898 @anchor{AC_PROG_LN_S}
3899 @defmac AC_PROG_LN_S
3900 @acindex{PROG_LN_S}
3901 @ovindex LN_S
3902 If @samp{ln -s} works on the current file system (the operating system
3903 and file system support symbolic links), set the output variable
3904 @code{LN_S} to @samp{ln -s}; otherwise, if @samp{ln} works, set
3905 @code{LN_S} to @samp{ln}, and otherwise set it to @samp{cp -p}.
3907 If you make a link in a directory other than the current directory, its
3908 meaning depends on whether @samp{ln} or @samp{ln -s} is used.  To safely
3909 create links using @samp{$(LN_S)}, either find out which form is used
3910 and adjust the arguments, or always invoke @code{ln} in the directory
3911 where the link is to be created.
3913 In other words, it does not work to do:
3914 @example
3915 $(LN_S) foo /x/bar
3916 @end example
3918 Instead, do:
3920 @example
3921 (cd /x && $(LN_S) foo bar)
3922 @end example
3923 @end defmac
3925 @defmac AC_PROG_RANLIB
3926 @acindex{PROG_RANLIB}
3927 @ovindex RANLIB
3928 Set output variable @code{RANLIB} to @samp{ranlib} if @code{ranlib}
3929 is found, and otherwise to @samp{:} (do nothing).
3930 @end defmac
3932 @defmac AC_PROG_SED
3933 @acindex{PROG_SED}
3934 @ovindex SED
3935 Set output variable @code{SED} to a Sed implementation that conforms to
3936 Posix and does not have arbitrary length limits.  Report an error if no
3937 acceptable Sed is found.  @xref{Limitations of Usual Tools}, for more
3938 information about portability problems with Sed.
3939 @end defmac
3941 @defmac AC_PROG_YACC
3942 @acindex{PROG_YACC}
3943 @ovindex YACC
3944 If @code{bison} is found, set output variable @code{YACC} to @samp{bison
3945 -y}.  Otherwise, if @code{byacc} is found, set @code{YACC} to
3946 @samp{byacc}.  Otherwise set @code{YACC} to @samp{yacc}.
3947 @end defmac
3949 @node Generic Programs
3950 @subsection Generic Program and File Checks
3952 These macros are used to find programs not covered by the ``particular''
3953 test macros.  If you need to check the behavior of a program as well as
3954 find out whether it is present, you have to write your own test for it
3955 (@pxref{Writing Tests}).  By default, these macros use the environment
3956 variable @env{PATH}.  If you need to check for a program that might not
3957 be in the user's @env{PATH}, you can pass a modified path to use
3958 instead, like this:
3960 @example
3961 AC_PATH_PROG([INETD], [inetd], [/usr/libexec/inetd],
3962              [$PATH$PATH_SEPARATOR/usr/libexec$PATH_SEPARATOR]dnl
3963 [/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc])
3964 @end example
3966 You are strongly encouraged to declare the @var{variable} passed to
3967 @code{AC_CHECK_PROG} etc.@: as precious, @xref{Setting Output Variables},
3968 @code{AC_ARG_VAR}, for more details.
3970 @anchor{AC_CHECK_PROG}
3971 @defmac AC_CHECK_PROG (@var{variable}, @var{prog-to-check-for}, @
3972   @var{value-if-found}, @ovar{value-if-not-found}, @dvar{path, $PATH}, @
3973   @ovar{reject})
3974 @acindex{CHECK_PROG}
3975 Check whether program @var{prog-to-check-for} exists in @var{path}.  If
3976 it is found, set @var{variable} to @var{value-if-found}, otherwise to
3977 @var{value-if-not-found}, if given.  Always pass over @var{reject} (an
3978 absolute file name) even if it is the first found in the search path; in
3979 that case, set @var{variable} using the absolute file name of the
3980 @var{prog-to-check-for} found that is not @var{reject}.  If
3981 @var{variable} was already set, do nothing.  Calls @code{AC_SUBST} for
3982 @var{variable}.
3983 @end defmac
3985 @anchor{AC_CHECK_PROGS}
3986 @defmac AC_CHECK_PROGS (@var{variable}, @var{progs-to-check-for}, @
3987   @ovar{value-if-not-found}, @dvar{path, $PATH})
3988 @acindex{CHECK_PROGS}
3989 Check for each program in the blank-separated list
3990 @var{progs-to-check-for} existing in the @var{path}.  If one is found, set
3991 @var{variable} to the name of that program.  Otherwise, continue
3992 checking the next program in the list.  If none of the programs in the
3993 list are found, set @var{variable} to @var{value-if-not-found}; if
3994 @var{value-if-not-found} is not specified, the value of @var{variable}
3995 is not changed.  Calls @code{AC_SUBST} for @var{variable}.
3996 @end defmac
3998 @defmac AC_CHECK_TARGET_TOOL (@var{variable}, @var{prog-to-check-for}, @
3999   @ovar{value-if-not-found}, @dvar{path, $PATH})
4000 @acindex{CHECK_TARGET_TOOL}
4001 Like @code{AC_CHECK_PROG}, but first looks for @var{prog-to-check-for}
4002 with a prefix of the target type as determined by
4003 @code{AC_CANONICAL_TARGET}, followed by a dash (@pxref{Canonicalizing}).
4004 If the tool cannot be found with a prefix, and if the build and target
4005 types are equal, then it is also searched for without a prefix.
4007 As noted in @ref{Specifying Names, , Specifying the system type}, the
4008 target is rarely specified, because most of the time it is the same
4009 as the host: it is the type of system for which any compiler tool in
4010 the package produces code.  What this macro looks for is,
4011 for example, @emph{a tool @r{(assembler, linker, etc.)}@: that the
4012 compiler driver @r{(@command{gcc} for the @acronym{GNU} C Compiler)}
4013 uses to produce objects, archives or executables}.
4014 @end defmac
4016 @defmac AC_CHECK_TOOL (@var{variable}, @var{prog-to-check-for}, @
4017   @ovar{value-if-not-found}, @dvar{path, $PATH})
4018 @acindex{CHECK_TOOL}
4019 Like @code{AC_CHECK_PROG}, but first looks for @var{prog-to-check-for}
4020 with a prefix of the host type as specified by @option{--host}, followed by a
4021 dash.  For example, if the user runs
4022 @samp{configure --build=x86_64-gnu --host=i386-gnu}, then this call:
4023 @example
4024 AC_CHECK_TOOL([RANLIB], [ranlib], [:])
4025 @end example
4026 @noindent
4027 sets @code{RANLIB} to @file{i386-gnu-ranlib} if that program exists in
4028 @var{path}, or otherwise to @samp{ranlib} if that program exists in
4029 @var{path}, or to @samp{:} if neither program exists.
4031 In the future, when cross-compiling this macro will @emph{only}
4032 accept program names that are prefixed with the host type.
4033 For more information, see @ref{Specifying Names, , Specifying the
4034 system type}.
4035 @end defmac
4037 @defmac AC_CHECK_TARGET_TOOLS (@var{variable}, @var{progs-to-check-for}, @
4038   @ovar{value-if-not-found}, @dvar{path, $PATH})
4039 @acindex{CHECK_TARGET_TOOLS}
4040 Like @code{AC_CHECK_TARGET_TOOL}, each of the tools in the list
4041 @var{progs-to-check-for} are checked with a prefix of the target type as
4042 determined by @code{AC_CANONICAL_TARGET}, followed by a dash
4043 (@pxref{Canonicalizing}).  If none of the tools can be found with a
4044 prefix, and if the build and target types are equal, then the first one
4045 without a prefix is used.  If a tool is found, set @var{variable} to
4046 the name of that program.  If none of the tools in the list are found,
4047 set @var{variable} to @var{value-if-not-found}; if @var{value-if-not-found}
4048 is not specified, the value of @var{variable} is not changed.  Calls
4049 @code{AC_SUBST} for @var{variable}.
4050 @end defmac
4052 @defmac AC_CHECK_TOOLS (@var{variable}, @var{progs-to-check-for}, @
4053   @ovar{value-if-not-found}, @dvar{path, $PATH})
4054 @acindex{CHECK_TOOLS}
4055 Like @code{AC_CHECK_TOOL}, each of the tools in the list
4056 @var{progs-to-check-for} are checked with a prefix of the host type as
4057 determined by @code{AC_CANONICAL_HOST}, followed by a dash
4058 (@pxref{Canonicalizing}).  If none of the tools can be found with a
4059 prefix, then the first one without a prefix is used.  If a tool is found,
4060 set @var{variable} to the name of that program.  If none of the tools in
4061 the list are found, set @var{variable} to @var{value-if-not-found}; if
4062 @var{value-if-not-found} is not specified, the value of @var{variable}
4063 is not changed.  Calls @code{AC_SUBST} for @var{variable}.
4065 In the future, when cross-compiling this macro will @emph{not}
4066 accept program names that are not prefixed with the host type.
4067 @end defmac
4069 @anchor{AC_PATH_PROG}
4070 @defmac AC_PATH_PROG (@var{variable}, @var{prog-to-check-for}, @
4071   @ovar{value-if-not-found}, @dvar{path, $PATH})
4072 @acindex{PATH_PROG}
4073 Like @code{AC_CHECK_PROG}, but set @var{variable} to the absolute
4074 name of @var{prog-to-check-for} if found.
4075 @end defmac
4077 @anchor{AC_PATH_PROGS}
4078 @defmac AC_PATH_PROGS (@var{variable}, @var{progs-to-check-for}, @
4079   @ovar{value-if-not-found}, @dvar{path, $PATH})
4080 @acindex{PATH_PROGS}
4081 Like @code{AC_CHECK_PROGS}, but if any of @var{progs-to-check-for}
4082 are found, set @var{variable} to the absolute name of the program
4083 found.
4084 @end defmac
4086 @defmac AC_PATH_PROGS_FEATURE_CHECK (@var{variable}, @
4087   @var{progs-to-check-for}, @var{feature-test}, @
4088   @ovar{action-if-not-found}, @dvar{path, $PATH})
4089 @acindex{PATH_PROGS_FEATURE_CHECK}
4090 This macro was introduced in Autoconf 2.62.  If @var{variable} is not
4091 empty, then set the cache variable @code{$ac_cv_path_@var{variable}} to
4092 its value.  Otherwise, check for each program in the blank-separated
4093 list @var{progs-to-check-for} existing in @var{path}.  For each program
4094 found, execute @var{feature-test} with @code{$ac_path_@var{variable}}
4095 set to the absolute name of the candidate program.  If no invocation of
4096 @var{feature-test} sets the shell variable
4097 @code{$ac_cv_path_@var{variable}}, then @var{action-if-not-found} is
4098 executed.  @var{feature-test} will be run even when
4099 @code{ac_cv_path_@var{variable}} is set, to provide the ability to
4100 choose a better candidate found later in @var{path}; to accept the
4101 current setting and bypass all futher checks, @var{feature-test} can
4102 execute @code{ac_path_@var{variable}_found=:}.
4104 Note that this macro has some subtle differences from
4105 @code{AC_CHECK_PROGS}.  It is designed to be run inside
4106 @code{AC_CACHE_VAL}, therefore, it should have no side effects.  In
4107 particular, @var{variable} is not set to the final value of
4108 @code{ac_cv_path_@var{variable}}, nor is @code{AC_SUBST} automatically
4109 run.  Also, on failure, any action can be performed, whereas
4110 @code{AC_CHECK_PROGS} only performs
4111 @code{@var{variable}=@var{value-if-not-found}}.
4113 Here is an example, similar to what Autoconf uses in its own configure
4114 script.  It will search for an implementation of @command{m4} that
4115 supports the @code{indir} builtin, even if it goes by the name
4116 @command{gm4} or is not the first implementation on @env{PATH}.
4118 @example
4119 AC_CACHE_CHECK([for m4 that supports indir], [ac_cv_path_M4],
4120   [AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4],
4121     [[m4out=`echo 'changequote([,])indir([divnum])' | $ac_path_M4`
4122       test "x$m4out" = x0 \
4123       && ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:]],
4124     [AC_MSG_ERROR([could not find m4 that supports indir])])])
4125 AC_SUBST([M4], [$ac_cv_path_M4])
4126 @end example
4127 @end defmac
4129 @defmac AC_PATH_TARGET_TOOL (@var{variable}, @var{prog-to-check-for}, @
4130   @ovar{value-if-not-found}, @dvar{path, $PATH})
4131 @acindex{PATH_TARGET_TOOL}
4132 Like @code{AC_CHECK_TARGET_TOOL}, but set @var{variable} to the absolute
4133 name of the program if it is found.
4134 @end defmac
4136 @defmac AC_PATH_TOOL (@var{variable}, @var{prog-to-check-for}, @
4137   @ovar{value-if-not-found}, @dvar{path, $PATH})
4138 @acindex{PATH_TOOL}
4139 Like @code{AC_CHECK_TOOL}, but set @var{variable} to the absolute
4140 name of the program if it is found.
4142 In the future, when cross-compiling this macro will @emph{not}
4143 accept program names that are not prefixed with the host type.
4144 @end defmac
4147 @node Files
4148 @section Files
4149 @cindex File, checking
4151 You might also need to check for the existence of files.  Before using
4152 these macros, ask yourself whether a runtime test might not be a better
4153 solution.  Be aware that, like most Autoconf macros, they test a feature
4154 of the host machine, and therefore, they die when cross-compiling.
4156 @defmac AC_CHECK_FILE (@var{file}, @ovar{action-if-found}, @
4157   @ovar{action-if-not-found})
4158 @acindex{CHECK_FILE}
4159 Check whether file @var{file} exists on the native system.  If it is
4160 found, execute @var{action-if-found}, otherwise do
4161 @var{action-if-not-found}, if given.
4162 @end defmac
4164 @defmac AC_CHECK_FILES (@var{files}, @ovar{action-if-found}, @
4165   @ovar{action-if-not-found})
4166 @acindex{CHECK_FILES}
4167 Executes @code{AC_CHECK_FILE} once for each file listed in @var{files}.
4168 Additionally, defines @samp{HAVE_@var{file}} (@pxref{Standard Symbols})
4169 for each file found.
4170 @end defmac
4173 @node Libraries
4174 @section Library Files
4175 @cindex Library, checking
4177 The following macros check for the presence of certain C, C++, or Fortran
4178 library archive files.
4180 @anchor{AC_CHECK_LIB}
4181 @defmac AC_CHECK_LIB (@var{library}, @var{function}, @
4182   @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
4183 @acindex{CHECK_LIB}
4184 Test whether the library @var{library} is available by trying to link
4185 a test program that calls function @var{function} with the library.
4186 @var{function} should be a function provided by the library.
4187 Use the base
4188 name of the library; e.g., to check for @option{-lmp}, use @samp{mp} as
4189 the @var{library} argument.
4191 @var{action-if-found} is a list of shell commands to run if the link
4192 with the library succeeds; @var{action-if-not-found} is a list of shell
4193 commands to run if the link fails.  If @var{action-if-found} is not
4194 specified, the default action prepends @option{-l@var{library}} to
4195 @code{LIBS} and defines @samp{HAVE_LIB@var{library}} (in all
4196 capitals).  This macro is intended to support building @code{LIBS} in
4197 a right-to-left (least-dependent to most-dependent) fashion such that
4198 library dependencies are satisfied as a natural side effect of
4199 consecutive tests.  Linkers are sensitive to library ordering
4200 so the order in which @code{LIBS} is generated is important to reliable
4201 detection of libraries.
4203 If linking with @var{library} results in unresolved symbols that would
4204 be resolved by linking with additional libraries, give those libraries
4205 as the @var{other-libraries} argument, separated by spaces:
4206 e.g., @option{-lXt -lX11}.  Otherwise, this macro fails to detect
4207 that @var{library} is present, because linking the test program
4208 always fails with unresolved symbols.  The @var{other-libraries} argument
4209 should be limited to cases where it is desirable to test for one library
4210 in the presence of another that is not already in @code{LIBS}.
4212 @code{AC_CHECK_LIB} requires some care in usage, and should be avoided
4213 in some common cases.  Many standard functions like @code{gethostbyname}
4214 appear in the standard C library on some hosts, and in special libraries
4215 like @code{nsl} on other hosts.  On some hosts the special libraries
4216 contain variant implementations that you may not want to use.  These
4217 days it is normally better to use @code{AC_SEARCH_LIBS([gethostbyname],
4218 [nsl])} instead of @code{AC_CHECK_LIB([nsl], [gethostbyname])}.
4219 @end defmac
4221 @anchor{AC_SEARCH_LIBS}
4222 @defmac AC_SEARCH_LIBS (@var{function}, @var{search-libs}, @
4223   @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
4224 @acindex{SEARCH_LIBS}
4225 Search for a library defining @var{function} if it's not already
4226 available.  This equates to calling
4227 @samp{AC_LINK_IFELSE([AC_LANG_CALL([], [@var{function}])])} first with
4228 no libraries, then for each library listed in @var{search-libs}.
4230 Add @option{-l@var{library}} to @code{LIBS} for the first library found
4231 to contain @var{function}, and run @var{action-if-found}.  If the
4232 function is not found, run @var{action-if-not-found}.
4234 If linking with @var{library} results in unresolved symbols that would
4235 be resolved by linking with additional libraries, give those libraries
4236 as the @var{other-libraries} argument, separated by spaces:
4237 e.g., @option{-lXt -lX11}.  Otherwise, this macro fails to detect
4238 that @var{function} is present, because linking the test program
4239 always fails with unresolved symbols.
4240 @end defmac
4244 @node Library Functions
4245 @section Library Functions
4247 The following macros check for particular C library functions.
4248 If there is no macro specifically defined to check for a function you need,
4249 and you don't need to check for any special properties of
4250 it, then you can use one of the general function-check macros.
4252 @menu
4253 * Function Portability::        Pitfalls with usual functions
4254 * Particular Functions::        Special handling to find certain functions
4255 * Generic Functions::           How to find other functions
4256 @end menu
4258 @node Function Portability
4259 @subsection Portability of C Functions
4260 @cindex Portability of C functions
4261 @cindex C function portability
4263 Most usual functions can either be missing, or be buggy, or be limited
4264 on some architectures.  This section tries to make an inventory of these
4265 portability issues.  By definition, this list always requires
4266 additions.  Please help us keeping it as complete as possible.
4268 @table @asis
4269 @item @code{exit}
4270 @c @fuindex exit
4271 @prindex @code{exit}
4272 On ancient hosts, @code{exit} returned @code{int}.
4273 This is because @code{exit} predates @code{void}, and there was a long
4274 tradition of it returning @code{int}.
4276 On current hosts, the problem more likely is that @code{exit} is not
4277 declared, due to C++ problems of some sort or another.  For this reason
4278 we suggest that test programs not invoke @code{exit}, but return from
4279 @code{main} instead.
4281 @item @code{free}
4282 @c @fuindex free
4283 @prindex @code{free}
4284 The C standard says a call @code{free (NULL)} does nothing, but
4285 some old systems don't support this (e.g., NextStep).
4287 @item @code{isinf}
4288 @itemx @code{isnan}
4289 @c @fuindex isinf
4290 @c @fuindex isnan
4291 @prindex @code{isinf}
4292 @prindex @code{isnan}
4293 The C99 standard says that @code{isinf} and @code{isnan} are
4294 macros.  On some systems just macros are available
4295 (e.g., @acronym{HP-UX} and Solaris 10), on
4296 some systems both macros and functions (e.g., glibc 2.3.2), and on some
4297 systems only functions (e.g., IRIX 6 and Solaris 9).  In some cases
4298 these functions are declared in nonstandard headers like
4299 @code{<sunmath.h>} and defined in non-default libraries like
4300 @option{-lm} or @option{-lsunmath}.
4302 The C99 @code{isinf} and @code{isnan} macros work correctly with
4303 @code{long double} arguments, but pre-C99 systems that use functions
4304 typically assume @code{double} arguments.  On such a system,
4305 @code{isinf} incorrectly returns true for a finite @code{long double}
4306 argument that is outside the range of @code{double}.
4308 To work around this porting mess, you can use code like the following.
4310 @smallexample
4311 #include <math.h>
4313 #ifndef isnan
4314 # define isnan(x) \
4315     (sizeof (x) == sizeof (long double) ? isnan_ld (x) \
4316      : sizeof (x) == sizeof (double) ? isnan_d (x) \
4317      : isnan_f (x))
4318 static inline int isnan_f  (float       x) @{ return x != x; @}
4319 static inline int isnan_d  (double      x) @{ return x != x; @}
4320 static inline int isnan_ld (long double x) @{ return x != x; @}
4321 #endif
4323 #ifndef isinf
4324 # define isinf(x) \
4325     (sizeof (x) == sizeof (long double) ? isinf_ld (x) \
4326      : sizeof (x) == sizeof (double) ? isinf_d (x) \
4327      : isinf_f (x))
4328 static inline int isinf_f  (float       x) @{ return isnan (x - x); @}
4329 static inline int isinf_d  (double      x) @{ return isnan (x - x); @}
4330 static inline int isinf_ld (long double x) @{ return isnan (x - x); @}
4331 #endif
4332 @end smallexample
4334 Use @code{AC_C_INLINE} (@pxref{C Compiler}) so that this code works on
4335 compilers that lack the @code{inline} keyword.  Some optimizing
4336 compilers mishandle these definitions, but systems with that bug
4337 typically have missing or broken @code{isnan} functions anyway, so it's
4338 probably not worth worrying about.
4340 @item @code{malloc}
4341 @c @fuindex malloc
4342 @prindex @code{malloc}
4343 The C standard says a call @code{malloc (0)} is implementation
4344 dependent.  It can return either @code{NULL} or a new non-null pointer.
4345 The latter is more common (e.g., the @acronym{GNU} C Library) but is by
4346 no means universal.  @code{AC_FUNC_MALLOC}
4347 can be used to insist on non-@code{NULL} (@pxref{Particular Functions}).
4349 @item @code{putenv}
4350 @c @fuindex putenv
4351 @prindex @code{putenv}
4352 Posix prefers @code{setenv} to @code{putenv}; among other things,
4353 @code{putenv} is not required of all Posix implementations, but
4354 @code{setenv} is.
4356 Posix specifies that @code{putenv} puts the given string directly in
4357 @code{environ}, but some systems make a copy of it instead (e.g.,
4358 glibc 2.0, or @acronym{BSD}).  And when a copy is made, @code{unsetenv} might
4359 not free it, causing a memory leak (e.g., Free@acronym{BSD} 4).
4361 On some systems @code{putenv ("FOO")} removes @samp{FOO} from the
4362 environment, but this is not standard usage and it dumps core
4363 on some systems (e.g., AIX).
4365 On MinGW, a call @code{putenv ("FOO=")} removes @samp{FOO} from the
4366 environment, rather than inserting it with an empty value.
4368 @item @code{realloc}
4369 @c @fuindex realloc
4370 @prindex @code{realloc}
4371 The C standard says a call @code{realloc (NULL, size)} is equivalent
4372 to @code{malloc (size)}, but some old systems don't support this (e.g.,
4373 NextStep).
4375 @item @code{signal} handler
4376 @c @fuindex signal
4377 @prindex @code{signal}
4378 @prindex @code{sigaction}
4379 Normally @code{signal} takes a handler function with a return type of
4380 @code{void}, but some old systems required @code{int} instead.  Any
4381 actual @code{int} value returned is not used; this is only a
4382 difference in the function prototype demanded.
4384 All systems we know of in current use return @code{void}.  The
4385 @code{int} was to support K&R C, where of course @code{void} is not
4386 available.  The obsolete macro @code{AC_TYPE_SIGNAL}
4387 (@pxref{AC_TYPE_SIGNAL}) can be used to establish the correct type in
4388 all cases.
4390 In most cases, it is more robust to use @code{sigaction} when it is
4391 available, rather than @code{signal}.
4393 @item @code{snprintf}
4394 @c @fuindex snprintf
4395 @prindex @code{snprintf}
4396 @c @fuindex vsnprintf
4397 @prindex @code{vsnprintf}
4398 The C99 standard says that if the output array isn't big enough
4399 and if no other errors occur, @code{snprintf} and @code{vsnprintf}
4400 truncate the output and return the number of bytes that ought to have
4401 been produced.  Some older systems return the truncated length (e.g.,
4402 @acronym{GNU} C Library 2.0.x or @sc{irix} 6.5), some a negative value
4403 (e.g., earlier @acronym{GNU} C Library versions), and some the buffer
4404 length without truncation (e.g., 32-bit Solaris 7).  Also, some buggy
4405 older systems ignore the length and overrun the buffer (e.g., 64-bit
4406 Solaris 7).
4408 @item @code{sprintf}
4409 @c @fuindex sprintf
4410 @prindex @code{sprintf}
4411 @c @fuindex vsprintf
4412 @prindex @code{vsprintf}
4413 The C standard says @code{sprintf} and @code{vsprintf} return the
4414 number of bytes written.  On some ancient systems (SunOS 4 for
4415 instance) they return the buffer pointer instead, but these no
4416 longer need to be worried about.
4418 @item @code{sscanf}
4419 @c @fuindex sscanf
4420 @prindex @code{sscanf}
4421 On various old systems, e.g., @acronym{HP-UX} 9, @code{sscanf} requires
4422 that its
4423 input string be writable (though it doesn't actually change it).  This
4424 can be a problem when using @command{gcc} since it normally puts
4425 constant strings in read-only memory (@pxref{Incompatibilities,
4426 Incompatibilities of @acronym{GCC}, , gcc, Using and
4427 Porting the @acronym{GNU} Compiler Collection}).  Apparently in some cases even
4428 having format strings read-only can be a problem.
4430 @item @code{strerror_r}
4431 @c @fuindex strerror_r
4432 @prindex @code{strerror_r}
4433 Posix specifies that @code{strerror_r} returns an @code{int}, but many
4434 systems (e.g., @acronym{GNU} C Library version 2.2.4) provide a
4435 different version returning a @code{char *}.  @code{AC_FUNC_STRERROR_R}
4436 can detect which is in use (@pxref{Particular Functions}).
4438 @item @code{strnlen}
4439 @c @fuindex strnlen
4440 @prindex @code{strnlen}
4441 @acronym{AIX} 4.3 provides a broken version which produces the
4442 following results:
4444 @example
4445 strnlen ("foobar", 0) = 0
4446 strnlen ("foobar", 1) = 3
4447 strnlen ("foobar", 2) = 2
4448 strnlen ("foobar", 3) = 1
4449 strnlen ("foobar", 4) = 0
4450 strnlen ("foobar", 5) = 6
4451 strnlen ("foobar", 6) = 6
4452 strnlen ("foobar", 7) = 6
4453 strnlen ("foobar", 8) = 6
4454 strnlen ("foobar", 9) = 6
4455 @end example
4457 @item @code{sysconf}
4458 @c @fuindex sysconf
4459 @prindex @code{sysconf}
4460 @code{_SC_PAGESIZE} is standard, but some older systems (e.g., @acronym{HP-UX}
4461 9) have @code{_SC_PAGE_SIZE} instead.  This can be tested with
4462 @code{#ifdef}.
4464 @item @code{unlink}
4465 @c @fuindex unlink
4466 @prindex @code{unlink}
4467 The Posix spec says that @code{unlink} causes the given file to be
4468 removed only after there are no more open file handles for it.  Some
4469 non-Posix hosts have trouble with this requirement, though,
4470 and some @acronym{DOS} variants even corrupt the file system.
4472 @item @code{unsetenv}
4473 @c @fuindex unsetenv
4474 @prindex @code{unsetenv}
4475 On MinGW, @code{unsetenv} is not available, but a variable @samp{FOO}
4476 can be removed with a call @code{putenv ("FOO=")}, as described under
4477 @code{putenv} above.
4479 @item @code{va_copy}
4480 @c @fuindex va_copy
4481 @prindex @code{va_copy}
4482 The C99 standard provides @code{va_copy} for copying
4483 @code{va_list} variables.  It may be available in older environments
4484 too, though possibly as @code{__va_copy} (e.g., @command{gcc} in strict
4485 pre-C99 mode).  These can be tested with @code{#ifdef}.  A fallback to
4486 @code{memcpy (&dst, &src, sizeof (va_list))} gives maximum
4487 portability.
4489 @item @code{va_list}
4490 @c @fuindex va_list
4491 @prindex @code{va_list}
4492 @code{va_list} is not necessarily just a pointer.  It can be a
4493 @code{struct} (e.g., @command{gcc} on Alpha), which means @code{NULL} is
4494 not portable.  Or it can be an array (e.g., @command{gcc} in some
4495 PowerPC configurations), which means as a function parameter it can be
4496 effectively call-by-reference and library routines might modify the
4497 value back in the caller (e.g., @code{vsnprintf} in the @acronym{GNU} C Library
4498 2.1).
4500 @item Signed @code{>>}
4501 Normally the C @code{>>} right shift of a signed type replicates the
4502 high bit, giving a so-called ``arithmetic'' shift.  But care should be
4503 taken since Standard C doesn't require that behavior.  On those
4504 few processors without a native arithmetic shift (for instance Cray
4505 vector systems) zero bits may be shifted in, the same as a shift of an
4506 unsigned type.
4508 @item Integer @code{/}
4509 C divides signed integers by truncating their quotient toward zero,
4510 yielding the same result as Fortran.  However, before C99 the standard
4511 allowed C implementations to take the floor or ceiling of the quotient
4512 in some cases.  Hardly any implementations took advantage of this
4513 freedom, though, and it's probably not worth worrying about this issue
4514 nowadays.
4515 @end table
4518 @node Particular Functions
4519 @subsection Particular Function Checks
4520 @cindex Function, checking
4522 These macros check for particular C functions---whether they exist, and
4523 in some cases how they respond when given certain arguments.
4525 @anchor{AC_FUNC_ALLOCA}
4526 @defmac AC_FUNC_ALLOCA
4527 @acindex{FUNC_ALLOCA}
4528 @cvindex C_ALLOCA
4529 @cvindex HAVE_ALLOCA_H
4530 @ovindex ALLOCA
4531 @c @fuindex alloca
4532 @prindex @code{alloca}
4533 @hdrindex{alloca.h}
4534 Check how to get @code{alloca}.  Tries to get a builtin version by
4535 checking for @file{alloca.h} or the predefined C preprocessor macros
4536 @code{__GNUC__} and @code{_AIX}.  If this macro finds @file{alloca.h},
4537 it defines @code{HAVE_ALLOCA_H}.
4539 If those attempts fail, it looks for the function in the standard C
4540 library.  If any of those methods succeed, it defines
4541 @code{HAVE_ALLOCA}.  Otherwise, it sets the output variable
4542 @code{ALLOCA} to @samp{$@{LIBOBJDIR@}alloca.o} and defines
4543 @code{C_ALLOCA} (so programs can periodically call @samp{alloca (0)} to
4544 garbage collect).  This variable is separate from @code{LIBOBJS} so
4545 multiple programs can share the value of @code{ALLOCA} without needing
4546 to create an actual library, in case only some of them use the code in
4547 @code{LIBOBJS}.  The @samp{$@{LIBOBJDIR@}} prefix serves the same
4548 purpose as in @code{LIBOBJS} (@pxref{AC_LIBOBJ vs LIBOBJS}).
4550 This macro does not try to get @code{alloca} from the System V R3
4551 @file{libPW} or the System V R4 @file{libucb} because those libraries
4552 contain some incompatible functions that cause trouble.  Some versions
4553 do not even contain @code{alloca} or contain a buggy version.  If you
4554 still want to use their @code{alloca}, use @code{ar} to extract
4555 @file{alloca.o} from them instead of compiling @file{alloca.c}.
4557 Source files that use @code{alloca} should start with a piece of code
4558 like the following, to declare it properly.
4560 @example
4561 @group
4562 #ifdef HAVE_ALLOCA_H
4563 # include <alloca.h>
4564 #elif defined __GNUC__
4565 # define alloca __builtin_alloca
4566 #elif defined _AIX
4567 # define alloca __alloca
4568 #elif defined _MSC_VER
4569 # include <malloc.h>
4570 # define alloca _alloca
4571 #else
4572 # include <stddef.h>
4573 # ifdef  __cplusplus
4574 extern "C"
4575 # endif
4576 void *alloca (size_t);
4577 #endif
4578 @end group
4579 @end example
4580 @end defmac
4582 @defmac AC_FUNC_CHOWN
4583 @acindex{FUNC_CHOWN}
4584 @cvindex HAVE_CHOWN
4585 @c @fuindex chown
4586 @prindex @code{chown}
4587 If the @code{chown} function is available and works (in particular, it
4588 should accept @option{-1} for @code{uid} and @code{gid}), define
4589 @code{HAVE_CHOWN}.
4590 @end defmac
4592 @anchor{AC_FUNC_CLOSEDIR_VOID}
4593 @defmac AC_FUNC_CLOSEDIR_VOID
4594 @acindex{FUNC_CLOSEDIR_VOID}
4595 @cvindex CLOSEDIR_VOID
4596 @c @fuindex closedir
4597 @prindex @code{closedir}
4598 If the @code{closedir} function does not return a meaningful value,
4599 define @code{CLOSEDIR_VOID}.  Otherwise, callers ought to check its
4600 return value for an error indicator.
4602 Currently this test is implemented by running a test program.  When
4603 cross compiling the pessimistic assumption that @code{closedir} does not
4604 return a meaningful value is made.
4606 This macro is obsolescent, as @code{closedir} returns a meaningful value
4607 on current systems.  New programs need not use this macro.
4608 @end defmac
4610 @defmac AC_FUNC_ERROR_AT_LINE
4611 @acindex{FUNC_ERROR_AT_LINE}
4612 @c @fuindex error_at_line
4613 @prindex @code{error_at_line}
4614 If the @code{error_at_line} function is not found, require an
4615 @code{AC_LIBOBJ} replacement of @samp{error}.
4616 @end defmac
4618 @defmac AC_FUNC_FNMATCH
4619 @acindex{FUNC_FNMATCH}
4620 @c @fuindex fnmatch
4621 @prindex @code{fnmatch}
4622 If the @code{fnmatch} function conforms to Posix, define
4623 @code{HAVE_FNMATCH}.  Detect common implementation bugs, for example,
4624 the bugs in Solaris 2.4.
4626 Unlike the other specific
4627 @code{AC_FUNC} macros, @code{AC_FUNC_FNMATCH} does not replace a
4628 broken/missing @code{fnmatch}.  This is for historical reasons.
4629 See @code{AC_REPLACE_FNMATCH} below.
4631 This macro is obsolescent.  New programs should use Gnulib's
4632 @code{fnmatch-posix} module.  @xref{Gnulib}.
4633 @end defmac
4635 @defmac AC_FUNC_FNMATCH_GNU
4636 @acindex{FUNC_FNMATCH_GNU}
4637 @c @fuindex fnmatch
4638 @prindex @code{fnmatch}
4639 Behave like @code{AC_REPLACE_FNMATCH} (@emph{replace}) but also test
4640 whether @code{fnmatch} supports @acronym{GNU} extensions.  Detect common
4641 implementation bugs, for example, the bugs in the @acronym{GNU} C
4642 Library 2.1.
4644 This macro is obsolescent.  New programs should use Gnulib's
4645 @code{fnmatch-gnu} module.  @xref{Gnulib}.
4646 @end defmac
4648 @anchor{AC_FUNC_FORK}
4649 @defmac AC_FUNC_FORK
4650 @acindex{FUNC_FORK}
4651 @cvindex HAVE_VFORK_H
4652 @cvindex HAVE_WORKING_FORK
4653 @cvindex HAVE_WORKING_VFORK
4654 @cvindex vfork
4655 @c @fuindex fork
4656 @prindex @code{fork}
4657 @c @fuindex vfork
4658 @prindex @code{vfork}
4659 @hdrindex{vfork.h}
4660 This macro checks for the @code{fork} and @code{vfork} functions.  If a
4661 working @code{fork} is found, define @code{HAVE_WORKING_FORK}.  This macro
4662 checks whether @code{fork} is just a stub by trying to run it.
4664 If @file{vfork.h} is found, define @code{HAVE_VFORK_H}.  If a working
4665 @code{vfork} is found, define @code{HAVE_WORKING_VFORK}.  Otherwise,
4666 define @code{vfork} to be @code{fork} for backward compatibility with
4667 previous versions of @command{autoconf}.  This macro checks for several known
4668 errors in implementations of @code{vfork} and considers the system to not
4669 have a working @code{vfork} if it detects any of them.  It is not considered
4670 to be an implementation error if a child's invocation of @code{signal}
4671 modifies the parent's signal handler, since child processes rarely change
4672 their signal handlers.
4674 Since this macro defines @code{vfork} only for backward compatibility with
4675 previous versions of @command{autoconf} you're encouraged to define it
4676 yourself in new code:
4677 @example
4678 @group
4679 #ifndef HAVE_WORKING_VFORK
4680 # define vfork fork
4681 #endif
4682 @end group
4683 @end example
4684 @end defmac
4686 @defmac AC_FUNC_FSEEKO
4687 @acindex{FUNC_FSEEKO}
4688 @cvindex _LARGEFILE_SOURCE
4689 @cvindex HAVE_FSEEKO
4690 @c @fuindex fseeko
4691 @prindex @code{fseeko}
4692 If the @code{fseeko} function is available, define @code{HAVE_FSEEKO}.
4693 Define @code{_LARGEFILE_SOURCE} if necessary to make the prototype
4694 visible on some systems (e.g., glibc 2.2).  Otherwise linkage problems
4695 may occur when compiling with @code{AC_SYS_LARGEFILE} on
4696 largefile-sensitive systems where @code{off_t} does not default to a
4697 64bit entity.
4698 @end defmac
4700 @defmac AC_FUNC_GETGROUPS
4701 @acindex{FUNC_GETGROUPS}
4702 @cvindex HAVE_GETGROUPS
4703 @ovindex GETGROUPS_LIBS
4704 @c @fuindex getgroups
4705 @prindex @code{getgroups}
4706 If the @code{getgroups} function is available and works (unlike on
4707 Ultrix 4.3, where @samp{getgroups (0, 0)} always fails), define
4708 @code{HAVE_GETGROUPS}.  Set @code{GETGROUPS_LIBS} to any libraries
4709 needed to get that function.  This macro runs @code{AC_TYPE_GETGROUPS}.
4710 @end defmac
4712 @anchor{AC_FUNC_GETLOADAVG}
4713 @defmac AC_FUNC_GETLOADAVG
4714 @acindex{FUNC_GETLOADAVG}
4715 @cvindex SVR4
4716 @cvindex DGUX
4717 @cvindex UMAX
4718 @cvindex UMAX4_3
4719 @cvindex HAVE_NLIST_H
4720 @cvindex NLIST_NAME_UNION
4721 @cvindex GETLOADAVG_PRIVILEGED
4722 @cvindex NEED_SETGID
4723 @cvindex C_GETLOADAVG
4724 @ovindex LIBOBJS
4725 @ovindex NEED_SETGID
4726 @ovindex KMEM_GROUP
4727 @ovindex GETLOADAVG_LIBS
4728 @c @fuindex getloadavg
4729 @prindex @code{getloadavg}
4730 Check how to get the system load averages.  To perform its tests
4731 properly, this macro needs the file @file{getloadavg.c}; therefore, be
4732 sure to set the @code{AC_LIBOBJ} replacement directory properly (see
4733 @ref{Generic Functions}, @code{AC_CONFIG_LIBOBJ_DIR}).
4735 If the system has the @code{getloadavg} function, define
4736 @code{HAVE_GETLOADAVG}, and set @code{GETLOADAVG_LIBS} to any libraries
4737 necessary to get that function.  Also add @code{GETLOADAVG_LIBS} to
4738 @code{LIBS}.  Otherwise, require an @code{AC_LIBOBJ} replacement for
4739 @samp{getloadavg} with source code in @file{@var{dir}/getloadavg.c}, and
4740 possibly define several other C preprocessor macros and output
4741 variables:
4743 @enumerate
4744 @item
4745 Define @code{C_GETLOADAVG}.
4747 @item
4748 Define @code{SVR4}, @code{DGUX}, @code{UMAX}, or @code{UMAX4_3} if on
4749 those systems.
4751 @item
4752 @hdrindex{nlist.h}
4753 If @file{nlist.h} is found, define @code{HAVE_NLIST_H}.
4755 @item
4756 If @samp{struct nlist} has an @samp{n_un.n_name} member, define
4757 @code{HAVE_STRUCT_NLIST_N_UN_N_NAME}.  The obsolete symbol
4758 @code{NLIST_NAME_UNION} is still defined, but do not depend upon it.
4760 @item
4761 Programs may need to be installed set-group-ID (or set-user-ID) for
4762 @code{getloadavg} to work.  In this case, define
4763 @code{GETLOADAVG_PRIVILEGED}, set the output variable @code{NEED_SETGID}
4764 to @samp{true} (and otherwise to @samp{false}), and set
4765 @code{KMEM_GROUP} to the name of the group that should own the installed
4766 program.
4767 @end enumerate
4769 The @code{AC_FUNC_GETLOADAVG} macro is obsolescent.  New programs should
4770 use Gnulib's @code{getloadavg} module.  @xref{Gnulib}.
4771 @end defmac
4773 @anchor{AC_FUNC_GETMNTENT}
4774 @defmac AC_FUNC_GETMNTENT
4775 @acindex{FUNC_GETMNTENT}
4776 @cvindex HAVE_GETMNTENT
4777 @c @fuindex getmntent
4778 @prindex @code{getmntent}
4779 Check for @code{getmntent} in the standard C library, and then in the
4780 @file{sun}, @file{seq}, and @file{gen} libraries, for @sc{unicos},
4781 @sc{irix} 4, @sc{ptx}, and UnixWare, respectively.  Then, if
4782 @code{getmntent} is available, define @code{HAVE_GETMNTENT}.
4783 @end defmac
4785 @defmac AC_FUNC_GETPGRP
4786 @acindex{FUNC_GETPGRP}
4787 @cvindex GETPGRP_VOID
4788 @c @fuindex getpgid
4789 @c @fuindex getpgrp
4790 @prindex @code{getpgid}
4791 @prindex @code{getpgrp}
4792 Define @code{GETPGRP_VOID} if it is an error to pass 0 to
4793 @code{getpgrp}; this is the Posix behavior.  On older @acronym{BSD}
4794 systems, you must pass 0 to @code{getpgrp}, as it takes an argument and
4795 behaves like Posix's @code{getpgid}.
4797 @example
4798 #ifdef GETPGRP_VOID
4799   pid = getpgrp ();
4800 #else
4801   pid = getpgrp (0);
4802 #endif
4803 @end example
4805 This macro does not check whether
4806 @code{getpgrp} exists at all; if you need to work in that situation,
4807 first call @code{AC_CHECK_FUNC} for @code{getpgrp}.
4809 This macro is obsolescent, as current systems have a @code{getpgrp}
4810 whose signature conforms to Posix.  New programs need not use this macro.
4811 @end defmac
4813 @defmac AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
4814 @acindex{FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK}
4815 @cvindex LSTAT_FOLLOWS_SLASHED_SYMLINK
4816 @c @fuindex lstat
4817 @prindex @code{lstat}
4818 If @file{link} is a symbolic link, then @code{lstat} should treat
4819 @file{link/} the same as @file{link/.}.  However, many older
4820 @code{lstat} implementations incorrectly ignore trailing slashes.
4822 It is safe to assume that if @code{lstat} incorrectly ignores
4823 trailing slashes, then other symbolic-link-aware functions like
4824 @code{unlink} also incorrectly ignore trailing slashes.
4826 If @code{lstat} behaves properly, define
4827 @code{LSTAT_FOLLOWS_SLASHED_SYMLINK}, otherwise require an
4828 @code{AC_LIBOBJ} replacement of @code{lstat}.
4829 @end defmac
4831 @defmac AC_FUNC_MALLOC
4832 @acindex{FUNC_MALLOC}
4833 @cvindex HAVE_MALLOC
4834 @cvindex malloc
4835 @c @fuindex malloc
4836 @prindex @code{malloc}
4837 If the @code{malloc} function is compatible with the @acronym{GNU} C
4838 library @code{malloc} (i.e., @samp{malloc (0)} returns a valid
4839 pointer), define @code{HAVE_MALLOC} to 1.  Otherwise define
4840 @code{HAVE_MALLOC} to 0, ask for an @code{AC_LIBOBJ} replacement for
4841 @samp{malloc}, and define @code{malloc} to @code{rpl_malloc} so that the
4842 native @code{malloc} is not used in the main project.
4844 Typically, the replacement file @file{malloc.c} should look like (note
4845 the @samp{#undef malloc}):
4847 @verbatim
4848 #include <config.h>
4849 #undef malloc
4851 #include <sys/types.h>
4853 void *malloc ();
4855 /* Allocate an N-byte block of memory from the heap.
4856    If N is zero, allocate a 1-byte block.  */
4858 void *
4859 rpl_malloc (size_t n)
4861   if (n == 0)
4862     n = 1;
4863   return malloc (n);
4865 @end verbatim
4866 @end defmac
4868 @defmac AC_FUNC_MEMCMP
4869 @acindex{FUNC_MEMCMP}
4870 @ovindex LIBOBJS
4871 @c @fuindex memcmp
4872 @prindex @code{memcmp}
4873 If the @code{memcmp} function is not available, or does not work on
4874 8-bit data (like the one on SunOS 4.1.3), or fails when comparing 16
4875 bytes or more and with at least one buffer not starting on a 4-byte
4876 boundary (such as the one on NeXT x86 OpenStep), require an
4877 @code{AC_LIBOBJ} replacement for @samp{memcmp}.
4879 This macro is obsolescent, as current systems have a working
4880 @code{memcmp}.  New programs need not use this macro.
4881 @end defmac
4883 @defmac AC_FUNC_MBRTOWC
4884 @acindex{FUNC_MBRTOWC}
4885 @cvindex HAVE_MBRTOWC
4886 @c @fuindex mbrtowc
4887 @prindex @code{mbrtowc}
4888 Define @code{HAVE_MBRTOWC} to 1 if the function @code{mbrtowc} and the
4889 type @code{mbstate_t} are properly declared.
4890 @end defmac
4892 @defmac AC_FUNC_MKTIME
4893 @acindex{FUNC_MKTIME}
4894 @ovindex LIBOBJS
4895 @c @fuindex mktime
4896 @prindex @code{mktime}
4897 If the @code{mktime} function is not available, or does not work
4898 correctly, require an @code{AC_LIBOBJ} replacement for @samp{mktime}.
4899 For the purposes of this test, @code{mktime} should conform to the
4900 Posix standard and should be the inverse of
4901 @code{localtime}.
4902 @end defmac
4904 @anchor{AC_FUNC_MMAP}
4905 @defmac AC_FUNC_MMAP
4906 @acindex{FUNC_MMAP}
4907 @cvindex HAVE_MMAP
4908 @c @fuindex mmap
4909 @prindex @code{mmap}
4910 If the @code{mmap} function exists and works correctly, define
4911 @code{HAVE_MMAP}.  This checks only private fixed mapping of already-mapped
4912 memory.
4913 @end defmac
4915 @defmac AC_FUNC_OBSTACK
4916 @acindex{FUNC_OBSTACK}
4917 @cvindex HAVE_OBSTACK
4918 @cindex obstack
4919 If the obstacks are found, define @code{HAVE_OBSTACK}, else require an
4920 @code{AC_LIBOBJ} replacement for @samp{obstack}.
4921 @end defmac
4923 @defmac AC_FUNC_REALLOC
4924 @acindex{FUNC_REALLOC}
4925 @cvindex HAVE_REALLOC
4926 @cvindex realloc
4927 @c @fuindex realloc
4928 @prindex @code{realloc}
4929 If the @code{realloc} function is compatible with the @acronym{GNU} C
4930 library @code{realloc} (i.e., @samp{realloc (NULL, 0)} returns a
4931 valid pointer), define @code{HAVE_REALLOC} to 1.  Otherwise define
4932 @code{HAVE_REALLOC} to 0, ask for an @code{AC_LIBOBJ} replacement for
4933 @samp{realloc}, and define @code{realloc} to @code{rpl_realloc} so that
4934 the native @code{realloc} is not used in the main project.  See
4935 @code{AC_FUNC_MALLOC} for details.
4936 @end defmac
4938 @defmac AC_FUNC_SELECT_ARGTYPES
4939 @acindex{FUNC_SELECT_ARGTYPES}
4940 @cvindex SELECT_TYPE_ARG1
4941 @cvindex SELECT_TYPE_ARG234
4942 @cvindex SELECT_TYPE_ARG5
4943 @c @fuindex select
4944 @prindex @code{select}
4945 Determines the correct type to be passed for each of the
4946 @code{select} function's arguments, and defines those types
4947 in @code{SELECT_TYPE_ARG1}, @code{SELECT_TYPE_ARG234}, and
4948 @code{SELECT_TYPE_ARG5} respectively.  @code{SELECT_TYPE_ARG1} defaults
4949 to @samp{int}, @code{SELECT_TYPE_ARG234} defaults to @samp{int *},
4950 and @code{SELECT_TYPE_ARG5} defaults to @samp{struct timeval *}.
4952 This macro is obsolescent, as current systems have a @code{select} whose
4953 signature conforms to Posix.  New programs need not use this macro.
4954 @end defmac
4956 @defmac AC_FUNC_SETPGRP
4957 @acindex{FUNC_SETPGRP}
4958 @cvindex SETPGRP_VOID
4959 @c @fuindex setpgrp
4960 @prindex @code{setpgrp}
4961 If @code{setpgrp} takes no argument (the Posix version), define
4962 @code{SETPGRP_VOID}.  Otherwise, it is the @acronym{BSD} version, which takes
4963 two process IDs as arguments.  This macro does not check whether
4964 @code{setpgrp} exists at all; if you need to work in that situation,
4965 first call @code{AC_CHECK_FUNC} for @code{setpgrp}.
4967 This macro is obsolescent, as current systems have a @code{setpgrp}
4968 whose signature conforms to Posix.  New programs need not use this macro.
4969 @end defmac
4971 @defmac AC_FUNC_STAT
4972 @defmacx AC_FUNC_LSTAT
4973 @acindex{FUNC_STAT}
4974 @acindex{FUNC_LSTAT}
4975 @cvindex HAVE_STAT_EMPTY_STRING_BUG
4976 @cvindex HAVE_LSTAT_EMPTY_STRING_BUG
4977 @c @fuindex stat
4978 @prindex @code{stat}
4979 @c @fuindex lstat
4980 @prindex @code{lstat}
4981 Determine whether @code{stat} or @code{lstat} have the bug that it
4982 succeeds when given the zero-length file name as argument.  The @code{stat}
4983 and @code{lstat} from SunOS 4.1.4 and the Hurd (as of 1998-11-01) do
4984 this.
4986 If it does, then define @code{HAVE_STAT_EMPTY_STRING_BUG} (or
4987 @code{HAVE_LSTAT_EMPTY_STRING_BUG}) and ask for an @code{AC_LIBOBJ}
4988 replacement of it.
4990 These macros are obsolescent, as no current systems have the bug.
4991 New programs need not use these macros.
4992 @end defmac
4994 @anchor{AC_FUNC_STRCOLL}
4995 @defmac AC_FUNC_STRCOLL
4996 @acindex{FUNC_STRCOLL}
4997 @cvindex HAVE_STRCOLL
4998 @c @fuindex strcoll
4999 @prindex @code{strcoll}
5000 If the @code{strcoll} function exists and works correctly, define
5001 @code{HAVE_STRCOLL}.  This does a bit more than
5002 @samp{AC_CHECK_FUNCS(strcoll)}, because some systems have incorrect
5003 definitions of @code{strcoll} that should not be used.
5004 @end defmac
5006 @defmac AC_FUNC_STRERROR_R
5007 @acindex{FUNC_STRERROR_R}
5008 @cvindex HAVE_STRERROR_R
5009 @cvindex HAVE_DECL_STRERROR_R
5010 @cvindex STRERROR_R_CHAR_P
5011 @c @fuindex strerror_r
5012 @prindex @code{strerror_r}
5013 If @code{strerror_r} is available, define @code{HAVE_STRERROR_R}, and if
5014 it is declared, define @code{HAVE_DECL_STRERROR_R}.  If it returns a
5015 @code{char *} message, define @code{STRERROR_R_CHAR_P}; otherwise it
5016 returns an @code{int} error number.  The Thread-Safe Functions option of
5017 Posix requires @code{strerror_r} to return @code{int}, but
5018 many systems (including, for example, version 2.2.4 of the @acronym{GNU} C
5019 Library) return a @code{char *} value that is not necessarily equal to
5020 the buffer argument.
5021 @end defmac
5023 @anchor{AC_FUNC_STRFTIME}
5024 @defmac AC_FUNC_STRFTIME
5025 @acindex{FUNC_STRFTIME}
5026 @cvindex HAVE_STRFTIME
5027 @c @fuindex strftime
5028 @prindex @code{strftime}
5029 Check for @code{strftime} in the @file{intl} library, for SCO Unix.
5030 Then, if @code{strftime} is available, define @code{HAVE_STRFTIME}.
5032 This macro is obsolescent, as no current systems require the @file{intl}
5033 library for @code{strftime}.  New programs need not use this macro.
5034 @end defmac
5036 @defmac AC_FUNC_STRTOD
5037 @acindex{FUNC_STRTOD}
5038 @ovindex POW_LIB
5039 @c @fuindex strtod
5040 @prindex @code{strtod}
5041 If the @code{strtod} function does not exist or doesn't work correctly,
5042 ask for an @code{AC_LIBOBJ} replacement of @samp{strtod}.  In this case,
5043 because @file{strtod.c} is likely to need @samp{pow}, set the output
5044 variable @code{POW_LIB} to the extra library needed.
5045 @end defmac
5047 @defmac AC_FUNC_STRTOLD
5048 @acindex{FUNC_STRTOLD}
5049 @cvindex HAVE_STRTOLD
5050 @prindex @code{strtold}
5051 If the @code{strtold} function exists and conforms to C99, define
5052 @code{HAVE_STRTOLD}.
5053 @end defmac
5055 @defmac AC_FUNC_STRNLEN
5056 @acindex{FUNC_STRNLEN}
5057 @cvindex HAVE_STRNLEN
5058 @c @fuindex strnlen
5059 @prindex @code{strnlen}
5060 If the @code{strnlen} function is not available, or is buggy (like the one
5061 from @acronym{AIX} 4.3), require an @code{AC_LIBOBJ} replacement for it.
5062 @end defmac
5064 @anchor{AC_FUNC_UTIME_NULL}
5065 @defmac AC_FUNC_UTIME_NULL
5066 @acindex{FUNC_UTIME_NULL}
5067 @cvindex HAVE_UTIME_NULL
5068 @c @fuindex utime
5069 @prindex @code{utime}
5070 If @samp{utime (@var{file}, NULL)} sets @var{file}'s timestamp to
5071 the present, define @code{HAVE_UTIME_NULL}.
5073 This macro is obsolescent, as all current systems have a @code{utime}
5074 that behaves this way.  New programs need not use this macro.
5075 @end defmac
5077 @anchor{AC_FUNC_VPRINTF}
5078 @defmac AC_FUNC_VPRINTF
5079 @acindex{FUNC_VPRINTF}
5080 @cvindex HAVE_VPRINTF
5081 @cvindex HAVE_DOPRNT
5082 @c @fuindex vprintf
5083 @prindex @code{vprintf}
5084 If @code{vprintf} is found, define @code{HAVE_VPRINTF}.  Otherwise, if
5085 @code{_doprnt} is found, define @code{HAVE_DOPRNT}.  (If @code{vprintf}
5086 is available, you may assume that @code{vfprintf} and @code{vsprintf}
5087 are also available.)
5089 This macro is obsolescent, as all current systems have @code{vprintf}.
5090 New programs need not use this macro.
5091 @end defmac
5093 @defmac AC_REPLACE_FNMATCH
5094 @acindex{REPLACE_FNMATCH}
5095 @c @fuindex fnmatch
5096 @prindex @code{fnmatch}
5097 @hdrindex{fnmatch.h}
5098 If the @code{fnmatch} function does not conform to Posix (see
5099 @code{AC_FUNC_FNMATCH}), ask for its @code{AC_LIBOBJ} replacement.
5101 The files @file{fnmatch.c}, @file{fnmatch_loop.c}, and @file{fnmatch_.h}
5102 in the @code{AC_LIBOBJ} replacement directory are assumed to contain a
5103 copy of the source code of @acronym{GNU} @code{fnmatch}.  If necessary,
5104 this source code is compiled as an @code{AC_LIBOBJ} replacement, and the
5105 @file{fnmatch_.h} file is linked to @file{fnmatch.h} so that it can be
5106 included in place of the system @code{<fnmatch.h>}.
5108 This macro is obsolescent, as it assumes the use of particular source
5109 files.  New programs should use Gnulib's @code{fnmatch-posix} module,
5110 which provides this macro along with the source files.  @xref{Gnulib}.
5111 @end defmac
5115 @node Generic Functions
5116 @subsection Generic Function Checks
5118 These macros are used to find functions not covered by the ``particular''
5119 test macros.  If the functions might be in libraries other than the
5120 default C library, first call @code{AC_CHECK_LIB} for those libraries.
5121 If you need to check the behavior of a function as well as find out
5122 whether it is present, you have to write your own test for
5123 it (@pxref{Writing Tests}).
5125 @anchor{AC_CHECK_FUNC}
5126 @defmac AC_CHECK_FUNC (@var{function}, @ovar{action-if-found}, @
5127   @ovar{action-if-not-found})
5128 @acindex{CHECK_FUNC}
5129 If C function @var{function} is available, run shell commands
5130 @var{action-if-found}, otherwise @var{action-if-not-found}.  If you just
5131 want to define a symbol if the function is available, consider using
5132 @code{AC_CHECK_FUNCS} instead.  This macro checks for functions with C
5133 linkage even when @code{AC_LANG(C++)} has been called, since C is more
5134 standardized than C++.  (@pxref{Language Choice}, for more information
5135 about selecting the language for checks.)
5136 @end defmac
5138 @anchor{AC_CHECK_FUNCS}
5139 @defmac AC_CHECK_FUNCS (@var{function}@dots{}, @ovar{action-if-found}, @
5140   @ovar{action-if-not-found})
5141 @acindex{CHECK_FUNCS}
5142 @cvindex HAVE_@var{function}
5143 For each @var{function} enumerated in the blank-or-newline-separated argument
5144 list, define @code{HAVE_@var{function}} (in all capitals) if it is available.
5145 If @var{action-if-found} is given, it is additional shell code to
5146 execute when one of the functions is found.  You can give it a value of
5147 @samp{break} to break out of the loop on the first match.  If
5148 @var{action-if-not-found} is given, it is executed when one of the
5149 functions is not found.
5150 @end defmac
5152 @defmac AC_CHECK_FUNCS_ONCE (@var{function}@dots{})
5153 @acindex{CHECK_FUNCS_ONCE}
5154 @cvindex HAVE_@var{function}
5155 For each @var{function} enumerated in the blank-or-newline-separated argument
5156 list, define @code{HAVE_@var{function}} (in all capitals) if it is available.
5157 This is a once-only variant of @code{AC_CHECK_FUNCS}.  It generates the
5158 checking code at most once, so that @command{configure} is smaller and
5159 faster; but the checks cannot be conditionalized and are always done once,
5160 early during the @command{configure} run.
5161 @end defmac
5163 @sp 1
5165 Autoconf follows a philosophy that was formed over the years by those
5166 who have struggled for portability: isolate the portability issues in
5167 specific files, and then program as if you were in a Posix
5168 environment.  Some functions may be missing or unfixable, and your
5169 package must be ready to replace them.
5171 Suitable replacements for many such problem functions are available from
5172 Gnulib (@pxref{Gnulib}).
5174 @defmac AC_LIBOBJ (@var{function})
5175 @acindex{LIBOBJ}
5176 @ovindex LIBOBJS
5177 Specify that @samp{@var{function}.c} must be included in the executables
5178 to replace a missing or broken implementation of @var{function}.
5180 Technically, it adds @samp{@var{function}.$ac_objext} to the output
5181 variable @code{LIBOBJS} if it is not already in, and calls
5182 @code{AC_LIBSOURCE} for @samp{@var{function}.c}.  You should not
5183 directly change @code{LIBOBJS}, since this is not traceable.
5184 @end defmac
5186 @defmac AC_LIBSOURCE (@var{file})
5187 @acindex{LIBSOURCE}
5188 Specify that @var{file} might be needed to compile the project.  If you
5189 need to know what files might be needed by a @file{configure.ac}, you
5190 should trace @code{AC_LIBSOURCE}.  @var{file} must be a literal.
5192 This macro is called automatically from @code{AC_LIBOBJ}, but you must
5193 call it explicitly if you pass a shell variable to @code{AC_LIBOBJ}.  In
5194 that case, since shell variables cannot be traced statically, you must
5195 pass to @code{AC_LIBSOURCE} any possible files that the shell variable
5196 might cause @code{AC_LIBOBJ} to need.  For example, if you want to pass
5197 a variable @code{$foo_or_bar} to @code{AC_LIBOBJ} that holds either
5198 @code{"foo"} or @code{"bar"}, you should do:
5200 @example
5201 AC_LIBSOURCE([foo.c])
5202 AC_LIBSOURCE([bar.c])
5203 AC_LIBOBJ([$foo_or_bar])
5204 @end example
5206 @noindent
5207 There is usually a way to avoid this, however, and you are encouraged to
5208 simply call @code{AC_LIBOBJ} with literal arguments.
5210 Note that this macro replaces the obsolete @code{AC_LIBOBJ_DECL}, with
5211 slightly different semantics: the old macro took the function name,
5212 e.g., @code{foo}, as its argument rather than the file name.
5213 @end defmac
5215 @defmac AC_LIBSOURCES (@var{files})
5216 @acindex{LIBSOURCES}
5217 Like @code{AC_LIBSOURCE}, but accepts one or more @var{files} in a
5218 comma-separated M4 list.  Thus, the above example might be rewritten:
5220 @example
5221 AC_LIBSOURCES([foo.c, bar.c])
5222 AC_LIBOBJ([$foo_or_bar])
5223 @end example
5224 @end defmac
5226 @defmac AC_CONFIG_LIBOBJ_DIR (@var{directory})
5227 @acindex{CONFIG_LIBOBJ_DIR}
5228 Specify that @code{AC_LIBOBJ} replacement files are to be found in
5229 @var{directory}, a name relative to the top level of the
5230 source tree.  The replacement directory defaults to @file{.}, the top
5231 level directory, and the most typical value is @file{lib}, corresponding
5232 to @samp{AC_CONFIG_LIBOBJ_DIR([lib])}.
5234 @command{configure} might need to know the replacement directory for the
5235 following reasons: (i) some checks use the replacement files, (ii) some
5236 macros bypass broken system headers by installing links to the
5237 replacement headers (iii) when used in conjunction with Automake,
5238 within each makefile, @var{directory} is used as a relative path
5239 from @code{$(top_srcdir)} to each object named in @code{LIBOBJS} and
5240 @code{LTLIBOBJS}, etc.
5241 @end defmac
5243 @sp 1
5245 It is common to merely check for the existence of a function, and ask
5246 for its @code{AC_LIBOBJ} replacement if missing.  The following macro is
5247 a convenient shorthand.
5249 @defmac AC_REPLACE_FUNCS (@var{function}@dots{})
5250 @acindex{REPLACE_FUNCS}
5251 @cvindex HAVE_@var{function}
5252 @ovindex LIBOBJS
5253 Like @code{AC_CHECK_FUNCS}, but uses @samp{AC_LIBOBJ(@var{function})} as
5254 @var{action-if-not-found}.  You can declare your replacement function by
5255 enclosing the prototype in @samp{#ifndef HAVE_@var{function}}.  If the
5256 system has the function, it probably declares it in a header file you
5257 should be including, so you shouldn't redeclare it lest your declaration
5258 conflict.
5259 @end defmac
5261 @node Header Files
5262 @section Header Files
5263 @cindex Header, checking
5265 The following macros check for the presence of certain C header files.
5266 If there is no macro specifically defined to check for a header file you need,
5267 and you don't need to check for any special properties of
5268 it, then you can use one of the general header-file check macros.
5270 @menu
5271 * Header Portability::          Collected knowledge on common headers
5272 * Particular Headers::          Special handling to find certain headers
5273 * Generic Headers::             How to find other headers
5274 @end menu
5276 @node Header Portability
5277 @subsection Portability of Headers
5278 @cindex Portability of headers
5279 @cindex Header portability
5281 This section tries to collect knowledge about common headers, and the
5282 problems they cause.  By definition, this list always requires
5283 additions.  Please help us keeping it as complete as possible.
5285 @table @asis
5287 @item @file{limits.h}
5288 C99 says that @file{limits.h} defines @code{LLONG_MIN},
5289 @code{LLONG_MAX}, and @code{ULLONG_MAX}, but many almost-C99
5290 environments (e.g., default @acronym{GCC} 4.0.2 + glibc 2.4) do not
5291 define them.
5293 @item @file{inttypes.h} vs.@: @file{stdint.h}
5294 @hdrindex{inttypes.h}
5295 @hdrindex{stdint.h}
5296 The C99 standard says that @file{inttypes.h} includes
5297 @file{stdint.h}, so there's no need to include @file{stdint.h}
5298 separately in a standard environment.  Some implementations have
5299 @file{inttypes.h} but not @file{stdint.h} (e.g., Solaris 7), but we don't
5300 know of any implementation that has @file{stdint.h} but not
5301 @file{inttypes.h}.
5303 @item @file{linux/irda.h}
5304 @hdrindex{linux/irda.h}
5305 It requires @file{linux/types.h} and @file{sys/socket.h}.
5307 @item @file{linux/random.h}
5308 @hdrindex{linux/random.h}
5309 It requires @file{linux/types.h}.
5311 @item @file{net/if.h}
5312 @hdrindex{net/if.h}
5313 On Darwin, this file requires that @file{sys/socket.h} be included
5314 beforehand.  One should run:
5316 @example
5317 AC_CHECK_HEADERS([sys/socket.h])
5318 AC_CHECK_HEADERS([net/if.h], [], [],
5319 [#include <stdio.h>
5320 #ifdef STDC_HEADERS
5321 # include <stdlib.h>
5322 # include <stddef.h>
5323 #else
5324 # ifdef HAVE_STDLIB_H
5325 #  include <stdlib.h>
5326 # endif
5327 #endif
5328 #ifdef HAVE_SYS_SOCKET_H
5329 # include <sys/socket.h>
5330 #endif
5332 @end example
5334 @item @file{netinet/if_ether.h}
5335 @hdrindex{netinet/if_ether.h}
5336 On Darwin, this file requires that @file{stdio.h} and
5337 @file{sys/socket.h} be included beforehand.  One should run:
5339 @example
5340 AC_CHECK_HEADERS([sys/socket.h])
5341 AC_CHECK_HEADERS([netinet/if_ether.h], [], [],
5342 [#include <stdio.h>
5343 #ifdef STDC_HEADERS
5344 # include <stdlib.h>
5345 # include <stddef.h>
5346 #else
5347 # ifdef HAVE_STDLIB_H
5348 #  include <stdlib.h>
5349 # endif
5350 #endif
5351 #ifdef HAVE_SYS_SOCKET_H
5352 # include <sys/socket.h>
5353 #endif
5355 @end example
5357 @item @file{stdint.h}
5358 See above, item @file{inttypes.h} vs.@: @file{stdint.h}.
5360 @item @file{stdlib.h}
5361 @hdrindex{stdlib.h}
5362 On many systems (e.g., Darwin), @file{stdio.h} is a prerequisite.
5364 @item @file{sys/mount.h}
5365 @hdrindex{sys/mount.h}
5366 On Free@acronym{BSD} 4.8 on ia32 and using gcc version 2.95.4,
5367 @file{sys/params.h} is a prerequisite.
5369 @item @file{sys/ptem.h}
5370 @hdrindex{sys/ptem.h}
5371 On Solaris 8, @file{sys/stream.h} is a prerequisite.
5373 @item @file{sys/socket.h}
5374 @hdrindex{sys/socket.h}
5375 On Darwin, @file{stdlib.h} is a prerequisite.
5377 @item @file{sys/ucred.h}
5378 @hdrindex{sys/ucred.h}
5379 On Tru64 5.1, @file{sys/types.h} is a prerequisite.
5381 @item @file{X11/extensions/scrnsaver.h}
5382 @hdrindex{X11/extensions/scrnsaver.h}
5383 Using XFree86, this header requires @file{X11/Xlib.h}, which is probably
5384 so required that you might not even consider looking for it.
5386 @example
5387 AC_CHECK_HEADERS([X11/extensions/scrnsaver.h], [], [],
5388 [[#include <X11/Xlib.h>
5390 @end example
5391 @end table
5394 @node Particular Headers
5395 @subsection Particular Header Checks
5397 These macros check for particular system header files---whether they
5398 exist, and in some cases whether they declare certain symbols.
5400 @defmac AC_HEADER_ASSERT
5401 @acindex{HEADER_ASSERT}
5402 @cvindex NDEBUG
5403 @hdrindex{assert.h}
5404 Check whether to enable assertions in the style of @file{assert.h}.
5405 Assertions are enabled by default, but the user can override this by
5406 invoking @command{configure} with the @option{--disable-assert} option.
5407 @end defmac
5409 @anchor{AC_HEADER_DIRENT}
5410 @defmac AC_HEADER_DIRENT
5411 @acindex{HEADER_DIRENT}
5412 @cvindex HAVE_DIRENT_H
5413 @cvindex HAVE_NDIR_H
5414 @cvindex HAVE_SYS_DIR_H
5415 @cvindex HAVE_SYS_NDIR_H
5416 @hdrindex{dirent.h}
5417 @hdrindex{sys/ndir.h}
5418 @hdrindex{sys/dir.h}
5419 @hdrindex{ndir.h}
5420 Check for the following header files.  For the first one that is
5421 found and defines @samp{DIR}, define the listed C preprocessor macro:
5423 @multitable {@file{sys/ndir.h}} {@code{HAVE_SYS_NDIR_H}}
5424 @item @file{dirent.h}   @tab @code{HAVE_DIRENT_H}
5425 @item @file{sys/ndir.h} @tab @code{HAVE_SYS_NDIR_H}
5426 @item @file{sys/dir.h}  @tab @code{HAVE_SYS_DIR_H}
5427 @item @file{ndir.h}     @tab @code{HAVE_NDIR_H}
5428 @end multitable
5430 The directory-library declarations in your source code should look
5431 something like the following:
5433 @example
5434 @group
5435 #include <sys/types.h>
5436 #ifdef HAVE_DIRENT_H
5437 # include <dirent.h>
5438 # define NAMLEN(dirent) strlen ((dirent)->d_name)
5439 #else
5440 # define dirent direct
5441 # define NAMLEN(dirent) ((dirent)->d_namlen)
5442 # ifdef HAVE_SYS_NDIR_H
5443 #  include <sys/ndir.h>
5444 # endif
5445 # ifdef HAVE_SYS_DIR_H
5446 #  include <sys/dir.h>
5447 # endif
5448 # ifdef HAVE_NDIR_H
5449 #  include <ndir.h>
5450 # endif
5451 #endif
5452 @end group
5453 @end example
5455 Using the above declarations, the program would declare variables to be
5456 of type @code{struct dirent}, not @code{struct direct}, and would access
5457 the length of a directory entry name by passing a pointer to a
5458 @code{struct dirent} to the @code{NAMLEN} macro.
5460 This macro also checks for the SCO Xenix @file{dir} and @file{x} libraries.
5462 This macro is obsolescent, as all current systems with directory
5463 libraries have @code{<dirent.h>}.  New programs need not use this macro.
5465 Also see @code{AC_STRUCT_DIRENT_D_INO} and
5466 @code{AC_STRUCT_DIRENT_D_TYPE} (@pxref{Particular Structures}).
5467 @end defmac
5469 @anchor{AC_HEADER_MAJOR}
5470 @defmac AC_HEADER_MAJOR
5471 @acindex{HEADER_MAJOR}
5472 @cvindex MAJOR_IN_MKDEV
5473 @cvindex MAJOR_IN_SYSMACROS
5474 @hdrindex{sys/mkdev.h}
5475 @hdrindex{sys/sysmacros.h}
5476 If @file{sys/types.h} does not define @code{major}, @code{minor}, and
5477 @code{makedev}, but @file{sys/mkdev.h} does, define
5478 @code{MAJOR_IN_MKDEV}; otherwise, if @file{sys/sysmacros.h} does, define
5479 @code{MAJOR_IN_SYSMACROS}.
5480 @end defmac
5482 @defmac AC_HEADER_RESOLV
5483 @acindex{HEADER_RESOLV}
5484 @cvindex HAVE_RESOLV_H
5485 @hdrindex{resolv.h}
5486 Checks for header @file{resolv.h}, checking for prerequisites first.
5487 To properly use @file{resolv.h}, your code should contain something like
5488 the following:
5490 @verbatim
5491 #ifdef HAVE_SYS_TYPES_H
5492 #  include <sys/types.h>
5493 #endif
5494 #ifdef HAVE_NETINET_IN_H
5495 #  include <netinet/in.h>   /* inet_ functions / structs */
5496 #endif
5497 #ifdef HAVE_ARPA_NAMESER_H
5498 #  include <arpa/nameser.h> /* DNS HEADER struct */
5499 #endif
5500 #ifdef HAVE_NETDB_H
5501 #  include <netdb.h>
5502 #endif
5503 #include <resolv.h>
5504 @end verbatim
5505 @end defmac
5507 @anchor{AC_HEADER_STAT}
5508 @defmac AC_HEADER_STAT
5509 @acindex{HEADER_STAT}
5510 @cvindex STAT_MACROS_BROKEN
5511 @hdrindex{sys/stat.h}
5512 If the macros @code{S_ISDIR}, @code{S_ISREG}, etc.@: defined in
5513 @file{sys/stat.h} do not work properly (returning false positives),
5514 define @code{STAT_MACROS_BROKEN}.  This is the case on Tektronix UTekV,
5515 Amdahl UTS and Motorola System V/88.
5517 This macro is obsolescent, as no current systems have the bug.
5518 New programs need not use this macro.
5519 @end defmac
5521 @defmac AC_HEADER_STDBOOL
5522 @acindex{HEADER_STDBOOL}
5523 @cvindex HAVE_STDBOOL_H
5524 @cvindex HAVE__BOOL
5525 @hdrindex{stdbool.h}
5526 @hdrindex{system.h}
5527 If @file{stdbool.h} exists and conforms to C99, define
5528 @code{HAVE_STDBOOL_H} to 1; if the type @code{_Bool} is defined, define
5529 @code{HAVE__BOOL} to 1.  To fulfill the C99 requirements, your
5530 @file{system.h} could contain the following code:
5532 @verbatim
5533 #ifdef HAVE_STDBOOL_H
5534 # include <stdbool.h>
5535 #else
5536 # ifndef HAVE__BOOL
5537 #  ifdef __cplusplus
5538 typedef bool _Bool;
5539 #  else
5540 #   define _Bool signed char
5541 #  endif
5542 # endif
5543 # define bool _Bool
5544 # define false 0
5545 # define true 1
5546 # define __bool_true_false_are_defined 1
5547 #endif
5548 @end verbatim
5550 Alternatively you can use the @samp{stdbool} package of Gnulib
5551 (@pxref{Gnulib}); it packages the above code into a replacement header
5552 and contains a few other bells and whistles.
5554 @end defmac
5556 @anchor{AC_HEADER_STDC}
5557 @defmac AC_HEADER_STDC
5558 @acindex{HEADER_STDC}
5559 @cvindex STDC_HEADERS
5560 @hdrindex{stdlib.h}
5561 @hdrindex{stdarg.h}
5562 @hdrindex{string.h}
5563 @hdrindex{float.h}
5564 @hdrindex{ctype.h}
5565 Define @code{STDC_HEADERS} if the system has C header files
5566 conforming to @acronym{ANSI} C89 (@acronym{ISO} C90).
5567 Specifically, this macro checks for @file{stdlib.h}, @file{stdarg.h},
5568 @file{string.h}, and @file{float.h}; if the system has those, it
5569 probably has the rest of the C89 header files.  This macro also
5570 checks whether @file{string.h} declares @code{memchr} (and thus
5571 presumably the other @code{mem} functions), whether @file{stdlib.h}
5572 declare @code{free} (and thus presumably @code{malloc} and other related
5573 functions), and whether the @file{ctype.h} macros work on characters
5574 with the high bit set, as the C standard requires.
5576 If you use this macro, your code can refer to @code{STDC_HEADERS} to
5577 determine whether the system has conforming header files (and probably C
5578 library functions).
5580 This macro is obsolescent, as current systems have conforming header
5581 files.  New programs need not use this macro.
5583 @hdrindex{string.h}
5584 @hdrindex{strings.h}
5585 Nowadays @file{string.h} is part of the C standard and declares functions like
5586 @code{strcpy}, and @file{strings.h} is standardized by Posix and declares
5587 @acronym{BSD} functions like @code{bcopy}; but
5588 historically, string functions were a major sticking point in this area.
5589 If you still want to worry about portability to ancient systems without
5590 standard headers, there is so much variation
5591 that it is probably easier to declare the functions you use than to
5592 figure out exactly what the system header files declare.  Some ancient systems
5593 contained a mix of functions from the C standard and from @acronym{BSD};
5594 some were mostly standard but lacked @samp{memmove}; some defined the
5595 @acronym{BSD} functions as macros in @file{string.h} or
5596 @file{strings.h}; some had only the @acronym{BSD} functions but
5597 @file{string.h}; some declared the memory functions in @file{memory.h},
5598 some in @file{string.h}; etc.  It is probably sufficient to check for
5599 one string function and one memory function; if the library had the
5600 standard versions of those then it probably had most of the others.
5601 If you put the following in @file{configure.ac}:
5603 @example
5604 # This example is obsolescent.
5605 # Nowadays you can omit these macro calls.
5606 AC_HEADER_STDC
5607 AC_CHECK_FUNCS([strchr memcpy])
5608 @end example
5610 @noindent
5611 then, in your code, you can use declarations like this:
5613 @example
5614 @group
5615 /* This example is obsolescent.
5616    Nowadays you can just #include <string.h>.  */
5617 #ifdef STDC_HEADERS
5618 # include <string.h>
5619 #else
5620 # ifndef HAVE_STRCHR
5621 #  define strchr index
5622 #  define strrchr rindex
5623 # endif
5624 char *strchr (), *strrchr ();
5625 # ifndef HAVE_MEMCPY
5626 #  define memcpy(d, s, n) bcopy ((s), (d), (n))
5627 #  define memmove(d, s, n) bcopy ((s), (d), (n))
5628 # endif
5629 #endif
5630 @end group
5631 @end example
5633 @noindent
5634 If you use a function like @code{memchr}, @code{memset}, @code{strtok},
5635 or @code{strspn}, which have no @acronym{BSD} equivalent, then macros don't
5636 suffice to port to ancient hosts; you must provide an implementation of
5637 each function.  An easy
5638 way to incorporate your implementations only when needed (since the ones
5639 in system C libraries may be hand optimized) is to, taking @code{memchr}
5640 for example, put it in @file{memchr.c} and use
5641 @samp{AC_REPLACE_FUNCS([memchr])}.
5642 @end defmac
5644 @defmac AC_HEADER_SYS_WAIT
5645 @acindex{HEADER_SYS_WAIT}
5646 @cvindex HAVE_SYS_WAIT_H
5647 @hdrindex{sys/wait.h}
5648 If @file{sys/wait.h} exists and is compatible with Posix, define
5649 @code{HAVE_SYS_WAIT_H}.  Incompatibility can occur if @file{sys/wait.h}
5650 does not exist, or if it uses the old @acronym{BSD} @code{union wait} instead
5651 of @code{int} to store a status value.  If @file{sys/wait.h} is not
5652 Posix compatible, then instead of including it, define the
5653 Posix macros with their usual interpretations.  Here is an
5654 example:
5656 @example
5657 @group
5658 #include <sys/types.h>
5659 #ifdef HAVE_SYS_WAIT_H
5660 # include <sys/wait.h>
5661 #endif
5662 #ifndef WEXITSTATUS
5663 # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
5664 #endif
5665 #ifndef WIFEXITED
5666 # define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
5667 #endif
5668 @end group
5669 @end example
5671 @noindent
5672 This macro is obsolescent, as current systems are compatible with Posix.
5673 New programs need not use this macro.
5674 @end defmac
5676 @cvindex _POSIX_VERSION
5677 @hdrindex{unistd.h}
5678 @code{_POSIX_VERSION} is defined when @file{unistd.h} is included on
5679 Posix systems.  If there is no @file{unistd.h}, it is definitely
5680 not a Posix system.  However, some non-Posix systems do
5681 have @file{unistd.h}.
5683 The way to check whether the system supports Posix is:
5685 @example
5686 @group
5687 #ifdef HAVE_UNISTD_H
5688 # include <sys/types.h>
5689 # include <unistd.h>
5690 #endif
5692 #ifdef _POSIX_VERSION
5693 /* Code for Posix systems.  */
5694 #endif
5695 @end group
5696 @end example
5698 @anchor{AC_HEADER_TIME}
5699 @defmac AC_HEADER_TIME
5700 @acindex{HEADER_TIME}
5701 @cvindex TIME_WITH_SYS_TIME
5702 @hdrindex{time.h}
5703 @hdrindex{sys/time.h}
5704 If a program may include both @file{time.h} and @file{sys/time.h},
5705 define @code{TIME_WITH_SYS_TIME}.  On some ancient systems,
5706 @file{sys/time.h} included @file{time.h}, but @file{time.h} was not
5707 protected against multiple inclusion, so programs could not explicitly
5708 include both files.  This macro is useful in programs that use, for
5709 example, @code{struct timeval} as well as
5710 @code{struct tm}.  It is best used in conjunction with
5711 @code{HAVE_SYS_TIME_H}, which can be checked for using
5712 @code{AC_CHECK_HEADERS([sys/time.h])}.
5714 @example
5715 @group
5716 #ifdef TIME_WITH_SYS_TIME
5717 # include <sys/time.h>
5718 # include <time.h>
5719 #else
5720 # ifdef HAVE_SYS_TIME_H
5721 #  include <sys/time.h>
5722 # else
5723 #  include <time.h>
5724 # endif
5725 #endif
5726 @end group
5727 @end example
5729 @noindent
5730 This macro is obsolescent, as current systems can include both files
5731 when they exist.  New programs need not use this macro.
5732 @end defmac
5735 @defmac AC_HEADER_TIOCGWINSZ
5736 @acindex{HEADER_TIOCGWINSZ}
5737 @cvindex GWINSZ_IN_SYS_IOCTL
5738 @hdrindex{sys/ioctl.h}
5739 @hdrindex{termios.h}
5740 @c FIXME: I need clarifications from Jim.
5741 If the use of @code{TIOCGWINSZ} requires @file{<sys/ioctl.h>}, then
5742 define @code{GWINSZ_IN_SYS_IOCTL}.  Otherwise @code{TIOCGWINSZ} can be
5743 found in @file{<termios.h>}.
5745 Use:
5747 @example
5748 @group
5749 #ifdef HAVE_TERMIOS_H
5750 # include <termios.h>
5751 #endif
5753 #ifdef GWINSZ_IN_SYS_IOCTL
5754 # include <sys/ioctl.h>
5755 #endif
5756 @end group
5757 @end example
5758 @end defmac
5760 @node Generic Headers
5761 @subsection Generic Header Checks
5763 These macros are used to find system header files not covered by the
5764 ``particular'' test macros.  If you need to check the contents of a header
5765 as well as find out whether it is present, you have to write your own
5766 test for it (@pxref{Writing Tests}).
5768 @anchor{AC_CHECK_HEADER}
5769 @defmac AC_CHECK_HEADER (@var{header-file}, @ovar{action-if-found}, @
5770   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
5771 @acindex{CHECK_HEADER}
5772 If the system header file @var{header-file} is compilable, execute shell
5773 commands @var{action-if-found}, otherwise execute
5774 @var{action-if-not-found}.  If you just want to define a symbol if the
5775 header file is available, consider using @code{AC_CHECK_HEADERS}
5776 instead.
5778 @var{includes} is a series of include directives, defaulting to
5779 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
5780 prior to the header under test.
5782 For compatibility issues with older versions of Autoconf, please read
5783 below.
5784 @end defmac
5786 @anchor{AC_CHECK_HEADERS}
5787 @defmac AC_CHECK_HEADERS (@var{header-file}@dots{}, @
5788   @ovar{action-if-found}, @ovar{action-if-not-found}, @
5789   @dvar{includes, AC_INCLUDES_DEFAULT})
5790 @acindex{CHECK_HEADERS}
5791 @cvindex HAVE_@var{header}
5792 For each given system header file @var{header-file} in the
5793 blank-separated argument list that exists, define
5794 @code{HAVE_@var{header-file}} (in all capitals).  If @var{action-if-found}
5795 is given, it is additional shell code to execute when one of the header
5796 files is found.  You can give it a value of @samp{break} to break out of
5797 the loop on the first match.  If @var{action-if-not-found} is given, it
5798 is executed when one of the header files is not found.
5800 @var{includes} is a series of include directives, defaulting to
5801 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
5802 prior to the headers under test.
5804 For compatibility issues with older versions of Autoconf, please read
5805 below.
5806 @end defmac
5808 Previous versions of Autoconf merely checked whether the header was
5809 accepted by the preprocessor.  This was changed because the old test was
5810 inappropriate for typical uses.  Headers are typically used to compile,
5811 not merely to preprocess, and the old behavior sometimes accepted
5812 headers that clashed at compile-time.  If you need to check whether a
5813 header is preprocessable, you can use @code{AC_PREPROC_IFELSE}
5814 (@pxref{Running the Preprocessor}).
5816 This scheme, which improves the robustness of the test, also requires
5817 that you make sure that headers that must be included before the
5818 @var{header-file} be part of the @var{includes}, (@pxref{Default
5819 Includes}).  If looking for @file{bar.h}, which requires that
5820 @file{foo.h} be included before if it exists, we suggest the following
5821 scheme:
5823 @verbatim
5824 AC_CHECK_HEADERS([foo.h])
5825 AC_CHECK_HEADERS([bar.h], [], [],
5826 [#ifdef HAVE_FOO_H
5827 # include <foo.h>
5828 # endif
5830 @end verbatim
5832 The following variant generates smaller, faster @command{configure}
5833 files if you do not need the full power of @code{AC_CHECK_HEADERS}.
5835 @defmac AC_CHECK_HEADERS_ONCE (@var{header-file}@dots{})
5836 @acindex{CHECK_HEADERS_ONCE}
5837 @cvindex HAVE_@var{header}
5838 For each given system header file @var{header-file} in the
5839 blank-separated argument list that exists, define
5840 @code{HAVE_@var{header-file}} (in all capitals).
5841 This is a once-only variant of @code{AC_CHECK_HEADERS}.  It generates the
5842 checking code at most once, so that @command{configure} is smaller and
5843 faster; but the checks cannot be conditionalized and are always done once,
5844 early during the @command{configure} run.
5845 @end defmac
5847 @node Declarations
5848 @section Declarations
5849 @cindex Declaration, checking
5851 The following macros check for the declaration of variables and
5852 functions.  If there is no macro specifically defined to check for a
5853 symbol you need, then you can use the general macros (@pxref{Generic
5854 Declarations}) or, for more complex tests, you may use
5855 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}).
5857 @menu
5858 * Particular Declarations::     Macros to check for certain declarations
5859 * Generic Declarations::        How to find other declarations
5860 @end menu
5862 @node Particular Declarations
5863 @subsection Particular Declaration Checks
5865 There are no specific macros for declarations.
5867 @node Generic Declarations
5868 @subsection Generic Declaration Checks
5870 These macros are used to find declarations not covered by the ``particular''
5871 test macros.
5873 @defmac AC_CHECK_DECL (@var{symbol}, @ovar{action-if-found}, @
5874   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
5875 @acindex{CHECK_DECL}
5876 If @var{symbol} (a function, variable, or constant) is not declared in
5877 @var{includes} and a declaration is needed, run the shell commands
5878 @var{action-if-not-found}, otherwise @var{action-if-found}.
5879 @var{includes} is a series of include directives, defaulting to
5880 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
5881 prior to the declaration under test.
5883 This macro actually tests whether @var{symbol} is defined as a macro or
5884 can be used as an r-value, not whether it is really declared, because it
5885 is much safer to avoid
5886 introducing extra declarations when they are not needed.
5887 @end defmac
5889 @anchor{AC_CHECK_DECLS}
5890 @defmac AC_CHECK_DECLS (@var{symbols}, @ovar{action-if-found}, @
5891   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
5892 @acindex{CHECK_DECLS}
5893 @cvindex HAVE_DECL_@var{symbol}
5894 For each of the @var{symbols} (@emph{comma}-separated list), define
5895 @code{HAVE_DECL_@var{symbol}} (in all capitals) to @samp{1} if
5896 @var{symbol} is declared, otherwise to @samp{0}.  If
5897 @var{action-if-not-found} is given, it is additional shell code to
5898 execute when one of the function declarations is needed, otherwise
5899 @var{action-if-found} is executed.
5901 @var{includes} is a series of include directives, defaulting to
5902 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
5903 prior to the declarations under test.
5905 This macro uses an M4 list as first argument:
5906 @example
5907 AC_CHECK_DECLS([strdup])
5908 AC_CHECK_DECLS([strlen])
5909 AC_CHECK_DECLS([malloc, realloc, calloc, free])
5910 AC_CHECK_DECLS([j0], [], [], [[#include <math.h>]])
5911 @end example
5913 Unlike the other @samp{AC_CHECK_*S} macros, when a @var{symbol} is not
5914 declared, @code{HAVE_DECL_@var{symbol}} is defined to @samp{0} instead
5915 of leaving @code{HAVE_DECL_@var{symbol}} undeclared.  When you are
5916 @emph{sure} that the check was performed, use
5917 @code{HAVE_DECL_@var{symbol}} in @code{#if}:
5919 @example
5920 #if !HAVE_DECL_SYMBOL
5921 extern char *symbol;
5922 #endif
5923 @end example
5925 @noindent
5926 If the test may have not been performed, however, because it is safer
5927 @emph{not} to declare a symbol than to use a declaration that conflicts
5928 with the system's one, you should use:
5930 @example
5931 #if defined HAVE_DECL_MALLOC && !HAVE_DECL_MALLOC
5932 void *malloc (size_t *s);
5933 #endif
5934 @end example
5936 @noindent
5937 You fall into the second category only in extreme situations: either
5938 your files may be used without being configured, or they are used during
5939 the configuration.  In most cases the traditional approach is enough.
5940 @end defmac
5942 @defmac AC_CHECK_DECLS_ONCE (@var{symbols})
5943 @acindex{CHECK_DECLS_ONCE}
5944 @cvindex HAVE_DECL_@var{symbol}
5945 For each of the @var{symbols} (@emph{comma}-separated list), define
5946 @code{HAVE_DECL_@var{symbol}} (in all capitals) to @samp{1} if
5947 @var{symbol} is declared in the default include files, otherwise to
5948 @samp{0}.  This is a once-only variant of @code{AC_CHECK_DECLS}.  It
5949 generates the checking code at most once, so that @command{configure} is
5950 smaller and faster; but the checks cannot be conditionalized and are
5951 always done once, early during the @command{configure} run.
5952 @end defmac
5955 @node Structures
5956 @section Structures
5957 @cindex Structure, checking
5959 The following macros check for the presence of certain members in C
5960 structures.  If there is no macro specifically defined to check for a
5961 member you need, then you can use the general structure-member macros
5962 (@pxref{Generic Structures}) or, for more complex tests, you may use
5963 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}).
5965 @menu
5966 * Particular Structures::       Macros to check for certain structure members
5967 * Generic Structures::          How to find other structure members
5968 @end menu
5970 @node Particular Structures
5971 @subsection Particular Structure Checks
5973 The following macros check for certain structures or structure members.
5975 @defmac AC_STRUCT_DIRENT_D_INO
5976 @acindex{STRUCT_DIRENT_D_INO}
5977 @cvindex HAVE_STRUCT_DIRENT_D_INO
5978 Perform all the actions of @code{AC_HEADER_DIRENT} (@pxref{Particular
5979 Headers}).  Then, if @code{struct dirent} contains a @code{d_ino}
5980 member, define @code{HAVE_STRUCT_DIRENT_D_INO}.
5982 @code{HAVE_STRUCT_DIRENT_D_INO} indicates only the presence of
5983 @code{d_ino}, not whether its contents are always reliable.
5984 Traditionally, a zero @code{d_ino} indicated a deleted directory entry,
5985 though current systems hide this detail from the user and never return
5986 zero @code{d_ino} values.
5987 Many current systems report an incorrect @code{d_ino} for a directory
5988 entry that is a mount point.
5989 @end defmac
5991 @defmac AC_STRUCT_DIRENT_D_TYPE
5992 @acindex{STRUCT_DIRENT_D_TYPE}
5993 @cvindex HAVE_STRUCT_DIRENT_D_TYPE
5994 Perform all the actions of @code{AC_HEADER_DIRENT} (@pxref{Particular
5995 Headers}).  Then, if @code{struct dirent} contains a @code{d_type}
5996 member, define @code{HAVE_STRUCT_DIRENT_D_TYPE}.
5997 @end defmac
5999 @anchor{AC_STRUCT_ST_BLOCKS}
6000 @defmac AC_STRUCT_ST_BLOCKS
6001 @acindex{STRUCT_ST_BLOCKS}
6002 @cvindex HAVE_STRUCT_STAT_ST_BLOCKS
6003 @cvindex HAVE_ST_BLOCKS
6004 @ovindex LIBOBJS
6005 If @code{struct stat} contains an @code{st_blocks} member, define
6006 @code{HAVE_STRUCT_STAT_ST_BLOCKS}.  Otherwise, require an
6007 @code{AC_LIBOBJ} replacement of @samp{fileblocks}.  The former name,
6008 @code{HAVE_ST_BLOCKS} is to be avoided, as its support will cease in the
6009 future.
6010 @end defmac
6012 @defmac AC_STRUCT_TM
6013 @acindex{STRUCT_TM}
6014 @cvindex TM_IN_SYS_TIME
6015 @hdrindex{time.h}
6016 @hdrindex{sys/time.h}
6017 If @file{time.h} does not define @code{struct tm}, define
6018 @code{TM_IN_SYS_TIME}, which means that including @file{sys/time.h}
6019 had better define @code{struct tm}.
6021 This macro is obsolescent, as @file{time.h} defines @code{struct tm} in
6022 current systems.  New programs need not use this macro.
6023 @end defmac
6025 @anchor{AC_STRUCT_TIMEZONE}
6026 @defmac AC_STRUCT_TIMEZONE
6027 @acindex{STRUCT_TIMEZONE}
6028 @cvindex HAVE_DECL_TZNAME
6029 @cvindex HAVE_STRUCT_TM_TM_ZONE
6030 @cvindex HAVE_TM_ZONE
6031 @cvindex HAVE_TZNAME
6032 Figure out how to get the current timezone.  If @code{struct tm} has a
6033 @code{tm_zone} member, define @code{HAVE_STRUCT_TM_TM_ZONE} (and the
6034 obsoleted @code{HAVE_TM_ZONE}).  Otherwise, if the external array
6035 @code{tzname} is found, define @code{HAVE_TZNAME}; if it is declared,
6036 define @code{HAVE_DECL_TZNAME}.
6037 @end defmac
6039 @node Generic Structures
6040 @subsection Generic Structure Checks
6042 These macros are used to find structure members not covered by the
6043 ``particular'' test macros.
6045 @defmac AC_CHECK_MEMBER (@var{aggregate}.@var{member}, @
6046   @ovar{action-if-found}, @ovar{action-if-not-found}, @
6047   @dvar{includes, AC_INCLUDES_DEFAULT})
6048 @acindex{CHECK_MEMBER}
6049 Check whether @var{member} is a member of the aggregate @var{aggregate}.
6050 If no @var{includes} are specified, the default includes are used
6051 (@pxref{Default Includes}).
6053 @example
6054 AC_CHECK_MEMBER([struct passwd.pw_gecos], [],
6055                 [AC_MSG_ERROR([We need `passwd.pw_gecos'!])],
6056                 [[#include <pwd.h>]])
6057 @end example
6059 You can use this macro for submembers:
6061 @example
6062 AC_CHECK_MEMBER(struct top.middle.bot)
6063 @end example
6064 @end defmac
6066 @anchor{AC_CHECK_MEMBERS}
6067 @defmac AC_CHECK_MEMBERS (@var{members}, @ovar{action-if-found}, @
6068   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
6069 @acindex{CHECK_MEMBERS}
6070 @cvindex HAVE_@var{aggregate}_@var{member}
6071 Check for the existence of each @samp{@var{aggregate}.@var{member}} of
6072 @var{members} using the previous macro.  When @var{member} belongs to
6073 @var{aggregate}, define @code{HAVE_@var{aggregate}_@var{member}} (in all
6074 capitals, with spaces and dots replaced by underscores).  If
6075 @var{action-if-found} is given, it is executed for each of the found
6076 members.  If @var{action-if-not-found} is given, it is executed for each
6077 of the members that could not be found.
6079 @var{includes} is a series of include directives, defaulting to
6080 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
6081 prior to the members under test.
6083 This macro uses M4 lists:
6084 @example
6085 AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize])
6086 @end example
6087 @end defmac
6090 @node Types
6091 @section Types
6092 @cindex Types
6093 @cindex C types
6095 The following macros check for C types, either builtin or typedefs.  If
6096 there is no macro specifically defined to check for a type you need, and
6097 you don't need to check for any special properties of it, then you can
6098 use a general type-check macro.
6100 @menu
6101 * Particular Types::            Special handling to find certain types
6102 * Generic Types::               How to find other types
6103 @end menu
6105 @node Particular Types
6106 @subsection Particular Type Checks
6108 @hdrindex{sys/types.h}
6109 @hdrindex{stdlib.h}
6110 @hdrindex{stdint.h}
6111 @hdrindex{inttypes.h}
6112 These macros check for particular C types in @file{sys/types.h},
6113 @file{stdlib.h}, @file{stdint.h}, @file{inttypes.h} and others, if they
6114 exist.
6116 The Gnulib @code{stdint} module is an alternate way to define many of
6117 these symbols; it is useful if you prefer your code to assume a
6118 C99-or-better environment.  @xref{Gnulib}.
6120 @anchor{AC_TYPE_GETGROUPS}
6121 @defmac AC_TYPE_GETGROUPS
6122 @acindex{TYPE_GETGROUPS}
6123 @cvindex GETGROUPS_T
6124 Define @code{GETGROUPS_T} to be whichever of @code{gid_t} or @code{int}
6125 is the base type of the array argument to @code{getgroups}.
6126 @end defmac
6128 @defmac AC_TYPE_INT8_T
6129 @acindex{TYPE_INT8_T}
6130 @cvindex HAVE_INT8_T
6131 @cvindex int8_t
6132 If @file{stdint.h} or @file{inttypes.h} does not define the type
6133 @code{int8_t}, define @code{int8_t} to a signed
6134 integer type that is exactly 8 bits wide and that uses two's complement
6135 representation, if such a type exists.
6136 If you are worried about porting to hosts that lack such a type, you can
6137 use the results of this macro in C89-or-later code as follows:
6139 @example
6140 #if HAVE_STDINT_H
6141 # include <stdint.h>
6142 #endif
6143 #if defined INT8_MAX || defined int8_t
6144  @emph{code using int8_t}
6145 #else
6146  @emph{complicated alternative using >8-bit 'signed char'}
6147 #endif
6148 @end example
6149 @end defmac
6151 @defmac AC_TYPE_INT16_T
6152 @acindex{TYPE_INT16_T}
6153 @cvindex HAVE_INT16_T
6154 @cvindex int16_t
6155 This is like @code{AC_TYPE_INT8_T}, except for 16-bit integers.
6156 @end defmac
6158 @defmac AC_TYPE_INT32_T
6159 @acindex{TYPE_INT32_T}
6160 @cvindex HAVE_INT32_T
6161 @cvindex int32_t
6162 This is like @code{AC_TYPE_INT8_T}, except for 32-bit integers.
6163 @end defmac
6165 @defmac AC_TYPE_INT64_T
6166 @acindex{TYPE_INT64_T}
6167 @cvindex HAVE_INT64_T
6168 @cvindex int64_t
6169 This is like @code{AC_TYPE_INT8_T}, except for 64-bit integers.
6170 @end defmac
6172 @defmac AC_TYPE_INTMAX_T
6173 @acindex{TYPE_INTMAX_T}
6174 @cvindex HAVE_INTMAX_T
6175 @cvindex intmax_t
6176 If @file{stdint.h} or @file{inttypes.h} defines the type @code{intmax_t},
6177 define @code{HAVE_INTMAX_T}.  Otherwise, define @code{intmax_t} to the
6178 widest signed integer type.
6179 @end defmac
6181 @defmac AC_TYPE_INTPTR_T
6182 @acindex{TYPE_INTPTR_T}
6183 @cvindex HAVE_INTPTR_T
6184 @cvindex intptr_t
6185 If @file{stdint.h} or @file{inttypes.h} defines the type @code{intptr_t},
6186 define @code{HAVE_INTPTR_T}.  Otherwise, define @code{intptr_t} to a
6187 signed integer type wide enough to hold a pointer, if such a type
6188 exists.
6189 @end defmac
6191 @defmac AC_TYPE_LONG_DOUBLE
6192 @acindex{TYPE_LONG_DOUBLE}
6193 @cvindex HAVE_LONG_DOUBLE
6194 If the C compiler supports a working @code{long double} type, define
6195 @code{HAVE_LONG_DOUBLE}.  The @code{long double} type might have the
6196 same range and precision as @code{double}.
6198 This macro is obsolescent, as current C compilers support @code{long
6199 double}.  New programs need not use this macro.
6200 @end defmac
6202 @defmac AC_TYPE_LONG_DOUBLE_WIDER
6203 @acindex{TYPE_LONG_DOUBLE_WIDER}
6204 @cvindex HAVE_LONG_DOUBLE_WIDER
6205 If the C compiler supports a working @code{long double} type with more
6206 range or precision than the @code{double} type, define
6207 @code{HAVE_LONG_DOUBLE_WIDER}.
6208 @end defmac
6210 @defmac AC_TYPE_LONG_LONG_INT
6211 @acindex{TYPE_LONG_LONG_INT}
6212 @cvindex HAVE_LONG_LONG_INT
6213 If the C compiler supports a working @code{long long int} type, define
6214 @code{HAVE_LONG_LONG_INT}.  However, this test does not test
6215 @code{long long int} values in preprocessor @code{#if} expressions,
6216 because too many compilers mishandle such expressions.
6217 @xref{Preprocessor Arithmetic}.
6218 @end defmac
6220 @defmac AC_TYPE_MBSTATE_T
6221 @acindex{TYPE_MBSTATE_T}
6222 @cvindex mbstate_t
6223 @hdrindex{wchar.h}
6224 Define @code{HAVE_MBSTATE_T} if @code{<wchar.h>} declares the
6225 @code{mbstate_t} type.  Also, define @code{mbstate_t} to be a type if
6226 @code{<wchar.h>} does not declare it.
6227 @end defmac
6229 @anchor{AC_TYPE_MODE_T}
6230 @defmac AC_TYPE_MODE_T
6231 @acindex{TYPE_MODE_T}
6232 @cvindex mode_t
6233 Define @code{mode_t} to a suitable type, if standard headers do not
6234 define it.
6235 @end defmac
6237 @anchor{AC_TYPE_OFF_T}
6238 @defmac AC_TYPE_OFF_T
6239 @acindex{TYPE_OFF_T}
6240 @cvindex off_t
6241 Define @code{off_t} to a suitable type, if standard headers do not
6242 define it.
6243 @end defmac
6245 @anchor{AC_TYPE_PID_T}
6246 @defmac AC_TYPE_PID_T
6247 @acindex{TYPE_PID_T}
6248 @cvindex pid_t
6249 Define @code{pid_t} to a suitable type, if standard headers do not
6250 define it.
6251 @end defmac
6253 @anchor{AC_TYPE_SIZE_T}
6254 @defmac AC_TYPE_SIZE_T
6255 @acindex{TYPE_SIZE_T}
6256 @cvindex size_t
6257 Define @code{size_t} to a suitable type, if standard headers do not
6258 define it.
6259 @end defmac
6261 @defmac AC_TYPE_SSIZE_T
6262 @acindex{TYPE_SSIZE_T}
6263 @cvindex ssize_t
6264 Define @code{ssize_t} to a suitable type, if standard headers do not
6265 define it.
6266 @end defmac
6268 @anchor{AC_TYPE_UID_T}
6269 @defmac AC_TYPE_UID_T
6270 @acindex{TYPE_UID_T}
6271 @cvindex uid_t
6272 @cvindex gid_t
6273 Define @code{uid_t} and @code{gid_t} to suitable types, if standard
6274 headers do not define them.
6275 @end defmac
6277 @defmac AC_TYPE_UINT8_T
6278 @acindex{TYPE_UINT8_T}
6279 @cvindex HAVE_UINT8_T
6280 @cvindex uint8_t
6281 If @file{stdint.h} or @file{inttypes.h} does not define the type
6282 @code{uint8_t}, define @code{uint8_t} to an
6283 unsigned integer type that is exactly 8 bits wide, if such a type
6284 exists.
6285 This is like @code{AC_TYPE_INT8_T}, except for unsigned integers.
6286 @end defmac
6288 @defmac AC_TYPE_UINT16_T
6289 @acindex{TYPE_UINT16_T}
6290 @cvindex HAVE_UINT16_T
6291 @cvindex uint16_t
6292 This is like @code{AC_TYPE_UINT8_T}, except for 16-bit integers.
6293 @end defmac
6295 @defmac AC_TYPE_UINT32_T
6296 @acindex{TYPE_UINT32_T}
6297 @cvindex HAVE_UINT32_T
6298 @cvindex uint32_t
6299 This is like @code{AC_TYPE_UINT8_T}, except for 32-bit integers.
6300 @end defmac
6302 @defmac AC_TYPE_UINT64_T
6303 @acindex{TYPE_UINT64_T}
6304 @cvindex HAVE_UINT64_T
6305 @cvindex uint64_t
6306 This is like @code{AC_TYPE_UINT8_T}, except for 64-bit integers.
6307 @end defmac
6309 @defmac AC_TYPE_UINTMAX_T
6310 @acindex{TYPE_UINTMAX_T}
6311 @cvindex HAVE_UINTMAX_T
6312 @cvindex uintmax_t
6313 If @file{stdint.h} or @file{inttypes.h} defines the type @code{uintmax_t},
6314 define @code{HAVE_UINTMAX_T}.  Otherwise, define @code{uintmax_t} to the
6315 widest unsigned integer type.
6316 @end defmac
6318 @defmac AC_TYPE_UINTPTR_T
6319 @acindex{TYPE_UINTPTR_T}
6320 @cvindex HAVE_UINTPTR_T
6321 @cvindex uintptr_t
6322 If @file{stdint.h} or @file{inttypes.h} defines the type @code{uintptr_t},
6323 define @code{HAVE_UINTPTR_T}.  Otherwise, define @code{uintptr_t} to an
6324 unsigned integer type wide enough to hold a pointer, if such a type
6325 exists.
6326 @end defmac
6328 @defmac AC_TYPE_UNSIGNED_LONG_LONG_INT
6329 @acindex{TYPE_UNSIGNED_LONG_LONG_INT}
6330 @cvindex HAVE_UNSIGNED_LONG_LONG_INT
6331 If the C compiler supports a working @code{unsigned long long int} type,
6332 define @code{HAVE_UNSIGNED_LONG_LONG_INT}.  However, this test does not test
6333 @code{unsigned long long int} values in preprocessor @code{#if} expressions,
6334 because too many compilers mishandle such expressions.
6335 @xref{Preprocessor Arithmetic}.
6336 @end defmac
6338 @node Generic Types
6339 @subsection Generic Type Checks
6341 These macros are used to check for types not covered by the ``particular''
6342 test macros.
6344 @defmac AC_CHECK_TYPE (@var{type}, @ovar{action-if-found}, @
6345   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
6346 @acindex{CHECK_TYPE}
6347 Check whether @var{type} is defined.  It may be a compiler builtin type
6348 or defined by the @var{includes}.  @var{includes} is a series of include
6349 directives, defaulting to @code{AC_INCLUDES_DEFAULT} (@pxref{Default
6350 Includes}), which are used prior to the type under test.
6352 In C, @var{type} must be a type-name, so that the expression @samp{sizeof
6353 (@var{type})} is valid (but @samp{sizeof ((@var{type}))} is not).  The
6354 same test is applied when compiling for C++, which means that in C++
6355 @var{type} should be a type-id and should not be an anonymous
6356 @samp{struct} or @samp{union}.
6357 @end defmac
6360 @defmac AC_CHECK_TYPES (@var{types}, @ovar{action-if-found}, @
6361   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
6362 @acindex{CHECK_TYPES}
6363 @cvindex HAVE_@var{type}
6364 For each @var{type} of the @var{types} that is defined, define
6365 @code{HAVE_@var{type}} (in all capitals).  Each @var{type} must follow
6366 the rules of @code{AC_CHECK_TYPE}.  If no @var{includes} are
6367 specified, the default includes are used (@pxref{Default Includes}).  If
6368 @var{action-if-found} is given, it is additional shell code to execute
6369 when one of the types is found.  If @var{action-if-not-found} is given,
6370 it is executed when one of the types is not found.
6372 This macro uses M4 lists:
6373 @example
6374 AC_CHECK_TYPES([ptrdiff_t])
6375 AC_CHECK_TYPES([unsigned long long int, uintmax_t])
6376 AC_CHECK_TYPES([float_t], [], [], [[#include <math.h>]])
6377 @end example
6379 @end defmac
6381 Autoconf, up to 2.13, used to provide to another version of
6382 @code{AC_CHECK_TYPE}, broken by design.  In order to keep backward
6383 compatibility, a simple heuristic, quite safe but not totally, is
6384 implemented.  In case of doubt, read the documentation of the former
6385 @code{AC_CHECK_TYPE}, see @ref{Obsolete Macros}.
6388 @node Compilers and Preprocessors
6389 @section Compilers and Preprocessors
6390 @cindex Compilers
6391 @cindex Preprocessors
6393 @ovindex EXEEXT
6394 All the tests for compilers (@code{AC_PROG_CC}, @code{AC_PROG_CXX},
6395 @code{AC_PROG_F77}) define the output variable @code{EXEEXT} based on
6396 the output of the compiler, typically to the empty string if
6397 Posix and @samp{.exe} if a @acronym{DOS} variant.
6399 @ovindex OBJEXT
6400 They also define the output variable @code{OBJEXT} based on the
6401 output of the compiler, after @file{.c} files have been excluded, typically
6402 to @samp{o} if Posix, @samp{obj} if a @acronym{DOS} variant.
6404 If the compiler being used does not produce executables, the tests fail.  If
6405 the executables can't be run, and cross-compilation is not enabled, they
6406 fail too.  @xref{Manual Configuration}, for more on support for cross
6407 compiling.
6409 @menu
6410 * Specific Compiler Characteristics::  Some portability issues
6411 * Generic Compiler Characteristics::  Language independent tests and features
6412 * C Compiler::                  Checking its characteristics
6413 * C++ Compiler::                Likewise
6414 * Objective C Compiler::        Likewise
6415 * Erlang Compiler and Interpreter::  Likewise
6416 * Fortran Compiler::            Likewise
6417 @end menu
6419 @node Specific Compiler Characteristics
6420 @subsection Specific Compiler Characteristics
6422 Some compilers exhibit different behaviors.
6424 @table @asis
6425 @item Static/Dynamic Expressions
6426 Autoconf relies on a trick to extract one bit of information from the C
6427 compiler: using negative array sizes.  For instance the following
6428 excerpt of a C source demonstrates how to test whether @samp{int} objects are 4
6429 bytes wide:
6431 @example
6432 static int test_array[sizeof (int) == 4 ? 1 : -1];
6433 @end example
6435 @noindent
6436 To our knowledge, there is a single compiler that does not support this
6437 trick: the @acronym{HP} C compilers (the real ones, not only the
6438 ``bundled'') on @acronym{HP-UX} 11.00.
6439 They incorrectly reject the above program with the diagnostic
6440 ``Variable-length arrays cannot have static storage.''
6441 This bug comes from @acronym{HP} compilers' mishandling of @code{sizeof (int)},
6442 not from the @code{? 1 : -1}, and
6443 Autoconf works around this problem by casting @code{sizeof (int)} to
6444 @code{long int} before comparing it.
6445 @end table
6447 @node Generic Compiler Characteristics
6448 @subsection Generic Compiler Characteristics
6450 @anchor{AC_CHECK_SIZEOF}
6451 @defmac AC_CHECK_SIZEOF (@var{type-or-expr}, @ovar{unused}, @
6452   @dvar{includes, AC_INCLUDES_DEFAULT})
6453 @acindex{CHECK_SIZEOF}
6454 @cvindex SIZEOF_@var{type-or-expr}
6455 Define @code{SIZEOF_@var{type-or-expr}} (@pxref{Standard Symbols}) to be
6456 the size in bytes of @var{type-or-expr}, which may be either a type or
6457 an expression returning a value that has a size.  If the expression
6458 @samp{sizeof (@var{type-or-expr})} is invalid, the result is 0.
6459 @var{includes} is a series of include directives, defaulting to
6460 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
6461 prior to the expression under test.
6463 This macro now works even when cross-compiling.  The @var{unused}
6464 argument was used when cross-compiling.
6466 For example, the call
6468 @example
6469 AC_CHECK_SIZEOF([int *])
6470 @end example
6472 @noindent
6473 defines @code{SIZEOF_INT_P} to be 8 on DEC Alpha AXP systems.
6474 @end defmac
6476 @defmac AC_CHECK_ALIGNOF (@var{type}, @dvar{includes, AC_INCLUDES_DEFAULT})
6477 @acindex{CHECK_ALIGNOF}
6478 @cvindex ALIGNOF_@var{type}
6479 Define @code{ALIGNOF_@var{type}} (@pxref{Standard Symbols}) to be the
6480 alignment in bytes of @var{type}.  @samp{@var{type} y;} must be valid as
6481 a structure member declaration.  If @samp{type} is unknown, the result
6482 is 0.  If no @var{includes} are specified, the default includes are used
6483 (@pxref{Default Includes}).
6484 @end defmac
6486 @defmac AC_COMPUTE_INT (@var{var}, @var{expression}, @
6487   @dvar{includes, AC_INCLUDES_DEFAULT}, @ovar{action-if-fails})
6488 @acindex{COMPUTE_INT}
6489 Store into the shell variable @var{var} the value of the integer
6490 @var{expression}.  The
6491 value should fit in an initializer in a C variable of type @code{signed
6492 long}.  To support cross compilation (in which case, the macro only works on
6493 hosts that use twos-complement arithmetic), it should be possible to evaluate
6494 the expression at compile-time.  If no @var{includes} are specified, the
6495 default includes are used (@pxref{Default Includes}).
6497 Execute @var{action-if-fails} if the value cannot be determined correctly.
6498 @end defmac
6500 @defmac AC_LANG_WERROR
6501 @acindex{LANG_WERROR}
6502 Normally Autoconf ignores warnings generated by the compiler, linker, and
6503 preprocessor.  If this macro is used, warnings count as fatal
6504 errors for the current language.  This macro is useful when the
6505 results of configuration are used where warnings are unacceptable; for
6506 instance, if parts of a program are built with the @acronym{GCC}
6507 @option{-Werror}
6508 option.  If the whole program is built using @option{-Werror} it is
6509 often simpler to put @option{-Werror} in the compiler flags (@code{CFLAGS},
6510 etc.).
6511 @end defmac
6513 @defmac AC_OPENMP
6514 @acindex{OPENMP}
6515 @cvindex _OPENMP
6516 @ovindex OPENMP_CFLAGS
6517 @ovindex OPENMP_CXXFLAGS
6518 @ovindex OPENMP_FFLAGS
6519 @ovindex OPENMP_FCFLAGS
6520 OpenMP (@url{http://www.openmp.org/}) specifies extensions of C, C++,
6521 and Fortran that simplify optimization of shared memory parallelism,
6522 which is a common problem on multicore CPUs.
6524 If the current language is C, the macro @code{AC_OPENMP} sets the
6525 variable @code{OPENMP_CFLAGS} to the C compiler flags needed for
6526 supporting OpenMP@.  @code{OPENMP_CFLAGS} is set to empty if the
6527 compiler already supports OpenMP, if it has no way to activate OpenMP
6528 support, or if the user rejects OpenMP support by invoking
6529 @samp{configure} with the @samp{--disable-openmp} option.
6531 @code{OPENMP_CFLAGS} needs to be used when compiling programs, when
6532 preprocessing program source, and when linking programs.  Therefore you
6533 need to add @code{$(OPENMP_CFLAGS)} to the @code{CFLAGS} of C programs
6534 that use OpenMP@.  If you preprocess OpenMP-specific C code, you also
6535 need to add @code{$(OPENMP_CFLAGS)} to @code{CPPFLAGS}.  The presence of
6536 OpenMP support is revealed at compile time by the preprocessor macro
6537 @code{_OPENMP}.
6539 Linking a program with @code{OPENMP_CFLAGS} typically adds one more
6540 shared library to the program's dependencies, so its use is recommended
6541 only on programs that actually require OpenMP.
6543 If the current language is C++, @code{AC_OPENMP} sets the variable
6544 @code{OPENMP_CXXFLAGS}, suitably for the C++ compiler.  The same remarks
6545 hold as for C.
6547 If the current language is Fortran 77 or Fortran, @code{AC_OPENMP} sets
6548 the variable @code{OPENMP_FFLAGS} or @code{OPENMP_FCFLAGS},
6549 respectively.  Similar remarks as for C hold, except that
6550 @code{CPPFLAGS} is not used for Fortran, and no preprocessor macro
6551 signals OpenMP support.
6552 @end defmac
6554 @node C Compiler
6555 @subsection C Compiler Characteristics
6557 The following macros provide ways to find and exercise a C Compiler.
6558 There are a few constructs that ought to be avoided, but do not deserve
6559 being checked for, since they can easily be worked around.
6561 @table @asis
6562 @item Don't use lines containing solitary backslashes
6563 They tickle a bug in the @acronym{HP-UX} C compiler (checked on
6564 @acronym{HP-UX} 10.20,
6565 11.00, and 11i).  When given the following source:
6567 @example
6568 #ifdef __STDC__
6570 * A comment with backslash-newlines in it.  %@{ %@} *\
6573 char str[] = "\\
6574 " A string with backslash-newlines in it %@{ %@} \\
6576 char apostrophe = '\\
6580 #endif
6581 @end example
6583 @noindent
6584 the compiler incorrectly fails with the diagnostics ``Non-terminating
6585 comment at end of file'' and ``Missing @samp{#endif} at end of file.''
6586 Removing the lines with solitary backslashes solves the problem.
6588 @item Don't compile several files at once if output matters to you
6589 Some compilers, such as @acronym{HP}'s, report names of files being
6590 compiled when given more than one file operand.  For instance:
6592 @example
6593 $ @kbd{cc a.c b.c}
6594 a.c:
6595 b.c:
6596 @end example
6598 @noindent
6599 This can cause problems if you observe the output of the compiler to
6600 detect failures.  Invoking @samp{cc -c a.c && cc -c b.c && cc -o c a.o
6601 b.o} solves the issue.
6603 @item Don't rely on @code{#error} failing
6604 The @sc{irix} C compiler does not fail when #error is preprocessed; it
6605 simply emits a diagnostic and continues, exiting successfully.  So,
6606 instead of an error directive like @code{#error "Unsupported word size"}
6607 it is more portable to use an invalid directive like @code{#Unsupported
6608 word size} in Autoconf tests.  In ordinary source code, @code{#error} is
6609 OK, since installers with inadequate compilers like @sc{irix} can simply
6610 examine these compilers' diagnostic output.
6612 @item Don't rely on correct @code{#line} support
6613 On Solaris, @command{c89} (at least Sun C 5.3 through 5.8)
6614 diagnoses @code{#line} directives whose line
6615 numbers are greater than 32767.  Nothing in Posix
6616 makes this invalid.  That is why Autoconf stopped issuing
6617 @code{#line} directives.
6618 @end table
6620 @defmac AC_PROG_CC (@ovar{compiler-search-list})
6621 @acindex{PROG_CC}
6622 @ovindex CC
6623 @ovindex CFLAGS
6624 Determine a C compiler to use.  If @code{CC} is not already set in the
6625 environment, check for @code{gcc} and @code{cc}, then for other C
6626 compilers.  Set output variable @code{CC} to the name of the compiler
6627 found.
6629 This macro may, however, be invoked with an optional first argument
6630 which, if specified, must be a blank-separated list of C compilers to
6631 search for.  This just gives the user an opportunity to specify an
6632 alternative search list for the C compiler.  For example, if you didn't
6633 like the default order, then you could invoke @code{AC_PROG_CC} like
6634 this:
6636 @example
6637 AC_PROG_CC([gcc cl cc])
6638 @end example
6640 If the C compiler does not handle function prototypes correctly by
6641 default, try to add an option to output variable @code{CC} to make it
6642 so.  This macro tries various options that select standard-conformance
6643 modes on various systems.
6645 After calling this macro you can check whether the C compiler has been
6646 set to accept @acronym{ANSI} C89 (@acronym{ISO} C90); if not, the shell
6647 variable
6648 @code{ac_cv_prog_cc_c89} is set to @samp{no}.  See also
6649 @code{AC_C_PROTOTYPES} below.
6651 If using the @acronym{GNU} C compiler, set shell variable @code{GCC} to
6652 @samp{yes}.  If output variable @code{CFLAGS} was not already set, set
6653 it to @option{-g -O2} for the @acronym{GNU} C compiler (@option{-O2} on systems
6654 where @acronym{GCC} does not accept @option{-g}), or @option{-g} for
6655 other compilers.
6656 @end defmac
6658 @anchor{AC_PROG_CC_C_O}
6659 @defmac AC_PROG_CC_C_O
6660 @acindex{PROG_CC_C_O}
6661 @cvindex NO_MINUS_C_MINUS_O
6662 If the C compiler does not accept the @option{-c} and @option{-o} options
6663 simultaneously, define @code{NO_MINUS_C_MINUS_O}.  This macro actually
6664 tests both the compiler found by @code{AC_PROG_CC}, and, if different,
6665 the first @code{cc} in the path.  The test fails if one fails.  This
6666 macro was created for @acronym{GNU} Make to choose the default C compilation
6667 rule.
6668 @end defmac
6671 @defmac AC_PROG_CPP
6672 @acindex{PROG_CPP}
6673 @ovindex CPP
6674 Set output variable @code{CPP} to a command that runs the
6675 C preprocessor.  If @samp{$CC -E} doesn't work, @file{/lib/cpp} is used.
6676 It is only portable to run @code{CPP} on files with a @file{.c}
6677 extension.
6679 Some preprocessors don't indicate missing include files by the error
6680 status.  For such preprocessors an internal variable is set that causes
6681 other macros to check the standard error from the preprocessor and
6682 consider the test failed if any warnings have been reported.
6683 For most preprocessors, though, warnings do not cause include-file
6684 tests to fail unless @code{AC_PROG_CPP_WERROR} is also specified.
6685 @end defmac
6687 @defmac AC_PROG_CPP_WERROR
6688 @acindex{PROG_CPP_WERROR}
6689 @ovindex CPP
6690 This acts like @code{AC_PROG_CPP}, except it treats warnings from the
6691 preprocessor as errors even if the preprocessor exit status indicates
6692 success.  This is useful for avoiding headers that generate mandatory
6693 warnings, such as deprecation notices.
6694 @end defmac
6697 The following macros check for C compiler or machine architecture
6698 features.  To check for characteristics not listed here, use
6699 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}) or
6700 @code{AC_RUN_IFELSE} (@pxref{Runtime}).
6702 @defmac AC_PROG_CC_STDC
6703 @acindex{PROG_CC_STDC}
6704 If the C compiler cannot compile @acronym{ISO} Standard C (currently
6705 C99), try to add an option to output variable @code{CC} to make it work.
6706 If the compiler does not support C99, fall back to supporting
6707 @acronym{ANSI} C89 (@acronym{ISO} C90).
6709 After calling this macro you can check whether the C compiler has been
6710 set to accept Standard C; if not, the shell variable
6711 @code{ac_cv_prog_cc_stdc} is set to @samp{no}.
6712 @end defmac
6714 @defmac AC_PROG_CC_C89
6715 @acindex{PROG_CC_C89}
6716 If the C compiler is not in @acronym{ANSI} C89 (@acronym{ISO} C90) mode by
6717 default, try to add an option to output variable @code{CC} to make it
6718 so.  This macro tries various options that select @acronym{ANSI} C89 on
6719 some system or another.  It considers the compiler to be in
6720 @acronym{ANSI} C89 mode if it handles function prototypes correctly.
6722 After calling this macro you can check whether the C compiler has been
6723 set to accept @acronym{ANSI} C89; if not, the shell variable
6724 @code{ac_cv_prog_cc_c89} is set to @samp{no}.
6726 This macro is called automatically by @code{AC_PROG_CC}.
6727 @end defmac
6729 @defmac AC_PROG_CC_C99
6730 @acindex{PROG_CC_C99}
6731 If the C compiler is not in C99 mode by default, try to add an
6732 option to output variable @code{CC} to make it so.  This macro tries
6733 various options that select C99 on some system or another.  It
6734 considers the compiler to be in C99 mode if it handles @code{_Bool},
6735 @code{//} comments, flexible array members, @code{inline}, signed and
6736 unsigned @code{long long int}, mixed code and declarations, named
6737 initialization of structs,
6738 @code{restrict}, @code{va_copy}, varargs macros, variable declarations
6739 in @code{for} loops, and variable length arrays.
6741 After calling this macro you can check whether the C compiler has been
6742 set to accept C99; if not, the shell variable
6743 @code{ac_cv_prog_cc_c99} is set to @samp{no}.
6744 @end defmac
6746 @defmac AC_C_BACKSLASH_A
6747 @acindex{C_BACKSLASH_A}
6748 @cvindex HAVE_C_BACKSLASH_A
6749 Define @samp{HAVE_C_BACKSLASH_A} to 1 if the C compiler understands
6750 @samp{\a}.
6752 This macro is obsolescent, as current C compilers understand @samp{\a}.
6753 New programs need not use this macro.
6754 @end defmac
6756 @anchor{AC_C_BIGENDIAN}
6757 @defmac AC_C_BIGENDIAN (@ovar{action-if-true}, @ovar{action-if-false}, @
6758   @ovar{action-if-unknown}, @ovar{action-if-universal})
6759 @acindex{C_BIGENDIAN}
6760 @cvindex WORDS_BIGENDIAN
6761 @cindex Endianness
6762 If words are stored with the most significant byte first (like Motorola
6763 and SPARC CPUs), execute @var{action-if-true}.  If words are stored with
6764 the least significant byte first (like Intel and VAX CPUs), execute
6765 @var{action-if-false}.
6767 This macro runs a test-case if endianness cannot be determined from the
6768 system header files.  When cross-compiling, the test-case is not run but
6769 grep'ed for some magic values.  @var{action-if-unknown} is executed if
6770 the latter case fails to determine the byte sex of the host system.
6772 In some cases a single run of a compiler can generate code for multiple
6773 architectures.  This can happen, for example, when generating Mac OS X
6774 universal binary files, which work on both PowerPC and Intel
6775 architectures.  In this case, the different variants might be for
6776 different architectures whose endiannesses differ.  If
6777 @command{configure} detects this, it executes @var{action-if-universal}
6778 instead of @var{action-if-unknown}.
6780 The default for @var{action-if-true} is to define
6781 @samp{WORDS_BIGENDIAN}.  The default for @var{action-if-false} is to do
6782 nothing.  The default for @var{action-if-unknown} is to
6783 abort configure and tell the installer how to bypass this test.
6784 And finally, the default for @var{action-if-universal} is to define
6785 @samp{WORDS_BIGENDIAN} or not, depending on the architecture that the
6786 code is being generated for.
6788 If you use this macro without specifying @var{action-if-universal}, you
6789 should also use @code{AC_CONFIG_HEADERS}; otherwise
6790 @samp{WORDS_BIGENDIAN} may be set incorrectly for Mac OS X universal
6791 binary files.
6792 @end defmac
6794 @anchor{AC_C_CONST}
6795 @defmac AC_C_CONST
6796 @acindex{C_CONST}
6797 @cvindex const
6798 If the C compiler does not fully support the @code{const} keyword,
6799 define @code{const} to be empty.  Some C compilers that do
6800 not define @code{__STDC__} do support @code{const}; some compilers that
6801 define @code{__STDC__} do not completely support @code{const}.  Programs
6802 can simply use @code{const} as if every C compiler supported it; for
6803 those that don't, the makefile or configuration header file
6804 defines it as empty.
6806 Occasionally installers use a C++ compiler to compile C code, typically
6807 because they lack a C compiler.  This causes problems with @code{const},
6808 because C and C++ treat @code{const} differently.  For example:
6810 @example
6811 const int foo;
6812 @end example
6814 @noindent
6815 is valid in C but not in C++.  These differences unfortunately cannot be
6816 papered over by defining @code{const} to be empty.
6818 If @command{autoconf} detects this situation, it leaves @code{const} alone,
6819 as this generally yields better results in practice.  However, using a
6820 C++ compiler to compile C code is not recommended or supported, and
6821 installers who run into trouble in this area should get a C compiler
6822 like @acronym{GCC} to compile their C code.
6824 This macro is obsolescent, as current C compilers support @code{const}.
6825 New programs need not use this macro.
6826 @end defmac
6828 @defmac AC_C_RESTRICT
6829 @acindex{C_RESTRICT}
6830 @cvindex restrict
6831 If the C compiler recognizes a variant spelling for the @code{restrict}
6832 keyword (@code{__restrict}, @code{__restrict__}, or @code{_Restrict}),
6833 then define @code{restrict} to that; this is more likely to do the right
6834 thing with compilers that support language variants where plain
6835 @code{restrict} is not a keyword.  Otherwise, if the C compiler
6836 recognizes the @code{restrict} keyword, don't do anything.
6837 Otherwise, define @code{restrict} to be empty.
6838 Thus, programs may simply use @code{restrict} as if every C compiler
6839 supported it; for those that do not, the makefile
6840 or configuration header defines it away.
6842 Although support in C++ for the @code{restrict} keyword is not
6843 required, several C++ compilers do accept the keyword.
6844 This macro works for them, too.
6845 @end defmac
6847 @defmac AC_C_VOLATILE
6848 @acindex{C_VOLATILE}
6849 @cvindex volatile
6850 If the C compiler does not understand the keyword @code{volatile},
6851 define @code{volatile} to be empty.  Programs can simply use
6852 @code{volatile} as if every C compiler supported it; for those that do
6853 not, the makefile or configuration header defines it as
6854 empty.
6856 If the correctness of your program depends on the semantics of
6857 @code{volatile}, simply defining it to be empty does, in a sense, break
6858 your code.  However, given that the compiler does not support
6859 @code{volatile}, you are at its mercy anyway.  At least your
6860 program compiles, when it wouldn't before.
6861 @xref{Volatile Objects}, for more about @code{volatile}.
6863 In general, the @code{volatile} keyword is a standard C feature, so
6864 you might expect that @code{volatile} is available only when
6865 @code{__STDC__} is defined.  However, Ultrix 4.3's native compiler does
6866 support volatile, but does not define @code{__STDC__}.
6868 This macro is obsolescent, as current C compilers support @code{volatile}.
6869 New programs need not use this macro.
6870 @end defmac
6872 @anchor{AC_C_INLINE}
6873 @defmac AC_C_INLINE
6874 @acindex{C_INLINE}
6875 @cvindex inline
6876 If the C compiler supports the keyword @code{inline}, do nothing.
6877 Otherwise define @code{inline} to @code{__inline__} or @code{__inline}
6878 if it accepts one of those, otherwise define @code{inline} to be empty.
6879 @end defmac
6881 @anchor{AC_C_CHAR_UNSIGNED}
6882 @defmac AC_C_CHAR_UNSIGNED
6883 @acindex{C_CHAR_UNSIGNED}
6884 @cvindex __CHAR_UNSIGNED__
6885 If the C type @code{char} is unsigned, define @code{__CHAR_UNSIGNED__},
6886 unless the C compiler predefines it.
6887 @end defmac
6889 @defmac AC_C_STRINGIZE
6890 @acindex{C_STRINGIZE}
6891 @cvindex HAVE_STRINGIZE
6892 If the C preprocessor supports the stringizing operator, define
6893 @code{HAVE_STRINGIZE}.  The stringizing operator is @samp{#} and is
6894 found in macros such as this:
6896 @example
6897 #define x(y) #y
6898 @end example
6900 This macro is obsolescent, as current C compilers support the
6901 stringizing operator.  New programs need not use this macro.
6902 @end defmac
6904 @defmac AC_C_FLEXIBLE_ARRAY_MEMBER
6905 @acindex{C_FLEXIBLE_ARRAY_MEMBER}
6906 @cvindex FLEXIBLE_ARRAY_MEMBER
6907 If the C compiler supports flexible array members, define
6908 @code{FLEXIBLE_ARRAY_MEMBER} to nothing; otherwise define it to 1.
6909 That way, a declaration like this:
6911 @example
6912 struct s
6913   @{
6914     size_t n_vals;
6915     double val[FLEXIBLE_ARRAY_MEMBER];
6916   @};
6917 @end example
6919 @noindent
6920 will let applications use the ``struct hack'' even with compilers that
6921 do not support flexible array members.  To allocate and use such an
6922 object, you can use code like this:
6924 @example
6925 size_t i;
6926 size_t n = compute_value_count ();
6927 struct s *p =
6928    malloc (offsetof (struct s, val)
6929            + n * sizeof (double));
6930 p->n_vals = n;
6931 for (i = 0; i < n; i++)
6932   p->val[i] = compute_value (i);
6933 @end example
6934 @end defmac
6936 @defmac AC_C_VARARRAYS
6937 @acindex{C_VARARRAYS}
6938 @cvindex HAVE_C_VARARRAYS
6939 If the C compiler supports variable-length arrays, define
6940 @code{HAVE_C_VARARRAYS}.  A variable-length array is an array of automatic
6941 storage duration whose length is determined at run time, when the array
6942 is declared.
6943 @end defmac
6945 @defmac AC_C_TYPEOF
6946 @acindex{C_TYPEOF}
6947 @cvindex HAVE_TYPEOF
6948 @cvindex typeof
6949 If the C compiler supports @acronym{GCC}'s @code{typeof} syntax either
6950 directly or
6951 through a different spelling of the keyword (e.g., @code{__typeof__}),
6952 define @code{HAVE_TYPEOF}.  If the support is available only through a
6953 different spelling, define @code{typeof} to that spelling.
6954 @end defmac
6956 @defmac AC_C_PROTOTYPES
6957 @acindex{C_PROTOTYPES}
6958 @cvindex PROTOTYPES
6959 @cvindex __PROTOTYPES
6960 @cvindex PARAMS
6961 If function prototypes are understood by the compiler (as determined by
6962 @code{AC_PROG_CC}), define @code{PROTOTYPES} and @code{__PROTOTYPES}.
6963 Defining @code{__PROTOTYPES} is for the benefit of
6964 header files that cannot use macros that infringe on user name space.
6966 This macro is obsolescent, as current C compilers support prototypes.
6967 New programs need not use this macro.
6968 @end defmac
6970 @anchor{AC_PROG_GCC_TRADITIONAL}
6971 @defmac AC_PROG_GCC_TRADITIONAL
6972 @acindex{PROG_GCC_TRADITIONAL}
6973 @ovindex CC
6974 Add @option{-traditional} to output variable @code{CC} if using the
6975 @acronym{GNU} C compiler and @code{ioctl} does not work properly without
6976 @option{-traditional}.  That usually happens when the fixed header files
6977 have not been installed on an old system.
6979 This macro is obsolescent, since current versions of the @acronym{GNU} C
6980 compiler fix the header files automatically when installed.
6981 @end defmac
6984 @node C++ Compiler
6985 @subsection C++ Compiler Characteristics
6988 @defmac AC_PROG_CXX (@ovar{compiler-search-list})
6989 @acindex{PROG_CXX}
6990 @ovindex CXX
6991 @ovindex CXXFLAGS
6992 Determine a C++ compiler to use.  Check whether the environment variable
6993 @code{CXX} or @code{CCC} (in that order) is set; if so, then set output
6994 variable @code{CXX} to its value.
6996 Otherwise, if the macro is invoked without an argument, then search for
6997 a C++ compiler under the likely names (first @code{g++} and @code{c++}
6998 then other names).  If none of those checks succeed, then as a last
6999 resort set @code{CXX} to @code{g++}.
7001 This macro may, however, be invoked with an optional first argument
7002 which, if specified, must be a blank-separated list of C++ compilers to
7003 search for.  This just gives the user an opportunity to specify an
7004 alternative search list for the C++ compiler.  For example, if you
7005 didn't like the default order, then you could invoke @code{AC_PROG_CXX}
7006 like this:
7008 @example
7009 AC_PROG_CXX([gcc cl KCC CC cxx cc++ xlC aCC c++ g++])
7010 @end example
7012 If using the @acronym{GNU} C++ compiler, set shell variable @code{GXX} to
7013 @samp{yes}.  If output variable @code{CXXFLAGS} was not already set, set
7014 it to @option{-g -O2} for the @acronym{GNU} C++ compiler (@option{-O2} on
7015 systems where G++ does not accept @option{-g}), or @option{-g} for other
7016 compilers.
7017 @end defmac
7019 @defmac AC_PROG_CXXCPP
7020 @acindex{PROG_CXXCPP}
7021 @ovindex CXXCPP
7022 Set output variable @code{CXXCPP} to a command that runs the C++
7023 preprocessor.  If @samp{$CXX -E} doesn't work, @file{/lib/cpp} is used.
7024 It is portable to run @code{CXXCPP} only on files with a @file{.c},
7025 @file{.C}, @file{.cc}, or @file{.cpp} extension.
7027 Some preprocessors don't indicate missing include files by the error
7028 status.  For such preprocessors an internal variable is set that causes
7029 other macros to check the standard error from the preprocessor and
7030 consider the test failed if any warnings have been reported.  However,
7031 it is not known whether such broken preprocessors exist for C++.
7032 @end defmac
7034 @defmac AC_PROG_CXX_C_O
7035 @acindex{PROG_CXX_C_O}
7036 @cvindex CXX_NO_MINUS_C_MINUS_O
7037 Test whether the C++ compiler accepts the options @option{-c} and
7038 @option{-o} simultaneously, and define @code{CXX_NO_MINUS_C_MINUS_O},
7039 if it does not.
7040 @end defmac
7043 @node Objective C Compiler
7044 @subsection Objective C Compiler Characteristics
7047 @defmac AC_PROG_OBJC (@ovar{compiler-search-list})
7048 @acindex{PROG_OBJC}
7049 @ovindex OBJC
7050 @ovindex OBJCFLAGS
7051 Determine an Objective C compiler to use.  If @code{OBJC} is not already
7052 set in the environment, check for Objective C compilers.  Set output
7053 variable @code{OBJC} to the name of the compiler found.
7055 This macro may, however, be invoked with an optional first argument
7056 which, if specified, must be a blank-separated list of Objective C compilers to
7057 search for.  This just gives the user an opportunity to specify an
7058 alternative search list for the Objective C compiler.  For example, if you
7059 didn't like the default order, then you could invoke @code{AC_PROG_OBJC}
7060 like this:
7062 @example
7063 AC_PROG_OBJC([gcc objcc objc])
7064 @end example
7066 If using the @acronym{GNU} Objective C compiler, set shell variable
7067 @code{GOBJC} to @samp{yes}.  If output variable @code{OBJCFLAGS} was not
7068 already set, set it to @option{-g -O2} for the @acronym{GNU} Objective C
7069 compiler (@option{-O2} on systems where @command{gcc} does not accept
7070 @option{-g}), or @option{-g} for other compilers.
7071 @end defmac
7073 @defmac AC_PROG_OBJCPP
7074 @acindex{PROG_OBJCPP}
7075 @ovindex OBJCPP
7076 Set output variable @code{OBJCPP} to a command that runs the Objective C
7077 preprocessor.  If @samp{$OBJC -E} doesn't work, @file{/lib/cpp} is used.
7078 @end defmac
7081 @node Erlang Compiler and Interpreter
7082 @subsection Erlang Compiler and Interpreter Characteristics
7083 @cindex Erlang
7085 Autoconf defines the following macros for determining paths to the essential
7086 Erlang/OTP programs:
7088 @defmac AC_ERLANG_PATH_ERLC (@ovar{value-if-not-found}, @dvar{path, $PATH})
7089 @acindex{ERLANG_PATH_ERLC}
7090 @ovindex ERLC
7091 @ovindex ERLCFLAGS
7092 Determine an Erlang compiler to use.  If @code{ERLC} is not already set in the
7093 environment, check for @command{erlc}.  Set output variable @code{ERLC} to the
7094 complete path of the compiler command found.  In addition, if @code{ERLCFLAGS}
7095 is not set in the environment, set it to an empty value.
7097 The two optional arguments have the same meaning as the two last arguments of
7098 macro @code{AC_PROG_PATH} for looking for the @command{erlc} program.  For
7099 example, to look for @command{erlc} only in the @file{/usr/lib/erlang/bin}
7100 directory:
7102 @example
7103 AC_ERLANG_PATH_ERLC([not found], [/usr/lib/erlang/bin])
7104 @end example
7105 @end defmac
7107 @defmac AC_ERLANG_NEED_ERLC (@dvar{path, $PATH})
7108 @acindex{ERLANG_NEED_ERLC}
7109 A simplified variant of the @code{AC_ERLANG_PATH_ERLC} macro, that prints an
7110 error message and exits the @command{configure} script if the @command{erlc}
7111 program is not found.
7112 @end defmac
7114 @defmac AC_ERLANG_PATH_ERL (@ovar{value-if-not-found}, @dvar{path, $PATH})
7115 @acindex{ERLANG_PATH_ERL}
7116 @ovindex ERL
7117 Determine an Erlang interpreter to use.  If @code{ERL} is not already
7118 set in the
7119 environment, check for @command{erl}.  Set output variable @code{ERL} to the
7120 complete path of the interpreter command found.
7122 The two optional arguments have the same meaning as the two last arguments of
7123 macro @code{AC_PROG_PATH} for looking for the @command{erl} program.  For
7124 example, to look for @command{erl} only in the @file{/usr/lib/erlang/bin}
7125 directory:
7127 @example
7128 AC_ERLANG_PATH_ERL([not found], [/usr/lib/erlang/bin])
7129 @end example
7130 @end defmac
7132 @defmac AC_ERLANG_NEED_ERL (@dvar{path, $PATH})
7133 @acindex{ERLANG_NEED_ERL}
7134 A simplified variant of the @code{AC_ERLANG_PATH_ERL} macro, that prints an
7135 error message and exits the @command{configure} script if the @command{erl}
7136 program is not found.
7137 @end defmac
7140 @node Fortran Compiler
7141 @subsection Fortran Compiler Characteristics
7142 @cindex Fortran
7143 @cindex F77
7145 The Autoconf Fortran support is divided into two categories: legacy
7146 Fortran 77 macros (@code{F77}), and modern Fortran macros (@code{FC}).
7147 The former are intended for traditional Fortran 77 code, and have output
7148 variables like @code{F77}, @code{FFLAGS}, and @code{FLIBS}.  The latter
7149 are for newer programs that can (or must) compile under the newer
7150 Fortran standards, and have output variables like @code{FC},
7151 @code{FCFLAGS}, and @code{FCLIBS}.
7153 Except for two new macros @code{AC_FC_SRCEXT} and
7154 @code{AC_FC_FREEFORM} (see below), the @code{FC} and @code{F77} macros
7155 behave almost identically, and so they are documented together in this
7156 section.
7159 @defmac AC_PROG_F77 (@ovar{compiler-search-list})
7160 @acindex{PROG_F77}
7161 @ovindex F77
7162 @ovindex FFLAGS
7163 Determine a Fortran 77 compiler to use.  If @code{F77} is not already
7164 set in the environment, then check for @code{g77} and @code{f77}, and
7165 then some other names.  Set the output variable @code{F77} to the name
7166 of the compiler found.
7168 This macro may, however, be invoked with an optional first argument
7169 which, if specified, must be a blank-separated list of Fortran 77
7170 compilers to search for.  This just gives the user an opportunity to
7171 specify an alternative search list for the Fortran 77 compiler.  For
7172 example, if you didn't like the default order, then you could invoke
7173 @code{AC_PROG_F77} like this:
7175 @example
7176 AC_PROG_F77([fl32 f77 fort77 xlf g77 f90 xlf90])
7177 @end example
7179 If using @code{g77} (the @acronym{GNU} Fortran 77 compiler), then
7180 set the shell variable @code{G77} to @samp{yes}.
7181 If the output variable @code{FFLAGS} was not already set in the
7182 environment, then set it to @option{-g -02} for @code{g77} (or @option{-O2}
7183 where @code{g77} does not accept @option{-g}).  Otherwise, set
7184 @code{FFLAGS} to @option{-g} for all other Fortran 77 compilers.
7185 @end defmac
7187 @defmac AC_PROG_FC (@ovar{compiler-search-list}, @ovar{dialect})
7188 @acindex{PROG_FC}
7189 @ovindex FC
7190 @ovindex FCFLAGS
7191 Determine a Fortran compiler to use.  If @code{FC} is not already set in
7192 the environment, then @code{dialect} is a hint to indicate what Fortran
7193 dialect to search for; the default is to search for the newest available
7194 dialect.  Set the output variable @code{FC} to the name of the compiler
7195 found.
7197 By default, newer dialects are preferred over older dialects, but if
7198 @code{dialect} is specified then older dialects are preferred starting
7199 with the specified dialect.  @code{dialect} can currently be one of
7200 Fortran 77, Fortran 90, or Fortran 95.  However, this is only a hint of
7201 which compiler @emph{name} to prefer (e.g., @code{f90} or @code{f95}),
7202 and no attempt is made to guarantee that a particular language standard
7203 is actually supported.  Thus, it is preferable that you avoid the
7204 @code{dialect} option, and use AC_PROG_FC only for code compatible with
7205 the latest Fortran standard.
7207 This macro may, alternatively, be invoked with an optional first argument
7208 which, if specified, must be a blank-separated list of Fortran
7209 compilers to search for, just as in @code{AC_PROG_F77}.
7211 If the output variable @code{FCFLAGS} was not already set in the
7212 environment, then set it to @option{-g -02} for @acronym{GNU} @code{g77} (or
7213 @option{-O2} where @code{g77} does not accept @option{-g}).  Otherwise,
7214 set @code{FCFLAGS} to @option{-g} for all other Fortran compilers.
7215 @end defmac
7217 @defmac AC_PROG_F77_C_O
7218 @defmacx AC_PROG_FC_C_O
7219 @acindex{PROG_F77_C_O}
7220 @acindex{PROG_FC_C_O}
7221 @cvindex F77_NO_MINUS_C_MINUS_O
7222 @cvindex FC_NO_MINUS_C_MINUS_O
7223 Test whether the Fortran compiler accepts the options @option{-c} and
7224 @option{-o} simultaneously, and define @code{F77_NO_MINUS_C_MINUS_O} or
7225 @code{FC_NO_MINUS_C_MINUS_O}, respectively, if it does not.
7226 @end defmac
7228 The following macros check for Fortran compiler characteristics.
7229 To check for characteristics not listed here, use
7230 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}) or
7231 @code{AC_RUN_IFELSE} (@pxref{Runtime}), making sure to first set the
7232 current language to Fortran 77 or Fortran via @code{AC_LANG([Fortran 77])}
7233 or @code{AC_LANG(Fortran)} (@pxref{Language Choice}).
7236 @defmac AC_F77_LIBRARY_LDFLAGS
7237 @defmacx AC_FC_LIBRARY_LDFLAGS
7238 @acindex{F77_LIBRARY_LDFLAGS}
7239 @ovindex FLIBS
7240 @acindex{FC_LIBRARY_LDFLAGS}
7241 @ovindex FCLIBS
7242 Determine the linker flags (e.g., @option{-L} and @option{-l}) for the
7243 @dfn{Fortran intrinsic and runtime libraries} that are required to
7244 successfully link a Fortran program or shared library.  The output
7245 variable @code{FLIBS} or @code{FCLIBS} is set to these flags (which
7246 should be included after @code{LIBS} when linking).
7248 This macro is intended to be used in those situations when it is
7249 necessary to mix, e.g., C++ and Fortran source code in a single
7250 program or shared library (@pxref{Mixing Fortran 77 With C and C++, , ,
7251 automake, @acronym{GNU} Automake}).
7253 For example, if object files from a C++ and Fortran compiler must be
7254 linked together, then the C++ compiler/linker must be used for linking
7255 (since special C++-ish things need to happen at link time like calling
7256 global constructors, instantiating templates, enabling exception
7257 support, etc.).
7259 However, the Fortran intrinsic and runtime libraries must be linked in
7260 as well, but the C++ compiler/linker doesn't know by default how to add
7261 these Fortran 77 libraries.  Hence, this macro was created to determine
7262 these Fortran libraries.
7264 The macros @code{AC_F77_DUMMY_MAIN} and @code{AC_FC_DUMMY_MAIN} or
7265 @code{AC_F77_MAIN} and @code{AC_FC_MAIN} are probably also necessary to
7266 link C/C++ with Fortran; see below.
7267 @end defmac
7269 @defmac AC_F77_DUMMY_MAIN (@ovar{action-if-found}, @ovar{action-if-not-found})
7270 @defmacx AC_FC_DUMMY_MAIN (@ovar{action-if-found}, @ovar{action-if-not-found})
7271 @acindex{F77_DUMMY_MAIN}
7272 @cvindex F77_DUMMY_MAIN
7273 With many compilers, the Fortran libraries detected by
7274 @code{AC_F77_LIBRARY_LDFLAGS} or @code{AC_FC_LIBRARY_LDFLAGS} provide
7275 their own @code{main} entry function that initializes things like
7276 Fortran I/O, and which then calls a user-provided entry function named
7277 (say) @code{MAIN__} to run the user's program.  The
7278 @code{AC_F77_DUMMY_MAIN} and @code{AC_FC_DUMMY_MAIN} or
7279 @code{AC_F77_MAIN} and @code{AC_FC_MAIN} macros figure out how to deal with
7280 this interaction.
7282 When using Fortran for purely numerical functions (no I/O, etc.)@: often
7283 one prefers to provide one's own @code{main} and skip the Fortran
7284 library initializations.  In this case, however, one may still need to
7285 provide a dummy @code{MAIN__} routine in order to prevent linking errors
7286 on some systems.  @code{AC_F77_DUMMY_MAIN} or @code{AC_FC_DUMMY_MAIN}
7287 detects whether any such routine is @emph{required} for linking, and
7288 what its name is; the shell variable @code{F77_DUMMY_MAIN} or
7289 @code{FC_DUMMY_MAIN} holds this name, @code{unknown} when no solution
7290 was found, and @code{none} when no such dummy main is needed.
7292 By default, @var{action-if-found} defines @code{F77_DUMMY_MAIN} or
7293 @code{FC_DUMMY_MAIN} to the name of this routine (e.g., @code{MAIN__})
7294 @emph{if} it is required.  @var{action-if-not-found} defaults to
7295 exiting with an error.
7297 In order to link with Fortran routines, the user's C/C++ program should
7298 then include the following code to define the dummy main if it is
7299 needed:
7301 @example
7302 #ifdef F77_DUMMY_MAIN
7303 #  ifdef __cplusplus
7304      extern "C"
7305 #  endif
7306    int F77_DUMMY_MAIN() @{ return 1; @}
7307 #endif
7308 @end example
7310 (Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
7312 Note that this macro is called automatically from @code{AC_F77_WRAPPERS}
7313 or @code{AC_FC_WRAPPERS}; there is generally no need to call it
7314 explicitly unless one wants to change the default actions.
7315 @end defmac
7317 @defmac AC_F77_MAIN
7318 @defmacx AC_FC_MAIN
7319 @acindex{F77_MAIN}
7320 @cvindex F77_MAIN
7321 @acindex{FC_MAIN}
7322 @cvindex FC_MAIN
7323 As discussed above, many Fortran libraries allow you to provide an entry
7324 point called (say) @code{MAIN__} instead of the usual @code{main}, which
7325 is then called by a @code{main} function in the Fortran libraries that
7326 initializes things like Fortran I/O@.  The
7327 @code{AC_F77_MAIN} and @code{AC_FC_MAIN} macros detect whether it is
7328 @emph{possible} to utilize such an alternate main function, and defines
7329 @code{F77_MAIN} and @code{FC_MAIN} to the name of the function.  (If no
7330 alternate main function name is found, @code{F77_MAIN} and @code{FC_MAIN} are
7331 simply defined to @code{main}.)
7333 Thus, when calling Fortran routines from C that perform things like I/O,
7334 one should use this macro and declare the "main" function like so:
7336 @example
7337 #ifdef __cplusplus
7338   extern "C"
7339 #endif
7340 int F77_MAIN(int argc, char *argv[]);
7341 @end example
7343 (Again, replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
7344 @end defmac
7346 @defmac AC_F77_WRAPPERS
7347 @defmacx AC_FC_WRAPPERS
7348 @acindex{F77_WRAPPERS}
7349 @cvindex F77_FUNC
7350 @cvindex F77_FUNC_
7351 @acindex{FC_WRAPPERS}
7352 @cvindex FC_FUNC
7353 @cvindex FC_FUNC_
7354 Defines C macros @code{F77_FUNC (name, NAME)}, @code{FC_FUNC (name, NAME)},
7355 @code{F77_FUNC_(name, NAME)}, and @code{FC_FUNC_(name, NAME)} to properly
7356 mangle the names of C/C++ identifiers, and identifiers with underscores,
7357 respectively, so that they match the name-mangling scheme used by the
7358 Fortran compiler.
7360 Fortran is case-insensitive, and in order to achieve this the Fortran
7361 compiler converts all identifiers into a canonical case and format.  To
7362 call a Fortran subroutine from C or to write a C function that is
7363 callable from Fortran, the C program must explicitly use identifiers in
7364 the format expected by the Fortran compiler.  In order to do this, one
7365 simply wraps all C identifiers in one of the macros provided by
7366 @code{AC_F77_WRAPPERS} or @code{AC_FC_WRAPPERS}.  For example, suppose
7367 you have the following Fortran 77 subroutine:
7369 @example
7370       subroutine foobar (x, y)
7371       double precision x, y
7372       y = 3.14159 * x
7373       return
7374       end
7375 @end example
7377 You would then declare its prototype in C or C++ as:
7379 @example
7380 #define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
7381 #ifdef __cplusplus
7382 extern "C"  /* prevent C++ name mangling */
7383 #endif
7384 void FOOBAR_F77(double *x, double *y);
7385 @end example
7387 Note that we pass both the lowercase and uppercase versions of the
7388 function name to @code{F77_FUNC} so that it can select the right one.
7389 Note also that all parameters to Fortran 77 routines are passed as
7390 pointers (@pxref{Mixing Fortran 77 With C and C++, , , automake, @acronym{GNU}
7391 Automake}).
7393 (Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
7395 Although Autoconf tries to be intelligent about detecting the
7396 name-mangling scheme of the Fortran compiler, there may be Fortran
7397 compilers that it doesn't support yet.  In this case, the above code
7398 generates a compile-time error, but some other behavior
7399 (e.g., disabling Fortran-related features) can be induced by checking
7400 whether @code{F77_FUNC} or @code{FC_FUNC} is defined.
7402 Now, to call that routine from a C program, we would do something like:
7404 @example
7406     double x = 2.7183, y;
7407     FOOBAR_F77 (&x, &y);
7409 @end example
7411 If the Fortran identifier contains an underscore (e.g., @code{foo_bar}),
7412 you should use @code{F77_FUNC_} or @code{FC_FUNC_} instead of
7413 @code{F77_FUNC} or @code{FC_FUNC} (with the same arguments).  This is
7414 because some Fortran compilers mangle names differently if they contain
7415 an underscore.
7416 @end defmac
7418 @defmac AC_F77_FUNC (@var{name}, @ovar{shellvar})
7419 @defmacx AC_FC_FUNC (@var{name}, @ovar{shellvar})
7420 @acindex{F77_FUNC}
7421 @acindex{FC_FUNC}
7422 Given an identifier @var{name}, set the shell variable @var{shellvar} to
7423 hold the mangled version @var{name} according to the rules of the
7424 Fortran linker (see also @code{AC_F77_WRAPPERS} or
7425 @code{AC_FC_WRAPPERS}).  @var{shellvar} is optional; if it is not
7426 supplied, the shell variable is simply @var{name}.  The purpose of
7427 this macro is to give the caller a way to access the name-mangling
7428 information other than through the C preprocessor as above, for example,
7429 to call Fortran routines from some language other than C/C++.
7430 @end defmac
7432 @defmac AC_FC_SRCEXT (@var{ext}, @ovar{action-if-success}, @
7433   @ovar{action-if-failure})
7434 @acindex{FC_SRCEXT}
7435 By default, the @code{FC} macros perform their tests using a @file{.f}
7436 extension for source-code files.  Some compilers, however, only enable
7437 newer language features for appropriately named files, e.g., Fortran 90
7438 features only for @file{.f90} files.  On the other hand, some other
7439 compilers expect all source files to end in @file{.f} and require
7440 special flags to support other file name extensions.  The
7441 @code{AC_FC_SRCEXT} macro deals with both of these issues.
7443 The @code{AC_FC_SRCEXT} tries to get the @code{FC} compiler to accept files
7444 ending with the extension .@var{ext} (i.e., @var{ext} does @emph{not}
7445 contain the dot).  If any special compiler flags are needed for this, it
7446 stores them in the output variable @code{FCFLAGS_}@var{ext}.  This
7447 extension and these flags are then used for all subsequent @code{FC} tests
7448 (until @code{AC_FC_SRCEXT} is called again).
7450 For example, you would use @code{AC_FC_SRCEXT(f90)} to employ the
7451 @file{.f90} extension in future tests, and it would set a
7452 @code{FCFLAGS_f90} output variable with any extra flags that are needed
7453 to compile such files.
7455 The @code{FCFLAGS_}@var{ext} can @emph{not} be simply absorbed into
7456 @code{FCFLAGS}, for two reasons based on the limitations of some
7457 compilers.  First, only one @code{FCFLAGS_}@var{ext} can be used at a
7458 time, so files with different extensions must be compiled separately.
7459 Second, @code{FCFLAGS_}@var{ext} must appear @emph{immediately} before
7460 the source-code file name when compiling.  So, continuing the example
7461 above, you might compile a @file{foo.f90} file in your makefile with the
7462 command:
7464 @example
7465 foo.o: foo.f90
7466      $(FC) -c $(FCFLAGS) $(FCFLAGS_f90) '$(srcdir)/foo.f90'
7467 @end example
7469 If @code{AC_FC_SRCEXT} succeeds in compiling files with the @var{ext}
7470 extension, it calls @var{action-if-success} (defaults to nothing).  If
7471 it fails, and cannot find a way to make the @code{FC} compiler accept such
7472 files, it calls @var{action-if-failure} (defaults to exiting with an
7473 error message).
7475 @end defmac
7477 @defmac AC_FC_FREEFORM (@ovar{action-if-success}, @ovar{action-if-failure})
7478 @acindex{FC_FREEFORM}
7480 The @code{AC_FC_FREEFORM} tries to ensure that the Fortran compiler
7481 (@code{$FC}) allows free-format source code (as opposed to the older
7482 fixed-format style from Fortran 77).  If necessary, it may add some
7483 additional flags to @code{FCFLAGS}.
7485 This macro is most important if you are using the default @file{.f}
7486 extension, since many compilers interpret this extension as indicating
7487 fixed-format source unless an additional flag is supplied.  If you
7488 specify a different extension with @code{AC_FC_SRCEXT}, such as
7489 @file{.f90} or @file{.f95}, then @code{AC_FC_FREEFORM} ordinarily
7490 succeeds without modifying @code{FCFLAGS}.
7492 If @code{AC_FC_FREEFORM} succeeds in compiling free-form source, it
7493 calls @var{action-if-success} (defaults to nothing).  If it fails, it
7494 calls @var{action-if-failure} (defaults to exiting with an error
7495 message).
7496 @end defmac
7498 @node System Services
7499 @section System Services
7501 The following macros check for operating system services or capabilities.
7503 @anchor{AC_PATH_X}
7504 @defmac AC_PATH_X
7505 @acindex{PATH_X}
7506 @evindex XMKMF
7507 @cindex X Window System
7508 Try to locate the X Window System include files and libraries.  If the
7509 user gave the command line options @option{--x-includes=@var{dir}} and
7510 @option{--x-libraries=@var{dir}}, use those directories.
7512 If either or both were not given, get the missing values by running
7513 @code{xmkmf} (or an executable pointed to by the @code{XMKMF}
7514 environment variable) on a trivial @file{Imakefile} and examining the
7515 makefile that it produces.  Setting @code{XMKMF} to @samp{false}
7516 disables this method.
7518 If this method fails to find the X Window System, @command{configure}
7519 looks for the files in several directories where they often reside.
7520 If either method is successful, set the shell variables
7521 @code{x_includes} and @code{x_libraries} to their locations, unless they
7522 are in directories the compiler searches by default.
7524 If both methods fail, or the user gave the command line option
7525 @option{--without-x}, set the shell variable @code{no_x} to @samp{yes};
7526 otherwise set it to the empty string.
7527 @end defmac
7529 @anchor{AC_PATH_XTRA}
7530 @defmac AC_PATH_XTRA
7531 @acindex{PATH_XTRA}
7532 @ovindex X_CFLAGS
7533 @ovindex X_LIBS
7534 @ovindex X_EXTRA_LIBS
7535 @ovindex X_PRE_LIBS
7536 @cvindex X_DISPLAY_MISSING
7537 An enhanced version of @code{AC_PATH_X}.  It adds the C compiler flags
7538 that X needs to output variable @code{X_CFLAGS}, and the X linker flags
7539 to @code{X_LIBS}.  Define @code{X_DISPLAY_MISSING} if X is not
7540 available.
7542 This macro also checks for special libraries that some systems need in
7543 order to compile X programs.  It adds any that the system needs to
7544 output variable @code{X_EXTRA_LIBS}.  And it checks for special X11R6
7545 libraries that need to be linked with before @option{-lX11}, and adds
7546 any found to the output variable @code{X_PRE_LIBS}.
7548 @c This is an incomplete kludge.  Make a real way to do it.
7549 @c If you need to check for other X functions or libraries yourself, then
7550 @c after calling this macro, add the contents of @code{X_EXTRA_LIBS} to
7551 @c @code{LIBS} temporarily, like this: (FIXME - add example)
7552 @end defmac
7554 @anchor{AC_SYS_INTERPRETER}
7555 @defmac AC_SYS_INTERPRETER
7556 @acindex{SYS_INTERPRETER}
7557 Check whether the system supports starting scripts with a line of the
7558 form @samp{#!/bin/sh} to select the interpreter to use for the script.
7559 After running this macro, shell code in @file{configure.ac} can check
7560 the shell variable @code{interpval}; it is set to @samp{yes}
7561 if the system supports @samp{#!}, @samp{no} if not.
7562 @end defmac
7564 @defmac AC_SYS_LARGEFILE
7565 @acindex{SYS_LARGEFILE}
7566 @cvindex _FILE_OFFSET_BITS
7567 @cvindex _LARGE_FILES
7568 @ovindex CC
7569 @cindex Large file support
7570 @cindex LFS
7571 Arrange for
7572 @uref{http://www.unix-systems.org/@/version2/@/whatsnew/@/lfs20mar.html,
7573 large-file support}.  On some hosts, one must use special compiler
7574 options to build programs that can access large files.  Append any such
7575 options to the output variable @code{CC}.  Define
7576 @code{_FILE_OFFSET_BITS} and @code{_LARGE_FILES} if necessary.
7578 Large-file support can be disabled by configuring with the
7579 @option{--disable-largefile} option.
7581 If you use this macro, check that your program works even when
7582 @code{off_t} is wider than @code{long int}, since this is common when
7583 large-file support is enabled.  For example, it is not correct to print
7584 an arbitrary @code{off_t} value @code{X} with @code{printf ("%ld",
7585 (long int) X)}.
7587 The LFS introduced the @code{fseeko} and @code{ftello} functions to
7588 replace their C counterparts @code{fseek} and @code{ftell} that do not
7589 use @code{off_t}.  Take care to use @code{AC_FUNC_FSEEKO} to make their
7590 prototypes available when using them and large-file support is
7591 enabled.
7592 @end defmac
7594 @anchor{AC_SYS_LONG_FILE_NAMES}
7595 @defmac AC_SYS_LONG_FILE_NAMES
7596 @acindex{SYS_LONG_FILE_NAMES}
7597 @cvindex HAVE_LONG_FILE_NAMES
7598 If the system supports file names longer than 14 characters, define
7599 @code{HAVE_LONG_FILE_NAMES}.
7600 @end defmac
7602 @defmac AC_SYS_POSIX_TERMIOS
7603 @acindex{SYS_POSIX_TERMIOS}
7604 @cindex Posix termios headers
7605 @cindex termios Posix headers
7606 Check to see if the Posix termios headers and functions are available on the
7607 system.  If so, set the shell variable @code{ac_cv_sys_posix_termios} to
7608 @samp{yes}.  If not, set the variable to @samp{no}.
7609 @end defmac
7611 @node Posix Variants
7612 @section Posix Variants
7614 The following macro makes it possible to use features of Posix that are
7615 extensions to C, as well as platform extensions not defined by Posix.
7617 @anchor{AC_USE_SYSTEM_EXTENSIONS}
7618 @defmac AC_USE_SYSTEM_EXTENSIONS
7619 @acindex{USE_SYSTEM_EXTENSIONS}
7620 @cvindex _ALL_SOURCE
7621 @cvindex _GNU_SOURCE
7622 @cvindex _MINIX
7623 @cvindex _POSIX_1_SOURCE
7624 @cvindex _POSIX_PTHREAD_SEMANTICS
7625 @cvindex _POSIX_SOURCE
7626 @cvindex _TANDEM_SOURCE
7627 @cvindex __EXTENSIONS__
7628 This macro was introduced in Autoconf 2.60.  If possible, enable
7629 extensions to C or Posix on hosts that normally disable the extensions,
7630 typically due to standards-conformance namespace issues.  This should be
7631 called before any macros that run the C compiler.  The following
7632 preprocessor macros are defined where appropriate:
7634 @table @code
7635 @item _GNU_SOURCE
7636 Enable extensions on @acronym{GNU}/Linux.
7637 @item __EXTENSIONS__
7638 Enable general extensions on Solaris.
7639 @item _POSIX_PTHREAD_SEMANTICS
7640 Enable threading extensions on Solaris.
7641 @item _TANDEM_SOURCE
7642 Enable extensions for the @acronym{HP} NonStop platform.
7643 @item _ALL_SOURCE
7644 Enable extensions for @acronym{AIX} 3, and for Interix.
7645 @item _POSIX_SOURCE
7646 Enable Posix functions for Minix.
7647 @item _POSIX_1_SOURCE
7648 Enable additional Posix functions for Minix.
7649 @item _MINIX
7650 Identify Minix platform.  This particular preprocessor macro is
7651 obsolescent, and may be removed in a future release of Autoconf.
7652 @end table
7653 @end defmac
7656 @node Erlang Libraries
7657 @section Erlang Libraries
7658 @cindex Erlang, Library, checking
7660 The following macros check for an installation of Erlang/OTP, and for the
7661 presence of certain Erlang libraries.  All those macros require the
7662 configuration of an Erlang interpreter and an Erlang compiler
7663 (@pxref{Erlang Compiler and Interpreter}).
7665 @defmac AC_ERLANG_SUBST_ROOT_DIR
7666 @acindex{ERLANG_SUBST_ROOT_DIR}
7667 @ovindex ERLANG_ROOT_DIR
7669 Set the output variable @code{ERLANG_ROOT_DIR} to the path to the base
7670 directory in which Erlang/OTP is installed (as returned by Erlang's
7671 @code{code:root_dir/0} function).  The result of this test is cached if
7672 caching is enabled when running @command{configure}.
7673 @end defmac
7675 @defmac AC_ERLANG_SUBST_LIB_DIR
7676 @acindex{ERLANG_SUBST_LIB_DIR}
7677 @ovindex ERLANG_LIB_DIR
7679 Set the output variable @code{ERLANG_LIB_DIR} to the path of the library
7680 directory of Erlang/OTP (as returned by Erlang's
7681 @code{code:lib_dir/0} function), which subdirectories each contain an installed
7682 Erlang/OTP library.  The result of this test is cached if caching is enabled
7683 when running @command{configure}.
7684 @end defmac
7686 @defmac AC_ERLANG_CHECK_LIB (@var{library}, @ovar{action-if-found}, @
7687   @ovar{action-if-not-found})
7688 @acindex{ERLANG_CHECK_LIB}
7689 @ovindex ERLANG_LIB_DIR_@var{library}
7690 @ovindex ERLANG_LIB_VER_@var{library}
7692 Test whether the Erlang/OTP library @var{library} is installed by
7693 calling Erlang's @code{code:lib_dir/1} function.  The result of this
7694 test is cached if caching is enabled when running @command{configure}.
7695 @var{action-if-found} is a list of shell commands to run if the library
7696 is installed; @var{action-if-not-found} is a list of shell commands to
7697 run if it is not.  Additionally, if the library is installed, the output
7698 variable @samp{ERLANG_LIB_DIR_@var{library}} is set to the path to the
7699 library installation directory, and the output variable
7700 @samp{ERLANG_LIB_VER_@var{library}} is set to the version number that is
7701 part of the subdirectory name, if it is in the standard form
7702 (@code{@var{library}-@var{version}}).  If the directory name does not
7703 have a version part, @samp{ERLANG_LIB_VER_@var{library}} is set to the
7704 empty string.  If the library is not installed,
7705 @samp{ERLANG_LIB_DIR_@var{library}} and
7706 @samp{ERLANG_LIB_VER_@var{library}} are set to @code{"not found"}.  For
7707 example, to check if library @code{stdlib} is installed:
7709 @example
7710 AC_ERLANG_CHECK_LIB([stdlib],
7711   [echo "stdlib version \"$ERLANG_LIB_VER_stdlib\""
7712    echo "is installed in \"$ERLANG_LIB_DIR_stdlib\""],
7713   [AC_MSG_ERROR([stdlib was not found!])])
7714 @end example
7715 @end defmac
7717 In addition to the above macros, which test installed Erlang libraries, the
7718 following macros determine the paths to the directories into which newly built
7719 Erlang libraries are to be installed:
7721 @defmac AC_ERLANG_SUBST_INSTALL_LIB_DIR
7722 @acindex{ERLANG_SUBST_INSTALL_LIB_DIR}
7723 @ovindex ERLANG_INSTALL_LIB_DIR
7725 Set the @code{ERLANG_INSTALL_LIB_DIR} output variable to the directory into
7726 which every built Erlang library should be installed in a separate
7727 subdirectory.
7728 If this variable is not set in the environment when @command{configure} runs,
7729 its default value is @code{$ERLANG_LIB_DIR}, which value is set by the
7730 @code{AC_ERLANG_SUBST_LIB_DIR} macro.
7731 @end defmac
7733 @defmac AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR (@var{library}, @var{version})
7734 @acindex{ERLANG_SUBST_INSTALL_LIB_SUBDIR}
7735 @ovindex ERLANG_INSTALL_LIB_DIR_@var{library}
7737 Set the @samp{ERLANG_INSTALL_LIB_DIR_@var{library}} output variable to the
7738 directory into which the built Erlang library @var{library} version
7739 @var{version} should be installed.  If this variable is not set in the
7740 environment when @command{configure} runs, its default value is
7741 @samp{$ERLANG_INSTALL_LIB_DIR/@var{library}-@var{version}}, the value of the
7742 @code{ERLANG_INSTALL_LIB_DIR} variable being set by the
7743 @code{AC_ERLANG_SUBST_INSTALL_LIB_DIR} macro.
7744 @end defmac
7750 @c ========================================================= Writing Tests
7752 @node Writing Tests
7753 @chapter Writing Tests
7755 If the existing feature tests don't do something you need, you have to
7756 write new ones.  These macros are the building blocks.  They provide
7757 ways for other macros to check whether various kinds of features are
7758 available and report the results.
7760 This chapter contains some suggestions and some of the reasons why the
7761 existing tests are written the way they are.  You can also learn a lot
7762 about how to write Autoconf tests by looking at the existing ones.  If
7763 something goes wrong in one or more of the Autoconf tests, this
7764 information can help you understand the assumptions behind them, which
7765 might help you figure out how to best solve the problem.
7767 These macros check the output of the compiler system of the current
7768 language (@pxref{Language Choice}).  They do not cache the results of
7769 their tests for future use (@pxref{Caching Results}), because they don't
7770 know enough about the information they are checking for to generate a
7771 cache variable name.  They also do not print any messages, for the same
7772 reason.  The checks for particular kinds of features call these macros
7773 and do cache their results and print messages about what they're
7774 checking for.
7776 When you write a feature test that could be applicable to more than one
7777 software package, the best thing to do is encapsulate it in a new macro.
7778 @xref{Writing Autoconf Macros}, for how to do that.
7780 @menu
7781 * Language Choice::             Selecting which language to use for testing
7782 * Writing Test Programs::       Forging source files for compilers
7783 * Running the Preprocessor::    Detecting preprocessor symbols
7784 * Running the Compiler::        Detecting language or header features
7785 * Running the Linker::          Detecting library features
7786 * Runtime::                     Testing for runtime features
7787 * Systemology::                 A zoology of operating systems
7788 * Multiple Cases::              Tests for several possible values
7789 @end menu
7791 @node Language Choice
7792 @section Language Choice
7793 @cindex Language
7795 Autoconf-generated @command{configure} scripts check for the C compiler and
7796 its features by default.  Packages that use other programming languages
7797 (maybe more than one, e.g., C and C++) need to test features of the
7798 compilers for the respective languages.  The following macros determine
7799 which programming language is used in the subsequent tests in
7800 @file{configure.ac}.
7802 @anchor{AC_LANG}
7803 @defmac AC_LANG (@var{language})
7804 Do compilation tests using the compiler, preprocessor, and file
7805 extensions for the specified @var{language}.
7807 Supported languages are:
7809 @table @samp
7810 @item C
7811 Do compilation tests using @code{CC} and @code{CPP} and use extension
7812 @file{.c} for test programs.  Use compilation flags: @code{CPPFLAGS} with
7813 @code{CPP}, and both @code{CPPFLAGS} and @code{CFLAGS} with @code{CC}.
7815 @item C++
7816 Do compilation tests using @code{CXX} and @code{CXXCPP} and use
7817 extension @file{.C} for test programs.  Use compilation flags:
7818 @code{CPPFLAGS} with @code{CXXCPP}, and both @code{CPPFLAGS} and
7819 @code{CXXFLAGS} with @code{CXX}.
7821 @item Fortran 77
7822 Do compilation tests using @code{F77} and use extension @file{.f} for
7823 test programs.  Use compilation flags: @code{FFLAGS}.
7825 @item Fortran
7826 Do compilation tests using @code{FC} and use extension @file{.f} (or
7827 whatever has been set by @code{AC_FC_SRCEXT}) for test programs.  Use
7828 compilation flags: @code{FCFLAGS}.
7830 @item Erlang
7831 @ovindex ERLC
7832 @ovindex ERL
7833 @ovindex ERLCFLAGS
7834 Compile and execute tests using @code{ERLC} and @code{ERL} and use extension
7835 @file{.erl} for test Erlang modules.  Use compilation flags: @code{ERLCFLAGS}.
7837 @item Objective C
7838 Do compilation tests using @code{OBJC} and @code{OBJCPP} and use
7839 extension @file{.m} for test programs.  Use compilation flags:
7840 @code{CPPFLAGS} with @code{OBJCPP}, and both @code{CPPFLAGS} and
7841 @code{OBJCFLAGS} with @code{OBJC}.
7842 @end table
7843 @end defmac
7845 @anchor{AC_LANG_PUSH}
7846 @defmac AC_LANG_PUSH (@var{language})
7847 @acindex{LANG_PUSH}
7848 Remember the current language (as set by @code{AC_LANG}) on a stack, and
7849 then select the @var{language}.  Use this macro and @code{AC_LANG_POP}
7850 in macros that need to temporarily switch to a particular language.
7851 @end defmac
7853 @defmac AC_LANG_POP (@ovar{language})
7854 @acindex{LANG_POP}
7855 Select the language that is saved on the top of the stack, as set by
7856 @code{AC_LANG_PUSH}, and remove it from the stack.
7858 If given, @var{language} specifies the language we just @emph{quit}.  It
7859 is a good idea to specify it when it's known (which should be the
7860 case@dots{}), since Autoconf detects inconsistencies.
7862 @example
7863 AC_LANG_PUSH([Fortran 77])
7864 # Perform some tests on Fortran 77.
7865 # @dots{}
7866 AC_LANG_POP([Fortran 77])
7867 @end example
7868 @end defmac
7870 @defmac AC_LANG_ASSERT (@var{language})
7871 @acindex{LANG_ASSERT} Check statically that the current language is
7872 @var{language}.  You should use this in your language specific macros
7873 to avoid that they be called with an inappropriate language.
7875 This macro runs only at @command{autoconf} time, and incurs no cost at
7876 @command{configure} time.  Sadly enough and because Autoconf is a two
7877 layer language @footnote{Because M4 is not aware of Sh code,
7878 especially conditionals, some optimizations that look nice statically
7879 may produce incorrect results at runtime.}, the macros
7880 @code{AC_LANG_PUSH} and @code{AC_LANG_POP} cannot be ``optimizing'',
7881 therefore as much as possible you ought to avoid using them to wrap
7882 your code, rather, require from the user to run the macro with a
7883 correct current language, and check it with @code{AC_LANG_ASSERT}.
7884 And anyway, that may help the user understand she is running a Fortran
7885 macro while expecting a result about her Fortran 77 compiler@dots{}
7886 @end defmac
7889 @defmac AC_REQUIRE_CPP
7890 @acindex{REQUIRE_CPP}
7891 Ensure that whichever preprocessor would currently be used for tests has
7892 been found.  Calls @code{AC_REQUIRE} (@pxref{Prerequisite Macros}) with an
7893 argument of either @code{AC_PROG_CPP} or @code{AC_PROG_CXXCPP},
7894 depending on which language is current.
7895 @end defmac
7898 @node Writing Test Programs
7899 @section Writing Test Programs
7901 Autoconf tests follow a common scheme: feed some program with some
7902 input, and most of the time, feed a compiler with some source file.
7903 This section is dedicated to these source samples.
7905 @menu
7906 * Guidelines::                  General rules for writing test programs
7907 * Test Functions::              Avoiding pitfalls in test programs
7908 * Generating Sources::          Source program boilerplate
7909 @end menu
7911 @node Guidelines
7912 @subsection Guidelines for Test Programs
7914 The most important rule to follow when writing testing samples is:
7916 @center @emph{Look for realism.}
7918 This motto means that testing samples must be written with the same
7919 strictness as real programs are written.  In particular, you should
7920 avoid ``shortcuts'' and simplifications.
7922 Don't just play with the preprocessor if you want to prepare a
7923 compilation.  For instance, using @command{cpp} to check whether a header is
7924 functional might let your @command{configure} accept a header which
7925 causes some @emph{compiler} error.  Do not hesitate to check a header with
7926 other headers included before, especially required headers.
7928 Make sure the symbols you use are properly defined, i.e., refrain for
7929 simply declaring a function yourself instead of including the proper
7930 header.
7932 Test programs should not write to standard output.  They
7933 should exit with status 0 if the test succeeds, and with status 1
7934 otherwise, so that success
7935 can be distinguished easily from a core dump or other failure;
7936 segmentation violations and other failures produce a nonzero exit
7937 status.  Unless you arrange for @code{exit} to be declared, test
7938 programs should @code{return}, not @code{exit}, from @code{main},
7939 because on many systems @code{exit} is not declared by default.
7941 Test programs can use @code{#if} or @code{#ifdef} to check the values of
7942 preprocessor macros defined by tests that have already run.  For
7943 example, if you call @code{AC_HEADER_STDBOOL}, then later on in
7944 @file{configure.ac} you can have a test program that includes
7945 @file{stdbool.h} conditionally:
7947 @example
7948 @group
7949 #ifdef HAVE_STDBOOL_H
7950 # include <stdbool.h>
7951 #endif
7952 @end group
7953 @end example
7955 Both @code{#if HAVE_STDBOOL_H} and @code{#ifdef HAVE_STDBOOL_H} will
7956 work with any standard C compiler.  Some developers prefer @code{#if}
7957 because it is easier to read, while others prefer @code{#ifdef} because
7958 it avoids diagnostics with picky compilers like @acronym{GCC} with the
7959 @option{-Wundef} option.
7961 If a test program needs to use or create a data file, give it a name
7962 that starts with @file{conftest}, such as @file{conftest.data}.  The
7963 @command{configure} script cleans up by running @samp{rm -f -r conftest*}
7964 after running test programs and if the script is interrupted.
7966 @node Test Functions
7967 @subsection Test Functions
7969 These days it's safe to assume support for function prototypes
7970 (introduced in C89).
7972 Functions that test programs declare should also be conditionalized for
7973 C++, which requires @samp{extern "C"} prototypes.  Make sure to not
7974 include any header files containing clashing prototypes.
7976 @example
7977 #ifdef __cplusplus
7978 extern "C"
7979 #endif
7980 void *valloc (size_t);
7981 @end example
7983 If a test program calls a function with invalid parameters (just to see
7984 whether it exists), organize the program to ensure that it never invokes
7985 that function.  You can do this by calling it in another function that is
7986 never invoked.  You can't do it by putting it after a call to
7987 @code{exit}, because @acronym{GCC} version 2 knows that @code{exit}
7988 never returns
7989 and optimizes out any code that follows it in the same block.
7991 If you include any header files, be sure to call the functions
7992 relevant to them with the correct number of arguments, even if they are
7993 just 0, to avoid compilation errors due to prototypes.  @acronym{GCC}
7994 version 2
7995 has internal prototypes for several functions that it automatically
7996 inlines; for example, @code{memcpy}.  To avoid errors when checking for
7997 them, either pass them the correct number of arguments or redeclare them
7998 with a different return type (such as @code{char}).
8001 @node Generating Sources
8002 @subsection Generating Sources
8004 Autoconf provides a set of macros that can be used to generate test
8005 source files.  They are written to be language generic, i.e., they
8006 actually depend on the current language (@pxref{Language Choice}) to
8007 ``format'' the output properly.
8010 @defmac AC_LANG_CONFTEST (@var{source})
8011 @acindex{LANG_CONFTEST}
8012 Save the @var{source} text in the current test source file:
8013 @file{conftest.@var{extension}} where the @var{extension} depends on the
8014 current language.
8016 Note that the @var{source} is evaluated exactly once, like regular
8017 Autoconf macro arguments, and therefore (i) you may pass a macro
8018 invocation, (ii) if not, be sure to double quote if needed.
8019 @end defmac
8021 @defmac AC_LANG_SOURCE (@var{source})
8022 @acindex{LANG_SOURCE}
8023 Expands into the @var{source}, with the definition of
8024 all the @code{AC_DEFINE} performed so far.
8025 @end defmac
8027 For instance executing (observe the double quotation!):
8029 @example
8030 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
8031 AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
8032   [Greetings string.])
8033 AC_LANG(C)
8034 AC_LANG_CONFTEST(
8035    [AC_LANG_SOURCE([[const char hw[] = "Hello, World\n";]])])
8036 gcc -E -dD -o - conftest.c
8037 @end example
8039 @noindent
8040 results in:
8042 @example
8043 @dots{}
8044 # 1 "conftest.c"
8046 #define PACKAGE_NAME "Hello"
8047 #define PACKAGE_TARNAME "hello"
8048 #define PACKAGE_VERSION "1.0"
8049 #define PACKAGE_STRING "Hello 1.0"
8050 #define PACKAGE_BUGREPORT "bug-hello@@example.org"
8051 #define HELLO_WORLD "Hello, World\n"
8053 const char hw[] = "Hello, World\n";
8054 @end example
8056 When the test language is Fortran or Erlang, the @code{AC_DEFINE} definitions
8057 are not automatically translated into constants in the source code by this
8058 macro.
8060 @defmac AC_LANG_PROGRAM (@var{prologue}, @var{body})
8061 @acindex{LANG_PROGRAM}
8062 Expands into a source file which consists of the @var{prologue}, and
8063 then @var{body} as body of the main function (e.g., @code{main} in
8064 C).  Since it uses @code{AC_LANG_SOURCE}, the features of the latter are
8065 available.
8066 @end defmac
8068 For instance:
8070 @example
8071 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
8072 AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
8073   [Greetings string.])
8074 AC_LANG_CONFTEST(
8075 [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
8076                  [[fputs (hw, stdout);]])])
8077 gcc -E -dD -o - conftest.c
8078 @end example
8080 @noindent
8081 results in:
8083 @example
8084 @dots{}
8085 # 1 "conftest.c"
8087 #define PACKAGE_NAME "Hello"
8088 #define PACKAGE_TARNAME "hello"
8089 #define PACKAGE_VERSION "1.0"
8090 #define PACKAGE_STRING "Hello 1.0"
8091 #define PACKAGE_BUGREPORT "bug-hello@@example.org"
8092 #define HELLO_WORLD "Hello, World\n"
8094 const char hw[] = "Hello, World\n";
8096 main ()
8098 fputs (hw, stdout);
8099   ;
8100   return 0;
8102 @end example
8104 In Erlang tests, the created source file is that of an Erlang module called
8105 @code{conftest} (@file{conftest.erl}).  This module defines and exports
8106 at least
8107 one @code{start/0} function, which is called to perform the test.  The
8108 @var{prologue} is optional code that is inserted between the module header and
8109 the @code{start/0} function definition.  @var{body} is the body of the
8110 @code{start/0} function without the final period (@pxref{Runtime}, about
8111 constraints on this function's behavior).
8113 For instance:
8115 @example
8116 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
8117 AC_LANG(Erlang)
8118 AC_LANG_CONFTEST(
8119 [AC_LANG_PROGRAM([[-define(HELLO_WORLD, "Hello, world!").]],
8120                  [[io:format("~s~n", [?HELLO_WORLD])]])])
8121 cat conftest.erl
8122 @end example
8124 @noindent
8125 results in:
8127 @example
8128 -module(conftest).
8129 -export([start/0]).
8130 -define(HELLO_WORLD, "Hello, world!").
8131 start() ->
8132 io:format("~s~n", [?HELLO_WORLD])
8134 @end example
8136 @defmac AC_LANG_CALL (@var{prologue}, @var{function})
8137 @acindex{LANG_CALL}
8138 Expands into a source file which consists of the @var{prologue}, and
8139 then a call to the @var{function} as body of the main function (e.g.,
8140 @code{main} in C).  Since it uses @code{AC_LANG_PROGRAM}, the feature
8141 of the latter are available.
8143 This function will probably be replaced in the future by a version
8144 which would enable specifying the arguments.  The use of this macro is
8145 not encouraged, as it violates strongly the typing system.
8147 This macro cannot be used for Erlang tests.
8148 @end defmac
8150 @defmac AC_LANG_FUNC_LINK_TRY (@var{function})
8151 @acindex{LANG_FUNC_LINK_TRY}
8152 Expands into a source file which uses the @var{function} in the body of
8153 the main function (e.g., @code{main} in C).  Since it uses
8154 @code{AC_LANG_PROGRAM}, the features of the latter are available.
8156 As @code{AC_LANG_CALL}, this macro is documented only for completeness.
8157 It is considered to be severely broken, and in the future will be
8158 removed in favor of actual function calls (with properly typed
8159 arguments).
8161 This macro cannot be used for Erlang tests.
8162 @end defmac
8164 @node Running the Preprocessor
8165 @section Running the Preprocessor
8167 Sometimes one might need to run the preprocessor on some source file.
8168 @emph{Usually it is a bad idea}, as you typically need to @emph{compile}
8169 your project, not merely run the preprocessor on it; therefore you
8170 certainly want to run the compiler, not the preprocessor.  Resist the
8171 temptation of following the easiest path.
8173 Nevertheless, if you need to run the preprocessor, then use
8174 @code{AC_PREPROC_IFELSE}.
8176 The macros described in this section cannot be used for tests in Erlang or
8177 Fortran, since those languages require no preprocessor.
8179 @anchor{AC_PREPROC_IFELSE}
8180 @defmac AC_PREPROC_IFELSE (@var{input}, @ovar{action-if-true}, @
8181   @ovar{action-if-false})
8182 @acindex{PREPROC_IFELSE}
8183 Run the preprocessor of the current language (@pxref{Language Choice})
8184 on the @var{input}, run the shell commands @var{action-if-true} on
8185 success, @var{action-if-false} otherwise.  The @var{input} can be made
8186 by @code{AC_LANG_PROGRAM} and friends.
8188 This macro uses @code{CPPFLAGS}, but not @code{CFLAGS}, because
8189 @option{-g}, @option{-O}, etc.@: are not valid options to many C
8190 preprocessors.
8192 It is customary to report unexpected failures with
8193 @code{AC_MSG_FAILURE}.
8194 @end defmac
8196 For instance:
8198 @example
8199 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
8200 AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
8201   [Greetings string.])
8202 AC_PREPROC_IFELSE(
8203    [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
8204                     [[fputs (hw, stdout);]])],
8205    [AC_MSG_RESULT([OK])],
8206    [AC_MSG_FAILURE([unexpected preprocessor failure])])
8207 @end example
8209 @noindent
8210 results in:
8212 @example
8213 checking for gcc... gcc
8214 checking for C compiler default output file name... a.out
8215 checking whether the C compiler works... yes
8216 checking whether we are cross compiling... no
8217 checking for suffix of executables...
8218 checking for suffix of object files... o
8219 checking whether we are using the GNU C compiler... yes
8220 checking whether gcc accepts -g... yes
8221 checking for gcc option to accept ISO C89... none needed
8222 checking how to run the C preprocessor... gcc -E
8224 @end example
8226 @sp 1
8228 The macro @code{AC_TRY_CPP} (@pxref{Obsolete Macros}) used to play the
8229 role of @code{AC_PREPROC_IFELSE}, but double quotes its argument, making
8230 it impossible to use it to elaborate sources.  You are encouraged to
8231 get rid of your old use of the macro @code{AC_TRY_CPP} in favor of
8232 @code{AC_PREPROC_IFELSE}, but, in the first place, are you sure you need
8233 to run the @emph{preprocessor} and not the compiler?
8235 @anchor{AC_EGREP_HEADER}
8236 @defmac AC_EGREP_HEADER (@var{pattern}, @var{header-file}, @
8237   @var{action-if-found}, @ovar{action-if-not-found})
8238 @acindex{EGREP_HEADER}
8239 If the output of running the preprocessor on the system header file
8240 @var{header-file} matches the extended regular expression
8241 @var{pattern}, execute shell commands @var{action-if-found}, otherwise
8242 execute @var{action-if-not-found}.
8243 @end defmac
8245 @anchor{AC_EGREP_CPP}
8246 @defmac AC_EGREP_CPP (@var{pattern}, @var{program}, @
8247   @ovar{action-if-found}, @ovar{action-if-not-found})
8248 @acindex{EGREP_CPP}
8249 @var{program} is the text of a C or C++ program, on which shell
8250 variable, back quote, and backslash substitutions are performed.  If the
8251 output of running the preprocessor on @var{program} matches the
8252 extended regular expression @var{pattern}, execute shell commands
8253 @var{action-if-found}, otherwise execute @var{action-if-not-found}.
8254 @end defmac
8258 @node Running the Compiler
8259 @section Running the Compiler
8261 To check for a syntax feature of the current language's (@pxref{Language
8262 Choice}) compiler, such as whether it recognizes a certain keyword, or
8263 simply to try some library feature, use @code{AC_COMPILE_IFELSE} to try
8264 to compile a small program that uses that feature.
8266 @defmac AC_COMPILE_IFELSE (@var{input}, @ovar{action-if-true}, @
8267   @ovar{action-if-false})
8268 @acindex{COMPILE_IFELSE}
8269 Run the compiler and compilation flags of the current language
8270 (@pxref{Language Choice}) on the @var{input}, run the shell commands
8271 @var{action-if-true} on success, @var{action-if-false} otherwise.  The
8272 @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
8274 It is customary to report unexpected failures with
8275 @code{AC_MSG_FAILURE}.  This macro does not try to link; use
8276 @code{AC_LINK_IFELSE} if you need to do that (@pxref{Running the
8277 Linker}).
8278 @end defmac
8280 @ovindex ERL
8281 For tests in Erlang, the @var{input} must be the source code of a module named
8282 @code{conftest}.  @code{AC_COMPILE_IFELSE} generates a @file{conftest.beam}
8283 file that can be interpreted by the Erlang virtual machine (@code{ERL}).  It is
8284 recommended to use @code{AC_LANG_PROGRAM} to specify the test program,
8285 to ensure that the Erlang module has the right name.
8287 @node Running the Linker
8288 @section Running the Linker
8290 To check for a library, a function, or a global variable, Autoconf
8291 @command{configure} scripts try to compile and link a small program that
8292 uses it.  This is unlike Metaconfig, which by default uses @code{nm} or
8293 @code{ar} on the C library to try to figure out which functions are
8294 available.  Trying to link with the function is usually a more reliable
8295 approach because it avoids dealing with the variations in the options
8296 and output formats of @code{nm} and @code{ar} and in the location of the
8297 standard libraries.  It also allows configuring for cross-compilation or
8298 checking a function's runtime behavior if needed.  On the other hand,
8299 it can be slower than scanning the libraries once, but accuracy is more
8300 important than speed.
8302 @code{AC_LINK_IFELSE} is used to compile test programs to test for
8303 functions and global variables.  It is also used by @code{AC_CHECK_LIB}
8304 to check for libraries (@pxref{Libraries}), by adding the library being
8305 checked for to @code{LIBS} temporarily and trying to link a small
8306 program.
8308 @anchor{AC_LINK_IFELSE}
8309 @defmac AC_LINK_IFELSE (@var{input}, @ovar{action-if-true}, @
8310   @ovar{action-if-false})
8311 @acindex{LINK_IFELSE}
8312 Run the compiler (and compilation flags) and the linker of the current
8313 language (@pxref{Language Choice}) on the @var{input}, run the shell
8314 commands @var{action-if-true} on success, @var{action-if-false}
8315 otherwise.  The @var{input} can be made by @code{AC_LANG_PROGRAM} and
8316 friends.
8318 @code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
8319 current compilation flags.
8321 It is customary to report unexpected failures with
8322 @code{AC_MSG_FAILURE}.  This macro does not try to execute the program;
8323 use @code{AC_RUN_IFELSE} if you need to do that (@pxref{Runtime}).
8324 @end defmac
8326 The @code{AC_LINK_IFELSE} macro cannot be used for Erlang tests, since Erlang
8327 programs are interpreted and do not require linking.
8331 @node Runtime
8332 @section Checking Runtime Behavior
8334 Sometimes you need to find out how a system performs at runtime, such
8335 as whether a given function has a certain capability or bug.  If you
8336 can, make such checks when your program runs instead of when it is
8337 configured.  You can check for things like the machine's endianness when
8338 your program initializes itself.
8340 If you really need to test for a runtime behavior while configuring,
8341 you can write a test program to determine the result, and compile and
8342 run it using @code{AC_RUN_IFELSE}.  Avoid running test programs if
8343 possible, because this prevents people from configuring your package for
8344 cross-compiling.
8346 @anchor{AC_RUN_IFELSE}
8347 @defmac AC_RUN_IFELSE (@var{input}, @ovar{action-if-true}, @
8348   @ovar{action-if-false}, @ovar{action-if-cross-compiling})
8349 @acindex{RUN_IFELSE}
8350 If @var{program} compiles and links successfully and returns an exit
8351 status of 0 when executed, run shell commands @var{action-if-true}.
8352 Otherwise, run shell commands @var{action-if-false}.
8354 The @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
8355 @code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
8356 compilation flags of the current language (@pxref{Language Choice}).
8358 If the compiler being used does not produce executables that run on the
8359 system where @command{configure} is being run, then the test program is
8360 not run.  If the optional shell commands @var{action-if-cross-compiling}
8361 are given, they are run instead.  Otherwise, @command{configure} prints
8362 an error message and exits.
8364 In the @var{action-if-false} section, the failing exit status is
8365 available in the shell variable @samp{$?}.  This exit status might be
8366 that of a failed compilation, or it might be that of a failed program
8367 execution.
8369 It is customary to report unexpected failures with
8370 @code{AC_MSG_FAILURE}.
8371 @end defmac
8373 Try to provide a pessimistic default value to use when cross-compiling
8374 makes runtime tests impossible.  You do this by passing the optional
8375 last argument to @code{AC_RUN_IFELSE}.  @command{autoconf} prints a
8376 warning message when creating @command{configure} each time it
8377 encounters a call to @code{AC_RUN_IFELSE} with no
8378 @var{action-if-cross-compiling} argument given.  You may ignore the
8379 warning, though users cannot configure your package for
8380 cross-compiling.  A few of the macros distributed with Autoconf produce
8381 this warning message.
8383 To configure for cross-compiling you can also choose a value for those
8384 parameters based on the canonical system name (@pxref{Manual
8385 Configuration}).  Alternatively, set up a test results cache file with
8386 the correct values for the host system (@pxref{Caching Results}).
8388 @ovindex cross_compiling
8389 To provide a default for calls of @code{AC_RUN_IFELSE} that are embedded
8390 in other macros, including a few of the ones that come with Autoconf,
8391 you can test whether the shell variable @code{cross_compiling} is set to
8392 @samp{yes}, and then use an alternate method to get the results instead
8393 of calling the macros.
8395 It is also permissible to temporarily assign to @code{cross_compiling}
8396 in order to force tests to behave as though they are in a
8397 cross-compilation environment, particularly since this provides a way to
8398 test your @var{action-if-cross-compiling} even when you are not using a
8399 cross-compiler.
8401 @example
8402 # We temporarily set cross-compile mode to force AC_COMPUTE_INT
8403 # to use the slow link-only method
8404 save_cross_compiling=$cross_compiling
8405 cross_compiling=yes
8406 AC_COMPUTE_INT([@dots{}])
8407 cross_compiling=$save_cross_compiling
8408 @end example
8410 A C or C++ runtime test should be portable.
8411 @xref{Portable C and C++}.
8413 Erlang tests must exit themselves the Erlang VM by calling the @code{halt/1}
8414 function: the given status code is used to determine the success of the test
8415 (status is @code{0}) or its failure (status is different than @code{0}), as
8416 explained above.  It must be noted that data output through the standard output
8417 (e.g., using @code{io:format/2}) may be truncated when halting the VM.
8418 Therefore, if a test must output configuration information, it is recommended
8419 to create and to output data into the temporary file named @file{conftest.out},
8420 using the functions of module @code{file}.  The @code{conftest.out} file is
8421 automatically deleted by the @code{AC_RUN_IFELSE} macro.  For instance, a
8422 simplified implementation of Autoconf's @code{AC_ERLANG_SUBST_LIB_DIR}
8423 macro is:
8425 @example
8426 AC_INIT([LibdirTest], [1.0], [bug-libdirtest@@example.org])
8427 AC_ERLANG_NEED_ERL
8428 AC_LANG(Erlang)
8429 AC_RUN_IFELSE(
8430   [AC_LANG_PROGRAM([], [dnl
8431     file:write_file("conftest.out", code:lib_dir()),
8432     halt(0)])],
8433   [echo "code:lib_dir() returned: `cat conftest.out`"],
8434   [AC_MSG_FAILURE([test Erlang program execution failed])])
8435 @end example
8438 @node Systemology
8439 @section Systemology
8440 @cindex Systemology
8442 This section aims at presenting some systems and pointers to
8443 documentation.  It may help you addressing particular problems reported
8444 by users.
8446 @uref{http://www.opengroup.org/susv3, Posix-conforming systems} are
8447 derived from the @uref{http://www.bell-labs.com/history/unix/, Unix
8448 operating system}.
8450 The @uref{http://bhami.com/rosetta.html, Rosetta Stone for Unix}
8451 contains a table correlating the features of various Posix-conforming
8452 systems.  @uref{http://www.levenez.com/unix/, Unix History} is a
8453 simplified diagram of how many Unix systems were derived from each
8454 other.
8456 @uref{http://heirloom.sourceforge.net/, The Heirloom Project}
8457 provides some variants of traditional implementations of Unix utilities.
8459 @table @asis
8460 @item Darwin
8461 @cindex Darwin
8462 Darwin is also known as Mac OS X@.  Beware that the file system @emph{can} be
8463 case-preserving, but case insensitive.  This can cause nasty problems,
8464 since for instance the installation attempt for a package having an
8465 @file{INSTALL} file can result in @samp{make install} report that
8466 nothing was to be done!
8468 That's all dependent on whether the file system is a UFS (case
8469 sensitive) or HFS+ (case preserving).  By default Apple wants you to
8470 install the OS on HFS+.  Unfortunately, there are some pieces of
8471 software which really need to be built on UFS@.  We may want to rebuild
8472 Darwin to have both UFS and HFS+ available (and put the /local/build
8473 tree on the UFS).
8475 @item @acronym{QNX} 4.25
8476 @cindex @acronym{QNX} 4.25
8477 @c FIXME: Please, if you feel like writing something more precise,
8478 @c it'd be great.  In particular, I can't understand the difference with
8479 @c QNX Neutrino.
8480 @acronym{QNX} is a realtime operating system running on Intel architecture
8481 meant to be scalable from the small embedded systems to the hundred
8482 processor super-computer.  It claims to be Posix certified.  More
8483 information is available on the
8484 @uref{http://www.qnx.com/, @acronym{QNX} home page}.
8486 @item Tru64
8487 @cindex Tru64
8488 @uref{http://h30097.www3.hp.com/@/docs/,
8489 Documentation of several versions of Tru64} is available in different
8490 formats.
8492 @item Unix version 7
8493 @cindex Unix version 7
8494 @cindex V7
8495 Officially this was called the ``Seventh Edition'' of ``the @sc{unix}
8496 time-sharing system'' but we use the more-common name ``Unix version 7''.
8497 Documentation is available in the
8498 @uref{http://plan9.bell-labs.com/@/7thEdMan/, Unix Seventh Edition Manual}.
8499 Previous versions of Unix are called ``Unix version 6'', etc., but
8500 they were not as widely used.
8501 @end table
8504 @node Multiple Cases
8505 @section Multiple Cases
8507 Some operations are accomplished in several possible ways, depending on
8508 the OS variant.  Checking for them essentially requires a ``case
8509 statement''.  Autoconf does not directly provide one; however, it is
8510 easy to simulate by using a shell variable to keep track of whether a
8511 way to perform the operation has been found yet.
8513 Here is an example that uses the shell variable @code{fstype} to keep
8514 track of whether the remaining cases need to be checked.
8516 @example
8517 @group
8518 AC_MSG_CHECKING([how to get file system type])
8519 fstype=no
8520 # The order of these tests is important.
8521 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statvfs.h>
8522 #include <sys/fstyp.h>]])],
8523                   [AC_DEFINE([FSTYPE_STATVFS], [1],
8524                      [Define if statvfs exists.])
8525                    fstype=SVR4])
8526 if test $fstype = no; then
8527   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
8528 #include <sys/fstyp.h>]])],
8529                   [AC_DEFINE([FSTYPE_USG_STATFS], [1],
8530                      [Define if USG statfs.])
8531                    fstype=SVR3])
8533 if test $fstype = no; then
8534   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
8535 #include <sys/vmount.h>]])]),
8536                   [AC_DEFINE([FSTYPE_AIX_STATFS], [1],
8537                      [Define if AIX statfs.])
8538                    fstype=AIX])
8540 # (more cases omitted here)
8541 AC_MSG_RESULT([$fstype])
8542 @end group
8543 @end example
8545 @c ====================================================== Results of Tests.
8547 @node Results
8548 @chapter Results of Tests
8550 Once @command{configure} has determined whether a feature exists, what can
8551 it do to record that information?  There are four sorts of things it can
8552 do: define a C preprocessor symbol, set a variable in the output files,
8553 save the result in a cache file for future @command{configure} runs, and
8554 print a message letting the user know the result of the test.
8556 @menu
8557 * Defining Symbols::            Defining C preprocessor symbols
8558 * Setting Output Variables::    Replacing variables in output files
8559 * Special Chars in Variables::  Characters to beware of in variables
8560 * Caching Results::             Speeding up subsequent @command{configure} runs
8561 * Printing Messages::           Notifying @command{configure} users
8562 @end menu
8564 @node Defining Symbols
8565 @section Defining C Preprocessor Symbols
8567 A common action to take in response to a feature test is to define a C
8568 preprocessor symbol indicating the results of the test.  That is done by
8569 calling @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}.
8571 By default, @code{AC_OUTPUT} places the symbols defined by these macros
8572 into the output variable @code{DEFS}, which contains an option
8573 @option{-D@var{symbol}=@var{value}} for each symbol defined.  Unlike in
8574 Autoconf version 1, there is no variable @code{DEFS} defined while
8575 @command{configure} is running.  To check whether Autoconf macros have
8576 already defined a certain C preprocessor symbol, test the value of the
8577 appropriate cache variable, as in this example:
8579 @example
8580 AC_CHECK_FUNC([vprintf], [AC_DEFINE([HAVE_VPRINTF], [1],
8581                           [Define if vprintf exists.])])
8582 if test "$ac_cv_func_vprintf" != yes; then
8583   AC_CHECK_FUNC([_doprnt], [AC_DEFINE([HAVE_DOPRNT], [1],
8584                             [Define if _doprnt exists.])])
8586 @end example
8588 If @code{AC_CONFIG_HEADERS} has been called, then instead of creating
8589 @code{DEFS}, @code{AC_OUTPUT} creates a header file by substituting the
8590 correct values into @code{#define} statements in a template file.
8591 @xref{Configuration Headers}, for more information about this kind of
8592 output.
8594 @defmac AC_DEFINE (@var{variable}, @var{value}, @ovar{description})
8595 @defmacx AC_DEFINE (@var{variable})
8596 @cvindex @var{variable}
8597 @acindex{DEFINE}
8598 Define @var{variable} to @var{value} (verbatim), by defining a C
8599 preprocessor macro for @var{variable}.  @var{variable} should be a C
8600 identifier, optionally suffixed by a parenthesized argument list to
8601 define a C preprocessor macro with arguments.  The macro argument list,
8602 if present, should be a comma-separated list of C identifiers, possibly
8603 terminated by an ellipsis @samp{...} if C99 syntax is employed.
8604 @var{variable} should not contain comments, white space, trigraphs,
8605 backslash-newlines, universal character names, or non-@acronym{ASCII}
8606 characters.
8608 @var{value} may contain backslash-escaped newlines, which will be
8609 preserved if you use @code{AC_CONFIG_HEADERS} but flattened if passed
8610 via @code{@@DEFS@@} (with no effect on the compilation, since the
8611 preprocessor sees only one line in the first place).  @var{value} should
8612 not contain raw newlines.  If you are not using
8613 @code{AC_CONFIG_HEADERS}, @var{value} should not contain any @samp{#}
8614 characters, as @command{make} tends to eat them.  To use a shell
8615 variable, use @code{AC_DEFINE_UNQUOTED} instead.
8617 @var{description} is only useful if you are using
8618 @code{AC_CONFIG_HEADERS}.  In this case, @var{description} is put into
8619 the generated @file{config.h.in} as the comment before the macro define.
8620 The following example defines the C preprocessor variable
8621 @code{EQUATION} to be the string constant @samp{"$a > $b"}:
8623 @example
8624 AC_DEFINE([EQUATION], ["$a > $b"],
8625   [Equation string.])
8626 @end example
8628 If neither @var{value} nor @var{description} are given, then
8629 @var{value} defaults to 1 instead of to the empty string.  This is for
8630 backwards compatibility with older versions of Autoconf, but this usage
8631 is obsolescent and may be withdrawn in future versions of Autoconf.
8633 If the @var{variable} is a literal string, it is passed to
8634 @code{m4_pattern_allow} (@pxref{Forbidden Patterns}).
8636 If multiple @code{AC_DEFINE} statements are executed for the same
8637 @var{variable} name (not counting any parenthesized argument list),
8638 the last one wins.
8639 @end defmac
8641 @defmac AC_DEFINE_UNQUOTED (@var{variable}, @var{value}, @ovar{description})
8642 @defmacx AC_DEFINE_UNQUOTED (@var{variable})
8643 @acindex{DEFINE_UNQUOTED}
8644 @cvindex @var{variable}
8645 Like @code{AC_DEFINE}, but three shell expansions are
8646 performed---once---on @var{variable} and @var{value}: variable expansion
8647 (@samp{$}), command substitution (@samp{`}), and backslash escaping
8648 (@samp{\}).  Single and double quote characters in the value have no
8649 special meaning.  Use this macro instead of @code{AC_DEFINE} when
8650 @var{variable} or @var{value} is a shell variable.  Examples:
8652 @example
8653 AC_DEFINE_UNQUOTED([config_machfile], ["$machfile"],
8654   [Configuration machine file.])
8655 AC_DEFINE_UNQUOTED([GETGROUPS_T], [$ac_cv_type_getgroups],
8656   [getgroups return type.])
8657 AC_DEFINE_UNQUOTED([$ac_tr_hdr], [1],
8658   [Translated header name.])
8659 @end example
8660 @end defmac
8662 Due to a syntactical bizarreness of the Bourne shell, do not use
8663 semicolons to separate @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}
8664 calls from other macro calls or shell code; that can cause syntax errors
8665 in the resulting @command{configure} script.  Use either blanks or
8666 newlines.  That is, do this:
8668 @example
8669 AC_CHECK_HEADER([elf.h],
8670   [AC_DEFINE([SVR4], [1], [System V Release 4]) LIBS="-lelf $LIBS"])
8671 @end example
8673 @noindent
8674 or this:
8676 @example
8677 AC_CHECK_HEADER([elf.h],
8678   [AC_DEFINE([SVR4], [1], [System V Release 4])
8679    LIBS="-lelf $LIBS"])
8680 @end example
8682 @noindent
8683 instead of this:
8685 @example
8686 AC_CHECK_HEADER([elf.h],
8687   [AC_DEFINE([SVR4], [1], [System V Release 4]); LIBS="-lelf $LIBS"])
8688 @end example
8690 @node Setting Output Variables
8691 @section Setting Output Variables
8692 @cindex Output variables
8694 Another way to record the results of tests is to set @dfn{output
8695 variables}, which are shell variables whose values are substituted into
8696 files that @command{configure} outputs.  The two macros below create new
8697 output variables.  @xref{Preset Output Variables}, for a list of output
8698 variables that are always available.
8700 @defmac AC_SUBST (@var{variable}, @ovar{value})
8701 @acindex{SUBST}
8702 Create an output variable from a shell variable.  Make @code{AC_OUTPUT}
8703 substitute the variable @var{variable} into output files (typically one
8704 or more makefiles).  This means that @code{AC_OUTPUT}
8705 replaces instances of @samp{@@@var{variable}@@} in input files with the
8706 value that the shell variable @var{variable} has when @code{AC_OUTPUT}
8707 is called.  The value can contain any non-@code{NUL} character, including
8708 newline.
8709 Variable occurrences should not overlap: e.g., an input file should
8710 not contain @samp{@@@var{var1}@@@var{var2}@@} if @var{var1} and @var{var2}
8711 are variable names.
8712 The substituted value is not rescanned for more output variables;
8713 occurrences of @samp{@@@var{variable}@@} in the value are inserted
8714 literally into the output file.  (The algorithm uses the special marker
8715 @code{|#_!!_#|} internally, so neither the substituted value nor the
8716 output file may contain @code{|#_!!_#|}.)
8718 If @var{value} is given, in addition assign it to @var{variable}.
8720 The string @var{variable} is passed to @code{m4_pattern_allow}
8721 (@pxref{Forbidden Patterns}).
8722 @end defmac
8724 @defmac AC_SUBST_FILE (@var{variable})
8725 @acindex{SUBST_FILE}
8726 Another way to create an output variable from a shell variable.  Make
8727 @code{AC_OUTPUT} insert (without substitutions) the contents of the file
8728 named by shell variable @var{variable} into output files.  This means
8729 that @code{AC_OUTPUT} replaces instances of
8730 @samp{@@@var{variable}@@} in output files (such as @file{Makefile.in})
8731 with the contents of the file that the shell variable @var{variable}
8732 names when @code{AC_OUTPUT} is called.  Set the variable to
8733 @file{/dev/null} for cases that do not have a file to insert.
8734 This substitution occurs only when the @samp{@@@var{variable}@@} is on a
8735 line by itself, optionally surrounded by spaces and tabs.  The
8736 substitution replaces the whole line, including the spaces, tabs, and
8737 the terminating newline.
8739 This macro is useful for inserting makefile fragments containing
8740 special dependencies or other @code{make} directives for particular host
8741 or target types into makefiles.  For example, @file{configure.ac}
8742 could contain:
8744 @example
8745 AC_SUBST_FILE([host_frag])
8746 host_frag=$srcdir/conf/sun4.mh
8747 @end example
8749 @noindent
8750 and then a @file{Makefile.in} could contain:
8752 @example
8753 @@host_frag@@
8754 @end example
8756 The string @var{variable} is passed to @code{m4_pattern_allow}
8757 (@pxref{Forbidden Patterns}).
8758 @end defmac
8760 @cindex Precious Variable
8761 @cindex Variable, Precious
8762 Running @command{configure} in varying environments can be extremely
8763 dangerous.  If for instance the user runs @samp{CC=bizarre-cc
8764 ./configure}, then the cache, @file{config.h}, and many other output
8765 files depend upon @command{bizarre-cc} being the C compiler.  If
8766 for some reason the user runs @command{./configure} again, or if it is
8767 run via @samp{./config.status --recheck}, (@xref{Automatic Remaking},
8768 and @pxref{config.status Invocation}), then the configuration can be
8769 inconsistent, composed of results depending upon two different
8770 compilers.
8772 Environment variables that affect this situation, such as @samp{CC}
8773 above, are called @dfn{precious variables}, and can be declared as such
8774 by @code{AC_ARG_VAR}.
8776 @defmac AC_ARG_VAR (@var{variable}, @var{description})
8777 @acindex{ARG_VAR}
8778 Declare @var{variable} is a precious variable, and include its
8779 @var{description} in the variable section of @samp{./configure --help}.
8781 Being precious means that
8782 @itemize @minus
8783 @item
8784 @var{variable} is substituted via @code{AC_SUBST}.
8786 @item
8787 The value of @var{variable} when @command{configure} was launched is
8788 saved in the cache, including if it was not specified on the command
8789 line but via the environment.  Indeed, while @command{configure} can
8790 notice the definition of @code{CC} in @samp{./configure CC=bizarre-cc},
8791 it is impossible to notice it in @samp{CC=bizarre-cc ./configure},
8792 which, unfortunately, is what most users do.
8794 We emphasize that it is the @emph{initial} value of @var{variable} which
8795 is saved, not that found during the execution of @command{configure}.
8796 Indeed, specifying @samp{./configure FOO=foo} and letting
8797 @samp{./configure} guess that @code{FOO} is @code{foo} can be two
8798 different things.
8800 @item
8801 @var{variable} is checked for consistency between two
8802 @command{configure} runs.  For instance:
8804 @example
8805 $ @kbd{./configure --silent --config-cache}
8806 $ @kbd{CC=cc ./configure --silent --config-cache}
8807 configure: error: `CC' was not set in the previous run
8808 configure: error: changes in the environment can compromise \
8809 the build
8810 configure: error: run `make distclean' and/or \
8811 `rm config.cache' and start over
8812 @end example
8814 @noindent
8815 and similarly if the variable is unset, or if its content is changed.
8816 If the content has white space changes only, then the error is degraded
8817 to a warning only, but the old value is reused.
8819 @item
8820 @var{variable} is kept during automatic reconfiguration
8821 (@pxref{config.status Invocation}) as if it had been passed as a command
8822 line argument, including when no cache is used:
8824 @example
8825 $ @kbd{CC=/usr/bin/cc ./configure var=raboof --silent}
8826 $ @kbd{./config.status --recheck}
8827 running CONFIG_SHELL=/bin/sh /bin/sh ./configure var=raboof \
8828   CC=/usr/bin/cc  --no-create --no-recursion
8829 @end example
8830 @end itemize
8831 @end defmac
8833 @node Special Chars in Variables
8834 @section Special Characters in Output Variables
8835 @cindex Output variables, special characters in
8837 Many output variables are intended to be evaluated both by
8838 @command{make} and by the shell.  Some characters are expanded
8839 differently in these two contexts, so to avoid confusion these
8840 variables' values should not contain any of the following characters:
8842 @example
8843 " # $ & ' ( ) * ; < > ? [ \ ^ ` |
8844 @end example
8846 Also, these variables' values should neither contain newlines, nor start
8847 with @samp{~}, nor contain white space or @samp{:} immediately followed
8848 by @samp{~}.  The values can contain nonempty sequences of white space
8849 characters like tabs and spaces, but each such sequence might
8850 arbitrarily be replaced by a single space during substitution.
8852 These restrictions apply both to the values that @command{configure}
8853 computes, and to the values set directly by the user.  For example, the
8854 following invocations of @command{configure} are problematic, since they
8855 attempt to use special characters within @code{CPPFLAGS} and white space
8856 within @code{$(srcdir)}:
8858 @example
8859 CPPFLAGS='-DOUCH="&\"#$*?"' '../My Source/ouch-1.0/configure'
8861 '../My Source/ouch-1.0/configure' CPPFLAGS='-DOUCH="&\"#$*?"'
8862 @end example
8864 @node Caching Results
8865 @section Caching Results
8866 @cindex Cache
8868 To avoid checking for the same features repeatedly in various
8869 @command{configure} scripts (or in repeated runs of one script),
8870 @command{configure} can optionally save the results of many checks in a
8871 @dfn{cache file} (@pxref{Cache Files}).  If a @command{configure} script
8872 runs with caching enabled and finds a cache file, it reads the results
8873 of previous runs from the cache and avoids rerunning those checks.  As a
8874 result, @command{configure} can then run much faster than if it had to
8875 perform all of the checks every time.
8877 @defmac AC_CACHE_VAL (@var{cache-id}, @var{commands-to-set-it})
8878 @acindex{CACHE_VAL}
8879 Ensure that the results of the check identified by @var{cache-id} are
8880 available.  If the results of the check were in the cache file that was
8881 read, and @command{configure} was not given the @option{--quiet} or
8882 @option{--silent} option, print a message saying that the result was
8883 cached; otherwise, run the shell commands @var{commands-to-set-it}.  If
8884 the shell commands are run to determine the value, the value is
8885 saved in the cache file just before @command{configure} creates its output
8886 files.  @xref{Cache Variable Names}, for how to choose the name of the
8887 @var{cache-id} variable.
8889 The @var{commands-to-set-it} @emph{must have no side effects} except for
8890 setting the variable @var{cache-id}, see below.
8891 @end defmac
8893 @defmac AC_CACHE_CHECK (@var{message}, @var{cache-id}, @
8894   @var{commands-to-set-it})
8895 @acindex{CACHE_CHECK}
8896 A wrapper for @code{AC_CACHE_VAL} that takes care of printing the
8897 messages.  This macro provides a convenient shorthand for the most
8898 common way to use these macros.  It calls @code{AC_MSG_CHECKING} for
8899 @var{message}, then @code{AC_CACHE_VAL} with the @var{cache-id} and
8900 @var{commands} arguments, and @code{AC_MSG_RESULT} with @var{cache-id}.
8902 The @var{commands-to-set-it} @emph{must have no side effects} except for
8903 setting the variable @var{cache-id}, see below.
8904 @end defmac
8906 It is common to find buggy macros using @code{AC_CACHE_VAL} or
8907 @code{AC_CACHE_CHECK}, because people are tempted to call
8908 @code{AC_DEFINE} in the @var{commands-to-set-it}.  Instead, the code that
8909 @emph{follows} the call to @code{AC_CACHE_VAL} should call
8910 @code{AC_DEFINE}, by examining the value of the cache variable.  For
8911 instance, the following macro is broken:
8913 @example
8914 @group
8915 AC_DEFUN([AC_SHELL_TRUE],
8916 [AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
8917                 [my_cv_shell_true_works=no
8918                  (true) 2>/dev/null && my_cv_shell_true_works=yes
8919                  if test "$my_cv_shell_true_works" = yes; then
8920                    AC_DEFINE([TRUE_WORKS], [1],
8921                              [Define if `true(1)' works properly.])
8922                  fi])
8924 @end group
8925 @end example
8927 @noindent
8928 This fails if the cache is enabled: the second time this macro is run,
8929 @code{TRUE_WORKS} @emph{will not be defined}.  The proper implementation
8932 @example
8933 @group
8934 AC_DEFUN([AC_SHELL_TRUE],
8935 [AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
8936                 [my_cv_shell_true_works=no
8937                  (true) 2>/dev/null && my_cv_shell_true_works=yes])
8938  if test "$my_cv_shell_true_works" = yes; then
8939    AC_DEFINE([TRUE_WORKS], [1],
8940              [Define if `true(1)' works properly.])
8941  fi
8943 @end group
8944 @end example
8946 Also, @var{commands-to-set-it} should not print any messages, for
8947 example with @code{AC_MSG_CHECKING}; do that before calling
8948 @code{AC_CACHE_VAL}, so the messages are printed regardless of whether
8949 the results of the check are retrieved from the cache or determined by
8950 running the shell commands.
8952 @menu
8953 * Cache Variable Names::        Shell variables used in caches
8954 * Cache Files::                 Files @command{configure} uses for caching
8955 * Cache Checkpointing::         Loading and saving the cache file
8956 @end menu
8958 @node Cache Variable Names
8959 @subsection Cache Variable Names
8960 @cindex Cache variable
8962 The names of cache variables should have the following format:
8964 @example
8965 @var{package-prefix}_cv_@var{value-type}_@var{specific-value}_@ovar{additional-options}
8966 @end example
8968 @noindent
8969 for example, @samp{ac_cv_header_stat_broken} or
8970 @samp{ac_cv_prog_gcc_traditional}.  The parts of the variable name are:
8972 @table @asis
8973 @item @var{package-prefix}
8974 An abbreviation for your package or organization; the same prefix you
8975 begin local Autoconf macros with, except lowercase by convention.
8976 For cache values used by the distributed Autoconf macros, this value is
8977 @samp{ac}.
8979 @item @code{_cv_}
8980 Indicates that this shell variable is a cache value.  This string
8981 @emph{must} be present in the variable name, including the leading
8982 underscore.
8984 @item @var{value-type}
8985 A convention for classifying cache values, to produce a rational naming
8986 system.  The values used in Autoconf are listed in @ref{Macro Names}.
8988 @item @var{specific-value}
8989 Which member of the class of cache values this test applies to.
8990 For example, which function (@samp{alloca}), program (@samp{gcc}), or
8991 output variable (@samp{INSTALL}).
8993 @item @var{additional-options}
8994 Any particular behavior of the specific member that this test applies to.
8995 For example, @samp{broken} or @samp{set}.  This part of the name may
8996 be omitted if it does not apply.
8997 @end table
8999 The values assigned to cache variables may not contain newlines.
9000 Usually, their values are Boolean (@samp{yes} or @samp{no}) or the
9001 names of files or functions; so this is not an important restriction.
9003 @node Cache Files
9004 @subsection Cache Files
9006 A cache file is a shell script that caches the results of configure
9007 tests run on one system so they can be shared between configure scripts
9008 and configure runs.  It is not useful on other systems.  If its contents
9009 are invalid for some reason, the user may delete or edit it.
9011 By default, @command{configure} uses no cache file,
9012 to avoid problems caused by accidental
9013 use of stale cache files.
9015 To enable caching, @command{configure} accepts @option{--config-cache} (or
9016 @option{-C}) to cache results in the file @file{config.cache}.
9017 Alternatively, @option{--cache-file=@var{file}} specifies that
9018 @var{file} be the cache file.  The cache file is created if it does not
9019 exist already.  When @command{configure} calls @command{configure} scripts in
9020 subdirectories, it uses the @option{--cache-file} argument so that they
9021 share the same cache.  @xref{Subdirectories}, for information on
9022 configuring subdirectories with the @code{AC_CONFIG_SUBDIRS} macro.
9024 @file{config.status} only pays attention to the cache file if it is
9025 given the @option{--recheck} option, which makes it rerun
9026 @command{configure}.
9028 It is wrong to try to distribute cache files for particular system types.
9029 There is too much room for error in doing that, and too much
9030 administrative overhead in maintaining them.  For any features that
9031 can't be guessed automatically, use the standard method of the canonical
9032 system type and linking files (@pxref{Manual Configuration}).
9034 The site initialization script can specify a site-wide cache file to
9035 use, instead of the usual per-program cache.  In this case, the cache
9036 file gradually accumulates information whenever someone runs a new
9037 @command{configure} script.  (Running @command{configure} merges the new cache
9038 results with the existing cache file.)  This may cause problems,
9039 however, if the system configuration (e.g., the installed libraries or
9040 compilers) changes and the stale cache file is not deleted.
9042 @node Cache Checkpointing
9043 @subsection Cache Checkpointing
9045 If your configure script, or a macro called from @file{configure.ac}, happens
9046 to abort the configure process, it may be useful to checkpoint the cache
9047 a few times at key points using @code{AC_CACHE_SAVE}.  Doing so
9048 reduces the amount of time it takes to rerun the configure script with
9049 (hopefully) the error that caused the previous abort corrected.
9051 @c FIXME: Do we really want to document this guy?
9052 @defmac AC_CACHE_LOAD
9053 @acindex{CACHE_LOAD}
9054 Loads values from existing cache file, or creates a new cache file if a
9055 cache file is not found.  Called automatically from @code{AC_INIT}.
9056 @end defmac
9058 @defmac AC_CACHE_SAVE
9059 @acindex{CACHE_SAVE}
9060 Flushes all cached values to the cache file.  Called automatically from
9061 @code{AC_OUTPUT}, but it can be quite useful to call
9062 @code{AC_CACHE_SAVE} at key points in @file{configure.ac}.
9063 @end defmac
9065 For instance:
9067 @example
9068 @r{ @dots{} AC_INIT, etc. @dots{}}
9069 @group
9070 # Checks for programs.
9071 AC_PROG_CC
9072 AC_PROG_AWK
9073 @r{ @dots{} more program checks @dots{}}
9074 AC_CACHE_SAVE
9075 @end group
9077 @group
9078 # Checks for libraries.
9079 AC_CHECK_LIB([nsl], [gethostbyname])
9080 AC_CHECK_LIB([socket], [connect])
9081 @r{ @dots{} more lib checks @dots{}}
9082 AC_CACHE_SAVE
9083 @end group
9085 @group
9086 # Might abort@dots{}
9087 AM_PATH_GTK([1.0.2], [], [AC_MSG_ERROR([GTK not in path])])
9088 AM_PATH_GTKMM([0.9.5], [], [AC_MSG_ERROR([GTK not in path])])
9089 @end group
9090 @r{ @dots{} AC_OUTPUT, etc. @dots{}}
9091 @end example
9093 @node Printing Messages
9094 @section Printing Messages
9095 @cindex Messages, from @command{configure}
9097 @command{configure} scripts need to give users running them several kinds
9098 of information.  The following macros print messages in ways appropriate
9099 for each kind.  The arguments to all of them get enclosed in shell
9100 double quotes, so the shell performs variable and back-quote
9101 substitution on them.
9103 These macros are all wrappers around the @command{echo} shell command.
9104 They direct output to the appropriate file descriptor (@pxref{File
9105 Descriptor Macros}).
9106 @command{configure} scripts should rarely need to run @command{echo} directly
9107 to print messages for the user.  Using these macros makes it easy to
9108 change how and when each kind of message is printed; such changes need
9109 only be made to the macro definitions and all the callers change
9110 automatically.
9112 To diagnose static issues, i.e., when @command{autoconf} is run, see
9113 @ref{Diagnostic Macros}.
9115 @defmac AC_MSG_CHECKING (@var{feature-description})
9116 @acindex{MSG_CHECKING}
9117 Notify the user that @command{configure} is checking for a particular
9118 feature.  This macro prints a message that starts with @samp{checking }
9119 and ends with @samp{...} and no newline.  It must be followed by a call
9120 to @code{AC_MSG_RESULT} to print the result of the check and the
9121 newline.  The @var{feature-description} should be something like
9122 @samp{whether the Fortran compiler accepts C++ comments} or @samp{for
9123 c89}.
9125 This macro prints nothing if @command{configure} is run with the
9126 @option{--quiet} or @option{--silent} option.
9127 @end defmac
9129 @anchor{AC_MSG_RESULT}
9130 @defmac AC_MSG_RESULT (@var{result-description})
9131 @acindex{MSG_RESULT}
9132 Notify the user of the results of a check.  @var{result-description} is
9133 almost always the value of the cache variable for the check, typically
9134 @samp{yes}, @samp{no}, or a file name.  This macro should follow a call
9135 to @code{AC_MSG_CHECKING}, and the @var{result-description} should be
9136 the completion of the message printed by the call to
9137 @code{AC_MSG_CHECKING}.
9139 This macro prints nothing if @command{configure} is run with the
9140 @option{--quiet} or @option{--silent} option.
9141 @end defmac
9143 @anchor{AC_MSG_NOTICE}
9144 @defmac AC_MSG_NOTICE (@var{message})
9145 @acindex{MSG_NOTICE}
9146 Deliver the @var{message} to the user.  It is useful mainly to print a
9147 general description of the overall purpose of a group of feature checks,
9148 e.g.,
9150 @example
9151 AC_MSG_NOTICE([checking if stack overflow is detectable])
9152 @end example
9154 This macro prints nothing if @command{configure} is run with the
9155 @option{--quiet} or @option{--silent} option.
9156 @end defmac
9158 @anchor{AC_MSG_ERROR}
9159 @defmac AC_MSG_ERROR (@var{error-description}, @ovar{exit-status})
9160 @acindex{MSG_ERROR}
9161 Notify the user of an error that prevents @command{configure} from
9162 completing.  This macro prints an error message to the standard error
9163 output and exits @command{configure} with @var{exit-status} (1 by default).
9164 @var{error-description} should be something like @samp{invalid value
9165 $HOME for \$HOME}.
9167 The @var{error-description} should start with a lower-case letter, and
9168 ``cannot'' is preferred to ``can't''.
9169 @end defmac
9171 @defmac AC_MSG_FAILURE (@var{error-description}, @ovar{exit-status})
9172 @acindex{MSG_FAILURE}
9173 This @code{AC_MSG_ERROR} wrapper notifies the user of an error that
9174 prevents @command{configure} from completing @emph{and} that additional
9175 details are provided in @file{config.log}.  This is typically used when
9176 abnormal results are found during a compilation.
9177 @end defmac
9179 @anchor{AC_MSG_WARN}
9180 @defmac AC_MSG_WARN (@var{problem-description})
9181 @acindex{MSG_WARN}
9182 Notify the @command{configure} user of a possible problem.  This macro
9183 prints the message to the standard error output; @command{configure}
9184 continues running afterward, so macros that call @code{AC_MSG_WARN} should
9185 provide a default (back-up) behavior for the situations they warn about.
9186 @var{problem-description} should be something like @samp{ln -s seems to
9187 make hard links}.
9188 @end defmac
9192 @c ====================================================== Programming in M4.
9194 @node Programming in M4
9195 @chapter Programming in M4
9196 @cindex M4
9198 Autoconf is written on top of two layers: @dfn{M4sugar}, which provides
9199 convenient macros for pure M4 programming, and @dfn{M4sh}, which
9200 provides macros dedicated to shell script generation.
9202 As of this version of Autoconf, these two layers still contain
9203 experimental macros, whose interface might change in the future.  As a
9204 matter of fact, @emph{anything that is not documented must not be used}.
9206 @menu
9207 * M4 Quotation::                Protecting macros from unwanted expansion
9208 * Using autom4te::              The Autoconf executables backbone
9209 * Programming in M4sugar::      Convenient pure M4 macros
9210 * Programming in M4sh::         Common shell Constructs
9211 * File Descriptor Macros::      File descriptor macros for input and output
9212 @end menu
9214 @node M4 Quotation
9215 @section M4 Quotation
9216 @cindex M4 quotation
9217 @cindex quotation
9219 The most common problem with existing macros is an improper quotation.
9220 This section, which users of Autoconf can skip, but which macro writers
9221 @emph{must} read, first justifies the quotation scheme that was chosen
9222 for Autoconf and then ends with a rule of thumb.  Understanding the
9223 former helps one to follow the latter.
9225 @menu
9226 * Active Characters::           Characters that change the behavior of M4
9227 * One Macro Call::              Quotation and one macro call
9228 * Quoting and Parameters::      M4 vs. shell parameters
9229 * Quotation and Nested Macros::  Macros calling macros
9230 * Changequote is Evil::         Worse than INTERCAL: M4 + changequote
9231 * Quadrigraphs::                Another way to escape special characters
9232 * Quotation Rule Of Thumb::     One parenthesis, one quote
9233 @end menu
9235 @node Active Characters
9236 @subsection Active Characters
9238 To fully understand where proper quotation is important, you first need
9239 to know what the special characters are in Autoconf: @samp{#} introduces
9240 a comment inside which no macro expansion is performed, @samp{,}
9241 separates arguments, @samp{[} and @samp{]} are the quotes themselves,
9242 @samp{(} and @samp{)} (which M4 tries to match by pairs), and finally
9243 @samp{$} inside a macro definition.
9245 In order to understand the delicate case of macro calls, we first have
9246 to present some obvious failures.  Below they are ``obvious-ified'',
9247 but when you find them in real life, they are usually in disguise.
9249 Comments, introduced by a hash and running up to the newline, are opaque
9250 tokens to the top level: active characters are turned off, and there is
9251 no macro expansion:
9253 @example
9254 # define([def], ine)
9255 @result{}# define([def], ine)
9256 @end example
9258 Each time there can be a macro expansion, there is a quotation
9259 expansion, i.e., one level of quotes is stripped:
9261 @example
9262 int tab[10];
9263 @result{}int tab10;
9264 [int tab[10];]
9265 @result{}int tab[10];
9266 @end example
9268 Without this in mind, the reader might try hopelessly to use her macro
9269 @code{array}:
9271 @example
9272 define([array], [int tab[10];])
9273 array
9274 @result{}int tab10;
9275 [array]
9276 @result{}array
9277 @end example
9279 @noindent
9280 How can you correctly output the intended results@footnote{Using
9281 @code{defn}.}?
9284 @node One Macro Call
9285 @subsection One Macro Call
9287 Let's proceed on the interaction between active characters and macros
9288 with this small macro, which just returns its first argument:
9290 @example
9291 define([car], [$1])
9292 @end example
9294 @noindent
9295 The two pairs of quotes above are not part of the arguments of
9296 @code{define}; rather, they are understood by the top level when it
9297 tries to find the arguments of @code{define}.  Therefore, assuming
9298 @code{car} is not already defined, it is equivalent to write:
9300 @example
9301 define(car, $1)
9302 @end example
9304 @noindent
9305 But, while it is acceptable for a @file{configure.ac} to avoid unnecessary
9306 quotes, it is bad practice for Autoconf macros which must both be more
9307 robust and also advocate perfect style.
9309 At the top level, there are only two possibilities: either you
9310 quote or you don't:
9312 @example
9313 car(foo, bar, baz)
9314 @result{}foo
9315 [car(foo, bar, baz)]
9316 @result{}car(foo, bar, baz)
9317 @end example
9319 Let's pay attention to the special characters:
9321 @example
9322 car(#)
9323 @error{}EOF in argument list
9324 @end example
9326 The closing parenthesis is hidden in the comment; with a hypothetical
9327 quoting, the top level understood it this way:
9329 @example
9330 car([#)]
9331 @end example
9333 @noindent
9334 Proper quotation, of course, fixes the problem:
9336 @example
9337 car([#])
9338 @result{}#
9339 @end example
9341 Here are more examples:
9343 @example
9344 car(foo, bar)
9345 @result{}foo
9346 car([foo, bar])
9347 @result{}foo, bar
9348 car((foo, bar))
9349 @result{}(foo, bar)
9350 car([(foo], [bar)])
9351 @result{}(foo
9352 define([a], [b])
9353 @result{}
9354 car(a)
9355 @result{}b
9356 car([a])
9357 @result{}b
9358 car([[a]])
9359 @result{}a
9360 car([[[a]]])
9361 @result{}[a]
9362 @end example
9364 @node Quoting and Parameters
9365 @subsection Quoting and Parameters
9367 When M4 encounters @samp{$} within a macro definition, followed
9368 immediately by a character it recognizes (@samp{0}@dots{}@samp{9},
9369 @samp{#}, @samp{@@}, or @samp{*}), it will perform M4 parameter
9370 expansion.  This happens regardless of how many layers of quotes the
9371 parameter expansion is nested within, or even if it occurs in text that
9372 will be rescanned as a comment.
9374 @example
9375 define([none], [$1])
9376 @result{}
9377 define([one], [[$1]])
9378 @result{}
9379 define([two], [[[$1]]])
9380 @result{}
9381 define([comment], [# $1])
9382 @result{}
9383 define([active], [ACTIVE])
9384 @result{}
9385 none([active])
9386 @result{}ACTIVE
9387 one([active])
9388 @result{}active
9389 two([active])
9390 @result{}[active]
9391 comment([active])
9392 @result{}# active
9393 @end example
9395 On the other hand, since autoconf generates shell code, you often want
9396 to output shell variable expansion, rather than performing M4 parameter
9397 expansion.  To do this, you must use M4 quoting to separate the @samp{$}
9398 from the next character in the definition of your macro.  If the macro
9399 definition occurs in single-quoted text, then insert another level of
9400 quoting; if the usage is already inside a double-quoted string, then
9401 split it into concatenated strings.
9403 @example
9404 define([single], [a single-quoted $[]1 definition])
9405 @result{}
9406 define([double], [[a double-quoted $][1 definition]])
9407 @result{}
9408 single
9409 @result{}a single-quoted $1 definition
9410 double
9411 @result{}a double-quoted $1 definition
9412 @end example
9414 Posix states that M4 implementations are free to provide implementation
9415 extensions when @samp{$@{} is encountered in a macro definition.
9416 Autoconf reserves the longer sequence @samp{$@{@{} for use with planned
9417 extensions that will be available in the future @acronym{GNU} M4 2.0,
9418 but guarantees that all other instances of @samp{$@{} will be output
9419 literally.  Therefore, this idiom can also be used to output shell code
9420 parameter references:
9422 @example
9423 define([first], [$@{1@}])first
9424 @result{}$@{1@}
9425 @end example
9427 Posix also states that @samp{$11} should expand to the first parameter
9428 concatenated with a literal @samp{1}, although some versions of
9429 @acronym{GNU} M4 expand the eleventh parameter instead.  For
9430 portability, you should only use single-digit M4 parameter expansion.
9432 With this in mind, we can explore the cases where macros invoke
9433 macros@enddots{}
9435 @node Quotation and Nested Macros
9436 @subsection Quotation and Nested Macros
9438 The examples below use the following macros:
9440 @example
9441 define([car], [$1])
9442 define([active], [ACT, IVE])
9443 define([array], [int tab[10]])
9444 @end example
9446 Each additional embedded macro call introduces other possible
9447 interesting quotations:
9449 @example
9450 car(active)
9451 @result{}ACT
9452 car([active])
9453 @result{}ACT, IVE
9454 car([[active]])
9455 @result{}active
9456 @end example
9458 In the first case, the top level looks for the arguments of @code{car},
9459 and finds @samp{active}.  Because M4 evaluates its arguments
9460 before applying the macro, @samp{active} is expanded, which results in:
9462 @example
9463 car(ACT, IVE)
9464 @result{}ACT
9465 @end example
9467 @noindent
9468 In the second case, the top level gives @samp{active} as first and only
9469 argument of @code{car}, which results in:
9471 @example
9472 active
9473 @result{}ACT, IVE
9474 @end example
9476 @noindent
9477 i.e., the argument is evaluated @emph{after} the macro that invokes it.
9478 In the third case, @code{car} receives @samp{[active]}, which results in:
9480 @example
9481 [active]
9482 @result{}active
9483 @end example
9485 @noindent
9486 exactly as we already saw above.
9488 The example above, applied to a more realistic example, gives:
9490 @example
9491 car(int tab[10];)
9492 @result{}int tab10;
9493 car([int tab[10];])
9494 @result{}int tab10;
9495 car([[int tab[10];]])
9496 @result{}int tab[10];
9497 @end example
9499 @noindent
9500 Huh?  The first case is easily understood, but why is the second wrong,
9501 and the third right?  To understand that, you must know that after
9502 M4 expands a macro, the resulting text is immediately subjected
9503 to macro expansion and quote removal.  This means that the quote removal
9504 occurs twice---first before the argument is passed to the @code{car}
9505 macro, and second after the @code{car} macro expands to the first
9506 argument.
9508 As the author of the Autoconf macro @code{car}, you then consider it to
9509 be incorrect that your users have to double-quote the arguments of
9510 @code{car}, so you ``fix'' your macro.  Let's call it @code{qar} for
9511 quoted car:
9513 @example
9514 define([qar], [[$1]])
9515 @end example
9517 @noindent
9518 and check that @code{qar} is properly fixed:
9520 @example
9521 qar([int tab[10];])
9522 @result{}int tab[10];
9523 @end example
9525 @noindent
9526 Ahhh!  That's much better.
9528 But note what you've done: now that the result of @code{qar} is always
9529 a literal string, the only time a user can use nested macros is if she
9530 relies on an @emph{unquoted} macro call:
9532 @example
9533 qar(active)
9534 @result{}ACT
9535 qar([active])
9536 @result{}active
9537 @end example
9539 @noindent
9540 leaving no way for her to reproduce what she used to do with @code{car}:
9542 @example
9543 car([active])
9544 @result{}ACT, IVE
9545 @end example
9547 @noindent
9548 Worse yet: she wants to use a macro that produces a set of @code{cpp}
9549 macros:
9551 @example
9552 define([my_includes], [#include <stdio.h>])
9553 car([my_includes])
9554 @result{}#include <stdio.h>
9555 qar(my_includes)
9556 @error{}EOF in argument list
9557 @end example
9559 This macro, @code{qar}, because it double quotes its arguments, forces
9560 its users to leave their macro calls unquoted, which is dangerous.
9561 Commas and other active symbols are interpreted by M4 before
9562 they are given to the macro, often not in the way the users expect.
9563 Also, because @code{qar} behaves differently from the other macros,
9564 it's an exception that should be avoided in Autoconf.
9566 @node Changequote is Evil
9567 @subsection @code{changequote} is Evil
9568 @cindex @code{changequote}
9570 The temptation is often high to bypass proper quotation, in particular
9571 when it's late at night.  Then, many experienced Autoconf hackers
9572 finally surrender to the dark side of the force and use the ultimate
9573 weapon: @code{changequote}.
9575 The M4 builtin @code{changequote} belongs to a set of primitives that
9576 allow one to adjust the syntax of the language to adjust it to one's
9577 needs.  For instance, by default M4 uses @samp{`} and @samp{'} as
9578 quotes, but in the context of shell programming (and actually of most
9579 programming languages), that's about the worst choice one can make:
9580 because of strings and back-quoted expressions in shell code (such as
9581 @samp{'this'} and @samp{`that`}), and because of literal characters in usual
9582 programming languages (as in @samp{'0'}), there are many unbalanced
9583 @samp{`} and @samp{'}.  Proper M4 quotation then becomes a nightmare, if
9584 not impossible.  In order to make M4 useful in such a context, its
9585 designers have equipped it with @code{changequote}, which makes it
9586 possible to choose another pair of quotes.  M4sugar, M4sh, Autoconf, and
9587 Autotest all have chosen to use @samp{[} and @samp{]}.  Not especially
9588 because they are unlikely characters, but @emph{because they are
9589 characters unlikely to be unbalanced}.
9591 There are other magic primitives, such as @code{changecom} to specify
9592 what syntactic forms are comments (it is common to see
9593 @samp{changecom(<!--, -->)} when M4 is used to produce HTML pages),
9594 @code{changeword} and @code{changesyntax} to change other syntactic
9595 details (such as the character to denote the @var{n}th argument, @samp{$} by
9596 default, the parentheses around arguments, etc.).
9598 These primitives are really meant to make M4 more useful for specific
9599 domains: they should be considered like command line options:
9600 @option{--quotes}, @option{--comments}, @option{--words}, and
9601 @option{--syntax}.  Nevertheless, they are implemented as M4 builtins, as
9602 it makes M4 libraries self contained (no need for additional options).
9604 There lies the problem@enddots{}
9606 @sp 1
9608 The problem is that it is then tempting to use them in the middle of an
9609 M4 script, as opposed to its initialization.  This, if not carefully
9610 thought out, can lead to disastrous effects: @emph{you are changing the
9611 language in the middle of the execution}.  Changing and restoring the
9612 syntax is often not enough: if you happened to invoke macros in between,
9613 these macros are lost, as the current syntax is probably not
9614 the one they were implemented with.
9616 @c FIXME: I've been looking for a short, real case example, but I
9617 @c lost them all :(
9620 @node Quadrigraphs
9621 @subsection Quadrigraphs
9622 @cindex quadrigraphs
9623 @cindex @samp{@@S|@@}
9624 @cindex @samp{@@&t@@}
9625 @c Info cannot handle `:' in index entries.
9626 @c @cindex @samp{@@<:@@}
9627 @c @cindex @samp{@@:>@@}
9628 @c @cindex @samp{@@%:@@}
9629 @c @cindex @samp{@@@{:@@}
9630 @c @cindex @samp{@@:@}@@}
9632 When writing an Autoconf macro you may occasionally need to generate
9633 special characters that are difficult to express with the standard
9634 Autoconf quoting rules.  For example, you may need to output the regular
9635 expression @samp{[^[]}, which matches any character other than @samp{[}.
9636 This expression contains unbalanced brackets so it cannot be put easily
9637 into an M4 macro.
9639 Additionally, there are a few m4sugar macros (such as @code{m4_split}
9640 and @code{m4_expand}) which internally use special markers in addition
9641 to the regular quoting characters.  If the arguments to these macros
9642 contain the literal strings @samp{-=<@{(} or @samp{)@}>=-}, the macros
9643 might behave incorrectly.
9645 You can work around these problems by using one of the following
9646 @dfn{quadrigraphs}:
9648 @table @samp
9649 @item @@<:@@
9650 @samp{[}
9651 @item @@:>@@
9652 @samp{]}
9653 @item @@S|@@
9654 @samp{$}
9655 @item @@%:@@
9656 @samp{#}
9657 @item @@@{:@@
9658 @samp{(}
9659 @item @@:@}@@
9660 @samp{)}
9661 @item @@&t@@
9662 Expands to nothing.
9663 @end table
9665 Quadrigraphs are replaced at a late stage of the translation process,
9666 after @command{m4} is run, so they do not get in the way of M4 quoting.
9667 For example, the string @samp{^@@<:@@}, independently of its quotation,
9668 appears as @samp{^[} in the output.
9670 The empty quadrigraph can be used:
9672 @itemize @minus
9673 @item to mark trailing spaces explicitly
9675 Trailing spaces are smashed by @command{autom4te}.  This is a feature.
9677 @item to produce quadrigraphs and other strings reserved by m4sugar
9679 For instance @samp{@@<@@&t@@:@@} produces @samp{@@<:@@}.  For a more
9680 contrived example:
9682 @example
9683 m4_define([a], [A])m4_define([b], [B])m4_define([c], [C])dnl
9684 m4_split([a )@}>=- b -=<@{( c])
9685 @result{}[a], [], [B], [], [c]
9686 m4_split([a )@}@@&t@@>=- b -=<@@&t@@@{( c])
9687 @result{}[a], [)@}>=-], [b], [-=<@{(], [c]
9688 @end example
9690 @item to escape @emph{occurrences} of forbidden patterns
9692 For instance you might want to mention @code{AC_FOO} in a comment, while
9693 still being sure that @command{autom4te} still catches unexpanded
9694 @samp{AC_*}.  Then write @samp{AC@@&t@@_FOO}.
9695 @end itemize
9697 The name @samp{@@&t@@} was suggested by Paul Eggert:
9699 @quotation
9700 I should give some credit to the @samp{@@&t@@} pun.  The @samp{&} is my
9701 own invention, but the @samp{t} came from the source code of the
9702 @sc{algol68c} compiler, written by Steve Bourne (of Bourne shell fame),
9703 and which used @samp{mt} to denote the empty string.  In C, it would
9704 have looked like something like:
9706 @example
9707 char const mt[] = "";
9708 @end example
9710 @noindent
9711 but of course the source code was written in Algol 68.
9713 I don't know where he got @samp{mt} from: it could have been his own
9714 invention, and I suppose it could have been a common pun around the
9715 Cambridge University computer lab at the time.
9716 @end quotation
9718 @node Quotation Rule Of Thumb
9719 @subsection Quotation Rule Of Thumb
9721 To conclude, the quotation rule of thumb is:
9723 @center @emph{One pair of quotes per pair of parentheses.}
9725 Never over-quote, never under-quote, in particular in the definition of
9726 macros.  In the few places where the macros need to use brackets
9727 (usually in C program text or regular expressions), properly quote
9728 @emph{the arguments}!
9730 It is common to read Autoconf programs with snippets like:
9732 @example
9733 AC_TRY_LINK(
9734 changequote(<<, >>)dnl
9735 <<#include <time.h>
9736 #ifndef tzname /* For SGI.  */
9737 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
9738 #endif>>,
9739 changequote([, ])dnl
9740 [atoi (*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
9741 @end example
9743 @noindent
9744 which is incredibly useless since @code{AC_TRY_LINK} is @emph{already}
9745 double quoting, so you just need:
9747 @example
9748 AC_TRY_LINK(
9749 [#include <time.h>
9750 #ifndef tzname /* For SGI.  */
9751 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
9752 #endif],
9753             [atoi (*tzname);],
9754             [ac_cv_var_tzname=yes],
9755             [ac_cv_var_tzname=no])
9756 @end example
9758 @noindent
9759 The M4-fluent reader might note that these two examples are rigorously
9760 equivalent, since M4 swallows both the @samp{changequote(<<, >>)}
9761 and @samp{<<} @samp{>>} when it @dfn{collects} the arguments: these
9762 quotes are not part of the arguments!
9764 Simplified, the example above is just doing this:
9766 @example
9767 changequote(<<, >>)dnl
9768 <<[]>>
9769 changequote([, ])dnl
9770 @end example
9772 @noindent
9773 instead of simply:
9775 @example
9776 [[]]
9777 @end example
9779 With macros that do not double quote their arguments (which is the
9780 rule), double-quote the (risky) literals:
9782 @example
9783 AC_LINK_IFELSE([AC_LANG_PROGRAM(
9784 [[#include <time.h>
9785 #ifndef tzname /* For SGI.  */
9786 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
9787 #endif]],
9788                                 [atoi (*tzname);])],
9789                [ac_cv_var_tzname=yes],
9790                [ac_cv_var_tzname=no])
9791 @end example
9793 Please note that the macro @code{AC_TRY_LINK} is obsolete, so you really
9794 should be using @code{AC_LINK_IFELSE} instead.
9796 @xref{Quadrigraphs}, for what to do if you run into a hopeless case
9797 where quoting does not suffice.
9799 When you create a @command{configure} script using newly written macros,
9800 examine it carefully to check whether you need to add more quotes in
9801 your macros.  If one or more words have disappeared in the M4
9802 output, you need more quotes.  When in doubt, quote.
9804 However, it's also possible to put on too many layers of quotes.  If
9805 this happens, the resulting @command{configure} script may contain
9806 unexpanded macros.  The @command{autoconf} program checks for this problem
9807 by looking for the string @samp{AC_} in @file{configure}.  However, this
9808 heuristic does not work in general: for example, it does not catch
9809 overquoting in @code{AC_DEFINE} descriptions.
9812 @c ---------------------------------------- Using autom4te
9814 @node Using autom4te
9815 @section Using @command{autom4te}
9817 The Autoconf suite, including M4sugar, M4sh, and Autotest, in addition
9818 to Autoconf per se, heavily rely on M4.  All these different uses
9819 revealed common needs factored into a layer over M4:
9820 @command{autom4te}@footnote{
9822 Yet another great name from Lars J. Aas.
9826 @command{autom4te} is a preprocessor that is like @command{m4}.
9827 It supports M4 extensions designed for use in tools like Autoconf.
9829 @menu
9830 * autom4te Invocation::         A @acronym{GNU} M4 wrapper
9831 * Customizing autom4te::        Customizing the Autoconf package
9832 @end menu
9834 @node autom4te Invocation
9835 @subsection Invoking @command{autom4te}
9837 The command line arguments are modeled after M4's:
9839 @example
9840 autom4te @var{options} @var{files}
9841 @end example
9843 @noindent
9844 @evindex M4
9845 where the @var{files} are directly passed to @command{m4}.  By default,
9846 @acronym{GNU} M4 is found during configuration, but the environment
9847 variable
9848 @env{M4} can be set to tell @command{autom4te} where to look.  In addition
9849 to the regular expansion, it handles the replacement of the quadrigraphs
9850 (@pxref{Quadrigraphs}), and of @samp{__oline__}, the current line in the
9851 output.  It supports an extended syntax for the @var{files}:
9853 @table @file
9854 @item @var{file}.m4f
9855 This file is an M4 frozen file.  Note that @emph{all the previous files
9856 are ignored}.  See the option @option{--melt} for the rationale.
9858 @item @var{file}?
9859 If found in the library path, the @var{file} is included for expansion,
9860 otherwise it is ignored instead of triggering a failure.
9861 @end table
9863 @sp 1
9865 Of course, it supports the Autoconf common subset of options:
9867 @table @option
9868 @item --help
9869 @itemx -h
9870 Print a summary of the command line options and exit.
9872 @item --version
9873 @itemx -V
9874 Print the version number of Autoconf and exit.
9876 @item --verbose
9877 @itemx -v
9878 Report processing steps.
9880 @item --debug
9881 @itemx -d
9882 Don't remove the temporary files and be even more verbose.
9884 @item --include=@var{dir}
9885 @itemx -I @var{dir}
9886 Also look for input files in @var{dir}.  Multiple invocations
9887 accumulate.
9889 @item --output=@var{file}
9890 @itemx -o @var{file}
9891 Save output (script or trace) to @var{file}.  The file @option{-} stands
9892 for the standard output.
9893 @end table
9895 @sp 1
9897 As an extension of @command{m4}, it includes the following options:
9899 @table @option
9900 @item --warnings=@var{category}
9901 @itemx -W @var{category}
9902 @evindex WARNINGS
9903 @c FIXME: Point to the M4sugar macros, not Autoconf's.
9904 Report the warnings related to @var{category} (which can actually be a
9905 comma separated list).  @xref{Reporting Messages}, macro
9906 @code{AC_DIAGNOSE}, for a comprehensive list of categories.  Special
9907 values include:
9909 @table @samp
9910 @item all
9911 report all the warnings
9913 @item none
9914 report none
9916 @item error
9917 treats warnings as errors
9919 @item no-@var{category}
9920 disable warnings falling into @var{category}
9921 @end table
9923 Warnings about @samp{syntax} are enabled by default, and the environment
9924 variable @env{WARNINGS}, a comma separated list of categories, is
9925 honored.  @samp{autom4te -W @var{category}} actually
9926 behaves as if you had run:
9928 @example
9929 autom4te --warnings=syntax,$WARNINGS,@var{category}
9930 @end example
9932 @noindent
9933 For example, if you want to disable defaults and @env{WARNINGS}
9934 of @command{autom4te}, but enable the warnings about obsolete
9935 constructs, you would use @option{-W none,obsolete}.
9937 @cindex Back trace
9938 @cindex Macro invocation stack
9939 @command{autom4te} displays a back trace for errors, but not for
9940 warnings; if you want them, just pass @option{-W error}.
9942 @item --melt
9943 @itemx -M
9944 Do not use frozen files.  Any argument @code{@var{file}.m4f} is
9945 replaced by @code{@var{file}.m4}.  This helps tracing the macros which
9946 are executed only when the files are frozen, typically
9947 @code{m4_define}.  For instance, running:
9949 @example
9950 autom4te --melt 1.m4 2.m4f 3.m4 4.m4f input.m4
9951 @end example
9953 @noindent
9954 is roughly equivalent to running:
9956 @example
9957 m4 1.m4 2.m4 3.m4 4.m4 input.m4
9958 @end example
9960 @noindent
9961 while
9963 @example
9964 autom4te 1.m4 2.m4f 3.m4 4.m4f input.m4
9965 @end example
9967 @noindent
9968 is equivalent to:
9970 @example
9971 m4 --reload-state=4.m4f input.m4
9972 @end example
9974 @item --freeze
9975 @itemx -f
9976 Produce a frozen state file.  @command{autom4te} freezing is stricter
9977 than M4's: it must produce no warnings, and no output other than empty
9978 lines (a line with white space is @emph{not} empty) and comments
9979 (starting with @samp{#}).  Unlike @command{m4}'s similarly-named option,
9980 this option takes no argument:
9982 @example
9983 autom4te 1.m4 2.m4 3.m4 --freeze --output=3.m4f
9984 @end example
9986 @noindent
9987 corresponds to
9989 @example
9990 m4 1.m4 2.m4 3.m4 --freeze-state=3.m4f
9991 @end example
9993 @item --mode=@var{octal-mode}
9994 @itemx -m @var{octal-mode}
9995 Set the mode of the non-traces output to @var{octal-mode}; by default
9996 @samp{0666}.
9997 @end table
9999 @sp 1
10001 @cindex @file{autom4te.cache}
10002 As another additional feature over @command{m4}, @command{autom4te}
10003 caches its results.  @acronym{GNU} M4 is able to produce a regular
10004 output and traces at the same time.  Traces are heavily used in the
10005 @acronym{GNU} Build System: @command{autoheader} uses them to build
10006 @file{config.h.in}, @command{autoreconf} to determine what
10007 @acronym{GNU} Build System components are used, @command{automake} to
10008 ``parse'' @file{configure.ac} etc.  To avoid recomputation,
10009 traces are cached while performing regular expansion,
10010 and conversely.  This cache is (actually, the caches are) stored in
10011 the directory @file{autom4te.cache}.  @emph{It can safely be removed}
10012 at any moment (especially if for some reason @command{autom4te}
10013 considers it trashed).
10015 @table @option
10016 @item --cache=@var{directory}
10017 @itemx -C @var{directory}
10018 Specify the name of the directory where the result should be cached.
10019 Passing an empty value disables caching.  Be sure to pass a relative
10020 file name, as for the time being, global caches are not supported.
10022 @item --no-cache
10023 Don't cache the results.
10025 @item --force
10026 @itemx -f
10027 If a cache is used, consider it obsolete (but update it anyway).
10028 @end table
10030 @sp 1
10032 Because traces are so important to the @acronym{GNU} Build System,
10033 @command{autom4te} provides high level tracing features as compared to
10034 M4, and helps exploiting the cache:
10036 @table @option
10037 @item --trace=@var{macro}[:@var{format}]
10038 @itemx -t @var{macro}[:@var{format}]
10039 Trace the invocations of @var{macro} according to the @var{format}.
10040 Multiple @option{--trace} arguments can be used to list several macros.
10041 Multiple @option{--trace} arguments for a single macro are not
10042 cumulative; instead, you should just make @var{format} as long as
10043 needed.
10045 The @var{format} is a regular string, with newlines if desired, and
10046 several special escape codes.  It defaults to @samp{$f:$l:$n:$%}.  It can
10047 use the following special escapes:
10049 @table @samp
10050 @item $$
10051 The character @samp{$}.
10053 @item $f
10054 The file name from which @var{macro} is called.
10056 @item $l
10057 The line number from which @var{macro} is called.
10059 @item $d
10060 The depth of the @var{macro} call.  This is an M4 technical detail that
10061 you probably don't want to know about.
10063 @item $n
10064 The name of the @var{macro}.
10066 @item $@var{num}
10067 The @var{num}th argument of the call to @var{macro}.
10069 @item $@@
10070 @itemx $@var{sep}@@
10071 @itemx $@{@var{separator}@}@@
10072 All the arguments passed to @var{macro}, separated by the character
10073 @var{sep} or the string @var{separator} (@samp{,} by default).  Each
10074 argument is quoted, i.e., enclosed in a pair of square brackets.
10076 @item $*
10077 @itemx $@var{sep}*
10078 @itemx $@{@var{separator}@}*
10079 As above, but the arguments are not quoted.
10081 @item $%
10082 @itemx $@var{sep}%
10083 @itemx $@{@var{separator}@}%
10084 As above, but the arguments are not quoted, all new line characters in
10085 the arguments are smashed, and the default separator is @samp{:}.
10087 The escape @samp{$%} produces single-line trace outputs (unless you put
10088 newlines in the @samp{separator}), while @samp{$@@} and @samp{$*} do
10089 not.
10090 @end table
10092 @xref{autoconf Invocation}, for examples of trace uses.
10094 @item --preselect=@var{macro}
10095 @itemx -p @var{macro}
10096 Cache the traces of @var{macro}, but do not enable traces.  This is
10097 especially important to save CPU cycles in the future.  For instance,
10098 when invoked, @command{autoconf} preselects all the macros that
10099 @command{autoheader}, @command{automake}, @command{autoreconf}, etc.,
10100 trace, so that running @command{m4} is not needed to trace them: the
10101 cache suffices.  This results in a huge speed-up.
10102 @end table
10104 @sp 1
10106 @cindex Autom4te Library
10107 Finally, @command{autom4te} introduces the concept of @dfn{Autom4te
10108 libraries}.  They consists in a powerful yet extremely simple feature:
10109 sets of combined command line arguments:
10111 @table @option
10112 @item --language=@var{language}
10113 @itemx -l @var{language}
10114 Use the @var{language} Autom4te library.  Current languages include:
10116 @table @code
10117 @item M4sugar
10118 create M4sugar output.
10120 @item M4sh
10121 create M4sh executable shell scripts.
10123 @item Autotest
10124 create Autotest executable test suites.
10126 @item Autoconf-without-aclocal-m4
10127 create Autoconf executable configure scripts without
10128 reading @file{aclocal.m4}.
10130 @item Autoconf
10131 create Autoconf executable configure scripts.  This language inherits
10132 all the characteristics of @code{Autoconf-without-aclocal-m4} and
10133 additionally reads @file{aclocal.m4}.
10134 @end table
10136 @item --prepend-include=@var{dir}
10137 @itemx -B @var{dir}
10138 Prepend directory @var{dir} to the search path.  This is used to include
10139 the language-specific files before any third-party macros.
10141 @end table
10143 @cindex @file{autom4te.cfg}
10144 As an example, if Autoconf is installed in its default location,
10145 @file{/usr/local}, the command @samp{autom4te -l m4sugar foo.m4} is
10146 strictly equivalent to the command:
10148 @example
10149 autom4te --prepend-include /usr/local/share/autoconf \
10150   m4sugar/m4sugar.m4f --warnings syntax foo.m4
10151 @end example
10153 @noindent
10154 Recursive expansion applies here: the command @samp{autom4te -l m4sh foo.m4}
10155 is the same as @samp{autom4te --language M4sugar m4sugar/m4sh.m4f
10156 foo.m4}, i.e.:
10158 @example
10159 autom4te --prepend-include /usr/local/share/autoconf \
10160   m4sugar/m4sugar.m4f m4sugar/m4sh.m4f --mode 777 foo.m4
10161 @end example
10163 @noindent
10164 The definition of the languages is stored in @file{autom4te.cfg}.
10166 @node Customizing autom4te
10167 @subsection Customizing @command{autom4te}
10169 One can customize @command{autom4te} via @file{~/.autom4te.cfg} (i.e.,
10170 as found in the user home directory), and @file{./.autom4te.cfg} (i.e.,
10171 as found in the directory from which @command{autom4te} is run).  The
10172 order is first reading @file{autom4te.cfg}, then @file{~/.autom4te.cfg},
10173 then @file{./.autom4te.cfg}, and finally the command line arguments.
10175 In these text files, comments are introduced with @code{#}, and empty
10176 lines are ignored.  Customization is performed on a per-language basis,
10177 wrapped in between a @samp{begin-language: "@var{language}"},
10178 @samp{end-language: "@var{language}"} pair.
10180 Customizing a language stands for appending options (@pxref{autom4te
10181 Invocation}) to the current definition of the language.  Options, and
10182 more generally arguments, are introduced by @samp{args:
10183 @var{arguments}}.  You may use the traditional shell syntax to quote the
10184 @var{arguments}.
10186 As an example, to disable Autoconf caches (@file{autom4te.cache})
10187 globally, include the following lines in @file{~/.autom4te.cfg}:
10189 @verbatim
10190 ## ------------------ ##
10191 ## User Preferences.  ##
10192 ## ------------------ ##
10194 begin-language: "Autoconf-without-aclocal-m4"
10195 args: --no-cache
10196 end-language: "Autoconf-without-aclocal-m4"
10197 @end verbatim
10200 @node Programming in M4sugar
10201 @section Programming in M4sugar
10203 @cindex M4sugar
10204 M4 by itself provides only a small, but sufficient, set of all-purpose
10205 macros.  M4sugar introduces additional generic macros.  Its name was
10206 coined by Lars J. Aas: ``Readability And Greater Understanding Stands 4
10207 M4sugar''.
10209 M4sugar reserves the macro namespace @samp{^_m4_} for internal use, and
10210 the macro namespace @samp{^m4_} for M4sugar macros.  You should not
10211 define your own macros into these namespaces.
10213 @menu
10214 * Redefined M4 Macros::         M4 builtins changed in M4sugar
10215 * Diagnostic Macros::           Diagnostic messages from M4sugar
10216 * Diversion support::           Diversions in M4sugar
10217 * Conditional constructs::      Conditions in M4
10218 * Looping constructs::          Iteration in M4
10219 * Evaluation Macros::           More quotation and evaluation control
10220 * Text processing Macros::      String manipulation in M4
10221 * Number processing Macros::    Arithmetic computation in M4
10222 * Set manipulation Macros::     Set manipulation in M4
10223 * Forbidden Patterns::          Catching unexpanded macros
10224 @end menu
10226 @node Redefined M4 Macros
10227 @subsection Redefined M4 Macros
10229 @msindex{builtin}
10230 @msindex{changecom}
10231 @msindex{changequote}
10232 @msindex{debugfile}
10233 @msindex{debugmode}
10234 @msindex{decr}
10235 @msindex{define}
10236 @msindex{divnum}
10237 @msindex{dumpdef}
10238 @msindex{errprint}
10239 @msindex{esyscmd}
10240 @msindex{eval}
10241 @msindex{format}
10242 @msindex{ifdef}
10243 @msindex{incr}
10244 @msindex{index}
10245 @msindex{indir}
10246 @msindex{len}
10247 @msindex{pushdef}
10248 @msindex{shift}
10249 @msindex{substr}
10250 @msindex{syscmd}
10251 @msindex{sysval}
10252 @msindex{traceoff}
10253 @msindex{traceon}
10254 @msindex{translit}
10255 With a few exceptions, all the M4 native macros are moved in the
10256 @samp{m4_} pseudo-namespace, e.g., M4sugar renames @code{define} as
10257 @code{m4_define} etc.
10259 The list of macros unchanged from M4, except for their name, is:
10260 @itemize @minus
10261 @item m4_builtin
10262 @item m4_changecom
10263 @item m4_changequote
10264 @item m4_debugfile
10265 @item m4_debugmode
10266 @item m4_decr
10267 @item m4_define
10268 @item m4_divnum
10269 @item m4_dumpdef
10270 @item m4_errprint
10271 @item m4_esyscmd
10272 @item m4_eval
10273 @item m4_format
10274 @item m4_ifdef
10275 @item m4_incr
10276 @item m4_index
10277 @item m4_indir
10278 @item m4_len
10279 @item m4_pushdef
10280 @item m4_shift
10281 @item m4_substr
10282 @item m4_syscmd
10283 @item m4_sysval
10284 @item m4_traceoff
10285 @item m4_traceon
10286 @item m4_translit
10287 @end itemize
10289 Some M4 macros are redefined, and are slightly incompatible with their
10290 native equivalent.
10292 @defmac __file__
10293 @defmacx __line__
10294 @MSindex __file__
10295 @MSindex __line__
10296 All M4 macros starting with @samp{__} retain their original name: for
10297 example, no @code{m4__file__} is defined.
10298 @end defmac
10300 @defmac __oline__
10301 @MSindex __oline__
10302 This is not technically a macro, but a feature of Autom4te.  The
10303 sequence @code{__oline__} can be used similarly to the other m4sugar
10304 location macros, but rather than expanding to the location of the input
10305 file, it is translated to the line number where it appears in the output
10306 file after all other M4 expansions.
10307 @end defmac
10309 @defmac dnl
10310 @MSindex dnl
10311 This macro kept its original name: no @code{m4_dnl} is defined.
10312 @end defmac
10314 @defmac m4_bpatsubst (@var{string}, @var{regexp}, @ovar{replacement})
10315 @msindex{bpatsubst}
10316 This macro corresponds to @code{patsubst}.  The name @code{m4_patsubst}
10317 is kept for future versions of M4sugar, once @acronym{GNU} M4 2.0 is
10318 released and supports extended regular expression syntax.
10319 @end defmac
10321 @defmac m4_bregexp (@var{string}, @var{regexp}, @ovar{replacement})
10322 @msindex{bregexp}
10323 This macro corresponds to @code{regexp}.  The name @code{m4_regexp}
10324 is kept for future versions of M4sugar, once @acronym{GNU} M4 2.0 is
10325 released and supports extended regular expression syntax.
10326 @end defmac
10328 @defmac m4_defn (@var{macro}@dots{})
10329 @msindex{defn}
10330 This macro fails if @var{macro} is not defined, even when using older
10331 versions of M4 that did not warn.  See @code{m4_undefine}.
10332 Unfortunately, in order to support these older versions of M4, there are
10333 some situations involving unbalanced quotes where concatenating multiple
10334 macros together will work in newer M4 but not in m4sugar; use
10335 quadrigraphs to work around this.
10336 @end defmac
10338 @defmac m4_divert (@var{diversion})
10339 @msindex{divert}
10340 M4sugar relies heavily on diversions, so rather than behaving as a
10341 primitive, @code{m4_divert} behaves like:
10342 @example
10343 m4_divert_pop()m4_divert_push([@var{diversion}])
10344 @end example
10345 @noindent
10346 @xref{Diversion support}, for more details about the use of the
10347 diversion stack.
10348 @end defmac
10350 @defmac m4_exit (@var{exit-status})
10351 @msindex{exit}
10352 This macro corresponds to @code{m4exit}.
10353 @end defmac
10355 @defmac m4_if (@var{comment})
10356 @defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @ovar{not-equal})
10357 @defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @dots{})
10358 @msindex{if}
10359 This macro corresponds to @code{ifelse}.  @var{string-1} and
10360 @var{string-2} are compared literally, so usually one of the two
10361 arguments is passed unquoted.  @xref{Conditional constructs}, for more
10362 conditional idioms.
10363 @end defmac
10365 @defmac m4_include (@var{file})
10366 @defmacx m4_sinclude (@var{file})
10367 @msindex{include}
10368 @msindex{sinclude}
10369 Like the M4 builtins, but warn against multiple inclusions of @var{file}.
10370 @end defmac
10372 @defmac m4_mkstemp (@var{template})
10373 @defmacx m4_maketemp (@var{template})
10374 @msindex{maketemp}
10375 @msindex{mkstemp}
10376 Posix requires @code{maketemp} to replace the trailing @samp{X}
10377 characters in @var{template} with the process id, without regards to the
10378 existence of a file by that name, but this a security hole.  When this
10379 was pointed out to the Posix folks, they agreed to invent a new macro
10380 @code{mkstemp} that always creates a uniquely named file, but not all
10381 versions of @acronym{GNU} M4 support the new macro.  In M4sugar,
10382 @code{m4_maketemp} and @code{m4_mkstemp} are synonyms for each other,
10383 and both have the secure semantics regardless of which macro the
10384 underlying M4 provides.
10385 @end defmac
10387 @defmac m4_popdef (@var{macro}@dots{})
10388 @msindex{popdef}
10389 This macro fails if @var{macro} is not defined, even when using older
10390 versions of M4 that did not warn.  See @code{m4_undefine}.
10391 @end defmac
10393 @defmac m4_undefine (@var{macro}@dots{})
10394 @msindex{undefine}
10395 This macro fails if @var{macro} is not defined, even when using older
10396 versions of M4 that did not warn.  Use
10398 @example
10399 m4_ifdef([@var{macro}], [m4_undefine([@var{macro}])])
10400 @end example
10402 @noindent
10403 if you are not sure whether @var{macro} is defined.
10404 @end defmac
10406 @defmac m4_undivert (@var{diversion})
10407 @msindex{undivert}
10408 Unlike the M4 builtin, only one diversion can be undiverted per
10409 invocation.  Also, since the M4sugar diversion stack prefers named
10410 diversions, the use of @code{m4_undivert} to include files is risky.
10411 @xref{Diversion support}, for more details about the use of the
10412 diversion stack.
10413 @end defmac
10415 @defmac m4_wrap (@var{text})
10416 @defmacx m4_wrap_lifo (@var{text})
10417 @msindex{wrap}
10418 @msindex{wrap_lifo}
10419 These macros correspond to @code{m4wrap}.  Posix requires arguments of
10420 multiple wrap calls to be reprocessed at @acronym{EOF} in the same order
10421 as the original calls (first-in, first-out).  @acronym{GNU} M4 versions
10422 through 1.4.10, however, reprocess them in reverse order (last-in,
10423 first-out).  Both orders are useful, therefore, you can rely on
10424 @code{m4_wrap} to provide FIFO semantics and @code{m4_wrap_lifo} for
10425 LIFO semantics, regardless of the underlying @acronym{GNU} M4 version.
10427 Unlike the @acronym{GNU} M4 builtin, these macros only recognize one
10428 argument, and avoid token pasting between consecutive invocations.  On
10429 the other hand, nested calls to @code{m4_wrap} from within wrapped text
10430 work just as in the builtin.
10431 @end defmac
10434 @node Diagnostic Macros
10435 @subsection Diagnostic messages from M4sugar
10436 @cindex Messages, from @command{M4sugar}
10438 When macros statically diagnose abnormal situations, benign or fatal,
10439 they should report them using these macros.  For issuing dynamic issues,
10440 i.e., when @command{configure} is run, see @ref{Printing Messages}.
10442 @defmac m4_assert (@var{expression}, @dvar{exit-status, 1})
10443 @msindex{assert}
10444 Assert that the arithmetic @var{expression} evaluates to non-zero.
10445 Otherwise, issue a fatal error, and exit @command{autom4te} with
10446 @var{exit-status}.
10447 @end defmac
10449 @defmac m4_errprintn (@var{message})
10450 @msindex{errprintn}
10451 Similar to the builtin @code{m4_errprint}, except that a newline is
10452 guaranteed after @var{message}.
10453 @end defmac
10455 @anchor{m4_fatal}
10456 @defmac m4_fatal (@var{message})
10457 @msindex{fatal}
10458 Report a severe error @var{message} prefixed with the current location,
10459 and have @command{autom4te} die.
10460 @end defmac
10462 @defmac m4_location
10463 @msindex{location}
10464 Useful as a prefix in a message line.  Short for:
10465 @example
10466 __file__:__line__
10467 @end example
10468 @end defmac
10470 @anchor{m4_warn}
10471 @defmac m4_warn (@var{category}, @var{message})
10472 @msindex{warn}
10473 Report @var{message} as a warning (or as an error if requested by the
10474 user) if warnings of the @var{category} are turned on.  If the message
10475 is emitted, it is prefixed with the current location, and followed by a
10476 call trace of all macros defined via @code{AC_DEFUN} used to get to the
10477 current expansion.  You are encouraged to use standard categories, which
10478 currently include:
10480 @table @samp
10481 @item all
10482 messages that don't fall into one of the following categories.  Use of an
10483 empty @var{category} is equivalent.
10485 @item cross
10486 related to cross compilation issues.
10488 @item obsolete
10489 use of an obsolete construct.
10491 @item syntax
10492 dubious syntactic constructs, incorrectly ordered macro calls.
10493 @end table
10494 @end defmac
10497 @node Diversion support
10498 @subsection Diversion support
10500 M4sugar makes heavy use of diversions, because it is often the case that
10501 text that must appear early in the output is not discovered until late
10502 in the input.  Additionally, some of the topological sorting algorithms
10503 used in resolving macro dependencies use diversions.  Therefore, most
10504 macros should not need to change diversions directly, but rather rely on
10505 higher-level M4sugar macros to manage diversions transparently.
10507 To make diversion management easier, M4sugar uses the concept of named
10508 diversions.  Rather than using diversion numbers directly, it is nicer
10509 to associate a name with each diversion; the diversion number associated
10510 with a particular diversion name is an implementation detail, so you
10511 should only use diversion names.  In general, you should not output text
10512 to a named diversion until after calling the appropriate initialization
10513 routine for your language (@code{m4_init}, @code{AS_INIT},
10514 @code{AT_INIT}, @dots{}), although there are some exceptions documented
10515 below.
10517 M4sugar defines two named diversions.
10518 @table @code
10519 @item KILL
10520 Text written to this diversion is discarded.  This is the default
10521 diversion once M4sugar is initialized.
10522 @item GROW
10523 This diversion is used behind the scenes by topological sorting macros,
10524 such as @code{AC_REQUIRE}.
10525 @end table
10527 M4sh adds several more named diversions.
10528 @table @code
10529 @item BINSH
10530 This diversion is reserved for the @samp{#!} interpreter line.
10531 @item HEADER-REVISION
10532 This diversion holds text from @code{AC_REVISION}.
10533 @item HEADER-COMMENT
10534 This diversion holds comments about the purpose of a file.
10535 @item HEADER-COPYRIGHT
10536 This diversion is managed by @code{AC_COPYRIGHT}.
10537 @item M4SH-SANITIZE
10538 This diversion contains M4sh sanitization code, used to ensure M4sh is
10539 executing in a reasonable shell environment.
10540 @item M4SH-INIT
10541 This diversion contains M4sh initialization code, initializing variables
10542 that are required by other M4sh macros.
10543 @item BODY
10544 This diversion contains the body of the shell code, and is the default
10545 diversion once M4sh is initialized.
10546 @end table
10548 Autotest inherits diversions from M4sh, and changes the default
10549 diversion from @code{BODY} back to @code{KILL}.  It also adds several
10550 more named diversions, with the following subset designed for developer
10551 use.
10552 @table @code
10553 @item PREPARE_TESTS
10554 This diversion contains initialization sequences which are executed
10555 after @file{atconfig} and @file{atlocal}, and after all command line
10556 arguments have been parsed, but prior to running any tests.  It can be
10557 used to set up state that is required across all tests.  This diversion
10558 will work even before @code{AT_INIT}.
10559 @end table
10561 For now, the named diversions of Autoconf and Autoheader, and the
10562 remaining diversions of Autotest, are not documented.  In other words,
10563 intentionally outputting text into an undocumented diversion is subject
10564 to breakage in a future release of Autoconf.
10566 @defmac m4_divert_once (@var{diversion}, @ovar{content})
10567 @msindex{divert_once}
10568 Similar to @code{m4_divert_text}, except that @var{content} is only
10569 output to @var{diversion} if this is the first time that
10570 @code{m4_divert_once} has been called with its particular arguments.
10571 @end defmac
10573 @defmac m4_divert_pop (@ovar{diversion})
10574 @msindex{divert_pop}
10575 If provided, check that the current diversion is indeed @var{diversion}.
10576 Then change to the diversion located earlier on the stack, giving an
10577 error if an attempt is made to pop beyond the initial m4sugar diversion
10578 of @code{KILL}.
10579 @end defmac
10581 @defmac m4_divert_push (@var{diversion})
10582 @msindex{divert_push}
10583 Remember the former diversion on the diversion stack, and output
10584 subsequent text into @var{diversion}.  M4sugar maintains a diversion
10585 stack, and issues an error if there is not a matching pop for every
10586 push.
10587 @end defmac
10589 @defmac m4_divert_text (@var{diversion}, @ovar{content})
10590 @msindex{divert_text}
10591 Output @var{content} and a newline into @var{diversion}, without
10592 affecting the current diversion.  Shorthand for:
10593 @example
10594 m4_divert_push([@var{diversion}])@var{content}
10595 m4_divert_pop([@var{diversion}])dnl
10596 @end example
10597 @end defmac
10599 @defmac m4_init
10600 @msindex{init}
10601 Initialize the M4sugar environment, setting up the default named
10602 diversion to be @code{KILL}.
10603 @end defmac
10605 @node Conditional constructs
10606 @subsection Conditional constructs
10608 The following macros provide additional conditional contructs, as
10609 convenience wrappers around @code{m4_if}.
10611 @defmac m4_bmatch (@var{string}, @var{regex-1}, @var{value-1}, @
10612   @ovar{regex-2}, @ovar{value-2}, @dots{}, @ovar{default})
10613 @msindex{bmatch}
10614 The string @var{string} is repeatedly compared against a series of
10615 @var{regex} arguments; if a match is found, the expansion is the
10616 corresponding @var{value}, otherwise, the macro moves on to the next
10617 @var{regex}.  If no @var{regex} match, then the result is the optional
10618 @var{default}, or nothing.
10619 @end defmac
10621 @defmac m4_bpatsubsts (@var{string}, @var{regex-1}, @var{subst-1}, @
10622   @ovar{regex-2}, @ovar{subst-2}, @dots{})
10623 @msindex{bpatsubsts}
10624 The string @var{string} is altered by @var{regex-1} and @var{subst-1},
10625 as if by:
10626 @example
10627 m4_bpatsubst([[@var{string}]], [@var{regex}], [@var{subst}])
10628 @end example
10630 @noindent
10631 The result of the substitution is then passed through the next set of
10632 @var{regex} and @var{subst}, and so forth.  An empty @var{subst} implies
10633 deletion of any matched portions in the current string.  Note that this
10634 macro over-quotes @var{string}; this behavior is intentional, so that
10635 the result of each step of the recursion remains as a quoted string.
10636 However, it means that anchors (@samp{^} and @samp{$} in the @var{regex}
10637 will line up with the extra quotations, and not the characters of the
10638 original string.
10639 @end defmac
10641 @defmac m4_case (@var{string}, @var{value-1}, @var{if-value-1}, @
10642   @ovar{value-2}, @ovar{if-value-2}, @dots{}, @ovar{default})
10643 @msindex{case}
10644 Test @var{string} against multiple @var{value} possibilities, resulting
10645 in the first @var{if-value} for a match, or in the optional
10646 @var{default}.  This is shorthand for:
10647 @example
10648 m4_if([@var{string}], [@var{value-1}], [@var{if-value-1}],
10649       [@var{string}], [@var{value-2}], [@var{if-value-2}], @dots{},
10650       [@var{default}])
10651 @end example
10652 @end defmac
10654 @defmac m4_cond (@var{test-1}, @var{value-1}, @var{if-value-1}, @
10655   @ovar{test-2}, @ovar{value-2}, @ovar{if-value-2}, @dots{}, @ovar{default})
10656 @msindex{cond}
10657 This macro was introduced in Autoconf 2.62.  Similar to @code{m4_if},
10658 except that each @var{test} is expanded only when it is encountered.
10659 This is useful for short-circuiting expensive tests; while @code{m4_if}
10660 requires all its strings to be expanded up front before doing
10661 comparisons, @code{m4_cond} only expands a @var{test} when all earlier
10662 tests have failed.
10664 For an example, these two sequences give the same result, but in the
10665 case where @samp{$1} does not contain a backslash, the @code{m4_cond}
10666 version only expands @code{m4_index} once, instead of five times, for
10667 faster computation if this is a common case for @samp{$1}.  Notice that
10668 every third argument is unquoted for @code{m4_if}, and quoted for
10669 @code{m4_cond}:
10671 @example
10672 m4_if(m4_index([$1], [\]), [-1], [$2],
10673       m4_eval(m4_index([$1], [\\]) >= 0), [1], [$2],
10674       m4_eval(m4_index([$1], [\$]) >= 0), [1], [$2],
10675       m4_eval(m4_index([$1], [\`]) >= 0), [1], [$3],
10676       m4_eval(m4_index([$1], [\"]) >= 0), [1], [$3],
10677       [$2])
10678 m4_cond([m4_index([$1], [\])], [-1], [$2],
10679         [m4_eval(m4_index([$1], [\\]) >= 0)], [1], [$2],
10680         [m4_eval(m4_index([$1], [\$]) >= 0)], [1], [$2],
10681         [m4_eval(m4_index([$1], [\`]) >= 0)], [1], [$3],
10682         [m4_eval(m4_index([$1], [\"]) >= 0)], [1], [$3],
10683         [$2])
10684 @end example
10685 @end defmac
10687 @defmac m4_default (@var{expr-1}, @var{expr-2})
10688 @msindex{default}
10689 If @var{expr-1} is not empty, use it.  Otherwise, expand to
10690 @var{expr-2}.  Useful for providing a fixed default if the expression
10691 that results in @var{expr-1} would otherwise be empty.
10692 @end defmac
10694 @defmac m4_ifndef (@var{macro}, @var{if-not-defined}, @ovar{if-defined})
10695 @msindex{ifndef}
10696 This is shorthand for:
10697 @example
10698 m4_ifdef([@var{macro}], [@var{if-defined}], [@var{if-not-defined}])
10699 @end example
10700 @end defmac
10702 @defmac m4_ifset (@var{macro}, @ovar{if-true}, @ovar{if-false})
10703 @msindex{ifset}
10704 If @var{macro} is undefined, or is defined as the empty string, expand
10705 to @var{if-false}.  Otherwise, expands to @var{if-true}.  Similar to:
10706 @example
10707 m4_ifval(m4_defn([@var{macro}]), [@var{if-true}], [@var{if-false}])
10708 @end example
10709 @noindent
10710 except that it is not an error if @var{macro} is undefined.
10711 @end defmac
10713 @defmac m4_ifval (@var{cond}, @ovar{if-true}, @ovar{if-false})
10714 @msindex{ifval}
10715 Expands to @var{if-true} if @var{cond} is not empty, otherwise to
10716 @var{if-false}.  This is shorthand for:
10717 @example
10718 m4_if([@var{cond}], [], [@var{if-true}], [@var{if-false}])
10719 @end example
10720 @end defmac
10722 @defmac m4_ifvaln (@var{cond}, @ovar{if-true}, @ovar{if-false})
10723 @msindex{ifvaln}
10724 Similar to @code{m4_ifval}, except guarantee that a newline is present
10725 after any non-empty expansion.
10726 @end defmac
10728 @defmac m4_n (@var{text})
10729 @msindex{n}
10730 Expand to @var{text}, and add a newline if @var{text} is not empty.
10731 @end defmac
10734 @node Looping constructs
10735 @subsection Looping constructs
10737 The following macros are useful in implementing recursive algorithms in
10738 M4, including loop operations.  An M4 list is formed by quoting a list
10739 of quoted elements; generally the lists are comma-separated, although
10740 @code{m4_foreach_w} is whitespace-separated.  For example, the list
10741 @samp{[[a], [b,c]]} contains two elements: @samp{[a]} and @samp{[b,c]}.
10742 It is common to see lists with unquoted elements when those elements are
10743 not likely to be macro names, as in @samp{[fputc_unlocked,
10744 fgetc_unlocked]}.
10746 @defmac m4_car (@var{list})
10747 @msindex{car}
10748 Expands to the quoted first element of the comma-separated quoted
10749 @var{list}.  Often used with @code{m4_cdr} to recursively iterate
10750 through a list.  Generally, when using quoted lists of quoted elements,
10751 @code{m4_car} should be called without any extra quotes.
10752 @end defmac
10754 @defmac m4_cdr (@var{list})
10755 @msindex{cdr}
10756 Expands to a quoted list of all but the first element of the
10757 comma-separated quoted @var{list}, or the empty string if @var{list} had
10758 only one element.  Generally, when using quoted lists of quoted
10759 elements, @code{m4_cdr} should be called without any extra quotes.
10761 For example, this is a simple implementation of @code{m4_map}; note how
10762 each iteration checks for the end of recursion, then merely applies the
10763 first argument to the first element of the list, then repeats with the
10764 rest of the list.  (The actual implementation in M4sugar is a bit more
10765 involved, to gain some speed and share code with @code{m4_map_sep}).
10766 @example
10767 m4_define([m4_map], [m4_ifval([$2],
10768   [m4_apply([$1], m4_car($2))[]$0([$1], m4_cdr($2))])])dnl
10769 m4_map([ m4_eval], [[[1]], [[1+1]], [[10],[16]]])
10770 @result{} 1 2 a
10771 @end example
10772 @end defmac
10774 @defmac m4_for (@var{var}, @var{first}, @var{last}, @ovar{step}, @
10775   @var{expression})
10776 @msindex{for}
10777 Loop over the numeric values between @var{first} and @var{last}
10778 including bounds by increments of @var{step}.  For each iteration,
10779 expand @var{expression} with the numeric value assigned to @var{var}.
10780 If @var{step} is omitted, it defaults to @samp{1} or @samp{-1} depending
10781 on the order of the limits.  If given, @var{step} has to match this
10782 order.  The number of iterations is determined independently from
10783 definition of @var{var}; iteration cannot be short-circuited or
10784 lengthened by modifying @var{var} from within @var{expression}.
10785 @end defmac
10787 @defmac m4_foreach (@var{var}, @var{list}, @var{expression})
10788 @msindex{foreach}
10789 Loop over the comma-separated M4 list @var{list}, assigning each value
10790 to @var{var}, and expand @var{expression}.  The following example
10791 outputs two lines:
10793 @example
10794 m4_foreach([myvar], [[foo], [bar, baz]],
10795            [echo myvar
10796 ])dnl
10797 @result{}echo foo
10798 @result{}echo bar, baz
10799 @end example
10800 @end defmac
10802 @anchor{m4_foreach_w}
10803 @defmac m4_foreach_w (@var{var}, @var{list}, @var{expression})
10804 @msindex{foreach_w}
10805 Loop over the white-space-separated list @var{list}, assigning each value
10806 to @var{var}, and expand @var{expression}.
10808 The deprecated macro @code{AC_FOREACH} is an alias of
10809 @code{m4_foreach_w}.
10810 @end defmac
10812 @defmac m4_map (@var{macro}, @var{list})
10813 @defmacx m4_map_sep (@var{macro}, @var{separator}, @var{list})
10814 Loop over the comma separated quoted list of argument descriptions in
10815 @var{list}, and invoke @var{macro} with the arguments.  An argument
10816 description is in turn a comma-separated quoted list of quoted elements,
10817 suitable for @code{m4_apply}, making it possible to invoke @var{macro}
10818 without arguments if an argument description is empty.
10819 @code{m4_map_sep} additionally outputs @var{separator} between macro
10820 invocations, with no additional expansion of the separator.
10821 @example
10822 m4_map([m4_count], [])
10823 @result{}
10824 m4_map([ m4_count], [[],
10825                      [[1]],
10826                      [[1], [2]]])
10827 @result{} 0 1 2
10828 m4_map_sep([m4_eval], [,], [[[1+2]],
10829                             [[10], [16]]])
10830 @result{}3,a
10831 @end example
10832 @end defmac
10834 @defmac m4_shiftn (@var{count}, @dots{})
10835 @defmacx m4_shift2 (@dots{})
10836 @defmacx m4_shift3 (@dots{})
10837 @msindex{shift2}
10838 @msindex{shift3}
10839 @msindex{shiftn}
10840 @code{m4_shiftn} performs @var{count} iterations of @code{m4_shift},
10841 along with validation that enough arguments were passed in to match the
10842 shift count, and that the count is positive.  @code{m4_shift2} and
10843 @code{m4_shift3} are specializations
10844 of @code{m4_shiftn}, introduced in Autoconf 2.62, and are more efficient
10845 for two and three shifts, respectively.
10846 @end defmac
10849 @node Evaluation Macros
10850 @subsection Evaluation Macros
10852 The following macros give some control over the order of the evaluation
10853 by adding or removing levels of quotes.
10855 @defmac m4_apply (@var{macro}, @var{list})
10856 @msindex{apply}
10857 Apply the elements of the quoted, comma-separated @var{list} as the
10858 arguments to @var{macro}.  If @var{list} is empty, invoke @var{macro}
10859 without arguments.  Note the difference between @code{m4_indir}, which
10860 expects its first argument to be a macro name but can use names that are
10861 otherwise invalid, and @code{m4_apply}, where @var{macro} can contain
10862 other text, but must end in a valid macro name.
10863 @example
10864 m4_apply([m4_count], [])
10865 @result{}0
10866 m4_apply([m4_count], [[]])
10867 @result{}1
10868 m4_apply([m4_count], [[1], [2]])
10869 @result{}2
10870 m4_apply([m4_join], [[|], [1], [2]])
10871 @result{}1|2
10872 @end example
10873 @end defmac
10875 @defmac m4_count (@var{arg}, @dots{})
10876 @msindex{count}
10877 This macro returns the decimal count of the number of arguments it was
10878 passed.
10879 @end defmac
10881 @defmac m4_do (@var{arg}, @dots{})
10882 @msindex{do}
10883 This macro loops over its arguments and expands each @var{arg} in
10884 sequence.  Its main use is for readability; it allows the use of
10885 indentation and fewer @code{dnl} to result in the same expansion.  This
10886 macro guarantees that no expansion will be concatenated with subsequent
10887 text; to achieve full concatenation, use @code{m4_unquote(m4_join([],
10888 @var{arg@dots{}}))}.
10890 @example
10891 m4_define([ab],[1])m4_define([bc],[2])m4_define([abc],[3])dnl
10892 m4_do([a],[b])c
10893 @result{}abc
10894 m4_unquote(m4_join([],[a],[b]))c
10895 @result{}3
10896 m4_define([a],[A])m4_define([b],[B])m4_define([c],[C])dnl
10897 m4_define([AB],[4])m4_define([BC],[5])m4_define([ABC],[6])dnl
10898 m4_do([a],[b])c
10899 @result{}ABC
10900 m4_unquote(m4_join([],[a],[b]))c
10901 @result{}3
10902 @end example
10903 @end defmac
10905 @defmac m4_dquote (@var{arg}, @dots{})
10906 @msindex{dquote}
10907 Return the arguments as a quoted list of quoted arguments.
10908 Conveniently, if there is just one @var{arg}, this effectively adds a
10909 level of quoting.
10910 @end defmac
10912 @defmac m4_dquote_elt (@var{arg}, @dots{})
10913 @msindex{dquote_elt}
10914 Return the arguments as a series of double-quoted arguments.  Whereas
10915 @code{m4_dquote} returns a single argument, @code{m4_dquote_elt} returns
10916 as many arguments as it was passed.
10917 @end defmac
10919 @defmac m4_echo (@var{arg}, @dots{})
10920 @msindex{echo}
10921 Return the arguments, with the same level of quoting.  Other than
10922 discarding whitespace after unquoted commas, this macro is a no-op.
10923 @end defmac
10925 @defmac m4_expand (@var{arg})
10926 @msindex{expand}
10927 Return the expansion of @var{arg} as a quoted string.  Whereas
10928 @code{m4_quote} is designed to collect expanded text into a single
10929 argument, @code{m4_expand} is designed to perform one level of expansion
10930 on quoted text.  The distinction is in the treatment of whitespace
10931 following a comma in the original @var{arg}.  Any time multiple
10932 arguments are collected into one with @code{m4_quote}, the M4 argument
10933 collection rules discard the whitespace.  However, with @code{m4_expand},
10934 whitespace is preserved, even after the expansion of macros contained in
10935 @var{arg}.
10937 @example
10938 m4_define([active], [ACT, IVE])dnl
10939 m4_define([active2], [[ACT, IVE]])dnl
10940 m4_quote(active, active)
10941 @result{}ACT,IVE,ACT,IVE
10942 m4_expand([active, active])
10943 @result{}ACT, IVE, ACT, IVE
10944 m4_quote(active2, active2)
10945 @result{}ACT, IVE,ACT, IVE
10946 m4_expand([active2, active2])
10947 @result{}ACT, IVE, ACT, IVE
10948 @end example
10950 Note that @code{m4_expand} cannot handle an @var{arg} that expands to
10951 literal unbalanced quotes, but that quadrigraphs can be used when
10952 unbalanced output is necessary.  Likewise, unbalanced parentheses must
10953 be supplied with double quoting or a quadrigraph.
10955 @example
10956 m4_define([pattern], [[!@@<:@@]])dnl
10957 m4_define([bar], [BAR])dnl
10958 m4_expand([case $foo in
10959   m4_defn([pattern])@@:@}@@ bar ;;
10960   *[)] blah ;;
10961 esac])
10962 @result{}case $foo in
10963 @result{}  [![]) BAR ;;
10964 @result{}  *) blah ;;
10965 @result{}esac
10966 @end example
10967 @end defmac
10969 @defmac m4_ignore (@dots{})
10970 @msindex{ignore}
10971 This macro was introduced in Autoconf 2.62.  Expands to nothing,
10972 ignoring all of its arguments.  By itself, this isn't very useful.
10973 However, it can be used to conditionally ignore an arbitrary number of
10974 arguments, by deciding which macro name to apply to a list of arguments.
10975 @example
10976 dnl foo outputs a message only if [debug] is defined.
10977 m4_define([foo],
10978 [m4_ifdef([debug],[AC_MSG_NOTICE],[m4_ignore])([debug message])])
10979 @end example
10981 Note that for earlier versions of Autoconf, the macro @code{__gnu__} can
10982 serve the same purpose, although it is less readable.
10983 @end defmac
10985 @defmac m4_make_list (@var{arg}, @dots{})
10986 @msindex{make_list}
10987 This macro exists to aid debugging of M4sugar algorithms.  Its net
10988 effect is similar to @code{m4_dquote}---it produces a quoted list of
10989 quoted arguments, for each @var{arg}.  The difference is that this
10990 version uses a comma-newline separator instead of just comma, to improve
10991 readability of the list; with the result that it is less efficient than
10992 @code{m4_dquote}.
10993 @example
10994 m4_define([zero],[0])m4_define([one],[1])m4_define([two],[2])dnl
10995 m4_dquote(zero, [one], [[two]])
10996 @result{}[0],[one],[[two]]
10997 m4_make_list(zero, [one], [[two]])
10998 @result{}[0],
10999 @result{}[one],
11000 @result{}[[two]]
11001 m4_foreach([number], m4_dquote(zero, [one], [[two]]), [ number])
11002 @result{} 0 1 two
11003 m4_foreach([number], m4_make_list(zero, [one], [[two]]), [ number])
11004 @result{} 0 1 two
11005 @end example
11006 @end defmac
11008 @c m4_noquote is too dangerous to document - it invokes macros that
11009 @c probably rely on @samp{[]} nested quoting for proper operation.  The
11010 @c user should generally prefer m4_unquote instead.
11012 @defmac m4_quote (@var{arg}, @dots{})
11013 @msindex{quote}
11014 Return the arguments as a single entity, i.e., wrap them into a pair of
11015 quotes.  This effectively collapses multiple arguments into one,
11016 although it loses whitespace after unquoted commas in the process.
11017 @end defmac
11019 @defmac m4_reverse (@var{arg}, @dots{})
11020 @msindex{reverse}
11021 Outputs each argument with the same level of quoting, but in reverse
11022 order, and with space following each comma for readability.
11024 @example
11025 m4_define([active], [ACT,IVE])
11026 @result{}
11027 m4_reverse(active, [active])
11028 @result{}active, IVE, ACT
11029 @end example
11030 @end defmac
11032 @defmac m4_unquote (@var{arg}, @dots{})
11033 @msindex{unquote}
11034 This macro was introduced in Autoconf 2.62.  Expand each argument,
11035 separated by commas.  For a single @var{arg}, this effectively removes a
11036 layer of quoting, and @code{m4_unquote([@var{arg}])} is more efficient
11037 than the equivalent @code{m4_do([@var{arg}])}.  For multiple arguments,
11038 this results in an unquoted list of expansions.  This is commonly used
11039 with @code{m4_split}, in order to convert a single quoted list into a
11040 series of quoted elements.
11041 @end defmac
11043 The following example aims at emphasizing the difference between several
11044 scenarios: not using these macros, using @code{m4_defn}, using
11045 @code{m4_quote}, using @code{m4_dquote}, and using @code{m4_expand}.
11047 @example
11048 $ @kbd{cat example.m4}
11049 dnl Overquote, so that quotes are visible.
11050 m4_define([show], [$[]1 = [$1], $[]@@ = [$@@]])
11051 m4_define([a], [A])
11052 m4_define([mkargs], [1, 2[,] 3])
11053 m4_define([arg1], [[$1]])
11054 m4_divert([0])dnl
11055 show(a, b)
11056 show([a, b])
11057 show(m4_quote(a, b))
11058 show(m4_dquote(a, b))
11059 show(m4_expand([a, b]))
11061 arg1(mkargs)
11062 arg1([mkargs])
11063 arg1(m4_defn([mkargs]))
11064 arg1(m4_quote(mkargs))
11065 arg1(m4_dquote(mkargs))
11066 arg1(m4_expand([mkargs]))
11067 $ @kbd{autom4te -l m4sugar example.m4}
11068 $1 = A, $@@ = [A],[b]
11069 $1 = a, b, $@@ = [a, b]
11070 $1 = A,b, $@@ = [A,b]
11071 $1 = [A],[b], $@@ = [[A],[b]]
11072 $1 = A, b, $@@ = [A, b]
11075 mkargs
11076 1, 2[,] 3
11077 1,2, 3
11078 [1],[2, 3]
11079 1, 2, 3
11080 @end example
11083 @node Text processing Macros
11084 @subsection String manipulation in M4
11086 The following macros may be used to manipulate strings in M4.  Many of
11087 the macros in this section intentionally result in quoted strings as
11088 output, rather than subjecting the arguments to further expansions.  As
11089 a result, if you are manipulating text that contains active M4
11090 characters, the arguments are passed with single quoting rather than
11091 double.
11093 @defmac m4_append (@var{macro-name}, @var{string}, @ovar{separator})
11094 @defmacx m4_append_uniq (@var{macro-name}, @var{string}, @ovar{separator} @
11095   @ovar{if-uniq}, @ovar{if-duplicate})
11096 @msindex{append}
11097 @msindex{append_uniq}
11098 Redefine @var{macro-name} to its former contents with @var{separator}
11099 and @var{string} added at the end.  If @var{macro-name} was undefined
11100 before (but not if it was defined but empty), then no @var{separator} is
11101 added.  As of Autoconf 2.62, neither @var{string} nor @var{separator}
11102 are expanded during this macro; instead, they are expanded when
11103 @var{macro-name} is invoked.
11105 @code{m4_append} can be used to grow strings, and @code{m4_append_uniq}
11106 to grow strings without duplicating substrings.  Additionally,
11107 @code{m4_append_uniq} takes two optional parameters as of Autoconf 2.62;
11108 @var{if-uniq} is expanded if @var{string} was appended, and
11109 @var{if-duplicate} is expanded if @var{string} was already present.
11110 Also, @code{m4_append_uniq} warns if @var{separator} is not empty, but
11111 occurs within @var{string}, since that can lead to duplicates.
11113 Note that @code{m4_append} can scale linearly in the length of the final
11114 string, depending on the quality of the underlying M4 implementation,
11115 while @code{m4_append_uniq} has an inherent quadratic scaling factor.
11116 If an algorithm can tolerate duplicates in the final string, use the
11117 former for speed.  If duplicates must be avoided, consider using
11118 @code{m4_set_add} instead (@pxref{Set manipulation Macros}).
11120 @example
11121 m4_define([active], [ACTIVE])dnl
11122 m4_append([sentence], [This is an])dnl
11123 m4_append([sentence], [ active ])dnl
11124 m4_append([sentence], [symbol.])dnl
11125 sentence
11126 @result{}This is an ACTIVE symbol.
11127 m4_undefine([active])dnl
11128 @result{}This is an active symbol.
11129 m4_append_uniq([list], [one], [, ], [new], [existing])
11130 @result{}new
11131 m4_append_uniq([list], [one], [, ], [new], [existing])
11132 @result{}existing
11133 m4_append_uniq([list], [two], [, ], [new], [existing])
11134 @result{}new
11135 m4_append_uniq([list], [three], [, ], [new], [existing])
11136 @result{}new
11137 m4_append_uniq([list], [two], [, ], [new], [existing])
11138 @result{}existing
11139 list
11140 @result{}one, two, three
11141 m4_dquote(list)
11142 @result{}[one],[two],[three]
11143 m4_append([list2], [one], [[, ]])dnl
11144 m4_append_uniq([list2], [two], [[, ]])dnl
11145 m4_append([list2], [three], [[, ]])dnl
11146 list2
11147 @result{}one, two, three
11148 m4_dquote(list2)
11149 @result{}[one, two, three]
11150 @end example
11151 @end defmac
11153 @defmac m4_append_uniq_w (@var{macro-name}, @var{strings})
11154 @msindex{append_uniq_w}
11155 This macro was introduced in Autoconf 2.62.  It is similar to
11156 @code{m4_append_uniq}, but treats @var{strings} as a whitespace
11157 separated list of words to append, and only appends unique words.
11158 @var{macro-name} is updated with a single space between new words.
11159 @example
11160 m4_append_uniq_w([numbers], [1 1 2])dnl
11161 m4_append_uniq_w([numbers], [ 2 3 ])dnl
11162 numbers
11163 @result{}1 2 3
11164 @end example
11165 @end defmac
11167 @defmac m4_combine (@ovar{separator}, @var{prefix-list}, @ovar{infix}, @
11168   @var{suffix-1}, @ovar{suffix-2}, @dots{})
11169 @msindex{combine}
11170 This macro produces a quoted string containing the pairwise combination
11171 of every element of the quoted, comma-separated @var{prefix-list}, and
11172 every element from the @var{suffix} arguments.  Each pairwise
11173 combination is joined with @var{infix} in the middle, and successive
11174 pairs are joined by @var{separator}.  No expansion occurs on any of the
11175 arguments.  No output occurs if either the @var{prefix} or @var{suffix}
11176 list is empty, but the lists can contain empty elements.
11177 @example
11178 m4_define([a], [oops])dnl
11179 m4_combine([, ], [[a], [b], [c]], [-], [1], [2], [3])
11180 @result{}a-1, a-2, a-3, b-1, b-2, b-3, c-1, c-2, c-3
11181 m4_combine([, ], [[a], [b]], [-])
11182 @result{}
11183 m4_combine([, ], [[a], [b]], [-], [])
11184 @result{}a-, b-
11185 m4_combine([, ], [], [-], [1], [2])
11186 @result{}
11187 m4_combine([, ], [[]], [-], [1], [2])
11188 @result{}-1, -2
11189 @end example
11190 @end defmac
11192 @defmac m4_flatten (@var{string})
11193 @msindex{flatten}
11194 Flatten @var{string} into a single line.  Delete all backslash-newline
11195 pairs, and replace all remaining newlines with a space.  The result is
11196 still a quoted string.
11197 @end defmac
11199 @defmac m4_join (@ovar{separator}, @var{args}@dots{})
11200 @defmacx m4_joinall (@ovar{separator}, @var{args}@dots{})
11201 @msindex{join}
11202 @msindex{joinall}
11203 Concatenate each @var{arg}, separated by @var{separator}.
11204 @code{joinall} uses every argument, while @code{join} omits empty
11205 arguments so that there are no back-to-back separators in the output.
11206 The result is a quoted string.
11207 @example
11208 m4_define([active], [ACTIVE])dnl
11209 m4_join([|], [one], [], [active], [two])
11210 @result{}one|active|two
11211 m4_joinall([|], [one], [], [active], [two])
11212 @result{}one||active|two
11213 @end example
11215 Note that if all you intend to do is join @var{args} with commas between
11216 them, to form a quoted list suitable for @code{m4_foreach}, it is more
11217 efficient to use @code{m4_dquote}.
11218 @end defmac
11220 @defmac m4_newline
11221 @msindex{newline}
11222 This macro was introduced in Autoconf 2.62, and expands to a newline.
11223 It is primarily useful for maintaining macro formatting, and ensuring
11224 that M4 does not discard leading whitespace during argument collection.
11225 @end defmac
11227 @defmac m4_normalize (@var{string})
11228 @msindex{normalize}
11229 Remove leading and trailing spaces and tabs, sequences of
11230 backslash-then-newline, and replace multiple spaces, tabs, and newlines
11231 with a single space.  This is a combination of @code{m4_flatten} and
11232 @code{m4_strip}.
11233 @end defmac
11235 @defmac m4_re_escape (@var{string})
11236 @msindex{re_escape}
11237 Backslash-escape all characters in @var{string} that are active in
11238 regexps.
11239 @end defmac
11241 @defmac m4_split (@var{string}, @dvar{regexp, [\t ]+})
11242 @msindex{split}
11243 Split @var{string} into an M4 list of elements quoted by @samp{[} and
11244 @samp{]}, while keeping white space at the beginning and at the end.
11245 If @var{regexp} is given, use it instead of @samp{[\t ]+} for splitting.
11246 If @var{string} is empty, the result is an empty list.
11247 @end defmac
11249 @defmac m4_strip (@var{string})
11250 @msindex{strip}
11251 Strip whitespace from @var{string}.  Sequences of spaces and tabs are
11252 reduced to a single space, then leading and trailing spaces are removed.
11253 The result is still a quoted string.  Note that this does not interfere
11254 with newlines; if you want newlines stripped as well, consider
11255 @code{m4_flatten}, or do it all at once with @code{m4_normalize}.
11256 @end defmac
11258 @defmac m4_text_box (@var{message}, @dvar{frame, -})
11259 @msindex{text_box}
11260 Add a text box around @var{message}, using @var{frame} as the border
11261 character above and below the message.  The frame correctly accounts for
11262 the subsequent expansion of @var{message}.  For example:
11263 @example
11264 m4_define([macro], [abc])dnl
11265 m4_text_box([macro])
11266 @result{}## --- ##
11267 @result{}## abc ##
11268 @result{}## --- ##
11269 @end example
11271 The @var{message} must contain balanced quotes and parentheses, although
11272 quadrigraphs can be used to work around this.
11273 @end defmac
11275 @defmac m4_text_wrap (@var{string}, @ovar{prefix}, @
11276   @dvar{prefix1, @var{prefix}}, @dvar{width, 79})
11277 @msindex{text_wrap}
11278 Break @var{string} into a series of whitespace-separated words, then
11279 output those words separated by spaces, and wrapping lines any time the
11280 output would exceed @var{width} columns.  If given, @var{prefix1} begins
11281 the first line, and @var{prefix} begins all wrapped lines.  If
11282 @var{prefix1} is longer than @var{prefix}, then the first line consists
11283 of just @var{prefix1}.  If @var{prefix} is longer than @var{prefix1},
11284 padding is inserted so that the first word of @var{string} begins at the
11285 same indentation as all wrapped lines.  Note that using literal tab
11286 characters in any of the arguments will interfere with the calculation
11287 of width.  No expansions occur on @var{prefix}, @var{prefix1}, or the
11288 words of @var{string}, although quadrigraphs are recognized.
11290 For some examples:
11291 @example
11292 m4_text_wrap([Short string */], [   ], [/* ], [20])
11293 @result{}/* Short string */
11294 m4_text_wrap([Much longer string */], [   ], [/* ], [20])
11295 @result{}/* Much longer
11296 @result{}   string */
11297 m4_text_wrap([Short doc.], [          ], [  --short ], [30])
11298 @result{}  --short Short doc.
11299 m4_text_wrap([Short doc.], [          ], [  --too-wide ], [30])
11300 @result{}  --too-wide
11301 @result{}          Short doc.
11302 m4_text_wrap([Super long documentation.], [     ],
11303              [  --too-wide ], 30)
11304 @result{}  --too-wide
11305 @result{}     Super long
11306 @result{}     documentation.
11307 @end example
11308 @end defmac
11310 @defmac m4_tolower (@var{string})
11311 @defmacx m4_toupper (@var{string})
11312 @msindex{tolower}
11313 @msindex{toupper}
11314 Return @var{string} with letters converted to upper or lower case,
11315 respectively.
11316 @end defmac
11318 @node Number processing Macros
11319 @subsection Arithmetic computation in M4
11321 The following macros facilitate integer arithmetic operations.
11322 Where a parameter is documented as taking an arithmetic expression, you
11323 can use anything that can be parsed by @code{m4_eval}.
11325 @defmac m4_cmp (@var{expr-1}, @var{expr-2})
11326 @msindex{cmp}
11327 Compare the arithmetic expressions @var{expr-1} and @var{expr-2}, and
11328 expand to @samp{-1} if @var{expr-1} is smaller, @samp{0} if they are
11329 equal, and @samp{1} if @var{expr-1} is larger.
11330 @end defmac
11332 @defmac m4_list_cmp (@var{list-1}, @var{list-2})
11333 @msindex{list_cmp}
11334 Compare the two M4 lists consisting of comma-separated arithmetic
11335 expressions, left to right.  Expand to @samp{-1} for the first element
11336 pairing where the value from @var{list-1} is smaller, @samp{1} where the
11337 value from @var{list-2} is smaller, or @samp{0} if both lists have the
11338 same values.  If one list is shorter than the other, the remaining
11339 elements of the longer list are compared against zero.
11340 @example
11341 m4_list_cmp([1, 0],       [1])
11342 @result{}0
11343 m4_list_cmp([1, [1 * 0]], [1, 0])
11344 @result{}0
11345 m4_list_cmp([1, 2],       [1, 0])
11346 @result{}1
11347 m4_list_cmp([1, [1+1], 3],[1, 2])
11348 @result{}1
11349 m4_list_cmp([1, 2, -3],   [1, 2])
11350 @result{}-1
11351 m4_list_cmp([1, 0],       [1, 2])
11352 @result{}-1
11353 m4_list_cmp([1],          [1, 2])
11354 @result{}-1
11355 @end example
11356 @end defmac
11358 @defmac m4_max (@var{arg}, @dots{})
11359 @msindex{max}
11360 This macro was introduced in Autoconf 2.62.  Expand to the decimal value
11361 of the maximum arithmetic expression among all the arguments.
11362 @end defmac
11364 @defmac m4_min (@var{arg}, @dots{})
11365 @msindex{min}
11366 This macro was introduced in Autoconf 2.62.  Expand to the decimal value
11367 of the minimum arithmetic expression among all the arguments.
11368 @end defmac
11370 @defmac m4_sign (@var{expr})
11371 @msindex{sign}
11372 Expand to @samp{-1} if the arithmetic expression @var{expr} is negative,
11373 @samp{1} if it is positive, and @samp{0} if it is zero.
11374 @end defmac
11376 @anchor{m4_version_compare}
11377 @defmac m4_version_compare (@var{version-1}, @var{version-2})
11378 @msindex{version_compare}
11379 This macro was introduced in Autoconf 2.53, but had a number of
11380 usability limitations that were not lifted until Autoconf 2.62.  Compare
11381 the version strings @var{version-1} and @var{version-2}, and expand to
11382 @samp{-1} if @var{version-1} is smaller, @samp{0} if they are the same,
11383 or @samp{1} @var{version-2} is smaller.  Version strings must be a list
11384 of elements separated by @samp{.}, @samp{,} or @samp{-}, where each
11385 element is a number along with optional case-insensitive letters
11386 designating beta releases.  The comparison stops at the leftmost element
11387 that contains a difference, although a 0 element compares equal to a
11388 missing element.
11390 It is permissible to include commit identifiers in @var{version}, such
11391 as an abbreviated SHA1 of the commit, provided there is still a
11392 monotonically increasing prefix to allow for accurate version-based
11393 comparisons.  For example, this paragraph was written when the
11394 development snapshot of autoconf claimed to be at version
11395 @samp{2.61a-248-dc51}, or 248 commits after the 2.61a release, with an
11396 abbreviated commit identification of @samp{dc51}.
11398 @example
11399 m4_version_compare([1.1], [2.0])
11400 @result{}-1
11401 m4_version_compare([2.0b], [2.0a])
11402 @result{}1
11403 m4_version_compare([1.1.1], [1.1.1a])
11404 @result{}-1
11405 m4_version_compare([1.2], [1.1.1a])
11406 @result{}1
11407 m4_version_compare([1.0], [1])
11408 @result{}0
11409 m4_version_compare([1.1pre], [1.1PRE])
11410 @result{}0
11411 m4_version_compare([1.1a], [1,10])
11412 @result{}-1
11413 m4_version_compare([2.61a], [2.61a-248-dc51])
11414 @result{}-1
11415 m4_version_compare([2.61b], [2.61a-248-dc51])
11416 @result{}1
11417 @end example
11418 @end defmac
11421 @node Set manipulation Macros
11422 @subsection Set manipulation in M4
11423 @cindex Set manipulation
11424 @cindex Data structure, set
11425 @cindex Unordered set manipulation
11427 Sometimes, it is necessary to track a set of data, where the order does
11428 not matter and where there are no duplicates in the set.  The following
11429 macros facilitate set manipulations.  Each set is an opaque object,
11430 which can only be accessed via these basic operations.  The underlying
11431 implementation guarantees linear scaling for set creation, which is more
11432 efficient than using the quadratic @code{m4_append_uniq}.  Both set
11433 names and values can be arbitrary strings, except for unbalanced quotes.
11434 This implementation ties up memory for removed elements until the next
11435 operation that must traverse all the elements of a set; and although
11436 that may slow down some operations until the memory for removed elements
11437 is pruned, it still guarantees linear performance.
11439 @defmac m4_set_add (@var{set}, @var{value}, @ovar{if-uniq}, @ovar{if-dup})
11440 @msindex{set_add}
11441 Adds the string @var{value} as a member of set @var{set}.  Expand
11442 @var{if-uniq} if the element was added, or @var{if-dup} if it was
11443 previously in the set.  Operates in amortized constant time, so that set
11444 creation scales linearly.
11445 @end defmac
11447 @defmac m4_set_add_all (@var{set}, @var{value}@dots{})
11448 @msindex{set_add_all}
11449 Adds each @var{value} to the set @var{set}.  This is slightly more
11450 efficient than repeatedly invoking @code{m4_set_add}.
11451 @end defmac
11453 @defmac m4_set_contains (@var{set}, @var{value}, @ovar{if-present}, @
11454  @ovar{if-absent})
11455 @msindex{set_contains}
11456 Expands @var{if-present} if the string @var{value} is a member of
11457 @var{set}, otherwise @var{if-absent}.
11459 @example
11460 m4_set_contains([a], [1], [yes], [no])
11461 @result{}no
11462 m4_set_add([a], [1], [added], [dup])
11463 @result{}added
11464 m4_set_add([a], [1], [added], [dup])
11465 @result{}dup
11466 m4_set_contains([a], [1], [yes], [no])
11467 @result{}yes
11468 m4_set_remove([a], [1], [removed], [missing])
11469 @result{}removed
11470 m4_set_contains([a], [1], [yes], [no])
11471 @result{}no
11472 m4_set_remove([a], [1], [removed], [missing])
11473 @result{}missing
11474 @end example
11475 @end defmac
11477 @defmac m4_set_contents (@var{set}, @ovar{sep})
11478 @defmacx m4_set_dump (@var{set}, @ovar{sep})
11479 @msindex{set_contents}
11480 @msindex{set_dump}
11481 Expands to a single string consisting of all the members of the set
11482 @var{set}, each separated by @var{sep}, which is not expanded.
11483 @code{m4_set_contents} leaves the elements in @var{set} but reclaims any
11484 memory occupied by removed elements, while @code{m4_set_dump} is a
11485 faster one-shot action that also deletes the set.  No provision is made
11486 for disambiguating members that contain a non-empty @var{sep} as a
11487 substring; use @code{m4_set_empty} to distinguish between an empty set
11488 and the set containing only the empty string.  The order of the output
11489 is unspecified; in the current implementation, part of the speed of
11490 @code{m4_set_dump} results from using a different output order than
11491 @code{m4_set_contents}.  These macros scale linearly in the size of the
11492 set before memory pruning, and @code{m4_set_contents([@var{set}],
11493 [@var{sep}])} is faster than
11494 @code{m4_joinall([@var{sep}]m4_set_listc([@var{set}]))}.
11496 @example
11497 m4_set_add_all([a], [1], [2], [3])
11498 @result{}
11499 m4_set_contents([a], [-])
11500 @result{}1-2-3
11501 m4_joinall([-]m4_set_listc([a]))
11502 @result{}1-2-3
11503 m4_set_dump([a], [-])
11504 @result{}3-2-1
11505 m4_set_contents([a])
11506 @result{}
11507 m4_set_add([a], [])
11508 @result{}
11509 m4_set_contents([a], [-])
11510 @result{}
11511 @end example
11512 @end defmac
11514 @defmac m4_set_delete (@var{set})
11515 @msindex{set_delete}
11516 Delete all elements and memory associated with @var{set}.  This is
11517 linear in the set size, and faster than removing one element at a time.
11518 @end defmac
11520 @defmac m4_set_difference (@var{seta}, @var{setb})
11521 @defmacx m4_set_intersection (@var{seta}, @var{setb})
11522 @defmacx m4_set_union (@var{seta}, @var{setb})
11523 @msindex{set_difference}
11524 @msindex{set_intersection}
11525 @msindex{set_union}
11526 Compute the relation between @var{seta} and @var{setb}, and output the
11527 result as a list of quoted arguments without duplicates and with a
11528 leading comma.  Set difference selects the elements in @var{seta} but
11529 not @var{setb}, intersection selects only elements in both sets, and
11530 union selects elements in either set.  These actions are linear in the
11531 sum of the set sizes.  The leading comma is necessary to distinguish
11532 between no elements and the empty string as the only element.
11534 @example
11535 m4_set_add_all([a], [1], [2], [3])
11536 @result{}
11537 m4_set_add_all([b], [3], [], [4])
11538 @result{}
11539 m4_set_difference([a], [b])
11540 @result{},1,2
11541 m4_set_difference([b], [a])
11542 @result{},,4
11543 m4_set_intersection([a], [b])
11544 @result{},3
11545 m4_set_union([a], [b])
11546 @result{},1,2,3,,4
11547 @end example
11548 @end defmac
11550 @defmac m4_set_empty (@var{set}, @ovar{if-empty}, @ovar{if-elements})
11551 @msindex{set_empty}
11552 Expand @var{if-empty} if the set @var{set} has no elements, otherwise
11553 expand @var{if-elements}.  This macro operates in constant time.  Using
11554 this macro can help disambiguate output from @code{m4_set_contents} or
11555 @code{m4_set_list}.
11556 @end defmac
11558 @defmac m4_set_foreach (@var{set}, @var{variable}, @var{action})
11559 @msindex{set_foreach}
11560 For each element in the set @var{set}, expand @var{action} with the
11561 macro @var{variable} defined as the set element.  Behavior is
11562 unspecified if @var{action} recursively lists the contents of @var{set}
11563 (although listing other sets is acceptable), or if it modifies the set
11564 in any way other than removing the element currently contained in
11565 @var{variable}.  This macro is faster than the corresponding
11566 @code{m4_foreach([@var{variable}],
11567 m4_indir([m4_dquote]m4_set_listc([@var{set}])), [@var{action}])}.
11569 @example
11570 m4_set_add_all([a]m4_for([i], [1], [5], [], [,i]))
11571 @result{}
11572 m4_set_contents([a])
11573 @result{}12345
11574 m4_set_foreach([a], [i],
11575   [m4_if(m4_eval(i&1), [0], [m4_set_remove([a], i, [i])])])
11576 @result{}24
11577 m4_set_contents([a])
11578 @result{}135
11579 @end example
11580 @end defmac
11582 @defmac m4_set_list (@var{set})
11583 @defmacx m4_set_listc (@var{set})
11584 @msindex{set_list}
11585 @msindex{set_listc}
11586 Produce a list of arguments, where each argument is a quoted element
11587 from the set @var{set}.  The variant @code{m4_set_listc} is unambiguous,
11588 by adding a leading comma if there are any set elements, whereas the
11589 variant @code{m4_set_list} cannot distinguish between an empty set and a
11590 set containing only the empty string.  These can be directly used in
11591 macros that take multiple arguments, such as @code{m4_join} or
11592 @code{m4_set_add_all}, or wrapped by @code{m4_dquote} for macros that
11593 take a quoted list, such as @code{m4_map} or @code{m4_foreach}.  Any
11594 memory occupied by removed elements is reclaimed during these macros.
11596 @example
11597 m4_set_add_all([a], [1], [2], [3])
11598 @result{}
11599 m4_set_list([a])
11600 @result{}1,2,3
11601 m4_set_list([b])
11602 @result{}
11603 m4_set_listc([b])
11604 @result{}
11605 m4_count(m4_set_list([b]))
11606 @result{}1
11607 m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
11608 @result{}0
11609 m4_set_add([b], [])
11610 @result{}
11611 m4_set_list([b])
11612 @result{}
11613 m4_set_listc([b])
11614 @result{},
11615 m4_count(m4_set_list([b]))
11616 @result{}1
11617 m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
11618 @result{}1
11619 @end example
11620 @end defmac
11622 @defmac m4_set_remove (@var{set}, @var{value}, @ovar{if-present}, @
11623  @ovar{if-absent})
11624 @msindex{set_remove}
11625 If @var{value} is an element in the set @var{set}, then remove it and
11626 expand @var{if-present}.  Otherwise expand @var{if-absent}.  This macro
11627 operates in constant time so that multiple removals will scale linearly
11628 rather than quadratically; but when used outside of
11629 @code{m4_set_foreach}, it leaves memory occupied until the set is later
11630 compacted by @code{m4_set_contents} or @code{m4_set_list}.  Several
11631 other set operations are then less efficient between the time of element
11632 removal and subsequent memory compaction, but still maintain their
11633 guaranteed scaling performance.
11634 @end defmac
11636 @defmac m4_set_size (@var{set})
11637 @msindex{set_size}
11638 Expand to the size of the set @var{set}.  This implementation operates
11639 in constant time, and is thus more efficient than
11640 @code{m4_eval(m4_count(m4_set_listc([set])) - 1)}.
11641 @end defmac
11644 @node Forbidden Patterns
11645 @subsection Forbidden Patterns
11646 @cindex Forbidden patterns
11647 @cindex Patterns, forbidden
11649 M4sugar provides a means to define suspicious patterns, patterns
11650 describing tokens which should not be found in the output.  For
11651 instance, if an Autoconf @file{configure} script includes tokens such as
11652 @samp{AC_DEFINE}, or @samp{dnl}, then most probably something went
11653 wrong (typically a macro was not evaluated because of overquotation).
11655 M4sugar forbids all the tokens matching @samp{^_?m4_} and @samp{^dnl$}.
11656 Additional layers, such as M4sh and Autoconf, add additional forbidden
11657 patterns to the list.
11659 @defmac m4_pattern_forbid (@var{pattern})
11660 @msindex{pattern_forbid}
11661 Declare that no token matching @var{pattern} must be found in the output.
11662 Comments are not checked; this can be a problem if, for instance, you
11663 have some macro left unexpanded after an @samp{#include}.  No consensus
11664 is currently found in the Autoconf community, as some people consider it
11665 should be valid to name macros in comments (which doesn't make sense to
11666 the authors of this documentation: input, such as macros, should be
11667 documented by @samp{dnl} comments; reserving @samp{#}-comments to
11668 document the output).
11669 @end defmac
11671 Of course, you might encounter exceptions to these generic rules, for
11672 instance you might have to refer to @samp{$m4_flags}.
11674 @defmac m4_pattern_allow (@var{pattern})
11675 @msindex{pattern_allow}
11676 Any token matching @var{pattern} is allowed, including if it matches an
11677 @code{m4_pattern_forbid} pattern.
11678 @end defmac
11680 @node Programming in M4sh
11681 @section Programming in M4sh
11683 @c FIXME: Eventually will become a chapter, as it is not related to
11684 @c programming in M4 per se.
11686 M4sh, pronounced ``mash'', is aiming at producing portable Bourne shell
11687 scripts.  This name was coined by Lars J. Aas, who notes that,
11688 according to the Webster's Revised Unabridged Dictionary (1913):
11690 @quotation
11691 Mash \Mash\, n.  [Akin to G. meisch, maisch, meische, maische, mash,
11692 wash, and prob.@: to AS. miscian to mix.  See ``Mix''.]
11694 @enumerate 1
11695 @item
11696 A mass of mixed ingredients reduced to a soft pulpy state by beating or
11697 pressure@enddots{}
11699 @item
11700 A mixture of meal or bran and water fed to animals.
11702 @item
11703 A mess; trouble.  [Obs.] --Beau.@: & Fl.
11704 @end enumerate
11705 @end quotation
11708 For the time being, it is not mature enough to be widely used.
11710 M4sh reserves the M4 macro namespace @samp{^_AS_} for internal use, and
11711 the namespace @samp{^AS_} for M4sh macros.  It also reserves the shell
11712 and environment variable namespace @samp{^as_}, and the here-doc
11713 delimiter namespace @samp{^_AS[A-Z]} in the output file.  You should not
11714 define your own macros or output shell code that conflicts with these
11715 namespaces.
11717 M4sh provides portable alternatives for some common shell constructs
11718 that unfortunately are not portable in practice.
11720 @c Deprecated, to be replaced by a better API
11721 @ignore
11722 @defmac AS_BASENAME (@var{file-name})
11723 @asindex{BASENAME}
11724 Output the non-directory portion of @var{file-name}.  For example,
11725 if @code{$file} is @samp{/one/two/three}, the command
11726 @code{base=`AS_BASENAME(["$file"])`} sets @code{base} to @samp{three}.
11727 @end defmac
11728 @end ignore
11730 @defmac AS_BOURNE_COMPATIBLE
11731 @asindex{BOURNE_COMPATIBLE}
11732 Set up the shell to be more compatible with the Bourne shell as
11733 standardized by Posix, if possible.  This may involve setting
11734 environment variables, or setting options, or similar
11735 implementation-specific actions.
11736 @end defmac
11738 @defmac AS_CASE (@var{word}, @ovar{pattern1}, @ovar{if-matched1}, @
11739   @dots{}, @ovar{default})
11740 @asindex{CASE}
11741 Expand into a shell @samp{case} statement, where @var{word} is matched
11742 against one or more patterns.  @var{if-matched} is run if the
11743 corresponding pattern matched @var{word}, else @var{default} is run.
11744 @end defmac
11746 @defmac AS_DIRNAME (@var{file-name})
11747 @asindex{DIRNAME}
11748 Output the directory portion of @var{file-name}.  For example,
11749 if @code{$file} is @samp{/one/two/three}, the command
11750 @code{dir=`AS_DIRNAME(["$file"])`} sets @code{dir} to @samp{/one/two}.
11751 @end defmac
11753 @defmac AS_IF (@var{test1}, @ovar{run-if-true1}, @dots{}, @ovar{run-if-false})
11754 @asindex{IF}
11755 Run shell code @var{test1}.  If @var{test1} exits with a zero status then
11756 run shell code @var{run-if-true1}, else examine further tests.  If no test
11757 exits with a zero status, run shell code @var{run-if-false}, with
11758 simplifications if either @var{run-if-true1} or @var{run-if-false1}
11759 is empty.  For example,
11761 @example
11762 AS_IF([test "$foo" = yes], [HANDLE_FOO([yes])],
11763       [test "$foo" != no], [HANDLE_FOO([maybe])],
11764       [echo foo not specified])
11765 @end example
11767 @noindent
11768 ensures any required macros of @code{HANDLE_FOO}
11769 are expanded before the first test.
11770 @end defmac
11772 @defmac AS_INIT
11773 @asindex{INIT}
11774 Initialize the M4sh environment.  This macro calls @code{m4_init}, then
11775 outputs the @code{#! /bin/sh} line, a notice about where the output was
11776 generated from, and code to sanitize the environment for the rest of the
11777 script.  Finally, it changes the current diversion to @code{BODY}.
11778 @end defmac
11780 @defmac AS_MKDIR_P (@var{file-name})
11781 @asindex{MKDIR_P}
11782 Make the directory @var{file-name}, including intervening directories
11783 as necessary.  This is equivalent to @samp{mkdir -p @var{file-name}},
11784 except that it is portable to older versions of @command{mkdir} that
11785 lack support for the @option{-p} option.  Also, @code{AS_MKDIR_P}
11786 succeeds if @var{file-name} is a symbolic link to an existing directory,
11787 even though Posix is unclear whether @samp{mkdir -p} should
11788 succeed in that case.  If creation of @var{file-name} fails, exit the
11789 script.
11791 Also see the @code{AC_PROG_MKDIR_P} macro (@pxref{Particular Programs}).
11792 @end defmac
11794 @defmac AS_SHELL_SANITIZE
11795 @asindex{SHELL_SANITIZE}
11796 Initialize the shell suitably for @code{configure} scripts.  This has
11797 the effect of @code{AS_BOURNE_COMPATIBLE}, and sets some other
11798 environment variables for predictable results from configuration tests.
11799 For example, it sets @env{LC_ALL} to change to the default C locale.
11800 @xref{Special Shell Variables}.
11801 @end defmac
11803 @defmac AS_TR_CPP (@var{expression})
11804 @asindex{TR_CPP}
11805 Transform @var{expression} into a valid right-hand side for a C @code{#define}.
11806 For example:
11808 @example
11809 # This outputs "#define HAVE_CHAR_P 1".
11810 type="char *"
11811 echo "#define AS_TR_CPP([HAVE_$type]) 1"
11812 @end example
11813 @end defmac
11815 @defmac AS_TR_SH (@var{expression})
11816 @asindex{TR_SH}
11817 Transform @var{expression} into a valid shell variable name.  For example:
11819 @example
11820 # This outputs "Have it!".
11821 header="sys/some file.h"
11822 AS_TR_SH([HAVE_$header])=yes
11823 if test "$HAVE_sys_some_file_h" = yes; then echo "Have it!"; fi
11824 @end example
11825 @end defmac
11827 @defmac AS_SET_CATFILE (@var{var}, @var{dir}, @var{file})
11828 @asindex{SET_CATFILE}
11829 Set the shell variable @var{var} to @var{dir}/@var{file}, but
11830 optimizing the common cases (@var{dir} or @var{file} is @samp{.},
11831 @var{file} is absolute, etc.).
11832 @end defmac
11835 @node File Descriptor Macros
11836 @section File Descriptor Macros
11837 @cindex input
11838 @cindex standard input
11839 @cindex file descriptors
11840 @cindex descriptors
11841 @cindex low-level output
11842 @cindex output, low-level
11844 The following macros define file descriptors used to output messages
11845 (or input values) from @file{configure} scripts.
11846 For example:
11848 @example
11849 echo "$wombats found" >&AS_MESSAGE_LOG_FD
11850 echo 'Enter desired kangaroo count:' >&AS_MESSAGE_FD
11851 read kangaroos <&AS_ORIGINAL_STDIN_FD`
11852 @end example
11854 @noindent
11855 However doing so is seldom needed, because Autoconf provides higher
11856 level macros as described below.
11858 @defmac AS_MESSAGE_FD
11859 @asindex{MESSAGE_FD}
11860 The file descriptor for @samp{checking for...}  messages and results.
11861 Normally this directs messages to the standard output, however when
11862 @command{configure} is run with the @option{-q} option, messages sent to
11863 @code{AS_MESSAGE_FD} are discarded.
11865 If you want to display some messages, consider using one of the printing
11866 macros (@pxref{Printing Messages}) instead.  Copies of messages output
11867 via these macros are also recorded in @file{config.log}.
11868 @end defmac
11870 @defmac AS_MESSAGE_LOG_FD
11871 @asindex{MESSAGE_LOG_FD}
11873 The file descriptor for messages logged to @file{config.log}.  Macros
11874 that run tools, like @code{AC_COMPILE_IFELSE} (@pxref{Running the
11875 Compiler}), redirect all output to this descriptor.  You may want to do
11876 so if you develop such a low-level macro.
11877 @end defmac
11879 @defmac AS_ORIGINAL_STDIN_FD
11880 @asindex{ORIGINAL_STDIN_FD}
11881 The file descriptor for the original standard input.
11883 When @command{configure} runs, it may accidentally execute an
11884 interactive command that has the same name as the non-interactive meant
11885 to be used or checked.  If the standard input was the terminal, such
11886 interactive programs would cause @command{configure} to stop, pending
11887 some user input.  Therefore @command{configure} redirects its standard
11888 input from @file{/dev/null} during its initialization.  This is not
11889 normally a problem, since @command{configure} normally does not need
11890 user input.
11892 In the extreme case where your @file{configure} script really needs to
11893 obtain some values from the original standard input, you can read them
11894 explicitly from @code{AS_ORIGINAL_STDIN_FD}.
11895 @end defmac
11898 @c =================================================== Writing Autoconf Macros.
11900 @node Writing Autoconf Macros
11901 @chapter Writing Autoconf Macros
11903 When you write a feature test that could be applicable to more than one
11904 software package, the best thing to do is encapsulate it in a new macro.
11905 Here are some instructions and guidelines for writing Autoconf macros.
11907 @menu
11908 * Macro Definitions::           Basic format of an Autoconf macro
11909 * Macro Names::                 What to call your new macros
11910 * Reporting Messages::          Notifying @command{autoconf} users
11911 * Dependencies Between Macros::  What to do when macros depend on other macros
11912 * Obsoleting Macros::           Warning about old ways of doing things
11913 * Coding Style::                Writing Autoconf macros @`a la Autoconf
11914 @end menu
11916 @node Macro Definitions
11917 @section Macro Definitions
11919 @acindex{DEFUN}
11920 Autoconf macros are defined using the @code{AC_DEFUN} macro, which is
11921 similar to the M4 builtin @code{m4_define} macro.  In addition to
11922 defining a macro, @code{AC_DEFUN} adds to it some code that is used to
11923 constrain the order in which macros are called (@pxref{Prerequisite
11924 Macros}).
11926 An Autoconf macro definition looks like this:
11928 @example
11929 AC_DEFUN(@var{macro-name}, @var{macro-body})
11930 @end example
11932 You can refer to any arguments passed to the macro as @samp{$1},
11933 @samp{$2}, etc.  @xref{Definitions, , How to define new macros, m4.info,
11934 @acronym{GNU} M4}, for more complete information on writing M4 macros.
11936 Be sure to properly quote both the @var{macro-body} @emph{and} the
11937 @var{macro-name} to avoid any problems if the macro happens to have
11938 been previously defined.
11940 Each macro should have a header comment that gives its prototype, and a
11941 brief description.  When arguments have default values, display them in
11942 the prototype.  For example:
11944 @example
11945 # AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
11946 # --------------------------------------
11947 m4_define([AC_MSG_ERROR],
11948   [@{ AS_MESSAGE([error: $1], [2])
11949      exit m4_default([$2], [1]); @}])
11950 @end example
11952 Comments about the macro should be left in the header comment.  Most
11953 other comments make their way into @file{configure}, so just keep
11954 using @samp{#} to introduce comments.
11956 @cindex @code{dnl}
11957 If you have some special comments about pure M4 code, comments
11958 that make no sense in @file{configure} and in the header comment, then
11959 use the builtin @code{dnl}: it causes M4 to discard the text
11960 through the next newline.
11962 Keep in mind that @code{dnl} is rarely needed to introduce comments;
11963 @code{dnl} is more useful to get rid of the newlines following macros
11964 that produce no output, such as @code{AC_REQUIRE}.
11967 @node Macro Names
11968 @section Macro Names
11970 All of the public Autoconf macros have all-uppercase names in the
11971 namespace @samp{^AC_} to prevent them from accidentally conflicting with
11972 other text; Autoconf also reserves the namespace @samp{^_AC_} for
11973 internal macros.  All shell variables that they use for internal
11974 purposes have mostly-lowercase names starting with @samp{ac_}.  Autoconf
11975 also uses here-doc delimiters in the namespace @samp{^_AC[A-Z]}.  During
11976 @command{configure}, files produced by Autoconf make heavy use of the
11977 file system namespace @samp{^conf}.
11979 Since Autoconf is built on top of M4sugar (@pxref{Programming in
11980 M4sugar}) and M4sh (@pxref{Programming in M4sh}), you must also be aware
11981 of those namespaces (@samp{^_?\(m4\|AS\)_}).  And since
11982 @file{configure.ac} is also designed to be scanned by Autoheader,
11983 Autoscan, Autoupdate, and Automake, you should be aware of the
11984 @samp{^_?A[HNUM]_} namespaces.  In general, you @emph{should not use}
11985 the namespace of a package that does not own the macro or shell code you
11986 are writing.
11988 To ensure that your macros don't conflict with present or future
11989 Autoconf macros, you should prefix your own macro names and any shell
11990 variables they use with some other sequence.  Possibilities include your
11991 initials, or an abbreviation for the name of your organization or
11992 software package.  Historically, people have not always followed the
11993 rule of using a namespace appropriate for their package, and this has
11994 made it difficult for determining the origin of a macro (and where to
11995 report bugs about that macro), as well as difficult for the true
11996 namespace owner to add new macros without interference from pre-existing
11997 uses of third-party macros.  Perhaps the best example of this confusion
11998 is the @code{AM_GNU_GETTEXT} macro, which belongs, not to Automake, but
11999 to Gettext.
12001 Most of the Autoconf macros' names follow a structured naming convention
12002 that indicates the kind of feature check by the name.  The macro names
12003 consist of several words, separated by underscores, going from most
12004 general to most specific.  The names of their cache variables use the
12005 same convention (@pxref{Cache Variable Names}, for more information on
12006 them).
12008 The first word of the name after the namepace initials (such as
12009 @samp{AC_}) usually tells the category
12010 of the feature being tested.  Here are the categories used in Autoconf for
12011 specific test macros, the kind of macro that you are more likely to
12012 write.  They are also used for cache variables, in all-lowercase.  Use
12013 them where applicable; where they're not, invent your own categories.
12015 @table @code
12016 @item C
12017 C language builtin features.
12018 @item DECL
12019 Declarations of C variables in header files.
12020 @item FUNC
12021 Functions in libraries.
12022 @item GROUP
12023 Posix group owners of files.
12024 @item HEADER
12025 Header files.
12026 @item LIB
12027 C libraries.
12028 @item PROG
12029 The base names of programs.
12030 @item MEMBER
12031 Members of aggregates.
12032 @item SYS
12033 Operating system features.
12034 @item TYPE
12035 C builtin or declared types.
12036 @item VAR
12037 C variables in libraries.
12038 @end table
12040 After the category comes the name of the particular feature being
12041 tested.  Any further words in the macro name indicate particular aspects
12042 of the feature.  For example, @code{AC_PROG_CC_STDC} checks whether the
12043 C compiler supports @acronym{ISO} Standard C.
12045 An internal macro should have a name that starts with an underscore;
12046 Autoconf internals should therefore start with @samp{_AC_}.
12047 Additionally, a macro that is an internal subroutine of another macro
12048 should have a name that starts with an underscore and the name of that
12049 other macro, followed by one or more words saying what the internal
12050 macro does.  For example, @code{AC_PATH_X} has internal macros
12051 @code{_AC_PATH_X_XMKMF} and @code{_AC_PATH_X_DIRECT}.
12053 @node Reporting Messages
12054 @section Reporting Messages
12055 @cindex Messages, from @command{autoconf}
12057 When macros statically diagnose abnormal situations, benign or fatal, it
12058 is possible to make @command{autoconf} detect the problem, and refuse to
12059 create @file{configure} in the case of an error.  The macros in this
12060 section are considered obsolescent, and new code should use M4sugar
12061 macros for this purpose, see @ref{Diagnostic Macros}.
12063 On the other hand, it is possible to want to detect errors when
12064 @command{configure} is run, which are dependent on the environment of
12065 the user rather than the maintainer.  For dynamic diagnostics, see
12066 @ref{Printing Messages}.
12068 @defmac AC_DIAGNOSE (@var{category}, @var{message})
12069 @acindex{DIAGNOSE}
12070 Report @var{message} as a warning (or as an error if requested by the
12071 user) if warnings of the @var{category} are turned on.  This macro is
12072 obsolescent; you are encouraged to use:
12073 @example
12074 m4_warn([@var{category}], [@var{message}])
12075 @end example
12076 @noindent
12077 instead.  @xref{m4_warn}, for more details, including valid
12078 @var{category} names.
12079 @end defmac
12081 @defmac AC_WARNING (@var{message})
12082 @acindex{WARNING}
12083 Report @var{message} as a syntax warning.  This macro is obsolescent;
12084 you are encouraged to use:
12085 @example
12086 m4_warn([syntax], [@var{message}])
12087 @end example
12088 @noindent
12089 instead.  @xref{m4_warn}, for more details, as well as better
12090 finer-grained categories of warnings (not all problems have to do with
12091 syntax).
12092 @end defmac
12094 @defmac AC_FATAL (@var{message})
12095 @acindex{FATAL}
12096 Report a severe error @var{message}, and have @command{autoconf} die.
12097 This macro is obsolescent; you are encouraged to use:
12098 @example
12099 m4_fatal([@var{message}])
12100 @end example
12101 @noindent
12102 instead.  @xref{m4_fatal}, for more details.
12103 @end defmac
12105 When the user runs @samp{autoconf -W error}, warnings from
12106 @code{m4_warn} (including those issued through @code{AC_DIAGNOSE} and
12107 @code{AC_WARNING}) are reported as errors, see @ref{autoconf Invocation}.
12109 @node Dependencies Between Macros
12110 @section Dependencies Between Macros
12111 @cindex Dependencies between macros
12113 Some Autoconf macros depend on other macros having been called first in
12114 order to work correctly.  Autoconf provides a way to ensure that certain
12115 macros are called if needed and a way to warn the user if macros are
12116 called in an order that might cause incorrect operation.
12118 @menu
12119 * Prerequisite Macros::         Ensuring required information
12120 * Suggested Ordering::          Warning about possible ordering problems
12121 * One-Shot Macros::             Ensuring a macro is called only once
12122 @end menu
12124 @node Prerequisite Macros
12125 @subsection Prerequisite Macros
12126 @cindex Prerequisite macros
12127 @cindex Macros, prerequisites
12129 A macro that you write might need to use values that have previously
12130 been computed by other macros.  For example, @code{AC_DECL_YYTEXT}
12131 examines the output of @code{flex} or @code{lex}, so it depends on
12132 @code{AC_PROG_LEX} having been called first to set the shell variable
12133 @code{LEX}.
12135 Rather than forcing the user of the macros to keep track of the
12136 dependencies between them, you can use the @code{AC_REQUIRE} macro to do
12137 it automatically.  @code{AC_REQUIRE} can ensure that a macro is only
12138 called if it is needed, and only called once.
12140 @defmac AC_REQUIRE (@var{macro-name})
12141 @acindex{REQUIRE}
12142 If the M4 macro @var{macro-name} has not already been called, call it
12143 (without any arguments).  Make sure to quote @var{macro-name} with
12144 square brackets.  @var{macro-name} must have been defined using
12145 @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
12146 that it has been called.
12148 @code{AC_REQUIRE} must be used inside a macro defined by @code{AC_DEFUN}; it
12149 must not be called from the top level.
12150 @end defmac
12152 @code{AC_REQUIRE} is often misunderstood.  It really implements
12153 dependencies between macros in the sense that if one macro depends upon
12154 another, the latter is expanded @emph{before} the body of the
12155 former.  To be more precise, the required macro is expanded before
12156 the outermost defined macro in the current expansion stack.
12157 In particular, @samp{AC_REQUIRE([FOO])} is not replaced with the body of
12158 @code{FOO}.  For instance, this definition of macros:
12160 @example
12161 @group
12162 AC_DEFUN([TRAVOLTA],
12163 [test "$body_temperature_in_celsius" -gt "38" &&
12164   dance_floor=occupied])
12165 AC_DEFUN([NEWTON_JOHN],
12166 [test "$hair_style" = "curly" &&
12167   dance_floor=occupied])
12168 @end group
12170 @group
12171 AC_DEFUN([RESERVE_DANCE_FLOOR],
12172 [if date | grep '^Sat.*pm' >/dev/null 2>&1; then
12173   AC_REQUIRE([TRAVOLTA])
12174   AC_REQUIRE([NEWTON_JOHN])
12175 fi])
12176 @end group
12177 @end example
12179 @noindent
12180 with this @file{configure.ac}
12182 @example
12183 AC_INIT([Dance Manager], [1.0], [bug-dance@@example.org])
12184 RESERVE_DANCE_FLOOR
12185 if test "$dance_floor" = occupied; then
12186   AC_MSG_ERROR([cannot pick up here, let's move])
12188 @end example
12190 @noindent
12191 does not leave you with a better chance to meet a kindred soul at
12192 other times than Saturday night since it expands into:
12194 @example
12195 @group
12196 test "$body_temperature_in_Celsius" -gt "38" &&
12197   dance_floor=occupied
12198 test "$hair_style" = "curly" &&
12199   dance_floor=occupied
12201 if date | grep '^Sat.*pm' >/dev/null 2>&1; then
12205 @end group
12206 @end example
12208 This behavior was chosen on purpose: (i) it prevents messages in
12209 required macros from interrupting the messages in the requiring macros;
12210 (ii) it avoids bad surprises when shell conditionals are used, as in:
12212 @example
12213 @group
12214 if @dots{}; then
12215   AC_REQUIRE([SOME_CHECK])
12217 @dots{}
12218 SOME_CHECK
12219 @end group
12220 @end example
12222 The helper macros @code{AS_IF} and @code{AS_CASE} may be used to
12223 enforce expansion of required macros outside of shell conditional
12224 constructs.  You are furthermore encouraged to put all @code{AC_REQUIRE} calls
12225 at the beginning of a macro.  You can use @code{dnl} to avoid the empty
12226 lines they leave.
12228 @node Suggested Ordering
12229 @subsection Suggested Ordering
12230 @cindex Macros, ordering
12231 @cindex Ordering macros
12233 Some macros should be run before another macro if both are called, but
12234 neither @emph{requires} that the other be called.  For example, a macro
12235 that changes the behavior of the C compiler should be called before any
12236 macros that run the C compiler.  Many of these dependencies are noted in
12237 the documentation.
12239 Autoconf provides the @code{AC_BEFORE} macro to warn users when macros
12240 with this kind of dependency appear out of order in a
12241 @file{configure.ac} file.  The warning occurs when creating
12242 @command{configure} from @file{configure.ac}, not when running
12243 @command{configure}.
12245 For example, @code{AC_PROG_CPP} checks whether the C compiler
12246 can run the C preprocessor when given the @option{-E} option.  It should
12247 therefore be called after any macros that change which C compiler is
12248 being used, such as @code{AC_PROG_CC}.  So @code{AC_PROG_CC} contains:
12250 @example
12251 AC_BEFORE([$0], [AC_PROG_CPP])dnl
12252 @end example
12254 @noindent
12255 This warns the user if a call to @code{AC_PROG_CPP} has already occurred
12256 when @code{AC_PROG_CC} is called.
12258 @defmac AC_BEFORE (@var{this-macro-name}, @var{called-macro-name})
12259 @acindex{BEFORE}
12260 Make M4 print a warning message to the standard error output if
12261 @var{called-macro-name} has already been called.  @var{this-macro-name}
12262 should be the name of the macro that is calling @code{AC_BEFORE}.  The
12263 macro @var{called-macro-name} must have been defined using
12264 @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
12265 that it has been called.
12266 @end defmac
12268 @node One-Shot Macros
12269 @subsection One-Shot Macros
12270 @cindex One-shot macros
12271 @cindex Macros, called once
12273 Some macros should be called only once, either because calling them
12274 multiple time is unsafe, or because it is bad style.  For instance
12275 Autoconf ensures that @code{AC_CANONICAL_BUILD} and cousins
12276 (@pxref{Canonicalizing}) are evaluated only once, because it makes no
12277 sense to run these expensive checks more than once.  Such one-shot
12278 macros can be defined using @code{AC_DEFUN_ONCE}.
12280 @defmac AC_DEFUN_ONCE (@var{macro-name}, @var{macro-body})
12281 @acindex{DEFUN_ONCE}
12283 Declare macro @var{macro-name} like @code{AC_DEFUN} would (@pxref{Macro
12284 Definitions}), and emit a warning any time the macro is called more than
12285 once.
12286 @end defmac
12288 Obviously it is not sensible to evaluate a macro defined by
12289 @code{AC_DEFUN_ONCE} in a macro defined by @code{AC_DEFUN}.
12290 Most of the time you want to use @code{AC_REQUIRE} (@pxref{Prerequisite
12291 Macros}).
12293 @node Obsoleting Macros
12294 @section Obsoleting Macros
12295 @cindex Obsoleting macros
12296 @cindex Macros, obsoleting
12298 Configuration and portability technology has evolved over the years.
12299 Often better ways of solving a particular problem are developed, or
12300 ad-hoc approaches are systematized.  This process has occurred in many
12301 parts of Autoconf.  One result is that some of the macros are now
12302 considered @dfn{obsolete}; they still work, but are no longer considered
12303 the best thing to do, hence they should be replaced with more modern
12304 macros.  Ideally, @command{autoupdate} should replace the old macro calls
12305 with their modern implementation.
12307 Autoconf provides a simple means to obsolete a macro.
12309 @anchor{AU_DEFUN}
12310 @defmac AU_DEFUN (@var{old-macro}, @var{implementation}, @ovar{message})
12311 @auindex{DEFUN}
12312 Define @var{old-macro} as @var{implementation}.  The only difference
12313 with @code{AC_DEFUN} is that the user is warned that
12314 @var{old-macro} is now obsolete.
12316 If she then uses @command{autoupdate}, the call to @var{old-macro} is
12317 replaced by the modern @var{implementation}.  @var{message} should
12318 include information on what to do after running @command{autoupdate};
12319 @command{autoupdate} prints it as a warning, and includes it
12320 in the updated @file{configure.ac} file.
12322 The details of this macro are hairy: if @command{autoconf} encounters an
12323 @code{AU_DEFUN}ed macro, all macros inside its second argument are expanded
12324 as usual.  However, when @command{autoupdate} is run, only M4 and M4sugar
12325 macros are expanded here, while all other macros are disabled and
12326 appear literally in the updated @file{configure.ac}.
12327 @end defmac
12329 @defmac AU_ALIAS (@var{old-name}, @var{new-name})
12330 @auindex{ALIAS}
12331 Used if the @var{old-name} is to be replaced by a call to @var{new-macro}
12332 with the same parameters.  This happens for example if the macro was renamed.
12333 @end defmac
12335 @node Coding Style
12336 @section Coding Style
12337 @cindex Coding style
12339 The Autoconf macros follow a strict coding style.  You are encouraged to
12340 follow this style, especially if you intend to distribute your macro,
12341 either by contributing it to Autoconf itself, or via other means.
12343 The first requirement is to pay great attention to the quotation.  For
12344 more details, see @ref{Autoconf Language}, and @ref{M4 Quotation}.
12346 Do not try to invent new interfaces.  It is likely that there is a macro
12347 in Autoconf that resembles the macro you are defining: try to stick to
12348 this existing interface (order of arguments, default values, etc.).  We
12349 @emph{are} conscious that some of these interfaces are not perfect;
12350 nevertheless, when harmless, homogeneity should be preferred over
12351 creativity.
12353 Be careful about clashes both between M4 symbols and between shell
12354 variables.
12356 If you stick to the suggested M4 naming scheme (@pxref{Macro Names}),
12357 you are unlikely to generate conflicts.  Nevertheless, when you need to
12358 set a special value, @emph{avoid using a regular macro name}; rather,
12359 use an ``impossible'' name.  For instance, up to version 2.13, the macro
12360 @code{AC_SUBST} used to remember what @var{symbol} macros were already defined
12361 by setting @code{AC_SUBST_@var{symbol}}, which is a regular macro name.
12362 But since there is a macro named @code{AC_SUBST_FILE}, it was just
12363 impossible to @samp{AC_SUBST(FILE)}!  In this case,
12364 @code{AC_SUBST(@var{symbol})} or @code{_AC_SUBST(@var{symbol})} should
12365 have been used (yes, with the parentheses).
12366 @c or better yet, high-level macros such as @code{m4_expand_once}
12368 No Autoconf macro should ever enter the user-variable name space; i.e.,
12369 except for the variables that are the actual result of running the
12370 macro, all shell variables should start with @code{ac_}.  In
12371 addition, small macros or any macro that is likely to be embedded in
12372 other macros should be careful not to use obvious names.
12374 @cindex @code{dnl}
12375 Do not use @code{dnl} to introduce comments: most of the comments you
12376 are likely to write are either header comments which are not output
12377 anyway, or comments that should make their way into @file{configure}.
12378 There are exceptional cases where you do want to comment special M4
12379 constructs, in which case @code{dnl} is right, but keep in mind that it
12380 is unlikely.
12382 M4 ignores the leading blanks and newlines before each argument.
12383 Use this feature to
12384 indent in such a way that arguments are (more or less) aligned with the
12385 opening parenthesis of the macro being called.  For instance, instead of
12387 @example
12388 AC_CACHE_CHECK(for EMX OS/2 environment,
12389 ac_cv_emxos2,
12390 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
12391 [ac_cv_emxos2=yes], [ac_cv_emxos2=no])])
12392 @end example
12394 @noindent
12395 write
12397 @example
12398 AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
12399 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
12400                    [ac_cv_emxos2=yes],
12401                    [ac_cv_emxos2=no])])
12402 @end example
12404 @noindent
12405 or even
12407 @example
12408 AC_CACHE_CHECK([for EMX OS/2 environment],
12409                [ac_cv_emxos2],
12410                [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
12411                                                    [return __EMX__;])],
12412                                   [ac_cv_emxos2=yes],
12413                                   [ac_cv_emxos2=no])])
12414 @end example
12416 When using @code{AC_RUN_IFELSE} or any macro that cannot work when
12417 cross-compiling, provide a pessimistic value (typically @samp{no}).
12419 Feel free to use various tricks to prevent auxiliary tools, such as
12420 syntax-highlighting editors, from behaving improperly.  For instance,
12421 instead of:
12423 @example
12424 m4_bpatsubst([$1], [$"])
12425 @end example
12427 @noindent
12430 @example
12431 m4_bpatsubst([$1], [$""])
12432 @end example
12434 @noindent
12435 so that Emacsen do not open an endless ``string'' at the first quote.
12436 For the same reasons, avoid:
12438 @example
12439 test $[#] != 0
12440 @end example
12442 @noindent
12443 and use:
12445 @example
12446 test $[@@%:@@] != 0
12447 @end example
12449 @noindent
12450 Otherwise, the closing bracket would be hidden inside a @samp{#}-comment,
12451 breaking the bracket-matching highlighting from Emacsen.  Note the
12452 preferred style to escape from M4: @samp{$[1]}, @samp{$[@@]}, etc.  Do
12453 not escape when it is unnecessary.  Common examples of useless quotation
12454 are @samp{[$]$1} (write @samp{$$1}), @samp{[$]var} (use @samp{$var}),
12455 etc.  If you add portability issues to the picture, you'll prefer
12456 @samp{$@{1+"$[@@]"@}} to @samp{"[$]@@"}, and you'll prefer do something
12457 better than hacking Autoconf @code{:-)}.
12459 When using @command{sed}, don't use @option{-e} except for indenting
12460 purposes.  With the @code{s} and @code{y} commands, the preferred
12461 separator is @samp{/} unless @samp{/} itself might appear in the pattern
12462 or replacement, in which case you should use @samp{|}, or optionally
12463 @samp{,} if you know the pattern and replacement cannot contain a file
12464 name.  If none of these characters will do, choose a printable character
12465 that cannot appear in the pattern or replacement.  Characters from the
12466 set @samp{"#$&'()*;<=>?`|~} are good choices if the pattern or
12467 replacement might contain a file name, since they have special meaning
12468 to the shell and are less likely to occur in file names.
12470 @xref{Macro Definitions}, for details on how to define a macro.  If a
12471 macro doesn't use @code{AC_REQUIRE}, is expected to never be the object
12472 of an @code{AC_REQUIRE} directive, and macros required by other macros
12473 inside arguments do not need to be expanded before this macro, then
12474 use @code{m4_define}.  In case of doubt, use @code{AC_DEFUN}.
12475 All the @code{AC_REQUIRE} statements should be at the beginning of the
12476 macro, and each statement should be followed by @code{dnl}.
12478 You should not rely on the number of arguments: instead of checking
12479 whether an argument is missing, test that it is not empty.  It provides
12480 both a simpler and a more predictable interface to the user, and saves
12481 room for further arguments.
12483 Unless the macro is short, try to leave the closing @samp{])} at the
12484 beginning of a line, followed by a comment that repeats the name of the
12485 macro being defined.  This introduces an additional newline in
12486 @command{configure}; normally, that is not a problem, but if you want to
12487 remove it you can use @samp{[]dnl} on the last line.  You can similarly
12488 use @samp{[]dnl} after a macro call to remove its newline.  @samp{[]dnl}
12489 is recommended instead of @samp{dnl} to ensure that M4 does not
12490 interpret the @samp{dnl} as being attached to the preceding text or
12491 macro output.  For example, instead of:
12493 @example
12494 AC_DEFUN([AC_PATH_X],
12495 [AC_MSG_CHECKING([for X])
12496 AC_REQUIRE_CPP()
12497 @r{# @dots{}omitted@dots{}}
12498   AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
12499 fi])
12500 @end example
12502 @noindent
12503 you would write:
12505 @example
12506 AC_DEFUN([AC_PATH_X],
12507 [AC_REQUIRE_CPP()[]dnl
12508 AC_MSG_CHECKING([for X])
12509 @r{# @dots{}omitted@dots{}}
12510   AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
12511 fi[]dnl
12512 ])# AC_PATH_X
12513 @end example
12515 If the macro is long, try to split it into logical chunks.  Typically,
12516 macros that check for a bug in a function and prepare its
12517 @code{AC_LIBOBJ} replacement should have an auxiliary macro to perform
12518 this setup.  Do not hesitate to introduce auxiliary macros to factor
12519 your code.
12521 In order to highlight the recommended coding style, here is a macro
12522 written the old way:
12524 @example
12525 dnl Check for EMX on OS/2.
12526 dnl _AC_EMXOS2
12527 AC_DEFUN(_AC_EMXOS2,
12528 [AC_CACHE_CHECK(for EMX OS/2 environment, ac_cv_emxos2,
12529 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return __EMX__;)],
12530 ac_cv_emxos2=yes, ac_cv_emxos2=no)])
12531 test "$ac_cv_emxos2" = yes && EMXOS2=yes])
12532 @end example
12534 @noindent
12535 and the new way:
12537 @example
12538 # _AC_EMXOS2
12539 # ----------
12540 # Check for EMX on OS/2.
12541 m4_define([_AC_EMXOS2],
12542 [AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
12543 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
12544                    [ac_cv_emxos2=yes],
12545                    [ac_cv_emxos2=no])])
12546 test "$ac_cv_emxos2" = yes && EMXOS2=yes[]dnl
12547 ])# _AC_EMXOS2
12548 @end example
12553 @c ============================================= Portable Shell Programming
12555 @node Portable Shell
12556 @chapter Portable Shell Programming
12557 @cindex Portable shell programming
12559 When writing your own checks, there are some shell-script programming
12560 techniques you should avoid in order to make your code portable.  The
12561 Bourne shell and upward-compatible shells like the Korn shell and Bash
12562 have evolved over the years, but to prevent trouble, do not take
12563 advantage of features that were added after Unix version 7, circa
12564 1977 (@pxref{Systemology}).
12566 You should not use aliases, negated character classes, or other features
12567 that are not found in all Bourne-compatible shells; restrict yourself
12568 to the lowest common denominator.  Even @code{unset} is not supported
12569 by all shells!
12571 Shell functions are considered portable nowadays, though Autoconf still
12572 does not use them (Autotest does).  However, some pitfalls have to be
12573 avoided for portable use of shell functions (@pxref{Shell Functions}).
12575 Some ancient systems have quite
12576 small limits on the length of the @samp{#!} line; for instance, 32
12577 bytes (not including the newline) on SunOS 4.
12578 A few ancient 4.2@acronym{BSD} based systems (such as Dynix circa 1984)
12579 required a single space between the @samp{#!} and the @samp{/}.
12580 However, these ancient systems are no longer of practical concern.
12582 The set of external programs you should run in a @command{configure} script
12583 is fairly small.  @xref{Utilities in Makefiles, , Utilities in
12584 Makefiles, standards, @acronym{GNU} Coding Standards}, for the list.  This
12585 restriction allows users to start out with a fairly small set of
12586 programs and build the rest, avoiding too many interdependencies between
12587 packages.
12589 Some of these external utilities have a portable subset of features; see
12590 @ref{Limitations of Usual Tools}.
12592 There are other sources of documentation about shells.  The
12593 specification for the Posix
12594 @uref{http://www.opengroup.org/@/susv3/@/utilities/@/xcu_chap02.html, Shell
12595 Command Language}, though more generous than the restrictive shell
12596 subset described above, is fairly portable nowadays.  Also please see
12597 @uref{http://www.faqs.org/@/faqs/@/unix-faq/@/shell/, the Shell FAQs}.
12599 @menu
12600 * Shellology::                  A zoology of shells
12601 * Here-Documents::              Quirks and tricks
12602 * File Descriptors::            FDs and redirections
12603 * File System Conventions::     File names
12604 * Shell Pattern Matching::      Pattern matching
12605 * Shell Substitutions::         Variable and command expansions
12606 * Assignments::                 Varying side effects of assignments
12607 * Parentheses::                 Parentheses in shell scripts
12608 * Slashes::                     Slashes in shell scripts
12609 * Special Shell Variables::     Variables you should not change
12610 * Shell Functions::             What to look out for if you use them
12611 * Limitations of Builtins::     Portable use of not so portable /bin/sh
12612 * Limitations of Usual Tools::  Portable use of portable tools
12613 @end menu
12615 @node Shellology
12616 @section Shellology
12617 @cindex Shellology
12619 There are several families of shells, most prominently the Bourne family
12620 and the C shell family which are deeply incompatible.  If you want to
12621 write portable shell scripts, avoid members of the C shell family.  The
12622 @uref{http://www.faqs.org/@/faqs/@/unix-faq/@/shell/@/shell-differences/, the
12623 Shell difference FAQ} includes a small history of Posix shells, and a
12624 comparison between several of them.
12626 Below we describe some of the members of the Bourne shell family.
12628 @table @asis
12629 @item Ash
12630 @cindex Ash
12631 Ash is often used on @acronym{GNU}/Linux and @acronym{BSD}
12632 systems as a light-weight Bourne-compatible shell.  Ash 0.2 has some
12633 bugs that are fixed in the 0.3.x series, but portable shell scripts
12634 should work around them, since version 0.2 is still shipped with many
12635 @acronym{GNU}/Linux distributions.
12637 To be compatible with Ash 0.2:
12639 @itemize @minus
12640 @item
12641 don't use @samp{$?} after expanding empty or unset variables,
12642 or at the start of an @command{eval}:
12644 @example
12645 foo=
12646 false
12647 $foo
12648 echo "Do not use it: $?"
12649 false
12650 eval 'echo "Do not use it: $?"'
12651 @end example
12653 @item
12654 don't use command substitution within variable expansion:
12656 @example
12657 cat $@{FOO=`bar`@}
12658 @end example
12660 @item
12661 beware that single builtin substitutions are not performed by a
12662 subshell, hence their effect applies to the current shell!  @xref{Shell
12663 Substitutions}, item ``Command Substitution''.
12664 @end itemize
12666 @item Bash
12667 @cindex Bash
12668 To detect whether you are running Bash, test whether
12669 @code{BASH_VERSION} is set.  To require
12670 Posix compatibility, run @samp{set -o posix}.  @xref{Bash POSIX
12671 Mode, , Bash Posix Mode, bash, The @acronym{GNU} Bash Reference
12672 Manual}, for details.
12674 @item Bash 2.05 and later
12675 @cindex Bash 2.05 and later
12676 Versions 2.05 and later of Bash use a different format for the
12677 output of the @command{set} builtin, designed to make evaluating its
12678 output easier.  However, this output is not compatible with earlier
12679 versions of Bash (or with many other shells, probably).  So if
12680 you use Bash 2.05 or higher to execute @command{configure},
12681 you'll need to use Bash 2.05 for all other build tasks as well.
12683 @item Ksh
12684 @cindex Ksh
12685 @cindex Korn shell
12686 @prindex @samp{ksh}
12687 @prindex @samp{ksh88}
12688 @prindex @samp{ksh93}
12689 The Korn shell is compatible with the Bourne family and it mostly
12690 conforms to Posix.  It has two major variants commonly
12691 called @samp{ksh88} and @samp{ksh93}, named after the years of initial
12692 release.  It is usually called @command{ksh}, but is called @command{sh}
12693 on some hosts if you set your path appropriately.
12695 Solaris systems have three variants:
12696 @prindex @command{/usr/bin/ksh} on Solaris
12697 @command{/usr/bin/ksh} is @samp{ksh88}; it is
12698 standard on Solaris 2.0 and later.
12699 @prindex @command{/usr/xpg4/bin/sh} on Solaris
12700 @command{/usr/xpg4/bin/sh} is a Posix-compliant variant of
12701 @samp{ksh88}; it is standard on Solaris 9 and later.
12702 @prindex @command{/usr/dt/bin/dtksh} on Solaris
12703 @command{/usr/dt/bin/dtksh} is @samp{ksh93}.
12704 Variants that are not standard may be parts of optional
12705 packages.  There is no extra charge for these packages, but they are
12706 not part of a minimal OS install and therefore some installations may
12707 not have it.
12709 Starting with Tru64 Version 4.0, the Korn shell @command{/usr/bin/ksh}
12710 is also available as @command{/usr/bin/posix/sh}.  If the environment
12711 variable @env{BIN_SH} is set to @code{xpg4}, subsidiary invocations of
12712 the standard shell conform to Posix.
12714 @item Pdksh
12715 @prindex @samp{pdksh}
12716 A public-domain clone of the Korn shell called @command{pdksh} is widely
12717 available: it has most of the @samp{ksh88} features along with a few of
12718 its own.  It usually sets @code{KSH_VERSION}, except if invoked as
12719 @command{/bin/sh} on Open@acronym{BSD}, and similarly to Bash you can require
12720 Posix compatibility by running @samp{set -o posix}.  Unfortunately, with
12721 @command{pdksh} 5.2.14 (the latest stable version as of January 2007)
12722 Posix mode is buggy and causes @command{pdksh} to depart from Posix in
12723 at least one respect:
12725 @example
12726 $ @kbd{echo "`echo \"hello\"`"}
12727 hello
12728 $ @kbd{set -o posix}
12729 $ @kbd{echo "`echo \"hello\"`"}
12730 "hello"
12731 @end example
12733 The last line of output contains spurious quotes.  This is yet another
12734 reason why portable shell code should not contain
12735 @code{"`@dots{}\"@dots{}\"@dots{}`"} constructs (@pxref{Shell
12736 Substitutions}).
12738 @item Zsh
12739 @cindex Zsh
12740 To detect whether you are running @command{zsh}, test whether
12741 @code{ZSH_VERSION} is set.  By default @command{zsh} is @emph{not}
12742 compatible with the Bourne shell: you must execute @samp{emulate sh},
12743 and for @command{zsh} versions before 3.1.6-dev-18 you must also
12744 set @code{NULLCMD} to @samp{:}.  @xref{Compatibility, , Compatibility,
12745 zsh, The Z Shell Manual}, for details.
12747 The default Mac OS X @command{sh} was originally Zsh; it was changed to
12748 Bash in Mac OS X 10.2.
12749 @end table
12751 The following discussion between Russ Allbery and Robert Lipe is worth
12752 reading:
12754 @noindent
12755 Russ Allbery:
12757 @quotation
12758 The @acronym{GNU} assumption that @command{/bin/sh} is the one and only shell
12759 leads to a permanent deadlock.  Vendors don't want to break users'
12760 existing shell scripts, and there are some corner cases in the Bourne
12761 shell that are not completely compatible with a Posix shell.  Thus,
12762 vendors who have taken this route will @emph{never} (OK@dots{}``never say
12763 never'') replace the Bourne shell (as @command{/bin/sh}) with a
12764 Posix shell.
12765 @end quotation
12767 @noindent
12768 Robert Lipe:
12770 @quotation
12771 This is exactly the problem.  While most (at least most System V's) do
12772 have a Bourne shell that accepts shell functions most vendor
12773 @command{/bin/sh} programs are not the Posix shell.
12775 So while most modern systems do have a shell @emph{somewhere} that meets the
12776 Posix standard, the challenge is to find it.
12777 @end quotation
12779 @node Here-Documents
12780 @section Here-Documents
12781 @cindex Here-documents
12782 @cindex Shell here-documents
12784 Don't rely on @samp{\} being preserved just because it has no special
12785 meaning together with the next symbol.  In the native @command{sh}
12786 on Open@acronym{BSD} 2.7 @samp{\"} expands to @samp{"} in here-documents with
12787 unquoted delimiter.  As a general rule, if @samp{\\} expands to @samp{\}
12788 use @samp{\\} to get @samp{\}.
12790 With Open@acronym{BSD} 2.7's @command{sh}
12792 @example
12793 @group
12794 $ @kbd{cat <<EOF
12795 > \" \\
12796 > EOF}
12797 " \
12798 @end group
12799 @end example
12801 @noindent
12802 and with Bash:
12804 @example
12805 @group
12806 bash-2.04$ @kbd{cat <<EOF
12807 > \" \\
12808 > EOF}
12809 \" \
12810 @end group
12811 @end example
12813 Some shells mishandle large here-documents: for example,
12814 Solaris 10 @command{dtksh} and the UnixWare 7.1.1 Posix shell, which are
12815 derived from Korn shell version M-12/28/93d, mishandle braced variable
12816 expansion that crosses a 1024- or 4096-byte buffer boundary
12817 within a here-document.  Only the part of the variable name after the boundary
12818 is used.  For example, @code{$@{variable@}} could be replaced by the expansion
12819 of @code{$@{ble@}}.  If the end of the variable name is aligned with the block
12820 boundary, the shell reports an error, as if you used @code{$@{@}}.
12821 Instead of @code{$@{variable-default@}}, the shell may expand
12822 @code{$@{riable-default@}}, or even @code{$@{fault@}}.  This bug can often
12823 be worked around by omitting the braces: @code{$variable}.  The bug was
12824 fixed in
12825 @samp{ksh93g} (1998-04-30) but as of 2006 many operating systems were
12826 still shipping older versions with the bug.
12828 Many shells (including the Bourne shell) implement here-documents
12829 inefficiently.  In particular, some shells can be extremely inefficient when
12830 a single statement contains many here-documents.  For instance if your
12831 @file{configure.ac} includes something like:
12833 @example
12834 @group
12835 if <cross_compiling>; then
12836   assume this and that
12837 else
12838   check this
12839   check that
12840   check something else
12841   @dots{}
12842   on and on forever
12843   @dots{}
12845 @end group
12846 @end example
12848 A shell parses the whole @code{if}/@code{fi} construct, creating
12849 temporary files for each here-document in it.  Some shells create links
12850 for such here-documents on every @code{fork}, so that the clean-up code
12851 they had installed correctly removes them.  It is creating the links
12852 that can take the shell forever.
12854 Moving the tests out of the @code{if}/@code{fi}, or creating multiple
12855 @code{if}/@code{fi} constructs, would improve the performance
12856 significantly.  Anyway, this kind of construct is not exactly the
12857 typical use of Autoconf.  In fact, it's even not recommended, because M4
12858 macros can't look into shell conditionals, so we may fail to expand a
12859 macro when it was expanded before in a conditional path, and the
12860 condition turned out to be false at runtime, and we end up not
12861 executing the macro at all.
12863 @node File Descriptors
12864 @section File Descriptors
12865 @cindex Descriptors
12866 @cindex File descriptors
12867 @cindex Shell file descriptors
12869 Most shells, if not all (including Bash, Zsh, Ash), output traces on
12870 stderr, even for subshells.  This might result in undesirable content
12871 if you meant to capture the standard-error output of the inner command:
12873 @example
12874 $ @kbd{ash -x -c '(eval "echo foo >&2") 2>stderr'}
12875 $ @kbd{cat stderr}
12876 + eval echo foo >&2
12877 + echo foo
12879 $ @kbd{bash -x -c '(eval "echo foo >&2") 2>stderr'}
12880 $ @kbd{cat stderr}
12881 + eval 'echo foo >&2'
12882 ++ echo foo
12884 $ @kbd{zsh -x -c '(eval "echo foo >&2") 2>stderr'}
12885 @i{# Traces on startup files deleted here.}
12886 $ @kbd{cat stderr}
12887 +zsh:1> eval echo foo >&2
12888 +zsh:1> echo foo
12890 @end example
12892 @noindent
12893 One workaround is to grep out uninteresting lines, hoping not to remove
12894 good ones.
12896 If you intend to redirect both standard error and standard output,
12897 redirect standard output first.  This works better with @acronym{HP-UX},
12898 since its shell mishandles tracing if standard error is redirected
12899 first:
12901 @example
12902 $ @kbd{sh -x -c ': 2>err >out'}
12903 + :
12904 + 2> err $ @kbd{cat err}
12905 1> out
12906 @end example
12908 Don't try to redirect the standard error of a command substitution.  It
12909 must be done @emph{inside} the command substitution.  When running
12910 @samp{: `cd /zorglub` 2>/dev/null} expect the error message to
12911 escape, while @samp{: `cd /zorglub 2>/dev/null`} works properly.
12913 It is worth noting that Zsh (but not Ash nor Bash) makes it possible
12914 in assignments though: @samp{foo=`cd /zorglub` 2>/dev/null}.
12916 When catering to old systems, don't redirect the same file descriptor
12917 several times, as you are doomed to failure under Ultrix.
12919 @example
12920 ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
12921 UWS V4.4 (Rev. 11)
12922 $ @kbd{eval 'echo matter >fullness' >void}
12923 illegal io
12924 $ @kbd{eval '(echo matter >fullness)' >void}
12925 illegal io
12926 $ @kbd{(eval '(echo matter >fullness)') >void}
12927 Ambiguous output redirect.
12928 @end example
12930 @noindent
12931 In each case the expected result is of course @file{fullness} containing
12932 @samp{matter} and @file{void} being empty.  However, this bug is
12933 probably not of practical concern to modern platforms.
12935 Don't rely on file descriptors 0, 1, and 2 remaining closed in a
12936 subsidiary program.  If any of these descriptors is closed, the
12937 operating system may open an unspecified file for the descriptor in the
12938 new process image.  Posix says this may be done only if the subsidiary
12939 program is set-user-ID or set-group-ID, but @acronym{HP-UX} 11.23 does
12940 it even for ordinary programs.
12942 Don't rely on open file descriptors being open in child processes.  In
12943 @command{ksh}, file descriptors above 2 which are opened using
12944 @samp{exec @var{n}>file} are closed by a subsequent @samp{exec} (such as
12945 that involved in the fork-and-exec which runs a program or script).
12946 Thus, using @command{sh}, we have:
12948 @example
12949 $ @kbd{cat ./descrips}
12950 #!/bin/sh -
12951 echo hello >&5
12952 $ @kbd{exec 5>t}
12953 $ @kbd{./descrips}
12954 $ @kbd{cat t}
12955 hello
12957 @end example
12959 @noindent
12960 But using ksh:
12962 @example
12963 $ @kbd{exec 5>t}
12964 $ @kbd{./descrips}
12965 hello
12966 $ @kbd{cat t}
12968 @end example
12970 @noindent
12971 Within the process which runs the @samp{descrips} script, file
12972 descriptor 5 is closed.
12974 Don't rely on redirection to a closed file descriptor to cause an
12975 error.  With Solaris @command{/bin/sh}, when the redirection fails, the
12976 output goes to the original file descriptor.
12978 @example
12979 $ @kbd{bash -c 'echo hi >&3' 3>&-; echo $?}
12980 bash: 3: Bad file descriptor
12982 $ @kbd{/bin/sh -c 'echo hi >&3' 3>&-; echo $?}
12985 @end example
12987 @acronym{DOS} variants cannot rename or remove open files, such as in
12988 @samp{mv foo bar >foo} or @samp{rm foo >foo}, even though this is
12989 perfectly portable among Posix hosts.
12991 A few ancient systems reserved some file descriptors.  By convention,
12992 file descriptor 3 was opened to @file{/dev/tty} when you logged into
12993 Eighth Edition (1985) through Tenth Edition Unix (1989).  File
12994 descriptor 4 had a special use on the Stardent/Kubota Titan (circa
12995 1990), though we don't now remember what it was.  Both these systems are
12996 obsolete, so it's now safe to treat file descriptors 3 and 4 like any
12997 other file descriptors.
12999 @node File System Conventions
13000 @section File System Conventions
13001 @cindex File system conventions
13003 Autoconf uses shell-script processing extensively, so the file names
13004 that it processes should not contain characters that are special to the
13005 shell.  Special characters include space, tab, newline, @sc{nul}, and
13006 the following:
13008 @example
13009 " # $ & ' ( ) * ; < = > ? [ \ ` |
13010 @end example
13012 Also, file names should not begin with @samp{~} or @samp{-}, and should
13013 contain neither @samp{-} immediately after @samp{/} nor @samp{~}
13014 immediately after @samp{:}.  On Posix-like platforms, directory names
13015 should not contain @samp{:}, as this runs afoul of @samp{:} used as the
13016 path separator.
13018 These restrictions apply not only to the files that you distribute, but
13019 also to the absolute file names of your source, build, and destination
13020 directories.
13022 On some Posix-like platforms, @samp{!} and @samp{^} are special too, so
13023 they should be avoided.
13025 Posix lets implementations treat leading @file{//} specially, but
13026 requires leading @file{///} and beyond to be equivalent to @file{/}.
13027 Most Unix variants treat @file{//} like @file{/}.  However, some treat
13028 @file{//} as a ``super-root'' that can provide access to files that are
13029 not otherwise reachable from @file{/}.  The super-root tradition began
13030 with Apollo Domain/OS, which died out long ago, but unfortunately Cygwin
13031 has revived it.
13033 While @command{autoconf} and friends are usually run on some Posix
13034 variety, they can be used on other systems, most notably @acronym{DOS}
13035 variants.  This impacts several assumptions regarding file names.
13037 @noindent
13038 For example, the following code:
13040 @example
13041 case $foo_dir in
13042   /*) # Absolute
13043      ;;
13044   *)
13045      foo_dir=$dots$foo_dir ;;
13046 esac
13047 @end example
13049 @noindent
13050 fails to properly detect absolute file names on those systems, because
13051 they can use a drivespec, and usually use a backslash as directory
13052 separator.  If you want to be portable to @acronym{DOS} variants (at the
13053 price of rejecting valid but oddball Posix file names like @file{a:\b}),
13054 you can check for absolute file names like this:
13056 @cindex absolute file names, detect
13057 @example
13058 case $foo_dir in
13059   [\\/]* | ?:[\\/]* ) # Absolute
13060      ;;
13061   *)
13062      foo_dir=$dots$foo_dir ;;
13063 esac
13064 @end example
13066 @noindent
13067 Make sure you quote the brackets if appropriate and keep the backslash as
13068 first character (@pxref{Limitations of Builtins}).
13070 Also, because the colon is used as part of a drivespec, these systems don't
13071 use it as path separator.  When creating or accessing paths, you can use the
13072 @code{PATH_SEPARATOR} output variable instead.  @command{configure} sets this
13073 to the appropriate value for the build system (@samp{:} or @samp{;}) when it
13074 starts up.
13076 File names need extra care as well.  While @acronym{DOS} variants
13077 that are Posixy enough to run @command{autoconf} (such as @acronym{DJGPP})
13078 are usually able to handle long file names properly, there are still
13079 limitations that can seriously break packages.  Several of these issues
13080 can be easily detected by the
13081 @uref{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz, doschk}
13082 package.
13084 A short overview follows; problems are marked with @sc{sfn}/@sc{lfn} to
13085 indicate where they apply: @sc{sfn} means the issues are only relevant to
13086 plain @acronym{DOS}, not to @acronym{DOS} under Microsoft Windows
13087 variants, while @sc{lfn} identifies problems that exist even under
13088 Microsoft Windows variants.
13090 @table @asis
13091 @item No multiple dots (@sc{sfn})
13092 @acronym{DOS} cannot handle multiple dots in file names.  This is an especially
13093 important thing to remember when building a portable configure script,
13094 as @command{autoconf} uses a .in suffix for template files.
13096 This is perfectly OK on Posix variants:
13098 @example
13099 AC_CONFIG_HEADERS([config.h])
13100 AC_CONFIG_FILES([source.c foo.bar])
13101 AC_OUTPUT
13102 @end example
13104 @noindent
13105 but it causes problems on @acronym{DOS}, as it requires @samp{config.h.in},
13106 @samp{source.c.in} and @samp{foo.bar.in}.  To make your package more portable
13107 to @acronym{DOS}-based environments, you should use this instead:
13109 @example
13110 AC_CONFIG_HEADERS([config.h:config.hin])
13111 AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])
13112 AC_OUTPUT
13113 @end example
13115 @item No leading dot (@sc{sfn})
13116 @acronym{DOS} cannot handle file names that start with a dot.  This is usually
13117 not important for @command{autoconf}.
13119 @item Case insensitivity (@sc{lfn})
13120 @acronym{DOS} is case insensitive, so you cannot, for example, have both a
13121 file called @samp{INSTALL} and a directory called @samp{install}.  This
13122 also affects @command{make}; if there's a file called @samp{INSTALL} in
13123 the directory, @samp{make install} does nothing (unless the
13124 @samp{install} target is marked as PHONY).
13126 @item The 8+3 limit (@sc{sfn})
13127 Because the @acronym{DOS} file system only stores the first 8 characters of
13128 the file name and the first 3 of the extension, those must be unique.
13129 That means that @file{foobar-part1.c}, @file{foobar-part2.c} and
13130 @file{foobar-prettybird.c} all resolve to the same file name
13131 (@file{FOOBAR-P.C}).  The same goes for @file{foo.bar} and
13132 @file{foo.bartender}.
13134 The 8+3 limit is not usually a problem under Microsoft Windows, as it
13135 uses numeric
13136 tails in the short version of file names to make them unique.  However, a
13137 registry setting can turn this behavior off.  While this makes it
13138 possible to share file trees containing long file names between @sc{sfn}
13139 and @sc{lfn} environments, it also means the above problem applies there
13140 as well.
13142 @item Invalid characters (@sc{lfn})
13143 Some characters are invalid in @acronym{DOS} file names, and should therefore
13144 be avoided.  In a @sc{lfn} environment, these are @samp{/}, @samp{\},
13145 @samp{?}, @samp{*}, @samp{:}, @samp{<}, @samp{>}, @samp{|} and @samp{"}.
13146 In a @sc{sfn} environment, other characters are also invalid.  These
13147 include @samp{+}, @samp{,}, @samp{[} and @samp{]}.
13149 @item Invalid names (@sc{lfn})
13150 Some @acronym{DOS} file names are reserved, and cause problems if you
13151 try to use files with those names.  These names include @file{CON},
13152 @file{AUX}, @file{COM1}, @file{COM2}, @file{COM3}, @file{COM4},
13153 @file{LPT1}, @file{LPT2}, @file{LPT3}, @file{NUL}, and @file{PRN}.
13154 File names are case insensitive, so even names like
13155 @file{aux/config.guess} are disallowed.
13157 @end table
13159 @node Shell Pattern Matching
13160 @section Shell Pattern Matching
13161 @cindex Shell pattern matching
13163 Nowadays portable patterns can use negated character classes like
13164 @samp{[!-aeiou]}.  The older syntax @samp{[^-aeiou]} is supported by
13165 some shells but not others; hence portable scripts should never use
13166 @samp{^} as the first character of a bracket pattern.
13168 Outside the C locale, patterns like @samp{[a-z]} are problematic since
13169 they may match characters that are not lower-case letters.
13171 @node Shell Substitutions
13172 @section Shell Substitutions
13173 @cindex Shell substitutions
13175 Contrary to a persistent urban legend, the Bourne shell does not
13176 systematically split variables and back-quoted expressions, in particular
13177 on the right-hand side of assignments and in the argument of @code{case}.
13178 For instance, the following code:
13180 @example
13181 case "$given_srcdir" in
13182 .)  top_srcdir="`echo "$dots" | sed 's|/$||'`" ;;
13183 *)  top_srcdir="$dots$given_srcdir" ;;
13184 esac
13185 @end example
13187 @noindent
13188 is more readable when written as:
13190 @example
13191 case $given_srcdir in
13192 .)  top_srcdir=`echo "$dots" | sed 's|/$||'` ;;
13193 *)  top_srcdir=$dots$given_srcdir ;;
13194 esac
13195 @end example
13197 @noindent
13198 and in fact it is even @emph{more} portable: in the first case of the
13199 first attempt, the computation of @code{top_srcdir} is not portable,
13200 since not all shells properly understand @code{"`@dots{}"@dots{}"@dots{}`"}.
13201 Worse yet, not all shells understand @code{"`@dots{}\"@dots{}\"@dots{}`"}
13202 the same way.  There is just no portable way to use double-quoted
13203 strings inside double-quoted back-quoted expressions (pfew!).
13205 @table @code
13206 @item $@@
13207 @cindex @samp{"$@@"}
13208 One of the most famous shell-portability issues is related to
13209 @samp{"$@@"}.  When there are no positional arguments, Posix says
13210 that @samp{"$@@"} is supposed to be equivalent to nothing, but the
13211 original Unix version 7 Bourne shell treated it as equivalent to
13212 @samp{""} instead, and this behavior survives in later implementations
13213 like Digital Unix 5.0.
13215 The traditional way to work around this portability problem is to use
13216 @samp{$@{1+"$@@"@}}.  Unfortunately this method does not work with
13217 Zsh (3.x and 4.x), which is used on Mac OS X@.  When emulating
13218 the Bourne shell, Zsh performs word splitting on @samp{$@{1+"$@@"@}}:
13220 @example
13221 zsh $ @kbd{emulate sh}
13222 zsh $ @kbd{for i in "$@@"; do echo $i; done}
13223 Hello World
13225 zsh $ @kbd{for i in $@{1+"$@@"@}; do echo $i; done}
13226 Hello
13227 World
13229 @end example
13231 @noindent
13232 Zsh handles plain @samp{"$@@"} properly, but we can't use plain
13233 @samp{"$@@"} because of the portability problems mentioned above.
13234 One workaround relies on Zsh's ``global aliases'' to convert
13235 @samp{$@{1+"$@@"@}} into @samp{"$@@"} by itself:
13237 @example
13238 test "$@{ZSH_VERSION+set@}" = set && alias -g '$@{1+"$@@"@}'='"$@@"'
13239 @end example
13241 Zsh only recognizes this alias when a shell word matches it exactly;
13242 @samp{"foo"$@{1+"$@@"@}} remains subject to word splitting.  Since this
13243 case always yields at least one shell word, use plain @samp{"$@@"}.
13245 A more conservative workaround is to avoid @samp{"$@@"} if it is
13246 possible that there may be no positional arguments.  For example,
13247 instead of:
13249 @example
13250 cat conftest.c "$@@"
13251 @end example
13253 you can use this instead:
13255 @example
13256 case $# in
13257 0) cat conftest.c;;
13258 *) cat conftest.c "$@@";;
13259 esac
13260 @end example
13262 Autoconf macros often use the @command{set} command to update
13263 @samp{$@@}, so if you are writing shell code intended for
13264 @command{configure} you should not assume that the value of @samp{$@@}
13265 persists for any length of time.
13268 @item $@{10@}
13269 @cindex positional parameters
13270 The 10th, 11th, @dots{} positional parameters can be accessed only after
13271 a @code{shift}.  The 7th Edition shell reported an error if given
13272 @code{$@{10@}}, and
13273 Solaris 10 @command{/bin/sh} still acts that way:
13275 @example
13276 $ @kbd{set 1 2 3 4 5 6 7 8 9 10}
13277 $ @kbd{echo $@{10@}}
13278 bad substitution
13279 @end example
13281 @item $@{@var{var}:-@var{value}@}
13282 @c Info cannot handle `:' in index entries.
13283 @c @cindex $@{@var{var}:-@var{value}@}
13284 Old @acronym{BSD} shells, including the Ultrix @code{sh}, don't accept the
13285 colon for any shell substitution, and complain and die.
13286 Similarly for $@{@var{var}:=@var{value}@}, $@{@var{var}:?@var{value}@}, etc.
13288 @item $@{@var{var}=@var{literal}@}
13289 @cindex $@{@var{var}=@var{literal}@}
13290 Be sure to quote:
13292 @example
13293 : $@{var='Some words'@}
13294 @end example
13296 @noindent
13297 otherwise some shells, such as on Digital Unix V 5.0, die because
13298 of a ``bad substitution''.
13300 @sp 1
13302 Solaris @command{/bin/sh} has a frightening bug in its interpretation
13303 of this.  Imagine you need set a variable to a string containing
13304 @samp{@}}.  This @samp{@}} character confuses Solaris @command{/bin/sh}
13305 when the affected variable was already set.  This bug can be exercised
13306 by running:
13308 @example
13309 $ @kbd{unset foo}
13310 $ @kbd{foo=$@{foo='@}'@}}
13311 $ @kbd{echo $foo}
13313 $ @kbd{foo=$@{foo='@}'   # no error; this hints to what the bug is}
13314 $ @kbd{echo $foo}
13316 $ @kbd{foo=$@{foo='@}'@}}
13317 $ @kbd{echo $foo}
13318 @}@}
13319  ^ ugh!
13320 @end example
13322 It seems that @samp{@}} is interpreted as matching @samp{$@{}, even
13323 though it is enclosed in single quotes.  The problem doesn't happen
13324 using double quotes.
13326 @item $@{@var{var}=@var{expanded-value}@}
13327 @cindex $@{@var{var}=@var{expanded-value}@}
13328 On Ultrix,
13329 running
13331 @example
13332 default="yu,yaa"
13333 : $@{var="$default"@}
13334 @end example
13336 @noindent
13337 sets @var{var} to @samp{M-yM-uM-,M-yM-aM-a}, i.e., the 8th bit of
13338 each char is set.  You don't observe the phenomenon using a simple
13339 @samp{echo $var} since apparently the shell resets the 8th bit when it
13340 expands $var.  Here are two means to make this shell confess its sins:
13342 @example
13343 $ @kbd{cat -v <<EOF
13344 $var
13345 EOF}
13346 @end example
13348 @noindent
13351 @example
13352 $ @kbd{set | grep '^var=' | cat -v}
13353 @end example
13355 One classic incarnation of this bug is:
13357 @example
13358 default="a b c"
13359 : $@{list="$default"@}
13360 for c in $list; do
13361   echo $c
13362 done
13363 @end example
13365 @noindent
13366 You'll get @samp{a b c} on a single line.  Why?  Because there are no
13367 spaces in @samp{$list}: there are @samp{M- }, i.e., spaces with the 8th
13368 bit set, hence no IFS splitting is performed!!!
13370 One piece of good news is that Ultrix works fine with @samp{:
13371 $@{list=$default@}}; i.e., if you @emph{don't} quote.  The bad news is
13372 then that @acronym{QNX} 4.25 then sets @var{list} to the @emph{last} item of
13373 @var{default}!
13375 The portable way out consists in using a double assignment, to switch
13376 the 8th bit twice on Ultrix:
13378 @example
13379 list=$@{list="$default"@}
13380 @end example
13382 @noindent
13383 @dots{}but beware of the @samp{@}} bug from Solaris (see above).  For safety,
13384 use:
13386 @example
13387 test "$@{var+set@}" = set || var=@var{@{value@}}
13388 @end example
13390 @item $@{#@var{var}@}
13391 @itemx $@{@var{var}%@var{word}@}
13392 @itemx $@{@var{var}%%@var{word}@}
13393 @itemx $@{@var{var}#@var{word}@}
13394 @itemx $@{@var{var}##@var{word}@}
13395 @cindex $@{#@var{var}@}
13396 @cindex $@{@var{var}%@var{word}@}
13397 @cindex $@{@var{var}%%@var{word}@}
13398 @cindex $@{@var{var}#@var{word}@}
13399 @cindex $@{@var{var}##@var{word}@}
13400 Posix requires support for these usages, but they do not work with many
13401 traditional shells, e.g., Solaris 10 @command{/bin/sh}.
13403 Also, @command{pdksh} 5.2.14 mishandles some @var{word} forms.  For
13404 example if @samp{$1} is @samp{a/b} and @samp{$2} is @samp{a}, then
13405 @samp{$@{1#$2@}} should yield @samp{/b}, but with @command{pdksh} it
13406 yields the empty string.
13409 @item `@var{commands}`
13410 @cindex `@var{commands}`
13411 @cindex Command Substitution
13412 Posix requires shells to trim all trailing newlines from command
13413 output before substituting it, so assignments like
13414 @samp{dir=`echo "$file" | tr a A`} do not work as expected if
13415 @samp{$file} ends in a newline.
13417 While in general it makes no sense, do not substitute a single builtin
13418 with side effects, because Ash 0.2, trying to optimize, does not fork a
13419 subshell to perform the command.
13421 For instance, if you wanted to check that @command{cd} is silent, do not
13422 use @samp{test -z "`cd /`"} because the following can happen:
13424 @example
13425 $ @kbd{pwd}
13426 /tmp
13427 $ @kbd{test -z "`cd /`" && pwd}
13429 @end example
13431 @noindent
13432 The result of @samp{foo=`exit 1`} is left as an exercise to the reader.
13434 The MSYS shell leaves a stray byte in the expansion of a double-quoted
13435 command substitution of a native program, if the end of the substitution
13436 is not aligned with the end of the double quote.  This may be worked
13437 around by inserting another pair of quotes:
13439 @example
13440 $ @kbd{echo "`printf 'foo\r\n'` bar" > broken}
13441 $ @kbd{echo "`printf 'foo\r\n'`"" bar" | cmp - broken}
13442 - broken differ: char 4, line 1
13443 @end example
13446 @item $(@var{commands})
13447 @cindex $(@var{commands})
13448 This construct is meant to replace @samp{`@var{commands}`},
13449 and it has most of the problems listed under @code{`@var{commands}`}.
13451 This construct can be
13452 nested while this is impossible to do portably with back quotes.
13453 Unfortunately it is not yet universally supported.  Most notably, even recent
13454 releases of Solaris don't support it:
13456 @example
13457 $ @kbd{showrev -c /bin/sh | grep version}
13458 Command version: SunOS 5.10 Generic 121005-03 Oct 2006
13459 $ @kbd{echo $(echo blah)}
13460 syntax error: `(' unexpected
13461 @end example
13463 @noindent
13464 nor does @sc{irix} 6.5's Bourne shell:
13465 @example
13466 $ @kbd{uname -a}
13467 IRIX firebird-image 6.5 07151432 IP22
13468 $ @kbd{echo $(echo blah)}
13469 $(echo blah)
13470 @end example
13472 If you do use @samp{$(@var{commands})}, make sure that the commands
13473 do not start with a parenthesis, as that would cause confusion with
13474 a different notation @samp{$((@var{expression}))} that in modern
13475 shells is an arithmetic expression not a command.  To avoid the
13476 confusion, insert a space between the two opening parentheses.
13478 Avoid @var{commands} that contain unbalanced parentheses in
13479 here-documents, comments, or case statement patterns, as many shells
13480 mishandle them.  For example, Bash 3.1, @samp{ksh88}, @command{pdksh}
13481 5.2.14, and Zsh 4.2.6 all mishandle the following valid command:
13483 @example
13484 echo $(case x in x) echo hello;; esac)
13485 @end example
13488 @item $((@var{expression}))
13489 @cindex $((@var{expression}))
13490 Arithmetic expansion is not portable as some shells (most
13491 notably Solaris 10 @command{/bin/sh}) don't support it.
13493 Among shells that do support @samp{$(( ))}, not all of them obey the
13494 Posix rule that octal and hexadecimal constants must be recognized:
13496 @example
13497 $ @kbd{bash -c 'echo $(( 010 + 0x10 ))'}
13499 $ @kbd{zsh -c 'echo $(( 010 + 0x10 ))'}
13501 $ @kbd{zsh -c 'emulate sh; echo $(( 010 + 0x10 ))'}
13503 $ @kbd{pdksh -c 'echo $(( 010 + 0x10 ))'}
13504 pdksh:  010 + 0x10 : bad number `0x10'
13505 $ @kbd{pdksh -c 'echo $(( 010 ))'}
13507 @end example
13509 When it is available, using arithmetic expansion provides a noticeable
13510 speedup in script execution; but testing for support requires
13511 @command{eval} to avoid syntax errors.  If shell function support has
13512 also been detected, then this construct can be used to assign @samp{foo}
13513 to an arithmetic result, provided all numeric arguments are provided in
13514 decimal and without a leading zero:
13516 @example
13517 if ( eval 'test $(( 1 + 1 )) = 2' ) 2>/dev/null; then
13518   eval 'func_arith ()
13519   @{
13520     func_arith_result=$(( $* ))
13521   @}'
13522 else
13523   func_arith ()
13524   @{
13525     func_arith_result=`expr "$@@"`
13526   @}
13528 func_arith 1 + 1
13529 foo=$func_arith_result
13530 @end example
13533 @item ^
13534 @cindex ^ quoting
13535 Always quote @samp{^}, otherwise traditional shells such as
13536 @command{/bin/sh} on Solaris 10 treat this like @samp{|}.
13538 @end table
13541 @node Assignments
13542 @section Assignments
13543 @cindex Shell assignments
13545 When setting several variables in a row, be aware that the order of the
13546 evaluation is undefined.  For instance @samp{foo=1 foo=2; echo $foo}
13547 gives @samp{1} with Solaris @command{/bin/sh}, but @samp{2} with Bash.
13548 You must use
13549 @samp{;} to enforce the order: @samp{foo=1; foo=2; echo $foo}.
13551 Don't rely on the following to find @file{subdir/program}:
13553 @example
13554 PATH=subdir$PATH_SEPARATOR$PATH program
13555 @end example
13557 @noindent
13558 as this does not work with Zsh 3.0.6.  Use something like this
13559 instead:
13561 @example
13562 (PATH=subdir$PATH_SEPARATOR$PATH; export PATH; exec program)
13563 @end example
13565 Don't rely on the exit status of an assignment: Ash 0.2 does not change
13566 the status and propagates that of the last statement:
13568 @example
13569 $ @kbd{false || foo=bar; echo $?}
13571 $ @kbd{false || foo=`:`; echo $?}
13573 @end example
13575 @noindent
13576 and to make things even worse, @acronym{QNX} 4.25 just sets the exit status
13577 to 0 in any case:
13579 @example
13580 $ @kbd{foo=`exit 1`; echo $?}
13582 @end example
13584 To assign default values, follow this algorithm:
13586 @enumerate
13587 @item
13588 If the default value is a literal and does not contain any closing
13589 brace, use:
13591 @example
13592 : $@{var='my literal'@}
13593 @end example
13595 @item
13596 If the default value contains no closing brace, has to be expanded, and
13597 the variable being initialized is not intended to be IFS-split
13598 (i.e., it's not a list), then use:
13600 @example
13601 : $@{var="$default"@}
13602 @end example
13604 @item
13605 If the default value contains no closing brace, has to be expanded, and
13606 the variable being initialized is intended to be IFS-split (i.e., it's a list),
13607 then use:
13609 @example
13610 var=$@{var="$default"@}
13611 @end example
13613 @item
13614 If the default value contains a closing brace, then use:
13616 @example
13617 test "$@{var+set@}" = set || var="has a '@}'"
13618 @end example
13619 @end enumerate
13621 In most cases @samp{var=$@{var="$default"@}} is fine, but in case of
13622 doubt, just use the last form.  @xref{Shell Substitutions}, items
13623 @samp{$@{@var{var}:-@var{value}@}} and @samp{$@{@var{var}=@var{value}@}}
13624 for the rationale.
13626 @node Parentheses
13627 @section Parentheses in Shell Scripts
13628 @cindex Shell parentheses
13630 Beware of two opening parentheses in a row, as many shell
13631 implementations treat them specially.  Posix requires that the command
13632 @samp{((cat))} must behave like @samp{(cat)}, but many shells, including
13633 Bash and the Korn shell, treat @samp{((cat))} as an arithmetic
13634 expression equivalent to @samp{let "cat"}, and may or may not report an
13635 error when they detect that @samp{cat} is not a number.  As another
13636 example, @samp{pdksh} 5.2.14 misparses the following code:
13638 @example
13639 if ((true) || false); then
13640   echo ok
13642 @end example
13644 @noindent
13645 To work around this problem, insert a space between the two opening
13646 parentheses.  There is a similar problem and workaround with
13647 @samp{$((}; see @ref{Shell Substitutions}.
13649 @node Slashes
13650 @section Slashes in Shell Scripts
13651 @cindex Shell slashes
13653 Unpatched Tru64 5.1 @command{sh} omits the last slash of command-line
13654 arguments that contain two trailing slashes:
13656 @example
13657 $ @kbd{echo / // /// //// .// //.}
13658 / / // /// ./ //.
13659 $ @kbd{x=//}
13660 $ @kbd{eval "echo \$x"}
13662 $ @kbd{set -x}
13663 $ @kbd{echo abc | tr -t ab //}
13664 + echo abc
13665 + tr -t ab /
13667 @end example
13669 Unpatched Tru64 4.0 @command{sh} adds a slash after @samp{"$var"} if the
13670 variable is empty and the second double-quote is followed by a word that
13671 begins and ends with slash:
13673 @example
13674 $ @kbd{sh -xc 'p=; echo "$p"/ouch/'}
13676 + echo //ouch/
13677 //ouch/
13678 @end example
13680 However, our understanding is that patches are available, so perhaps
13681 it's not worth worrying about working around these horrendous bugs.
13683 @node Special Shell Variables
13684 @section Special Shell Variables
13685 @cindex Shell variables
13686 @cindex Special shell variables
13688 Some shell variables should not be used, since they can have a deep
13689 influence on the behavior of the shell.  In order to recover a sane
13690 behavior from the shell, some variables should be unset, but
13691 @command{unset} is not portable (@pxref{Limitations of Builtins}) and a
13692 fallback value is needed.
13694 As a general rule, shell variable names containing a lower-case letter
13695 are safe; you can define and use these variables without worrying about
13696 their effect on the underlying system, and without worrying about
13697 whether the shell changes them unexpectedly.  (The exception is the
13698 shell variable @code{status}, as described below.)
13700 Here is a list of names that are known to cause trouble.  This list is
13701 not exhaustive, but you should be safe if you avoid the name
13702 @code{status} and names containing only upper-case letters and
13703 underscores.
13705 @c Alphabetical order, case insensitive, `A' before `a'.
13706 @table @code
13707 @item _
13708 Many shells reserve @samp{$_} for various purposes, e.g., the name of
13709 the last command executed.
13711 @item BIN_SH
13712 @evindex BIN_SH
13713 In Tru64, if @env{BIN_SH} is set to @code{xpg4}, subsidiary invocations of
13714 the standard shell conform to Posix.
13716 @item CDPATH
13717 @evindex CDPATH
13718 When this variable is set it specifies a list of directories to search
13719 when invoking @code{cd} with a relative file name that did not start
13720 with @samp{./} or @samp{../}.  Posix
13721 1003.1-2001 says that if a nonempty directory name from @env{CDPATH}
13722 is used successfully, @code{cd} prints the resulting absolute
13723 file name.  Unfortunately this output can break idioms like
13724 @samp{abs=`cd src && pwd`} because @code{abs} receives the name twice.
13725 Also, many shells do not conform to this part of Posix; for
13726 example, @command{zsh} prints the result only if a directory name
13727 other than @file{.} was chosen from @env{CDPATH}.
13729 In practice the shells that have this problem also support
13730 @command{unset}, so you can work around the problem as follows:
13732 @example
13733 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
13734 @end example
13736 You can also avoid output by ensuring that your directory name is
13737 absolute or anchored at @samp{./}, as in @samp{abs=`cd ./src && pwd`}.
13739 Autoconf-generated scripts automatically unset @env{CDPATH} if
13740 possible, so you need not worry about this problem in those scripts.
13742 @item DUALCASE
13743 @evindex DUALCASE
13744 In the MKS shell, case statements and file name generation are
13745 case-insensitive unless @env{DUALCASE} is nonzero.
13746 Autoconf-generated scripts export this variable when they start up.
13748 @item ENV
13749 @itemx MAIL
13750 @itemx MAILPATH
13751 @itemx PS1
13752 @itemx PS2
13753 @itemx PS4
13754 @evindex ENV
13755 @evindex MAIL
13756 @evindex MAILPATH
13757 @evindex PS1
13758 @evindex PS2
13759 @evindex PS4
13760 These variables should not matter for shell scripts, since they are
13761 supposed to affect only interactive shells.  However, at least one
13762 shell (the pre-3.0 @sc{uwin} Korn shell) gets confused about
13763 whether it is interactive, which means that (for example) a @env{PS1}
13764 with a side effect can unexpectedly modify @samp{$?}.  To work around
13765 this bug, Autoconf-generated scripts do something like this:
13767 @example
13768 (unset ENV) >/dev/null 2>&1 && unset ENV MAIL MAILPATH
13769 PS1='$ '
13770 PS2='> '
13771 PS4='+ '
13772 @end example
13774 @item FPATH
13775 The Korn shell uses @env{FPATH} to find shell functions, so avoid
13776 @env{FPATH} in portable scripts.  @env{FPATH} is consulted after
13777 @env{PATH}, but you still need to be wary of tests that use @env{PATH}
13778 to find whether a command exists, since they might report the wrong
13779 result if @env{FPATH} is also set.
13781 @item IFS
13782 @evindex IFS
13783 Long ago, shell scripts inherited @env{IFS} from the environment,
13784 but this caused many problems so modern shells ignore any environment
13785 settings for @env{IFS}.
13787 Don't set the first character of @code{IFS} to backslash.  Indeed,
13788 Bourne shells use the first character (backslash) when joining the
13789 components in @samp{"$@@"} and some shells then reinterpret (!)@: the
13790 backslash escapes, so you can end up with backspace and other strange
13791 characters.
13793 The proper value for @code{IFS} (in regular code, not when performing
13794 splits) is @samp{@key{SPC}@key{TAB}@key{RET}}.  The first character is
13795 especially important, as it is used to join the arguments in @samp{$*};
13796 however, note that traditional shells, but also bash-2.04, fail to adhere
13797 to this and join with a space anyway.
13799 @item LANG
13800 @itemx LC_ALL
13801 @itemx LC_COLLATE
13802 @itemx LC_CTYPE
13803 @itemx LC_MESSAGES
13804 @itemx LC_MONETARY
13805 @itemx LC_NUMERIC
13806 @itemx LC_TIME
13807 @evindex LANG
13808 @evindex LC_ALL
13809 @evindex LC_COLLATE
13810 @evindex LC_CTYPE
13811 @evindex LC_MESSAGES
13812 @evindex LC_MONETARY
13813 @evindex LC_NUMERIC
13814 @evindex LC_TIME
13816 Autoconf-generated scripts normally set all these variables to
13817 @samp{C} because so much configuration code assumes the C locale and
13818 Posix requires that locale environment variables be set to
13819 @samp{C} if the C locale is desired.  However, some older, nonstandard
13820 systems (notably @acronym{SCO}) break if locale environment variables
13821 are set to @samp{C}, so when running on these systems
13822 Autoconf-generated scripts unset the variables instead.
13824 @item LANGUAGE
13825 @evindex LANGUAGE
13827 @env{LANGUAGE} is not specified by Posix, but it is a @acronym{GNU}
13828 extension that overrides @env{LC_ALL} in some cases, so
13829 Autoconf-generated scripts set it too.
13831 @item LC_ADDRESS
13832 @itemx LC_IDENTIFICATION
13833 @itemx LC_MEASUREMENT
13834 @itemx LC_NAME
13835 @itemx LC_PAPER
13836 @itemx LC_TELEPHONE
13837 @evindex LC_ADDRESS
13838 @evindex LC_IDENTIFICATION
13839 @evindex LC_MEASUREMENT
13840 @evindex LC_NAME
13841 @evindex LC_PAPER
13842 @evindex LC_TELEPHONE
13844 These locale environment variables are @acronym{GNU} extensions.  They
13845 are treated like their Posix brethren (@env{LC_COLLATE},
13846 etc.)@: as described above.
13848 @item LINENO
13849 Most modern shells provide the current line number in @code{LINENO}.
13850 Its value is the line number of the beginning of the current command.
13851 Autoconf attempts to execute @command{configure} with a shell that
13852 supports @code{LINENO}.
13853 If no such shell is available, it attempts to implement @code{LINENO}
13854 with a Sed prepass that replaces each instance of the string
13855 @code{$LINENO} (not followed by an alphanumeric character) with the
13856 line's number.
13858 You should not rely on @code{LINENO} within @command{eval}, as the
13859 behavior differs in practice.  Also, the possibility of the Sed
13860 prepass means that you should not rely on @code{$LINENO} when quoted,
13861 when in here-documents, or when in long commands that cross line
13862 boundaries.  Subshells should be OK, though.  In the following
13863 example, lines 1, 6, and 9 are portable, but the other instances of
13864 @code{LINENO} are not:
13866 @example
13867 @group
13868 $ @kbd{cat lineno}
13869 echo 1. $LINENO
13870 cat <<EOF
13871 3. $LINENO
13872 4. $LINENO
13874 ( echo 6. $LINENO )
13875 eval 'echo 7. $LINENO'
13876 echo 8. '$LINENO'
13877 echo 9. $LINENO '
13878 10.' $LINENO
13879 @end group
13880 @group
13881 $ @kbd{bash-2.05 lineno}
13882 1. 1
13883 3. 2
13884 4. 2
13885 6. 6
13886 7. 1
13887 8. $LINENO
13888 9. 9
13889 10. 9
13890 @end group
13891 @group
13892 $ @kbd{zsh-3.0.6 lineno}
13893 1. 1
13894 3. 2
13895 4. 2
13896 6. 6
13897 7. 7
13898 8. $LINENO
13899 9. 9
13900 10. 9
13901 @end group
13902 @group
13903 $ @kbd{pdksh-5.2.14 lineno}
13904 1. 1
13905 3. 2
13906 4. 2
13907 6. 6
13908 7. 0
13909 8. $LINENO
13910 9. 9
13911 10. 9
13912 @end group
13913 @group
13914 $ @kbd{sed '=' <lineno |}
13915 > @kbd{  sed '}
13916 > @kbd{    N}
13917 > @kbd{    s,$,-,}
13918 > @kbd{    t loop}
13919 > @kbd{    :loop}
13920 > @kbd{    s,^\([0-9]*\)\(.*\)[$]LINENO\([^a-zA-Z0-9_]\),\1\2\1\3,}
13921 > @kbd{    t loop}
13922 > @kbd{    s,-$,,}
13923 > @kbd{    s,^[0-9]*\n,,}
13924 > @kbd{  ' |}
13925 > @kbd{  sh}
13926 1. 1
13927 3. 3
13928 4. 4
13929 6. 6
13930 7. 7
13931 8. 8
13932 9. 9
13933 10. 10
13934 @end group
13935 @end example
13937 @item NULLCMD
13938 @evindex NULLCMD
13939 When executing the command @samp{>foo}, @command{zsh} executes
13940 @samp{$NULLCMD >foo} unless it is operating in Bourne shell
13941 compatibility mode and the @command{zsh} version is newer
13942 than 3.1.6-dev-18.  If you are using an older @command{zsh}
13943 and forget to set @env{NULLCMD},
13944 your script might be suspended waiting for data on its standard input.
13946 @item PATH_SEPARATOR
13947 @evindex PATH_SEPARATOR
13948 On @acronym{DJGPP} systems, the @env{PATH_SEPARATOR} environment
13949 variable can be set to either @samp{:} or @samp{;} to control the path
13950 separator Bash uses to set up certain environment variables (such as
13951 @env{PATH}).  You can set this variable to @samp{;} if you want
13952 @command{configure} to use @samp{;} as a separator; this might be useful
13953 if you plan to use non-Posix shells to execute files.  @xref{File System
13954 Conventions}, for more information about @code{PATH_SEPARATOR}.
13956 @item PWD
13957 @evindex PWD
13958 Posix 1003.1-2001 requires that @command{cd} and
13959 @command{pwd} must update the @env{PWD} environment variable to point
13960 to the logical name of the current directory, but traditional shells
13961 do not support this.  This can cause confusion if one shell instance
13962 maintains @env{PWD} but a subsidiary and different shell does not know
13963 about @env{PWD} and executes @command{cd}; in this case @env{PWD}
13964 points to the wrong directory.  Use @samp{`pwd`} rather than
13965 @samp{$PWD}.
13967 @item RANDOM
13968 Many shells provide @code{RANDOM}, a variable that returns a different
13969 integer each time it is used.  Most of the time, its value does not
13970 change when it is not used, but on @sc{irix} 6.5 the value changes all
13971 the time.  This can be observed by using @command{set}.  It is common
13972 practice to use @code{$RANDOM} as part of a file name, but code
13973 shouldn't rely on @code{$RANDOM} expanding to a nonempty string.
13975 @item status
13976 This variable is an alias to @samp{$?} for @code{zsh} (at least 3.1.6),
13977 hence read-only.  Do not use it.
13978 @end table
13980 @node Shell Functions
13981 @section Shell Functions
13982 @cindex Shell Functions
13984 Nowadays, it is difficult to find a shell that does not support
13985 shell functions at all.  However, some differences should be expected:
13987 Inside a shell function, you should not rely on the error status of a
13988 subshell if the last command of that subshell was @code{exit} or
13989 @code{trap}, as this triggers bugs in zsh 4.x; while Autoconf tries to
13990 find a shell that does not exhibit the bug, zsh might be the only shell
13991 present on the user's machine.
13993 Likewise, the state of @samp{$?} is not reliable when entering a shell
13994 function.  This has the effect that using a function as the first
13995 command in a @command{trap} handler can cause problems.
13997 @example
13998 $ @kbd{bash -c 'foo()@{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
14001 $ @kbd{ash -c 'foo()@{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
14004 @end example
14006 Shell variables and functions may share the same namespace, for example
14007 with Solaris 10 @command{/bin/sh}:
14009 @example
14010 $ @kbd{f () @{ :; @}; f=; f}
14011 f: not found
14012 @end example
14014 @noindent
14015 For this reason, Autotest uses the prefix @samp{at_func_} for its
14016 functions.
14018 Handling of positional parameters and shell options varies among shells.
14019 For example, Korn shells reset and restore trace output (@samp{set -x})
14020 and other options upon function entry and exit.  Inside a function,
14021 @acronym{IRIX} sh sets @samp{$0} to the function name.
14023 Some ancient Bourne shell variants with function support did not reset
14024 @samp{$@var{i}, @var{i} >= 0}, upon function exit, so effectively the
14025 arguments of the script were lost after the first function invocation.
14026 It is probably not worth worrying about these shells any more.
14028 With @acronym{AIX} sh, a @command{trap} on 0 installed in a shell function
14029 triggers at function exit rather than at script exit, see @xref{Limitations
14030 of Builtins}.
14032 @node Limitations of Builtins
14033 @section Limitations of Shell Builtins
14034 @cindex Shell builtins
14035 @cindex Limitations of shell builtins
14037 No, no, we are serious: some shells do have limitations!  :)
14039 You should always keep in mind that any builtin or command may support
14040 options, and therefore differ in behavior with arguments
14041 starting with a dash.  For instance, the innocent @samp{echo "$word"}
14042 can give unexpected results when @code{word} starts with a dash.  It is
14043 often possible to avoid this problem using @samp{echo "x$word"}, taking
14044 the @samp{x} into account later in the pipe.
14046 @table @asis
14047 @item @command{.}
14048 @c --------------
14049 @prindex @command{.}
14050 Use @command{.} only with regular files (use @samp{test -f}).  Bash
14051 2.03, for instance, chokes on @samp{. /dev/null}.  Remember that
14052 @command{.} uses @env{PATH} if its argument contains no slashes.  Also,
14053 some shells, including bash 3.2, implicitly append the current directory
14054 to this @env{PATH} search, even though Posix forbids it.  So if you want
14055 to use @command{.} on a file @file{foo} in the current directory, you
14056 must use @samp{. ./foo}.
14058 @item @command{!}
14059 @c --------------
14060 @prindex @command{!}
14061 The Unix version 7 shell did not support
14062 negating the exit status of commands with @command{!}, and this feature
14063 is still absent from some shells (e.g., Solaris @command{/bin/sh}).
14064 Other shells, such as FreeBSD @command{/bin/sh} or @command{ash}, have
14065 bugs when using @command{!}:
14067 @example
14068 $ @kbd{sh -c '! : | :'; echo $?}
14070 $ @kbd{ash -c '! : | :'; echo $?}
14072 $ @kbd{sh -c '! @{ :; @}'; echo $?}
14074 $ @kbd{ash -c '! @{ :; @}'; echo $?}
14075 @{: not found
14076 Syntax error: "@}" unexpected
14078 @end example
14080 Shell code like this:
14082 @example
14083 if ! cmp file1 file2 >/dev/null 2>&1; then
14084   echo files differ or trouble
14086 @end example
14088 is therefore not portable in practice.  Typically it is easy to rewrite
14089 such code, e.g.:
14091 @example
14092 cmp file1 file2 >/dev/null 2>&1 ||
14093   echo files differ or trouble
14094 @end example
14096 More generally, one can always rewrite @samp{! @var{command}} as:
14098 @example
14099 if @var{command}; then (exit 1); else :; fi
14100 @end example
14103 @item @command{@{...@}}
14104 @c --------------------
14105 @prindex @command{@{...@}}
14106 Bash 3.2 (and earlier versions) sometimes does not properly set
14107 @samp{$?} when failing to write redirected output of a compound command.
14108 This problem is most commonly observed with @samp{@{@dots{}@}}; it does
14109 not occur with @samp{(@dots{})}.  For example:
14111 @example
14112 $ @kbd{bash -c '@{ echo foo; @} >/bad; echo $?'}
14113 bash: line 1: /bad: Permission denied
14115 $ @kbd{bash -c 'while :; do echo; done >/bad; echo $?'}
14116 bash: line 1: /bad: Permission denied
14118 @end example
14120 To work around the bug, prepend @samp{:;}:
14122 @example
14123 $ @kbd{bash -c ':;@{ echo foo; @} >/bad; echo $?'}
14124 bash: line 1: /bad: Permission denied
14126 @end example
14129 @item @command{break}
14130 @c ------------------
14131 @prindex @command{break}
14132 The use of @samp{break 2} etc.@: is safe.
14135 @item @command{case}
14136 @c -----------------
14137 @prindex @command{case}
14138 You don't need to quote the argument; no splitting is performed.
14140 You don't need the final @samp{;;}, but you should use it.
14142 Posix requires support for @code{case} patterns with opening
14143 parentheses like this:
14145 @example
14146 case $file_name in
14147   (*.c) echo "C source code";;
14148 esac
14149 @end example
14151 @noindent
14152 but the @code{(} in this example is not portable to many Bourne
14153 shell implementations, which is a pity for those of us using tools that
14154 rely on balanced parentheses.  For instance, with Solaris
14155 @command{/bin/sh}:
14157 @example
14158 $ @kbd{case foo in (foo) echo foo;; esac}
14159 @error{}syntax error: `(' unexpected
14160 @end example
14162 @noindent
14163 The leading @samp{(} can be omitted safely.  In contexts where
14164 unbalanced parentheses cause other problems, such as when using a case
14165 statement as an argument to an Autoconf macro, you can also resort to
14166 creative shell comments to supply the balance:
14168 @example
14169 case $file_name in #(
14170   *.c) echo "C source code";;
14171 esac
14172 @end example
14174 Zsh handles pattern fragments derived from parameter expansions or
14175 command substitutions as though quoted:
14177 @example
14178 $ pat=\?; case aa in ?$pat) echo match;; esac
14179 $ pat=\?; case a? in ?$pat) echo match;; esac
14180 match
14181 @end example
14183 @noindent
14184 Because of a bug in its @code{fnmatch}, Bash fails to properly
14185 handle backslashes in character classes:
14187 @example
14188 bash-2.02$ @kbd{case /tmp in [/\\]*) echo OK;; esac}
14189 bash-2.02$
14190 @end example
14192 @noindent
14193 This is extremely unfortunate, since you are likely to use this code to
14194 handle Posix or @sc{ms-dos} absolute file names.  To work around this
14195 bug, always put the backslash first:
14197 @example
14198 bash-2.02$ @kbd{case '\TMP' in [\\/]*) echo OK;; esac}
14200 bash-2.02$ @kbd{case /tmp in [\\/]*) echo OK;; esac}
14202 @end example
14204 Many Bourne shells cannot handle closing brackets in character classes
14205 correctly.
14207 Some shells also have problems with backslash escaping in case you do not want
14208 to match the backslash: both a backslash and the escaped character match this
14209 pattern.  To work around this, specify the character class in a variable, so
14210 that quote removal does not apply afterwards, and the special characters don't
14211 have to be backslash-escaped:
14213 @example
14214 $ @kbd{case '\' in [\<]) echo OK;; esac}
14216 $ @kbd{scanset='[<]'; case '\' in $scanset) echo OK;; esac}
14218 @end example
14220 Even with this, Solaris @command{ksh} matches a backslash if the set
14221 contains any
14222 of the characters @samp{|}, @samp{&}, @samp{(}, or @samp{)}.
14224 Conversely, Tru64 @command{ksh} (circa 2003) erroneously always matches
14225 a closing parenthesis if not specified in a character class:
14227 @example
14228 $ @kbd{case foo in *\)*) echo fail ;; esac}
14229 fail
14230 $ @kbd{case foo in *')'*) echo fail ;; esac}
14231 fail
14232 @end example
14234 Some shells, such as Ash 0.3.8, are confused by an empty
14235 @code{case}/@code{esac}:
14237 @example
14238 ash-0.3.8 $ @kbd{case foo in esac;}
14239 @error{}Syntax error: ";" unexpected (expecting ")")
14240 @end example
14243 @item @command{cd}
14244 @c ---------------
14245 @prindex @command{cd}
14246 Posix 1003.1-2001 requires that @command{cd} must support
14247 the @option{-L} (``logical'') and @option{-P} (``physical'') options,
14248 with @option{-L} being the default.  However, traditional shells do
14249 not support these options, and their @command{cd} command has the
14250 @option{-P} behavior.
14252 Portable scripts should assume neither option is supported, and should
14253 assume neither behavior is the default.  This can be a bit tricky,
14254 since the Posix default behavior means that, for example,
14255 @samp{ls ..} and @samp{cd ..} may refer to different directories if
14256 the current logical directory is a symbolic link.  It is safe to use
14257 @command{cd @var{dir}} if @var{dir} contains no @file{..} components.
14258 Also, Autoconf-generated scripts check for this problem when computing
14259 variables like @code{ac_top_srcdir} (@pxref{Configuration Actions}),
14260 so it is safe to @command{cd} to these variables.
14262 See @xref{Special Shell Variables}, for portability problems involving
14263 @command{cd} and the @env{CDPATH} environment variable.
14264 Also please see the discussion of the @command{pwd} command.
14267 @item @command{echo}
14268 @c -----------------
14269 @prindex @command{echo}
14270 The simple @command{echo} is probably the most surprising source of
14271 portability troubles.  It is not possible to use @samp{echo} portably
14272 unless both options and escape sequences are omitted.  New applications
14273 which are not aiming at portability should use @samp{printf} instead of
14274 @samp{echo}.
14276 Don't expect any option.  @xref{Preset Output Variables}, @code{ECHO_N}
14277 etc.@: for a means to simulate @option{-n}.
14279 Do not use backslashes in the arguments, as there is no consensus on
14280 their handling.  For @samp{echo '\n' | wc -l}, the @command{sh} of
14281 Solaris outputs 2, but Bash and Zsh (in @command{sh} emulation mode) output 1.
14282 The problem is truly @command{echo}: all the shells
14283 understand @samp{'\n'} as the string composed of a backslash and an
14284 @samp{n}.
14286 Because of these problems, do not pass a string containing arbitrary
14287 characters to @command{echo}.  For example, @samp{echo "$foo"} is safe
14288 if you know that @var{foo}'s value cannot contain backslashes and cannot
14289 start with @samp{-}, but otherwise you should use a here-document like
14290 this:
14292 @example
14293 cat <<EOF
14294 $foo
14296 @end example
14299 @item @command{eval}
14300 @c -----------------
14301 @prindex @command{eval}
14302 The @command{eval} command is useful in limited circumstances, e.g.,
14303 using commands like @samp{eval table_$key=\$value} and @samp{eval
14304 value=table_$key} to simulate a hash table when the key is known to be
14305 alphanumeric.  However, @command{eval} is tricky to use on arbitrary
14306 arguments, even when it is implemented correctly.
14308 It is obviously unwise to use @samp{eval $cmd} if the string value of
14309 @samp{cmd} was derived from an untrustworthy source.  But even if the
14310 string value is valid, @samp{eval $cmd} might not work as intended,
14311 since it causes field splitting and file name expansion to occur twice,
14312 once for the @command{eval} and once for the command itself.  It is
14313 therefore safer to use @samp{eval "$cmd"}.  For example, if @var{cmd}
14314 has the value @samp{cat test?.c}, @samp{eval $cmd} might expand to the
14315 equivalent of @samp{cat test;.c} if there happens to be a file named
14316 @file{test;.c} in the current directory; and this in turn
14317 mistakenly attempts to invoke @command{cat} on the file @file{test} and
14318 then execute the command @command{.c}.  To avoid this problem, use
14319 @samp{eval "$cmd"} rather than @samp{eval $cmd}.
14321 However, suppose that you want to output the text of the evaluated
14322 command just before executing it.  Assuming the previous example,
14323 @samp{echo "Executing: $cmd"} outputs @samp{Executing: cat test?.c}, but
14324 this output doesn't show the user that @samp{test;.c} is the actual name
14325 of the copied file.  Conversely, @samp{eval "echo Executing: $cmd"}
14326 works on this example, but it fails with @samp{cmd='cat foo >bar'},
14327 since it mistakenly replaces the contents of @file{bar} by the
14328 string @samp{cat foo}.  No simple, general, and portable solution to
14329 this problem is known.
14331 You should also be wary of common bugs in @command{eval} implementations.
14332 In some shell implementations (e.g., older @command{ash}, Open@acronym{BSD} 3.8
14333 @command{sh}, @command{pdksh} v5.2.14 99/07/13.2, and @command{zsh}
14334 4.2.5), the arguments of @samp{eval} are evaluated in a context where
14335 @samp{$?} is 0, so they exhibit behavior like this:
14337 @example
14338 $ @kbd{false; eval 'echo $?'}
14340 @end example
14342 The correct behavior here is to output a nonzero value,
14343 but portable scripts should not rely on this.
14345 You should not rely on @code{LINENO} within @command{eval}.
14346 @xref{Special Shell Variables}.
14348 @item @command{exec}
14349 @c -----------------
14350 @prindex @command{exec}
14351 Posix describes several categories of shell built-ins.  Special
14352 built-ins (such as @command{exit}) must impact the environment of the
14353 current shell, and need not be available through @command{exec}.  All
14354 other built-ins are regular, and must not propagate variable assignments
14355 to the environment of the current shell.  However, the group of regular
14356 built-ins is further distinguished by commands that do not require a
14357 @env{PATH} search (such as @command{cd}), in contrast to built-ins that
14358 are offered as a more efficient version of something that must still be
14359 found in a @env{PATH} search (such as @command{echo}).  Posix is not
14360 clear on whether @command{exec} must work with the list of 17 utilities
14361 that are invoked without a @env{PATH} search, and many platforms lack an
14362 executable for some of those built-ins:
14364 @example
14365 $ @kbd{sh -c 'exec cd /tmp'}
14366 sh: line 0: exec: cd: not found
14367 @end example
14369 All other built-ins that provide utilities specified by Posix must have
14370 a counterpart executable that exists on @env{PATH}, although Posix
14371 allows @command{exec} to use the built-in instead of the executable.
14372 For example, contrast @command{bash} 3.2 and @command{pdksh} 5.2.14:
14374 @example
14375 $ @kbd{bash -c 'pwd --version' | head -n1}
14376 bash: line 0: pwd: --: invalid option
14377 pwd: usage: pwd [-LP]
14378 $ @kbd{bash -c 'exec pwd --version' | head -n1}
14379 pwd (GNU coreutils) 6.10
14380 $ @kbd{pdksh -c 'exec pwd --version' | head -n1}
14381 pdksh: pwd: --: unknown option
14382 @end example
14384 When it is desired to avoid a regular shell built-in, the workaround is
14385 to use some other forwarding command, such as @command{env} or
14386 @command{nice}, that will ensure a path search:
14388 @example
14389 $ @kbd{pdksh -c 'exec true --version' | head -n1}
14390 $ @kbd{pdksh -c 'nice true --version' | head -n1}
14391 true (GNU coreutils) 6.10
14392 $ @kbd{pdksh -c 'env true --version' | head -n1}
14393 true (GNU coreutils) 6.10
14394 @end example
14396 @item @command{exit}
14397 @c -----------------
14398 @prindex @command{exit}
14399 The default value of @command{exit} is supposed to be @code{$?};
14400 unfortunately, some shells, such as the @acronym{DJGPP} port of Bash 2.04, just
14401 perform @samp{exit 0}.
14403 @example
14404 bash-2.04$ @kbd{foo=`exit 1` || echo fail}
14405 fail
14406 bash-2.04$ @kbd{foo=`(exit 1)` || echo fail}
14407 fail
14408 bash-2.04$ @kbd{foo=`(exit 1); exit` || echo fail}
14409 bash-2.04$
14410 @end example
14412 Using @samp{exit $?} restores the expected behavior.
14414 Some shell scripts, such as those generated by @command{autoconf}, use a
14415 trap to clean up before exiting.  If the last shell command exited with
14416 nonzero status, the trap also exits with nonzero status so that the
14417 invoker can tell that an error occurred.
14419 Unfortunately, in some shells, such as Solaris @command{/bin/sh}, an exit
14420 trap ignores the @code{exit} command's argument.  In these shells, a trap
14421 cannot determine whether it was invoked by plain @code{exit} or by
14422 @code{exit 1}.  Instead of calling @code{exit} directly, use the
14423 @code{AC_MSG_ERROR} macro that has a workaround for this problem.
14426 @item @command{export}
14427 @c -------------------
14428 @prindex @command{export}
14429 The builtin @command{export} dubs a shell variable @dfn{environment
14430 variable}.  Each update of exported variables corresponds to an update
14431 of the environment variables.  Conversely, each environment variable
14432 received by the shell when it is launched should be imported as a shell
14433 variable marked as exported.
14435 Alas, many shells, such as Solaris @command{/bin/sh},
14436 @sc{irix} 6.3, @sc{irix} 5.2,
14437 @acronym{AIX} 4.1.5, and Digital Unix 4.0, forget to
14438 @command{export} the environment variables they receive.  As a result,
14439 two variables coexist: the environment variable and the shell
14440 variable.  The following code demonstrates this failure:
14442 @example
14443 #!/bin/sh
14444 echo $FOO
14445 FOO=bar
14446 echo $FOO
14447 exec /bin/sh $0
14448 @end example
14450 @noindent
14451 when run with @samp{FOO=foo} in the environment, these shells print
14452 alternately @samp{foo} and @samp{bar}, although they should print only
14453 @samp{foo} and then a sequence of @samp{bar}s.
14455 Therefore you should @command{export} again each environment variable
14456 that you update; the export can occur before or after the assignment.
14458 Posix is not clear on whether the @command{export} of an undefined
14459 variable causes the variable to be defined with the value of an empty
14460 string, or merely marks any future definition of a variable by that name
14461 for export.  Various shells behave differently in this regard:
14463 @example
14464 $ @kbd{sh -c 'export foo; env | grep foo'}
14465 $ @kbd{ash -c 'export foo; env | grep foo'}
14466 foo=
14467 @end example
14469 @item @command{false}
14470 @c ------------------
14471 @prindex @command{false}
14472 Don't expect @command{false} to exit with status 1: in native
14473 Solaris @file{/bin/false} exits with status 255.
14476 @item @command{for}
14477 @c ----------------
14478 @prindex @command{for}
14479 To loop over positional arguments, use:
14481 @example
14482 for arg
14484   echo "$arg"
14485 done
14486 @end example
14488 @noindent
14489 You may @emph{not} leave the @code{do} on the same line as @code{for},
14490 since some shells improperly grok:
14492 @example
14493 for arg; do
14494   echo "$arg"
14495 done
14496 @end example
14498 If you want to explicitly refer to the positional arguments, given the
14499 @samp{$@@} bug (@pxref{Shell Substitutions}), use:
14501 @example
14502 for arg in $@{1+"$@@"@}; do
14503   echo "$arg"
14504 done
14505 @end example
14507 @noindent
14508 But keep in mind that Zsh, even in Bourne shell emulation mode, performs
14509 word splitting on @samp{$@{1+"$@@"@}}; see @ref{Shell Substitutions},
14510 item @samp{$@@}, for more.
14513 @item @command{if}
14514 @c ---------------
14515 @prindex @command{if}
14516 Using @samp{!} is not portable.  Instead of:
14518 @example
14519 if ! cmp -s file file.new; then
14520   mv file.new file
14522 @end example
14524 @noindent
14525 use:
14527 @example
14528 if cmp -s file file.new; then :; else
14529   mv file.new file
14531 @end example
14533 There are shells that do not reset the exit status from an @command{if}:
14535 @example
14536 $ @kbd{if (exit 42); then true; fi; echo $?}
14538 @end example
14540 @noindent
14541 whereas a proper shell should have printed @samp{0}.  This is especially
14542 bad in makefiles since it produces false failures.  This is why properly
14543 written makefiles, such as Automake's, have such hairy constructs:
14545 @example
14546 if test -f "$file"; then
14547   install "$file" "$dest"
14548 else
14549   :
14551 @end example
14554 @item @command{printf}
14555 @c ------------------
14556 @prindex @command{printf}
14557 A format string starting with a @samp{-} can cause problems.
14558 Bash interprets it as an option and
14559 gives an error.  And @samp{--} to mark the end of options is not good
14560 in the Net@acronym{BSD} Almquist shell (e.g., 0.4.6) which takes that
14561 literally as the format string.  Putting the @samp{-} in a @samp{%c}
14562 or @samp{%s} is probably easiest:
14564 @example
14565 printf %s -foo
14566 @end example
14568 Bash 2.03 mishandles an escape sequence that happens to evaluate to @samp{%}:
14570 @example
14571 $ @kbd{printf '\045'}
14572 bash: printf: `%': missing format character
14573 @end example
14575 Large outputs may cause trouble.  On Solaris 2.5.1 through 10, for
14576 example, @file{/usr/bin/printf} is buggy, so when using
14577 @command{/bin/sh} the command @samp{printf %010000x 123} normally dumps
14578 core.
14581 @item @command{read}
14582 @c ------------------
14583 @prindex @command{read}
14584 Not all shells support @option{-r} (Solaris @command{/bin/sh} for example).
14587 @item @command{pwd}
14588 @c ----------------
14589 @prindex @command{pwd}
14590 With modern shells, plain @command{pwd} outputs a ``logical''
14591 directory name, some of whose components may be symbolic links.  These
14592 directory names are in contrast to ``physical'' directory names, whose
14593 components are all directories.
14595 Posix 1003.1-2001 requires that @command{pwd} must support
14596 the @option{-L} (``logical'') and @option{-P} (``physical'') options,
14597 with @option{-L} being the default.  However, traditional shells do
14598 not support these options, and their @command{pwd} command has the
14599 @option{-P} behavior.
14601 Portable scripts should assume neither option is supported, and should
14602 assume neither behavior is the default.  Also, on many hosts
14603 @samp{/bin/pwd} is equivalent to @samp{pwd -P}, but Posix
14604 does not require this behavior and portable scripts should not rely on
14607 Typically it's best to use plain @command{pwd}.  On modern hosts this
14608 outputs logical directory names, which have the following advantages:
14610 @itemize @bullet
14611 @item
14612 Logical names are what the user specified.
14613 @item
14614 Physical names may not be portable from one installation
14615 host to another due to network file system gymnastics.
14616 @item
14617 On modern hosts @samp{pwd -P} may fail due to lack of permissions to
14618 some parent directory, but plain @command{pwd} cannot fail for this
14619 reason.
14620 @end itemize
14622 Also please see the discussion of the @command{cd} command.
14625 @item @command{set}
14626 @c ----------------
14627 @prindex @command{set}
14628 With the Free@acronym{BSD} 6.0 shell, the @command{set} command (without
14629 any options) does not sort its output.
14631 The @command{set} builtin faces the usual problem with arguments
14632 starting with a
14633 dash.  Modern shells such as Bash or Zsh understand @option{--} to specify
14634 the end of the options (any argument after @option{--} is a parameter,
14635 even @samp{-x} for instance), but many traditional shells (e.g., Solaris
14636 10 @command{/bin/sh}) simply stop option
14637 processing as soon as a non-option argument is found.  Therefore, use
14638 @samp{dummy} or simply @samp{x} to end the option processing, and use
14639 @command{shift} to pop it out:
14641 @example
14642 set x $my_list; shift
14643 @end example
14645 Avoid @samp{set -}, e.g., @samp{set - $my_list}.  Posix no
14646 longer requires support for this command, and in traditional shells
14647 @samp{set - $my_list} resets the @option{-v} and @option{-x} options, which
14648 makes scripts harder to debug.
14650 Some nonstandard shells do not recognize more than one option
14651 (e.g., @samp{set -e -x} assigns @samp{-x} to the command line).  It is
14652 better to combine them:
14654 @example
14655 set -ex
14656 @end example
14658 The @acronym{BSD} shell has had several problems with the @option{-e}
14659 option, partly because @acronym{BSD} @command{make} traditionally used
14660 @option{-e} even though this was incompatible with Posix
14661 (@pxref{Failure in Make Rules}).  Older versions of the @acronym{BSD}
14662 shell (circa 1990) mishandled @samp{&&}, @samp{||}, @samp{if}, and
14663 @samp{case} when @option{-e} was in effect, causing the shell to exit
14664 unexpectedly in some cases.  This was particularly a problem with
14665 makefiles, and led to circumlocutions like @samp{sh -c 'test -f file ||
14666 touch file'}, where the seemingly-unnecessary @samp{sh -c '@dots{}'}
14667 wrapper works around the bug.
14669 Even relatively-recent versions of the @acronym{BSD} shell (e.g.,
14670 Open@acronym{BSD} 3.4) wrongly exit with @option{-e} if a command within
14671 @samp{&&} fails inside a compound statement.  For example:
14673 @example
14674 #! /bin/sh
14675 set -e
14676 foo=''
14677 test -n "$foo" && exit 1
14678 echo one
14679 if :; then
14680   test -n "$foo" && exit 1
14682 echo two
14683 @end example
14685 @noindent
14686 does not print @samp{two}.  One workaround is to use @samp{if test -n
14687 "$foo"; then exit 1; fi} rather than @samp{test -n "$foo" && exit 1}.
14688 Another possibility is to warn @acronym{BSD} users not to use @samp{sh -e}.
14691 @item @command{shift}
14692 @c ------------------
14693 @prindex @command{shift}
14694 Not only is @command{shift}ing a bad idea when there is nothing left to
14695 shift, but in addition it is not portable: the shell of @acronym{MIPS
14696 RISC/OS} 4.52 refuses to do it.
14698 Don't use @samp{shift 2} etc.; it was not in the 7th Edition Bourne shell,
14699 and it is also absent in many pre-Posix shells.
14702 @item @command{source}
14703 @c -------------------
14704 @prindex @command{source}
14705 This command is not portable, as Posix does not require it; use
14706 @command{.} instead.
14709 @item @command{test}
14710 @c -----------------
14711 @prindex @command{test}
14712 The @code{test} program is the way to perform many file and string
14713 tests.  It is often invoked by the alternate name @samp{[}, but using
14714 that name in Autoconf code is asking for trouble since it is an M4 quote
14715 character.
14717 The @option{-a}, @option{-o}, @samp{(}, and @samp{)} operands are not
14718 portable and should be avoided.  Thus, portable uses of @command{test}
14719 should never have more than four arguments, and scripts should use shell
14720 constructs like @samp{&&} and @samp{||} instead.  If you combine
14721 @samp{&&} and @samp{||} in the same statement, keep in mind that they
14722 have equal precedence, so it is often better to parenthesize even when
14723 this is redundant.  For example:
14725 @smallexample
14726 # Not portable:
14727 test "X$a" = "X$b" -a \
14728   '(' "X$c" != "X$d" -o "X$e" = "X$f" ')'
14730 # Portable:
14731 test "X$a" = "X$b" &&
14732   @{ test "X$c" != "X$d" || test "X$e" = "X$f"; @}
14733 @end smallexample
14735 @command{test} does not process options like most other commands do; for
14736 example, it does not recognize the @option{--} argument as marking the
14737 end of options.
14739 It is safe to use @samp{!} as a @command{test} operator.  For example,
14740 @samp{if test ! -d foo; @dots{}} is portable even though @samp{if ! test
14741 -d foo; @dots{}} is not.
14744 @item @command{test} (files)
14745 @c -------------------------
14746 To enable @command{configure} scripts to support cross-compilation, they
14747 shouldn't do anything that tests features of the build system instead of
14748 the host system.  But occasionally you may find it necessary to check
14749 whether some arbitrary file exists.  To do so, use @samp{test -f} or
14750 @samp{test -r}.  Do not use @samp{test -x}, because 4.3@acronym{BSD} does not
14751 have it.  Do not use @samp{test -e} either, because Solaris @command{/bin/sh}
14752 lacks it.  To test for symbolic links on systems that have them, use
14753 @samp{test -h} rather than @samp{test -L}; either form conforms to
14754 Posix 1003.1-2001, but older shells like Solaris 8
14755 @code{/bin/sh} support only @option{-h}.
14757 @item @command{test} (strings)
14758 @c ---------------------------
14759 Posix says that @samp{test "@var{string}"} succeeds if @var{string} is
14760 not null, but this usage is not portable to traditional platforms like
14761 Solaris 10 @command{/bin/sh}, which mishandle strings like @samp{!} and
14762 @samp{-n}.
14764 Posix also says that @samp{test ! "@var{string}"},
14765 @samp{test -n "@var{string}"} and
14766 @samp{test -z "@var{string}"} work with any string, but many
14767 shells (such as Solaris, @acronym{AIX} 3.2, @sc{unicos} 10.0.0.6,
14768 Digital Unix 4, etc.)@: get confused if
14769 @var{string} looks like an operator:
14771 @example
14772 $ @kbd{test -n =}
14773 test: argument expected
14774 $ @kbd{test ! -n}
14775 test: argument expected
14776 @end example
14778 Similarly, Posix says that both @samp{test "@var{string1}" = "@var{string2"}}
14779 and @samp{test "@var{string1}" != "@var{string2"}} work for any pairs of
14780 strings, but in practice this is not true for troublesome strings that
14781 look like operators or parentheses, or that begin with @samp{-}.
14783 It is best to protect such strings with a leading @samp{X}, e.g.,
14784 @samp{test "X@var{string}" != X} rather than @samp{test -n
14785 "@var{string}"} or @samp{test ! "@var{string}"}.
14787 It is common to find variations of the following idiom:
14789 @example
14790 test -n "`echo $ac_feature | sed 's/[-a-zA-Z0-9_]//g'`" &&
14791   @var{action}
14792 @end example
14794 @noindent
14795 to take an action when a token matches a given pattern.  Such constructs
14796 should be avoided by using:
14798 @example
14799 case $ac_feature in
14800   *[!-a-zA-Z0-9_]*) @var{action};;
14801 esac
14802 @end example
14804 If the pattern is a complicated regular expression that cannot be
14805 expressed as a shell pattern, use something like this instead:
14807 @example
14808 expr "X$ac_feature" : 'X.*[^-a-zA-Z0-9_]' >/dev/null &&
14809   @var{action}
14810 @end example
14812 @samp{expr "X@var{foo}" : "X@var{bar}"} is more robust than @samp{echo
14813 "X@var{foo}" | grep "^X@var{bar}"}, because it avoids problems when
14814 @samp{@var{foo}} contains backslashes.
14817 @item @command{trap}
14818 @c -----------------
14819 @prindex @command{trap}
14820 It is safe to trap at least the signals 1, 2, 13, and 15.  You can also
14821 trap 0, i.e., have the @command{trap} run when the script ends (either via an
14822 explicit @command{exit}, or the end of the script).  The trap for 0 should be
14823 installed outside of a shell function, or @acronym{AIX} 5.3 @command{/bin/sh}
14824 will invoke the trap at the end of this function.
14826 Posix says that @samp{trap - 1 2 13 15} resets the traps for the
14827 specified signals to their default values, but many common shells (e.g.,
14828 Solaris @command{/bin/sh}) misinterpret this and attempt to execute a
14829 ``command'' named @command{-} when the specified conditions arise.
14830 There is no portable workaround, except for @samp{trap - 0}, for which
14831 @samp{trap '' 0} is a portable substitute.
14833 Although Posix is not absolutely clear on this point, it is widely
14834 admitted that when entering the trap @samp{$?} should be set to the exit
14835 status of the last command run before the trap.  The ambiguity can be
14836 summarized as: ``when the trap is launched by an @command{exit}, what is
14837 the @emph{last} command run: that before @command{exit}, or
14838 @command{exit} itself?''
14840 Bash considers @command{exit} to be the last command, while Zsh and
14841 Solaris @command{/bin/sh} consider that when the trap is run it is
14842 @emph{still} in the @command{exit}, hence it is the previous exit status
14843 that the trap receives:
14845 @example
14846 $ @kbd{cat trap.sh}
14847 trap 'echo $?' 0
14848 (exit 42); exit 0
14849 $ @kbd{zsh trap.sh}
14851 $ @kbd{bash trap.sh}
14853 @end example
14855 The portable solution is then simple: when you want to @samp{exit 42},
14856 run @samp{(exit 42); exit 42}, the first @command{exit} being used to
14857 set the exit status to 42 for Zsh, and the second to trigger the trap
14858 and pass 42 as exit status for Bash.
14860 The shell in Free@acronym{BSD} 4.0 has the following bug: @samp{$?} is
14861 reset to 0 by empty lines if the code is inside @command{trap}.
14863 @example
14864 $ @kbd{trap 'false}
14866 echo $?' 0
14867 $ @kbd{exit}
14869 @end example
14871 @noindent
14872 Fortunately, this bug only affects @command{trap}.
14874 @item @command{true}
14875 @c -----------------
14876 @prindex @command{true}
14877 @c Info cannot handle `:' in index entries.
14878 @c @prindex @command{:}
14879 Don't worry: as far as we know @command{true} is portable.
14880 Nevertheless, it's not always a builtin (e.g., Bash 1.x), and the
14881 portable shell community tends to prefer using @command{:}.  This has a
14882 funny side effect: when asked whether @command{false} is more portable
14883 than @command{true} Alexandre Oliva answered:
14885 @quotation
14886 In a sense, yes, because if it doesn't exist, the shell will produce an
14887 exit status of failure, which is correct for @command{false}, but not
14888 for @command{true}.
14889 @end quotation
14892 @item @command{unset}
14893 @c ------------------
14894 @prindex @command{unset}
14895 In some nonconforming shells (e.g., Bash 2.05a), @code{unset FOO} fails
14896 when @code{FOO} is not set.  Also, Bash 2.01 mishandles @code{unset
14897 MAIL} in some cases and dumps core.
14899 A few ancient shells lack @command{unset} entirely.  Nevertheless, because
14900 it is extremely useful to disable embarrassing variables such as
14901 @code{PS1}, you can test for its existence and use
14902 it @emph{provided} you give a neutralizing value when @command{unset} is
14903 not supported:
14905 @smallexample
14906 # "|| exit" suppresses any "Segmentation fault" message.
14907 if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
14908   unset=unset
14909 else
14910   unset=false
14912 $unset PS1 || PS1='$ '
14913 @end smallexample
14915 @noindent
14916 @xref{Special Shell Variables}, for some neutralizing values.  Also, see
14917 @ref{Limitations of Builtins}, documentation of @command{export}, for
14918 the case of environment variables.
14919 @end table
14921 @node Limitations of Usual Tools
14922 @section Limitations of Usual Tools
14923 @cindex Limitations of usual tools
14925 The small set of tools you can expect to find on any machine can still
14926 include some limitations you should be aware of.
14928 @table @asis
14929 @item Awk
14930 @c ------
14931 @prindex Awk
14932 Don't leave white space before the opening parenthesis in a user function call.
14933 Posix does not allow this and @acronym{GNU} Awk rejects it:
14935 @example
14936 $ @kbd{gawk 'function die () @{ print "Aaaaarg!"  @}
14937         BEGIN @{ die () @}'}
14938 gawk: cmd. line:2:         BEGIN @{ die () @}
14939 gawk: cmd. line:2:                      ^ parse error
14940 $ @kbd{gawk 'function die () @{ print "Aaaaarg!"  @}
14941         BEGIN @{ die() @}'}
14942 Aaaaarg!
14943 @end example
14945 Posix says that if a program contains only @samp{BEGIN} actions, and
14946 contains no instances of @code{getline}, then the program merely
14947 executes the actions without reading input.  However, traditional Awk
14948 implementations (such as Solaris 10 @command{awk}) read and discard
14949 input in this case.  Portable scripts can redirect input from
14950 @file{/dev/null} to work around the problem.  For example:
14952 @example
14953 awk 'BEGIN @{print "hello world"@}' </dev/null
14954 @end example
14956 Posix says that in an @samp{END} action, @samp{$NF} (and presumably,
14957 @samp{$1}) retain their value from the last record read, if no
14958 intervening @samp{getline} occurred.  However, some implementations
14959 (such as Solaris 10 @samp{/usr/bin/awk}, @samp{nawk}, or Darwin
14960 @samp{awk}) reset these variables.  A workaround is to use an
14961 intermediate variable prior to the @samp{END} block.  For example:
14963 @example
14964 $ @kbd{cat end.awk}
14965 @{ tmp = $1 @}
14966 END @{ print "a", $1, $NF, "b", tmp @}
14967 $ @kbd{echo 1 | awk -f end.awk}
14968 a   b 1
14969 $ @kbd{echo 1 | gawk -f end.awk}
14970 a 1 1 b 1
14971 @end example
14973 If you want your program to be deterministic, don't depend on @code{for}
14974 on arrays:
14976 @example
14977 $ @kbd{cat for.awk}
14978 END @{
14979   arr["foo"] = 1
14980   arr["bar"] = 1
14981   for (i in arr)
14982     print i
14984 $ @kbd{gawk -f for.awk </dev/null}
14987 $ @kbd{nawk -f for.awk </dev/null}
14990 @end example
14992 Some Awk implementations, such as @acronym{HP-UX} 11.0's native one,
14993 mishandle anchors:
14995 @example
14996 $ @kbd{echo xfoo | $AWK '/foo|^bar/ @{ print @}'}
14997 $ @kbd{echo bar | $AWK '/foo|^bar/ @{ print @}'}
14999 $ @kbd{echo xfoo | $AWK '/^bar|foo/ @{ print @}'}
15000 xfoo
15001 $ @kbd{echo bar | $AWK '/^bar|foo/ @{ print @}'}
15003 @end example
15005 @noindent
15006 Either do not depend on such patterns (i.e., use @samp{/^(.*foo|bar)/},
15007 or use a simple test to reject such implementations.
15009 On @samp{ia64-hp-hpux11.23}, Awk mishandles @code{printf} conversions
15010 after @code{%u}:
15012 @example
15013 $ @kbd{awk 'BEGIN @{ printf "%u %d\n", 0, -1 @}'}
15014 0 0
15015 @end example
15017 @acronym{AIX} version 5.2 has an arbitrary limit of 399 on the
15018 length of regular expressions and literal strings in an Awk program.
15020 Traditional Awk implementations derived from Unix version 7, such as
15021 Solaris @command{/bin/awk}, have many limitations and do not
15022 conform to Posix.  Nowadays @code{AC_PROG_AWK} (@pxref{Particular
15023 Programs}) finds you an Awk that doesn't have these problems, but if
15024 for some reason you prefer not to use @code{AC_PROG_AWK} you may need to
15025 address them.
15027 Traditional Awk does not support multidimensional arrays or user-defined
15028 functions.
15030 Traditional Awk does not support the @option{-v} option.  You can use
15031 assignments after the program instead, e.g., @command{$AWK '@{print v
15032 $1@}' v=x}; however, don't forget that such assignments are not
15033 evaluated until they are encountered (e.g., after any @code{BEGIN}
15034 action).
15036 Traditional Awk does not support the keywords @code{delete} or @code{do}.
15038 Traditional Awk does not support the expressions
15039 @code{@var{a}?@var{b}:@var{c}}, @code{!@var{a}}, @code{@var{a}^@var{b}},
15040 or @code{@var{a}^=@var{b}}.
15042 Traditional Awk does not support the predefined @code{CONVFMT} variable.
15044 Traditional Awk supports only the predefined functions @code{exp}, @code{index},
15045 @code{int}, @code{length}, @code{log}, @code{split}, @code{sprintf},
15046 @code{sqrt}, and @code{substr}.
15048 Traditional Awk @code{getline} is not at all compatible with Posix;
15049 avoid it.
15051 Traditional Awk has @code{for (i in a) @dots{}} but no other uses of the
15052 @code{in} keyword.  For example, it lacks @code{if (i in a) @dots{}}.
15054 In code portable to both traditional and modern Awk, @code{FS} must be a
15055 string containing just one ordinary character, and similarly for the
15056 field-separator argument to @code{split}.
15058 Traditional Awk has a limit of 99 fields in a record.  Since some Awk
15059 implementations, like Tru64's, split the input even if you don't refer
15060 to any field in the script, to circumvent this problem, set @samp{FS}
15061 to an unusual character and use @code{split}.
15063 Traditional Awk has a limit of at most 99 bytes in a number formatted by
15064 @code{OFMT}; for example, @code{OFMT="%.300e"; print 0.1;} typically
15065 dumps core.
15067 The original version of Awk had a limit of at most 99 bytes per
15068 @code{split} field, 99 bytes per @code{substr} substring, and 99 bytes
15069 per run of non-special characters in a @code{printf} format, but these
15070 bugs have been fixed on all practical hosts that we know of.
15072 @item @command{basename}
15073 @c ---------------------
15074 @prindex @command{basename}
15075 Not all hosts have a working @command{basename}.
15076 You can use @command{expr} instead.
15078 @c AS_BASENAME is to be replaced by a better API.
15079 @ignore
15080 Not all hosts have a working @command{basename}, and you should instead
15081 use @code{AS_BASENAME} (@pxref{Programming in M4sh}), followed by
15082 @command{expr} if you need to strip a suffix.  For example:
15084 @example
15085 a=`basename "$aname"`       # This is not portable.
15086 a=`AS_BASENAME(["$aname"])` # This is more portable.
15088 # This is not portable.
15089 c=`basename "$cname" .c`
15091 # This is more portable.
15092 c=`AS_BASENAME(["$cname"])`
15093 case $c in
15094 ?*.c) c=`expr "X$c" : 'X\(.*\)\.c'`;;
15095 esac
15096 @end example
15097 @end ignore
15100 @item @command{cat}
15101 @c ----------------
15102 @prindex @command{cat}
15103 Don't rely on any option.
15106 @item @command{cc}
15107 @c ---------------
15108 @prindex @command{cc}
15109 The command @samp{cc -c foo.c} traditionally produces an object file
15110 named @file{foo.o}.  Most compilers allow @option{-c} to be combined
15111 with @option{-o} to specify a different object file name, but
15112 Posix does not require this combination and a few compilers
15113 lack support for it.  @xref{C Compiler}, for how @acronym{GNU} Make
15114 tests for this feature with @code{AC_PROG_CC_C_O}.
15116 When a compilation such as @samp{cc -o foo foo.c} fails, some compilers
15117 (such as @sc{cds} on Reliant Unix) leave a @file{foo.o}.
15119 @acronym{HP-UX} @command{cc} doesn't accept @file{.S} files to preprocess and
15120 assemble.  @samp{cc -c foo.S} appears to succeed, but in fact does
15121 nothing.
15123 The default executable, produced by @samp{cc foo.c}, can be
15125 @itemize
15126 @item @file{a.out} --- usual Posix convention.
15127 @item @file{b.out} --- i960 compilers (including @command{gcc}).
15128 @item @file{a.exe} --- @acronym{DJGPP} port of @command{gcc}.
15129 @item @file{a_out.exe} --- GNV @command{cc} wrapper for DEC C on OpenVMS.
15130 @item @file{foo.exe} --- various MS-DOS compilers.
15131 @end itemize
15133 The C compiler's traditional name is @command{cc}, but other names like
15134 @command{gcc} are common.  Posix 1003.1-2001 specifies the
15135 name @command{c99}, but older Posix editions specified
15136 @command{c89} and anyway these standard names are rarely used in
15137 practice.  Typically the C compiler is invoked from makefiles that use
15138 @samp{$(CC)}, so the value of the @samp{CC} make variable selects the
15139 compiler name.
15142 @item @command{chmod}
15143 @c ------------------
15144 @prindex @command{chmod}
15145 Avoid usages like @samp{chmod -w file}; use @samp{chmod a-w file}
15146 instead, for two reasons.  First, plain @option{-w} does not necessarily
15147 make the file unwritable, since it does not affect mode bits that
15148 correspond to bits in the file mode creation mask.  Second,
15149 Posix says that the @option{-w} might be interpreted as an
15150 implementation-specific option, not as a mode; Posix suggests
15151 using @samp{chmod -- -w file} to avoid this confusion, but unfortunately
15152 @samp{--} does not work on some older hosts.
15155 @item @command{cmp}
15156 @c ----------------
15157 @prindex @command{cmp}
15158 @command{cmp} performs a raw data comparison of two files, while
15159 @command{diff} compares two text files.  Therefore, if you might compare
15160 DOS files, even if only checking whether two files are different, use
15161 @command{diff} to avoid spurious differences due to differences of
15162 newline encoding.
15165 @item @command{cp}
15166 @c ---------------
15167 @prindex @command{cp}
15168 Avoid the @option{-r} option, since Posix 1003.1-2004 marks it as
15169 obsolescent and its behavior on special files is implementation-defined.
15170 Use @option{-R} instead.  On @acronym{GNU} hosts the two options
15171 are equivalent, but on Solaris hosts (for example) @command{cp -r}
15172 reads from pipes instead of replicating them.
15174 Some @command{cp} implementations (e.g., @acronym{BSD/OS} 4.2) do not allow
15175 trailing slashes at the end of nonexistent destination directories.  To
15176 avoid this problem, omit the trailing slashes.  For example, use
15177 @samp{cp -R source /tmp/newdir} rather than @samp{cp -R source
15178 /tmp/newdir/} if @file{/tmp/newdir} does not exist.
15180 @c This is thanks to Ian.
15181 The ancient SunOS 4 @command{cp} does not support @option{-f}, although
15182 its @command{mv} does.
15184 @cindex timestamp resolution
15185 Traditionally, file timestamps had 1-second resolution, and @samp{cp
15186 -p} copied the timestamps exactly.  However, many modern file systems
15187 have timestamps with 1-nanosecond resolution.  Unfortunately, @samp{cp
15188 -p} implementations truncate timestamps when copying files, so this
15189 can result in the destination file appearing to be older than the
15190 source.  The exact amount of truncation depends on the resolution of
15191 the system calls that @command{cp} uses; traditionally this was
15192 @code{utime}, which has 1-second resolution, but some newer
15193 @command{cp} implementations use @code{utimes}, which has
15194 1-microsecond resolution.  These newer implementations include @acronym{GNU}
15195 Core Utilities 5.0.91 or later, and Solaris 8 (sparc) patch 109933-02 or
15196 later.  Unfortunately as of January 2006 there is still no system
15197 call to set timestamps to the full nanosecond resolution.
15199 Bob Proulx notes that @samp{cp -p} always @emph{tries} to copy
15200 ownerships.  But whether it actually does copy ownerships or not is a
15201 system dependent policy decision implemented by the kernel.  If the
15202 kernel allows it then it happens.  If the kernel does not allow it then
15203 it does not happen.  It is not something @command{cp} itself has control
15204 over.
15206 In Unix System V any user can chown files to any other user, and System
15207 V also has a non-sticky @file{/tmp}.  That probably derives from the
15208 heritage of System V in a business environment without hostile users.
15209 @acronym{BSD} changed this
15210 to be a more secure model where only root can @command{chown} files and
15211 a sticky @file{/tmp} is used.  That undoubtedly derives from the heritage
15212 of @acronym{BSD} in a campus environment.
15214 @acronym{GNU}/Linux and Solaris by default follow @acronym{BSD}, but
15215 can be configured to allow a System V style @command{chown}.  On the
15216 other hand, @acronym{HP-UX} follows System V, but can
15217 be configured to use the modern security model and disallow
15218 @command{chown}.  Since it is an administrator-configurable parameter
15219 you can't use the name of the kernel as an indicator of the behavior.
15223 @item @command{date}
15224 @c -----------------
15225 @prindex @command{date}
15226 Some versions of @command{date} do not recognize special @samp{%} directives,
15227 and unfortunately, instead of complaining, they just pass them through,
15228 and exit with success:
15230 @example
15231 $ @kbd{uname -a}
15232 OSF1 medusa.sis.pasteur.fr V5.1 732 alpha
15233 $ @kbd{date "+%s"}
15235 @end example
15238 @item @command{diff}
15239 @c -----------------
15240 @prindex @command{diff}
15241 Option @option{-u} is nonportable.
15243 Some implementations, such as Tru64's, fail when comparing to
15244 @file{/dev/null}.  Use an empty file instead.
15247 @item @command{dirname}
15248 @c --------------------
15249 @prindex @command{dirname}
15250 Not all hosts have a working @command{dirname}, and you should instead
15251 use @code{AS_DIRNAME} (@pxref{Programming in M4sh}).  For example:
15253 @example
15254 dir=`dirname "$file"`       # This is not portable.
15255 dir=`AS_DIRNAME(["$file"])` # This is more portable.
15256 @end example
15259 @item @command{egrep}
15260 @c ------------------
15261 @prindex @command{egrep}
15262 Posix 1003.1-2001 no longer requires @command{egrep},
15263 but many hosts do not yet support the Posix
15264 replacement @code{grep -E}.  Also, some traditional implementations do
15265 not work on long input lines.  To work around these problems, invoke
15266 @code{AC_PROG_EGREP} and then use @code{$EGREP}.
15268 Portable extended regular expressions should use @samp{\} only to escape
15269 characters in the string @samp{$()*+.?[\^@{|}.  For example, @samp{\@}}
15270 is not portable, even though it typically matches @samp{@}}.
15272 The empty alternative is not portable.  Use @samp{?} instead.  For
15273 instance with Digital Unix v5.0:
15275 @example
15276 > printf "foo\n|foo\n" | $EGREP '^(|foo|bar)$'
15277 |foo
15278 > printf "bar\nbar|\n" | $EGREP '^(foo|bar|)$'
15279 bar|
15280 > printf "foo\nfoo|\n|bar\nbar\n" | $EGREP '^(foo||bar)$'
15282 |bar
15283 @end example
15285 @command{$EGREP} also suffers the limitations of @command{grep}.
15287 @item @command{expr}
15288 @c -----------------
15289 @prindex @command{expr}
15290 No @command{expr} keyword starts with @samp{X}, so use @samp{expr
15291 X"@var{word}" : 'X@var{regex}'} to keep @command{expr} from
15292 misinterpreting @var{word}.
15294 Don't use @code{length}, @code{substr}, @code{match} and @code{index}.
15296 @item @command{expr} (@samp{|})
15297 @prindex @command{expr} (@samp{|})
15298 You can use @samp{|}.  Although Posix does require that @samp{expr
15299 ''} return the empty string, it does not specify the result when you
15300 @samp{|} together the empty string (or zero) with the empty string.  For
15301 example:
15303 @example
15304 expr '' \| ''
15305 @end example
15307 Posix 1003.2-1992 returns the empty string
15308 for this case, but traditional Unix returns @samp{0} (Solaris is
15309 one such example).  In Posix 1003.1-2001, the specification was
15310 changed to match traditional Unix's behavior (which is
15311 bizarre, but it's too late to fix this).  Please note that the same
15312 problem does arise when the empty string results from a computation,
15313 as in:
15315 @example
15316 expr bar : foo \| foo : bar
15317 @end example
15319 @noindent
15320 Avoid this portability problem by avoiding the empty string.
15323 @item @command{expr} (@samp{:})
15324 @c ----------------------------
15325 @prindex @command{expr}
15326 Portable @command{expr} regular expressions should use @samp{\} to
15327 escape only characters in the string @samp{$()*.0123456789[\^n@{@}}.
15328 For example, alternation, @samp{\|}, is common but Posix does not
15329 require its support, so it should be avoided in portable scripts.
15330 Similarly, @samp{\+} and @samp{\?} should be avoided.
15332 Portable @command{expr} regular expressions should not begin with
15333 @samp{^}.  Patterns are automatically anchored so leading @samp{^} is
15334 not needed anyway.
15336 The Posix standard is ambiguous as to whether
15337 @samp{expr 'a' : '\(b\)'} outputs @samp{0} or the empty string.
15338 In practice, it outputs the empty string on most platforms, but portable
15339 scripts should not assume this.  For instance, the @acronym{QNX} 4.25 native
15340 @command{expr} returns @samp{0}.
15342 One might think that a way to get a uniform behavior would be to use
15343 the empty string as a default value:
15345 @example
15346 expr a : '\(b\)' \| ''
15347 @end example
15349 @noindent
15350 Unfortunately this behaves exactly as the original expression; see the
15351 @command{expr} (@samp{|}) entry for more information.
15353 Some ancient @command{expr} implementations (e.g., SunOS 4 @command{expr} and
15354 Solaris 8 @command{/usr/ucb/expr}) have a silly length limit that causes
15355 @command{expr} to fail if the matched substring is longer than 120
15356 bytes.  In this case, you might want to fall back on @samp{echo|sed} if
15357 @command{expr} fails.  Nowadays this is of practical importance only for
15358 the rare installer who mistakenly puts @file{/usr/ucb} before
15359 @file{/usr/bin} in @env{PATH}.
15361 On Mac OS X 10.4, @command{expr} mishandles the pattern @samp{[^-]} in
15362 some cases.  For example, the command
15363 @example
15364 expr Xpowerpc-apple-darwin8.1.0 : 'X[^-]*-[^-]*-\(.*\)'
15365 @end example
15367 @noindent
15368 outputs @samp{apple-darwin8.1.0} rather than the correct @samp{darwin8.1.0}.
15369 This particular case can be worked around by substituting @samp{[^--]}
15370 for @samp{[^-]}.
15372 Don't leave, there is some more!
15374 The @acronym{QNX} 4.25 @command{expr}, in addition of preferring @samp{0} to
15375 the empty string, has a funny behavior in its exit status: it's always 1
15376 when parentheses are used!
15378 @example
15379 $ @kbd{val=`expr 'a' : 'a'`; echo "$?: $val"}
15380 0: 1
15381 $ @kbd{val=`expr 'a' : 'b'`; echo "$?: $val"}
15382 1: 0
15384 $ @kbd{val=`expr 'a' : '\(a\)'`; echo "?: $val"}
15385 1: a
15386 $ @kbd{val=`expr 'a' : '\(b\)'`; echo "?: $val"}
15387 1: 0
15388 @end example
15390 @noindent
15391 In practice this can be a big problem if you are ready to catch failures
15392 of @command{expr} programs with some other method (such as using
15393 @command{sed}), since you may get twice the result.  For instance
15395 @example
15396 $ @kbd{expr 'a' : '\(a\)' || echo 'a' | sed 's/^\(a\)$/\1/'}
15397 @end example
15399 @noindent
15400 outputs @samp{a} on most hosts, but @samp{aa} on @acronym{QNX} 4.25.  A
15401 simple workaround consists of testing @command{expr} and using a variable
15402 set to @command{expr} or to @command{false} according to the result.
15404 Tru64 @command{expr} incorrectly treats the result as a number, if it
15405 can be interpreted that way:
15407 @example
15408 $ @kbd{expr 00001 : '.*\(...\)'}
15410 @end example
15413 @item @command{fgrep}
15414 @c ------------------
15415 @prindex @command{fgrep}
15416 Posix 1003.1-2001 no longer requires @command{fgrep},
15417 but many hosts do not yet support the Posix
15418 replacement @code{grep -F}.  Also, some traditional implementations do
15419 not work on long input lines.  To work around these problems, invoke
15420 @code{AC_PROG_FGREP} and then use @code{$FGREP}.
15423 @item @command{find}
15424 @c -----------------
15425 @prindex @command{find}
15426 The option @option{-maxdepth} seems to be @acronym{GNU} specific.
15427 Tru64 v5.1, Net@acronym{BSD} 1.5 and Solaris @command{find}
15428 commands do not understand it.
15430 The replacement of @samp{@{@}} is guaranteed only if the argument is
15431 exactly @emph{@{@}}, not if it's only a part of an argument.  For
15432 instance on DU, and @acronym{HP-UX} 10.20 and @acronym{HP-UX} 11:
15434 @example
15435 $ @kbd{touch foo}
15436 $ @kbd{find . -name foo -exec echo "@{@}-@{@}" \;}
15437 @{@}-@{@}
15438 @end example
15440 @noindent
15441 while @acronym{GNU} @command{find} reports @samp{./foo-./foo}.
15444 @item @command{grep}
15445 @c -----------------
15446 @prindex @command{grep}
15447 Portable scripts can rely on the @command{grep} options @option{-c},
15448 @option{-l}, @option{-n}, and @option{-v}, but should avoid other
15449 options.  For example, don't use @option{-w}, as Posix does not require
15450 it and Irix 6.5.16m's @command{grep} does not support it.  Also,
15451 portable scripts should not combine @option{-c} with @option{-l},
15452 as Posix does not allow this.
15454 Some of the options required by Posix are not portable in practice.
15455 Don't use @samp{grep -q} to suppress output, because many @command{grep}
15456 implementations (e.g., Solaris) do not support @option{-q}.
15457 Don't use @samp{grep -s} to suppress output either, because Posix
15458 says @option{-s} does not suppress output, only some error messages;
15459 also, the @option{-s} option of traditional @command{grep} behaved
15460 like @option{-q} does in most modern implementations.  Instead,
15461 redirect the standard output and standard error (in case the file
15462 doesn't exist) of @code{grep} to @file{/dev/null}.  Check the exit
15463 status of @code{grep} to determine whether it found a match.
15465 Some traditional @command{grep} implementations do not work on long
15466 input lines.  On AIX the default @code{grep} silently truncates long
15467 lines on the input before matching.
15469 Also, many implementations do not support multiple regexps
15470 with @option{-e}: they either reject @option{-e} entirely (e.g., Solaris)
15471 or honor only the last pattern (e.g., @acronym{IRIX} 6.5 and NeXT).  To
15472 work around these problems, invoke @code{AC_PROG_GREP} and then use
15473 @code{$GREP}.
15475 Another possible workaround for the multiple @option{-e} problem is to
15476 separate the patterns by newlines, for example:
15478 @example
15479 grep 'foo
15480 bar' in.txt
15481 @end example
15483 @noindent
15484 except that this fails with traditional @command{grep}
15485 implementations and with Open@acronym{BSD} 3.8 @command{grep}.
15487 Traditional @command{grep} implementations (e.g., Solaris) do not
15488 support the @option{-E} or @option{-F} options.  To work around these
15489 problems, invoke @code{AC_PROG_EGREP} and then use @code{$EGREP}, and
15490 similarly for @code{AC_PROG_FGREP} and @code{$FGREP}.  Even if you are
15491 willing to require support for Posix @command{grep}, your script should
15492 not use both @option{-E} and @option{-F}, since Posix does not allow
15493 this combination.
15495 Portable @command{grep} regular expressions should use @samp{\} only to
15496 escape characters in the string @samp{$()*.0123456789[\^@{@}}.  For example,
15497 alternation, @samp{\|}, is common but Posix does not require its
15498 support in basic regular expressions, so it should be avoided in
15499 portable scripts.  Solaris and HP-UX @command{grep} do not support it.
15500 Similarly, the following escape sequences should also be avoided:
15501 @samp{\<}, @samp{\>}, @samp{\+}, @samp{\?}, @samp{\`}, @samp{\'},
15502 @samp{\B}, @samp{\b}, @samp{\S}, @samp{\s}, @samp{\W}, and @samp{\w}.
15504 Posix does not specify the behavior of @command{grep} on binary files.
15505 An example where this matters is using @acronym{BSD} @command{grep} to
15506 search text that includes embedded @acronym{ANSI} escape sequences for
15507 colored output to terminals (@samp{\033[m} is the sequence to restore
15508 normal output); the behavior depends on whether input is seekable:
15510 @example
15511 $ @kbd{printf 'esc\033[mape\n' > sample}
15512 $ @kbd{grep . sample}
15513 Binary file sample matches
15514 $ @kbd{cat sample | grep .}
15515 escape
15516 @end example
15519 @item @command{join}
15520 @c -----------------
15521 @prindex @command{join}
15522 Solaris 8 @command{join} has bugs when the second operand is standard
15523 input, and when standard input is a pipe.  For example, the following
15524 shell script causes Solaris 8 @command{join} to loop forever:
15526 @example
15527 cat >file <<'EOF'
15528 1 x
15529 2 y
15531 cat file | join file -
15532 @end example
15534 Use @samp{join - file} instead.
15537 @item @command{ln}
15538 @c ---------------
15539 @prindex @command{ln}
15540 @cindex Symbolic links
15541 Don't rely on @command{ln} having a @option{-f} option.  Symbolic links
15542 are not available on old systems; use @samp{$(LN_S)} as a portable substitute.
15544 For versions of the @acronym{DJGPP} before 2.04,
15545 @command{ln} emulates symbolic links
15546 to executables by generating a stub that in turn calls the real
15547 program.  This feature also works with nonexistent files like in the
15548 Posix spec.  So @samp{ln -s file link} generates @file{link.exe},
15549 which attempts to call @file{file.exe} if run.  But this feature only
15550 works for executables, so @samp{cp -p} is used instead for these
15551 systems.  @acronym{DJGPP} versions 2.04 and later have full support
15552 for symbolic links.
15555 @item @command{ls}
15556 @c ---------------
15557 @prindex @command{ls}
15558 @cindex Listing directories
15559 The portable options are @option{-acdilrtu}.  Current practice is for
15560 @option{-l} to output both owner and group, even though ancient versions
15561 of @command{ls} omitted the group.
15563 On ancient hosts, @samp{ls foo} sent the diagnostic @samp{foo not found}
15564 to standard output if @file{foo} did not exist.  Hence a shell command
15565 like @samp{sources=`ls *.c 2>/dev/null`} did not always work, since it
15566 was equivalent to @samp{sources='*.c not found'} in the absence of
15567 @samp{.c} files.  This is no longer a practical problem, since current
15568 @command{ls} implementations send diagnostics to standard error.
15570 @item @command{mkdir}
15571 @c ------------------
15572 @prindex @command{mkdir}
15573 @cindex Making directories
15574 No @command{mkdir} option is portable to older systems.  Instead of
15575 @samp{mkdir -p @var{file-name}}, you should use
15576 @code{AS_MKDIR_P(@var{file-name})} (@pxref{Programming in M4sh})
15577 or @code{AC_PROG_MKDIR_P} (@pxref{Particular Programs}).
15579 Combining the @option{-m} and @option{-p} options, as in @samp{mkdir -m
15580 go-w -p @var{dir}}, often leads to trouble.  Free@acronym{BSD}
15581 @command{mkdir} incorrectly attempts to change the permissions of
15582 @var{dir} even if it already exists.  @acronym{HP-UX} 11.23 and
15583 @acronym{IRIX} 6.5 @command{mkdir} often assign the wrong permissions to
15584 any newly-created parents of @var{dir}.
15586 Posix does not clearly specify whether @samp{mkdir -p foo}
15587 should succeed when @file{foo} is a symbolic link to an already-existing
15588 directory.  The @acronym{GNU} Core Utilities 5.1.0 @command{mkdir}
15589 succeeds, but Solaris @command{mkdir} fails.
15591 Traditional @code{mkdir -p} implementations suffer from race conditions.
15592 For example, if you invoke @code{mkdir -p a/b} and @code{mkdir -p a/c}
15593 at the same time, both processes might detect that @file{a} is missing,
15594 one might create @file{a}, then the other might try to create @file{a}
15595 and fail with a @code{File exists} diagnostic.  The @acronym{GNU} Core
15596 Utilities (@samp{fileutils} version 4.1), Free@acronym{BSD} 5.0,
15597 Net@acronym{BSD} 2.0.2, and Open@acronym{BSD} 2.4 are known to be
15598 race-free when two processes invoke @code{mkdir -p} simultaneously, but
15599 earlier versions are vulnerable.  Solaris @command{mkdir} is still
15600 vulnerable as of Solaris 10, and other traditional Unix systems are
15601 probably vulnerable too.  This possible race is harmful in parallel
15602 builds when several Make rules call @code{mkdir -p} to
15603 construct directories.  You may use
15604 @code{install-sh -d} as a safe replacement, provided this script is
15605 recent enough; the copy shipped with Autoconf 2.60 and Automake 1.10 is
15606 OK, but copies from older versions are vulnerable.
15609 @item @command{mktemp}
15610 @c -------------------
15611 @prindex @command{mktemp}
15612 @cindex Creating temporary files
15613 Shell scripts can use temporary files safely with @command{mktemp}, but
15614 it does not exist on all systems.  A portable way to create a safe
15615 temporary file name is to create a temporary directory with mode 700 and
15616 use a file inside this directory.  Both methods prevent attackers from
15617 gaining control, though @command{mktemp} is far less likely to fail
15618 gratuitously under attack.
15620 Here is sample code to create a new temporary directory safely:
15622 @example
15623 # Create a temporary directory $tmp in $TMPDIR (default /tmp).
15624 # Use mktemp if possible; otherwise fall back on mkdir,
15625 # with $RANDOM to make collisions less likely.
15626 : $@{TMPDIR=/tmp@}
15628   tmp=`
15629     (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
15630   ` &&
15631   test -n "$tmp" && test -d "$tmp"
15632 @} || @{
15633   tmp=$TMPDIR/foo$$-$RANDOM
15634   (umask 077 && mkdir "$tmp")
15635 @} || exit $?
15636 @end example
15639 @item @command{mv}
15640 @c ---------------
15641 @prindex @command{mv}
15642 @cindex Moving open files
15643 The only portable options are @option{-f} and @option{-i}.
15645 Moving individual files between file systems is portable (it was in Unix
15646 version 6),
15647 but it is not always atomic: when doing @samp{mv new existing}, there's
15648 a critical section where neither the old nor the new version of
15649 @file{existing} actually exists.
15651 On some systems moving files from @file{/tmp} can sometimes cause
15652 undesirable (but perfectly valid) warnings, even if you created these
15653 files.  This is because @file{/tmp} belongs to a group that ordinary
15654 users are not members of, and files created in @file{/tmp} inherit
15655 the group of @file{/tmp}.  When the file is copied, @command{mv} issues
15656 a diagnostic without failing:
15658 @smallexample
15659 $ @kbd{touch /tmp/foo}
15660 $ @kbd{mv /tmp/foo .}
15661 @error{}mv: ./foo: set owner/group (was: 100/0): Operation not permitted
15662 $ @kbd{echo $?}
15664 $ @kbd{ls foo}
15666 @end smallexample
15668 @noindent
15669 This annoying behavior conforms to Posix, unfortunately.
15671 Moving directories across mount points is not portable, use @command{cp}
15672 and @command{rm}.
15674 @acronym{DOS} variants cannot rename or remove open files, and do not
15675 support commands like @samp{mv foo bar >foo}, even though this is
15676 perfectly portable among Posix hosts.
15679 @item @command{od}
15680 @c ---------------
15681 @prindex @command{od}
15683 In Mac OS X 10.3, @command{od} does not support the
15684 standard Posix options @option{-A}, @option{-j}, @option{-N}, or
15685 @option{-t}, or the @acronym{XSI} option @option{-s}.  The only
15686 supported Posix option is @option{-v}, and the only supported
15687 @acronym{XSI} options are those in @option{-bcdox}.  The @acronym{BSD}
15688 @command{hexdump} program can be used instead.
15690 This problem no longer exists in Mac OS X 10.4.3.
15693 @item @command{rm}
15694 @c ---------------
15695 @prindex @command{rm}
15696 The @option{-f} and @option{-r} options are portable.
15698 It is not portable to invoke @command{rm} without operands.  For
15699 example, on many systems @samp{rm -f -r} (with no other arguments)
15700 silently succeeds without doing anything, but it fails with a diagnostic
15701 on Net@acronym{BSD} 2.0.2.
15703 A file might not be removed even if its parent directory is writable
15704 and searchable.  Many Posix hosts cannot remove a mount point, a named
15705 stream, a working directory, or a last link to a file that is being
15706 executed.
15708 @acronym{DOS} variants cannot rename or remove open files, and do not
15709 support commands like @samp{rm foo >foo}, even though this is
15710 perfectly portable among Posix hosts.
15713 @item @command{sed}
15714 @c ----------------
15715 @prindex @command{sed}
15716 Patterns should not include the separator (unless escaped), even as part
15717 of a character class.  In conformance with Posix, the Cray
15718 @command{sed} rejects @samp{s/[^/]*$//}: use @samp{s,[^/]*$,,}.
15720 Avoid empty patterns within parentheses (i.e., @samp{\(\)}).  Posix does
15721 not require support for empty patterns, and Unicos 9 @command{sed} rejects
15722 them.
15724 Unicos 9 @command{sed} loops endlessly on patterns like @samp{.*\n.*}.
15726 Sed scripts should not use branch labels longer than 7 characters and
15727 should not contain comments.  @acronym{HP-UX} sed has a limit of 99 commands
15728 (not counting @samp{:} commands) and
15729 48 labels, which can not be circumvented by using more than one script
15730 file.  It can execute up to 19 reads with the @samp{r} command per cycle.
15731 Solaris @command{/usr/ucb/sed} rejects usages that exceed an limit of
15732 about 6000 bytes for the internal representation of commands.
15734 Avoid redundant @samp{;}, as some @command{sed} implementations, such as
15735 Net@acronym{BSD} 1.4.2's, incorrectly try to interpret the second
15736 @samp{;} as a command:
15738 @example
15739 $ @kbd{echo a | sed 's/x/x/;;s/x/x/'}
15740 sed: 1: "s/x/x/;;s/x/x/": invalid command code ;
15741 @end example
15743 Input should not have unreasonably long lines, since some @command{sed}
15744 implementations have an input buffer limited to 4000 bytes.
15746 Portable @command{sed} regular expressions should use @samp{\} only to escape
15747 characters in the string @samp{$()*.0123456789[\^n@{@}}.  For example,
15748 alternation, @samp{\|}, is common but Posix does not require its
15749 support, so it should be avoided in portable scripts.  Solaris
15750 @command{sed} does not support alternation; e.g., @samp{sed '/a\|b/d'}
15751 deletes only lines that contain the literal string @samp{a|b}.
15752 Similarly, @samp{\+} and @samp{\?} should be avoided.
15754 Anchors (@samp{^} and @samp{$}) inside groups are not portable.
15756 Nested parentheses in patterns (e.g., @samp{\(\(a*\)b*)\)}) are
15757 quite portable to current hosts, but was not supported by some ancient
15758 @command{sed} implementations like SVR3.
15760 Some @command{sed} implementations, e.g., Solaris,
15761 restrict the special role of the asterisk to one-character regular expressions.
15762 This may lead to unexpected behavior:
15764 @example
15765 $ @kbd{echo '1*23*4' | /usr/bin/sed 's/\(.\)*/x/g'}
15766 x2x4
15767 $ @kbd{echo '1*23*4' | /usr/xpg4/bin/sed 's/\(.\)*/x/g'}
15769 @end example
15771 The @option{-e} option is mostly portable.
15772 However, its argument
15773 cannot start with @samp{a}, @samp{c}, or @samp{i},
15774 as this runs afoul of a Tru64 5.1 bug.
15775 Also, its argument cannot be empty, as this fails on @acronym{AIX} 5.3.
15776 Some people prefer to use @samp{-e}:
15778 @example
15779 sed -e '@var{command-1}' \
15780     -e '@var{command-2}'
15781 @end example
15783 @noindent
15784 as opposed to the equivalent:
15786 @example
15787 sed '
15788   @var{command-1}
15789   @var{command-2}
15791 @end example
15793 @noindent
15794 The following usage is sometimes equivalent:
15796 @example
15797 sed '@var{command-1};@var{command-2}'
15798 @end example
15800 but Posix says that this use of a semicolon has undefined effect if
15801 @var{command-1}'s verb is @samp{@{}, @samp{a}, @samp{b}, @samp{c},
15802 @samp{i}, @samp{r}, @samp{t}, @samp{w}, @samp{:}, or @samp{#}, so you
15803 should use semicolon only with simple scripts that do not use these
15804 verbs.
15806 Commands inside @{ @} brackets are further restricted.  Posix says that
15807 they cannot be preceded by addresses, @samp{!}, or @samp{;}, and that
15808 each command must be followed immediately by a newline, without any
15809 intervening blanks or semicolons.  The closing bracket must be alone on
15810 a line, other than white space preceding or following it.
15812 Contrary to yet another urban legend, you may portably use @samp{&} in
15813 the replacement part of the @code{s} command to mean ``what was
15814 matched''.  All descendants of Unix version 7 @command{sed}
15815 (at least; we
15816 don't have first hand experience with older @command{sed} implementations) have
15817 supported it.
15819 Posix requires that you must not have any white space between
15820 @samp{!} and the following command.  It is OK to have blanks between
15821 the address and the @samp{!}.  For instance, on Solaris:
15823 @example
15824 $ @kbd{echo "foo" | sed -n '/bar/ ! p'}
15825 @error{}Unrecognized command: /bar/ ! p
15826 $ @kbd{echo "foo" | sed -n '/bar/! p'}
15827 @error{}Unrecognized command: /bar/! p
15828 $ @kbd{echo "foo" | sed -n '/bar/ !p'}
15830 @end example
15832 Posix also says that you should not combine @samp{!} and @samp{;}.  If
15833 you use @samp{!}, it is best to put it on a command that is delimited by
15834 newlines rather than @samp{;}.
15836 Also note that Posix requires that the @samp{b}, @samp{t}, @samp{r}, and
15837 @samp{w} commands be followed by exactly one space before their argument.
15838 On the other hand, no white space is allowed between @samp{:} and the
15839 subsequent label name.
15841 If a sed script is specified on the command line and ends in an
15842 @samp{a}, @samp{c}, or @samp{i} command, the last line of inserted text
15843 should be followed by a newline.  Otherwise some @command{sed}
15844 implementations (e.g., Open@acronym{BSD} 3.9) do not append a newline to the
15845 inserted text.
15847 Many @command{sed} implementations (e.g., MacOS X 10.4,
15848 Open@acronym{BSD} 3.9, Solaris 10
15849 @command{/usr/ucb/sed}) strip leading white space from the text of
15850 @samp{a}, @samp{c}, and @samp{i} commands.  Prepend a backslash to
15851 work around this incompatibility with Posix:
15853 @example
15854 $ @kbd{echo flushleft | sed 'a\}
15855 > @kbd{   indented}
15856 > @kbd{'}
15857 flushleft
15858 indented
15859 $ @kbd{echo foo | sed 'a\}
15860 > @kbd{\   indented}
15861 > @kbd{'}
15862 flushleft
15863    indented
15864 @end example
15866 Posix requires that with an empty regular expression, the last non-empty
15867 regular expression from either an address specification or substitution
15868 command is applied.  However, busybox 1.6.1 complains when using a
15869 substitution command with a replacement containing a back-reference to
15870 an empty regular expression; the workaround is repeating the regular
15871 expression.
15873 @example
15874 $ @kbd{echo abc | busybox sed '/a\(b\)c/ s//\1/'}
15875 sed: No previous regexp.
15876 $ @kbd{echo abc | busybox sed '/a\(b\)c/ s/a\(b\)c/\1/'}
15878 @end example
15881 @item @command{sed} (@samp{t})
15882 @c ---------------------------
15883 @prindex @command{sed} (@samp{t})
15884 Some old systems have @command{sed} that ``forget'' to reset their
15885 @samp{t} flag when starting a new cycle.  For instance on @acronym{MIPS
15886 RISC/OS}, and on @sc{irix} 5.3, if you run the following @command{sed}
15887 script (the line numbers are not actual part of the texts):
15889 @example
15890 s/keep me/kept/g  # a
15891 t end             # b
15892 s/.*/deleted/g    # c
15893 :end              # d
15894 @end example
15896 @noindent
15899 @example
15900 delete me         # 1
15901 delete me         # 2
15902 keep me           # 3
15903 delete me         # 4
15904 @end example
15906 @noindent
15907 you get
15909 @example
15910 deleted
15911 delete me
15912 kept
15913 deleted
15914 @end example
15916 @noindent
15917 instead of
15919 @example
15920 deleted
15921 deleted
15922 kept
15923 deleted
15924 @end example
15926 Why?  When processing line 1, (c) matches, therefore sets the @samp{t}
15927 flag, and the output is produced.  When processing
15928 line 2, the @samp{t} flag is still set (this is the bug).  Command (a)
15929 fails to match, but @command{sed} is not supposed to clear the @samp{t}
15930 flag when a substitution fails.  Command (b) sees that the flag is set,
15931 therefore it clears it, and jumps to (d), hence you get @samp{delete me}
15932 instead of @samp{deleted}.  When processing line (3), @samp{t} is clear,
15933 (a) matches, so the flag is set, hence (b) clears the flags and jumps.
15934 Finally, since the flag is clear, line 4 is processed properly.
15936 There are two things one should remember about @samp{t} in @command{sed}.
15937 Firstly, always remember that @samp{t} jumps if @emph{some} substitution
15938 succeeded, not only the immediately preceding substitution.  Therefore,
15939 always use a fake @samp{t clear} followed by a @samp{:clear} on the next
15940 line, to reset the @samp{t} flag where needed.
15942 Secondly, you cannot rely on @command{sed} to clear the flag at each new
15943 cycle.
15945 One portable implementation of the script above is:
15947 @example
15948 t clear
15949 :clear
15950 s/keep me/kept/g
15951 t end
15952 s/.*/deleted/g
15953 :end
15954 @end example
15956 @item @command{touch}
15957 @c ------------------
15958 @prindex @command{touch}
15959 @cindex timestamp resolution
15960 If you specify the desired timestamp (e.g., with the @option{-r}
15961 option), @command{touch} typically uses the @code{utime} or
15962 @code{utimes} system call, which can result in the same kind of
15963 timestamp truncation problems that @samp{cp -p} has.
15965 On ancient @acronym{BSD} systems, @command{touch} or any command that
15966 results in an empty file does not update the timestamps, so use a
15967 command like @command{echo} as a workaround.
15968 Also,
15969 @acronym{GNU} @command{touch} 3.16r (and presumably all before that)
15970 fails to work on SunOS 4.1.3 when the empty file is on an
15971 @acronym{NFS}-mounted 4.2 volume.
15972 However, these problems are no longer of practical concern.
15974 @item @command{tr}
15975 @c ---------------
15976 @prindex @command{tr}
15977 @cindex carriage return, deleting
15978 @cindex deleting carriage return
15979 Not all versions of @command{tr} handle all backslash character escapes.
15980 For example, Solaris 10 @command{/usr/ucb/tr} falls over, even though
15981 Solaris contains more modern @command{tr} in other locations.
15982 Therefore, it is more portable to use octal escapes, even though this
15983 ties the result to @acronym{ASCII}, when using @command{tr} to delete
15984 newlines or carriage returns.
15986 @example
15987 $ @kbd{@{ echo moon; echo light; @} | /usr/ucb/tr -d '\n' ; echo}
15989 light
15990 $ @kbd{@{ echo moon; echo light; @} | /usr/bin/tr -d '\n' ; echo}
15991 moonlight
15992 $ @kbd{@{ echo moon; echo light; @} | /usr/ucb/tr -d '\012' ; echo}
15993 moonlight
15994 @end example
15996 @end table
15999 @node Portable Make
16000 @chapter Portable Make Programming
16001 @prindex @command{make}
16002 @cindex Limitations of @command{make}
16004 Writing portable makefiles is an art.  Since a makefile's commands are
16005 executed by the shell, you must consider the shell portability issues
16006 already mentioned.  However, other issues are specific to @command{make}
16007 itself.
16009 @menu
16010 * $< in Ordinary Make Rules::   $< in ordinary rules
16011 * Failure in Make Rules::       Failing portably in rules
16012 * Special Chars in Names::      Special Characters in Macro Names
16013 * Backslash-Newline-Newline::   Empty last lines in macro definitions
16014 * Backslash-Newline Comments::  Spanning comments across line boundaries
16015 * Long Lines in Makefiles::     Line length limitations
16016 * Macros and Submakes::         @code{make macro=value} and submakes
16017 * The Make Macro MAKEFLAGS::    @code{$(MAKEFLAGS)} portability issues
16018 * The Make Macro SHELL::        @code{$(SHELL)} portability issues
16019 * Comments in Make Rules::      Other problems with Make comments
16020 * obj/ and Make::               Don't name a subdirectory @file{obj}
16021 * make -k Status::              Exit status of @samp{make -k}
16022 * VPATH and Make::              @code{VPATH} woes
16023 * Single Suffix Rules::         Single suffix rules and separated dependencies
16024 * Timestamps and Make::         Subsecond timestamp resolution
16025 @end menu
16027 @node $< in Ordinary Make Rules
16028 @section @code{$<} in Ordinary Make Rules
16030 Posix says that the @samp{$<} construct in makefiles can be
16031 used only in inference rules and in the @samp{.DEFAULT} rule; its
16032 meaning in ordinary rules is unspecified.  Solaris @command{make}
16033 for instance replaces it with the empty string.  Open@acronym{BSD} (3.0 and
16034 later) @command{make} diagnoses these uses and errors out.
16036 @node Failure in Make Rules
16037 @section Failure in Make Rules
16039 Since 1992 Posix has required that @command{make} must invoke
16040 each command with the equivalent of a @samp{sh -c} subshell.  However,
16041 many @command{make} implementations, including @acronym{BSD} make through 2004,
16042 use @samp{sh -e -c} instead, and the @option{-e} option causes the
16043 subshell to exit immediately if a subsidiary simple-command fails.  For
16044 example, the command @samp{touch T; rm -f U} always attempts to
16045 remove @file{U} with Posix make, but incompatible
16046 @command{make} implementations skip the @command{rm} if the
16047 @command{touch} fails.  One way to work around this is to reword the
16048 affected simple-commands so that they always succeed, e.g., @samp{touch
16049 T || :; rm -f U}.
16050 However, even this approach can run into common bugs in @acronym{BSD}
16051 implementations of the @option{-e} option of @command{sh} and
16052 @command{set} (@pxref{Limitations of Builtins}), so if you are worried
16053 about porting to buggy @acronym{BSD} shells it may be simpler to migrate
16054 complicated @command{make} actions into separate scripts.
16056 @node Special Chars in Names
16057 @section Special Characters in Make Macro Names
16059 Posix limits macro names to nonempty strings containing only
16060 @acronym{ASCII} letters and digits, @samp{.}, and @samp{_}.  Many
16061 @command{make} implementations allow a wider variety of characters, but
16062 portable makefiles should avoid them.  It is portable to start a name
16063 with a special character, e.g., @samp{$(.FOO)}.
16065 Some ancient @command{make} implementations don't support leading
16066 underscores in macro names.  An example is @acronym{NEWS-OS} 4.2R.
16068 @example
16069 $ @kbd{cat Makefile}
16070 _am_include = #
16071 _am_quote =
16072 all:; @@echo this is test
16073 $ @kbd{make}
16074 Make: Must be a separator on rules line 2.  Stop.
16075 $ @kbd{cat Makefile2}
16076 am_include = #
16077 am_quote =
16078 all:; @@echo this is test
16079 $ @kbd{make -f Makefile2}
16080 this is test
16081 @end example
16083 @noindent
16084 However, this problem is no longer of practical concern.
16086 @node Backslash-Newline-Newline
16087 @section Backslash-Newline-Newline in Make Macro Values
16089 @c  This has been seen on ia64 hpux 11.20, and on one hppa hpux 10.20,
16090 @c  but another hppa hpux 10.20 didn't have it.  Bob Proulx
16091 @c  <bob@proulx.com> thinks it was in hpux 8.0 too.
16092 On some versions of @acronym{HP-UX}, @command{make} reads multiple newlines
16093 following a backslash, continuing to the next non-empty line.  For
16094 example,
16096 @example
16097 FOO = one \
16099 BAR = two
16101 test:
16102         : FOO is "$(FOO)"
16103         : BAR is "$(BAR)"
16104 @end example
16106 @noindent
16107 shows @code{FOO} equal to @code{one BAR = two}.  Other implementations
16108 sensibly let a backslash continue only to the immediately following
16109 line.
16111 @node Backslash-Newline Comments
16112 @section Backslash-Newline in Make Comments
16114 According to Posix, Make comments start with @code{#}
16115 and continue until an unescaped newline is reached.
16117 @example
16118 $ @kbd{cat Makefile}
16119 # A = foo \
16120       bar \
16121       baz
16123 all:
16124         @@echo ok
16125 $ @kbd{make}   # GNU make
16127 @end example
16129 @noindent
16130 However this is not always the case.  Some implementations
16131 discard everything from @code{#} through the end of the line, ignoring any
16132 trailing backslash.
16134 @example
16135 $ @kbd{pmake}  # BSD make
16136 "Makefile", line 3: Need an operator
16137 Fatal errors encountered -- cannot continue
16138 @end example
16140 @noindent
16141 Therefore, if you want to comment out a multi-line definition, prefix each
16142 line with @code{#}, not only the first.
16144 @example
16145 # A = foo \
16146 #     bar \
16147 #     baz
16148 @end example
16150 @node Long Lines in Makefiles
16151 @section Long Lines in Makefiles
16153 Tru64 5.1's @command{make} has been reported to crash when given a
16154 makefile with lines longer than around 20 kB.  Earlier versions are
16155 reported to exit with @code{Line too long} diagnostics.
16157 @node Macros and Submakes
16158 @section @code{make macro=value} and Submakes
16160 A command-line variable definition such as @code{foo=bar} overrides any
16161 definition of @code{foo} in a makefile.  Some @command{make}
16162 implementations (such as @acronym{GNU} @command{make}) propagate this
16163 override to subsidiary invocations of @command{make}.  Some other
16164 implementations do not pass the substitution along to submakes.
16166 @example
16167 $ @kbd{cat Makefile}
16168 foo = foo
16169 one:
16170         @@echo $(foo)
16171         $(MAKE) two
16172 two:
16173         @@echo $(foo)
16174 $ @kbd{make foo=bar}            # GNU make 3.79.1
16176 make two
16177 make[1]: Entering directory `/home/adl'
16179 make[1]: Leaving directory `/home/adl'
16180 $ @kbd{pmake foo=bar}           # BSD make
16182 pmake two
16184 @end example
16186 You have a few possibilities if you do want the @code{foo=bar} override
16187 to propagate to submakes.  One is to use the @option{-e}
16188 option, which causes all environment variables to have precedence over
16189 the makefile macro definitions, and declare foo as an environment
16190 variable:
16192 @example
16193 $ @kbd{env foo=bar make -e}
16194 @end example
16196 The @option{-e} option is propagated to submakes automatically,
16197 and since the environment is inherited between @command{make}
16198 invocations, the @code{foo} macro is overridden in
16199 submakes as expected.
16201 This syntax (@code{foo=bar make -e}) is portable only when used
16202 outside of a makefile, for instance from a script or from the
16203 command line.  When run inside a @command{make} rule, @acronym{GNU}
16204 @command{make} 3.80 and prior versions forget to propagate the
16205 @option{-e} option to submakes.
16207 Moreover, using @option{-e} could have unexpected side effects if your
16208 environment contains some other macros usually defined by the
16209 makefile.  (See also the note about @code{make -e} and @code{SHELL}
16210 below.)
16212 Another way to propagate overrides to submakes is to do it
16213 manually, from your makefile:
16215 @example
16216 foo = foo
16217 one:
16218         @@echo $(foo)
16219         $(MAKE) foo=$(foo) two
16220 two:
16221         @@echo $(foo)
16222 @end example
16224 You need to foresee all macros that a user might want to override if
16225 you do that.
16227 @node The Make Macro MAKEFLAGS
16228 @section The Make Macro MAKEFLAGS
16229 @cindex @code{MAKEFLAGS} and @command{make}
16230 @cindex @command{make} and @code{MAKEFLAGS}
16232 Posix requires @command{make} to use @code{MAKEFLAGS} to affect the
16233 current and recursive invocations of make, but allows implementations
16234 several formats for the variable.  It is tricky to parse
16235 @code{$MAKEFLAGS} to determine whether @option{-s} for silent execution
16236 or @option{-k} for continued execution are in effect.  For example, you
16237 cannot assume that the first space-separated word in @code{$MAKEFLAGS}
16238 contains single-letter options, since in the Cygwin version of
16239 @acronym{GNU} @command{make} it is either @option{--unix} or
16240 @option{--win32} with the second word containing single-letter options.
16242 @example
16243 $ @kbd{cat Makefile}
16244 all:
16245         @@echo MAKEFLAGS = $(MAKEFLAGS)
16246 $ @kbd{make}
16247 MAKEFLAGS = --unix
16248 $ @kbd{make -k}
16249 MAKEFLAGS = --unix -k
16250 @end example
16252 @node The Make Macro SHELL
16253 @section The Make Macro @code{SHELL}
16254 @cindex @code{SHELL} and @command{make}
16255 @cindex @command{make} and @code{SHELL}
16257 Posix-compliant @command{make} internally uses the @code{$(SHELL)}
16258 macro to spawn shell processes and execute Make rules.  This
16259 is a builtin macro supplied by @command{make}, but it can be modified
16260 by a makefile or by a command-line argument.
16262 Not all @command{make} implementations define this @code{SHELL} macro.
16263 Tru64
16264 @command{make} is an example; this implementation always uses
16265 @code{/bin/sh}.  So it's a good idea to always define @code{SHELL} in
16266 your makefiles.  If you use Autoconf, do
16268 @example
16269 SHELL = @@SHELL@@
16270 @end example
16272 Do not force @code{SHELL = /bin/sh} because that is not correct
16273 everywhere.  For instance @acronym{DJGPP} lacks @code{/bin/sh}, and when
16274 its @acronym{GNU} @code{make} port sees such a setting it enters a special
16275 emulation mode where features like pipes and redirections are emulated
16276 on top of DOS's @command{command.com}.  Unfortunately this emulation is
16277 incomplete; for instance it does not handle command substitutions.
16278 On @acronym{DJGPP} @code{SHELL} should point to Bash.
16280 Posix-compliant @command{make} should never acquire the value of
16281 $(SHELL) from the environment, even when @code{make -e} is used
16282 (otherwise, think about what would happen to your rules if
16283 @code{SHELL=/bin/tcsh}).
16285 However not all @command{make} implementations have this exception.
16286 For instance it's not surprising that Tru64 @command{make} doesn't
16287 protect @code{SHELL}, since it doesn't use it.
16289 @example
16290 $ @kbd{cat Makefile}
16291 SHELL = /bin/sh
16292 FOO = foo
16293 all:
16294         @@echo $(SHELL)
16295         @@echo $(FOO)
16296 $ @kbd{env SHELL=/bin/tcsh FOO=bar make -e}   # Tru64 Make
16297 /bin/tcsh
16299 $ @kbd{env SHELL=/bin/tcsh FOO=bar gmake -e}  # GNU make
16300 /bin/sh
16302 @end example
16304 @node Comments in Make Rules
16305 @section Comments in Make Rules
16306 @cindex Comments in @file{Makefile} rules
16307 @cindex @file{Makefile} rules and comments
16309 Never put comments in a rule.
16311 Some @command{make} treat anything starting with a tab as a command for
16312 the current rule, even if the tab is immediately followed by a @code{#}.
16313 The @command{make} from Tru64 Unix V5.1 is one of them.  The following
16314 makefile runs @code{# foo} through the shell.
16316 @example
16317 all:
16318         # foo
16319 @end example
16321 @node obj/ and Make
16322 @section The @file{obj/} Subdirectory and Make
16323 @cindex @file{obj/}, subdirectory
16324 @cindex @acronym{BSD} @command{make} and @file{obj/}
16326 Never name one of your subdirectories @file{obj/} if you don't like
16327 surprises.
16329 If an @file{obj/} directory exists, @acronym{BSD} @command{make} enters it
16330 before reading the makefile.  Hence the makefile in the
16331 current directory is not read.
16333 @example
16334 $ @kbd{cat Makefile}
16335 all:
16336         echo Hello
16337 $ @kbd{cat obj/Makefile}
16338 all:
16339         echo World
16340 $ @kbd{make}      # GNU make
16341 echo Hello
16342 Hello
16343 $ @kbd{pmake}     # BSD make
16344 echo World
16345 World
16346 @end example
16348 @node make -k Status
16349 @section Exit Status of @code{make -k}
16350 @cindex @code{make -k}
16352 Do not rely on the exit status of @code{make -k}.  Some implementations
16353 reflect whether they encountered an error in their exit status; other
16354 implementations always succeed.
16356 @example
16357 $ @kbd{cat Makefile}
16358 all:
16359         false
16360 $ @kbd{make -k; echo exit status: $?}    # GNU make
16361 false
16362 make: *** [all] Error 1
16363 exit status: 2
16364 $ @kbd{pmake -k; echo exit status: $?}   # BSD make
16365 false
16366 *** Error code 1 (continuing)
16367 exit status: 0
16368 @end example
16370 @node VPATH and Make
16371 @section @code{VPATH} and Make
16372 @cindex @code{VPATH}
16374 Posix does not specify the semantics of @code{VPATH}.  Typically,
16375 @command{make} supports @code{VPATH}, but its implementation is not
16376 consistent.
16378 Autoconf and Automake support makefiles whose usages of @code{VPATH} are
16379 portable to recent-enough popular implementations of @command{make}, but
16380 to keep the resulting makefiles portable, a package's makefile
16381 prototypes must take the following issues into account.  These issues
16382 are complicated and are often poorly understood, and installers who use
16383 @code{VPATH} should expect to find many bugs in this area.  If you use
16384 @code{VPATH}, the simplest way to avoid these portability bugs is to
16385 stick with @acronym{GNU} @command{make}, since it is the most
16386 commonly-used @command{make} among Autoconf users.
16388 Here are some known issues with some @code{VPATH}
16389 implementations.
16391 @menu
16392 * VPATH and Double-colon::      Problems with @samp{::} on ancient hosts
16393 * $< in Explicit Rules::        @code{$<} does not work in ordinary rules
16394 * Automatic Rule Rewriting::    @code{VPATH} goes wild on Solaris
16395 * Tru64 Directory Magic::       @command{mkdir} goes wild on Tru64
16396 * Make Target Lookup::          More details about @code{VPATH} lookup
16397 @end menu
16399 @node VPATH and Double-colon
16400 @subsection @code{VPATH} and Double-colon Rules
16401 @cindex @code{VPATH} and double-colon rules
16402 @cindex double-colon rules and @code{VPATH}
16404 With ancient versions of Sun @command{make},
16405 any assignment to @code{VPATH} causes @command{make} to execute only
16406 the first set of double-colon rules.
16407 However, this problem is no longer of practical concern.
16409 @node $< in Explicit Rules
16410 @subsection @code{$<} Not Supported in Explicit Rules
16411 @cindex explicit rules, @code{$<}, and @code{VPATH}
16412 @cindex @code{$<}, explicit rules, and @code{VPATH}
16413 @cindex @code{VPATH}, explicit rules, and @code{$<}
16415 Using @code{$<} in explicit rules is not portable.
16416 The prerequisite file must be named explicitly in the rule.  If you want
16417 to find the prerequisite via a @code{VPATH} search, you have to code the
16418 whole thing manually.  @xref{Build Directories}.
16420 @node Automatic Rule Rewriting
16421 @subsection Automatic Rule Rewriting
16422 @cindex @code{VPATH} and automatic rule rewriting
16423 @cindex automatic rule rewriting and @code{VPATH}
16425 Some @command{make} implementations, such as Solaris and Tru64,
16426 search for prerequisites in @code{VPATH} and
16427 then rewrite each occurrence as a plain word in the rule.
16428 For instance:
16430 @example
16431 # This isn't portable to GNU make.
16432 VPATH = ../pkg/src
16433 f.c: if.c
16434         cp if.c f.c
16435 @end example
16437 @noindent
16438 executes @code{cp ../pkg/src/if.c f.c} if @file{if.c} is
16439 found in @file{../pkg/src}.
16441 However, this rule leads to real problems in practice.  For example, if
16442 the source directory contains an ordinary file named @file{test} that is
16443 used in a dependency, Solaris @command{make} rewrites commands like
16444 @samp{if test -r foo; @dots{}} to @samp{if ../pkg/src/test -r foo;
16445 @dots{}}, which is typically undesirable.  To avoid this problem,
16446 portable makefiles should never mention a source file whose name is that
16447 of a shell keyword like @file{until} or a shell command like
16448 @command{cat} or @command{gcc} or @command{test}.
16450 Because of these problems @acronym{GNU} @command{make} and many other
16451 @command{make} implementations do not rewrite commands, so portable
16452 makefiles should
16453 search @code{VPATH} manually.  It is tempting to write this:
16455 @smallexample
16456 # This isn't portable to Solaris make.
16457 VPATH = ../pkg/src
16458 f.c: if.c
16459         cp `test -f if.c || echo $(VPATH)/`if.c f.c
16460 @end smallexample
16462 @noindent
16463 However, the ``prerequisite rewriting'' still applies here.  So if
16464 @file{if.c} is in @file{../pkg/src}, Solaris and Tru64 @command{make}
16465 execute
16467 @smallexample
16468 cp `test -f ../pkg/src/if.c || echo ../pkg/src/`if.c f.c
16469 @end smallexample
16471 @noindent
16472 which reduces to
16474 @example
16475 cp if.c f.c
16476 @end example
16478 @noindent
16479 and thus fails.  Oops.
16481 A simple workaround, and good practice anyway, is to use @samp{$?} and
16482 @samp{$@@} when possible:
16484 @smallexample
16485 VPATH = ../pkg/src
16486 f.c: if.c
16487         cp $? $@@
16488 @end smallexample
16490 @noindent
16491 but this does not generalize well to commands with multiple
16492 prerequisites.  A more general workaround is to rewrite the rule so that
16493 the prerequisite @file{if.c} never appears as a plain word.  For
16494 example, these three rules would be safe, assuming @file{if.c} is in
16495 @file{../pkg/src} and the other files are in the working directory:
16497 @smallexample
16498 VPATH = ../pkg/src
16499 f.c: if.c f1.c
16500         cat `test -f ./if.c || echo $(VPATH)/`if.c f1.c >$@@
16501 g.c: if.c g1.c
16502         cat `test -f 'if.c' || echo $(VPATH)/`if.c g1.c >$@@
16503 h.c: if.c h1.c
16504         cat `test -f "if.c" || echo $(VPATH)/`if.c h1.c >$@@
16505 @end smallexample
16507 Things get worse when your prerequisites are in a macro.
16509 @example
16510 VPATH = ../pkg/src
16511 HEADERS = f.h g.h h.h
16512 install-HEADERS: $(HEADERS)
16513         for i in $(HEADERS); do \
16514           $(INSTALL) -m 644 \
16515             `test -f $$i || echo $(VPATH)/`$$i \
16516             $(DESTDIR)$(includedir)/$$i; \
16517         done
16518 @end example
16520 The above @code{install-HEADERS} rule is not Solaris-proof because @code{for
16521 i in $(HEADERS);} is expanded to @code{for i in f.h g.h h.h;}
16522 where @code{f.h} and @code{g.h} are plain words and are hence
16523 subject to @code{VPATH} adjustments.
16525 If the three files are in @file{../pkg/src}, the rule is run as:
16527 @example
16528 for i in ../pkg/src/f.h ../pkg/src/g.h h.h; do \
16529   install -m 644 \
16530      `test -f $i || echo ../pkg/src/`$i \
16531      /usr/local/include/$i; \
16532 done
16533 @end example
16535 where the two first @command{install} calls fail.  For instance,
16536 consider the @code{f.h} installation:
16538 @example
16539 install -m 644 \
16540   `test -f ../pkg/src/f.h || \
16541     echo ../pkg/src/ \
16542   `../pkg/src/f.h \
16543   /usr/local/include/../pkg/src/f.h;
16544 @end example
16546 @noindent
16547 It reduces to:
16549 @example
16550 install -m 644 \
16551   ../pkg/src/f.h \
16552   /usr/local/include/../pkg/src/f.h;
16553 @end example
16555 Note that the manual @code{VPATH} search did not cause any problems here;
16556 however this command installs @file{f.h} in an incorrect directory.
16558 Trying to quote @code{$(HEADERS)} in some way, as we did for
16559 @code{foo.c} a few makefiles ago, does not help:
16561 @example
16562 install-HEADERS: $(HEADERS)
16563         headers='$(HEADERS)'; \
16564         for i in $$headers; do \
16565           $(INSTALL) -m 644 \
16566             `test -f $$i || echo $(VPATH)/`$$i \
16567             $(DESTDIR)$(includedir)/$$i; \
16568         done
16569 @end example
16571 Now, @code{headers='$(HEADERS)'} macro-expands to:
16573 @example
16574 headers='f.h g.h h.h'
16575 @end example
16577 @noindent
16578 but @code{g.h} is still a plain word.  (As an aside, the idiom
16579 @code{headers='$(HEADERS)'; for i in $$headers;} is a good
16580 idea if @code{$(HEADERS)} can be empty, because some shells diagnose a
16581 syntax error on @code{for i in;}.)
16583 One workaround is to strip this unwanted @file{../pkg/src/} prefix manually:
16585 @example
16586 VPATH = ../pkg/src
16587 HEADERS = f.h g.h h.h
16588 install-HEADERS: $(HEADERS)
16589         headers='$(HEADERS)'; \
16590         for i in $$headers; do \
16591           i=`expr "$$i" : '$(VPATH)/\(.*\)'`;
16592           $(INSTALL) -m 644 \
16593             `test -f $$i || echo $(VPATH)/`$$i \
16594             $(DESTDIR)$(includedir)/$$i; \
16595         done
16596 @end example
16598 Automake does something similar.  However the above hack works only if
16599 the files listed in @code{HEADERS} are in the current directory or a
16600 subdirectory; they should not be in an enclosing directory.  If we had
16601 @code{HEADERS = ../f.h}, the above fragment would fail in a VPATH
16602 build with Tru64 @command{make}.  The reason is that not only does
16603 Tru64 @command{make} rewrite dependencies, but it also simplifies
16604 them.  Hence @code{../f.h} becomes @code{../pkg/f.h} instead of
16605 @code{../pkg/src/../f.h}.  This obviously defeats any attempt to strip
16606 a leading @file{../pkg/src/} component.
16608 The following example makes the behavior of Tru64 @command{make}
16609 more apparent.
16611 @example
16612 $ @kbd{cat Makefile}
16613 VPATH = sub
16614 all: ../foo
16615         echo ../foo
16616 $ @kbd{ls}
16617 Makefile foo
16618 $ @kbd{make}
16619 echo foo
16621 @end example
16623 @noindent
16624 Dependency @file{../foo} was found in @file{sub/../foo}, but Tru64
16625 @command{make} simplified it as @file{foo}.  (Note that the @file{sub/}
16626 directory does not even exist, this just means that the simplification
16627 occurred before the file was checked for.)
16629 For the record here is how SunOS 4 @command{make} behaves on this
16630 example.
16632 @smallexample
16633 $ @kbd{make}
16634 make: Fatal error: Don't know how to make target `../foo'
16635 $ @kbd{mkdir sub}
16636 $ @kbd{make}
16637 echo sub/../foo
16638 sub/../foo
16639 @end smallexample
16642 @node Tru64 Directory Magic
16643 @subsection Tru64 @command{make} Creates Prerequisite Directories Magically
16644 @cindex @code{VPATH} and prerequisite directories
16645 @cindex prerequisite directories and @code{VPATH}
16647 When a prerequisite is a subdirectory of @code{VPATH}, Tru64
16648 @command{make} creates it in the current directory.
16650 @example
16651 $ @kbd{mkdir -p foo/bar build}
16652 $ @kbd{cd build}
16653 $ @kbd{cat >Makefile <<END
16654 VPATH = ..
16655 all: foo/bar
16656 END}
16657 $ @kbd{make}
16658 mkdir foo
16659 mkdir foo/bar
16660 @end example
16662 This can yield unexpected results if a rule uses a manual @code{VPATH}
16663 search as presented before.
16665 @example
16666 VPATH = ..
16667 all : foo/bar
16668         command `test -d foo/bar || echo ../`foo/bar
16669 @end example
16671 The above @command{command} is run on the empty @file{foo/bar}
16672 directory that was created in the current directory.
16674 @node Make Target Lookup
16675 @subsection Make Target Lookup
16676 @cindex @code{VPATH}, resolving target pathnames
16678 @acronym{GNU} @command{make} uses a complex algorithm to decide when it
16679 should use files found via a @code{VPATH} search.  @xref{Search
16680 Algorithm, , How Directory Searches are Performed, make, The @acronym{GNU} Make
16681 Manual}.
16683 If a target needs to be rebuilt, @acronym{GNU} @command{make} discards the
16684 file name found during the @code{VPATH} search for this target, and
16685 builds the file locally using the file name given in the makefile.
16686 If a target does not need to be rebuilt, @acronym{GNU} @command{make} uses the
16687 file name found during the @code{VPATH} search.
16689 Other @command{make} implementations, like Net@acronym{BSD} @command{make}, are
16690 easier to describe: the file name found during the @code{VPATH} search
16691 is used whether the target needs to be rebuilt or not.  Therefore
16692 new files are created locally, but existing files are updated at their
16693 @code{VPATH} location.
16695 Open@acronym{BSD} and Free@acronym{BSD} @command{make}, however,
16696 never perform a
16697 @code{VPATH} search for a dependency that has an explicit rule.
16698 This is extremely annoying.
16700 When attempting a @code{VPATH} build for an autoconfiscated package
16701 (e.g., @code{mkdir build && cd build && ../configure}), this means
16702 @acronym{GNU}
16703 @command{make} builds everything locally in the @file{build}
16704 directory, while @acronym{BSD} @command{make} builds new files locally and
16705 updates existing files in the source directory.
16707 @example
16708 $ @kbd{cat Makefile}
16709 VPATH = ..
16710 all: foo.x bar.x
16711 foo.x bar.x: newer.x
16712         @@echo Building $@@
16713 $ @kbd{touch ../bar.x}
16714 $ @kbd{touch ../newer.x}
16715 $ @kbd{make}        # GNU make
16716 Building foo.x
16717 Building bar.x
16718 $ @kbd{pmake}       # NetBSD make
16719 Building foo.x
16720 Building ../bar.x
16721 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
16722 Building foo.x
16723 Building bar.x
16724 $ @kbd{tmake}       # Tru64 make
16725 Building foo.x
16726 Building bar.x
16727 $ @kbd{touch ../bar.x}
16728 $ @kbd{make}        # GNU make
16729 Building foo.x
16730 $ @kbd{pmake}       # NetBSD make
16731 Building foo.x
16732 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
16733 Building foo.x
16734 Building bar.x
16735 $ @kbd{tmake}       # Tru64 make
16736 Building foo.x
16737 Building bar.x
16738 @end example
16740 Note how Net@acronym{BSD} @command{make} updates @file{../bar.x} in its
16741 VPATH location, and how Free@acronym{BSD}, Open@acronym{BSD}, and Tru64
16742 @command{make} always
16743 update @file{bar.x}, even when @file{../bar.x} is up to date.
16745 Another point worth mentioning is that once @acronym{GNU} @command{make} has
16746 decided to ignore a @code{VPATH} file name (e.g., it ignored
16747 @file{../bar.x} in the above example) it continues to ignore it when
16748 the target occurs as a prerequisite of another rule.
16750 The following example shows that @acronym{GNU} @command{make} does not look up
16751 @file{bar.x} in @code{VPATH} before performing the @code{.x.y} rule,
16752 because it ignored the @code{VPATH} result of @file{bar.x} while running
16753 the @code{bar.x: newer.x} rule.
16755 @example
16756 $ @kbd{cat Makefile}
16757 VPATH = ..
16758 all: bar.y
16759 bar.x: newer.x
16760         @@echo Building $@@
16761 .SUFFIXES: .x .y
16762 .x.y:
16763         cp $< $@@
16764 $ @kbd{touch ../bar.x}
16765 $ @kbd{touch ../newer.x}
16766 $ @kbd{make}        # GNU make
16767 Building bar.x
16768 cp bar.x bar.y
16769 cp: cannot stat `bar.x': No such file or directory
16770 make: *** [bar.y] Error 1
16771 $ @kbd{pmake}       # NetBSD make
16772 Building ../bar.x
16773 cp ../bar.x bar.y
16774 $ @kbd{rm bar.y}
16775 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
16776 echo Building bar.x
16777 cp bar.x bar.y
16778 cp: cannot stat `bar.x': No such file or directory
16779 *** Error code 1
16780 $ @kbd{tmake}       # Tru64 make
16781 Building bar.x
16782 cp: bar.x: No such file or directory
16783 *** Exit 1
16784 @end example
16786 Note that if you drop away the command from the @code{bar.x: newer.x}
16787 rule, @acronym{GNU} @command{make} magically starts to work: it
16788 knows that @code{bar.x} hasn't been updated, therefore it doesn't
16789 discard the result from @code{VPATH} (@file{../bar.x}) in succeeding
16790 uses.  Tru64 also works, but Free@acronym{BSD} and Open@acronym{BSD}
16791 still don't.
16793 @example
16794 $ @kbd{cat Makefile}
16795 VPATH = ..
16796 all: bar.y
16797 bar.x: newer.x
16798 .SUFFIXES: .x .y
16799 .x.y:
16800         cp $< $@@
16801 $ @kbd{touch ../bar.x}
16802 $ @kbd{touch ../newer.x}
16803 $ @kbd{make}        # GNU make
16804 cp ../bar.x bar.y
16805 $ @kbd{rm bar.y}
16806 $ @kbd{pmake}       # NetBSD make
16807 cp ../bar.x bar.y
16808 $ @kbd{rm bar.y}
16809 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
16810 cp bar.x bar.y
16811 cp: cannot stat `bar.x': No such file or directory
16812 *** Error code 1
16813 $ @kbd{tmake}       # Tru64 make
16814 cp ../bar.x bar.y
16815 @end example
16817 It seems the sole solution that would please every @command{make}
16818 implementation is to never rely on @code{VPATH} searches for targets.
16819 In other words, @code{VPATH} should be reserved to unbuilt sources.
16822 @node Single Suffix Rules
16823 @section Single Suffix Rules and Separated Dependencies
16824 @cindex Single Suffix Inference Rule
16825 @cindex Rule, Single Suffix Inference
16826 A @dfn{Single Suffix Rule} is basically a usual suffix (inference) rule
16827 (@samp{.from.to:}), but which @emph{destination} suffix is empty
16828 (@samp{.from:}).
16830 @cindex Separated Dependencies
16831 @dfn{Separated dependencies} simply refers to listing the prerequisite
16832 of a target, without defining a rule.  Usually one can list on the one
16833 hand side, the rules, and on the other hand side, the dependencies.
16835 Solaris @command{make} does not support separated dependencies for
16836 targets defined by single suffix rules:
16838 @example
16839 $ @kbd{cat Makefile}
16840 .SUFFIXES: .in
16841 foo: foo.in
16842 .in:
16843         cp $< $@@
16844 $ @kbd{touch foo.in}
16845 $ @kbd{make}
16846 $ @kbd{ls}
16847 Makefile  foo.in
16848 @end example
16850 @noindent
16851 while @acronym{GNU} Make does:
16853 @example
16854 $ @kbd{gmake}
16855 cp foo.in foo
16856 $ @kbd{ls}
16857 Makefile  foo       foo.in
16858 @end example
16860 Note it works without the @samp{foo: foo.in} dependency.
16862 @example
16863 $ @kbd{cat Makefile}
16864 .SUFFIXES: .in
16865 .in:
16866         cp $< $@@
16867 $ @kbd{make foo}
16868 cp foo.in foo
16869 @end example
16871 @noindent
16872 and it works with double suffix inference rules:
16874 @example
16875 $ @kbd{cat Makefile}
16876 foo.out: foo.in
16877 .SUFFIXES: .in .out
16878 .in.out:
16879         cp $< $@@
16880 $ @kbd{make}
16881 cp foo.in foo.out
16882 @end example
16884 As a result, in such a case, you have to write target rules.
16886 @node Timestamps and Make
16887 @section Timestamp Resolution and Make
16888 @cindex timestamp resolution
16889 Traditionally, file timestamps had 1-second resolution, and
16890 @command{make} used those timestamps to determine whether one file was
16891 newer than the other.  However, many modern file systems have
16892 timestamps with 1-nanosecond resolution.  Some @command{make}
16893 implementations look at the entire timestamp; others ignore the
16894 fractional part, which can lead to incorrect results.  Normally this
16895 is not a problem, but in some extreme cases you may need to use tricks
16896 like @samp{sleep 1} to work around timestamp truncation bugs.
16898 Commands like @samp{cp -p} and @samp{touch -r} typically do not copy
16899 file timestamps to their full resolutions (@pxref{Limitations of Usual
16900 Tools}).  Hence you should be wary of rules like this:
16902 @example
16903 dest: src
16904         cp -p src dest
16905 @end example
16907 as @file{dest} often appears to be older than @file{src} after the
16908 timestamp is truncated, and this can cause @command{make} to do
16909 needless rework the next time it is invoked.  To work around this
16910 problem, you can use a timestamp file, e.g.:
16912 @example
16913 dest-stamp: src
16914         cp -p src dest
16915         date >dest-stamp
16916 @end example
16921 @c ======================================== Portable C and C++ Programming
16923 @node Portable C and C++
16924 @chapter Portable C and C++ Programming
16925 @cindex Portable C and C++ programming
16927 C and C++ programs often use low-level features of the underlying
16928 system, and therefore are often more difficult to make portable to other
16929 platforms.
16931 Several standards have been developed to help make your programs more
16932 portable.  If you write programs with these standards in mind, you can
16933 have greater confidence that your programs work on a wide variety
16934 of systems.  @xref{Standards, , Language Standards Supported by
16935 @acronym{GCC}, gcc, Using the @acronym{GNU} Compiler Collection
16936 (@acronym{GCC})}, for a list of C-related
16937 standards.  Many programs also assume the
16938 @uref{http://www.opengroup.org/susv3, Posix standard}.
16940 Some old code is written to be portable to K&R C, which predates any C
16941 standard.  K&R C compilers are no longer of practical interest, though,
16942 and the rest of section assumes at least C89, the first C standard.
16944 Program portability is a huge topic, and this section can only briefly
16945 introduce common pitfalls.  @xref{System Portability, , Portability
16946 between System Types, standards, @acronym{GNU} Coding Standards}, for
16947 more information.
16949 @menu
16950 * Varieties of Unportability::  How to make your programs unportable
16951 * Integer Overflow::            When integers get too large
16952 * Preprocessor Arithmetic::     @code{#if} expression problems
16953 * Null Pointers::               Properties of null pointers
16954 * Buffer Overruns::             Subscript errors and the like
16955 * Volatile Objects::            @code{volatile} and signals
16956 * Floating Point Portability::  Portable floating-point arithmetic
16957 * Exiting Portably::            Exiting and the exit status
16958 @end menu
16960 @node Varieties of Unportability
16961 @section Varieties of Unportability
16962 @cindex portability
16964 Autoconf tests and ordinary programs often need to test what is allowed
16965 on a system, and therefore they may need to deliberately exceed the
16966 boundaries of what the standards allow, if only to see whether an
16967 optional feature is present.  When you write such a program, you should
16968 keep in mind the difference between constraints, unspecified behavior,
16969 and undefined behavior.
16971 In C, a @dfn{constraint} is a rule that the compiler must enforce.  An
16972 example constraint is that C programs must not declare a bit-field with
16973 negative width.  Tests can therefore reliably assume that programs with
16974 negative-width bit-fields are rejected by a compiler that conforms
16975 to the standard.
16977 @dfn{Unspecified behavior} is valid behavior, where the standard allows
16978 multiple possibilities.  For example, the order of evaluation of
16979 function arguments is unspecified.  Some unspecified behavior is
16980 @dfn{implementation-defined}, i.e., documented by the implementation,
16981 but since Autoconf tests cannot read the documentation they cannot
16982 distinguish between implementation-defined and other unspecified
16983 behavior.  It is common for Autoconf tests to probe implementations to
16984 determine otherwise-unspecified behavior.
16986 @dfn{Undefined behavior} is invalid behavior, where the standard allows
16987 the implementation to do anything it pleases.  For example,
16988 dereferencing a null pointer leads to undefined behavior.  If possible,
16989 test programs should avoid undefined behavior, since a program with
16990 undefined behavior might succeed on a test that should fail.
16992 The above rules apply to programs that are intended to conform to the
16993 standard.  However, strictly-conforming programs are quite rare, since
16994 the standards are so limiting.  A major goal of Autoconf is to support
16995 programs that use implementation features not described by the standard,
16996 and it is fairly common for test programs to violate the above rules, if
16997 the programs work well enough in practice.
16999 @node Integer Overflow
17000 @section Integer Overflow
17001 @cindex integer overflow
17002 @cindex overflow, signed integer
17003 @cindex signed integer overflow
17004 @cindex wraparound arithmetic
17006 In practice many portable C programs assume that signed integer overflow wraps
17007 around reliably using two's complement arithmetic.  Yet the C standard
17008 says that program behavior is undefined on overflow, and in a few cases
17009 C programs do not work on some modern implementations because their
17010 overflows do not wrap around as their authors expected.  Conversely, in
17011 signed integer remainder, the C standard requires overflow
17012 behavior that is commonly not implemented.
17014 @menu
17015 * Integer Overflow Basics::      Why integer overflow is a problem
17016 * Signed Overflow Examples::     Examples of code assuming wraparound
17017 * Optimization and Wraparound::  Optimizations that break uses of wraparound
17018 * Signed Overflow Advice::       Practical advice for signed overflow issues
17019 * Signed Integer Division::      @code{INT_MIN / -1} and @code{INT_MIN % -1}
17020 @end menu
17022 @node Integer Overflow Basics
17023 @subsection Basics of Integer Overflow
17024 @cindex integer overflow
17025 @cindex overflow, signed integer
17026 @cindex signed integer overflow
17027 @cindex wraparound arithmetic
17029 In languages like C, unsigned integer overflow reliably wraps around;
17030 e.g., @code{UINT_MAX + 1} yields zero.
17031 This is guaranteed by the C standard and is
17032 portable in practice, unless you specify aggressive,
17033 nonstandard optimization options
17034 suitable only for special applications.
17036 In contrast, the C standard says that signed integer overflow leads to
17037 undefined behavior where a program can do anything, including dumping
17038 core or overrunning a buffer.  The misbehavior can even precede the
17039 overflow.  Such an overflow can occur during addition, subtraction,
17040 multiplication, division, and left shift.
17042 Despite this requirement of the standard, many C programs and Autoconf
17043 tests assume that signed integer overflow silently wraps around modulo a
17044 power of two, using two's complement arithmetic, so long as you cast the
17045 resulting value to a signed integer type or store it into a signed
17046 integer variable.  If you use conservative optimization flags, such
17047 programs are generally portable to the vast majority of modern
17048 platforms, with a few exceptions discussed later.
17050 For historical reasons the C standard also allows implementations with
17051 ones' complement or signed magnitude arithmetic, but it is safe to
17052 assume two's complement nowadays.
17054 Also, overflow can occur when converting an out-of-range value to a
17055 signed integer type.  Here a standard implementation must define what
17056 happens, but this might include raising an exception.  In practice all
17057 known implementations support silent wraparound in this case, so you need
17058 not worry about other possibilities.
17060 @node Signed Overflow Examples
17061 @subsection Examples of Code Assuming Wraparound Overflow
17062 @cindex integer overflow
17063 @cindex overflow, signed integer
17064 @cindex signed integer overflow
17065 @cindex wraparound arithmetic
17067 There has long been a tension between what the C standard requires for
17068 signed integer overflow, and what C programs commonly assume.  The
17069 standard allows aggressive optimizations based on assumptions that
17070 overflow never occurs, but many practical C programs rely on overflow
17071 wrapping around.  These programs do not conform to the standard, but
17072 they commonly work in practice because compiler writers are
17073 understandably reluctant to implement optimizations that would break
17074 many programs, unless perhaps a user specifies aggressive optimization.
17076 The C Standard says that if a program has signed integer overflow its
17077 behavior is undefined, and the undefined behavior can even precede the
17078 overflow.  To take an extreme example:
17080 @c Inspired by Robert Dewar's example in
17081 @c <http://gcc.gnu.org/ml/gcc/2007-01/msg00038.html> (2007-01-01).
17082 @example
17083 if (password == expected_password)
17084   allow_superuser_privileges ();
17085 else if (counter++ == INT_MAX)
17086   abort ();
17087 else
17088   printf ("%d password mismatches\n", counter);
17089 @end example
17091 @noindent
17092 If the @code{int} variable @code{counter} equals @code{INT_MAX},
17093 @code{counter++} must overflow and the behavior is undefined, so the C
17094 standard allows the compiler to optimize away the test against
17095 @code{INT_MAX} and the @code{abort} call.
17096 Worse, if an earlier bug in the program lets the compiler deduce that
17097 @code{counter == INT_MAX} or that @code{counter} previously overflowed,
17098 the C standard allows the compiler to optimize away the password test
17099 and generate code that allows superuser privileges unconditionally.
17101 Despite this requirement by the standard, it has long been common for C
17102 code to assume wraparound arithmetic after signed overflow, and all
17103 known practical C implementations support some C idioms that assume
17104 wraparound signed arithmetic, even if the idioms do not conform
17105 strictly to the standard.  If your code looks like the following
17106 examples it will almost surely work with real-world compilers.
17108 Here is an example derived from the 7th Edition Unix implementation of
17109 @code{atoi} (1979-01-10):
17111 @example
17112 char *p;
17113 int f, n;
17114 @dots{}
17115 while (*p >= '0' && *p <= '9')
17116   n = n * 10 + *p++ - '0';
17117 return (f ? -n : n);
17118 @end example
17120 @noindent
17121 Even if the input string is in range, on most modern machines this has
17122 signed overflow when computing the most negative integer (the @code{-n}
17123 overflows) or a value near an extreme integer (the first @code{+}
17124 overflows).
17126 Here is another example, derived from the 7th Edition implementation of
17127 @code{rand} (1979-01-10).  Here the programmer expects both
17128 multiplication and addition to wrap on overflow:
17130 @example
17131 static long int randx = 1;
17132 @dots{}
17133 randx = randx * 1103515245 + 12345;
17134 return (randx >> 16) & 077777;
17135 @end example
17137 In the following example, derived from the @acronym{GNU} C Library 2.5
17138 implementation of @code{mktime} (2006-09-09), the code assumes
17139 wraparound arithmetic in @code{+} to detect signed overflow:
17141 @example
17142 time_t t, t1, t2;
17143 int sec_requested, sec_adjustment;
17144 @dots{}
17145 t1 = t + sec_requested;
17146 t2 = t1 + sec_adjustment;
17147 if (((t1 < t) != (sec_requested < 0))
17148     | ((t2 < t1) != (sec_adjustment < 0)))
17149   return -1;
17150 @end example
17152 If your code looks like these examples, it is probably safe even though
17153 it does not strictly conform to the C standard.  This might lead one to
17154 believe that one can generally assume wraparound on overflow, but that
17155 is not always true, as can be seen in the next section.
17157 @node Optimization and Wraparound
17158 @subsection Optimizations That Break Wraparound Arithmetic
17159 @cindex loop induction
17161 Compilers sometimes generate code that is incompatible with wraparound
17162 integer arithmetic.  A simple example is an algebraic simplification: a
17163 compiler might translate @code{(i * 2000) / 1000} to @code{i * 2}
17164 because it assumes that @code{i * 2000} does not overflow.  The
17165 translation is not equivalent to the original when overflow occurs:
17166 e.g., in the typical case of 32-bit signed two's complement wraparound
17167 @code{int}, if @code{i} has type @code{int} and value @code{1073742},
17168 the original expression returns @minus{}2147483 but the optimized
17169 version returns the mathematically correct value 2147484.
17171 More subtly, loop induction optimizations often exploit the undefined
17172 behavior of signed overflow.  Consider the following contrived function
17173 @code{sumc}:
17175 @example
17177 sumc (int lo, int hi)
17179   int sum = 0;
17180   int i;
17181   for (i = lo; i <= hi; i++)
17182     sum ^= i * 53;
17183   return sum;
17185 @end example
17187 @noindent
17188 To avoid multiplying by 53 each time through the loop, an optimizing
17189 compiler might internally transform @code{sumc} to the equivalent of the
17190 following:
17192 @example
17194 transformed_sumc (int lo, int hi)
17196   int sum = 0;
17197   int hic = hi * 53;
17198   int ic;
17199   for (ic = lo * 53; ic <= hic; ic += 53)
17200     sum ^= ic;
17201   return sum;
17203 @end example
17205 @noindent
17206 This transformation is allowed by the C standard, but it is invalid for
17207 wraparound arithmetic when @code{INT_MAX / 53 < hi}, because then the
17208 overflow in computing expressions like @code{hi * 53} can cause the
17209 expression @code{i <= hi} to yield a different value from the
17210 transformed expression @code{ic <= hic}.
17212 For this reason, compilers that use loop induction and similar
17213 techniques often do not support reliable wraparound arithmetic when a
17214 loop induction variable like @code{ic} is involved.  Since loop
17215 induction variables are generated by the compiler, and are not visible
17216 in the source code, it is not always trivial to say whether the problem
17217 affects your code.
17219 Hardly any code actually depends on wraparound arithmetic in cases like
17220 these, so in practice these loop induction optimizations are almost
17221 always useful.  However, edge cases in this area can cause problems.
17222 For example:
17224 @example
17225 int j;
17226 for (j = 1; 0 < j; j *= 2)
17227   test (j);
17228 @end example
17230 @noindent
17231 Here, the loop attempts to iterate through all powers of 2 that
17232 @code{int} can represent, but the C standard allows a compiler to
17233 optimize away the comparison and generate an infinite loop,
17234 under the argument that behavior is undefined on overflow.  As of this
17235 writing this optimization is not done by any production version of
17236 @acronym{GCC} with @option{-O2}, but it might be performed by other
17237 compilers, or by more aggressive @acronym{GCC} optimization options,
17238 and the @acronym{GCC} developers have not decided whether it will
17239 continue to work with @acronym{GCC} and @option{-O2}.
17241 @node Signed Overflow Advice
17242 @subsection Practical Advice for Signed Overflow Issues
17243 @cindex integer overflow
17244 @cindex overflow, signed integer
17245 @cindex signed integer overflow
17246 @cindex wraparound arithmetic
17248 Ideally the safest approach is to avoid signed integer overflow
17249 entirely.  For example, instead of multiplying two signed integers, you
17250 can convert them to unsigned integers, multiply the unsigned values,
17251 then test whether the result is in signed range.
17253 Rewriting code in this way will be inconvenient, though, particularly if
17254 the signed values might be negative.  Also, it may hurt
17255 performance.  Using unsigned arithmetic to check for overflow is
17256 particularly painful to do portably and efficiently when dealing with an
17257 integer type like @code{uid_t} whose width and signedness vary from
17258 platform to platform.
17260 Furthermore, many C applications pervasively assume wraparound behavior
17261 and typically it is not easy to find and remove all these assumptions.
17262 Hence it is often useful to maintain nonstandard code that assumes
17263 wraparound on overflow, instead of rewriting the code.  The rest of this
17264 section attempts to give practical advice for this situation.
17266 If your code wants to detect signed integer overflow in @code{sum = a +
17267 b}, it is generally safe to use an expression like @code{(sum < a) != (b
17268 < 0)}.
17270 If your code uses a signed loop index, make sure that the index cannot
17271 overflow, along with all signed expressions derived from the index.
17272 Here is a contrived example of problematic code with two instances of
17273 overflow.
17275 @example
17276 for (i = INT_MAX - 10; i <= INT_MAX; i++)
17277   if (i + 1 < 0)
17278     @{
17279       report_overflow ();
17280       break;
17281     @}
17282 @end example
17284 @noindent
17285 Because of the two overflows, a compiler might optimize away or
17286 transform the two comparisons in a way that is incompatible with the
17287 wraparound assumption.
17289 If your code uses an expression like @code{(i * 2000) / 1000} and you
17290 actually want the multiplication to wrap around on overflow, use
17291 unsigned arithmetic
17292 to do it, e.g., @code{((int) (i * 2000u)) / 1000}.
17294 If your code assumes wraparound behavior and you want to insulate it
17295 against any @acronym{GCC} optimizations that would fail to support that
17296 behavior, you should use @acronym{GCC}'s @option{-fwrapv} option, which
17297 causes signed overflow to wrap around reliably (except for division and
17298 remainder, as discussed in the next section).
17300 If you need to port to platforms where signed integer overflow does not
17301 reliably wrap around (e.g., due to hardware overflow checking, or to
17302 highly aggressive optimizations), you should consider debugging with
17303 @acronym{GCC}'s @option{-ftrapv} option, which causes signed overflow to
17304 raise an exception.
17306 @node Signed Integer Division
17307 @subsection Signed Integer Division and Integer Overflow
17308 @cindex division, integer
17310 Overflow in signed
17311 integer division is not always harmless: for example, on CPUs of the
17312 i386 family, dividing @code{INT_MIN} by @code{-1} yields a SIGFPE signal
17313 which by default terminates the program.  Worse, taking the remainder
17314 of these two values typically yields the same signal on these CPUs,
17315 even though the C standard requires @code{INT_MIN % -1} to yield zero
17316 because the expression does not overflow.
17318 @node Preprocessor Arithmetic
17319 @section Preprocessor Arithmetic
17320 @cindex preprocessor arithmetic
17322 In C99, preprocessor arithmetic, used for @code{#if} expressions, must
17323 be evaluated as if all signed values are of type @code{intmax_t} and all
17324 unsigned values of type @code{uintmax_t}.  Many compilers are buggy in
17325 this area, though.  For example, as of 2007, Sun C mishandles @code{#if
17326 LLONG_MIN < 0} on a platform with 32-bit @code{long int} and 64-bit
17327 @code{long long int}.  Also, some older preprocessors mishandle
17328 constants ending in @code{LL}.  To work around these problems, you can
17329 compute the value of expressions like @code{LONG_MAX < LLONG_MAX} at
17330 @code{configure}-time rather than at @code{#if}-time.
17332 @node Null Pointers
17333 @section Properties of Null Pointers
17334 @cindex null pointers
17336 Most modern hosts reliably fail when you attempt to dereference a null
17337 pointer.
17339 On almost all modern hosts, null pointers use an all-bits-zero internal
17340 representation, so you can reliably use @code{memset} with 0 to set all
17341 the pointers in an array to null values.
17343 If @code{p} is a null pointer to an object type, the C expression
17344 @code{p + 0} always evaluates to @code{p} on modern hosts, even though
17345 the standard says that it has undefined behavior.
17347 @node Buffer Overruns
17348 @section Buffer Overruns and Subscript Errors
17349 @cindex buffer overruns
17351 Buffer overruns and subscript errors are the most common dangerous
17352 errors in C programs.  They result in undefined behavior because storing
17353 outside an array typically modifies storage that is used by some other
17354 object, and most modern systems lack runtime checks to catch these
17355 errors.  Programs should not rely on buffer overruns being caught.
17357 There is one exception to the usual rule that a portable program cannot
17358 address outside an array.  In C, it is valid to compute the address just
17359 past an object, e.g., @code{&a[N]} where @code{a} has @code{N} elements,
17360 so long as you do not dereference the resulting pointer.  But it is not
17361 valid to compute the address just before an object, e.g., @code{&a[-1]};
17362 nor is it valid to compute two past the end, e.g., @code{&a[N+1]}.  On
17363 most platforms @code{&a[-1] < &a[0] && &a[N] < &a[N+1]}, but this is not
17364 reliable in general, and it is usually easy enough to avoid the
17365 potential portability problem, e.g., by allocating an extra unused array
17366 element at the start or end.
17368 @uref{http://valgrind.org/, Valgrind} can catch many overruns.
17369 @acronym{GCC}
17370 users might also consider using the @option{-fmudflap} option to catch
17371 overruns.
17373 Buffer overruns are usually caused by off-by-one errors, but there are
17374 more subtle ways to get them.
17376 Using @code{int} values to index into an array or compute array sizes
17377 causes problems on typical 64-bit hosts where an array index might
17378 be @math{2^31} or larger.  Index values of type @code{size_t} avoid this
17379 problem, but cannot be negative.  Index values of type @code{ptrdiff_t}
17380 are signed, and are wide enough in practice.
17382 If you add or multiply two numbers to calculate an array size, e.g.,
17383 @code{malloc (x * sizeof y + z)}, havoc ensues if the addition or
17384 multiplication overflows.
17386 Many implementations of the @code{alloca} function silently misbehave
17387 and can generate buffer overflows if given sizes that are too large.
17388 The size limits are implementation dependent, but are at least 4000
17389 bytes on all platforms that we know about.
17391 The standard functions @code{asctime}, @code{asctime_r}, @code{ctime},
17392 @code{ctime_r}, and @code{gets} are prone to buffer overflows, and
17393 portable code should not use them unless the inputs are known to be
17394 within certain limits.  The time-related functions can overflow their
17395 buffers if given timestamps out of range (e.g., a year less than -999
17396 or greater than 9999).  Time-related buffer overflows cannot happen with
17397 recent-enough versions of the @acronym{GNU} C library, but are possible
17398 with other
17399 implementations.  The @code{gets} function is the worst, since it almost
17400 invariably overflows its buffer when presented with an input line larger
17401 than the buffer.
17403 @node Volatile Objects
17404 @section Volatile Objects
17405 @cindex volatile objects
17407 The keyword @code{volatile} is often misunderstood in portable code.
17408 Its use inhibits some memory-access optimizations, but programmers often
17409 wish that it had a different meaning than it actually does.
17411 @code{volatile} was designed for code that accesses special objects like
17412 memory-mapped device registers whose contents spontaneously change.
17413 Such code is inherently low-level, and it is difficult to specify
17414 portably what @code{volatile} means in these cases.  The C standard
17415 says, ``What constitutes an access to an object that has
17416 volatile-qualified type is implementation-defined,'' so in theory each
17417 implementation is supposed to fill in the gap by documenting what
17418 @code{volatile} means for that implementation.  In practice, though,
17419 this documentation is usually absent or incomplete.
17421 One area of confusion is the distinction between objects defined with
17422 volatile types, and volatile lvalues.  From the C standard's point of
17423 view, an object defined with a volatile type has externally visible
17424 behavior.  You can think of such objects as having little oscilloscope
17425 probes attached to them, so that the user can observe some properties of
17426 accesses to them, just as the user can observe data written to output
17427 files.  However, the standard does not make it clear whether users can
17428 observe accesses by volatile lvalues to ordinary objects.  For example:
17430 @example
17431 /* Declare and access a volatile object.
17432    Accesses to X are "visible" to users.  */
17433 static int volatile x;
17434 x = 1;
17436 /* Access two ordinary objects via a volatile lvalue.
17437    It's not clear whether accesses to *P are "visible".  */
17438 int y;
17439 int *z = malloc (sizeof (int));
17440 int volatile *p;
17441 p = &y;
17442 *p = 1;
17443 p = z;
17444 *p = 1;
17445 @end example
17447 Programmers often wish that @code{volatile} meant ``Perform the memory
17448 access here and now, without merging several memory accesses, without
17449 changing the memory word size, and without reordering.''  But the C
17450 standard does not require this.  For objects defined with a volatile
17451 type, accesses must be done before the next sequence point; but
17452 otherwise merging, reordering, and word-size change is allowed.  Worse,
17453 it is not clear from the standard whether volatile lvalues provide more
17454 guarantees in general than nonvolatile lvalues, if the underlying
17455 objects are ordinary.
17457 Even when accessing objects defined with a volatile type,
17458 the C standard allows only
17459 extremely limited signal handlers: the behavior is undefined if a signal
17460 handler reads any nonlocal object, or writes to any nonlocal object
17461 whose type is not @code{sig_atomic_t volatile}, or calls any standard
17462 library function other than @code{abort}, @code{signal}, and (if C99)
17463 @code{_Exit}.  Hence C compilers need not worry about a signal handler
17464 disturbing ordinary computation, unless the computation accesses a
17465 @code{sig_atomic_t volatile} lvalue that is not a local variable.
17466 (There is an obscure exception for accesses via a pointer to a volatile
17467 character, since it may point into part of a @code{sig_atomic_t
17468 volatile} object.)  Posix
17469 adds to the list of library functions callable from a portable signal
17470 handler, but otherwise is like the C standard in this area.
17472 Some C implementations allow memory-access optimizations within each
17473 translation unit, such that actual behavior agrees with the behavior
17474 required by the standard only when calling a function in some other
17475 translation unit, and a signal handler acts like it was called from a
17476 different translation unit.  The C standard hints that in these
17477 implementations, objects referred to by signal handlers ``would require
17478 explicit specification of @code{volatile} storage, as well as other
17479 implementation-defined restrictions.''  But unfortunately even for this
17480 special case these other restrictions are often not documented well.
17481 @xref{Volatiles, , When is a Volatile Object Accessed?, gcc, Using the
17482 @acronym{GNU} Compiler Collection (@acronym{GCC})}, for some
17483 restrictions imposed by @acronym{GCC}.  @xref{Defining Handlers, ,
17484 Defining Signal Handlers, libc, The @acronym{GNU} C Library}, for some
17485 restrictions imposed by the @acronym{GNU} C library.  Restrictions
17486 differ on other platforms.
17488 If possible, it is best to use a signal handler that fits within the
17489 limits imposed by the C and Posix standards.
17491 If this is not practical, you can try the following rules of thumb.  A
17492 signal handler should access only volatile lvalues, preferably lvalues
17493 that refer to objects defined with a volatile type, and should not
17494 assume that the accessed objects have an internally consistent state
17495 if they are larger than a machine word.  Furthermore, installers
17496 should employ compilers and compiler options that are commonly used
17497 for building operating system kernels, because kernels often need more
17498 from @code{volatile} than the C Standard requires, and installers who
17499 compile an application in a similar environment can sometimes benefit
17500 from the extra constraints imposed by kernels on compilers.
17501 Admittedly we are handwaving somewhat here, as there are few
17502 guarantees in this area; the rules of thumb may help to fix some bugs
17503 but there is a good chance that they will not fix them all.
17505 For @code{volatile}, C++ has the same problems that C does.
17506 Multithreaded applications have even more problems with @code{volatile},
17507 but they are beyond the scope of this section.
17509 The bottom line is that using @code{volatile} typically hurts
17510 performance but should not hurt correctness.  In some cases its use
17511 does help correctness, but these cases are often so poorly understood
17512 that all too often adding @code{volatile} to a data structure merely
17513 alleviates some symptoms of a bug while not fixing the bug in general.
17515 @node Floating Point Portability
17516 @section Floating Point Portability
17517 @cindex floating point
17519 Almost all modern systems use IEEE-754 floating point, and it is safe to
17520 assume IEEE-754 in most portable code these days.  For more information,
17521 please see David Goldberg's classic paper
17522 @uref{http://www.validlab.com/goldberg/paper.pdf, What Every Computer
17523 Scientist Should Know About Floating-Point Arithmetic}.
17525 @node Exiting Portably
17526 @section Exiting Portably
17527 @cindex exiting portably
17529 A C or C++ program can exit with status @var{N} by returning
17530 @var{N} from the @code{main} function.  Portable programs are supposed
17531 to exit either with status 0 or @code{EXIT_SUCCESS} to succeed, or with
17532 status @code{EXIT_FAILURE} to fail, but in practice it is portable to
17533 fail by exiting with status 1, and test programs that assume Posix can
17534 fail by exiting with status values from 1 through 255.  Programs on
17535 SunOS 2.0 (1985) through 3.5.2 (1988) incorrectly exited with zero
17536 status when @code{main} returned nonzero, but ancient systems like these
17537 are no longer of practical concern.
17539 A program can also exit with status @var{N} by passing @var{N} to the
17540 @code{exit} function, and a program can fail by calling the @code{abort}
17541 function.  If a program is specialized to just some platforms, it can fail
17542 by calling functions specific to those platforms, e.g., @code{_exit}
17543 (Posix) and @code{_Exit} (C99).  However, like other functions, an exit
17544 function should be declared, typically by including a header.  For
17545 example, if a C program calls @code{exit}, it should include @file{stdlib.h}
17546 either directly or via the default includes (@pxref{Default Includes}).
17548 A program can fail due to undefined behavior such as dereferencing a null
17549 pointer, but this is not recommended as undefined behavior allows an
17550 implementation to do whatever it pleases and this includes exiting
17551 successfully.
17554 @c ================================================== Manual Configuration
17556 @node Manual Configuration
17557 @chapter Manual Configuration
17559 A few kinds of features can't be guessed automatically by running test
17560 programs.  For example, the details of the object-file format, or
17561 special options that need to be passed to the compiler or linker.  You
17562 can check for such features using ad-hoc means, such as having
17563 @command{configure} check the output of the @code{uname} program, or
17564 looking for libraries that are unique to particular systems.  However,
17565 Autoconf provides a uniform method for handling unguessable features.
17567 @menu
17568 * Specifying Names::            Specifying the system type
17569 * Canonicalizing::              Getting the canonical system type
17570 * Using System Type::           What to do with the system type
17571 @end menu
17573 @node Specifying Names
17574 @section Specifying the System Type
17575 @cindex System type
17577 Autoconf-generated
17578 @command{configure} scripts can make decisions based on a canonical name
17579 for the system type, which has the form:
17580 @samp{@var{cpu}-@var{vendor}-@var{os}}, where @var{os} can be
17581 @samp{@var{system}} or @samp{@var{kernel}-@var{system}}
17583 @command{configure} can usually guess the canonical name for the type of
17584 system it's running on.  To do so it runs a script called
17585 @command{config.guess}, which infers the name using the @code{uname}
17586 command or symbols predefined by the C preprocessor.
17588 Alternately, the user can specify the system type with command line
17589 arguments to @command{configure}.  Doing so is necessary when
17590 cross-compiling.  In the most complex case of cross-compiling, three
17591 system types are involved.  The options to specify them are:
17593 @table @option
17594 @item --build=@var{build-type}
17595 the type of system on which the package is being configured and
17596 compiled.  It defaults to the result of running @command{config.guess}.
17598 @item --host=@var{host-type}
17599 the type of system on which the package runs.  By default it is the
17600 same as the build machine.  Specifying it enables the cross-compilation
17601 mode.
17603 @item --target=@var{target-type}
17604 the type of system for which any compiler tools in the package
17605 produce code (rarely needed).  By default, it is the same as host.
17606 @end table
17608 If you mean to override the result of @command{config.guess}, use
17609 @option{--build}, not @option{--host}, since the latter enables
17610 cross-compilation.  For historical reasons,
17611 whenever you specify @option{--host},
17612 be sure to specify @option{--build} too; this will be fixed in the
17613 future.  So, to enter cross-compilation mode, use a command like this
17615 @example
17616 ./configure --build=i686-pc-linux-gnu --host=m68k-coff
17617 @end example
17619 @noindent
17620 Note that if you do not specify @option{--host}, @command{configure}
17621 fails if it can't run the code generated by the specified compiler.  For
17622 example, configuring as follows fails:
17624 @example
17625 ./configure CC=m68k-coff-gcc
17626 @end example
17628 In the future, when cross-compiling Autoconf will @emph{not}
17629 accept tools (compilers, linkers, assemblers) whose name is not
17630 prefixed with the host type.  The only case when this may be
17631 useful is when you really are not cross-compiling, but only
17632 building for a least-common-denominator architecture: an example
17633 is building for @code{i386-pc-linux-gnu} while running on an
17634 @code{i686-pc-linux-gnu} architecture.  In this case, some particular
17635 pairs might be similar enough to let you get away with the system
17636 compilers, but in general the compiler might make bogus assumptions
17637 on the host: if you know what you are doing, please create symbolic
17638 links from the host compiler to the build compiler.
17640 @cindex @command{config.sub}
17641 @command{configure} recognizes short aliases for many system types; for
17642 example, @samp{decstation} can be used instead of
17643 @samp{mips-dec-ultrix4.2}.  @command{configure} runs a script called
17644 @command{config.sub} to canonicalize system type aliases.
17646 This section deliberately omits the description of the obsolete
17647 interface; see @ref{Hosts and Cross-Compilation}.
17650 @node Canonicalizing
17651 @section Getting the Canonical System Type
17652 @cindex System type
17653 @cindex Canonical system type
17655 The following macros make the system type available to @command{configure}
17656 scripts.
17658 @ovindex build_alias
17659 @ovindex host_alias
17660 @ovindex target_alias
17662 The variables @samp{build_alias}, @samp{host_alias}, and
17663 @samp{target_alias} are always exactly the arguments of @option{--build},
17664 @option{--host}, and @option{--target}; in particular, they are left empty
17665 if the user did not use them, even if the corresponding
17666 @code{AC_CANONICAL} macro was run.  Any configure script may use these
17667 variables anywhere.  These are the variables that should be used when in
17668 interaction with the user.
17670 If you need to recognize some special environments based on their system
17671 type, run the following macros to get canonical system names.  These
17672 variables are not set before the macro call.
17674 If you use these macros, you must distribute @command{config.guess} and
17675 @command{config.sub} along with your source code.  @xref{Output}, for
17676 information about the @code{AC_CONFIG_AUX_DIR} macro which you can use
17677 to control in which directory @command{configure} looks for those scripts.
17680 @defmac AC_CANONICAL_BUILD
17681 @acindex{CANONICAL_BUILD}
17682 @ovindex build
17683 @ovindex build_cpu
17684 @ovindex build_vendor
17685 @ovindex build_os
17686 Compute the canonical build-system type variable, @code{build}, and its
17687 three individual parts @code{build_cpu}, @code{build_vendor}, and
17688 @code{build_os}.
17690 If @option{--build} was specified, then @code{build} is the
17691 canonicalization of @code{build_alias} by @command{config.sub},
17692 otherwise it is determined by the shell script @command{config.guess}.
17693 @end defmac
17695 @defmac AC_CANONICAL_HOST
17696 @acindex{CANONICAL_HOST}
17697 @ovindex host
17698 @ovindex host_cpu
17699 @ovindex host_vendor
17700 @ovindex host_os
17701 Compute the canonical host-system type variable, @code{host}, and its
17702 three individual parts @code{host_cpu}, @code{host_vendor}, and
17703 @code{host_os}.
17705 If @option{--host} was specified, then @code{host} is the
17706 canonicalization of @code{host_alias} by @command{config.sub},
17707 otherwise it defaults to @code{build}.
17708 @end defmac
17710 @defmac AC_CANONICAL_TARGET
17711 @acindex{CANONICAL_TARGET}
17712 @ovindex target
17713 @ovindex target_cpu
17714 @ovindex target_vendor
17715 @ovindex target_os
17716 Compute the canonical target-system type variable, @code{target}, and its
17717 three individual parts @code{target_cpu}, @code{target_vendor}, and
17718 @code{target_os}.
17720 If @option{--target} was specified, then @code{target} is the
17721 canonicalization of @code{target_alias} by @command{config.sub},
17722 otherwise it defaults to @code{host}.
17723 @end defmac
17725 Note that there can be artifacts due to the backward compatibility
17726 code.  See @xref{Hosts and Cross-Compilation}, for more.
17728 @node Using System Type
17729 @section Using the System Type
17731 In @file{configure.ac} the system type is generally used by one or more
17732 @code{case} statements to select system-specifics.  Shell wildcards can
17733 be used to match a group of system types.
17735 For example, an extra assembler code object file could be chosen, giving
17736 access to a CPU cycle counter register.  @code{$(CYCLE_OBJ)} in the
17737 following would be used in a makefile to add the object to a
17738 program or library.
17740 @example
17741 case $host in
17742   alpha*-*-*) CYCLE_OBJ=rpcc.o ;;
17743   i?86-*-*)   CYCLE_OBJ=rdtsc.o ;;
17744   *)          CYCLE_OBJ= ;;
17745 esac
17746 AC_SUBST([CYCLE_OBJ])
17747 @end example
17749 @code{AC_CONFIG_LINKS} (@pxref{Configuration Links}) is another good way
17750 to select variant source files, for example optimized code for some
17751 CPUs.  The configured CPU type doesn't always indicate exact CPU types,
17752 so some runtime capability checks may be necessary too.
17754 @example
17755 case $host in
17756   alpha*-*-*)   AC_CONFIG_LINKS([dither.c:alpha/dither.c]) ;;
17757   powerpc*-*-*) AC_CONFIG_LINKS([dither.c:powerpc/dither.c]) ;;
17758   *-*-*)        AC_CONFIG_LINKS([dither.c:generic/dither.c]) ;;
17759 esac
17760 @end example
17762 The host system type can also be used to find cross-compilation tools
17763 with @code{AC_CHECK_TOOL} (@pxref{Generic Programs}).
17765 The above examples all show @samp{$host}, since this is where the code
17766 is going to run.  Only rarely is it necessary to test @samp{$build}
17767 (which is where the build is being done).
17769 Whenever you're tempted to use @samp{$host} it's worth considering
17770 whether some sort of probe would be better.  New system types come along
17771 periodically or previously missing features are added.  Well-written
17772 probes can adapt themselves to such things, but hard-coded lists of
17773 names can't.  Here are some guidelines,
17775 @itemize @bullet
17776 @item
17777 Availability of libraries and library functions should always be checked
17778 by probing.
17779 @item
17780 Variant behavior of system calls is best identified with runtime tests
17781 if possible, but bug workarounds or obscure difficulties might have to
17782 be driven from @samp{$host}.
17783 @item
17784 Assembler code is inevitably highly CPU-specific and is best selected
17785 according to @samp{$host_cpu}.
17786 @item
17787 Assembler variations like underscore prefix on globals or ELF versus
17788 COFF type directives are however best determined by probing, perhaps
17789 even examining the compiler output.
17790 @end itemize
17792 @samp{$target} is for use by a package creating a compiler or similar.
17793 For ordinary packages it's meaningless and should not be used.  It
17794 indicates what the created compiler should generate code for, if it can
17795 cross-compile.  @samp{$target} generally selects various hard-coded CPU
17796 and system conventions, since usually the compiler or tools under
17797 construction themselves determine how the target works.
17800 @c ===================================================== Site Configuration.
17802 @node Site Configuration
17803 @chapter Site Configuration
17805 @command{configure} scripts support several kinds of local configuration
17806 decisions.  There are ways for users to specify where external software
17807 packages are, include or exclude optional features, install programs
17808 under modified names, and set default values for @command{configure}
17809 options.
17811 @menu
17812 * Help Formatting::             Customizing @samp{configure --help}
17813 * External Software::           Working with other optional software
17814 * Package Options::             Selecting optional features
17815 * Pretty Help Strings::         Formatting help string
17816 * Option Checking::             Controlling checking of @command{configure} options
17817 * Site Details::                Configuring site details
17818 * Transforming Names::          Changing program names when installing
17819 * Site Defaults::               Giving @command{configure} local defaults
17820 @end menu
17822 @node Help Formatting
17823 @section Controlling Help Output
17825 Users consult @samp{configure --help} to learn of configuration
17826 decisions specific to your package.  By default, @command{configure}
17827 breaks this output into sections for each type of option; within each
17828 section, help strings appear in the order @file{configure.ac} defines
17829 them:
17831 @example
17832 Optional Features:
17833   @dots{}
17834   --enable-bar            include bar
17836 Optional Packages:
17837   @dots{}
17838   --with-foo              use foo
17839 @end example
17841 @defmac AC_PRESERVE_HELP_ORDER
17842 @acindex{PRESERVE_HELP_ORDER}
17844 Request an alternate @option{--help} format, in which options of all
17845 types appear together, in the order defined.  Call this macro before any
17846 @code{AC_ARG_ENABLE} or @code{AC_ARG_WITH}.
17848 @example
17849 Optional Features and Packages:
17850   @dots{}
17851   --enable-bar            include bar
17852   --with-foo              use foo
17853 @end example
17855 @end defmac
17857 @node External Software
17858 @section Working With External Software
17859 @cindex External software
17861 Some packages require, or can optionally use, other software packages
17862 that are already installed.  The user can give @command{configure}
17863 command line options to specify which such external software to use.
17864 The options have one of these forms:
17866 @c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
17867 @c awful.
17868 @example
17869 --with-@var{package}[=@var{arg}]
17870 --without-@var{package}
17871 @end example
17873 For example, @option{--with-gnu-ld} means work with the @acronym{GNU} linker
17874 instead of some other linker.  @option{--with-x} means work with The X
17875 Window System.
17877 The user can give an argument by following the package name with
17878 @samp{=} and the argument.  Giving an argument of @samp{no} is for
17879 packages that are used by default; it says to @emph{not} use the
17880 package.  An argument that is neither @samp{yes} nor @samp{no} could
17881 include a name or number of a version of the other package, to specify
17882 more precisely which other package this program is supposed to work
17883 with.  If no argument is given, it defaults to @samp{yes}.
17884 @option{--without-@var{package}} is equivalent to
17885 @option{--with-@var{package}=no}.
17887 Normally @command{configure} scripts complain about
17888 @option{--with-@var{package}} options that they do not support.
17889 @xref{Option Checking}, for details, and for how to override the
17890 defaults.
17892 For each external software package that may be used, @file{configure.ac}
17893 should call @code{AC_ARG_WITH} to detect whether the @command{configure}
17894 user asked to use it.  Whether each package is used or not by default,
17895 and which arguments are valid, is up to you.
17897 @anchor{AC_ARG_WITH}
17898 @defmac AC_ARG_WITH (@var{package}, @var{help-string}, @
17899   @ovar{action-if-given}, @ovar{action-if-not-given})
17900 @acindex{ARG_WITH}
17901 If the user gave @command{configure} the option @option{--with-@var{package}}
17902 or @option{--without-@var{package}}, run shell commands
17903 @var{action-if-given}.  If neither option was given, run shell commands
17904 @var{action-if-not-given}.  The name @var{package} indicates another
17905 software package that this program should work with.  It should consist
17906 only of alphanumeric characters, dashes, and dots.
17908 The option's argument is available to the shell commands
17909 @var{action-if-given} in the shell variable @code{withval}, which is
17910 actually just the value of the shell variable named
17911 @code{with_@var{package}}, with any non-alphanumeric characters in
17912 @var{package} changed into @samp{_}.  You may use that variable instead,
17913 if you wish.
17915 The argument @var{help-string} is a description of the option that
17916 looks like this:
17917 @example
17918   --with-readline         support fancy command line editing
17919 @end example
17921 @noindent
17922 @var{help-string} may be more than one line long, if more detail is
17923 needed.  Just make sure the columns line up in @samp{configure
17924 --help}.  Avoid tabs in the help string.  You'll need to enclose the
17925 help string in @samp{[} and @samp{]} in order to produce the leading
17926 blanks.
17928 You should format your @var{help-string} with the macro
17929 @code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
17931 The following example shows how to use the @code{AC_ARG_WITH} macro in
17932 a common situation.  You want to let the user decide whether to enable
17933 support for an external library (e.g., the readline library); if the user
17934 specified neither @option{--with-readline} nor @option{--without-readline},
17935 you want to enable support for readline only if the library is available
17936 on the system.
17938 @c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
17939 @example
17940 AC_ARG_WITH([readline],
17941   [AS_HELP_STRING([--with-readline],
17942     [support fancy command line editing @@<:@@default=check@@:>@@])],
17943   [],
17944   [with_readline=check])
17946 LIBREADLINE=
17947 AS_IF([test "x$with_readline" != xno],
17948   [AC_CHECK_LIB([readline], [main],
17949     [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
17950      AC_DEFINE([HAVE_LIBREADLINE], [1],
17951                [Define if you have libreadline])
17952     ],
17953     [if test "x$with_readline" != xcheck; then
17954        AC_MSG_FAILURE(
17955          [--with-readline was given, but test for readline failed])
17956      fi
17957     ], -lncurses)])
17958 @end example
17960 The next example shows how to use @code{AC_ARG_WITH} to give the user the
17961 possibility to enable support for the readline library, in case it is still
17962 experimental and not well tested, and is therefore disabled by default.
17964 @c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
17965 @example
17966 AC_ARG_WITH([readline],
17967   [AS_HELP_STRING([--with-readline],
17968     [enable experimental support for readline])],
17969   [],
17970   [with_readline=no])
17972 LIBREADLINE=
17973 AS_IF([test "x$with_readline" != xno],
17974   [AC_CHECK_LIB([readline], [main],
17975     [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
17976      AC_DEFINE([HAVE_LIBREADLINE], [1],
17977                [Define if you have libreadline])
17978     ],
17979     [AC_MSG_FAILURE(
17980        [--with-readline was given, but test for readline failed])],
17981     [-lncurses])])
17982 @end example
17984 The last example shows how to use @code{AC_ARG_WITH} to give the user the
17985 possibility to disable support for the readline library, given that it is
17986 an important feature and that it should be enabled by default.
17988 @c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
17989 @example
17990 AC_ARG_WITH([readline],
17991   [AS_HELP_STRING([--without-readline],
17992     [disable support for readline])],
17993   [],
17994   [with_readline=yes])
17996 LIBREADLINE=
17997 AS_IF([test "x$with_readline" != xno],
17998   [AC_CHECK_LIB([readline], [main],
17999     [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
18000      AC_DEFINE([HAVE_LIBREADLINE], [1],
18001                [Define if you have libreadline])
18002     ],
18003     [AC_MSG_FAILURE(
18004        [readline test failed (--without-readline to disable)])],
18005     [-lncurses])])
18006 @end example
18008 These three examples can be easily adapted to the case where
18009 @code{AC_ARG_ENABLE} should be preferred to @code{AC_ARG_WITH} (see
18010 @ref{Package Options}).
18011 @end defmac
18013 @node Package Options
18014 @section Choosing Package Options
18015 @cindex Package options
18016 @cindex Options, package
18018 If a software package has optional compile-time features, the user can
18019 give @command{configure} command line options to specify whether to
18020 compile them.  The options have one of these forms:
18022 @c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
18023 @c awful.
18024 @example
18025 --enable-@var{feature}[=@var{arg}]
18026 --disable-@var{feature}
18027 @end example
18029 These options allow users to choose which optional features to build and
18030 install.  @option{--enable-@var{feature}} options should never make a
18031 feature behave differently or cause one feature to replace another.
18032 They should only cause parts of the program to be built rather than left
18033 out.
18035 The user can give an argument by following the feature name with
18036 @samp{=} and the argument.  Giving an argument of @samp{no} requests
18037 that the feature @emph{not} be made available.  A feature with an
18038 argument looks like @option{--enable-debug=stabs}.  If no argument is
18039 given, it defaults to @samp{yes}.  @option{--disable-@var{feature}} is
18040 equivalent to @option{--enable-@var{feature}=no}.
18042 Normally @command{configure} scripts complain about
18043 @option{--enable-@var{package}} options that they do not support.
18044 @xref{Option Checking}, for details, and for how to override the
18045 defaults.
18047 For each optional feature, @file{configure.ac} should call
18048 @code{AC_ARG_ENABLE} to detect whether the @command{configure} user asked
18049 to include it.  Whether each feature is included or not by default, and
18050 which arguments are valid, is up to you.
18052 @anchor{AC_ARG_ENABLE}
18053 @defmac AC_ARG_ENABLE (@var{feature}, @var{help-string}, @
18054   @ovar{action-if-given}, @ovar{action-if-not-given})
18055 @acindex{ARG_ENABLE}
18056 If the user gave @command{configure} the option
18057 @option{--enable-@var{feature}} or @option{--disable-@var{feature}}, run
18058 shell commands @var{action-if-given}.  If neither option was given, run
18059 shell commands @var{action-if-not-given}.  The name @var{feature}
18060 indicates an optional user-level facility.  It should consist only of
18061 alphanumeric characters, dashes, and dots.
18063 The option's argument is available to the shell commands
18064 @var{action-if-given} in the shell variable @code{enableval}, which is
18065 actually just the value of the shell variable named
18066 @code{enable_@var{feature}}, with any non-alphanumeric characters in
18067 @var{feature} changed into @samp{_}.  You may use that variable instead,
18068 if you wish.  The @var{help-string} argument is like that of
18069 @code{AC_ARG_WITH} (@pxref{External Software}).
18071 You should format your @var{help-string} with the macro
18072 @code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
18074 See the examples suggested with the definition of @code{AC_ARG_WITH}
18075 (@pxref{External Software}) to get an idea of possible applications of
18076 @code{AC_ARG_ENABLE}.
18077 @end defmac
18079 @node Pretty Help Strings
18080 @section Making Your Help Strings Look Pretty
18081 @cindex Help strings
18083 Properly formatting the @samp{help strings} which are used in
18084 @code{AC_ARG_WITH} (@pxref{External Software}) and @code{AC_ARG_ENABLE}
18085 (@pxref{Package Options}) can be challenging.  Specifically, you want
18086 your own @samp{help strings} to line up in the appropriate columns of
18087 @samp{configure --help} just like the standard Autoconf @samp{help
18088 strings} do.  This is the purpose of the @code{AS_HELP_STRING} macro.
18090 @anchor{AS_HELP_STRING}
18091 @defmac AS_HELP_STRING (@var{left-hand-side}, @var{right-hand-side} @
18092   @dvar{indent-column, 26}, @dvar{wrap-column, 79})
18093 @asindex{HELP_STRING}
18095 Expands into an help string that looks pretty when the user executes
18096 @samp{configure --help}.  It is typically used in @code{AC_ARG_WITH}
18097 (@pxref{External Software}) or @code{AC_ARG_ENABLE} (@pxref{Package
18098 Options}).  The following example makes this clearer.
18100 @example
18101 AC_ARG_WITH([foo],
18102   [AS_HELP_STRING([--with-foo],
18103      [use foo (default is no)])],
18104   [use_foo=$withval],
18105   [use_foo=no])
18106 @end example
18108 Then the last few lines of @samp{configure --help} appear like
18109 this:
18111 @example
18112 --enable and --with options recognized:
18113   --with-foo              use foo (default is no)
18114 @end example
18116 Macro expansion is performed on the first argument.  However, the second
18117 argument of @code{AS_HELP_STRING} is treated as a whitespace separated
18118 list of text to be reformatted, and is not subject to macro expansion.
18119 Since it is not expanded, it should not be double quoted.
18120 @xref{Autoconf Language}, for a more detailed explanation.
18122 The @code{AS_HELP_STRING} macro is particularly helpful when the
18123 @var{left-hand-side} and/or @var{right-hand-side} are composed of macro
18124 arguments, as shown in the following example.  Be aware that
18125 @var{left-hand-side} may not expand to unbalanced quotes,
18126 although quadrigraphs can be used.
18128 @example
18129 AC_DEFUN([MY_ARG_WITH],
18130   [AC_ARG_WITH(m4_translit([[$1]], [_], [-]),
18131      [AS_HELP_STRING([--with-m4_translit([$1], [_], [-])],
18132                      [use $1 (default is $2)])],
18133      [use_[]$1=$withval],
18134      [use_[]$1=$2])])
18135 MY_ARG_WITH([a_b], [no])
18136 @end example
18137 @noindent
18138 Here, the last few lines of @samp{configure --help} will include:
18140 @example
18141 --enable and --with options recognized:
18142   --with-a-b              use a_b (default is no)
18143 @end example
18145 The parameters @var{indent-column} and @var{wrap-column} were introduced
18146 in Autoconf 2.62.  Generally, they should not be specified; they exist
18147 for fine-tuning of the wrapping.
18148 @example
18149 AS_HELP_STRING([--option], [description of option])
18150 @result{}  --option                description of option
18151 AS_HELP_STRING([--option], [description of option], [15], [30])
18152 @result{}  --option     description of
18153 @result{}               option
18154 @end example
18155 @end defmac
18158 @node Option Checking
18159 @section Controlling Checking of @command{configure} Options
18160 @cindex Options, Package
18162 The @command{configure} script checks its command-line options against a
18163 list of known options, like @option{--help} or @option{--config-cache}.
18164 An unknown option ordinarily indicates a mistake by the user and
18165 @command{configure} halts with an error.  However, by default unknown
18166 @option{--with-@var{package}} and @option{--enable-@var{feature}}
18167 options elicit only a warning, to support configuring entire source
18168 trees.
18170 Source trees often contain multiple packages with a top-level
18171 @command{configure} script that uses the @code{AC_CONFIG_SUBDIRS} macro
18172 (@pxref{Subdirectories}).  Because the packages generally support
18173 different @option{--with-@var{package}} and
18174 @option{--enable-@var{feature}} options, the @acronym{GNU} Coding
18175 Standards say they must accept unrecognized options without halting.
18176 Even a warning message is undesirable here, so @code{AC_CONFIG_SUBDIRS}
18177 automatically disables the warnings.
18179 This default behavior may be modified in two ways.  First, the installer
18180 can invoke @command{configure --disable-option-checking} to disable
18181 these warnings, or invoke @command{configure --enable-option-checking=fatal}
18182 options to turn them into fatal errors, respectively.  Second, the
18183 maintainer can use @code{AC_DISABLE_OPTION_CHECKING}.
18185 @defmac AC_DISABLE_OPTION_CHECKING
18186 @acindex{DISABLE_OPTION_CHECKING}
18188 By default, disable warnings related to any unrecognized
18189 @option{--with-@var{package}} or @option{--enable-@var{feature}}
18190 options.  This is implied by @code{AC_CONFIG_SUBDIRS}.
18192 The installer can override this behavior by passing
18193 @option{--enable-option-checking} (enable warnings) or
18194 @option{--enable-option-checking=fatal} (enable errors) to
18195 @command{configure}.
18196 @end defmac
18199 @node Site Details
18200 @section Configuring Site Details
18201 @cindex Site details
18203 Some software packages require complex site-specific information.  Some
18204 examples are host names to use for certain services, company names, and
18205 email addresses to contact.  Since some configuration scripts generated
18206 by Metaconfig ask for such information interactively, people sometimes
18207 wonder how to get that information in Autoconf-generated configuration
18208 scripts, which aren't interactive.
18210 Such site configuration information should be put in a file that is
18211 edited @emph{only by users}, not by programs.  The location of the file
18212 can either be based on the @code{prefix} variable, or be a standard
18213 location such as the user's home directory.  It could even be specified
18214 by an environment variable.  The programs should examine that file at
18215 runtime, rather than at compile time.  Runtime configuration is more
18216 convenient for users and makes the configuration process simpler than
18217 getting the information while configuring.  @xref{Directory Variables, ,
18218 Variables for Installation Directories, standards, @acronym{GNU} Coding
18219 Standards}, for more information on where to put data files.
18221 @node Transforming Names
18222 @section Transforming Program Names When Installing
18223 @cindex Transforming program names
18224 @cindex Program names, transforming
18226 Autoconf supports changing the names of programs when installing them.
18227 In order to use these transformations, @file{configure.ac} must call the
18228 macro @code{AC_ARG_PROGRAM}.
18230 @defmac AC_ARG_PROGRAM
18231 @acindex{ARG_PROGRAM}
18232 @ovindex program_transform_name
18233 Place in output variable @code{program_transform_name} a sequence of
18234 @code{sed} commands for changing the names of installed programs.
18236 If any of the options described below are given to @command{configure},
18237 program names are transformed accordingly.  Otherwise, if
18238 @code{AC_CANONICAL_TARGET} has been called and a @option{--target} value
18239 is given, the target type followed by a dash is used as a prefix.
18240 Otherwise, no program name transformation is done.
18241 @end defmac
18243 @menu
18244 * Transformation Options::      @command{configure} options to transform names
18245 * Transformation Examples::     Sample uses of transforming names
18246 * Transformation Rules::        Makefile uses of transforming names
18247 @end menu
18249 @node Transformation Options
18250 @subsection Transformation Options
18252 You can specify name transformations by giving @command{configure} these
18253 command line options:
18255 @table @option
18256 @item --program-prefix=@var{prefix}
18257 prepend @var{prefix} to the names;
18259 @item --program-suffix=@var{suffix}
18260 append @var{suffix} to the names;
18262 @item --program-transform-name=@var{expression}
18263 perform @code{sed} substitution @var{expression} on the names.
18264 @end table
18266 @node Transformation Examples
18267 @subsection Transformation Examples
18269 These transformations are useful with programs that can be part of a
18270 cross-compilation development environment.  For example, a
18271 cross-assembler running on a Sun 4 configured with
18272 @option{--target=i960-vxworks} is normally installed as
18273 @file{i960-vxworks-as}, rather than @file{as}, which could be confused
18274 with a native Sun 4 assembler.
18276 You can force a program name to begin with @file{g}, if you don't want
18277 @acronym{GNU} programs installed on your system to shadow other programs with
18278 the same name.  For example, if you configure @acronym{GNU} @code{diff} with
18279 @option{--program-prefix=g}, then when you run @samp{make install} it is
18280 installed as @file{/usr/local/bin/gdiff}.
18282 As a more sophisticated example, you could use
18284 @example
18285 --program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
18286 @end example
18287 @noindent
18289 to prepend @samp{g} to most of the program names in a source tree,
18290 excepting those like @code{gdb} that already have one and those like
18291 @code{less} and @code{lesskey} that aren't @acronym{GNU} programs.  (That is
18292 assuming that you have a source tree containing those programs that is
18293 set up to use this feature.)
18295 One way to install multiple versions of some programs simultaneously is
18296 to append a version number to the name of one or both.  For example, if
18297 you want to keep Autoconf version 1 around for awhile, you can configure
18298 Autoconf version 2 using @option{--program-suffix=2} to install the
18299 programs as @file{/usr/local/bin/autoconf2},
18300 @file{/usr/local/bin/autoheader2}, etc.  Nevertheless, pay attention
18301 that only the binaries are renamed, therefore you'd have problems with
18302 the library files which might overlap.
18304 @node Transformation Rules
18305 @subsection Transformation Rules
18307 Here is how to use the variable @code{program_transform_name} in a
18308 @file{Makefile.in}:
18310 @example
18311 PROGRAMS = cp ls rm
18312 transform = @@program_transform_name@@
18313 install:
18314         for p in $(PROGRAMS); do \
18315           $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | \
18316                                               sed '$(transform)'`; \
18317         done
18319 uninstall:
18320         for p in $(PROGRAMS); do \
18321           rm -f $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; \
18322         done
18323 @end example
18325 It is guaranteed that @code{program_transform_name} is never empty, and
18326 that there are no useless separators.  Therefore you may safely embed
18327 @code{program_transform_name} within a sed program using @samp{;}:
18329 @example
18330 transform = @@program_transform_name@@
18331 transform_exe = s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/
18332 @end example
18334 Whether to do the transformations on documentation files (Texinfo or
18335 @code{man}) is a tricky question; there seems to be no perfect answer,
18336 due to the several reasons for name transforming.  Documentation is not
18337 usually particular to a specific architecture, and Texinfo files do not
18338 conflict with system documentation.  But they might conflict with
18339 earlier versions of the same files, and @code{man} pages sometimes do
18340 conflict with system documentation.  As a compromise, it is probably
18341 best to do name transformations on @code{man} pages but not on Texinfo
18342 manuals.
18344 @node Site Defaults
18345 @section Setting Site Defaults
18346 @cindex Site defaults
18348 Autoconf-generated @command{configure} scripts allow your site to provide
18349 default values for some configuration values.  You do this by creating
18350 site- and system-wide initialization files.
18352 @evindex CONFIG_SITE
18353 If the environment variable @code{CONFIG_SITE} is set, @command{configure}
18354 uses its value as the name of a shell script to read.  Otherwise, it
18355 reads the shell script @file{@var{prefix}/share/config.site} if it exists,
18356 then @file{@var{prefix}/etc/config.site} if it exists.  Thus,
18357 settings in machine-specific files override those in machine-independent
18358 ones in case of conflict.
18360 Site files can be arbitrary shell scripts, but only certain kinds of
18361 code are really appropriate to be in them.  Because @command{configure}
18362 reads any cache file after it has read any site files, a site file can
18363 define a default cache file to be shared between all Autoconf-generated
18364 @command{configure} scripts run on that system (@pxref{Cache Files}).  If
18365 you set a default cache file in a site file, it is a good idea to also
18366 set the output variable @code{CC} in that site file, because the cache
18367 file is only valid for a particular compiler, but many systems have
18368 several available.
18370 You can examine or override the value set by a command line option to
18371 @command{configure} in a site file; options set shell variables that have
18372 the same names as the options, with any dashes turned into underscores.
18373 The exceptions are that @option{--without-} and @option{--disable-} options
18374 are like giving the corresponding @option{--with-} or @option{--enable-}
18375 option and the value @samp{no}.  Thus, @option{--cache-file=localcache}
18376 sets the variable @code{cache_file} to the value @samp{localcache};
18377 @option{--enable-warnings=no} or @option{--disable-warnings} sets the variable
18378 @code{enable_warnings} to the value @samp{no}; @option{--prefix=/usr} sets the
18379 variable @code{prefix} to the value @samp{/usr}; etc.
18381 Site files are also good places to set default values for other output
18382 variables, such as @code{CFLAGS}, if you need to give them non-default
18383 values: anything you would normally do, repetitively, on the command
18384 line.  If you use non-default values for @var{prefix} or
18385 @var{exec_prefix} (wherever you locate the site file), you can set them
18386 in the site file if you specify it with the @code{CONFIG_SITE}
18387 environment variable.
18389 You can set some cache values in the site file itself.  Doing this is
18390 useful if you are cross-compiling, where it is impossible to check features
18391 that require running a test program.  You could ``prime the cache'' by
18392 setting those values correctly for that system in
18393 @file{@var{prefix}/etc/config.site}.  To find out the names of the cache
18394 variables you need to set, look for shell variables with @samp{_cv_} in
18395 their names in the affected @command{configure} scripts, or in the Autoconf
18396 M4 source code for those macros.
18398 The cache file is careful to not override any variables set in the site
18399 files.  Similarly, you should not override command-line options in the
18400 site files.  Your code should check that variables such as @code{prefix}
18401 and @code{cache_file} have their default values (as set near the top of
18402 @command{configure}) before changing them.
18404 Here is a sample file @file{/usr/share/local/gnu/share/config.site}.  The
18405 command @samp{configure --prefix=/usr/share/local/gnu} would read this
18406 file (if @code{CONFIG_SITE} is not set to a different file).
18408 @example
18409 # config.site for configure
18411 # Change some defaults.
18412 test "$prefix" = NONE && prefix=/usr/share/local/gnu
18413 test "$exec_prefix" = NONE && exec_prefix=/usr/local/gnu
18414 test "$sharedstatedir" = '$@{prefix@}/com' && sharedstatedir=/var
18415 test "$localstatedir" = '$@{prefix@}/var' && localstatedir=/var
18417 # Give Autoconf 2.x generated configure scripts a shared default
18418 # cache file for feature test results, architecture-specific.
18419 if test "$cache_file" = /dev/null; then
18420   cache_file="$prefix/var/config.cache"
18421   # A cache file is only valid for one C compiler.
18422   CC=gcc
18424 @end example
18426 @cindex Filesystem Hierarchy Standard
18427 @cindex FHS
18429 Another use of @file{config.site} is for priming the directory variables
18430 in a manner consistent with the Filesystem Hierarchy Standard
18431 (@acronym{FHS}).  Once the following file is installed at
18432 @file{/usr/share/config.site}, a user can execute simply
18433 @command{./configure --prefix=/usr} to get all the directories chosen in
18434 the locations recommended by @acronym{FHS}.
18436 @example
18437 # /usr/local/config.site for FHS defaults when installing below /usr,
18438 # and the respective settings were not changed on the command line.
18439 if test "$prefix" = /usr; then
18440   test "$sysconfdir" = '$@{prefix@}/etc' && sysconfdir=/etc
18441   test "$sharedstatedir" = '$@{prefix@}/com' && sharedstatedir=/var
18442   test "$localstatedir" = '$@{prefix@}/var' && localstatedir=/var
18444 @end example
18447 @c ============================================== Running configure Scripts.
18449 @node Running configure Scripts
18450 @chapter Running @command{configure} Scripts
18451 @cindex @command{configure}
18453 Below are instructions on how to configure a package that uses a
18454 @command{configure} script, suitable for inclusion as an @file{INSTALL}
18455 file in the package.  A plain-text version of @file{INSTALL} which you
18456 may use comes with Autoconf.
18458 @menu
18459 * Basic Installation::          Instructions for typical cases
18460 * Compilers and Options::       Selecting compilers and optimization
18461 * Multiple Architectures::      Compiling for multiple architectures at once
18462 * Installation Names::          Installing in different directories
18463 * Optional Features::           Selecting optional features
18464 * System Type::                 Specifying the system type
18465 * Sharing Defaults::            Setting site-wide defaults for @command{configure}
18466 * Defining Variables::          Specifying the compiler etc.
18467 * configure Invocation::        Changing how @command{configure} runs
18468 @end menu
18470 @set autoconf
18471 @include install.texi
18474 @c ============================================== config.status Invocation
18476 @node config.status Invocation
18477 @chapter config.status Invocation
18478 @cindex @command{config.status}
18480 The @command{configure} script creates a file named @file{config.status},
18481 which actually configures, @dfn{instantiates}, the template files.  It
18482 also records the configuration options that were specified when the
18483 package was last configured in case reconfiguring is needed.
18485 Synopsis:
18486 @example
18487 ./config.status @var{option}@dots{} [@var{file}@dots{}]
18488 @end example
18490 It configures the @var{files}; if none are specified, all the templates
18491 are instantiated.  The files must be specified without their
18492 dependencies, as in
18494 @example
18495 ./config.status foobar
18496 @end example
18498 @noindent
18501 @example
18502 ./config.status foobar:foo.in:bar.in
18503 @end example
18505 The supported options are:
18507 @table @option
18508 @item --help
18509 @itemx -h
18510 Print a summary of the command line options, the list of the template
18511 files, and exit.
18513 @item --version
18514 @itemx -V
18515 Print the version number of Autoconf and the configuration settings,
18516 and exit.
18518 @item --silent
18519 @itemx --quiet
18520 @itemx -q
18521 Do not print progress messages.
18523 @item --debug
18524 @itemx -d
18525 Don't remove the temporary files.
18527 @item --file=@var{file}[:@var{template}]
18528 Require that @var{file} be instantiated as if
18529 @samp{AC_CONFIG_FILES(@var{file}:@var{template})} was used.  Both
18530 @var{file} and @var{template} may be @samp{-} in which case the standard
18531 output and/or standard input, respectively, is used.  If a
18532 @var{template} file name is relative, it is first looked for in the build
18533 tree, and then in the source tree.  @xref{Configuration Actions}, for
18534 more details.
18536 This option and the following ones provide one way for separately
18537 distributed packages to share the values computed by @command{configure}.
18538 Doing so can be useful if some of the packages need a superset of the
18539 features that one of them, perhaps a common library, does.  These
18540 options allow a @file{config.status} file to create files other than the
18541 ones that its @file{configure.ac} specifies, so it can be used for a
18542 different package.
18544 @item --header=@var{file}[:@var{template}]
18545 Same as @option{--file} above, but with @samp{AC_CONFIG_HEADERS}.
18547 @item --recheck
18548 Ask @file{config.status} to update itself and exit (no instantiation).
18549 This option is useful if you change @command{configure}, so that the
18550 results of some tests might be different from the previous run.  The
18551 @option{--recheck} option reruns @command{configure} with the same arguments
18552 you used before, plus the @option{--no-create} option, which prevents
18553 @command{configure} from running @file{config.status} and creating
18554 @file{Makefile} and other files, and the @option{--no-recursion} option,
18555 which prevents @command{configure} from running other @command{configure}
18556 scripts in subdirectories.  (This is so other Make rules can
18557 run @file{config.status} when it changes; @pxref{Automatic Remaking},
18558 for an example).
18559 @end table
18561 @file{config.status} checks several optional environment variables that
18562 can alter its behavior:
18564 @defvar CONFIG_SHELL
18565 @evindex CONFIG_SHELL
18566 The shell with which to run @command{configure} for the @option{--recheck}
18567 option.  It must be Bourne-compatible.  The default is a shell that
18568 supports @code{LINENO} if available, and @file{/bin/sh} otherwise.
18569 Invoking @command{configure} by hand bypasses this setting, so you may
18570 need to use a command like @samp{CONFIG_SHELL=/bin/bash /bin/bash ./configure}
18571 to insure that the same shell is used everywhere.  The absolute name of the
18572 shell should be passed.
18573 @end defvar
18575 @defvar CONFIG_STATUS
18576 @evindex CONFIG_STATUS
18577 The file name to use for the shell script that records the
18578 configuration.  The default is @file{./config.status}.  This variable is
18579 useful when one package uses parts of another and the @command{configure}
18580 scripts shouldn't be merged because they are maintained separately.
18581 @end defvar
18583 You can use @file{./config.status} in your makefiles.  For example, in
18584 the dependencies given above (@pxref{Automatic Remaking}),
18585 @file{config.status} is run twice when @file{configure.ac} has changed.
18586 If that bothers you, you can make each run only regenerate the files for
18587 that rule:
18588 @example
18589 @group
18590 config.h: stamp-h
18591 stamp-h: config.h.in config.status
18592         ./config.status config.h
18593         echo > stamp-h
18595 Makefile: Makefile.in config.status
18596         ./config.status Makefile
18597 @end group
18598 @end example
18600 The calling convention of @file{config.status} has changed; see
18601 @ref{Obsolete config.status Use}, for details.
18604 @c =================================================== Obsolete Constructs
18606 @node Obsolete Constructs
18607 @chapter Obsolete Constructs
18608 @cindex Obsolete constructs
18610 Autoconf changes, and throughout the years some constructs have been
18611 obsoleted.  Most of the changes involve the macros, but in some cases
18612 the tools themselves, or even some concepts, are now considered
18613 obsolete.
18615 You may completely skip this chapter if you are new to Autoconf.  Its
18616 intention is mainly to help maintainers updating their packages by
18617 understanding how to move to more modern constructs.
18619 @menu
18620 * Obsolete config.status Use::  Obsolete convention for @command{config.status}
18621 * acconfig Header::             Additional entries in @file{config.h.in}
18622 * autoupdate Invocation::       Automatic update of @file{configure.ac}
18623 * Obsolete Macros::             Backward compatibility macros
18624 * Autoconf 1::                  Tips for upgrading your files
18625 * Autoconf 2.13::               Some fresher tips
18626 @end menu
18628 @node Obsolete config.status Use
18629 @section Obsolete @file{config.status} Invocation
18631 @file{config.status} now supports arguments to specify the files to
18632 instantiate; see @ref{config.status Invocation}, for more details.
18633 Before, environment variables had to be used.
18635 @defvar CONFIG_COMMANDS
18636 @evindex CONFIG_COMMANDS
18637 The tags of the commands to execute.  The default is the arguments given
18638 to @code{AC_OUTPUT} and @code{AC_CONFIG_COMMANDS} in
18639 @file{configure.ac}.
18640 @end defvar
18642 @defvar CONFIG_FILES
18643 @evindex CONFIG_FILES
18644 The files in which to perform @samp{@@@var{variable}@@} substitutions.
18645 The default is the arguments given to @code{AC_OUTPUT} and
18646 @code{AC_CONFIG_FILES} in @file{configure.ac}.
18647 @end defvar
18649 @defvar CONFIG_HEADERS
18650 @evindex CONFIG_HEADERS
18651 The files in which to substitute C @code{#define} statements.  The
18652 default is the arguments given to @code{AC_CONFIG_HEADERS}; if that
18653 macro was not called, @file{config.status} ignores this variable.
18654 @end defvar
18656 @defvar CONFIG_LINKS
18657 @evindex CONFIG_LINKS
18658 The symbolic links to establish.  The default is the arguments given to
18659 @code{AC_CONFIG_LINKS}; if that macro was not called,
18660 @file{config.status} ignores this variable.
18661 @end defvar
18663 In @ref{config.status Invocation}, using this old interface, the example
18664 would be:
18666 @example
18667 @group
18668 config.h: stamp-h
18669 stamp-h: config.h.in config.status
18670         CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_FILES= \
18671           CONFIG_HEADERS=config.h ./config.status
18672         echo > stamp-h
18674 Makefile: Makefile.in config.status
18675         CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_HEADERS= \
18676           CONFIG_FILES=Makefile ./config.status
18677 @end group
18678 @end example
18680 @noindent
18681 (If @file{configure.ac} does not call @code{AC_CONFIG_HEADERS}, there is
18682 no need to set @code{CONFIG_HEADERS} in the @code{make} rules.  Equally
18683 for @code{CONFIG_COMMANDS}, etc.)
18686 @node acconfig Header
18687 @section @file{acconfig.h}
18689 @cindex @file{acconfig.h}
18690 @cindex @file{config.h.top}
18691 @cindex @file{config.h.bot}
18693 In order to produce @file{config.h.in}, @command{autoheader} needs to
18694 build or to find templates for each symbol.  Modern releases of Autoconf
18695 use @code{AH_VERBATIM} and @code{AH_TEMPLATE} (@pxref{Autoheader
18696 Macros}), but in older releases a file, @file{acconfig.h}, contained the
18697 list of needed templates.  @command{autoheader} copied comments and
18698 @code{#define} and @code{#undef} statements from @file{acconfig.h} in
18699 the current directory, if present.  This file used to be mandatory if
18700 you @code{AC_DEFINE} any additional symbols.
18702 Modern releases of Autoconf also provide @code{AH_TOP} and
18703 @code{AH_BOTTOM} if you need to prepend/append some information to
18704 @file{config.h.in}.  Ancient versions of Autoconf had a similar feature:
18705 if @file{./acconfig.h} contains the string @samp{@@TOP@@},
18706 @command{autoheader} copies the lines before the line containing
18707 @samp{@@TOP@@} into the top of the file that it generates.  Similarly,
18708 if @file{./acconfig.h} contains the string @samp{@@BOTTOM@@},
18709 @command{autoheader} copies the lines after that line to the end of the
18710 file it generates.  Either or both of those strings may be omitted.  An
18711 even older alternate way to produce the same effect in ancient versions
18712 of Autoconf is to create the files @file{@var{file}.top} (typically
18713 @file{config.h.top}) and/or @file{@var{file}.bot} in the current
18714 directory.  If they exist, @command{autoheader} copies them to the
18715 beginning and end, respectively, of its output.
18717 In former versions of Autoconf, the files used in preparing a software
18718 package for distribution were:
18719 @example
18720 @group
18721 configure.ac --.   .------> autoconf* -----> configure
18722                +---+
18723 [aclocal.m4] --+   `---.
18724 [acsite.m4] ---'       |
18725                        +--> [autoheader*] -> [config.h.in]
18726 [acconfig.h] ----.     |
18727                  +-----'
18728 [config.h.top] --+
18729 [config.h.bot] --'
18730 @end group
18731 @end example
18733 Using only the @code{AH_} macros, @file{configure.ac} should be
18734 self-contained, and should not depend upon @file{acconfig.h} etc.
18737 @node autoupdate Invocation
18738 @section Using @command{autoupdate} to Modernize @file{configure.ac}
18739 @cindex @command{autoupdate}
18741 The @command{autoupdate} program updates a @file{configure.ac} file that
18742 calls Autoconf macros by their old names to use the current macro names.
18743 In version 2 of Autoconf, most of the macros were renamed to use a more
18744 uniform and descriptive naming scheme.  @xref{Macro Names}, for a
18745 description of the new scheme.  Although the old names still work
18746 (@pxref{Obsolete Macros}, for a list of the old macros and the corresponding
18747 new names), you can make your @file{configure.ac} files more readable
18748 and make it easier to use the current Autoconf documentation if you
18749 update them to use the new macro names.
18751 @evindex SIMPLE_BACKUP_SUFFIX
18752 If given no arguments, @command{autoupdate} updates @file{configure.ac},
18753 backing up the original version with the suffix @file{~} (or the value
18754 of the environment variable @code{SIMPLE_BACKUP_SUFFIX}, if that is
18755 set).  If you give @command{autoupdate} an argument, it reads that file
18756 instead of @file{configure.ac} and writes the updated file to the
18757 standard output.
18759 @noindent
18760 @command{autoupdate} accepts the following options:
18762 @table @option
18763 @item --help
18764 @itemx -h
18765 Print a summary of the command line options and exit.
18767 @item --version
18768 @itemx -V
18769 Print the version number of Autoconf and exit.
18771 @item --verbose
18772 @itemx -v
18773 Report processing steps.
18775 @item --debug
18776 @itemx -d
18777 Don't remove the temporary files.
18779 @item --force
18780 @itemx -f
18781 Force the update even if the file has not changed.  Disregard the cache.
18783 @item --include=@var{dir}
18784 @itemx -I @var{dir}
18785 Also look for input files in @var{dir}.  Multiple invocations accumulate.
18786 Directories are browsed from last to first.
18787 @end table
18789 @node Obsolete Macros
18790 @section Obsolete Macros
18792 Several macros are obsoleted in Autoconf, for various reasons (typically
18793 they failed to quote properly, couldn't be extended for more recent
18794 issues, etc.).  They are still supported, but deprecated: their use
18795 should be avoided.
18797 During the jump from Autoconf version 1 to version 2, most of the
18798 macros were renamed to use a more uniform and descriptive naming scheme,
18799 but their signature did not change.  @xref{Macro Names}, for a
18800 description of the new naming scheme.  Below, if there is just the mapping
18801 from old names to new names for these macros, the reader is invited to
18802 refer to the definition of the new macro for the signature and the
18803 description.
18805 @defmac AC_AIX
18806 @acindex{AIX}
18807 @cvindex _ALL_SOURCE
18808 This macro is a platform-specific subset of
18809 @code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
18810 @end defmac
18812 @defmac AC_ALLOCA
18813 @acindex{ALLOCA}
18814 Replaced by @code{AC_FUNC_ALLOCA} (@pxref{AC_FUNC_ALLOCA}).
18815 @end defmac
18817 @defmac AC_ARG_ARRAY
18818 @acindex{ARG_ARRAY}
18819 Removed because of limited usefulness.
18820 @end defmac
18822 @defmac AC_C_CROSS
18823 @acindex{C_CROSS}
18824 This macro is obsolete; it does nothing.
18825 @end defmac
18827 @defmac AC_C_LONG_DOUBLE
18828 @acindex{C_LONG_DOUBLE}
18829 @cvindex HAVE_LONG_DOUBLE
18830 If the C compiler supports a working @code{long double} type with more
18831 range or precision than the @code{double} type, define
18832 @code{HAVE_LONG_DOUBLE}.
18834 You should use @code{AC_TYPE_LONG_DOUBLE} or
18835 @code{AC_TYPE_LONG_DOUBLE_WIDER} instead.  @xref{Particular Types}.
18836 @end defmac
18838 @defmac AC_CANONICAL_SYSTEM
18839 @acindex{CANONICAL_SYSTEM}
18840 Determine the system type and set output variables to the names of the
18841 canonical system types.  @xref{Canonicalizing}, for details about the
18842 variables this macro sets.
18844 The user is encouraged to use either @code{AC_CANONICAL_BUILD}, or
18845 @code{AC_CANONICAL_HOST}, or @code{AC_CANONICAL_TARGET}, depending on
18846 the needs.  Using @code{AC_CANONICAL_TARGET} is enough to run the two
18847 other macros (@pxref{Canonicalizing}).
18848 @end defmac
18850 @defmac AC_CHAR_UNSIGNED
18851 @acindex{CHAR_UNSIGNED}
18852 Replaced by @code{AC_C_CHAR_UNSIGNED} (@pxref{AC_C_CHAR_UNSIGNED}).
18853 @end defmac
18855 @defmac AC_CHECK_TYPE (@var{type}, @var{default})
18856 @acindex{CHECK_TYPE}
18857 Autoconf, up to 2.13, used to provide this version of
18858 @code{AC_CHECK_TYPE}, deprecated because of its flaws.  First, although
18859 it is a member of the @code{CHECK} clan, it does
18860 more than just checking.  Secondly, missing types are defined
18861 using @code{#define}, not @code{typedef}, and this can lead to
18862 problems in the case of pointer types.
18864 This use of @code{AC_CHECK_TYPE} is obsolete and discouraged; see
18865 @ref{Generic Types}, for the description of the current macro.
18867 If the type @var{type} is not defined, define it to be the C (or C++)
18868 builtin type @var{default}, e.g., @samp{short int} or @samp{unsigned int}.
18870 This macro is equivalent to:
18872 @example
18873 AC_CHECK_TYPE([@var{type}], [],
18874   [AC_DEFINE_UNQUOTED([@var{type}], [@var{default}],
18875      [Define to `@var{default}'
18876       if <sys/types.h> does not define.])])
18877 @end example
18879 In order to keep backward compatibility, the two versions of
18880 @code{AC_CHECK_TYPE} are implemented, selected using these heuristics:
18882 @enumerate
18883 @item
18884 If there are three or four arguments, the modern version is used.
18886 @item
18887 If the second argument appears to be a C or C++ type, then the
18888 obsolete version is used.  This happens if the argument is a C or C++
18889 @emph{builtin} type or a C identifier ending in @samp{_t}, optionally
18890 followed by one of @samp{[(* } and then by a string of zero or more
18891 characters taken from the set @samp{[]()* _a-zA-Z0-9}.
18893 @item
18894 If the second argument is spelled with the alphabet of valid C and C++
18895 types, the user is warned and the modern version is used.
18897 @item
18898 Otherwise, the modern version is used.
18899 @end enumerate
18901 @noindent
18902 You are encouraged either to use a valid builtin type, or to use the
18903 equivalent modern code (see above), or better yet, to use
18904 @code{AC_CHECK_TYPES} together with
18906 @example
18907 #ifndef HAVE_LOFF_T
18908 typedef loff_t off_t;
18909 #endif
18910 @end example
18911 @end defmac
18912 @c end of AC_CHECK_TYPE
18914 @defmac AC_CHECKING (@var{feature-description})
18915 @acindex{CHECKING}
18916 Same as
18918 @example
18919 AC_MSG_NOTICE([checking @var{feature-description}@dots{}]
18920 @end example
18922 @noindent
18923 @xref{AC_MSG_NOTICE}.
18924 @end defmac
18926 @defmac AC_COMPILE_CHECK (@var{echo-text}, @var{includes}, @
18927   @var{function-body}, @var{action-if-true}, @ovar{action-if-false})
18928 @acindex{COMPILE_CHECK}
18929 This is an obsolete version of @code{AC_TRY_COMPILE} itself replaced by
18930 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}), with the
18931 addition that it prints @samp{checking for @var{echo-text}} to the
18932 standard output first, if @var{echo-text} is non-empty.  Use
18933 @code{AC_MSG_CHECKING} and @code{AC_MSG_RESULT} instead to print
18934 messages (@pxref{Printing Messages}).
18935 @end defmac
18937 @defmac AC_CONST
18938 @acindex{CONST}
18939 Replaced by @code{AC_C_CONST} (@pxref{AC_C_CONST}).
18940 @end defmac
18942 @defmac AC_CROSS_CHECK
18943 @acindex{CROSS_CHECK}
18944 Same as @code{AC_C_CROSS}, which is obsolete too, and does nothing
18945 @code{:-)}.
18946 @end defmac
18948 @defmac AC_CYGWIN
18949 @acindex{CYGWIN}
18950 @evindex CYGWIN
18951 Check for the Cygwin environment in which case the shell variable
18952 @code{CYGWIN} is set to @samp{yes}.  Don't use this macro, the dignified
18953 means to check the nature of the host is using @code{AC_CANONICAL_HOST}
18954 (@pxref{Canonicalizing}).  As a matter of fact this macro is defined as:
18956 @example
18957 AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
18958 case $host_os in
18959   *cygwin* ) CYGWIN=yes;;
18960          * ) CYGWIN=no;;
18961 esac
18962 @end example
18964 Beware that the variable @env{CYGWIN} has a special meaning when
18965 running Cygwin, and should not be changed.  That's yet another reason
18966 not to use this macro.
18967 @end defmac
18969 @defmac AC_DECL_SYS_SIGLIST
18970 @acindex{DECL_SYS_SIGLIST}
18971 @cvindex SYS_SIGLIST_DECLARED
18972 Same as:
18974 @example
18975 AC_CHECK_DECLS([sys_siglist], [], [],
18976 [#include <signal.h>
18977 /* NetBSD declares sys_siglist in unistd.h.  */
18978 #ifdef HAVE_UNISTD_H
18979 # include <unistd.h>
18980 #endif
18982 @end example
18984 @noindent
18985 @xref{AC_CHECK_DECLS}.
18986 @end defmac
18988 @defmac AC_DECL_YYTEXT
18989 @acindex{DECL_YYTEXT}
18990 Does nothing, now integrated in @code{AC_PROG_LEX} (@pxref{AC_PROG_LEX}).
18991 @end defmac
18993 @defmac AC_DIR_HEADER
18994 @acindex{DIR_HEADER}
18995 @cvindex DIRENT
18996 @cvindex SYSNDIR
18997 @cvindex SYSDIR
18998 @cvindex NDIR
18999 Like calling @code{AC_FUNC_CLOSEDIR_VOID}
19000 (@pxref{AC_FUNC_CLOSEDIR_VOID}) and @code{AC_HEADER_DIRENT}
19001 (@pxref{AC_HEADER_DIRENT}),
19002 but defines a different set of C preprocessor macros to indicate which
19003 header file is found:
19005 @multitable {@file{sys/ndir.h}} {Old Symbol} {@code{HAVE_SYS_NDIR_H}}
19006 @item Header            @tab Old Symbol     @tab New Symbol
19007 @item @file{dirent.h}   @tab @code{DIRENT}  @tab @code{HAVE_DIRENT_H}
19008 @item @file{sys/ndir.h} @tab @code{SYSNDIR} @tab @code{HAVE_SYS_NDIR_H}
19009 @item @file{sys/dir.h}  @tab @code{SYSDIR}  @tab @code{HAVE_SYS_DIR_H}
19010 @item @file{ndir.h}     @tab @code{NDIR}    @tab @code{HAVE_NDIR_H}
19011 @end multitable
19012 @end defmac
19014 @defmac AC_DYNIX_SEQ
19015 @acindex{DYNIX_SEQ}
19016 If on DYNIX/ptx, add @option{-lseq} to output variable
19017 @code{LIBS}.  This macro used to be defined as
19019 @example
19020 AC_CHECK_LIB([seq], [getmntent], [LIBS="-lseq $LIBS"])
19021 @end example
19023 @noindent
19024 now it is just @code{AC_FUNC_GETMNTENT} (@pxref{AC_FUNC_GETMNTENT}).
19025 @end defmac
19027 @defmac AC_EXEEXT
19028 @acindex{EXEEXT}
19029 @ovindex EXEEXT
19030 Defined the output variable @code{EXEEXT} based on the output of the
19031 compiler, which is now done automatically.  Typically set to empty
19032 string if Posix and @samp{.exe} if a @acronym{DOS} variant.
19033 @end defmac
19035 @defmac AC_EMXOS2
19036 @acindex{EMXOS2}
19037 Similar to @code{AC_CYGWIN} but checks for the EMX environment on OS/2
19038 and sets @code{EMXOS2}.  Don't use this macro, the dignified means to
19039 check the nature of the host is using @code{AC_CANONICAL_HOST}
19040 (@pxref{Canonicalizing}).
19041 @end defmac
19043 @defmac AC_ENABLE (@var{feature}, @var{action-if-given}, @
19044   @ovar{action-if-not-given})
19045 @acindex{ENABLE}
19046 This is an obsolete version of @code{AC_ARG_ENABLE} that does not
19047 support providing a help string (@pxref{AC_ARG_ENABLE}).
19048 @end defmac
19050 @defmac AC_ERROR
19051 @acindex{ERROR}
19052 Replaced by @code{AC_MSG_ERROR} (@pxref{AC_MSG_ERROR}).
19053 @end defmac
19055 @defmac AC_FIND_X
19056 @acindex{FIND_X}
19057 Replaced by @code{AC_PATH_X} (@pxref{AC_PATH_X}).
19058 @end defmac
19060 @defmac AC_FIND_XTRA
19061 @acindex{FIND_XTRA}
19062 Replaced by @code{AC_PATH_XTRA} (@pxref{AC_PATH_XTRA}).
19063 @end defmac
19065 @defmac AC_FOREACH
19066 @acindex{FOREACH}
19067 Replaced by @code{m4_foreach_w} (@pxref{m4_foreach_w}).
19068 @end defmac
19070 @defmac AC_FUNC_CHECK
19071 @acindex{FUNC_CHECK}
19072 Replaced by @code{AC_CHECK_FUNC} (@pxref{AC_CHECK_FUNC}).
19073 @end defmac
19075 @anchor{AC_FUNC_SETVBUF_REVERSED}
19076 @defmac AC_FUNC_SETVBUF_REVERSED
19077 @acindex{FUNC_SETVBUF_REVERSED}
19078 @cvindex SETVBUF_REVERSED
19079 @c @fuindex setvbuf
19080 @prindex @code{setvbuf}
19081 Do nothing.  Formerly, this macro checked whether @code{setvbuf} takes
19082 the buffering type as its second argument and the buffer pointer as the
19083 third, instead of the other way around, and defined
19084 @code{SETVBUF_REVERSED}.  However, the last systems to have the problem
19085 were those based on SVR2, which became obsolete in 1987, and the macro
19086 is no longer needed.
19087 @end defmac
19089 @defmac AC_FUNC_WAIT3
19090 @acindex{FUNC_WAIT3}
19091 @cvindex HAVE_WAIT3
19092 If @code{wait3} is found and fills in the contents of its third argument
19093 (a @samp{struct rusage *}), which @acronym{HP-UX} does not do, define
19094 @code{HAVE_WAIT3}.
19096 These days portable programs should use @code{waitpid}, not
19097 @code{wait3}, as @code{wait3} has been removed from Posix.
19098 @end defmac
19100 @defmac AC_GCC_TRADITIONAL
19101 @acindex{GCC_TRADITIONAL}
19102 Replaced by @code{AC_PROG_GCC_TRADITIONAL} (@pxref{AC_PROG_GCC_TRADITIONAL}).
19103 @end defmac
19105 @defmac AC_GETGROUPS_T
19106 @acindex{GETGROUPS_T}
19107 Replaced by @code{AC_TYPE_GETGROUPS} (@pxref{AC_TYPE_GETGROUPS}).
19108 @end defmac
19110 @defmac AC_GETLOADAVG
19111 @acindex{GETLOADAVG}
19112 Replaced by @code{AC_FUNC_GETLOADAVG} (@pxref{AC_FUNC_GETLOADAVG}).
19113 @end defmac
19115 @defmac AC_GNU_SOURCE
19116 @acindex{GNU_SOURCE}
19117 @cvindex _GNU_SOURCE
19118 This macro is a platform-specific subset of
19119 @code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
19120 @end defmac
19122 @defmac AC_HAVE_FUNCS
19123 @acindex{HAVE_FUNCS}
19124 Replaced by @code{AC_CHECK_FUNCS} (@pxref{AC_CHECK_FUNCS}).
19125 @end defmac
19127 @defmac AC_HAVE_HEADERS
19128 @acindex{HAVE_HEADERS}
19129 Replaced by @code{AC_CHECK_HEADERS} (@pxref{AC_CHECK_HEADERS}).
19130 @end defmac
19132 @defmac AC_HAVE_LIBRARY (@var{library}, @ovar{action-if-found}, @
19133   @ovar{action-if-not-found}, @ovar{other-libraries})
19134 @acindex{HAVE_LIBRARY}
19135 This macro is equivalent to calling @code{AC_CHECK_LIB} with a
19136 @var{function} argument of @code{main}.  In addition, @var{library} can
19137 be written as any of @samp{foo}, @option{-lfoo}, or @samp{libfoo.a}.  In
19138 all of those cases, the compiler is passed @option{-lfoo}.  However,
19139 @var{library} cannot be a shell variable; it must be a literal name.
19140 @xref{AC_CHECK_LIB}.
19141 @end defmac
19143 @defmac AC_HAVE_POUNDBANG
19144 @acindex{HAVE_POUNDBANG}
19145 Replaced by @code{AC_SYS_INTERPRETER} (@pxref{AC_SYS_INTERPRETER}).
19146 @end defmac
19148 @defmac AC_HEADER_CHECK
19149 @acindex{HEADER_CHECK}
19150 Replaced by @code{AC_CHECK_HEADER} (@pxref{AC_CHECK_HEADER}).
19151 @end defmac
19153 @defmac AC_HEADER_EGREP
19154 @acindex{HEADER_EGREP}
19155 Replaced by @code{AC_EGREP_HEADER} (@pxref{AC_EGREP_HEADER}).
19156 @end defmac
19158 @defmac AC_HELP_STRING
19159 @acindex{HELP_STRING}
19160 Replaced by @code{AS_HELP_STRING} (@pxref{AS_HELP_STRING}).
19161 @end defmac
19163 @defmac AC_INIT (@var{unique-file-in-source-dir})
19164 @acindex{INIT}
19165 Formerly @code{AC_INIT} used to have a single argument, and was
19166 equivalent to:
19168 @example
19169 AC_INIT
19170 AC_CONFIG_SRCDIR(@var{unique-file-in-source-dir})
19171 @end example
19172 See @ref{AC_INIT} and @ref{AC_CONFIG_SRCDIR}.
19173 @end defmac
19175 @defmac AC_INLINE
19176 @acindex{INLINE}
19177 Replaced by @code{AC_C_INLINE} (@pxref{AC_C_INLINE}).
19178 @end defmac
19180 @defmac AC_INT_16_BITS
19181 @acindex{INT_16_BITS}
19182 @cvindex INT_16_BITS
19183 If the C type @code{int} is 16 bits wide, define @code{INT_16_BITS}.
19184 Use @samp{AC_CHECK_SIZEOF(int)} instead (@pxref{AC_CHECK_SIZEOF}).
19185 @end defmac
19187 @defmac AC_IRIX_SUN
19188 @acindex{IRIX_SUN}
19189 If on @sc{irix} (Silicon Graphics Unix), add @option{-lsun} to output
19190 @code{LIBS}.  If you were using it to get @code{getmntent}, use
19191 @code{AC_FUNC_GETMNTENT} instead.  If you used it for the NIS versions
19192 of the password and group functions, use @samp{AC_CHECK_LIB(sun,
19193 getpwnam)}.  Up to Autoconf 2.13, it used to be
19195 @example
19196 AC_CHECK_LIB([sun], [getmntent], [LIBS="-lsun $LIBS"])
19197 @end example
19199 @noindent
19200 now it is defined as
19202 @example
19203 AC_FUNC_GETMNTENT
19204 AC_CHECK_LIB([sun], [getpwnam])
19205 @end example
19207 @noindent
19208 See @ref{AC_FUNC_GETMNTENT} and @ref{AC_CHECK_LIB}.
19209 @end defmac
19211 @defmac AC_ISC_POSIX
19212 @acindex{ISC_POSIX}
19213 @ovindex LIBS
19214 This macro adds @option{-lcposix} to output variable @code{LIBS} if
19215 necessary for Posix facilities.  Sun dropped support for the obsolete
19216 @sc{interactive} Systems Corporation Unix on 2006-07-23.  New programs
19217 need not use this macro.  It is implemented as
19218 @code{AC_SEARCH_LIBS([strerror], [cposix])} (@pxref{AC_SEARCH_LIBS}).
19219 @end defmac
19221 @defmac AC_LANG_C
19222 @acindex{LANG_C}
19223 Same as @samp{AC_LANG([C])} (@pxref{AC_LANG}).
19224 @end defmac
19226 @defmac AC_LANG_CPLUSPLUS
19227 @acindex{LANG_CPLUSPLUS}
19228 Same as @samp{AC_LANG([C++])} (@pxref{AC_LANG}).
19229 @end defmac
19231 @defmac AC_LANG_FORTRAN77
19232 @acindex{LANG_FORTRAN77}
19233 Same as @samp{AC_LANG([Fortran 77])} (@pxref{AC_LANG}).
19234 @end defmac
19236 @defmac AC_LANG_RESTORE
19237 @acindex{LANG_RESTORE}
19238 Select the @var{language} that is saved on the top of the stack, as set
19239 by @code{AC_LANG_SAVE}, remove it from the stack, and call
19240 @code{AC_LANG(@var{language})}.  @xref{Language Choice}, for the
19241 preferred way to change languages.
19242 @end defmac
19244 @defmac AC_LANG_SAVE
19245 @acindex{LANG_SAVE}
19246 Remember the current language (as set by @code{AC_LANG}) on a stack.
19247 The current language does not change.  @code{AC_LANG_PUSH} is preferred
19248 (@pxref{AC_LANG_PUSH}).
19249 @end defmac
19251 @defmac AC_LINK_FILES (@var{source}@dots{}, @var{dest}@dots{})
19252 @acindex{LINK_FILES}
19253 This is an obsolete version of @code{AC_CONFIG_LINKS}
19254 (@pxref{AC_CONFIG_LINKS}.  An updated version of:
19256 @example
19257 AC_LINK_FILES(config/$machine.h config/$obj_format.h,
19258               host.h            object.h)
19259 @end example
19261 @noindent
19264 @example
19265 AC_CONFIG_LINKS([host.h:config/$machine.h
19266                 object.h:config/$obj_format.h])
19267 @end example
19268 @end defmac
19270 @defmac AC_LN_S
19271 @acindex{LN_S}
19272 Replaced by @code{AC_PROG_LN_S} (@pxref{AC_PROG_LN_S}).
19273 @end defmac
19275 @defmac AC_LONG_64_BITS
19276 @acindex{LONG_64_BITS}
19277 @cvindex LONG_64_BITS
19278 Define @code{LONG_64_BITS} if the C type @code{long int} is 64 bits wide.
19279 Use the generic macro @samp{AC_CHECK_SIZEOF([long int])} instead
19280 (@pxref{AC_CHECK_SIZEOF}).
19281 @end defmac
19283 @defmac AC_LONG_DOUBLE
19284 @acindex{LONG_DOUBLE}
19285 If the C compiler supports a working @code{long double} type with more
19286 range or precision than the @code{double} type, define
19287 @code{HAVE_LONG_DOUBLE}.
19289 You should use @code{AC_TYPE_LONG_DOUBLE} or
19290 @code{AC_TYPE_LONG_DOUBLE_WIDER} instead.  @xref{Particular Types}.
19291 @end defmac
19293 @defmac AC_LONG_FILE_NAMES
19294 @acindex{LONG_FILE_NAMES}
19295 Replaced by
19296 @example
19297 AC_SYS_LONG_FILE_NAMES
19298 @end example
19299 @noindent
19300 @xref{AC_SYS_LONG_FILE_NAMES}.
19301 @end defmac
19303 @defmac AC_MAJOR_HEADER
19304 @acindex{MAJOR_HEADER}
19305 Replaced by @code{AC_HEADER_MAJOR} (@pxref{AC_HEADER_MAJOR}).
19306 @end defmac
19308 @defmac AC_MEMORY_H
19309 @acindex{MEMORY_H}
19310 @cvindex NEED_MEMORY_H
19311 Used to define @code{NEED_MEMORY_H} if the @code{mem} functions were
19312 defined in @file{memory.h}.  Today it is equivalent to
19313 @samp{AC_CHECK_HEADERS([memory.h])} (@pxref{AC_CHECK_HEADERS}).  Adjust
19314 your code to depend upon
19315 @code{HAVE_MEMORY_H}, not @code{NEED_MEMORY_H}; see @ref{Standard
19316 Symbols}.
19317 @end defmac
19319 @defmac AC_MINGW32
19320 @acindex{MINGW32}
19321 Similar to @code{AC_CYGWIN} but checks for the MinGW compiler
19322 environment and sets @code{MINGW32}.  Don't use this macro, the
19323 dignified means to check the nature of the host is using
19324 @code{AC_CANONICAL_HOST} (@pxref{Canonicalizing}).
19325 @end defmac
19327 @defmac AC_MINIX
19328 @acindex{MINIX}
19329 @cvindex _MINIX
19330 @cvindex _POSIX_SOURCE
19331 @cvindex _POSIX_1_SOURCE
19332 This macro is a platform-specific subset of
19333 @code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
19334 @end defmac
19336 @defmac AC_MINUS_C_MINUS_O
19337 @acindex{MINUS_C_MINUS_O}
19338 Replaced by @code{AC_PROG_CC_C_O} (@pxref{AC_PROG_CC_C_O}).
19339 @end defmac
19341 @defmac AC_MMAP
19342 @acindex{MMAP}
19343 Replaced by @code{AC_FUNC_MMAP} (@pxref{AC_FUNC_MMAP}).
19344 @end defmac
19346 @defmac AC_MODE_T
19347 @acindex{MODE_T}
19348 Replaced by @code{AC_TYPE_MODE_T} (@pxref{AC_TYPE_MODE_T}).
19349 @end defmac
19351 @defmac AC_OBJEXT
19352 @acindex{OBJEXT}
19353 @ovindex OBJEXT
19354 Defined the output variable @code{OBJEXT} based on the output of the
19355 compiler, after .c files have been excluded.  Typically set to @samp{o}
19356 if Posix, @samp{obj} if a @acronym{DOS} variant.
19357 Now the compiler checking macros handle
19358 this automatically.
19359 @end defmac
19361 @defmac AC_OBSOLETE (@var{this-macro-name}, @ovar{suggestion})
19362 @acindex{OBSOLETE}
19363 Make M4 print a message to the standard error output warning that
19364 @var{this-macro-name} is obsolete, and giving the file and line number
19365 where it was called.  @var{this-macro-name} should be the name of the
19366 macro that is calling @code{AC_OBSOLETE}.  If @var{suggestion} is given,
19367 it is printed at the end of the warning message; for example, it can be
19368 a suggestion for what to use instead of @var{this-macro-name}.
19370 For instance
19372 @example
19373 AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
19374 @end example
19376 @noindent
19377 You are encouraged to use @code{AU_DEFUN} instead, since it gives better
19378 services to the user (@pxref{AU_DEFUN}).
19379 @end defmac
19381 @defmac AC_OFF_T
19382 @acindex{OFF_T}
19383 Replaced by @code{AC_TYPE_OFF_T} (@pxref{AC_TYPE_OFF_T}).
19384 @end defmac
19386 @defmac AC_OUTPUT (@ovar{file}@dots{}, @ovar{extra-cmds}, @ovar{init-cmds})
19387 @acindex{OUTPUT}
19388 The use of @code{AC_OUTPUT} with arguments is deprecated.  This obsoleted
19389 interface is equivalent to:
19391 @example
19392 @group
19393 AC_CONFIG_FILES(@var{file}@dots{})
19394 AC_CONFIG_COMMANDS([default],
19395                    @var{extra-cmds}, @var{init-cmds})
19396 AC_OUTPUT
19397 @end group
19398 @end example
19400 @noindent
19401 See @ref{AC_CONFIG_FILES}, @ref{AC_CONFIG_COMMANDS}, and @ref{AC_OUTPUT}.
19402 @end defmac
19404 @defmac AC_OUTPUT_COMMANDS (@var{extra-cmds}, @ovar{init-cmds})
19405 @acindex{OUTPUT_COMMANDS}
19406 Specify additional shell commands to run at the end of
19407 @file{config.status}, and shell commands to initialize any variables
19408 from @command{configure}.  This macro may be called multiple times.  It is
19409 obsolete, replaced by @code{AC_CONFIG_COMMANDS} (@pxref{AC_CONFIG_COMMANDS}).
19411 Here is an unrealistic example:
19413 @example
19414 fubar=27
19415 AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.],
19416                    [fubar=$fubar])
19417 AC_OUTPUT_COMMANDS([echo this is another, extra, bit],
19418                    [echo init bit])
19419 @end example
19421 Aside from the fact that @code{AC_CONFIG_COMMANDS} requires an
19422 additional key, an important difference is that
19423 @code{AC_OUTPUT_COMMANDS} is quoting its arguments twice, unlike
19424 @code{AC_CONFIG_COMMANDS}.  This means that @code{AC_CONFIG_COMMANDS}
19425 can safely be given macro calls as arguments:
19427 @example
19428 AC_CONFIG_COMMANDS(foo, [my_FOO()])
19429 @end example
19431 @noindent
19432 Conversely, where one level of quoting was enough for literal strings
19433 with @code{AC_OUTPUT_COMMANDS}, you need two with
19434 @code{AC_CONFIG_COMMANDS}.  The following lines are equivalent:
19436 @example
19437 @group
19438 AC_OUTPUT_COMMANDS([echo "Square brackets: []"])
19439 AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
19440 @end group
19441 @end example
19442 @end defmac
19444 @defmac AC_PID_T
19445 @acindex{PID_T}
19446 Replaced by @code{AC_TYPE_PID_T} (@pxref{AC_TYPE_PID_T}).
19447 @end defmac
19449 @defmac AC_PREFIX
19450 @acindex{PREFIX}
19451 Replaced by @code{AC_PREFIX_PROGRAM} (@pxref{AC_PREFIX_PROGRAM}).
19452 @end defmac
19454 @defmac AC_PROGRAMS_CHECK
19455 @acindex{PROGRAMS_CHECK}
19456 Replaced by @code{AC_CHECK_PROGS} (@pxref{AC_CHECK_PROGS}).
19457 @end defmac
19459 @defmac AC_PROGRAMS_PATH
19460 @acindex{PROGRAMS_PATH}
19461 Replaced by @code{AC_PATH_PROGS} (@pxref{AC_PATH_PROGS}).
19462 @end defmac
19464 @defmac AC_PROGRAM_CHECK
19465 @acindex{PROGRAM_CHECK}
19466 Replaced by @code{AC_CHECK_PROG} (@pxref{AC_CHECK_PROG}).
19467 @end defmac
19469 @defmac AC_PROGRAM_EGREP
19470 @acindex{PROGRAM_EGREP}
19471 Replaced by @code{AC_EGREP_CPP} (@pxref{AC_EGREP_CPP}).
19472 @end defmac
19474 @defmac AC_PROGRAM_PATH
19475 @acindex{PROGRAM_PATH}
19476 Replaced by @code{AC_PATH_PROG} (@pxref{AC_PATH_PROG}).
19477 @end defmac
19479 @defmac AC_REMOTE_TAPE
19480 @acindex{REMOTE_TAPE}
19481 Removed because of limited usefulness.
19482 @end defmac
19484 @defmac AC_RESTARTABLE_SYSCALLS
19485 @acindex{RESTARTABLE_SYSCALLS}
19486 This macro was renamed @code{AC_SYS_RESTARTABLE_SYSCALLS}.  However,
19487 these days portable programs should use @code{sigaction} with
19488 @code{SA_RESTART} if they want restartable system calls.  They should
19489 not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
19490 system call is restartable is a dynamic issue, not a configuration-time
19491 issue.
19492 @end defmac
19494 @defmac AC_RETSIGTYPE
19495 @acindex{RETSIGTYPE}
19496 Replaced by @code{AC_TYPE_SIGNAL} (@pxref{AC_TYPE_SIGNAL}), which itself
19497 is obsolete when assuming C89 or better.
19498 @end defmac
19500 @defmac AC_RSH
19501 @acindex{RSH}
19502 Removed because of limited usefulness.
19503 @end defmac
19505 @defmac AC_SCO_INTL
19506 @acindex{SCO_INTL}
19507 @ovindex LIBS
19508 If on SCO Unix, add @option{-lintl} to output variable @code{LIBS}.  This
19509 macro used to do this:
19511 @example
19512 AC_CHECK_LIB([intl], [strftime], [LIBS="-lintl $LIBS"])
19513 @end example
19515 @noindent
19516 Now it just calls @code{AC_FUNC_STRFTIME} instead (@pxref{AC_FUNC_STRFTIME}).
19517 @end defmac
19519 @defmac AC_SETVBUF_REVERSED
19520 @acindex{SETVBUF_REVERSED}
19521 Replaced by
19522 @example
19523 AC_FUNC_SETVBUF_REVERSED
19524 @end example
19525 @noindent
19526 @xref{AC_FUNC_SETVBUF_REVERSED}.
19527 @end defmac
19529 @defmac AC_SET_MAKE
19530 @acindex{SET_MAKE}
19531 Replaced by @code{AC_PROG_MAKE_SET} (@pxref{AC_PROG_MAKE_SET}).
19532 @end defmac
19534 @defmac AC_SIZEOF_TYPE
19535 @acindex{SIZEOF_TYPE}
19536 Replaced by @code{AC_CHECK_SIZEOF} (@pxref{AC_CHECK_SIZEOF}).
19537 @end defmac
19539 @defmac AC_SIZE_T
19540 @acindex{SIZE_T}
19541 Replaced by @code{AC_TYPE_SIZE_T} (@pxref{AC_TYPE_SIZE_T}).
19542 @end defmac
19544 @defmac AC_STAT_MACROS_BROKEN
19545 @acindex{STAT_MACROS_BROKEN}
19546 Replaced by @code{AC_HEADER_STAT} (@pxref{AC_HEADER_STAT}).
19547 @end defmac
19549 @defmac AC_STDC_HEADERS
19550 @acindex{STDC_HEADERS}
19551 Replaced by @code{AC_HEADER_STDC} (@pxref{AC_HEADER_STDC}).
19552 @end defmac
19554 @defmac AC_STRCOLL
19555 @acindex{STRCOLL}
19556 Replaced by @code{AC_FUNC_STRCOLL} (@pxref{AC_FUNC_STRCOLL}).
19557 @end defmac
19559 @defmac AC_STRUCT_ST_BLKSIZE
19560 @acindex{STRUCT_ST_BLKSIZE}
19561 @cvindex HAVE_STRUCT_STAT_ST_BLKSIZE
19562 @cvindex HAVE_ST_BLKSIZE
19563 If @code{struct stat} contains an @code{st_blksize} member, define
19564 @code{HAVE_STRUCT_STAT_ST_BLKSIZE}.  The former name,
19565 @code{HAVE_ST_BLKSIZE} is to be avoided, as its support will cease in
19566 the future.  This macro is obsoleted, and should be replaced by
19568 @example
19569 AC_CHECK_MEMBERS([struct stat.st_blksize])
19570 @end example
19571 @noindent
19572 @xref{AC_CHECK_MEMBERS}.
19573 @end defmac
19575 @defmac AC_STRUCT_ST_RDEV
19576 @acindex{STRUCT_ST_RDEV}
19577 @cvindex HAVE_ST_RDEV
19578 @cvindex HAVE_STRUCT_STAT_ST_RDEV
19579 If @code{struct stat} contains an @code{st_rdev} member, define
19580 @code{HAVE_STRUCT_STAT_ST_RDEV}.  The former name for this macro,
19581 @code{HAVE_ST_RDEV}, is to be avoided as it will cease to be supported
19582 in the future.  Actually, even the new macro is obsolete and should be
19583 replaced by:
19584 @example
19585 AC_CHECK_MEMBERS([struct stat.st_rdev])
19586 @end example
19587 @noindent
19588 @xref{AC_CHECK_MEMBERS}.
19589 @end defmac
19591 @defmac AC_ST_BLKSIZE
19592 @acindex{ST_BLKSIZE}
19593 Replaced by @code{AC_CHECK_MEMBERS} (@pxref{AC_CHECK_MEMBERS}).
19594 @end defmac
19596 @defmac AC_ST_BLOCKS
19597 @acindex{ST_BLOCKS}
19598 Replaced by @code{AC_STRUCT_ST_BLOCKS} (@pxref{AC_STRUCT_ST_BLOCKS}).
19599 @end defmac
19601 @defmac AC_ST_RDEV
19602 @acindex{ST_RDEV}
19603 Replaced by @code{AC_CHECK_MEMBERS} (@pxref{AC_CHECK_MEMBERS}).
19604 @end defmac
19606 @defmac AC_SYS_RESTARTABLE_SYSCALLS
19607 @acindex{SYS_RESTARTABLE_SYSCALLS}
19608 @cvindex HAVE_RESTARTABLE_SYSCALLS
19609 If the system automatically restarts a system call that is interrupted
19610 by a signal, define @code{HAVE_RESTARTABLE_SYSCALLS}.  This macro does
19611 not check whether system calls are restarted in general---it checks whether a
19612 signal handler installed with @code{signal} (but not @code{sigaction})
19613 causes system calls to be restarted.  It does not check whether system calls
19614 can be restarted when interrupted by signals that have no handler.
19616 These days portable programs should use @code{sigaction} with
19617 @code{SA_RESTART} if they want restartable system calls.  They should
19618 not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
19619 system call is restartable is a dynamic issue, not a configuration-time
19620 issue.
19621 @end defmac
19623 @defmac AC_SYS_SIGLIST_DECLARED
19624 @acindex{SYS_SIGLIST_DECLARED}
19625 This macro was renamed @code{AC_DECL_SYS_SIGLIST}.  However, even that
19626 name is obsolete, as the same functionality is now acheived via
19627 @code{AC_CHECK_DECLS} (@pxref{AC_CHECK_DECLS}).
19628 @end defmac
19630 @defmac AC_TEST_CPP
19631 @acindex{TEST_CPP}
19632 This macro was renamed @code{AC_TRY_CPP}, which in turn was replaced by
19633 @code{AC_PREPROC_IFELSE} (@pxref{AC_PREPROC_IFELSE}).
19634 @end defmac
19636 @defmac AC_TEST_PROGRAM
19637 @acindex{TEST_PROGRAM}
19638 This macro was renamed @code{AC_TRY_RUN}, which in turn was replaced by
19639 @code{AC_RUN_IFELSE} (@pxref{AC_RUN_IFELSE}).
19640 @end defmac
19642 @defmac AC_TIMEZONE
19643 @acindex{TIMEZONE}
19644 Replaced by @code{AC_STRUCT_TIMEZONE} (@pxref{AC_STRUCT_TIMEZONE}).
19645 @end defmac
19647 @defmac AC_TIME_WITH_SYS_TIME
19648 @acindex{TIME_WITH_SYS_TIME}
19649 Replaced by @code{AC_HEADER_TIME} (@pxref{AC_HEADER_TIME}).
19650 @end defmac
19652 @defmac AC_TRY_COMPILE (@var{includes}, @var{function-body}, @
19653   @ovar{action-if-true}, @ovar{action-if-false})
19654 @acindex{TRY_COMPILE}
19655 Same as:
19657 @example
19658 AC_COMPILE_IFELSE(
19659   [AC_LANG_PROGRAM([[@var{includes}]],
19660      [[@var{function-body}]])],
19661   [@var{action-if-true}],
19662   [@var{action-if-false}])
19663 @end example
19665 @noindent
19666 @xref{Running the Compiler}.
19668 This macro double quotes both @var{includes} and @var{function-body}.
19670 For C and C++, @var{includes} is any @code{#include} statements needed
19671 by the code in @var{function-body} (@var{includes} is ignored if
19672 the currently selected language is Fortran or Fortran 77).  The compiler
19673 and compilation flags are determined by the current language
19674 (@pxref{Language Choice}).
19675 @end defmac
19677 @defmac AC_TRY_CPP (@var{input}, @ovar{action-if-true}, @ovar{action-if-false})
19678 @acindex{TRY_CPP}
19679 Same as:
19681 @example
19682 AC_PREPROC_IFELSE(
19683   [AC_LANG_SOURCE([[@var{input}]])],
19684   [@var{action-if-true}],
19685   [@var{action-if-false}])
19686 @end example
19688 @noindent
19689 @xref{Running the Preprocessor}.
19691 This macro double quotes the @var{input}.
19692 @end defmac
19694 @defmac AC_TRY_LINK (@var{includes}, @var{function-body}, @
19695   @ovar{action-if-true}, @ovar{action-if-false})
19696 @acindex{TRY_LINK}
19697 Same as:
19699 @example
19700 AC_LINK_IFELSE(
19701   [AC_LANG_PROGRAM([[@var{includes}]],
19702      [[@var{function-body}]])],
19703   [@var{action-if-true}],
19704   [@var{action-if-false}])
19705 @end example
19707 @noindent
19708 @xref{Running the Compiler}.
19710 This macro double quotes both @var{includes} and @var{function-body}.
19712 Depending on the current language (@pxref{Language Choice}), create a
19713 test program to see whether a function whose body consists of
19714 @var{function-body} can be compiled and linked.  If the file compiles
19715 and links successfully, run shell commands @var{action-if-found},
19716 otherwise run @var{action-if-not-found}.
19718 This macro double quotes both @var{includes} and @var{function-body}.
19720 For C and C++, @var{includes} is any @code{#include} statements needed
19721 by the code in @var{function-body} (@var{includes} is ignored if
19722 the currently selected language is Fortran or Fortran 77).  The compiler
19723 and compilation flags are determined by the current language
19724 (@pxref{Language Choice}), and in addition @code{LDFLAGS} and
19725 @code{LIBS} are used for linking.
19726 @end defmac
19728 @defmac AC_TRY_LINK_FUNC (@var{function}, @ovar{action-if-found}, @
19729   @ovar{action-if-not-found})
19730 @acindex{TRY_LINK_FUNC}
19731 This macro is equivalent to
19732 @example
19733 AC_LINK_IFELSE([AC_LANG_CALL([], [@var{function}])],
19734   [@var{action-if-found}], [@var{action-if-not-found}])
19735 @end example
19736 @noindent
19737 @xref{AC_LINK_IFELSE}.
19738 @end defmac
19740 @defmac AC_TRY_RUN (@var{program}, @ovar{action-if-true}, @
19741   @ovar{action-if-false}, @ovar{action-if-cross-compiling})
19742 @acindex{TRY_RUN}
19743 Same as:
19745 @example
19746 AC_RUN_IFELSE(
19747   [AC_LANG_SOURCE([[@var{program}]])],
19748   [@var{action-if-true}],
19749   [@var{action-if-false}],
19750   [@var{action-if-cross-compiling}])
19751 @end example
19753 @noindent
19754 @xref{Runtime}.
19755 @end defmac
19757 @anchor{AC_TYPE_SIGNAL}
19758 @defmac AC_TYPE_SIGNAL
19759 @acindex{TYPE_SIGNAL}
19760 @cvindex RETSIGTYPE
19761 @hdrindex{signal.h}
19762 If @file{signal.h} declares @code{signal} as returning a pointer to a
19763 function returning @code{void}, define @code{RETSIGTYPE} to be
19764 @code{void}; otherwise, define it to be @code{int}.  These days, it is
19765 portable to assume C89, and that signal handlers return @code{void},
19766 without needing to use this macro or @code{RETSIGTYPE}.
19768 When targetting older K&R C, it is possible to define signal handlers as
19769 returning type @code{RETSIGTYPE}, and omit a return statement:
19771 @example
19772 @group
19773 RETSIGTYPE
19774 hup_handler ()
19776 @dots{}
19778 @end group
19779 @end example
19780 @end defmac
19782 @defmac AC_UID_T
19783 @acindex{UID_T}
19784 Replaced by @code{AC_TYPE_UID_T} (@pxref{AC_TYPE_UID_T}).
19785 @end defmac
19787 @defmac AC_UNISTD_H
19788 @acindex{UNISTD_H}
19789 Same as @samp{AC_CHECK_HEADERS([unistd.h])} (@pxref{AC_CHECK_HEADERS}).
19790 @end defmac
19792 @defmac AC_USG
19793 @acindex{USG}
19794 @cvindex USG
19795 Define @code{USG} if the @acronym{BSD} string functions are defined in
19796 @file{strings.h}.  You should no longer depend upon @code{USG}, but on
19797 @code{HAVE_STRING_H}; see @ref{Standard Symbols}.
19798 @end defmac
19800 @defmac AC_UTIME_NULL
19801 @acindex{UTIME_NULL}
19802 Replaced by @code{AC_FUNC_UTIME_NULL} (@pxref{AC_FUNC_UTIME_NULL}).
19803 @end defmac
19805 @defmac AC_VALIDATE_CACHED_SYSTEM_TUPLE (@ovar{cmd})
19806 @acindex{VALIDATE_CACHED_SYSTEM_TUPLE}
19807 If the cache file is inconsistent with the current host, target and
19808 build system types, it used to execute @var{cmd} or print a default
19809 error message.  This is now handled by default.
19810 @end defmac
19812 @defmac AC_VERBOSE (@var{result-description})
19813 @acindex{VERBOSE}
19814 Replaced by @code{AC_MSG_RESULT} (@pxref{AC_MSG_RESULT}).
19815 @end defmac
19817 @defmac AC_VFORK
19818 @acindex{VFORK}
19819 Replaced by @code{AC_FUNC_FORK} (@pxref{AC_FUNC_FORK}).
19820 @end defmac
19822 @defmac AC_VPRINTF
19823 @acindex{VPRINTF}
19824 Replaced by @code{AC_FUNC_VPRINTF} (@pxref{AC_FUNC_VPRINTF}).
19825 @end defmac
19827 @defmac AC_WAIT3
19828 @acindex{WAIT3}
19829 This macro was renamed @code{AC_FUNC_WAIT3}.  However, these days
19830 portable programs should use @code{waitpid}, not @code{wait3}, as
19831 @code{wait3} has been removed from Posix.
19832 @end defmac
19834 @defmac AC_WARN
19835 @acindex{WARN}
19836 Replaced by @code{AC_MSG_WARN} (@pxref{AC_MSG_WARN}).
19837 @end defmac
19839 @defmac AC_WITH (@var{package}, @var{action-if-given}, @
19840   @ovar{action-if-not-given})
19841 @acindex{WITH}
19842 This is an obsolete version of @code{AC_ARG_WITH} that does not
19843 support providing a help string (@pxref{AC_ARG_WITH}).
19844 @end defmac
19846 @defmac AC_WORDS_BIGENDIAN
19847 @acindex{WORDS_BIGENDIAN}
19848 Replaced by @code{AC_C_BIGENDIAN} (@pxref{AC_C_BIGENDIAN}).
19849 @end defmac
19851 @defmac AC_XENIX_DIR
19852 @acindex{XENIX_DIR}
19853 @ovindex LIBS
19854 This macro used to add @option{-lx} to output variable @code{LIBS} if on
19855 Xenix.  Also, if @file{dirent.h} is being checked for, added
19856 @option{-ldir} to @code{LIBS}.  Now it is merely an alias of
19857 @code{AC_HEADER_DIRENT} instead, plus some code to detect whether
19858 running @sc{xenix} on which you should not depend:
19860 @example
19861 AC_MSG_CHECKING([for Xenix])
19862 AC_EGREP_CPP([yes],
19863 [#if defined M_XENIX && !defined M_UNIX
19864   yes
19865 #endif],
19866              [AC_MSG_RESULT([yes]); XENIX=yes],
19867              [AC_MSG_RESULT([no]); XENIX=])
19868 @end example
19869 @noindent
19870 Don't use this macro, the dignified means to check the nature of the
19871 host is using @code{AC_CANONICAL_HOST} (@pxref{Canonicalizing}).
19872 @end defmac
19874 @defmac AC_YYTEXT_POINTER
19875 @acindex{YYTEXT_POINTER}
19876 This macro was renamed @code{AC_DECL_YYTEXT}, which in turn was
19877 integrated into @code{AC_PROG_LEX} (@pxref{AC_PROG_LEX}).
19878 @end defmac
19880 @node Autoconf 1
19881 @section Upgrading From Version 1
19882 @cindex Upgrading autoconf
19883 @cindex Autoconf upgrading
19885 Autoconf version 2 is mostly backward compatible with version 1.
19886 However, it introduces better ways to do some things, and doesn't
19887 support some of the ugly things in version 1.  So, depending on how
19888 sophisticated your @file{configure.ac} files are, you might have to do
19889 some manual work in order to upgrade to version 2.  This chapter points
19890 out some problems to watch for when upgrading.  Also, perhaps your
19891 @command{configure} scripts could benefit from some of the new features in
19892 version 2; the changes are summarized in the file @file{NEWS} in the
19893 Autoconf distribution.
19895 @menu
19896 * Changed File Names::          Files you might rename
19897 * Changed Makefiles::           New things to put in @file{Makefile.in}
19898 * Changed Macros::              Macro calls you might replace
19899 * Changed Results::             Changes in how to check test results
19900 * Changed Macro Writing::       Better ways to write your own macros
19901 @end menu
19903 @node Changed File Names
19904 @subsection Changed File Names
19906 If you have an @file{aclocal.m4} installed with Autoconf (as opposed to
19907 in a particular package's source directory), you must rename it to
19908 @file{acsite.m4}.  @xref{autoconf Invocation}.
19910 If you distribute @file{install.sh} with your package, rename it to
19911 @file{install-sh} so @code{make} builtin rules don't inadvertently
19912 create a file called @file{install} from it.  @code{AC_PROG_INSTALL}
19913 looks for the script under both names, but it is best to use the new name.
19915 If you were using @file{config.h.top}, @file{config.h.bot}, or
19916 @file{acconfig.h}, you still can, but you have less clutter if you
19917 use the @code{AH_} macros.  @xref{Autoheader Macros}.
19919 @node Changed Makefiles
19920 @subsection Changed Makefiles
19922 Add @samp{@@CFLAGS@@}, @samp{@@CPPFLAGS@@}, and @samp{@@LDFLAGS@@} in
19923 your @file{Makefile.in} files, so they can take advantage of the values
19924 of those variables in the environment when @command{configure} is run.
19925 Doing this isn't necessary, but it's a convenience for users.
19927 Also add @samp{@@configure_input@@} in a comment to each input file for
19928 @code{AC_OUTPUT}, so that the output files contain a comment saying
19929 they were produced by @command{configure}.  Automatically selecting the
19930 right comment syntax for all the kinds of files that people call
19931 @code{AC_OUTPUT} on became too much work.
19933 Add @file{config.log} and @file{config.cache} to the list of files you
19934 remove in @code{distclean} targets.
19936 If you have the following in @file{Makefile.in}:
19938 @example
19939 prefix = /usr/local
19940 exec_prefix = $(prefix)
19941 @end example
19943 @noindent
19944 you must change it to:
19946 @example
19947 prefix = @@prefix@@
19948 exec_prefix = @@exec_prefix@@
19949 @end example
19951 @noindent
19952 The old behavior of replacing those variables without @samp{@@}
19953 characters around them has been removed.
19955 @node Changed Macros
19956 @subsection Changed Macros
19958 Many of the macros were renamed in Autoconf version 2.  You can still
19959 use the old names, but the new ones are clearer, and it's easier to find
19960 the documentation for them.  @xref{Obsolete Macros}, for a table showing the
19961 new names for the old macros.  Use the @command{autoupdate} program to
19962 convert your @file{configure.ac} to using the new macro names.
19963 @xref{autoupdate Invocation}.
19965 Some macros have been superseded by similar ones that do the job better,
19966 but are not call-compatible.  If you get warnings about calling obsolete
19967 macros while running @command{autoconf}, you may safely ignore them, but
19968 your @command{configure} script generally works better if you follow
19969 the advice that is printed about what to replace the obsolete macros with.  In
19970 particular, the mechanism for reporting the results of tests has
19971 changed.  If you were using @command{echo} or @code{AC_VERBOSE} (perhaps
19972 via @code{AC_COMPILE_CHECK}), your @command{configure} script's output
19973 looks better if you switch to @code{AC_MSG_CHECKING} and
19974 @code{AC_MSG_RESULT}.  @xref{Printing Messages}.  Those macros work best
19975 in conjunction with cache variables.  @xref{Caching Results}.
19979 @node Changed Results
19980 @subsection Changed Results
19982 If you were checking the results of previous tests by examining the
19983 shell variable @code{DEFS}, you need to switch to checking the values of
19984 the cache variables for those tests.  @code{DEFS} no longer exists while
19985 @command{configure} is running; it is only created when generating output
19986 files.  This difference from version 1 is because properly quoting the
19987 contents of that variable turned out to be too cumbersome and
19988 inefficient to do every time @code{AC_DEFINE} is called.  @xref{Cache
19989 Variable Names}.
19991 For example, here is a @file{configure.ac} fragment written for Autoconf
19992 version 1:
19994 @example
19995 AC_HAVE_FUNCS(syslog)
19996 case "$DEFS" in
19997 *-DHAVE_SYSLOG*) ;;
19998 *) # syslog is not in the default libraries.  See if it's in some other.
19999   saved_LIBS="$LIBS"
20000   for lib in bsd socket inet; do
20001     AC_CHECKING(for syslog in -l$lib)
20002     LIBS="-l$lib $saved_LIBS"
20003     AC_HAVE_FUNCS(syslog)
20004     case "$DEFS" in
20005     *-DHAVE_SYSLOG*) break ;;
20006     *) ;;
20007     esac
20008     LIBS="$saved_LIBS"
20009   done ;;
20010 esac
20011 @end example
20013 Here is a way to write it for version 2:
20015 @example
20016 AC_CHECK_FUNCS([syslog])
20017 if test $ac_cv_func_syslog = no; then
20018   # syslog is not in the default libraries.  See if it's in some other.
20019   for lib in bsd socket inet; do
20020     AC_CHECK_LIB([$lib], [syslog], [AC_DEFINE([HAVE_SYSLOG])
20021       LIBS="-l$lib $LIBS"; break])
20022   done
20024 @end example
20026 If you were working around bugs in @code{AC_DEFINE_UNQUOTED} by adding
20027 backslashes before quotes, you need to remove them.  It now works
20028 predictably, and does not treat quotes (except back quotes) specially.
20029 @xref{Setting Output Variables}.
20031 All of the Boolean shell variables set by Autoconf macros now use
20032 @samp{yes} for the true value.  Most of them use @samp{no} for false,
20033 though for backward compatibility some use the empty string instead.  If
20034 you were relying on a shell variable being set to something like 1 or
20035 @samp{t} for true, you need to change your tests.
20037 @node Changed Macro Writing
20038 @subsection Changed Macro Writing
20040 When defining your own macros, you should now use @code{AC_DEFUN}
20041 instead of @code{define}.  @code{AC_DEFUN} automatically calls
20042 @code{AC_PROVIDE} and ensures that macros called via @code{AC_REQUIRE}
20043 do not interrupt other macros, to prevent nested @samp{checking@dots{}}
20044 messages on the screen.  There's no actual harm in continuing to use the
20045 older way, but it's less convenient and attractive.  @xref{Macro
20046 Definitions}.
20048 You probably looked at the macros that came with Autoconf as a guide for
20049 how to do things.  It would be a good idea to take a look at the new
20050 versions of them, as the style is somewhat improved and they take
20051 advantage of some new features.
20053 If you were doing tricky things with undocumented Autoconf internals
20054 (macros, variables, diversions), check whether you need to change
20055 anything to account for changes that have been made.  Perhaps you can
20056 even use an officially supported technique in version 2 instead of
20057 kludging.  Or perhaps not.
20059 To speed up your locally written feature tests, add caching to them.
20060 See whether any of your tests are of general enough usefulness to
20061 encapsulate them into macros that you can share.
20064 @node Autoconf 2.13
20065 @section Upgrading From Version 2.13
20066 @cindex Upgrading autoconf
20067 @cindex Autoconf upgrading
20069 The introduction of the previous section (@pxref{Autoconf 1}) perfectly
20070 suits this section@enddots{}
20072 @quotation
20073 Autoconf version 2.50 is mostly backward compatible with version 2.13.
20074 However, it introduces better ways to do some things, and doesn't
20075 support some of the ugly things in version 2.13.  So, depending on how
20076 sophisticated your @file{configure.ac} files are, you might have to do
20077 some manual work in order to upgrade to version 2.50.  This chapter
20078 points out some problems to watch for when upgrading.  Also, perhaps
20079 your @command{configure} scripts could benefit from some of the new
20080 features in version 2.50; the changes are summarized in the file
20081 @file{NEWS} in the Autoconf distribution.
20082 @end quotation
20084 @menu
20085 * Changed Quotation::           Broken code which used to work
20086 * New Macros::                  Interaction with foreign macros
20087 * Hosts and Cross-Compilation::  Bugward compatibility kludges
20088 * AC_LIBOBJ vs LIBOBJS::        LIBOBJS is a forbidden token
20089 * AC_FOO_IFELSE vs AC_TRY_FOO::  A more generic scheme for testing sources
20090 @end menu
20092 @node Changed Quotation
20093 @subsection Changed Quotation
20095 The most important changes are invisible to you: the implementation of
20096 most macros have completely changed.  This allowed more factorization of
20097 the code, better error messages, a higher uniformity of the user's
20098 interface etc.  Unfortunately, as a side effect, some construct which
20099 used to (miraculously) work might break starting with Autoconf 2.50.
20100 The most common culprit is bad quotation.
20102 For instance, in the following example, the message is not properly
20103 quoted:
20105 @example
20106 AC_INIT
20107 AC_CHECK_HEADERS(foo.h, ,
20108   AC_MSG_ERROR(cannot find foo.h, bailing out))
20109 AC_OUTPUT
20110 @end example
20112 @noindent
20113 Autoconf 2.13 simply ignores it:
20115 @example
20116 $ @kbd{autoconf-2.13; ./configure --silent}
20117 creating cache ./config.cache
20118 configure: error: cannot find foo.h
20120 @end example
20122 @noindent
20123 while Autoconf 2.50 produces a broken @file{configure}:
20125 @example
20126 $ @kbd{autoconf-2.50; ./configure --silent}
20127 configure: error: cannot find foo.h
20128 ./configure: exit: bad non-numeric arg `bailing'
20129 ./configure: exit: bad non-numeric arg `bailing'
20131 @end example
20133 The message needs to be quoted, and the @code{AC_MSG_ERROR} invocation
20134 too!
20136 @example
20137 AC_INIT([Example], [1.0], [bug-example@@example.org])
20138 AC_CHECK_HEADERS([foo.h], [],
20139   [AC_MSG_ERROR([cannot find foo.h, bailing out])])
20140 AC_OUTPUT
20141 @end example
20143 Many many (and many more) Autoconf macros were lacking proper quotation,
20144 including no less than@dots{} @code{AC_DEFUN} itself!
20146 @example
20147 $ @kbd{cat configure.in}
20148 AC_DEFUN([AC_PROG_INSTALL],
20149 [# My own much better version
20151 AC_INIT
20152 AC_PROG_INSTALL
20153 AC_OUTPUT
20154 $ @kbd{autoconf-2.13}
20155 autoconf: Undefined macros:
20156 ***BUG in Autoconf--please report*** AC_FD_MSG
20157 ***BUG in Autoconf--please report*** AC_EPI
20158 configure.in:1:AC_DEFUN([AC_PROG_INSTALL],
20159 configure.in:5:AC_PROG_INSTALL
20160 $ @kbd{autoconf-2.50}
20162 @end example
20165 @node New Macros
20166 @subsection New Macros
20168 @cindex undefined macro
20169 @cindex @code{_m4_divert_diversion}
20171 While Autoconf was relatively dormant in the late 1990s, Automake
20172 provided Autoconf-like macros for a while.  Starting with Autoconf 2.50
20173 in 2001, Autoconf provided
20174 versions of these macros, integrated in the @code{AC_} namespace,
20175 instead of @code{AM_}.  But in order to ease the upgrading via
20176 @command{autoupdate}, bindings to such @code{AM_} macros are provided.
20178 Unfortunately older versions of Automake (e.g., Automake 1.4)
20179 did not quote the names of these macros.
20180 Therefore, when @command{m4} finds something like
20181 @samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, @dots{})} in @file{aclocal.m4},
20182 @code{AM_TYPE_PTRDIFF_T} is
20183 expanded, replaced with its Autoconf definition.
20185 Fortunately Autoconf catches pre-@code{AC_INIT} expansions, and
20186 complains, in its own words:
20188 @example
20189 $ @kbd{cat configure.ac}
20190 AC_INIT([Example], [1.0], [bug-example@@example.org])
20191 AM_TYPE_PTRDIFF_T
20192 $ @kbd{aclocal-1.4}
20193 $ @kbd{autoconf}
20194 aclocal.m4:17: error: m4_defn: undefined macro: _m4_divert_diversion
20195 aclocal.m4:17: the top level
20196 autom4te: m4 failed with exit status: 1
20198 @end example
20200 Modern versions of Automake no longer define most of these
20201 macros, and properly quote the names of the remaining macros.
20202 If you must use an old Automake, do not depend upon macros from Automake
20203 as it is simply not its job
20204 to provide macros (but the one it requires itself):
20206 @example
20207 $ @kbd{cat configure.ac}
20208 AC_INIT([Example], [1.0], [bug-example@@example.org])
20209 AM_TYPE_PTRDIFF_T
20210 $ @kbd{rm aclocal.m4}
20211 $ @kbd{autoupdate}
20212 autoupdate: `configure.ac' is updated
20213 $ @kbd{cat configure.ac}
20214 AC_INIT([Example], [1.0], [bug-example@@example.org])
20215 AC_CHECK_TYPES([ptrdiff_t])
20216 $ @kbd{aclocal-1.4}
20217 $ @kbd{autoconf}
20219 @end example
20222 @node Hosts and Cross-Compilation
20223 @subsection Hosts and Cross-Compilation
20224 @cindex Cross compilation
20226 Based on the experience of compiler writers, and after long public
20227 debates, many aspects of the cross-compilation chain have changed:
20229 @itemize @minus
20230 @item
20231 the relationship between the build, host, and target architecture types,
20233 @item
20234 the command line interface for specifying them to @command{configure},
20236 @item
20237 the variables defined in @command{configure},
20239 @item
20240 the enabling of cross-compilation mode.
20241 @end itemize
20243 @sp 1
20245 The relationship between build, host, and target have been cleaned up:
20246 the chain of default is now simply: target defaults to host, host to
20247 build, and build to the result of @command{config.guess}.  Nevertheless,
20248 in order to ease the transition from 2.13 to 2.50, the following
20249 transition scheme is implemented.  @emph{Do not rely on it}, as it will
20250 be completely disabled in a couple of releases (we cannot keep it, as it
20251 proves to cause more problems than it cures).
20253 They all default to the result of running @command{config.guess}, unless
20254 you specify either @option{--build} or @option{--host}.  In this case,
20255 the default becomes the system type you specified.  If you specify both,
20256 and they're different, @command{configure} enters cross compilation
20257 mode, so it doesn't run any tests that require execution.
20259 Hint: if you mean to override the result of @command{config.guess},
20260 prefer @option{--build} over @option{--host}.  In the future,
20261 @option{--host} will not override the name of the build system type.
20262 Whenever you specify @option{--host}, be sure to specify @option{--build}
20263 too.
20265 @sp 1
20267 For backward compatibility, @command{configure} accepts a system
20268 type as an option by itself.  Such an option overrides the
20269 defaults for build, host, and target system types.  The following
20270 configure statement configures a cross toolchain that runs on
20271 Net@acronym{BSD}/alpha but generates code for @acronym{GNU} Hurd/sparc,
20272 which is also the build platform.
20274 @example
20275 ./configure --host=alpha-netbsd sparc-gnu
20276 @end example
20278 @sp 1
20280 In Autoconf 2.13 and before, the variables @code{build}, @code{host},
20281 and @code{target} had a different semantics before and after the
20282 invocation of @code{AC_CANONICAL_BUILD} etc.  Now, the argument of
20283 @option{--build} is strictly copied into @code{build_alias}, and is left
20284 empty otherwise.  After the @code{AC_CANONICAL_BUILD}, @code{build} is
20285 set to the canonicalized build type.  To ease the transition, before,
20286 its contents is the same as that of @code{build_alias}.  Do @emph{not}
20287 rely on this broken feature.
20289 For consistency with the backward compatibility scheme exposed above,
20290 when @option{--host} is specified but @option{--build} isn't, the build
20291 system is assumed to be the same as @option{--host}, and
20292 @samp{build_alias} is set to that value.  Eventually, this
20293 historically incorrect behavior will go away.
20295 @sp 1
20297 The former scheme to enable cross-compilation proved to cause more harm
20298 than good, in particular, it used to be triggered too easily, leaving
20299 regular end users puzzled in front of cryptic error messages.
20300 @command{configure} could even enter cross-compilation mode only
20301 because the compiler was not functional.  This is mainly because
20302 @command{configure} used to try to detect cross-compilation, instead of
20303 waiting for an explicit flag from the user.
20305 Now, @command{configure} enters cross-compilation mode if and only if
20306 @option{--host} is passed.
20308 That's the short documentation.  To ease the transition between 2.13 and
20309 its successors, a more complicated scheme is implemented.  @emph{Do not
20310 rely on the following}, as it will be removed in the near future.
20312 If you specify @option{--host}, but not @option{--build}, when
20313 @command{configure} performs the first compiler test it tries to run
20314 an executable produced by the compiler.  If the execution fails, it
20315 enters cross-compilation mode.  This is fragile.  Moreover, by the time
20316 the compiler test is performed, it may be too late to modify the
20317 build-system type: other tests may have already been performed.
20318 Therefore, whenever you specify @option{--host}, be sure to specify
20319 @option{--build} too.
20321 @example
20322 ./configure --build=i686-pc-linux-gnu --host=m68k-coff
20323 @end example
20325 @noindent
20326 enters cross-compilation mode.  The former interface, which
20327 consisted in setting the compiler to a cross-compiler without informing
20328 @command{configure} is obsolete.  For instance, @command{configure}
20329 fails if it can't run the code generated by the specified compiler if you
20330 configure as follows:
20332 @example
20333 ./configure CC=m68k-coff-gcc
20334 @end example
20337 @node AC_LIBOBJ vs LIBOBJS
20338 @subsection @code{AC_LIBOBJ} vs.@: @code{LIBOBJS}
20340 Up to Autoconf 2.13, the replacement of functions was triggered via the
20341 variable @code{LIBOBJS}.  Since Autoconf 2.50, the macro
20342 @code{AC_LIBOBJ} should be used instead (@pxref{Generic Functions}).
20343 Starting at Autoconf 2.53, the use of @code{LIBOBJS} is an error.
20345 This change is mandated by the unification of the @acronym{GNU} Build System
20346 components.  In particular, the various fragile techniques used to parse
20347 a @file{configure.ac} are all replaced with the use of traces.  As a
20348 consequence, any action must be traceable, which obsoletes critical
20349 variable assignments.  Fortunately, @code{LIBOBJS} was the only problem,
20350 and it can even be handled gracefully (read, ``without your having to
20351 change something'').
20353 There were two typical uses of @code{LIBOBJS}: asking for a replacement
20354 function, and adjusting @code{LIBOBJS} for Automake and/or Libtool.
20356 @sp 1
20358 As for function replacement, the fix is immediate: use
20359 @code{AC_LIBOBJ}.  For instance:
20361 @example
20362 LIBOBJS="$LIBOBJS fnmatch.o"
20363 LIBOBJS="$LIBOBJS malloc.$ac_objext"
20364 @end example
20366 @noindent
20367 should be replaced with:
20369 @example
20370 AC_LIBOBJ([fnmatch])
20371 AC_LIBOBJ([malloc])
20372 @end example
20374 @sp 1
20376 @ovindex LIBOBJDIR
20377 When used with Automake 1.10 or newer, a suitable value for
20378 @code{LIBOBJDIR} is set so that the @code{LIBOBJS} and @code{LTLIBOBJS}
20379 can be referenced from any @file{Makefile.am}.  Even without Automake,
20380 arranging for @code{LIBOBJDIR} to be set correctly enables
20381 referencing @code{LIBOBJS} and @code{LTLIBOBJS} in another directory.
20382 The @code{LIBOBJDIR} feature is experimental.
20385 @node AC_FOO_IFELSE vs AC_TRY_FOO
20386 @subsection @code{AC_FOO_IFELSE} vs.@: @code{AC_TRY_FOO}
20388 Since Autoconf 2.50, internal codes uses @code{AC_PREPROC_IFELSE},
20389 @code{AC_COMPILE_IFELSE}, @code{AC_LINK_IFELSE}, and
20390 @code{AC_RUN_IFELSE} on one hand and @code{AC_LANG_SOURCES},
20391 and @code{AC_LANG_PROGRAM} on the other hand instead of the deprecated
20392 @code{AC_TRY_CPP}, @code{AC_TRY_COMPILE}, @code{AC_TRY_LINK}, and
20393 @code{AC_TRY_RUN}.  The motivations where:
20394 @itemize @minus
20395 @item
20396 a more consistent interface: @code{AC_TRY_COMPILE} etc.@: were double
20397 quoting their arguments;
20399 @item
20400 the combinatoric explosion is solved by decomposing on the one hand the
20401 generation of sources, and on the other hand executing the program;
20403 @item
20404 this scheme helps supporting more languages than plain C and C++.
20405 @end itemize
20407 In addition to the change of syntax, the philosophy has changed too:
20408 while emphasis was put on speed at the expense of accuracy, today's
20409 Autoconf promotes accuracy of the testing framework at, ahem@dots{}, the
20410 expense of speed.
20413 As a perfect example of what is @emph{not} to be done, here is how to
20414 find out whether a header file contains a particular declaration, such
20415 as a typedef, a structure, a structure member, or a function.  Use
20416 @code{AC_EGREP_HEADER} instead of running @code{grep} directly on the
20417 header file; on some systems the symbol might be defined in another
20418 header file that the file you are checking includes.
20420 As a (bad) example, here is how you should not check for C preprocessor
20421 symbols, either defined by header files or predefined by the C
20422 preprocessor: using @code{AC_EGREP_CPP}:
20424 @example
20425 @group
20426 AC_EGREP_CPP(yes,
20427 [#ifdef _AIX
20428   yes
20429 #endif
20430 ], is_aix=yes, is_aix=no)
20431 @end group
20432 @end example
20434 The above example, properly written would (i) use
20435 @code{AC_LANG_PROGRAM}, and (ii) run the compiler:
20437 @example
20438 @group
20439 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
20440 [[#ifndef _AIX
20441  error: This isn't AIX!
20442 #endif
20443 ]])],
20444                    [is_aix=yes],
20445                    [is_aix=no])
20446 @end group
20447 @end example
20450 @c ============================= Generating Test Suites with Autotest
20452 @node Using Autotest
20453 @chapter Generating Test Suites with Autotest
20455 @cindex Autotest
20457 @display
20458 @strong{N.B.: This section describes an experimental feature which will
20459 be part of Autoconf in a forthcoming release.  Although we believe
20460 Autotest is stabilizing, this documentation describes an interface which
20461 might change in the future: do not depend upon Autotest without
20462 subscribing to the Autoconf mailing lists.}
20463 @end display
20465 It is paradoxical that portable projects depend on nonportable tools
20466 to run their test suite.  Autoconf by itself is the paragon of this
20467 problem: although it aims at perfectly portability, up to 2.13 its
20468 test suite was using Deja@acronym{GNU}, a rich and complex testing
20469 framework, but which is far from being standard on Posix systems.
20470 Worse yet, it was likely to be missing on the most fragile platforms,
20471 the very platforms that are most likely to torture Autoconf and
20472 exhibit deficiencies.
20474 To circumvent this problem, many package maintainers have developed their
20475 own testing framework, based on simple shell scripts whose sole outputs
20476 are exit status values describing whether the test succeeded.  Most of
20477 these tests share common patterns, and this can result in lots of
20478 duplicated code and tedious maintenance.
20480 Following exactly the same reasoning that yielded to the inception of
20481 Autoconf, Autotest provides a test suite generation framework, based on
20482 M4 macros building a portable shell script.  The suite itself is
20483 equipped with automatic logging and tracing facilities which greatly
20484 diminish the interaction with bug reporters, and simple timing reports.
20486 Autoconf itself has been using Autotest for years, and we do attest that
20487 it has considerably improved the strength of the test suite and the
20488 quality of bug reports.  Other projects are known to use some generation
20489 of Autotest, such as Bison, Free Recode, Free Wdiff, @acronym{GNU} Tar, each of
20490 them with different needs, and this usage has validated Autotest as a general
20491 testing framework.
20493 Nonetheless, compared to Deja@acronym{GNU}, Autotest is inadequate for
20494 interactive tool testing, which is probably its main limitation.
20496 @menu
20497 * Using an Autotest Test Suite::  Autotest and the user
20498 * Writing Testsuites::          Autotest macros
20499 * testsuite Invocation::        Running @command{testsuite} scripts
20500 * Making testsuite Scripts::    Using autom4te to create @command{testsuite}
20501 @end menu
20503 @node Using an Autotest Test Suite
20504 @section Using an Autotest Test Suite
20506 @menu
20507 * testsuite Scripts::           The concepts of Autotest
20508 * Autotest Logs::               Their contents
20509 @end menu
20511 @node testsuite Scripts
20512 @subsection @command{testsuite} Scripts
20514 @cindex @command{testsuite}
20516 Generating testing or validation suites using Autotest is rather easy.
20517 The whole validation suite is held in a file to be processed through
20518 @command{autom4te}, itself using @acronym{GNU} M4 under the scene, to
20519 produce a stand-alone Bourne shell script which then gets distributed.
20520 Neither @command{autom4te} nor @acronym{GNU} M4 are needed at
20521 the installer's end.
20523 @cindex test group
20524 Each test of the validation suite should be part of some test group.  A
20525 @dfn{test group} is a sequence of interwoven tests that ought to be
20526 executed together, usually because one test in the group creates data
20527 files than a later test in the same group needs to read.  Complex test
20528 groups make later debugging more tedious.  It is much better to
20529 keep only a few tests per test group.  Ideally there is only one test
20530 per test group.
20532 For all but the simplest packages, some file such as @file{testsuite.at}
20533 does not fully hold all test sources, as these are often easier to
20534 maintain in separate files.  Each of these separate files holds a single
20535 test group, or a sequence of test groups all addressing some common
20536 functionality in the package.  In such cases, @file{testsuite.at}
20537 merely initializes the validation suite, and sometimes does elementary
20538 health checking, before listing include statements for all other test
20539 files.  The special file @file{package.m4}, containing the
20540 identification of the package, is automatically included if found.
20542 A convenient alternative consists in moving all the global issues
20543 (local Autotest macros, elementary health checking, and @code{AT_INIT}
20544 invocation) into the file @code{local.at}, and making
20545 @file{testsuite.at} be a simple list of @code{m4_include} of sub test
20546 suites.  In such case, generating the whole test suite or pieces of it
20547 is only a matter of choosing the @command{autom4te} command line
20548 arguments.
20550 The validation scripts that Autotest produces are by convention called
20551 @command{testsuite}.  When run, @command{testsuite} executes each test
20552 group in turn, producing only one summary line per test to say if that
20553 particular test succeeded or failed.  At end of all tests, summarizing
20554 counters get printed.  One debugging directory is left for each test
20555 group which failed, if any: such directories are named
20556 @file{testsuite.dir/@var{nn}}, where @var{nn} is the sequence number of
20557 the test group, and they include:
20559 @itemize @bullet
20560 @item a debugging script named @file{run} which reruns the test in
20561 @dfn{debug mode} (@pxref{testsuite Invocation}).  The automatic generation
20562 of debugging scripts has the purpose of easing the chase for bugs.
20564 @item all the files created with @code{AT_DATA}
20566 @item a log of the run, named @file{testsuite.log}
20567 @end itemize
20569 In the ideal situation, none of the tests fail, and consequently no
20570 debugging directory is left behind for validation.
20572 It often happens in practice that individual tests in the validation
20573 suite need to get information coming out of the configuration process.
20574 Some of this information, common for all validation suites, is provided
20575 through the file @file{atconfig}, automatically created by
20576 @code{AC_CONFIG_TESTDIR}.  For configuration informations which your
20577 testing environment specifically needs, you might prepare an optional
20578 file named @file{atlocal.in}, instantiated by @code{AC_CONFIG_FILES}.
20579 The configuration process produces @file{atconfig} and @file{atlocal}
20580 out of these two input files, and these two produced files are
20581 automatically read by the @file{testsuite} script.
20583 Here is a diagram showing the relationship between files.
20585 @noindent
20586 Files used in preparing a software package for distribution:
20588 @example
20589                 [package.m4] -->.
20590                                  \
20591 subfile-1.at ->.  [local.at] ---->+
20592     ...         \                  \
20593 subfile-i.at ---->-- testsuite.at -->-- autom4te* -->testsuite
20594     ...         /
20595 subfile-n.at ->'
20596 @end example
20598 @noindent
20599 Files used in configuring a software package:
20601 @example
20602                                      .--> atconfig
20603                                     /
20604 [atlocal.in] -->  config.status* --<
20605                                     \
20606                                      `--> [atlocal]
20607 @end example
20609 @noindent
20610 Files created during the test suite execution:
20612 @example
20613 atconfig -->.                    .--> testsuite.log
20614              \                  /
20615               >-- testsuite* --<
20616              /                  \
20617 [atlocal] ->'                    `--> [testsuite.dir]
20618 @end example
20621 @node Autotest Logs
20622 @subsection Autotest Logs
20624 When run, the test suite creates a log file named after itself, e.g., a
20625 test suite named @command{testsuite} creates @file{testsuite.log}.  It
20626 contains a lot of information, usually more than maintainers actually
20627 need, but therefore most of the time it contains all that is needed:
20629 @table @asis
20630 @item command line arguments
20631 @c akim s/to consist in/to consist of/
20632 A bad but unfortunately widespread habit consists of
20633 setting environment variables before the command, such as in
20634 @samp{CC=my-home-grown-cc ./testsuite}.  The test suite does not
20635 know this change, hence (i) it cannot report it to you, and (ii)
20636 it cannot preserve the value of @code{CC} for subsequent runs.
20637 Autoconf faced exactly the same problem, and solved it by asking
20638 users to pass the variable definitions as command line arguments.
20639 Autotest requires this rule, too, but has no means to enforce it; the log
20640 then contains a trace of the variables that were changed by the user.
20642 @item @file{ChangeLog} excerpts
20643 The topmost lines of all the @file{ChangeLog} files found in the source
20644 hierarchy.  This is especially useful when bugs are reported against
20645 development versions of the package, since the version string does not
20646 provide sufficient information to know the exact state of the sources
20647 the user compiled.  Of course, this relies on the use of a
20648 @file{ChangeLog}.
20650 @item build machine
20651 Running a test suite in a cross-compile environment is not an easy task,
20652 since it would mean having the test suite run on a machine @var{build},
20653 while running programs on a machine @var{host}.  It is much simpler to
20654 run both the test suite and the programs on @var{host}, but then, from
20655 the point of view of the test suite, there remains a single environment,
20656 @var{host} = @var{build}.  The log contains relevant information on the
20657 state of the build machine, including some important environment
20658 variables.
20659 @c FIXME: How about having an M4sh macro to say `hey, log the value
20660 @c of `@dots{}'?  This would help both Autoconf and Autotest.
20662 @item tested programs
20663 The absolute file name and answers to @option{--version} of the tested
20664 programs (see @ref{Writing Testsuites}, @code{AT_TESTED}).
20666 @item configuration log
20667 The contents of @file{config.log}, as created by @command{configure},
20668 are appended.  It contains the configuration flags and a detailed report
20669 on the configuration itself.
20670 @end table
20673 @node Writing Testsuites
20674 @section Writing @file{testsuite.at}
20676 The @file{testsuite.at} is a Bourne shell script making use of special
20677 Autotest M4 macros.  It often contains a call to @code{AT_INIT} near
20678 its beginning followed by one call to @code{m4_include} per source file
20679 for tests.  Each such included file, or the remainder of
20680 @file{testsuite.at} if include files are not used, contain a sequence of
20681 test groups.  Each test group begins with a call to @code{AT_SETUP},
20682 then an arbitrary number of shell commands or calls to @code{AT_CHECK},
20683 and then completes with a call to @code{AT_CLEANUP}.  Multiple test
20684 groups can be categorized by a call to @code{AT_BANNER}.
20686 @defmac AT_INIT (@ovar{name})
20687 @atindex{INIT}
20688 @c FIXME: Not clear, plus duplication of the information.
20689 Initialize Autotest.  Giving a @var{name} to the test suite is
20690 encouraged if your package includes several test suites.  In any case,
20691 the test suite always displays the package name and version.  It also
20692 inherits the package bug report address.
20693 @end defmac
20695 @defmac AT_COPYRIGHT (@var{copyright-notice})
20696 @atindex{COPYRIGHT}
20697 @cindex Copyright Notice
20698 State that, in addition to the Free Software Foundation's copyright on
20699 the Autotest macros, parts of your test suite are covered by
20700 @var{copyright-notice}.
20702 The @var{copyright-notice} shows up in both the head of
20703 @command{testsuite} and in @samp{testsuite --version}.
20704 @end defmac
20706 @defmac AT_TESTED (@var{executables})
20707 @atindex{TESTED}
20708 Log the file name and answer to @option{--version} of each program in
20709 space-separated list @var{executables}.  Several invocations register
20710 new executables, in other words, don't fear registering one program
20711 several times.
20712 @end defmac
20714 Autotest test suites rely on @env{PATH} to find the tested program.
20715 This avoids the need to generate absolute names of the various tools, and
20716 makes it possible to test installed programs.  Therefore, knowing which
20717 programs are being exercised is crucial to understanding problems in
20718 the test suite itself, or its occasional misuses.  It is a good idea to
20719 also subscribe foreign programs you depend upon, to avoid incompatible
20720 diagnostics.
20722 @sp 1
20724 @defmac AT_BANNER (@var{test-category-name})
20725 @atindex{BANNER}
20726 This macro identifies the start of a category of related test groups.
20727 When the resulting @file{testsuite} is invoked with more than one test
20728 group to run, its output will include a banner containing
20729 @var{test-category-name} prior to any tests run from that category.  The
20730 banner should be no more than about 40 or 50 characters.  A blank banner
20731 will not print, effectively ending a category and letting subsequent
20732 test groups behave as though they are uncategorized when run in
20733 isolation.
20734 @end defmac
20736 @defmac AT_SETUP (@var{test-group-name})
20737 @atindex{SETUP}
20738 This macro starts a group of related tests, all to be executed in the
20739 same subshell.  It accepts a single argument, which holds a few words
20740 (no more than about 30 or 40 characters) quickly describing the purpose
20741 of the test group being started.  @var{test-group-name} must not expand
20742 to unbalanced quotes, although quadrigraphs can be used.
20743 @end defmac
20745 @defmac AT_KEYWORDS (@var{keywords})
20746 @atindex{KEYWORDS}
20747 Associate the space-separated list of @var{keywords} to the enclosing
20748 test group.  This makes it possible to run ``slices'' of the test suite.
20749 For instance, if some of your test groups exercise some @samp{foo}
20750 feature, then using @samp{AT_KEYWORDS(foo)} lets you run
20751 @samp{./testsuite -k foo} to run exclusively these test groups.  The
20752 @var{title} of the test group is automatically recorded to
20753 @code{AT_KEYWORDS}.
20755 Several invocations within a test group accumulate new keywords.  In
20756 other words, don't fear registering the same keyword several times in a
20757 test group.
20758 @end defmac
20760 @defmac AT_CAPTURE_FILE (@var{file})
20761 @atindex{CAPTURE_FILE}
20762 If the current test group fails, log the contents of @var{file}.
20763 Several identical calls within one test group have no additional effect.
20764 @end defmac
20766 @defmac AT_XFAIL_IF (@var{shell-condition})
20767 @atindex{XFAIL_IF}
20768 Determine whether the test is expected to fail because it is a known
20769 bug (for unsupported features, you should skip the test).
20770 @var{shell-condition} is a shell expression such as a @code{test}
20771 command; you can instantiate this macro many times from within the
20772 same test group, and one of the conditions is enough to turn
20773 the test into an expected failure.
20774 @end defmac
20776 @defmac AT_CLEANUP
20777 @atindex{CLEANUP}
20778 End the current test group.
20779 @end defmac
20781 @sp 1
20783 @defmac AT_DATA (@var{file}, @var{contents})
20784 @atindex{DATA}
20785 Initialize an input data @var{file} with given @var{contents}.  Of
20786 course, the @var{contents} have to be properly quoted between square
20787 brackets to protect against included commas or spurious M4
20788 expansion.  The contents must end with an end of line.  @var{file} must
20789 be a single shell word that expands into a single file name.
20790 @end defmac
20792 @defmac AT_CHECK (@var{commands}, @dvar{status, 0}, @dvar{stdout, }, @
20793   @dvar{stderr, }, @ovar{run-if-fail}, @ovar{run-if-pass})
20794 @atindex{CHECK}
20795 Execute a test by performing given shell @var{commands}.  These commands
20796 should normally exit with @var{status}, while producing expected
20797 @var{stdout} and @var{stderr} contents.  If @var{commands} exit with
20798 status 77, then the whole test group is skipped.  Otherwise, if this test
20799 fails, run shell commands @var{run-if-fail} or, if this test passes, run shell
20800 commands @var{run-if-pass}.
20802 This macro must be invoked in between @code{AT_SETUP} and @code{AT_CLEANUP}.
20804 @c Previously, we had this:
20805 @c  The @var{commands} @emph{must not} redirect the standard output, nor the
20806 @c  standard error.
20807 @c to prevent trigerring the double redirect bug on Ultrix, see
20808 @c `File Descriptors'.  This was too restricting, and Ultrix is pretty
20809 @c much dead, so we dropped the limitation; the obvious workaround on
20810 @c Ultrix is to use a working shell there.
20812 If @var{status}, or @var{stdout}, or @var{stderr} is @samp{ignore}, then
20813 the corresponding value is not checked.
20815 The special value @samp{expout} for @var{stdout} means the expected
20816 output of the @var{commands} is the content of the file @file{expout}.
20817 If @var{stdout} is @samp{stdout}, then the standard output of the
20818 @var{commands} is available for further tests in the file @file{stdout}.
20819 Similarly for @var{stderr} with @samp{experr} and @samp{stderr}.
20820 @end defmac
20823 @node testsuite Invocation
20824 @section Running @command{testsuite} Scripts
20825 @cindex @command{testsuite}
20827 Autotest test suites support the following arguments:
20829 @table @option
20830 @item --help
20831 @itemx -h
20832 Display the list of options and exit successfully.
20834 @item --version
20835 @itemx -V
20836 Display the version of the test suite and exit successfully.
20838 @item --directory=@var{dir}
20839 @itemx -C @var{dir}
20840 Change the current directory to @var{dir} before creating any files.
20841 Useful for running the testsuite in a subdirectory from a top-level
20842 Makefile.
20844 @item --clean
20845 @itemx -c
20846 Remove all the files the test suite might have created and exit.  Meant
20847 for @code{clean} Make targets.
20849 @item --list
20850 @itemx -l
20851 List all the tests (or only the selection), including their possible
20852 keywords.
20853 @end table
20855 @sp 1
20857 By default all tests are performed (or described with
20858 @option{--list}) in the default environment first silently, then
20859 verbosely, but the environment, set of tests, and verbosity level can be
20860 tuned:
20862 @table @samp
20863 @item @var{variable}=@var{value}
20864 Set the environment @var{variable} to @var{value}.  Use this rather
20865 than @samp{FOO=foo ./testsuite} as debugging scripts would then run in a
20866 different environment.
20868 @cindex @code{AUTOTEST_PATH}
20869 The variable @code{AUTOTEST_PATH} specifies the testing path to prepend
20870 to @env{PATH}.  Relative directory names (not starting with
20871 @samp{/}) are considered to be relative to the top level of the
20872 package being built.  All directories are made absolute, first
20873 starting from the top level @emph{build} tree, then from the
20874 @emph{source} tree.  For instance @samp{./testsuite
20875 AUTOTEST_PATH=tests:bin} for a @file{/src/foo-1.0} source package built
20876 in @file{/tmp/foo} results in @samp{/tmp/foo/tests:/tmp/foo/bin} and
20877 then @samp{/src/foo-1.0/tests:/src/foo-1.0/bin} being prepended to
20878 @env{PATH}.
20880 @item @var{number}
20881 @itemx @var{number}-@var{number}
20882 @itemx @var{number}-
20883 @itemx -@var{number}
20884 Add the corresponding test groups, with obvious semantics, to the
20885 selection.
20887 @item --keywords=@var{keywords}
20888 @itemx -k @var{keywords}
20889 Add to the selection the test groups with title or keywords (arguments
20890 to @code{AT_SETUP} or @code{AT_KEYWORDS}) that match @emph{all} keywords
20891 of the comma separated list @var{keywords}, case-insensitively.  Use
20892 @samp{!} immediately before the keyword to invert the selection for this
20893 keyword.  By default, the keywords match whole words; enclose them in
20894 @samp{.*} to also match parts of words.
20896 For example, running
20898 @example
20899 @kbd{./testsuite -k 'autoupdate,.*FUNC.*'}
20900 @end example
20902 @noindent
20903 selects all tests tagged @samp{autoupdate} @emph{and} with tags
20904 containing @samp{FUNC} (as in @samp{AC_CHECK_FUNC}, @samp{AC_FUNC_ALLOCA},
20905 etc.), while
20907 @example
20908 @kbd{./testsuite -k '!autoupdate' -k '.*FUNC.*'}
20909 @end example
20911 @noindent
20912 selects all tests not tagged @samp{autoupdate} @emph{or} with tags
20913 containing @samp{FUNC}.
20915 @item --errexit
20916 @itemx -e
20917 If any test fails, immediately abort testing.  It implies
20918 @option{--debug}: post test group clean up, and top-level logging
20919 are inhibited.  This option is meant for the full test
20920 suite, it is not really useful for generated debugging scripts.
20922 @item --verbose
20923 @itemx -v
20924 Force more verbosity in the detailed output of what is being done.  This
20925 is the default for debugging scripts.
20927 @item --debug
20928 @itemx -d
20929 Do not remove the files after a test group was performed ---but they are
20930 still removed @emph{before}, therefore using this option is sane when
20931 running several test groups.  Create debugging scripts.  Do not
20932 overwrite the top-level
20933 log (in order to preserve supposedly existing full log file).  This is
20934 the default for debugging scripts, but it can also be useful to debug
20935 the testsuite itself.
20937 @item --trace
20938 @itemx -x
20939 Trigger shell tracing of the test groups.
20940 @end table
20943 @node Making testsuite Scripts
20944 @section Making @command{testsuite} Scripts
20946 For putting Autotest into movement, you need some configuration and
20947 makefile machinery.  We recommend, at least if your package uses deep or
20948 shallow hierarchies, that you use @file{tests/} as the name of the
20949 directory holding all your tests and their makefile.  Here is a
20950 check list of things to do.
20952 @itemize @minus
20954 @item
20955 @cindex @file{package.m4}
20956 Make sure to create the file @file{package.m4}, which defines the
20957 identity of the package.  It must define @code{AT_PACKAGE_STRING}, the
20958 full signature of the package, and @code{AT_PACKAGE_BUGREPORT}, the
20959 address to which bug reports should be sent.  For sake of completeness,
20960 we suggest that you also define @code{AT_PACKAGE_NAME},
20961 @code{AT_PACKAGE_TARNAME}, and @code{AT_PACKAGE_VERSION}.
20962 @xref{Initializing configure}, for a description of these variables.  We
20963 suggest the following makefile excerpt:
20965 @smallexample
20966 # The `:;' works around a Bash 3.2 bug when the output is not writeable.
20967 $(srcdir)/package.m4: $(top_srcdir)/configure.ac
20968         :;@{ \
20969           echo '# Signature of the current package.' && \
20970           echo 'm4_define([AT_PACKAGE_NAME],      [@@PACKAGE_NAME@@])' && \
20971           echo 'm4_define([AT_PACKAGE_TARNAME],   [@@PACKAGE_TARNAME@@])' && \
20972           echo 'm4_define([AT_PACKAGE_VERSION],   [@@PACKAGE_VERSION@@])' && \
20973           echo 'm4_define([AT_PACKAGE_STRING],    [@@PACKAGE_STRING@@])' && \
20974           echo 'm4_define([AT_PACKAGE_BUGREPORT], [@@PACKAGE_BUGREPORT@@])'; \
20975         @} >'$(srcdir)/package.m4'
20976 @end smallexample
20978 @noindent
20979 Be sure to distribute @file{package.m4} and to put it into the source
20980 hierarchy: the test suite ought to be shipped!
20982 @item
20983 Invoke @code{AC_CONFIG_TESTDIR}.
20985 @defmac AC_CONFIG_TESTDIR (@var{directory}, @dvar{test-path, directory})
20986 @acindex{CONFIG_TESTDIR}
20987 An Autotest test suite is to be configured in @var{directory}.  This
20988 macro requires the instantiation of @file{@var{directory}/atconfig} from
20989 @file{@var{directory}/atconfig.in}, and sets the default
20990 @code{AUTOTEST_PATH} to @var{test-path} (@pxref{testsuite Invocation}).
20991 @end defmac
20993 @item
20994 Still within @file{configure.ac}, as appropriate, ensure that some
20995 @code{AC_CONFIG_FILES} command includes substitution for
20996 @file{tests/atlocal}.
20998 @item
20999 The @file{tests/Makefile.in} should be modified so the validation in
21000 your package is triggered by @samp{make check}.  An example is provided
21001 below.
21002 @end itemize
21004 With Automake, here is a minimal example about how to link @samp{make
21005 check} with a validation suite.
21007 @example
21008 EXTRA_DIST = testsuite.at $(TESTSUITE) atlocal.in
21009 TESTSUITE = $(srcdir)/testsuite
21011 check-local: atconfig atlocal $(TESTSUITE)
21012         $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
21014 installcheck-local: atconfig atlocal $(TESTSUITE)
21015         $(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' \
21016           $(TESTSUITEFLAGS)
21018 clean-local:
21019         test ! -f '$(TESTSUITE)' || \
21020          $(SHELL) '$(TESTSUITE)' --clean
21022 AUTOTEST = $(AUTOM4TE) --language=autotest
21023 $(TESTSUITE): $(srcdir)/testsuite.at
21024         $(AUTOTEST) -I '$(srcdir)' -o $@@.tmp $@@.at
21025         mv $@@.tmp $@@
21026 @end example
21028 You might want to list explicitly the dependencies, i.e., the list of
21029 the files @file{testsuite.at} includes.
21031 If you don't use Automake, you might need to add lines inspired from the
21032 following:
21034 @example
21035 subdir = tests
21037 atconfig: $(top_builddir)/config.status
21038         cd $(top_builddir) && \
21039            $(SHELL) ./config.status $(subdir)/$@@
21041 atlocal: $(srcdir)/atlocal.in $(top_builddir)/config.status
21042         cd $(top_builddir) && \
21043            $(SHELL) ./config.status $(subdir)/$@@
21044 @end example
21046 @noindent
21047 and manage to have @code{$(EXTRA_DIST)} distributed.
21049 If you use Automake, however, you don't need to add a rule to generate
21050 @file{atlocal}.
21052 With all this in place, and if you have not initialized @samp{TESTSUITEFLAGS}
21053 within your makefile, you can fine-tune test suite execution with this
21054 variable, for example:
21056 @example
21057 make check TESTSUITEFLAGS='-v -d -x 75 -k AC_PROG_CC CFLAGS=-g'
21058 @end example
21062 @c =============================== Frequent Autoconf Questions, with answers
21064 @node FAQ
21065 @chapter Frequent Autoconf Questions, with answers
21067 Several questions about Autoconf come up occasionally.  Here some of them
21068 are addressed.
21070 @menu
21071 * Distributing::                Distributing @command{configure} scripts
21072 * Why GNU M4::                  Why not use the standard M4?
21073 * Bootstrapping::               Autoconf and @acronym{GNU} M4 require each other?
21074 * Why Not Imake::               Why @acronym{GNU} uses @command{configure} instead of Imake
21075 * Defining Directories::        Passing @code{datadir} to program
21076 * Autom4te Cache::              What is it?  Can I remove it?
21077 * Present But Cannot Be Compiled::  Compiler and Preprocessor Disagree
21078 @end menu
21080 @node Distributing
21081 @section Distributing @command{configure} Scripts
21082 @cindex License
21084 @display
21085 What are the restrictions on distributing @command{configure}
21086 scripts that Autoconf generates?  How does that affect my
21087 programs that use them?
21088 @end display
21090 There are no restrictions on how the configuration scripts that Autoconf
21091 produces may be distributed or used.  In Autoconf version 1, they were
21092 covered by the @acronym{GNU} General Public License.  We still encourage
21093 software authors to distribute their work under terms like those of the
21094 @acronym{GPL}, but doing so is not required to use Autoconf.
21096 Of the other files that might be used with @command{configure},
21097 @file{config.h.in} is under whatever copyright you use for your
21098 @file{configure.ac}.  @file{config.sub} and @file{config.guess} have an
21099 exception to the @acronym{GPL} when they are used with an Autoconf-generated
21100 @command{configure} script, which permits you to distribute them under the
21101 same terms as the rest of your package.  @file{install-sh} is from the X
21102 Consortium and is not copyrighted.
21104 @node Why GNU M4
21105 @section Why Require @acronym{GNU} M4?
21107 @display
21108 Why does Autoconf require @acronym{GNU} M4?
21109 @end display
21111 Many M4 implementations have hard-coded limitations on the size and
21112 number of macros that Autoconf exceeds.  They also lack several
21113 builtin macros that it would be difficult to get along without in a
21114 sophisticated application like Autoconf, including:
21116 @example
21117 m4_builtin
21118 m4_indir
21119 m4_bpatsubst
21120 __file__
21121 __line__
21122 @end example
21124 Autoconf requires version 1.4.5 or later of @acronym{GNU} M4.
21126 Since only software maintainers need to use Autoconf, and since @acronym{GNU}
21127 M4 is simple to configure and install, it seems reasonable to require
21128 @acronym{GNU} M4 to be installed also.  Many maintainers of @acronym{GNU} and
21129 other free software already have most of the @acronym{GNU} utilities
21130 installed, since they prefer them.
21132 @node Bootstrapping
21133 @section How Can I Bootstrap?
21134 @cindex Bootstrap
21136 @display
21137 If Autoconf requires @acronym{GNU} M4 and @acronym{GNU} M4 has an Autoconf
21138 @command{configure} script, how do I bootstrap?  It seems like a chicken
21139 and egg problem!
21140 @end display
21142 This is a misunderstanding.  Although @acronym{GNU} M4 does come with a
21143 @command{configure} script produced by Autoconf, Autoconf is not required
21144 in order to run the script and install @acronym{GNU} M4.  Autoconf is only
21145 required if you want to change the M4 @command{configure} script, which few
21146 people have to do (mainly its maintainer).
21148 @node Why Not Imake
21149 @section Why Not Imake?
21150 @cindex Imake
21152 @display
21153 Why not use Imake instead of @command{configure} scripts?
21154 @end display
21156 Several people have written addressing this question, so I include
21157 adaptations of their explanations here.
21159 The following answer is based on one written by Richard Pixley:
21161 @quotation
21162 Autoconf generated scripts frequently work on machines that it has
21163 never been set up to handle before.  That is, it does a good job of
21164 inferring a configuration for a new system.  Imake cannot do this.
21166 Imake uses a common database of host specific data.  For X11, this makes
21167 sense because the distribution is made as a collection of tools, by one
21168 central authority who has control over the database.
21170 @acronym{GNU} tools are not released this way.  Each @acronym{GNU} tool has a
21171 maintainer; these maintainers are scattered across the world.  Using a
21172 common database would be a maintenance nightmare.  Autoconf may appear
21173 to be this kind of database, but in fact it is not.  Instead of listing
21174 host dependencies, it lists program requirements.
21176 If you view the @acronym{GNU} suite as a collection of native tools, then the
21177 problems are similar.  But the @acronym{GNU} development tools can be
21178 configured as cross tools in almost any host+target permutation.  All of
21179 these configurations can be installed concurrently.  They can even be
21180 configured to share host independent files across hosts.  Imake doesn't
21181 address these issues.
21183 Imake templates are a form of standardization.  The @acronym{GNU} coding
21184 standards address the same issues without necessarily imposing the same
21185 restrictions.
21186 @end quotation
21189 Here is some further explanation, written by Per Bothner:
21191 @quotation
21192 One of the advantages of Imake is that it easy to generate large
21193 makefiles using the @samp{#include} and macro mechanisms of @command{cpp}.
21194 However, @code{cpp} is not programmable: it has limited conditional
21195 facilities, and no looping.  And @code{cpp} cannot inspect its
21196 environment.
21198 All of these problems are solved by using @code{sh} instead of
21199 @code{cpp}.  The shell is fully programmable, has macro substitution,
21200 can execute (or source) other shell scripts, and can inspect its
21201 environment.
21202 @end quotation
21205 Paul Eggert elaborates more:
21207 @quotation
21208 With Autoconf, installers need not assume that Imake itself is already
21209 installed and working well.  This may not seem like much of an advantage
21210 to people who are accustomed to Imake.  But on many hosts Imake is not
21211 installed or the default installation is not working well, and requiring
21212 Imake to install a package hinders the acceptance of that package on
21213 those hosts.  For example, the Imake template and configuration files
21214 might not be installed properly on a host, or the Imake build procedure
21215 might wrongly assume that all source files are in one big directory
21216 tree, or the Imake configuration might assume one compiler whereas the
21217 package or the installer needs to use another, or there might be a
21218 version mismatch between the Imake expected by the package and the Imake
21219 supported by the host.  These problems are much rarer with Autoconf,
21220 where each package comes with its own independent configuration
21221 processor.
21223 Also, Imake often suffers from unexpected interactions between
21224 @command{make} and the installer's C preprocessor.  The fundamental problem
21225 here is that the C preprocessor was designed to preprocess C programs,
21226 not makefiles.  This is much less of a problem with Autoconf,
21227 which uses the general-purpose preprocessor M4, and where the
21228 package's author (rather than the installer) does the preprocessing in a
21229 standard way.
21230 @end quotation
21233 Finally, Mark Eichin notes:
21235 @quotation
21236 Imake isn't all that extensible, either.  In order to add new features to
21237 Imake, you need to provide your own project template, and duplicate most
21238 of the features of the existing one.  This means that for a sophisticated
21239 project, using the vendor-provided Imake templates fails to provide any
21240 leverage---since they don't cover anything that your own project needs
21241 (unless it is an X11 program).
21243 On the other side, though:
21245 The one advantage that Imake has over @command{configure}:
21246 @file{Imakefile} files tend to be much shorter (likewise, less redundant)
21247 than @file{Makefile.in} files.  There is a fix to this, however---at least
21248 for the Kerberos V5 tree, we've modified things to call in common
21249 @file{post.in} and @file{pre.in} makefile fragments for the
21250 entire tree.  This means that a lot of common things don't have to be
21251 duplicated, even though they normally are in @command{configure} setups.
21252 @end quotation
21255 @node Defining Directories
21256 @section How Do I @code{#define} Installation Directories?
21258 @display
21259 My program needs library files, installed in @code{datadir} and
21260 similar.  If I use
21262 @example
21263 AC_DEFINE_UNQUOTED([DATADIR], [$datadir],
21264   [Define to the read-only architecture-independent
21265    data directory.])
21266 @end example
21268 @noindent
21269 I get
21271 @example
21272 #define DATADIR "$@{prefix@}/share"
21273 @end example
21274 @end display
21276 As already explained, this behavior is on purpose, mandated by the
21277 @acronym{GNU} Coding Standards, see @ref{Installation Directory
21278 Variables}.  There are several means to achieve a similar goal:
21280 @itemize @minus
21281 @item
21282 Do not use @code{AC_DEFINE} but use your makefile to pass the
21283 actual value of @code{datadir} via compilation flags.
21284 @xref{Installation Directory Variables}, for the details.
21286 @item
21287 This solution can be simplified when compiling a program: you may either
21288 extend the @code{CPPFLAGS}:
21290 @example
21291 CPPFLAGS = -DDATADIR='"$(datadir)"' @@CPPFLAGS@@
21292 @end example
21294 @noindent
21295 If you are using Automake, you should use @code{AM_CPPFLAGS} instead:
21297 @example
21298 AM_CPPFLAGS = -DDATADIR='"$(datadir)"'
21299 @end example
21301 @noindent
21302 Alternatively, create a dedicated header file:
21304 @example
21305 DISTCLEANFILES = myprog-paths.h
21306 myprog-paths.h: Makefile
21307         echo '#define DATADIR "$(datadir)"' >$@@
21308 @end example
21310 @item
21311 Use @code{AC_DEFINE} but have @command{configure} compute the literal
21312 value of @code{datadir} and others.  Many people have wrapped macros to
21313 automate this task.  For instance, the macro @code{AC_DEFINE_DIR} from
21314 the @uref{http://autoconf-archive.cryp.to/, Autoconf Macro
21315 Archive}.
21317 This solution does not conform to the @acronym{GNU} Coding Standards.
21319 @item
21320 Note that all the previous solutions hard wire the absolute name of
21321 these directories in the executables, which is not a good property.  You
21322 may try to compute the names relative to @code{prefix}, and try to
21323 find @code{prefix} at runtime, this way your package is relocatable.
21324 @end itemize
21327 @node Autom4te Cache
21328 @section What is @file{autom4te.cache}?
21330 @display
21331 What is this directory @file{autom4te.cache}?  Can I safely remove it?
21332 @end display
21334 In the @acronym{GNU} Build System, @file{configure.ac} plays a central
21335 role and is read by many tools: @command{autoconf} to create
21336 @file{configure}, @command{autoheader} to create @file{config.h.in},
21337 @command{automake} to create @file{Makefile.in}, @command{autoscan} to
21338 check the completeness of @file{configure.ac}, @command{autoreconf} to
21339 check the @acronym{GNU} Build System components that are used.  To
21340 ``read @file{configure.ac}'' actually means to compile it with M4,
21341 which can be a long process for complex @file{configure.ac}.
21343 This is why all these tools, instead of running directly M4, invoke
21344 @command{autom4te} (@pxref{autom4te Invocation}) which, while answering to
21345 a specific demand, stores additional information in
21346 @file{autom4te.cache} for future runs.  For instance, if you run
21347 @command{autoconf}, behind the scenes, @command{autom4te} also
21348 stores information for the other tools, so that when you invoke
21349 @command{autoheader} or @command{automake} etc., reprocessing
21350 @file{configure.ac} is not needed.  The speed up is frequently 30%,
21351 and is increasing with the size of @file{configure.ac}.
21353 But it is and remains being simply a cache: you can safely remove it.
21355 @sp 1
21357 @display
21358 Can I permanently get rid of it?
21359 @end display
21361 The creation of this cache can be disabled from
21362 @file{~/.autom4te.cfg}, see @ref{Customizing autom4te}, for more
21363 details.  You should be aware that disabling the cache slows down the
21364 Autoconf test suite by 40%.  The more @acronym{GNU} Build System
21365 components are used, the more the cache is useful; for instance
21366 running @samp{autoreconf -f} on the Core Utilities is twice slower without
21367 the cache @emph{although @option{--force} implies that the cache is
21368 not fully exploited}, and eight times slower than without
21369 @option{--force}.
21372 @node Present But Cannot Be Compiled
21373 @section Header Present But Cannot Be Compiled
21375 The most important guideline to bear in mind when checking for
21376 features is to mimic as much as possible the intended use.
21377 Unfortunately, old versions of @code{AC_CHECK_HEADER} and
21378 @code{AC_CHECK_HEADERS} failed to follow this idea, and called
21379 the preprocessor, instead of the compiler, to check for headers.  As a
21380 result, incompatibilities between headers went unnoticed during
21381 configuration, and maintainers finally had to deal with this issue
21382 elsewhere.
21384 As of Autoconf 2.56 both checks are performed, and @code{configure}
21385 complains loudly if the compiler and the preprocessor do not agree.
21386 For the time being the result used is that of the preprocessor, to give
21387 maintainers time to adjust their @file{configure.ac}, but in the
21388 future, only the compiler will be considered.
21390 Consider the following example:
21392 @smallexample
21393 $ @kbd{cat number.h}
21394 typedef int number;
21395 $ @kbd{cat pi.h}
21396 const number pi = 3;
21397 $ @kbd{cat configure.ac}
21398 AC_INIT([Example], [1.0], [bug-example@@example.org])
21399 AC_CHECK_HEADERS([pi.h])
21400 $ @kbd{autoconf -Wall}
21401 $ @kbd{./configure}
21402 checking for gcc... gcc
21403 checking for C compiler default output file name... a.out
21404 checking whether the C compiler works... yes
21405 checking whether we are cross compiling... no
21406 checking for suffix of executables...
21407 checking for suffix of object files... o
21408 checking whether we are using the GNU C compiler... yes
21409 checking whether gcc accepts -g... yes
21410 checking for gcc option to accept ISO C89... none needed
21411 checking how to run the C preprocessor... gcc -E
21412 checking for grep that handles long lines and -e... grep
21413 checking for egrep... grep -E
21414 checking for ANSI C header files... yes
21415 checking for sys/types.h... yes
21416 checking for sys/stat.h... yes
21417 checking for stdlib.h... yes
21418 checking for string.h... yes
21419 checking for memory.h... yes
21420 checking for strings.h... yes
21421 checking for inttypes.h... yes
21422 checking for stdint.h... yes
21423 checking for unistd.h... yes
21424 checking pi.h usability... no
21425 checking pi.h presence... yes
21426 configure: WARNING: pi.h: present but cannot be compiled
21427 configure: WARNING: pi.h:     check for missing prerequisite headers?
21428 configure: WARNING: pi.h: see the Autoconf documentation
21429 configure: WARNING: pi.h:     section "Present But Cannot Be Compiled"
21430 configure: WARNING: pi.h: proceeding with the preprocessor's result
21431 configure: WARNING: pi.h: in the future, the compiler will take precedence
21432 configure: WARNING:     ## -------------------------------------- ##
21433 configure: WARNING:     ## Report this to bug-example@@example.org ##
21434 configure: WARNING:     ## -------------------------------------- ##
21435 checking for pi.h... yes
21436 @end smallexample
21438 @noindent
21439 The proper way the handle this case is using the fourth argument
21440 (@pxref{Generic Headers}):
21442 @example
21443 $ @kbd{cat configure.ac}
21444 AC_INIT([Example], [1.0], [bug-example@@example.org])
21445 AC_CHECK_HEADERS([number.h pi.h], [], [],
21446 [[#ifdef HAVE_NUMBER_H
21447 # include <number.h>
21448 #endif
21450 $ @kbd{autoconf -Wall}
21451 $ @kbd{./configure}
21452 checking for gcc... gcc
21453 checking for C compiler default output... a.out
21454 checking whether the C compiler works... yes
21455 checking whether we are cross compiling... no
21456 checking for suffix of executables...
21457 checking for suffix of object files... o
21458 checking whether we are using the GNU C compiler... yes
21459 checking whether gcc accepts -g... yes
21460 checking for gcc option to accept ANSI C... none needed
21461 checking for number.h... yes
21462 checking for pi.h... yes
21463 @end example
21465 See @ref{Particular Headers}, for a list of headers with their
21466 prerequisite.
21468 @c ===================================================== History of Autoconf.
21470 @node History
21471 @chapter History of Autoconf
21472 @cindex History of autoconf
21474 You may be wondering, Why was Autoconf originally written?  How did it
21475 get into its present form?  (Why does it look like gorilla spit?)  If
21476 you're not wondering, then this chapter contains no information useful
21477 to you, and you might as well skip it.  If you @emph{are} wondering,
21478 then let there be light@enddots{}
21480 @menu
21481 * Genesis::                     Prehistory and naming of @command{configure}
21482 * Exodus::                      The plagues of M4 and Perl
21483 * Leviticus::                   The priestly code of portability arrives
21484 * Numbers::                     Growth and contributors
21485 * Deuteronomy::                 Approaching the promises of easy configuration
21486 @end menu
21488 @node Genesis
21489 @section Genesis
21491 In June 1991 I was maintaining many of the @acronym{GNU} utilities for the
21492 Free Software Foundation.  As they were ported to more platforms and
21493 more programs were added, the number of @option{-D} options that users
21494 had to select in the makefile (around 20) became burdensome.
21495 Especially for me---I had to test each new release on a bunch of
21496 different systems.  So I wrote a little shell script to guess some of
21497 the correct settings for the fileutils package, and released it as part
21498 of fileutils 2.0.  That @command{configure} script worked well enough that
21499 the next month I adapted it (by hand) to create similar @command{configure}
21500 scripts for several other @acronym{GNU} utilities packages.  Brian Berliner
21501 also adapted one of my scripts for his @acronym{CVS} revision control system.
21503 Later that summer, I learned that Richard Stallman and Richard Pixley
21504 were developing similar scripts to use in the @acronym{GNU} compiler tools;
21505 so I adapted my @command{configure} scripts to support their evolving
21506 interface: using the file name @file{Makefile.in} as the templates;
21507 adding @samp{+srcdir}, the first option (of many); and creating
21508 @file{config.status} files.
21510 @node Exodus
21511 @section Exodus
21513 As I got feedback from users, I incorporated many improvements, using
21514 Emacs to search and replace, cut and paste, similar changes in each of
21515 the scripts.  As I adapted more @acronym{GNU} utilities packages to use
21516 @command{configure} scripts, updating them all by hand became impractical.
21517 Rich Murphey, the maintainer of the @acronym{GNU} graphics utilities, sent me
21518 mail saying that the @command{configure} scripts were great, and asking if
21519 I had a tool for generating them that I could send him.  No, I thought,
21520 but I should!  So I started to work out how to generate them.  And the
21521 journey from the slavery of hand-written @command{configure} scripts to the
21522 abundance and ease of Autoconf began.
21524 Cygnus @command{configure}, which was being developed at around that time,
21525 is table driven; it is meant to deal mainly with a discrete number of
21526 system types with a small number of mainly unguessable features (such as
21527 details of the object file format).  The automatic configuration system
21528 that Brian Fox had developed for Bash takes a similar approach.  For
21529 general use, it seems to me a hopeless cause to try to maintain an
21530 up-to-date database of which features each variant of each operating
21531 system has.  It's easier and more reliable to check for most features on
21532 the fly---especially on hybrid systems that people have hacked on
21533 locally or that have patches from vendors installed.
21535 I considered using an architecture similar to that of Cygnus
21536 @command{configure}, where there is a single @command{configure} script that
21537 reads pieces of @file{configure.in} when run.  But I didn't want to have
21538 to distribute all of the feature tests with every package, so I settled
21539 on having a different @command{configure} made from each
21540 @file{configure.in} by a preprocessor.  That approach also offered more
21541 control and flexibility.
21543 I looked briefly into using the Metaconfig package, by Larry Wall,
21544 Harlan Stenn, and Raphael Manfredi, but I decided not to for several
21545 reasons.  The @command{Configure} scripts it produces are interactive,
21546 which I find quite inconvenient; I didn't like the ways it checked for
21547 some features (such as library functions); I didn't know that it was
21548 still being maintained, and the @command{Configure} scripts I had
21549 seen didn't work on many modern systems (such as System V R4 and NeXT);
21550 it wasn't flexible in what it could do in response to a feature's
21551 presence or absence; I found it confusing to learn; and it was too big
21552 and complex for my needs (I didn't realize then how much Autoconf would
21553 eventually have to grow).
21555 I considered using Perl to generate my style of @command{configure}
21556 scripts, but decided that M4 was better suited to the job of simple
21557 textual substitutions: it gets in the way less, because output is
21558 implicit.  Plus, everyone already has it.  (Initially I didn't rely on
21559 the @acronym{GNU} extensions to M4.)  Also, some of my friends at the
21560 University of Maryland had recently been putting M4 front ends on
21561 several programs, including @code{tvtwm}, and I was interested in trying
21562 out a new language.
21564 @node Leviticus
21565 @section Leviticus
21567 Since my @command{configure} scripts determine the system's capabilities
21568 automatically, with no interactive user intervention, I decided to call
21569 the program that generates them Autoconfig.  But with a version number
21570 tacked on, that name would be too long for old Unix file systems,
21571 so I shortened it to Autoconf.
21573 In the fall of 1991 I called together a group of fellow questers after
21574 the Holy Grail of portability (er, that is, alpha testers) to give me
21575 feedback as I encapsulated pieces of my handwritten scripts in M4 macros
21576 and continued to add features and improve the techniques used in the
21577 checks.  Prominent among the testers were Fran@,{c}ois Pinard, who came up
21578 with the idea of making an Autoconf shell script to run M4
21579 and check for unresolved macro calls; Richard Pixley, who suggested
21580 running the compiler instead of searching the file system to find
21581 include files and symbols, for more accurate results; Karl Berry, who
21582 got Autoconf to configure @TeX{} and added the macro index to the
21583 documentation; and Ian Lance Taylor, who added support for creating a C
21584 header file as an alternative to putting @option{-D} options in a
21585 makefile, so he could use Autoconf for his @acronym{UUCP} package.
21586 The alpha testers cheerfully adjusted their files again and again as the
21587 names and calling conventions of the Autoconf macros changed from
21588 release to release.  They all contributed many specific checks, great
21589 ideas, and bug fixes.
21591 @node Numbers
21592 @section Numbers
21594 In July 1992, after months of alpha testing, I released Autoconf 1.0,
21595 and converted many @acronym{GNU} packages to use it.  I was surprised by how
21596 positive the reaction to it was.  More people started using it than I
21597 could keep track of, including people working on software that wasn't
21598 part of the @acronym{GNU} Project (such as TCL, FSP, and Kerberos V5).
21599 Autoconf continued to improve rapidly, as many people using the
21600 @command{configure} scripts reported problems they encountered.
21602 Autoconf turned out to be a good torture test for M4 implementations.
21603 Unix M4 started to dump core because of the length of the
21604 macros that Autoconf defined, and several bugs showed up in @acronym{GNU}
21605 M4 as well.  Eventually, we realized that we needed to use some
21606 features that only @acronym{GNU} M4 has.  4.3@acronym{BSD} M4, in
21607 particular, has an impoverished set of builtin macros; the System V
21608 version is better, but still doesn't provide everything we need.
21610 More development occurred as people put Autoconf under more stresses
21611 (and to uses I hadn't anticipated).  Karl Berry added checks for X11.
21612 david zuhn contributed C++ support.  Fran@,{c}ois Pinard made it diagnose
21613 invalid arguments.  Jim Blandy bravely coerced it into configuring
21614 @acronym{GNU} Emacs, laying the groundwork for several later improvements.
21615 Roland McGrath got it to configure the @acronym{GNU} C Library, wrote the
21616 @command{autoheader} script to automate the creation of C header file
21617 templates, and added a @option{--verbose} option to @command{configure}.
21618 Noah Friedman added the @option{--autoconf-dir} option and
21619 @code{AC_MACRODIR} environment variable.  (He also coined the term
21620 @dfn{autoconfiscate} to mean ``adapt a software package to use
21621 Autoconf''.)  Roland and Noah improved the quoting protection in
21622 @code{AC_DEFINE} and fixed many bugs, especially when I got sick of
21623 dealing with portability problems from February through June, 1993.
21625 @node Deuteronomy
21626 @section Deuteronomy
21628 A long wish list for major features had accumulated, and the effect of
21629 several years of patching by various people had left some residual
21630 cruft.  In April 1994, while working for Cygnus Support, I began a major
21631 revision of Autoconf.  I added most of the features of the Cygnus
21632 @command{configure} that Autoconf had lacked, largely by adapting the
21633 relevant parts of Cygnus @command{configure} with the help of david zuhn
21634 and Ken Raeburn.  These features include support for using
21635 @file{config.sub}, @file{config.guess}, @option{--host}, and
21636 @option{--target}; making links to files; and running @command{configure}
21637 scripts in subdirectories.  Adding these features enabled Ken to convert
21638 @acronym{GNU} @code{as}, and Rob Savoye to convert Deja@acronym{GNU}, to using
21639 Autoconf.
21641 I added more features in response to other peoples' requests.  Many
21642 people had asked for @command{configure} scripts to share the results of
21643 the checks between runs, because (particularly when configuring a large
21644 source tree, like Cygnus does) they were frustratingly slow.  Mike
21645 Haertel suggested adding site-specific initialization scripts.  People
21646 distributing software that had to unpack on MS-DOS asked for a way to
21647 override the @file{.in} extension on the file names, which produced file
21648 names like @file{config.h.in} containing two dots.  Jim Avera did an
21649 extensive examination of the problems with quoting in @code{AC_DEFINE}
21650 and @code{AC_SUBST}; his insights led to significant improvements.
21651 Richard Stallman asked that compiler output be sent to @file{config.log}
21652 instead of @file{/dev/null}, to help people debug the Emacs
21653 @command{configure} script.
21655 I made some other changes because of my dissatisfaction with the quality
21656 of the program.  I made the messages showing results of the checks less
21657 ambiguous, always printing a result.  I regularized the names of the
21658 macros and cleaned up coding style inconsistencies.  I added some
21659 auxiliary utilities that I had developed to help convert source code
21660 packages to use Autoconf.  With the help of Fran@,{c}ois Pinard, I made
21661 the macros not interrupt each others' messages.  (That feature revealed
21662 some performance bottlenecks in @acronym{GNU} M4, which he hastily
21663 corrected!)  I reorganized the documentation around problems people want
21664 to solve.  And I began a test suite, because experience had shown that
21665 Autoconf has a pronounced tendency to regress when we change it.
21667 Again, several alpha testers gave invaluable feedback, especially
21668 Fran@,{c}ois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn,
21669 and Mark Eichin.
21671 Finally, version 2.0 was ready.  And there was much rejoicing.  (And I
21672 have free time again.  I think.  Yeah, right.)
21675 @c ========================================================== Appendices
21678 @node GNU Free Documentation License
21679 @appendix GNU Free Documentation License
21681 @include fdl.texi
21683 @node Indices
21684 @appendix Indices
21686 @menu
21687 * Environment Variable Index::  Index of environment variables used
21688 * Output Variable Index::       Index of variables set in output files
21689 * Preprocessor Symbol Index::   Index of C preprocessor symbols defined
21690 * Autoconf Macro Index::        Index of Autoconf macros
21691 * M4 Macro Index::              Index of M4, M4sugar, and M4sh macros
21692 * Autotest Macro Index::        Index of Autotest macros
21693 * Program & Function Index::    Index of those with portability problems
21694 * Concept Index::               General index
21695 @end menu
21697 @node Environment Variable Index
21698 @appendixsec Environment Variable Index
21700 This is an alphabetical list of the environment variables that Autoconf
21701 checks.
21703 @printindex ev
21705 @node Output Variable Index
21706 @appendixsec Output Variable Index
21708 This is an alphabetical list of the variables that Autoconf can
21709 substitute into files that it creates, typically one or more
21710 makefiles.  @xref{Setting Output Variables}, for more information
21711 on how this is done.
21713 @printindex ov
21715 @node Preprocessor Symbol Index
21716 @appendixsec Preprocessor Symbol Index
21718 This is an alphabetical list of the C preprocessor symbols that the
21719 Autoconf macros define.  To work with Autoconf, C source code needs to
21720 use these names in @code{#if} or @code{#ifdef} directives.
21722 @printindex cv
21724 @node Autoconf Macro Index
21725 @appendixsec Autoconf Macro Index
21727 This is an alphabetical list of the Autoconf macros.
21728 @ifset shortindexflag
21729 To make the list easier to use, the macros are listed without their
21730 preceding @samp{AC_}.
21731 @end ifset
21733 @printindex AC
21735 @node M4 Macro Index
21736 @appendixsec M4 Macro Index
21738 This is an alphabetical list of the M4, M4sugar, and M4sh macros.
21739 @ifset shortindexflag
21740 To make the list easier to use, the macros are listed without their
21741 preceding @samp{m4_} or @samp{AS_}.
21742 @end ifset
21744 @printindex MS
21746 @node Autotest Macro Index
21747 @appendixsec Autotest Macro Index
21749 This is an alphabetical list of the Autotest macros.
21750 @ifset shortindexflag
21751 To make the list easier to use, the macros are listed without their
21752 preceding @samp{AT_}.
21753 @end ifset
21755 @printindex AT
21757 @node Program & Function Index
21758 @appendixsec Program and Function Index
21760 This is an alphabetical list of the programs and functions whose
21761 portability is discussed in this document.
21763 @printindex pr
21765 @node Concept Index
21766 @appendixsec Concept Index
21768 This is an alphabetical list of the files, tools, and concepts
21769 introduced in this document.
21771 @printindex cp
21773 @bye
21775 @c  LocalWords:  texinfo setfilename autoconf texi settitle setchapternewpage
21776 @c  LocalWords:  setcontentsaftertitlepage finalout ARG ovar varname dvar acx
21777 @c  LocalWords:  makeinfo dvi defcodeindex ev ov CPP cv Autotest mv defindex fn
21778 @c  LocalWords:  shortindexflag iftex ifset acindex ACindex ifclear ahindex fu
21779 @c  LocalWords:  asindex MSindex atindex ATindex auindex hdrindex prindex FIXME
21780 @c  LocalWords:  msindex alloca fnindex Aaarg indices FSF's dircategory ifnames
21781 @c  LocalWords:  direntry autoscan autoreconf autoheader autoupdate config FDs
21782 @c  LocalWords:  testsuite titlepage Elliston Demaille vskip filll ifnottex hmm
21783 @c  LocalWords:  insertcopying Autoconf's detailmenu Automake Libtool Posix ois
21784 @c  LocalWords:  Systemology Checkpointing Changequote INTERCAL changequote dfn
21785 @c  LocalWords:  Quadrigraphs builtins Shellology acconfig Bugward LIBOBJ Imake
21786 @c  LocalWords:  LIBOBJS IFELSE cindex flushright Pinard Metaconfig uref Simons
21787 @c  LocalWords:  distclean uninstall noindent versioning Tromey dir
21788 @c  LocalWords:  SAMS samp aclocal acsite underquoted emph itemx prepend SUBST
21789 @c  LocalWords:  evindex automake Gettext autopoint gettext symlink libtoolize
21790 @c  LocalWords:  defmac INIT tarname ovindex cvindex BUGREPORT PREREQ asis PROG
21791 @c  LocalWords:  SRCDIR srcdir globbing afterwards cmds foos fooo foooo init cd
21792 @c  LocalWords:  builddir timestamp src Imakefile chmod defvar CFLAGS CPPFLAGS
21793 @c  LocalWords:  CXXFLAGS DEFS DHAVE defvarx FCFLAGS FFLAGS LDFLAGS bindir GCC
21794 @c  LocalWords:  datadir datarootdir docdir dvidir htmldir libdir ifnothtml kbd
21795 @c  LocalWords:  includedir infodir libexecdir localedir localstatedir mandir
21796 @c  LocalWords:  oldincludedir pdfdir PDF psdir PostScript sbindir sysconfdir
21797 @c  LocalWords:  sharedstatedir DDATADIR sed tmp pkgdatadir VPATH conf unistd
21798 @c  LocalWords:  undef endif builtin FUNCS ifndef STACKSEG getb GETB YMP fubar
21799 @c  LocalWords:  PRE dest SUBDIRS subdirs fi struct STDC stdlib stddef INTTYPES
21800 @c  LocalWords:  inttypes STDINT stdint AWK AIX Solaris NeXT env EGREP FGREP yy
21801 @c  LocalWords:  LEXLIB YYTEXT lfl nonportable Automake's LN RANLIB byacc INETD
21802 @c  LocalWords:  inetd prog PROGS progs ranlib lmp lXt lX nsl gethostbyname UX
21803 @c  LocalWords:  NextStep isinf isnan glibc IRIX sunmath lm lsunmath pre sizeof
21804 @c  LocalWords:  ld inline malloc putenv setenv FreeBSD realloc SunOS MinGW
21805 @c  LocalWords:  snprintf vsnprintf sprintf vsprintf sscanf gcc strerror ifdef
21806 @c  LocalWords:  strnlen sysconf PAGESIZE unsetenv va fallback memcpy dst FUNC
21807 @c  LocalWords:  PowerPC GNUC libPW pragma Olibcalls CHOWN chown CLOSEDIR VFORK
21808 @c  LocalWords:  closedir FNMATCH fnmatch vfork FSEEKO LARGEFILE fseeko SVR sc
21809 @c  LocalWords:  largefile GETGROUPS getgroups GETLOADAVG DGUX UMAX NLIST KMEM
21810 @c  LocalWords:  SETGID getloadavg nlist GETMNTENT irix
21811 @c  LocalWords:  getmntent UnixWare GETPGRP getpgid getpgrp Posix's pid LSTAT
21812 @c  LocalWords:  lstat rpl MEMCMP memcmp OpenStep MBRTOWC mbrtowc MKTIME mktime
21813 @c  LocalWords:  localtime MMAP mmap OBSTACK obstack obstacks ARGTYPES timeval
21814 @c  LocalWords:  SETPGRP setpgrp defmacx Hurd SETVBUF setvbuf STRCOLL strcoll
21815 @c  LocalWords:  STRTOD strtod DECL STRFTIME strftime SCO UTIME utime VPRINTF
21816 @c  LocalWords:  DOPRNT vprintf doprnt sp unfixable LIBSOURCE LIBSOURCES Eggert
21817 @c  LocalWords:  linux netinet ia Tru XFree DIRENT NDIR dirent ndir multitable
21818 @c  LocalWords:  NAMLEN strlen namlen MKDEV SYSMACROS makedev RESOLV resolv DNS
21819 @c  LocalWords:  inet structs NAMESER arpa NETDB netdb UTekV UTS GCC's kB
21820 @c  LocalWords:  STDBOOL BOOL stdbool conformant cplusplus bool Bool stdarg tm
21821 @c  LocalWords:  ctype strchr strrchr rindex bcopy memmove memchr WEXITSTATUS
21822 @c  LocalWords:  WIFEXITED TIOCGWINSZ GWINSZ termios preprocess preprocessable
21823 @c  LocalWords:  DECLS strdup calloc BLKSIZE blksize RDEV rdev TZNAME tzname pw
21824 @c  LocalWords:  passwd gecos pwd MBSTATE mbstate wchar RETSIGTYPE hup UID uid
21825 @c  LocalWords:  gid ptrdiff uintmax EXEEXT OBJEXT Ae conftest AXP str
21826 @c  LocalWords:  ALIGNOF WERROR Werror cpp HP's WorkShop egcs un fied stdc CXX
21827 @c  LocalWords:  varargs BIGENDIAN Endianness SPARC endianness grep'ed CONST FC
21828 @c  LocalWords:  const STRINGIZE stringizing PARAMS unprotoize protos KCC cxx
21829 @c  LocalWords:  xlC aCC CXXCPP FREEFORM xlf FLIBS FCLIBS ish SRCEXT XTRA LFS
21830 @c  LocalWords:  ISC lcposix MINIX Minix conditionalized inlines hw dD confdefs
21831 @c  LocalWords:  fputs stdout PREPROC ar UFS HFS QNX realtime fstype STATVFS se
21832 @c  LocalWords:  statvfs STATFS statfs func machfile hdr lelf raboof DEFUN GTK
21833 @c  LocalWords:  GTKMM Grmph ified ine defn baz EOF qar Ahhh changecom algol io
21834 @c  LocalWords:  changeword quadrigraphs quadrigraph dnl SGI atoi overquoting
21835 @c  LocalWords:  Aas Wcross sep args namespace undefine bpatsubst popdef dquote
21836 @c  LocalWords:  bregexp Overquote overquotation meisch maisch meische maische
21837 @c  LocalWords:  miscian DIRNAME dirname MKDIR CATFILE XMKMF TRAVOLTA celsius
21838 @c  LocalWords:  EMX emxos Emacsen Korn DYNIX subshell posix Ksh ksh Pdksh Zsh
21839 @c  LocalWords:  pdksh zsh Allbery Lipe Kubota UWS zorglub stderr eval esac lfn
21840 @c  LocalWords:  drivespec Posixy DJGPP doschk prettybird LPT pfew Zsh's yu yaa
21841 @c  LocalWords:  yM uM aM firebird IP subdir misparses ok Unpatched abc bc zA
21842 @c  LocalWords:  CDPATH DUALCASE LINENO prepass Subshells lineno NULLCMD cmp wc
21843 @c  LocalWords:  MAILPATH scanset arg NetBSD Almquist printf expr cp
21844 @c  LocalWords:  Oliva awk Aaaaarg cmd regex xfoo GNV OpenVMS VM
21845 @c  LocalWords:  sparc Proulx nbar nfoo maxdepth acdilrtu TWG mc
21846 @c  LocalWords:  mkdir exe uname OpenBSD Fileutils mktemp umask TMPDIR guid os
21847 @c  LocalWords:  fooXXXXXX Unicos utimes hpux hppa unescaped
21848 @c  LocalWords:  pmake DOS's gmake ifoo DESTDIR autoconfiscated pc coff mips gg
21849 @c  LocalWords:  dec ultrix cpu wildcards rpcc rdtsc powerpc readline
21850 @c  LocalWords:  withval vxworks gless localcache usr LOFF loff CYGWIN Cygwin
21851 @c  LocalWords:  cygwin SIGLIST siglist SYSNDIR SYSDIR ptx lseq rusage elif MSC
21852 @c  LocalWords:  lfoo POUNDBANG lsun NIS getpwnam SYSCALLS RSH INTL lintl aix
21853 @c  LocalWords:  intl lx ldir syslog bsd EPI toolchain netbsd objext de KNR nn
21854 @c  LocalWords:  fication LTLIBOBJS Wdiff TESTDIR atconfig atlocal akim XFAIL
21855 @c  LocalWords:  ChangeLog prepended errexit smallexample TESTSUITEFLAGS GPL er
21856 @c  LocalWords:  installcheck autotest indir Pixley Bothner Eichin Kerberos adl
21857 @c  LocalWords:  DISTCLEANFILES preprocessor's fileutils Stallman Murphey Stenn
21858 @c  LocalWords:  Manfredi Autoconfig TCL FSP david zuhn Blandy MACRODIR Raeburn
21859 @c  LocalWords:  autoconfiscate Savoye Haertel Avera Meyering fdl appendixsec
21860 @c  LocalWords:  printindex american LIBOBJDIR LibdirTest ERLCFLAGS OBJCFLAGS
21861 @c  LocalWords:  VER Gnulib online xyes strcpy TYPEOF typeof OBJC objcc objc ln
21862 @c  LocalWords:  GOBJC OTP ERLC erl valloc decr dumpdef errprint incr
21863 @c  LocalWords:  esyscmd len maketemp pushdef substr syscmd sysval translit txt
21864 @c  LocalWords:  sinclude foreach myvar tolower toupper uniq BASENAME STDIN
21865 @c  LocalWords:  Dynix descrips basename aname cname macroexpands xno xcheck
21866 @c  LocalWords:  LIBREADLINE lreadline lncurses libreadline
21868 @c Local Variables:
21869 @c fill-column: 72
21870 @c ispell-local-dictionary: "american"
21871 @c indent-tabs-mode: nil
21872 @c whitespace-check-buffer-indent: nil
21873 @c End: