AC_C_CHAR_UNSIGNED is not strictly necessary.
[autoconf.git] / doc / autoconf.texi
blob61cccca656cd0837c56acddac9b877da3abd45c3
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.
6888 These days, using this macro is not necessary.  The same information can
6889 be determined by this portable alternative, thus avoiding the use of
6890 preprocessor macros in the namespace reserved for the implementation.
6892 @example
6893 #include <limits.h>
6894 #if CHAR_MIN == 0
6895 # define CHAR_UNSIGNED 1
6896 #endif
6897 @end example
6898 @end defmac
6900 @defmac AC_C_STRINGIZE
6901 @acindex{C_STRINGIZE}
6902 @cvindex HAVE_STRINGIZE
6903 If the C preprocessor supports the stringizing operator, define
6904 @code{HAVE_STRINGIZE}.  The stringizing operator is @samp{#} and is
6905 found in macros such as this:
6907 @example
6908 #define x(y) #y
6909 @end example
6911 This macro is obsolescent, as current C compilers support the
6912 stringizing operator.  New programs need not use this macro.
6913 @end defmac
6915 @defmac AC_C_FLEXIBLE_ARRAY_MEMBER
6916 @acindex{C_FLEXIBLE_ARRAY_MEMBER}
6917 @cvindex FLEXIBLE_ARRAY_MEMBER
6918 If the C compiler supports flexible array members, define
6919 @code{FLEXIBLE_ARRAY_MEMBER} to nothing; otherwise define it to 1.
6920 That way, a declaration like this:
6922 @example
6923 struct s
6924   @{
6925     size_t n_vals;
6926     double val[FLEXIBLE_ARRAY_MEMBER];
6927   @};
6928 @end example
6930 @noindent
6931 will let applications use the ``struct hack'' even with compilers that
6932 do not support flexible array members.  To allocate and use such an
6933 object, you can use code like this:
6935 @example
6936 size_t i;
6937 size_t n = compute_value_count ();
6938 struct s *p =
6939    malloc (offsetof (struct s, val)
6940            + n * sizeof (double));
6941 p->n_vals = n;
6942 for (i = 0; i < n; i++)
6943   p->val[i] = compute_value (i);
6944 @end example
6945 @end defmac
6947 @defmac AC_C_VARARRAYS
6948 @acindex{C_VARARRAYS}
6949 @cvindex HAVE_C_VARARRAYS
6950 If the C compiler supports variable-length arrays, define
6951 @code{HAVE_C_VARARRAYS}.  A variable-length array is an array of automatic
6952 storage duration whose length is determined at run time, when the array
6953 is declared.
6954 @end defmac
6956 @defmac AC_C_TYPEOF
6957 @acindex{C_TYPEOF}
6958 @cvindex HAVE_TYPEOF
6959 @cvindex typeof
6960 If the C compiler supports @acronym{GCC}'s @code{typeof} syntax either
6961 directly or
6962 through a different spelling of the keyword (e.g., @code{__typeof__}),
6963 define @code{HAVE_TYPEOF}.  If the support is available only through a
6964 different spelling, define @code{typeof} to that spelling.
6965 @end defmac
6967 @defmac AC_C_PROTOTYPES
6968 @acindex{C_PROTOTYPES}
6969 @cvindex PROTOTYPES
6970 @cvindex __PROTOTYPES
6971 @cvindex PARAMS
6972 If function prototypes are understood by the compiler (as determined by
6973 @code{AC_PROG_CC}), define @code{PROTOTYPES} and @code{__PROTOTYPES}.
6974 Defining @code{__PROTOTYPES} is for the benefit of
6975 header files that cannot use macros that infringe on user name space.
6977 This macro is obsolescent, as current C compilers support prototypes.
6978 New programs need not use this macro.
6979 @end defmac
6981 @anchor{AC_PROG_GCC_TRADITIONAL}
6982 @defmac AC_PROG_GCC_TRADITIONAL
6983 @acindex{PROG_GCC_TRADITIONAL}
6984 @ovindex CC
6985 Add @option{-traditional} to output variable @code{CC} if using the
6986 @acronym{GNU} C compiler and @code{ioctl} does not work properly without
6987 @option{-traditional}.  That usually happens when the fixed header files
6988 have not been installed on an old system.
6990 This macro is obsolescent, since current versions of the @acronym{GNU} C
6991 compiler fix the header files automatically when installed.
6992 @end defmac
6995 @node C++ Compiler
6996 @subsection C++ Compiler Characteristics
6999 @defmac AC_PROG_CXX (@ovar{compiler-search-list})
7000 @acindex{PROG_CXX}
7001 @ovindex CXX
7002 @ovindex CXXFLAGS
7003 Determine a C++ compiler to use.  Check whether the environment variable
7004 @code{CXX} or @code{CCC} (in that order) is set; if so, then set output
7005 variable @code{CXX} to its value.
7007 Otherwise, if the macro is invoked without an argument, then search for
7008 a C++ compiler under the likely names (first @code{g++} and @code{c++}
7009 then other names).  If none of those checks succeed, then as a last
7010 resort set @code{CXX} to @code{g++}.
7012 This macro may, however, be invoked with an optional first argument
7013 which, if specified, must be a blank-separated list of C++ compilers to
7014 search for.  This just gives the user an opportunity to specify an
7015 alternative search list for the C++ compiler.  For example, if you
7016 didn't like the default order, then you could invoke @code{AC_PROG_CXX}
7017 like this:
7019 @example
7020 AC_PROG_CXX([gcc cl KCC CC cxx cc++ xlC aCC c++ g++])
7021 @end example
7023 If using the @acronym{GNU} C++ compiler, set shell variable @code{GXX} to
7024 @samp{yes}.  If output variable @code{CXXFLAGS} was not already set, set
7025 it to @option{-g -O2} for the @acronym{GNU} C++ compiler (@option{-O2} on
7026 systems where G++ does not accept @option{-g}), or @option{-g} for other
7027 compilers.
7028 @end defmac
7030 @defmac AC_PROG_CXXCPP
7031 @acindex{PROG_CXXCPP}
7032 @ovindex CXXCPP
7033 Set output variable @code{CXXCPP} to a command that runs the C++
7034 preprocessor.  If @samp{$CXX -E} doesn't work, @file{/lib/cpp} is used.
7035 It is portable to run @code{CXXCPP} only on files with a @file{.c},
7036 @file{.C}, @file{.cc}, or @file{.cpp} extension.
7038 Some preprocessors don't indicate missing include files by the error
7039 status.  For such preprocessors an internal variable is set that causes
7040 other macros to check the standard error from the preprocessor and
7041 consider the test failed if any warnings have been reported.  However,
7042 it is not known whether such broken preprocessors exist for C++.
7043 @end defmac
7045 @defmac AC_PROG_CXX_C_O
7046 @acindex{PROG_CXX_C_O}
7047 @cvindex CXX_NO_MINUS_C_MINUS_O
7048 Test whether the C++ compiler accepts the options @option{-c} and
7049 @option{-o} simultaneously, and define @code{CXX_NO_MINUS_C_MINUS_O},
7050 if it does not.
7051 @end defmac
7054 @node Objective C Compiler
7055 @subsection Objective C Compiler Characteristics
7058 @defmac AC_PROG_OBJC (@ovar{compiler-search-list})
7059 @acindex{PROG_OBJC}
7060 @ovindex OBJC
7061 @ovindex OBJCFLAGS
7062 Determine an Objective C compiler to use.  If @code{OBJC} is not already
7063 set in the environment, check for Objective C compilers.  Set output
7064 variable @code{OBJC} to the name of the compiler found.
7066 This macro may, however, be invoked with an optional first argument
7067 which, if specified, must be a blank-separated list of Objective C compilers to
7068 search for.  This just gives the user an opportunity to specify an
7069 alternative search list for the Objective C compiler.  For example, if you
7070 didn't like the default order, then you could invoke @code{AC_PROG_OBJC}
7071 like this:
7073 @example
7074 AC_PROG_OBJC([gcc objcc objc])
7075 @end example
7077 If using the @acronym{GNU} Objective C compiler, set shell variable
7078 @code{GOBJC} to @samp{yes}.  If output variable @code{OBJCFLAGS} was not
7079 already set, set it to @option{-g -O2} for the @acronym{GNU} Objective C
7080 compiler (@option{-O2} on systems where @command{gcc} does not accept
7081 @option{-g}), or @option{-g} for other compilers.
7082 @end defmac
7084 @defmac AC_PROG_OBJCPP
7085 @acindex{PROG_OBJCPP}
7086 @ovindex OBJCPP
7087 Set output variable @code{OBJCPP} to a command that runs the Objective C
7088 preprocessor.  If @samp{$OBJC -E} doesn't work, @file{/lib/cpp} is used.
7089 @end defmac
7092 @node Erlang Compiler and Interpreter
7093 @subsection Erlang Compiler and Interpreter Characteristics
7094 @cindex Erlang
7096 Autoconf defines the following macros for determining paths to the essential
7097 Erlang/OTP programs:
7099 @defmac AC_ERLANG_PATH_ERLC (@ovar{value-if-not-found}, @dvar{path, $PATH})
7100 @acindex{ERLANG_PATH_ERLC}
7101 @ovindex ERLC
7102 @ovindex ERLCFLAGS
7103 Determine an Erlang compiler to use.  If @code{ERLC} is not already set in the
7104 environment, check for @command{erlc}.  Set output variable @code{ERLC} to the
7105 complete path of the compiler command found.  In addition, if @code{ERLCFLAGS}
7106 is not set in the environment, set it to an empty value.
7108 The two optional arguments have the same meaning as the two last arguments of
7109 macro @code{AC_PROG_PATH} for looking for the @command{erlc} program.  For
7110 example, to look for @command{erlc} only in the @file{/usr/lib/erlang/bin}
7111 directory:
7113 @example
7114 AC_ERLANG_PATH_ERLC([not found], [/usr/lib/erlang/bin])
7115 @end example
7116 @end defmac
7118 @defmac AC_ERLANG_NEED_ERLC (@dvar{path, $PATH})
7119 @acindex{ERLANG_NEED_ERLC}
7120 A simplified variant of the @code{AC_ERLANG_PATH_ERLC} macro, that prints an
7121 error message and exits the @command{configure} script if the @command{erlc}
7122 program is not found.
7123 @end defmac
7125 @defmac AC_ERLANG_PATH_ERL (@ovar{value-if-not-found}, @dvar{path, $PATH})
7126 @acindex{ERLANG_PATH_ERL}
7127 @ovindex ERL
7128 Determine an Erlang interpreter to use.  If @code{ERL} is not already
7129 set in the
7130 environment, check for @command{erl}.  Set output variable @code{ERL} to the
7131 complete path of the interpreter command found.
7133 The two optional arguments have the same meaning as the two last arguments of
7134 macro @code{AC_PROG_PATH} for looking for the @command{erl} program.  For
7135 example, to look for @command{erl} only in the @file{/usr/lib/erlang/bin}
7136 directory:
7138 @example
7139 AC_ERLANG_PATH_ERL([not found], [/usr/lib/erlang/bin])
7140 @end example
7141 @end defmac
7143 @defmac AC_ERLANG_NEED_ERL (@dvar{path, $PATH})
7144 @acindex{ERLANG_NEED_ERL}
7145 A simplified variant of the @code{AC_ERLANG_PATH_ERL} macro, that prints an
7146 error message and exits the @command{configure} script if the @command{erl}
7147 program is not found.
7148 @end defmac
7151 @node Fortran Compiler
7152 @subsection Fortran Compiler Characteristics
7153 @cindex Fortran
7154 @cindex F77
7156 The Autoconf Fortran support is divided into two categories: legacy
7157 Fortran 77 macros (@code{F77}), and modern Fortran macros (@code{FC}).
7158 The former are intended for traditional Fortran 77 code, and have output
7159 variables like @code{F77}, @code{FFLAGS}, and @code{FLIBS}.  The latter
7160 are for newer programs that can (or must) compile under the newer
7161 Fortran standards, and have output variables like @code{FC},
7162 @code{FCFLAGS}, and @code{FCLIBS}.
7164 Except for two new macros @code{AC_FC_SRCEXT} and
7165 @code{AC_FC_FREEFORM} (see below), the @code{FC} and @code{F77} macros
7166 behave almost identically, and so they are documented together in this
7167 section.
7170 @defmac AC_PROG_F77 (@ovar{compiler-search-list})
7171 @acindex{PROG_F77}
7172 @ovindex F77
7173 @ovindex FFLAGS
7174 Determine a Fortran 77 compiler to use.  If @code{F77} is not already
7175 set in the environment, then check for @code{g77} and @code{f77}, and
7176 then some other names.  Set the output variable @code{F77} to the name
7177 of the compiler found.
7179 This macro may, however, be invoked with an optional first argument
7180 which, if specified, must be a blank-separated list of Fortran 77
7181 compilers to search for.  This just gives the user an opportunity to
7182 specify an alternative search list for the Fortran 77 compiler.  For
7183 example, if you didn't like the default order, then you could invoke
7184 @code{AC_PROG_F77} like this:
7186 @example
7187 AC_PROG_F77([fl32 f77 fort77 xlf g77 f90 xlf90])
7188 @end example
7190 If using @code{g77} (the @acronym{GNU} Fortran 77 compiler), then
7191 set the shell variable @code{G77} to @samp{yes}.
7192 If the output variable @code{FFLAGS} was not already set in the
7193 environment, then set it to @option{-g -02} for @code{g77} (or @option{-O2}
7194 where @code{g77} does not accept @option{-g}).  Otherwise, set
7195 @code{FFLAGS} to @option{-g} for all other Fortran 77 compilers.
7196 @end defmac
7198 @defmac AC_PROG_FC (@ovar{compiler-search-list}, @ovar{dialect})
7199 @acindex{PROG_FC}
7200 @ovindex FC
7201 @ovindex FCFLAGS
7202 Determine a Fortran compiler to use.  If @code{FC} is not already set in
7203 the environment, then @code{dialect} is a hint to indicate what Fortran
7204 dialect to search for; the default is to search for the newest available
7205 dialect.  Set the output variable @code{FC} to the name of the compiler
7206 found.
7208 By default, newer dialects are preferred over older dialects, but if
7209 @code{dialect} is specified then older dialects are preferred starting
7210 with the specified dialect.  @code{dialect} can currently be one of
7211 Fortran 77, Fortran 90, or Fortran 95.  However, this is only a hint of
7212 which compiler @emph{name} to prefer (e.g., @code{f90} or @code{f95}),
7213 and no attempt is made to guarantee that a particular language standard
7214 is actually supported.  Thus, it is preferable that you avoid the
7215 @code{dialect} option, and use AC_PROG_FC only for code compatible with
7216 the latest Fortran standard.
7218 This macro may, alternatively, be invoked with an optional first argument
7219 which, if specified, must be a blank-separated list of Fortran
7220 compilers to search for, just as in @code{AC_PROG_F77}.
7222 If the output variable @code{FCFLAGS} was not already set in the
7223 environment, then set it to @option{-g -02} for @acronym{GNU} @code{g77} (or
7224 @option{-O2} where @code{g77} does not accept @option{-g}).  Otherwise,
7225 set @code{FCFLAGS} to @option{-g} for all other Fortran compilers.
7226 @end defmac
7228 @defmac AC_PROG_F77_C_O
7229 @defmacx AC_PROG_FC_C_O
7230 @acindex{PROG_F77_C_O}
7231 @acindex{PROG_FC_C_O}
7232 @cvindex F77_NO_MINUS_C_MINUS_O
7233 @cvindex FC_NO_MINUS_C_MINUS_O
7234 Test whether the Fortran compiler accepts the options @option{-c} and
7235 @option{-o} simultaneously, and define @code{F77_NO_MINUS_C_MINUS_O} or
7236 @code{FC_NO_MINUS_C_MINUS_O}, respectively, if it does not.
7237 @end defmac
7239 The following macros check for Fortran compiler characteristics.
7240 To check for characteristics not listed here, use
7241 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}) or
7242 @code{AC_RUN_IFELSE} (@pxref{Runtime}), making sure to first set the
7243 current language to Fortran 77 or Fortran via @code{AC_LANG([Fortran 77])}
7244 or @code{AC_LANG(Fortran)} (@pxref{Language Choice}).
7247 @defmac AC_F77_LIBRARY_LDFLAGS
7248 @defmacx AC_FC_LIBRARY_LDFLAGS
7249 @acindex{F77_LIBRARY_LDFLAGS}
7250 @ovindex FLIBS
7251 @acindex{FC_LIBRARY_LDFLAGS}
7252 @ovindex FCLIBS
7253 Determine the linker flags (e.g., @option{-L} and @option{-l}) for the
7254 @dfn{Fortran intrinsic and runtime libraries} that are required to
7255 successfully link a Fortran program or shared library.  The output
7256 variable @code{FLIBS} or @code{FCLIBS} is set to these flags (which
7257 should be included after @code{LIBS} when linking).
7259 This macro is intended to be used in those situations when it is
7260 necessary to mix, e.g., C++ and Fortran source code in a single
7261 program or shared library (@pxref{Mixing Fortran 77 With C and C++, , ,
7262 automake, @acronym{GNU} Automake}).
7264 For example, if object files from a C++ and Fortran compiler must be
7265 linked together, then the C++ compiler/linker must be used for linking
7266 (since special C++-ish things need to happen at link time like calling
7267 global constructors, instantiating templates, enabling exception
7268 support, etc.).
7270 However, the Fortran intrinsic and runtime libraries must be linked in
7271 as well, but the C++ compiler/linker doesn't know by default how to add
7272 these Fortran 77 libraries.  Hence, this macro was created to determine
7273 these Fortran libraries.
7275 The macros @code{AC_F77_DUMMY_MAIN} and @code{AC_FC_DUMMY_MAIN} or
7276 @code{AC_F77_MAIN} and @code{AC_FC_MAIN} are probably also necessary to
7277 link C/C++ with Fortran; see below.
7278 @end defmac
7280 @defmac AC_F77_DUMMY_MAIN (@ovar{action-if-found}, @ovar{action-if-not-found})
7281 @defmacx AC_FC_DUMMY_MAIN (@ovar{action-if-found}, @ovar{action-if-not-found})
7282 @acindex{F77_DUMMY_MAIN}
7283 @cvindex F77_DUMMY_MAIN
7284 With many compilers, the Fortran libraries detected by
7285 @code{AC_F77_LIBRARY_LDFLAGS} or @code{AC_FC_LIBRARY_LDFLAGS} provide
7286 their own @code{main} entry function that initializes things like
7287 Fortran I/O, and which then calls a user-provided entry function named
7288 (say) @code{MAIN__} to run the user's program.  The
7289 @code{AC_F77_DUMMY_MAIN} and @code{AC_FC_DUMMY_MAIN} or
7290 @code{AC_F77_MAIN} and @code{AC_FC_MAIN} macros figure out how to deal with
7291 this interaction.
7293 When using Fortran for purely numerical functions (no I/O, etc.)@: often
7294 one prefers to provide one's own @code{main} and skip the Fortran
7295 library initializations.  In this case, however, one may still need to
7296 provide a dummy @code{MAIN__} routine in order to prevent linking errors
7297 on some systems.  @code{AC_F77_DUMMY_MAIN} or @code{AC_FC_DUMMY_MAIN}
7298 detects whether any such routine is @emph{required} for linking, and
7299 what its name is; the shell variable @code{F77_DUMMY_MAIN} or
7300 @code{FC_DUMMY_MAIN} holds this name, @code{unknown} when no solution
7301 was found, and @code{none} when no such dummy main is needed.
7303 By default, @var{action-if-found} defines @code{F77_DUMMY_MAIN} or
7304 @code{FC_DUMMY_MAIN} to the name of this routine (e.g., @code{MAIN__})
7305 @emph{if} it is required.  @var{action-if-not-found} defaults to
7306 exiting with an error.
7308 In order to link with Fortran routines, the user's C/C++ program should
7309 then include the following code to define the dummy main if it is
7310 needed:
7312 @example
7313 #ifdef F77_DUMMY_MAIN
7314 #  ifdef __cplusplus
7315      extern "C"
7316 #  endif
7317    int F77_DUMMY_MAIN() @{ return 1; @}
7318 #endif
7319 @end example
7321 (Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
7323 Note that this macro is called automatically from @code{AC_F77_WRAPPERS}
7324 or @code{AC_FC_WRAPPERS}; there is generally no need to call it
7325 explicitly unless one wants to change the default actions.
7326 @end defmac
7328 @defmac AC_F77_MAIN
7329 @defmacx AC_FC_MAIN
7330 @acindex{F77_MAIN}
7331 @cvindex F77_MAIN
7332 @acindex{FC_MAIN}
7333 @cvindex FC_MAIN
7334 As discussed above, many Fortran libraries allow you to provide an entry
7335 point called (say) @code{MAIN__} instead of the usual @code{main}, which
7336 is then called by a @code{main} function in the Fortran libraries that
7337 initializes things like Fortran I/O@.  The
7338 @code{AC_F77_MAIN} and @code{AC_FC_MAIN} macros detect whether it is
7339 @emph{possible} to utilize such an alternate main function, and defines
7340 @code{F77_MAIN} and @code{FC_MAIN} to the name of the function.  (If no
7341 alternate main function name is found, @code{F77_MAIN} and @code{FC_MAIN} are
7342 simply defined to @code{main}.)
7344 Thus, when calling Fortran routines from C that perform things like I/O,
7345 one should use this macro and declare the "main" function like so:
7347 @example
7348 #ifdef __cplusplus
7349   extern "C"
7350 #endif
7351 int F77_MAIN(int argc, char *argv[]);
7352 @end example
7354 (Again, replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
7355 @end defmac
7357 @defmac AC_F77_WRAPPERS
7358 @defmacx AC_FC_WRAPPERS
7359 @acindex{F77_WRAPPERS}
7360 @cvindex F77_FUNC
7361 @cvindex F77_FUNC_
7362 @acindex{FC_WRAPPERS}
7363 @cvindex FC_FUNC
7364 @cvindex FC_FUNC_
7365 Defines C macros @code{F77_FUNC (name, NAME)}, @code{FC_FUNC (name, NAME)},
7366 @code{F77_FUNC_(name, NAME)}, and @code{FC_FUNC_(name, NAME)} to properly
7367 mangle the names of C/C++ identifiers, and identifiers with underscores,
7368 respectively, so that they match the name-mangling scheme used by the
7369 Fortran compiler.
7371 Fortran is case-insensitive, and in order to achieve this the Fortran
7372 compiler converts all identifiers into a canonical case and format.  To
7373 call a Fortran subroutine from C or to write a C function that is
7374 callable from Fortran, the C program must explicitly use identifiers in
7375 the format expected by the Fortran compiler.  In order to do this, one
7376 simply wraps all C identifiers in one of the macros provided by
7377 @code{AC_F77_WRAPPERS} or @code{AC_FC_WRAPPERS}.  For example, suppose
7378 you have the following Fortran 77 subroutine:
7380 @example
7381       subroutine foobar (x, y)
7382       double precision x, y
7383       y = 3.14159 * x
7384       return
7385       end
7386 @end example
7388 You would then declare its prototype in C or C++ as:
7390 @example
7391 #define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
7392 #ifdef __cplusplus
7393 extern "C"  /* prevent C++ name mangling */
7394 #endif
7395 void FOOBAR_F77(double *x, double *y);
7396 @end example
7398 Note that we pass both the lowercase and uppercase versions of the
7399 function name to @code{F77_FUNC} so that it can select the right one.
7400 Note also that all parameters to Fortran 77 routines are passed as
7401 pointers (@pxref{Mixing Fortran 77 With C and C++, , , automake, @acronym{GNU}
7402 Automake}).
7404 (Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
7406 Although Autoconf tries to be intelligent about detecting the
7407 name-mangling scheme of the Fortran compiler, there may be Fortran
7408 compilers that it doesn't support yet.  In this case, the above code
7409 generates a compile-time error, but some other behavior
7410 (e.g., disabling Fortran-related features) can be induced by checking
7411 whether @code{F77_FUNC} or @code{FC_FUNC} is defined.
7413 Now, to call that routine from a C program, we would do something like:
7415 @example
7417     double x = 2.7183, y;
7418     FOOBAR_F77 (&x, &y);
7420 @end example
7422 If the Fortran identifier contains an underscore (e.g., @code{foo_bar}),
7423 you should use @code{F77_FUNC_} or @code{FC_FUNC_} instead of
7424 @code{F77_FUNC} or @code{FC_FUNC} (with the same arguments).  This is
7425 because some Fortran compilers mangle names differently if they contain
7426 an underscore.
7427 @end defmac
7429 @defmac AC_F77_FUNC (@var{name}, @ovar{shellvar})
7430 @defmacx AC_FC_FUNC (@var{name}, @ovar{shellvar})
7431 @acindex{F77_FUNC}
7432 @acindex{FC_FUNC}
7433 Given an identifier @var{name}, set the shell variable @var{shellvar} to
7434 hold the mangled version @var{name} according to the rules of the
7435 Fortran linker (see also @code{AC_F77_WRAPPERS} or
7436 @code{AC_FC_WRAPPERS}).  @var{shellvar} is optional; if it is not
7437 supplied, the shell variable is simply @var{name}.  The purpose of
7438 this macro is to give the caller a way to access the name-mangling
7439 information other than through the C preprocessor as above, for example,
7440 to call Fortran routines from some language other than C/C++.
7441 @end defmac
7443 @defmac AC_FC_SRCEXT (@var{ext}, @ovar{action-if-success}, @
7444   @ovar{action-if-failure})
7445 @acindex{FC_SRCEXT}
7446 By default, the @code{FC} macros perform their tests using a @file{.f}
7447 extension for source-code files.  Some compilers, however, only enable
7448 newer language features for appropriately named files, e.g., Fortran 90
7449 features only for @file{.f90} files.  On the other hand, some other
7450 compilers expect all source files to end in @file{.f} and require
7451 special flags to support other file name extensions.  The
7452 @code{AC_FC_SRCEXT} macro deals with both of these issues.
7454 The @code{AC_FC_SRCEXT} tries to get the @code{FC} compiler to accept files
7455 ending with the extension .@var{ext} (i.e., @var{ext} does @emph{not}
7456 contain the dot).  If any special compiler flags are needed for this, it
7457 stores them in the output variable @code{FCFLAGS_}@var{ext}.  This
7458 extension and these flags are then used for all subsequent @code{FC} tests
7459 (until @code{AC_FC_SRCEXT} is called again).
7461 For example, you would use @code{AC_FC_SRCEXT(f90)} to employ the
7462 @file{.f90} extension in future tests, and it would set a
7463 @code{FCFLAGS_f90} output variable with any extra flags that are needed
7464 to compile such files.
7466 The @code{FCFLAGS_}@var{ext} can @emph{not} be simply absorbed into
7467 @code{FCFLAGS}, for two reasons based on the limitations of some
7468 compilers.  First, only one @code{FCFLAGS_}@var{ext} can be used at a
7469 time, so files with different extensions must be compiled separately.
7470 Second, @code{FCFLAGS_}@var{ext} must appear @emph{immediately} before
7471 the source-code file name when compiling.  So, continuing the example
7472 above, you might compile a @file{foo.f90} file in your makefile with the
7473 command:
7475 @example
7476 foo.o: foo.f90
7477      $(FC) -c $(FCFLAGS) $(FCFLAGS_f90) '$(srcdir)/foo.f90'
7478 @end example
7480 If @code{AC_FC_SRCEXT} succeeds in compiling files with the @var{ext}
7481 extension, it calls @var{action-if-success} (defaults to nothing).  If
7482 it fails, and cannot find a way to make the @code{FC} compiler accept such
7483 files, it calls @var{action-if-failure} (defaults to exiting with an
7484 error message).
7486 @end defmac
7488 @defmac AC_FC_FREEFORM (@ovar{action-if-success}, @ovar{action-if-failure})
7489 @acindex{FC_FREEFORM}
7491 The @code{AC_FC_FREEFORM} tries to ensure that the Fortran compiler
7492 (@code{$FC}) allows free-format source code (as opposed to the older
7493 fixed-format style from Fortran 77).  If necessary, it may add some
7494 additional flags to @code{FCFLAGS}.
7496 This macro is most important if you are using the default @file{.f}
7497 extension, since many compilers interpret this extension as indicating
7498 fixed-format source unless an additional flag is supplied.  If you
7499 specify a different extension with @code{AC_FC_SRCEXT}, such as
7500 @file{.f90} or @file{.f95}, then @code{AC_FC_FREEFORM} ordinarily
7501 succeeds without modifying @code{FCFLAGS}.
7503 If @code{AC_FC_FREEFORM} succeeds in compiling free-form source, it
7504 calls @var{action-if-success} (defaults to nothing).  If it fails, it
7505 calls @var{action-if-failure} (defaults to exiting with an error
7506 message).
7507 @end defmac
7509 @node System Services
7510 @section System Services
7512 The following macros check for operating system services or capabilities.
7514 @anchor{AC_PATH_X}
7515 @defmac AC_PATH_X
7516 @acindex{PATH_X}
7517 @evindex XMKMF
7518 @cindex X Window System
7519 Try to locate the X Window System include files and libraries.  If the
7520 user gave the command line options @option{--x-includes=@var{dir}} and
7521 @option{--x-libraries=@var{dir}}, use those directories.
7523 If either or both were not given, get the missing values by running
7524 @code{xmkmf} (or an executable pointed to by the @code{XMKMF}
7525 environment variable) on a trivial @file{Imakefile} and examining the
7526 makefile that it produces.  Setting @code{XMKMF} to @samp{false}
7527 disables this method.
7529 If this method fails to find the X Window System, @command{configure}
7530 looks for the files in several directories where they often reside.
7531 If either method is successful, set the shell variables
7532 @code{x_includes} and @code{x_libraries} to their locations, unless they
7533 are in directories the compiler searches by default.
7535 If both methods fail, or the user gave the command line option
7536 @option{--without-x}, set the shell variable @code{no_x} to @samp{yes};
7537 otherwise set it to the empty string.
7538 @end defmac
7540 @anchor{AC_PATH_XTRA}
7541 @defmac AC_PATH_XTRA
7542 @acindex{PATH_XTRA}
7543 @ovindex X_CFLAGS
7544 @ovindex X_LIBS
7545 @ovindex X_EXTRA_LIBS
7546 @ovindex X_PRE_LIBS
7547 @cvindex X_DISPLAY_MISSING
7548 An enhanced version of @code{AC_PATH_X}.  It adds the C compiler flags
7549 that X needs to output variable @code{X_CFLAGS}, and the X linker flags
7550 to @code{X_LIBS}.  Define @code{X_DISPLAY_MISSING} if X is not
7551 available.
7553 This macro also checks for special libraries that some systems need in
7554 order to compile X programs.  It adds any that the system needs to
7555 output variable @code{X_EXTRA_LIBS}.  And it checks for special X11R6
7556 libraries that need to be linked with before @option{-lX11}, and adds
7557 any found to the output variable @code{X_PRE_LIBS}.
7559 @c This is an incomplete kludge.  Make a real way to do it.
7560 @c If you need to check for other X functions or libraries yourself, then
7561 @c after calling this macro, add the contents of @code{X_EXTRA_LIBS} to
7562 @c @code{LIBS} temporarily, like this: (FIXME - add example)
7563 @end defmac
7565 @anchor{AC_SYS_INTERPRETER}
7566 @defmac AC_SYS_INTERPRETER
7567 @acindex{SYS_INTERPRETER}
7568 Check whether the system supports starting scripts with a line of the
7569 form @samp{#!/bin/sh} to select the interpreter to use for the script.
7570 After running this macro, shell code in @file{configure.ac} can check
7571 the shell variable @code{interpval}; it is set to @samp{yes}
7572 if the system supports @samp{#!}, @samp{no} if not.
7573 @end defmac
7575 @defmac AC_SYS_LARGEFILE
7576 @acindex{SYS_LARGEFILE}
7577 @cvindex _FILE_OFFSET_BITS
7578 @cvindex _LARGE_FILES
7579 @ovindex CC
7580 @cindex Large file support
7581 @cindex LFS
7582 Arrange for
7583 @uref{http://www.unix-systems.org/@/version2/@/whatsnew/@/lfs20mar.html,
7584 large-file support}.  On some hosts, one must use special compiler
7585 options to build programs that can access large files.  Append any such
7586 options to the output variable @code{CC}.  Define
7587 @code{_FILE_OFFSET_BITS} and @code{_LARGE_FILES} if necessary.
7589 Large-file support can be disabled by configuring with the
7590 @option{--disable-largefile} option.
7592 If you use this macro, check that your program works even when
7593 @code{off_t} is wider than @code{long int}, since this is common when
7594 large-file support is enabled.  For example, it is not correct to print
7595 an arbitrary @code{off_t} value @code{X} with @code{printf ("%ld",
7596 (long int) X)}.
7598 The LFS introduced the @code{fseeko} and @code{ftello} functions to
7599 replace their C counterparts @code{fseek} and @code{ftell} that do not
7600 use @code{off_t}.  Take care to use @code{AC_FUNC_FSEEKO} to make their
7601 prototypes available when using them and large-file support is
7602 enabled.
7603 @end defmac
7605 @anchor{AC_SYS_LONG_FILE_NAMES}
7606 @defmac AC_SYS_LONG_FILE_NAMES
7607 @acindex{SYS_LONG_FILE_NAMES}
7608 @cvindex HAVE_LONG_FILE_NAMES
7609 If the system supports file names longer than 14 characters, define
7610 @code{HAVE_LONG_FILE_NAMES}.
7611 @end defmac
7613 @defmac AC_SYS_POSIX_TERMIOS
7614 @acindex{SYS_POSIX_TERMIOS}
7615 @cindex Posix termios headers
7616 @cindex termios Posix headers
7617 Check to see if the Posix termios headers and functions are available on the
7618 system.  If so, set the shell variable @code{ac_cv_sys_posix_termios} to
7619 @samp{yes}.  If not, set the variable to @samp{no}.
7620 @end defmac
7622 @node Posix Variants
7623 @section Posix Variants
7625 The following macro makes it possible to use features of Posix that are
7626 extensions to C, as well as platform extensions not defined by Posix.
7628 @anchor{AC_USE_SYSTEM_EXTENSIONS}
7629 @defmac AC_USE_SYSTEM_EXTENSIONS
7630 @acindex{USE_SYSTEM_EXTENSIONS}
7631 @cvindex _ALL_SOURCE
7632 @cvindex _GNU_SOURCE
7633 @cvindex _MINIX
7634 @cvindex _POSIX_1_SOURCE
7635 @cvindex _POSIX_PTHREAD_SEMANTICS
7636 @cvindex _POSIX_SOURCE
7637 @cvindex _TANDEM_SOURCE
7638 @cvindex __EXTENSIONS__
7639 This macro was introduced in Autoconf 2.60.  If possible, enable
7640 extensions to C or Posix on hosts that normally disable the extensions,
7641 typically due to standards-conformance namespace issues.  This should be
7642 called before any macros that run the C compiler.  The following
7643 preprocessor macros are defined where appropriate:
7645 @table @code
7646 @item _GNU_SOURCE
7647 Enable extensions on @acronym{GNU}/Linux.
7648 @item __EXTENSIONS__
7649 Enable general extensions on Solaris.
7650 @item _POSIX_PTHREAD_SEMANTICS
7651 Enable threading extensions on Solaris.
7652 @item _TANDEM_SOURCE
7653 Enable extensions for the @acronym{HP} NonStop platform.
7654 @item _ALL_SOURCE
7655 Enable extensions for @acronym{AIX} 3, and for Interix.
7656 @item _POSIX_SOURCE
7657 Enable Posix functions for Minix.
7658 @item _POSIX_1_SOURCE
7659 Enable additional Posix functions for Minix.
7660 @item _MINIX
7661 Identify Minix platform.  This particular preprocessor macro is
7662 obsolescent, and may be removed in a future release of Autoconf.
7663 @end table
7664 @end defmac
7667 @node Erlang Libraries
7668 @section Erlang Libraries
7669 @cindex Erlang, Library, checking
7671 The following macros check for an installation of Erlang/OTP, and for the
7672 presence of certain Erlang libraries.  All those macros require the
7673 configuration of an Erlang interpreter and an Erlang compiler
7674 (@pxref{Erlang Compiler and Interpreter}).
7676 @defmac AC_ERLANG_SUBST_ROOT_DIR
7677 @acindex{ERLANG_SUBST_ROOT_DIR}
7678 @ovindex ERLANG_ROOT_DIR
7680 Set the output variable @code{ERLANG_ROOT_DIR} to the path to the base
7681 directory in which Erlang/OTP is installed (as returned by Erlang's
7682 @code{code:root_dir/0} function).  The result of this test is cached if
7683 caching is enabled when running @command{configure}.
7684 @end defmac
7686 @defmac AC_ERLANG_SUBST_LIB_DIR
7687 @acindex{ERLANG_SUBST_LIB_DIR}
7688 @ovindex ERLANG_LIB_DIR
7690 Set the output variable @code{ERLANG_LIB_DIR} to the path of the library
7691 directory of Erlang/OTP (as returned by Erlang's
7692 @code{code:lib_dir/0} function), which subdirectories each contain an installed
7693 Erlang/OTP library.  The result of this test is cached if caching is enabled
7694 when running @command{configure}.
7695 @end defmac
7697 @defmac AC_ERLANG_CHECK_LIB (@var{library}, @ovar{action-if-found}, @
7698   @ovar{action-if-not-found})
7699 @acindex{ERLANG_CHECK_LIB}
7700 @ovindex ERLANG_LIB_DIR_@var{library}
7701 @ovindex ERLANG_LIB_VER_@var{library}
7703 Test whether the Erlang/OTP library @var{library} is installed by
7704 calling Erlang's @code{code:lib_dir/1} function.  The result of this
7705 test is cached if caching is enabled when running @command{configure}.
7706 @var{action-if-found} is a list of shell commands to run if the library
7707 is installed; @var{action-if-not-found} is a list of shell commands to
7708 run if it is not.  Additionally, if the library is installed, the output
7709 variable @samp{ERLANG_LIB_DIR_@var{library}} is set to the path to the
7710 library installation directory, and the output variable
7711 @samp{ERLANG_LIB_VER_@var{library}} is set to the version number that is
7712 part of the subdirectory name, if it is in the standard form
7713 (@code{@var{library}-@var{version}}).  If the directory name does not
7714 have a version part, @samp{ERLANG_LIB_VER_@var{library}} is set to the
7715 empty string.  If the library is not installed,
7716 @samp{ERLANG_LIB_DIR_@var{library}} and
7717 @samp{ERLANG_LIB_VER_@var{library}} are set to @code{"not found"}.  For
7718 example, to check if library @code{stdlib} is installed:
7720 @example
7721 AC_ERLANG_CHECK_LIB([stdlib],
7722   [echo "stdlib version \"$ERLANG_LIB_VER_stdlib\""
7723    echo "is installed in \"$ERLANG_LIB_DIR_stdlib\""],
7724   [AC_MSG_ERROR([stdlib was not found!])])
7725 @end example
7726 @end defmac
7728 In addition to the above macros, which test installed Erlang libraries, the
7729 following macros determine the paths to the directories into which newly built
7730 Erlang libraries are to be installed:
7732 @defmac AC_ERLANG_SUBST_INSTALL_LIB_DIR
7733 @acindex{ERLANG_SUBST_INSTALL_LIB_DIR}
7734 @ovindex ERLANG_INSTALL_LIB_DIR
7736 Set the @code{ERLANG_INSTALL_LIB_DIR} output variable to the directory into
7737 which every built Erlang library should be installed in a separate
7738 subdirectory.
7739 If this variable is not set in the environment when @command{configure} runs,
7740 its default value is @code{$ERLANG_LIB_DIR}, which value is set by the
7741 @code{AC_ERLANG_SUBST_LIB_DIR} macro.
7742 @end defmac
7744 @defmac AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR (@var{library}, @var{version})
7745 @acindex{ERLANG_SUBST_INSTALL_LIB_SUBDIR}
7746 @ovindex ERLANG_INSTALL_LIB_DIR_@var{library}
7748 Set the @samp{ERLANG_INSTALL_LIB_DIR_@var{library}} output variable to the
7749 directory into which the built Erlang library @var{library} version
7750 @var{version} should be installed.  If this variable is not set in the
7751 environment when @command{configure} runs, its default value is
7752 @samp{$ERLANG_INSTALL_LIB_DIR/@var{library}-@var{version}}, the value of the
7753 @code{ERLANG_INSTALL_LIB_DIR} variable being set by the
7754 @code{AC_ERLANG_SUBST_INSTALL_LIB_DIR} macro.
7755 @end defmac
7761 @c ========================================================= Writing Tests
7763 @node Writing Tests
7764 @chapter Writing Tests
7766 If the existing feature tests don't do something you need, you have to
7767 write new ones.  These macros are the building blocks.  They provide
7768 ways for other macros to check whether various kinds of features are
7769 available and report the results.
7771 This chapter contains some suggestions and some of the reasons why the
7772 existing tests are written the way they are.  You can also learn a lot
7773 about how to write Autoconf tests by looking at the existing ones.  If
7774 something goes wrong in one or more of the Autoconf tests, this
7775 information can help you understand the assumptions behind them, which
7776 might help you figure out how to best solve the problem.
7778 These macros check the output of the compiler system of the current
7779 language (@pxref{Language Choice}).  They do not cache the results of
7780 their tests for future use (@pxref{Caching Results}), because they don't
7781 know enough about the information they are checking for to generate a
7782 cache variable name.  They also do not print any messages, for the same
7783 reason.  The checks for particular kinds of features call these macros
7784 and do cache their results and print messages about what they're
7785 checking for.
7787 When you write a feature test that could be applicable to more than one
7788 software package, the best thing to do is encapsulate it in a new macro.
7789 @xref{Writing Autoconf Macros}, for how to do that.
7791 @menu
7792 * Language Choice::             Selecting which language to use for testing
7793 * Writing Test Programs::       Forging source files for compilers
7794 * Running the Preprocessor::    Detecting preprocessor symbols
7795 * Running the Compiler::        Detecting language or header features
7796 * Running the Linker::          Detecting library features
7797 * Runtime::                     Testing for runtime features
7798 * Systemology::                 A zoology of operating systems
7799 * Multiple Cases::              Tests for several possible values
7800 @end menu
7802 @node Language Choice
7803 @section Language Choice
7804 @cindex Language
7806 Autoconf-generated @command{configure} scripts check for the C compiler and
7807 its features by default.  Packages that use other programming languages
7808 (maybe more than one, e.g., C and C++) need to test features of the
7809 compilers for the respective languages.  The following macros determine
7810 which programming language is used in the subsequent tests in
7811 @file{configure.ac}.
7813 @anchor{AC_LANG}
7814 @defmac AC_LANG (@var{language})
7815 Do compilation tests using the compiler, preprocessor, and file
7816 extensions for the specified @var{language}.
7818 Supported languages are:
7820 @table @samp
7821 @item C
7822 Do compilation tests using @code{CC} and @code{CPP} and use extension
7823 @file{.c} for test programs.  Use compilation flags: @code{CPPFLAGS} with
7824 @code{CPP}, and both @code{CPPFLAGS} and @code{CFLAGS} with @code{CC}.
7826 @item C++
7827 Do compilation tests using @code{CXX} and @code{CXXCPP} and use
7828 extension @file{.C} for test programs.  Use compilation flags:
7829 @code{CPPFLAGS} with @code{CXXCPP}, and both @code{CPPFLAGS} and
7830 @code{CXXFLAGS} with @code{CXX}.
7832 @item Fortran 77
7833 Do compilation tests using @code{F77} and use extension @file{.f} for
7834 test programs.  Use compilation flags: @code{FFLAGS}.
7836 @item Fortran
7837 Do compilation tests using @code{FC} and use extension @file{.f} (or
7838 whatever has been set by @code{AC_FC_SRCEXT}) for test programs.  Use
7839 compilation flags: @code{FCFLAGS}.
7841 @item Erlang
7842 @ovindex ERLC
7843 @ovindex ERL
7844 @ovindex ERLCFLAGS
7845 Compile and execute tests using @code{ERLC} and @code{ERL} and use extension
7846 @file{.erl} for test Erlang modules.  Use compilation flags: @code{ERLCFLAGS}.
7848 @item Objective C
7849 Do compilation tests using @code{OBJC} and @code{OBJCPP} and use
7850 extension @file{.m} for test programs.  Use compilation flags:
7851 @code{CPPFLAGS} with @code{OBJCPP}, and both @code{CPPFLAGS} and
7852 @code{OBJCFLAGS} with @code{OBJC}.
7853 @end table
7854 @end defmac
7856 @anchor{AC_LANG_PUSH}
7857 @defmac AC_LANG_PUSH (@var{language})
7858 @acindex{LANG_PUSH}
7859 Remember the current language (as set by @code{AC_LANG}) on a stack, and
7860 then select the @var{language}.  Use this macro and @code{AC_LANG_POP}
7861 in macros that need to temporarily switch to a particular language.
7862 @end defmac
7864 @defmac AC_LANG_POP (@ovar{language})
7865 @acindex{LANG_POP}
7866 Select the language that is saved on the top of the stack, as set by
7867 @code{AC_LANG_PUSH}, and remove it from the stack.
7869 If given, @var{language} specifies the language we just @emph{quit}.  It
7870 is a good idea to specify it when it's known (which should be the
7871 case@dots{}), since Autoconf detects inconsistencies.
7873 @example
7874 AC_LANG_PUSH([Fortran 77])
7875 # Perform some tests on Fortran 77.
7876 # @dots{}
7877 AC_LANG_POP([Fortran 77])
7878 @end example
7879 @end defmac
7881 @defmac AC_LANG_ASSERT (@var{language})
7882 @acindex{LANG_ASSERT} Check statically that the current language is
7883 @var{language}.  You should use this in your language specific macros
7884 to avoid that they be called with an inappropriate language.
7886 This macro runs only at @command{autoconf} time, and incurs no cost at
7887 @command{configure} time.  Sadly enough and because Autoconf is a two
7888 layer language @footnote{Because M4 is not aware of Sh code,
7889 especially conditionals, some optimizations that look nice statically
7890 may produce incorrect results at runtime.}, the macros
7891 @code{AC_LANG_PUSH} and @code{AC_LANG_POP} cannot be ``optimizing'',
7892 therefore as much as possible you ought to avoid using them to wrap
7893 your code, rather, require from the user to run the macro with a
7894 correct current language, and check it with @code{AC_LANG_ASSERT}.
7895 And anyway, that may help the user understand she is running a Fortran
7896 macro while expecting a result about her Fortran 77 compiler@dots{}
7897 @end defmac
7900 @defmac AC_REQUIRE_CPP
7901 @acindex{REQUIRE_CPP}
7902 Ensure that whichever preprocessor would currently be used for tests has
7903 been found.  Calls @code{AC_REQUIRE} (@pxref{Prerequisite Macros}) with an
7904 argument of either @code{AC_PROG_CPP} or @code{AC_PROG_CXXCPP},
7905 depending on which language is current.
7906 @end defmac
7909 @node Writing Test Programs
7910 @section Writing Test Programs
7912 Autoconf tests follow a common scheme: feed some program with some
7913 input, and most of the time, feed a compiler with some source file.
7914 This section is dedicated to these source samples.
7916 @menu
7917 * Guidelines::                  General rules for writing test programs
7918 * Test Functions::              Avoiding pitfalls in test programs
7919 * Generating Sources::          Source program boilerplate
7920 @end menu
7922 @node Guidelines
7923 @subsection Guidelines for Test Programs
7925 The most important rule to follow when writing testing samples is:
7927 @center @emph{Look for realism.}
7929 This motto means that testing samples must be written with the same
7930 strictness as real programs are written.  In particular, you should
7931 avoid ``shortcuts'' and simplifications.
7933 Don't just play with the preprocessor if you want to prepare a
7934 compilation.  For instance, using @command{cpp} to check whether a header is
7935 functional might let your @command{configure} accept a header which
7936 causes some @emph{compiler} error.  Do not hesitate to check a header with
7937 other headers included before, especially required headers.
7939 Make sure the symbols you use are properly defined, i.e., refrain for
7940 simply declaring a function yourself instead of including the proper
7941 header.
7943 Test programs should not write to standard output.  They
7944 should exit with status 0 if the test succeeds, and with status 1
7945 otherwise, so that success
7946 can be distinguished easily from a core dump or other failure;
7947 segmentation violations and other failures produce a nonzero exit
7948 status.  Unless you arrange for @code{exit} to be declared, test
7949 programs should @code{return}, not @code{exit}, from @code{main},
7950 because on many systems @code{exit} is not declared by default.
7952 Test programs can use @code{#if} or @code{#ifdef} to check the values of
7953 preprocessor macros defined by tests that have already run.  For
7954 example, if you call @code{AC_HEADER_STDBOOL}, then later on in
7955 @file{configure.ac} you can have a test program that includes
7956 @file{stdbool.h} conditionally:
7958 @example
7959 @group
7960 #ifdef HAVE_STDBOOL_H
7961 # include <stdbool.h>
7962 #endif
7963 @end group
7964 @end example
7966 Both @code{#if HAVE_STDBOOL_H} and @code{#ifdef HAVE_STDBOOL_H} will
7967 work with any standard C compiler.  Some developers prefer @code{#if}
7968 because it is easier to read, while others prefer @code{#ifdef} because
7969 it avoids diagnostics with picky compilers like @acronym{GCC} with the
7970 @option{-Wundef} option.
7972 If a test program needs to use or create a data file, give it a name
7973 that starts with @file{conftest}, such as @file{conftest.data}.  The
7974 @command{configure} script cleans up by running @samp{rm -f -r conftest*}
7975 after running test programs and if the script is interrupted.
7977 @node Test Functions
7978 @subsection Test Functions
7980 These days it's safe to assume support for function prototypes
7981 (introduced in C89).
7983 Functions that test programs declare should also be conditionalized for
7984 C++, which requires @samp{extern "C"} prototypes.  Make sure to not
7985 include any header files containing clashing prototypes.
7987 @example
7988 #ifdef __cplusplus
7989 extern "C"
7990 #endif
7991 void *valloc (size_t);
7992 @end example
7994 If a test program calls a function with invalid parameters (just to see
7995 whether it exists), organize the program to ensure that it never invokes
7996 that function.  You can do this by calling it in another function that is
7997 never invoked.  You can't do it by putting it after a call to
7998 @code{exit}, because @acronym{GCC} version 2 knows that @code{exit}
7999 never returns
8000 and optimizes out any code that follows it in the same block.
8002 If you include any header files, be sure to call the functions
8003 relevant to them with the correct number of arguments, even if they are
8004 just 0, to avoid compilation errors due to prototypes.  @acronym{GCC}
8005 version 2
8006 has internal prototypes for several functions that it automatically
8007 inlines; for example, @code{memcpy}.  To avoid errors when checking for
8008 them, either pass them the correct number of arguments or redeclare them
8009 with a different return type (such as @code{char}).
8012 @node Generating Sources
8013 @subsection Generating Sources
8015 Autoconf provides a set of macros that can be used to generate test
8016 source files.  They are written to be language generic, i.e., they
8017 actually depend on the current language (@pxref{Language Choice}) to
8018 ``format'' the output properly.
8021 @defmac AC_LANG_CONFTEST (@var{source})
8022 @acindex{LANG_CONFTEST}
8023 Save the @var{source} text in the current test source file:
8024 @file{conftest.@var{extension}} where the @var{extension} depends on the
8025 current language.
8027 Note that the @var{source} is evaluated exactly once, like regular
8028 Autoconf macro arguments, and therefore (i) you may pass a macro
8029 invocation, (ii) if not, be sure to double quote if needed.
8030 @end defmac
8032 @defmac AC_LANG_SOURCE (@var{source})
8033 @acindex{LANG_SOURCE}
8034 Expands into the @var{source}, with the definition of
8035 all the @code{AC_DEFINE} performed so far.
8036 @end defmac
8038 For instance executing (observe the double quotation!):
8040 @example
8041 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
8042 AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
8043   [Greetings string.])
8044 AC_LANG(C)
8045 AC_LANG_CONFTEST(
8046    [AC_LANG_SOURCE([[const char hw[] = "Hello, World\n";]])])
8047 gcc -E -dD -o - conftest.c
8048 @end example
8050 @noindent
8051 results in:
8053 @example
8054 @dots{}
8055 # 1 "conftest.c"
8057 #define PACKAGE_NAME "Hello"
8058 #define PACKAGE_TARNAME "hello"
8059 #define PACKAGE_VERSION "1.0"
8060 #define PACKAGE_STRING "Hello 1.0"
8061 #define PACKAGE_BUGREPORT "bug-hello@@example.org"
8062 #define HELLO_WORLD "Hello, World\n"
8064 const char hw[] = "Hello, World\n";
8065 @end example
8067 When the test language is Fortran or Erlang, the @code{AC_DEFINE} definitions
8068 are not automatically translated into constants in the source code by this
8069 macro.
8071 @defmac AC_LANG_PROGRAM (@var{prologue}, @var{body})
8072 @acindex{LANG_PROGRAM}
8073 Expands into a source file which consists of the @var{prologue}, and
8074 then @var{body} as body of the main function (e.g., @code{main} in
8075 C).  Since it uses @code{AC_LANG_SOURCE}, the features of the latter are
8076 available.
8077 @end defmac
8079 For instance:
8081 @example
8082 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
8083 AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
8084   [Greetings string.])
8085 AC_LANG_CONFTEST(
8086 [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
8087                  [[fputs (hw, stdout);]])])
8088 gcc -E -dD -o - conftest.c
8089 @end example
8091 @noindent
8092 results in:
8094 @example
8095 @dots{}
8096 # 1 "conftest.c"
8098 #define PACKAGE_NAME "Hello"
8099 #define PACKAGE_TARNAME "hello"
8100 #define PACKAGE_VERSION "1.0"
8101 #define PACKAGE_STRING "Hello 1.0"
8102 #define PACKAGE_BUGREPORT "bug-hello@@example.org"
8103 #define HELLO_WORLD "Hello, World\n"
8105 const char hw[] = "Hello, World\n";
8107 main ()
8109 fputs (hw, stdout);
8110   ;
8111   return 0;
8113 @end example
8115 In Erlang tests, the created source file is that of an Erlang module called
8116 @code{conftest} (@file{conftest.erl}).  This module defines and exports
8117 at least
8118 one @code{start/0} function, which is called to perform the test.  The
8119 @var{prologue} is optional code that is inserted between the module header and
8120 the @code{start/0} function definition.  @var{body} is the body of the
8121 @code{start/0} function without the final period (@pxref{Runtime}, about
8122 constraints on this function's behavior).
8124 For instance:
8126 @example
8127 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
8128 AC_LANG(Erlang)
8129 AC_LANG_CONFTEST(
8130 [AC_LANG_PROGRAM([[-define(HELLO_WORLD, "Hello, world!").]],
8131                  [[io:format("~s~n", [?HELLO_WORLD])]])])
8132 cat conftest.erl
8133 @end example
8135 @noindent
8136 results in:
8138 @example
8139 -module(conftest).
8140 -export([start/0]).
8141 -define(HELLO_WORLD, "Hello, world!").
8142 start() ->
8143 io:format("~s~n", [?HELLO_WORLD])
8145 @end example
8147 @defmac AC_LANG_CALL (@var{prologue}, @var{function})
8148 @acindex{LANG_CALL}
8149 Expands into a source file which consists of the @var{prologue}, and
8150 then a call to the @var{function} as body of the main function (e.g.,
8151 @code{main} in C).  Since it uses @code{AC_LANG_PROGRAM}, the feature
8152 of the latter are available.
8154 This function will probably be replaced in the future by a version
8155 which would enable specifying the arguments.  The use of this macro is
8156 not encouraged, as it violates strongly the typing system.
8158 This macro cannot be used for Erlang tests.
8159 @end defmac
8161 @defmac AC_LANG_FUNC_LINK_TRY (@var{function})
8162 @acindex{LANG_FUNC_LINK_TRY}
8163 Expands into a source file which uses the @var{function} in the body of
8164 the main function (e.g., @code{main} in C).  Since it uses
8165 @code{AC_LANG_PROGRAM}, the features of the latter are available.
8167 As @code{AC_LANG_CALL}, this macro is documented only for completeness.
8168 It is considered to be severely broken, and in the future will be
8169 removed in favor of actual function calls (with properly typed
8170 arguments).
8172 This macro cannot be used for Erlang tests.
8173 @end defmac
8175 @node Running the Preprocessor
8176 @section Running the Preprocessor
8178 Sometimes one might need to run the preprocessor on some source file.
8179 @emph{Usually it is a bad idea}, as you typically need to @emph{compile}
8180 your project, not merely run the preprocessor on it; therefore you
8181 certainly want to run the compiler, not the preprocessor.  Resist the
8182 temptation of following the easiest path.
8184 Nevertheless, if you need to run the preprocessor, then use
8185 @code{AC_PREPROC_IFELSE}.
8187 The macros described in this section cannot be used for tests in Erlang or
8188 Fortran, since those languages require no preprocessor.
8190 @anchor{AC_PREPROC_IFELSE}
8191 @defmac AC_PREPROC_IFELSE (@var{input}, @ovar{action-if-true}, @
8192   @ovar{action-if-false})
8193 @acindex{PREPROC_IFELSE}
8194 Run the preprocessor of the current language (@pxref{Language Choice})
8195 on the @var{input}, run the shell commands @var{action-if-true} on
8196 success, @var{action-if-false} otherwise.  The @var{input} can be made
8197 by @code{AC_LANG_PROGRAM} and friends.
8199 This macro uses @code{CPPFLAGS}, but not @code{CFLAGS}, because
8200 @option{-g}, @option{-O}, etc.@: are not valid options to many C
8201 preprocessors.
8203 It is customary to report unexpected failures with
8204 @code{AC_MSG_FAILURE}.
8205 @end defmac
8207 For instance:
8209 @example
8210 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
8211 AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
8212   [Greetings string.])
8213 AC_PREPROC_IFELSE(
8214    [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
8215                     [[fputs (hw, stdout);]])],
8216    [AC_MSG_RESULT([OK])],
8217    [AC_MSG_FAILURE([unexpected preprocessor failure])])
8218 @end example
8220 @noindent
8221 results in:
8223 @example
8224 checking for gcc... gcc
8225 checking for C compiler default output file name... a.out
8226 checking whether the C compiler works... yes
8227 checking whether we are cross compiling... no
8228 checking for suffix of executables...
8229 checking for suffix of object files... o
8230 checking whether we are using the GNU C compiler... yes
8231 checking whether gcc accepts -g... yes
8232 checking for gcc option to accept ISO C89... none needed
8233 checking how to run the C preprocessor... gcc -E
8235 @end example
8237 @sp 1
8239 The macro @code{AC_TRY_CPP} (@pxref{Obsolete Macros}) used to play the
8240 role of @code{AC_PREPROC_IFELSE}, but double quotes its argument, making
8241 it impossible to use it to elaborate sources.  You are encouraged to
8242 get rid of your old use of the macro @code{AC_TRY_CPP} in favor of
8243 @code{AC_PREPROC_IFELSE}, but, in the first place, are you sure you need
8244 to run the @emph{preprocessor} and not the compiler?
8246 @anchor{AC_EGREP_HEADER}
8247 @defmac AC_EGREP_HEADER (@var{pattern}, @var{header-file}, @
8248   @var{action-if-found}, @ovar{action-if-not-found})
8249 @acindex{EGREP_HEADER}
8250 If the output of running the preprocessor on the system header file
8251 @var{header-file} matches the extended regular expression
8252 @var{pattern}, execute shell commands @var{action-if-found}, otherwise
8253 execute @var{action-if-not-found}.
8254 @end defmac
8256 @anchor{AC_EGREP_CPP}
8257 @defmac AC_EGREP_CPP (@var{pattern}, @var{program}, @
8258   @ovar{action-if-found}, @ovar{action-if-not-found})
8259 @acindex{EGREP_CPP}
8260 @var{program} is the text of a C or C++ program, on which shell
8261 variable, back quote, and backslash substitutions are performed.  If the
8262 output of running the preprocessor on @var{program} matches the
8263 extended regular expression @var{pattern}, execute shell commands
8264 @var{action-if-found}, otherwise execute @var{action-if-not-found}.
8265 @end defmac
8269 @node Running the Compiler
8270 @section Running the Compiler
8272 To check for a syntax feature of the current language's (@pxref{Language
8273 Choice}) compiler, such as whether it recognizes a certain keyword, or
8274 simply to try some library feature, use @code{AC_COMPILE_IFELSE} to try
8275 to compile a small program that uses that feature.
8277 @defmac AC_COMPILE_IFELSE (@var{input}, @ovar{action-if-true}, @
8278   @ovar{action-if-false})
8279 @acindex{COMPILE_IFELSE}
8280 Run the compiler and compilation flags of the current language
8281 (@pxref{Language Choice}) on the @var{input}, run the shell commands
8282 @var{action-if-true} on success, @var{action-if-false} otherwise.  The
8283 @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
8285 It is customary to report unexpected failures with
8286 @code{AC_MSG_FAILURE}.  This macro does not try to link; use
8287 @code{AC_LINK_IFELSE} if you need to do that (@pxref{Running the
8288 Linker}).
8289 @end defmac
8291 @ovindex ERL
8292 For tests in Erlang, the @var{input} must be the source code of a module named
8293 @code{conftest}.  @code{AC_COMPILE_IFELSE} generates a @file{conftest.beam}
8294 file that can be interpreted by the Erlang virtual machine (@code{ERL}).  It is
8295 recommended to use @code{AC_LANG_PROGRAM} to specify the test program,
8296 to ensure that the Erlang module has the right name.
8298 @node Running the Linker
8299 @section Running the Linker
8301 To check for a library, a function, or a global variable, Autoconf
8302 @command{configure} scripts try to compile and link a small program that
8303 uses it.  This is unlike Metaconfig, which by default uses @code{nm} or
8304 @code{ar} on the C library to try to figure out which functions are
8305 available.  Trying to link with the function is usually a more reliable
8306 approach because it avoids dealing with the variations in the options
8307 and output formats of @code{nm} and @code{ar} and in the location of the
8308 standard libraries.  It also allows configuring for cross-compilation or
8309 checking a function's runtime behavior if needed.  On the other hand,
8310 it can be slower than scanning the libraries once, but accuracy is more
8311 important than speed.
8313 @code{AC_LINK_IFELSE} is used to compile test programs to test for
8314 functions and global variables.  It is also used by @code{AC_CHECK_LIB}
8315 to check for libraries (@pxref{Libraries}), by adding the library being
8316 checked for to @code{LIBS} temporarily and trying to link a small
8317 program.
8319 @anchor{AC_LINK_IFELSE}
8320 @defmac AC_LINK_IFELSE (@var{input}, @ovar{action-if-true}, @
8321   @ovar{action-if-false})
8322 @acindex{LINK_IFELSE}
8323 Run the compiler (and compilation flags) and the linker of the current
8324 language (@pxref{Language Choice}) on the @var{input}, run the shell
8325 commands @var{action-if-true} on success, @var{action-if-false}
8326 otherwise.  The @var{input} can be made by @code{AC_LANG_PROGRAM} and
8327 friends.
8329 @code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
8330 current compilation flags.
8332 It is customary to report unexpected failures with
8333 @code{AC_MSG_FAILURE}.  This macro does not try to execute the program;
8334 use @code{AC_RUN_IFELSE} if you need to do that (@pxref{Runtime}).
8335 @end defmac
8337 The @code{AC_LINK_IFELSE} macro cannot be used for Erlang tests, since Erlang
8338 programs are interpreted and do not require linking.
8342 @node Runtime
8343 @section Checking Runtime Behavior
8345 Sometimes you need to find out how a system performs at runtime, such
8346 as whether a given function has a certain capability or bug.  If you
8347 can, make such checks when your program runs instead of when it is
8348 configured.  You can check for things like the machine's endianness when
8349 your program initializes itself.
8351 If you really need to test for a runtime behavior while configuring,
8352 you can write a test program to determine the result, and compile and
8353 run it using @code{AC_RUN_IFELSE}.  Avoid running test programs if
8354 possible, because this prevents people from configuring your package for
8355 cross-compiling.
8357 @anchor{AC_RUN_IFELSE}
8358 @defmac AC_RUN_IFELSE (@var{input}, @ovar{action-if-true}, @
8359   @ovar{action-if-false}, @ovar{action-if-cross-compiling})
8360 @acindex{RUN_IFELSE}
8361 If @var{program} compiles and links successfully and returns an exit
8362 status of 0 when executed, run shell commands @var{action-if-true}.
8363 Otherwise, run shell commands @var{action-if-false}.
8365 The @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
8366 @code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
8367 compilation flags of the current language (@pxref{Language Choice}).
8369 If the compiler being used does not produce executables that run on the
8370 system where @command{configure} is being run, then the test program is
8371 not run.  If the optional shell commands @var{action-if-cross-compiling}
8372 are given, they are run instead.  Otherwise, @command{configure} prints
8373 an error message and exits.
8375 In the @var{action-if-false} section, the failing exit status is
8376 available in the shell variable @samp{$?}.  This exit status might be
8377 that of a failed compilation, or it might be that of a failed program
8378 execution.
8380 It is customary to report unexpected failures with
8381 @code{AC_MSG_FAILURE}.
8382 @end defmac
8384 Try to provide a pessimistic default value to use when cross-compiling
8385 makes runtime tests impossible.  You do this by passing the optional
8386 last argument to @code{AC_RUN_IFELSE}.  @command{autoconf} prints a
8387 warning message when creating @command{configure} each time it
8388 encounters a call to @code{AC_RUN_IFELSE} with no
8389 @var{action-if-cross-compiling} argument given.  You may ignore the
8390 warning, though users cannot configure your package for
8391 cross-compiling.  A few of the macros distributed with Autoconf produce
8392 this warning message.
8394 To configure for cross-compiling you can also choose a value for those
8395 parameters based on the canonical system name (@pxref{Manual
8396 Configuration}).  Alternatively, set up a test results cache file with
8397 the correct values for the host system (@pxref{Caching Results}).
8399 @ovindex cross_compiling
8400 To provide a default for calls of @code{AC_RUN_IFELSE} that are embedded
8401 in other macros, including a few of the ones that come with Autoconf,
8402 you can test whether the shell variable @code{cross_compiling} is set to
8403 @samp{yes}, and then use an alternate method to get the results instead
8404 of calling the macros.
8406 It is also permissible to temporarily assign to @code{cross_compiling}
8407 in order to force tests to behave as though they are in a
8408 cross-compilation environment, particularly since this provides a way to
8409 test your @var{action-if-cross-compiling} even when you are not using a
8410 cross-compiler.
8412 @example
8413 # We temporarily set cross-compile mode to force AC_COMPUTE_INT
8414 # to use the slow link-only method
8415 save_cross_compiling=$cross_compiling
8416 cross_compiling=yes
8417 AC_COMPUTE_INT([@dots{}])
8418 cross_compiling=$save_cross_compiling
8419 @end example
8421 A C or C++ runtime test should be portable.
8422 @xref{Portable C and C++}.
8424 Erlang tests must exit themselves the Erlang VM by calling the @code{halt/1}
8425 function: the given status code is used to determine the success of the test
8426 (status is @code{0}) or its failure (status is different than @code{0}), as
8427 explained above.  It must be noted that data output through the standard output
8428 (e.g., using @code{io:format/2}) may be truncated when halting the VM.
8429 Therefore, if a test must output configuration information, it is recommended
8430 to create and to output data into the temporary file named @file{conftest.out},
8431 using the functions of module @code{file}.  The @code{conftest.out} file is
8432 automatically deleted by the @code{AC_RUN_IFELSE} macro.  For instance, a
8433 simplified implementation of Autoconf's @code{AC_ERLANG_SUBST_LIB_DIR}
8434 macro is:
8436 @example
8437 AC_INIT([LibdirTest], [1.0], [bug-libdirtest@@example.org])
8438 AC_ERLANG_NEED_ERL
8439 AC_LANG(Erlang)
8440 AC_RUN_IFELSE(
8441   [AC_LANG_PROGRAM([], [dnl
8442     file:write_file("conftest.out", code:lib_dir()),
8443     halt(0)])],
8444   [echo "code:lib_dir() returned: `cat conftest.out`"],
8445   [AC_MSG_FAILURE([test Erlang program execution failed])])
8446 @end example
8449 @node Systemology
8450 @section Systemology
8451 @cindex Systemology
8453 This section aims at presenting some systems and pointers to
8454 documentation.  It may help you addressing particular problems reported
8455 by users.
8457 @uref{http://www.opengroup.org/susv3, Posix-conforming systems} are
8458 derived from the @uref{http://www.bell-labs.com/history/unix/, Unix
8459 operating system}.
8461 The @uref{http://bhami.com/rosetta.html, Rosetta Stone for Unix}
8462 contains a table correlating the features of various Posix-conforming
8463 systems.  @uref{http://www.levenez.com/unix/, Unix History} is a
8464 simplified diagram of how many Unix systems were derived from each
8465 other.
8467 @uref{http://heirloom.sourceforge.net/, The Heirloom Project}
8468 provides some variants of traditional implementations of Unix utilities.
8470 @table @asis
8471 @item Darwin
8472 @cindex Darwin
8473 Darwin is also known as Mac OS X@.  Beware that the file system @emph{can} be
8474 case-preserving, but case insensitive.  This can cause nasty problems,
8475 since for instance the installation attempt for a package having an
8476 @file{INSTALL} file can result in @samp{make install} report that
8477 nothing was to be done!
8479 That's all dependent on whether the file system is a UFS (case
8480 sensitive) or HFS+ (case preserving).  By default Apple wants you to
8481 install the OS on HFS+.  Unfortunately, there are some pieces of
8482 software which really need to be built on UFS@.  We may want to rebuild
8483 Darwin to have both UFS and HFS+ available (and put the /local/build
8484 tree on the UFS).
8486 @item @acronym{QNX} 4.25
8487 @cindex @acronym{QNX} 4.25
8488 @c FIXME: Please, if you feel like writing something more precise,
8489 @c it'd be great.  In particular, I can't understand the difference with
8490 @c QNX Neutrino.
8491 @acronym{QNX} is a realtime operating system running on Intel architecture
8492 meant to be scalable from the small embedded systems to the hundred
8493 processor super-computer.  It claims to be Posix certified.  More
8494 information is available on the
8495 @uref{http://www.qnx.com/, @acronym{QNX} home page}.
8497 @item Tru64
8498 @cindex Tru64
8499 @uref{http://h30097.www3.hp.com/@/docs/,
8500 Documentation of several versions of Tru64} is available in different
8501 formats.
8503 @item Unix version 7
8504 @cindex Unix version 7
8505 @cindex V7
8506 Officially this was called the ``Seventh Edition'' of ``the @sc{unix}
8507 time-sharing system'' but we use the more-common name ``Unix version 7''.
8508 Documentation is available in the
8509 @uref{http://plan9.bell-labs.com/@/7thEdMan/, Unix Seventh Edition Manual}.
8510 Previous versions of Unix are called ``Unix version 6'', etc., but
8511 they were not as widely used.
8512 @end table
8515 @node Multiple Cases
8516 @section Multiple Cases
8518 Some operations are accomplished in several possible ways, depending on
8519 the OS variant.  Checking for them essentially requires a ``case
8520 statement''.  Autoconf does not directly provide one; however, it is
8521 easy to simulate by using a shell variable to keep track of whether a
8522 way to perform the operation has been found yet.
8524 Here is an example that uses the shell variable @code{fstype} to keep
8525 track of whether the remaining cases need to be checked.
8527 @example
8528 @group
8529 AC_MSG_CHECKING([how to get file system type])
8530 fstype=no
8531 # The order of these tests is important.
8532 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statvfs.h>
8533 #include <sys/fstyp.h>]])],
8534                   [AC_DEFINE([FSTYPE_STATVFS], [1],
8535                      [Define if statvfs exists.])
8536                    fstype=SVR4])
8537 if test $fstype = no; then
8538   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
8539 #include <sys/fstyp.h>]])],
8540                   [AC_DEFINE([FSTYPE_USG_STATFS], [1],
8541                      [Define if USG statfs.])
8542                    fstype=SVR3])
8544 if test $fstype = no; then
8545   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
8546 #include <sys/vmount.h>]])]),
8547                   [AC_DEFINE([FSTYPE_AIX_STATFS], [1],
8548                      [Define if AIX statfs.])
8549                    fstype=AIX])
8551 # (more cases omitted here)
8552 AC_MSG_RESULT([$fstype])
8553 @end group
8554 @end example
8556 @c ====================================================== Results of Tests.
8558 @node Results
8559 @chapter Results of Tests
8561 Once @command{configure} has determined whether a feature exists, what can
8562 it do to record that information?  There are four sorts of things it can
8563 do: define a C preprocessor symbol, set a variable in the output files,
8564 save the result in a cache file for future @command{configure} runs, and
8565 print a message letting the user know the result of the test.
8567 @menu
8568 * Defining Symbols::            Defining C preprocessor symbols
8569 * Setting Output Variables::    Replacing variables in output files
8570 * Special Chars in Variables::  Characters to beware of in variables
8571 * Caching Results::             Speeding up subsequent @command{configure} runs
8572 * Printing Messages::           Notifying @command{configure} users
8573 @end menu
8575 @node Defining Symbols
8576 @section Defining C Preprocessor Symbols
8578 A common action to take in response to a feature test is to define a C
8579 preprocessor symbol indicating the results of the test.  That is done by
8580 calling @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}.
8582 By default, @code{AC_OUTPUT} places the symbols defined by these macros
8583 into the output variable @code{DEFS}, which contains an option
8584 @option{-D@var{symbol}=@var{value}} for each symbol defined.  Unlike in
8585 Autoconf version 1, there is no variable @code{DEFS} defined while
8586 @command{configure} is running.  To check whether Autoconf macros have
8587 already defined a certain C preprocessor symbol, test the value of the
8588 appropriate cache variable, as in this example:
8590 @example
8591 AC_CHECK_FUNC([vprintf], [AC_DEFINE([HAVE_VPRINTF], [1],
8592                           [Define if vprintf exists.])])
8593 if test "$ac_cv_func_vprintf" != yes; then
8594   AC_CHECK_FUNC([_doprnt], [AC_DEFINE([HAVE_DOPRNT], [1],
8595                             [Define if _doprnt exists.])])
8597 @end example
8599 If @code{AC_CONFIG_HEADERS} has been called, then instead of creating
8600 @code{DEFS}, @code{AC_OUTPUT} creates a header file by substituting the
8601 correct values into @code{#define} statements in a template file.
8602 @xref{Configuration Headers}, for more information about this kind of
8603 output.
8605 @defmac AC_DEFINE (@var{variable}, @var{value}, @ovar{description})
8606 @defmacx AC_DEFINE (@var{variable})
8607 @cvindex @var{variable}
8608 @acindex{DEFINE}
8609 Define @var{variable} to @var{value} (verbatim), by defining a C
8610 preprocessor macro for @var{variable}.  @var{variable} should be a C
8611 identifier, optionally suffixed by a parenthesized argument list to
8612 define a C preprocessor macro with arguments.  The macro argument list,
8613 if present, should be a comma-separated list of C identifiers, possibly
8614 terminated by an ellipsis @samp{...} if C99 syntax is employed.
8615 @var{variable} should not contain comments, white space, trigraphs,
8616 backslash-newlines, universal character names, or non-@acronym{ASCII}
8617 characters.
8619 @var{value} may contain backslash-escaped newlines, which will be
8620 preserved if you use @code{AC_CONFIG_HEADERS} but flattened if passed
8621 via @code{@@DEFS@@} (with no effect on the compilation, since the
8622 preprocessor sees only one line in the first place).  @var{value} should
8623 not contain raw newlines.  If you are not using
8624 @code{AC_CONFIG_HEADERS}, @var{value} should not contain any @samp{#}
8625 characters, as @command{make} tends to eat them.  To use a shell
8626 variable, use @code{AC_DEFINE_UNQUOTED} instead.
8628 @var{description} is only useful if you are using
8629 @code{AC_CONFIG_HEADERS}.  In this case, @var{description} is put into
8630 the generated @file{config.h.in} as the comment before the macro define.
8631 The following example defines the C preprocessor variable
8632 @code{EQUATION} to be the string constant @samp{"$a > $b"}:
8634 @example
8635 AC_DEFINE([EQUATION], ["$a > $b"],
8636   [Equation string.])
8637 @end example
8639 If neither @var{value} nor @var{description} are given, then
8640 @var{value} defaults to 1 instead of to the empty string.  This is for
8641 backwards compatibility with older versions of Autoconf, but this usage
8642 is obsolescent and may be withdrawn in future versions of Autoconf.
8644 If the @var{variable} is a literal string, it is passed to
8645 @code{m4_pattern_allow} (@pxref{Forbidden Patterns}).
8647 If multiple @code{AC_DEFINE} statements are executed for the same
8648 @var{variable} name (not counting any parenthesized argument list),
8649 the last one wins.
8650 @end defmac
8652 @defmac AC_DEFINE_UNQUOTED (@var{variable}, @var{value}, @ovar{description})
8653 @defmacx AC_DEFINE_UNQUOTED (@var{variable})
8654 @acindex{DEFINE_UNQUOTED}
8655 @cvindex @var{variable}
8656 Like @code{AC_DEFINE}, but three shell expansions are
8657 performed---once---on @var{variable} and @var{value}: variable expansion
8658 (@samp{$}), command substitution (@samp{`}), and backslash escaping
8659 (@samp{\}).  Single and double quote characters in the value have no
8660 special meaning.  Use this macro instead of @code{AC_DEFINE} when
8661 @var{variable} or @var{value} is a shell variable.  Examples:
8663 @example
8664 AC_DEFINE_UNQUOTED([config_machfile], ["$machfile"],
8665   [Configuration machine file.])
8666 AC_DEFINE_UNQUOTED([GETGROUPS_T], [$ac_cv_type_getgroups],
8667   [getgroups return type.])
8668 AC_DEFINE_UNQUOTED([$ac_tr_hdr], [1],
8669   [Translated header name.])
8670 @end example
8671 @end defmac
8673 Due to a syntactical bizarreness of the Bourne shell, do not use
8674 semicolons to separate @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}
8675 calls from other macro calls or shell code; that can cause syntax errors
8676 in the resulting @command{configure} script.  Use either blanks or
8677 newlines.  That is, do this:
8679 @example
8680 AC_CHECK_HEADER([elf.h],
8681   [AC_DEFINE([SVR4], [1], [System V Release 4]) LIBS="-lelf $LIBS"])
8682 @end example
8684 @noindent
8685 or this:
8687 @example
8688 AC_CHECK_HEADER([elf.h],
8689   [AC_DEFINE([SVR4], [1], [System V Release 4])
8690    LIBS="-lelf $LIBS"])
8691 @end example
8693 @noindent
8694 instead of this:
8696 @example
8697 AC_CHECK_HEADER([elf.h],
8698   [AC_DEFINE([SVR4], [1], [System V Release 4]); LIBS="-lelf $LIBS"])
8699 @end example
8701 @node Setting Output Variables
8702 @section Setting Output Variables
8703 @cindex Output variables
8705 Another way to record the results of tests is to set @dfn{output
8706 variables}, which are shell variables whose values are substituted into
8707 files that @command{configure} outputs.  The two macros below create new
8708 output variables.  @xref{Preset Output Variables}, for a list of output
8709 variables that are always available.
8711 @defmac AC_SUBST (@var{variable}, @ovar{value})
8712 @acindex{SUBST}
8713 Create an output variable from a shell variable.  Make @code{AC_OUTPUT}
8714 substitute the variable @var{variable} into output files (typically one
8715 or more makefiles).  This means that @code{AC_OUTPUT}
8716 replaces instances of @samp{@@@var{variable}@@} in input files with the
8717 value that the shell variable @var{variable} has when @code{AC_OUTPUT}
8718 is called.  The value can contain any non-@code{NUL} character, including
8719 newline.
8720 Variable occurrences should not overlap: e.g., an input file should
8721 not contain @samp{@@@var{var1}@@@var{var2}@@} if @var{var1} and @var{var2}
8722 are variable names.
8723 The substituted value is not rescanned for more output variables;
8724 occurrences of @samp{@@@var{variable}@@} in the value are inserted
8725 literally into the output file.  (The algorithm uses the special marker
8726 @code{|#_!!_#|} internally, so neither the substituted value nor the
8727 output file may contain @code{|#_!!_#|}.)
8729 If @var{value} is given, in addition assign it to @var{variable}.
8731 The string @var{variable} is passed to @code{m4_pattern_allow}
8732 (@pxref{Forbidden Patterns}).
8733 @end defmac
8735 @defmac AC_SUBST_FILE (@var{variable})
8736 @acindex{SUBST_FILE}
8737 Another way to create an output variable from a shell variable.  Make
8738 @code{AC_OUTPUT} insert (without substitutions) the contents of the file
8739 named by shell variable @var{variable} into output files.  This means
8740 that @code{AC_OUTPUT} replaces instances of
8741 @samp{@@@var{variable}@@} in output files (such as @file{Makefile.in})
8742 with the contents of the file that the shell variable @var{variable}
8743 names when @code{AC_OUTPUT} is called.  Set the variable to
8744 @file{/dev/null} for cases that do not have a file to insert.
8745 This substitution occurs only when the @samp{@@@var{variable}@@} is on a
8746 line by itself, optionally surrounded by spaces and tabs.  The
8747 substitution replaces the whole line, including the spaces, tabs, and
8748 the terminating newline.
8750 This macro is useful for inserting makefile fragments containing
8751 special dependencies or other @code{make} directives for particular host
8752 or target types into makefiles.  For example, @file{configure.ac}
8753 could contain:
8755 @example
8756 AC_SUBST_FILE([host_frag])
8757 host_frag=$srcdir/conf/sun4.mh
8758 @end example
8760 @noindent
8761 and then a @file{Makefile.in} could contain:
8763 @example
8764 @@host_frag@@
8765 @end example
8767 The string @var{variable} is passed to @code{m4_pattern_allow}
8768 (@pxref{Forbidden Patterns}).
8769 @end defmac
8771 @cindex Precious Variable
8772 @cindex Variable, Precious
8773 Running @command{configure} in varying environments can be extremely
8774 dangerous.  If for instance the user runs @samp{CC=bizarre-cc
8775 ./configure}, then the cache, @file{config.h}, and many other output
8776 files depend upon @command{bizarre-cc} being the C compiler.  If
8777 for some reason the user runs @command{./configure} again, or if it is
8778 run via @samp{./config.status --recheck}, (@xref{Automatic Remaking},
8779 and @pxref{config.status Invocation}), then the configuration can be
8780 inconsistent, composed of results depending upon two different
8781 compilers.
8783 Environment variables that affect this situation, such as @samp{CC}
8784 above, are called @dfn{precious variables}, and can be declared as such
8785 by @code{AC_ARG_VAR}.
8787 @defmac AC_ARG_VAR (@var{variable}, @var{description})
8788 @acindex{ARG_VAR}
8789 Declare @var{variable} is a precious variable, and include its
8790 @var{description} in the variable section of @samp{./configure --help}.
8792 Being precious means that
8793 @itemize @minus
8794 @item
8795 @var{variable} is substituted via @code{AC_SUBST}.
8797 @item
8798 The value of @var{variable} when @command{configure} was launched is
8799 saved in the cache, including if it was not specified on the command
8800 line but via the environment.  Indeed, while @command{configure} can
8801 notice the definition of @code{CC} in @samp{./configure CC=bizarre-cc},
8802 it is impossible to notice it in @samp{CC=bizarre-cc ./configure},
8803 which, unfortunately, is what most users do.
8805 We emphasize that it is the @emph{initial} value of @var{variable} which
8806 is saved, not that found during the execution of @command{configure}.
8807 Indeed, specifying @samp{./configure FOO=foo} and letting
8808 @samp{./configure} guess that @code{FOO} is @code{foo} can be two
8809 different things.
8811 @item
8812 @var{variable} is checked for consistency between two
8813 @command{configure} runs.  For instance:
8815 @example
8816 $ @kbd{./configure --silent --config-cache}
8817 $ @kbd{CC=cc ./configure --silent --config-cache}
8818 configure: error: `CC' was not set in the previous run
8819 configure: error: changes in the environment can compromise \
8820 the build
8821 configure: error: run `make distclean' and/or \
8822 `rm config.cache' and start over
8823 @end example
8825 @noindent
8826 and similarly if the variable is unset, or if its content is changed.
8827 If the content has white space changes only, then the error is degraded
8828 to a warning only, but the old value is reused.
8830 @item
8831 @var{variable} is kept during automatic reconfiguration
8832 (@pxref{config.status Invocation}) as if it had been passed as a command
8833 line argument, including when no cache is used:
8835 @example
8836 $ @kbd{CC=/usr/bin/cc ./configure var=raboof --silent}
8837 $ @kbd{./config.status --recheck}
8838 running CONFIG_SHELL=/bin/sh /bin/sh ./configure var=raboof \
8839   CC=/usr/bin/cc  --no-create --no-recursion
8840 @end example
8841 @end itemize
8842 @end defmac
8844 @node Special Chars in Variables
8845 @section Special Characters in Output Variables
8846 @cindex Output variables, special characters in
8848 Many output variables are intended to be evaluated both by
8849 @command{make} and by the shell.  Some characters are expanded
8850 differently in these two contexts, so to avoid confusion these
8851 variables' values should not contain any of the following characters:
8853 @example
8854 " # $ & ' ( ) * ; < > ? [ \ ^ ` |
8855 @end example
8857 Also, these variables' values should neither contain newlines, nor start
8858 with @samp{~}, nor contain white space or @samp{:} immediately followed
8859 by @samp{~}.  The values can contain nonempty sequences of white space
8860 characters like tabs and spaces, but each such sequence might
8861 arbitrarily be replaced by a single space during substitution.
8863 These restrictions apply both to the values that @command{configure}
8864 computes, and to the values set directly by the user.  For example, the
8865 following invocations of @command{configure} are problematic, since they
8866 attempt to use special characters within @code{CPPFLAGS} and white space
8867 within @code{$(srcdir)}:
8869 @example
8870 CPPFLAGS='-DOUCH="&\"#$*?"' '../My Source/ouch-1.0/configure'
8872 '../My Source/ouch-1.0/configure' CPPFLAGS='-DOUCH="&\"#$*?"'
8873 @end example
8875 @node Caching Results
8876 @section Caching Results
8877 @cindex Cache
8879 To avoid checking for the same features repeatedly in various
8880 @command{configure} scripts (or in repeated runs of one script),
8881 @command{configure} can optionally save the results of many checks in a
8882 @dfn{cache file} (@pxref{Cache Files}).  If a @command{configure} script
8883 runs with caching enabled and finds a cache file, it reads the results
8884 of previous runs from the cache and avoids rerunning those checks.  As a
8885 result, @command{configure} can then run much faster than if it had to
8886 perform all of the checks every time.
8888 @defmac AC_CACHE_VAL (@var{cache-id}, @var{commands-to-set-it})
8889 @acindex{CACHE_VAL}
8890 Ensure that the results of the check identified by @var{cache-id} are
8891 available.  If the results of the check were in the cache file that was
8892 read, and @command{configure} was not given the @option{--quiet} or
8893 @option{--silent} option, print a message saying that the result was
8894 cached; otherwise, run the shell commands @var{commands-to-set-it}.  If
8895 the shell commands are run to determine the value, the value is
8896 saved in the cache file just before @command{configure} creates its output
8897 files.  @xref{Cache Variable Names}, for how to choose the name of the
8898 @var{cache-id} variable.
8900 The @var{commands-to-set-it} @emph{must have no side effects} except for
8901 setting the variable @var{cache-id}, see below.
8902 @end defmac
8904 @defmac AC_CACHE_CHECK (@var{message}, @var{cache-id}, @
8905   @var{commands-to-set-it})
8906 @acindex{CACHE_CHECK}
8907 A wrapper for @code{AC_CACHE_VAL} that takes care of printing the
8908 messages.  This macro provides a convenient shorthand for the most
8909 common way to use these macros.  It calls @code{AC_MSG_CHECKING} for
8910 @var{message}, then @code{AC_CACHE_VAL} with the @var{cache-id} and
8911 @var{commands} arguments, and @code{AC_MSG_RESULT} with @var{cache-id}.
8913 The @var{commands-to-set-it} @emph{must have no side effects} except for
8914 setting the variable @var{cache-id}, see below.
8915 @end defmac
8917 It is common to find buggy macros using @code{AC_CACHE_VAL} or
8918 @code{AC_CACHE_CHECK}, because people are tempted to call
8919 @code{AC_DEFINE} in the @var{commands-to-set-it}.  Instead, the code that
8920 @emph{follows} the call to @code{AC_CACHE_VAL} should call
8921 @code{AC_DEFINE}, by examining the value of the cache variable.  For
8922 instance, the following macro is broken:
8924 @example
8925 @group
8926 AC_DEFUN([AC_SHELL_TRUE],
8927 [AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
8928                 [my_cv_shell_true_works=no
8929                  (true) 2>/dev/null && my_cv_shell_true_works=yes
8930                  if test "$my_cv_shell_true_works" = yes; then
8931                    AC_DEFINE([TRUE_WORKS], [1],
8932                              [Define if `true(1)' works properly.])
8933                  fi])
8935 @end group
8936 @end example
8938 @noindent
8939 This fails if the cache is enabled: the second time this macro is run,
8940 @code{TRUE_WORKS} @emph{will not be defined}.  The proper implementation
8943 @example
8944 @group
8945 AC_DEFUN([AC_SHELL_TRUE],
8946 [AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
8947                 [my_cv_shell_true_works=no
8948                  (true) 2>/dev/null && my_cv_shell_true_works=yes])
8949  if test "$my_cv_shell_true_works" = yes; then
8950    AC_DEFINE([TRUE_WORKS], [1],
8951              [Define if `true(1)' works properly.])
8952  fi
8954 @end group
8955 @end example
8957 Also, @var{commands-to-set-it} should not print any messages, for
8958 example with @code{AC_MSG_CHECKING}; do that before calling
8959 @code{AC_CACHE_VAL}, so the messages are printed regardless of whether
8960 the results of the check are retrieved from the cache or determined by
8961 running the shell commands.
8963 @menu
8964 * Cache Variable Names::        Shell variables used in caches
8965 * Cache Files::                 Files @command{configure} uses for caching
8966 * Cache Checkpointing::         Loading and saving the cache file
8967 @end menu
8969 @node Cache Variable Names
8970 @subsection Cache Variable Names
8971 @cindex Cache variable
8973 The names of cache variables should have the following format:
8975 @example
8976 @var{package-prefix}_cv_@var{value-type}_@var{specific-value}_@ovar{additional-options}
8977 @end example
8979 @noindent
8980 for example, @samp{ac_cv_header_stat_broken} or
8981 @samp{ac_cv_prog_gcc_traditional}.  The parts of the variable name are:
8983 @table @asis
8984 @item @var{package-prefix}
8985 An abbreviation for your package or organization; the same prefix you
8986 begin local Autoconf macros with, except lowercase by convention.
8987 For cache values used by the distributed Autoconf macros, this value is
8988 @samp{ac}.
8990 @item @code{_cv_}
8991 Indicates that this shell variable is a cache value.  This string
8992 @emph{must} be present in the variable name, including the leading
8993 underscore.
8995 @item @var{value-type}
8996 A convention for classifying cache values, to produce a rational naming
8997 system.  The values used in Autoconf are listed in @ref{Macro Names}.
8999 @item @var{specific-value}
9000 Which member of the class of cache values this test applies to.
9001 For example, which function (@samp{alloca}), program (@samp{gcc}), or
9002 output variable (@samp{INSTALL}).
9004 @item @var{additional-options}
9005 Any particular behavior of the specific member that this test applies to.
9006 For example, @samp{broken} or @samp{set}.  This part of the name may
9007 be omitted if it does not apply.
9008 @end table
9010 The values assigned to cache variables may not contain newlines.
9011 Usually, their values are Boolean (@samp{yes} or @samp{no}) or the
9012 names of files or functions; so this is not an important restriction.
9014 @node Cache Files
9015 @subsection Cache Files
9017 A cache file is a shell script that caches the results of configure
9018 tests run on one system so they can be shared between configure scripts
9019 and configure runs.  It is not useful on other systems.  If its contents
9020 are invalid for some reason, the user may delete or edit it.
9022 By default, @command{configure} uses no cache file,
9023 to avoid problems caused by accidental
9024 use of stale cache files.
9026 To enable caching, @command{configure} accepts @option{--config-cache} (or
9027 @option{-C}) to cache results in the file @file{config.cache}.
9028 Alternatively, @option{--cache-file=@var{file}} specifies that
9029 @var{file} be the cache file.  The cache file is created if it does not
9030 exist already.  When @command{configure} calls @command{configure} scripts in
9031 subdirectories, it uses the @option{--cache-file} argument so that they
9032 share the same cache.  @xref{Subdirectories}, for information on
9033 configuring subdirectories with the @code{AC_CONFIG_SUBDIRS} macro.
9035 @file{config.status} only pays attention to the cache file if it is
9036 given the @option{--recheck} option, which makes it rerun
9037 @command{configure}.
9039 It is wrong to try to distribute cache files for particular system types.
9040 There is too much room for error in doing that, and too much
9041 administrative overhead in maintaining them.  For any features that
9042 can't be guessed automatically, use the standard method of the canonical
9043 system type and linking files (@pxref{Manual Configuration}).
9045 The site initialization script can specify a site-wide cache file to
9046 use, instead of the usual per-program cache.  In this case, the cache
9047 file gradually accumulates information whenever someone runs a new
9048 @command{configure} script.  (Running @command{configure} merges the new cache
9049 results with the existing cache file.)  This may cause problems,
9050 however, if the system configuration (e.g., the installed libraries or
9051 compilers) changes and the stale cache file is not deleted.
9053 @node Cache Checkpointing
9054 @subsection Cache Checkpointing
9056 If your configure script, or a macro called from @file{configure.ac}, happens
9057 to abort the configure process, it may be useful to checkpoint the cache
9058 a few times at key points using @code{AC_CACHE_SAVE}.  Doing so
9059 reduces the amount of time it takes to rerun the configure script with
9060 (hopefully) the error that caused the previous abort corrected.
9062 @c FIXME: Do we really want to document this guy?
9063 @defmac AC_CACHE_LOAD
9064 @acindex{CACHE_LOAD}
9065 Loads values from existing cache file, or creates a new cache file if a
9066 cache file is not found.  Called automatically from @code{AC_INIT}.
9067 @end defmac
9069 @defmac AC_CACHE_SAVE
9070 @acindex{CACHE_SAVE}
9071 Flushes all cached values to the cache file.  Called automatically from
9072 @code{AC_OUTPUT}, but it can be quite useful to call
9073 @code{AC_CACHE_SAVE} at key points in @file{configure.ac}.
9074 @end defmac
9076 For instance:
9078 @example
9079 @r{ @dots{} AC_INIT, etc. @dots{}}
9080 @group
9081 # Checks for programs.
9082 AC_PROG_CC
9083 AC_PROG_AWK
9084 @r{ @dots{} more program checks @dots{}}
9085 AC_CACHE_SAVE
9086 @end group
9088 @group
9089 # Checks for libraries.
9090 AC_CHECK_LIB([nsl], [gethostbyname])
9091 AC_CHECK_LIB([socket], [connect])
9092 @r{ @dots{} more lib checks @dots{}}
9093 AC_CACHE_SAVE
9094 @end group
9096 @group
9097 # Might abort@dots{}
9098 AM_PATH_GTK([1.0.2], [], [AC_MSG_ERROR([GTK not in path])])
9099 AM_PATH_GTKMM([0.9.5], [], [AC_MSG_ERROR([GTK not in path])])
9100 @end group
9101 @r{ @dots{} AC_OUTPUT, etc. @dots{}}
9102 @end example
9104 @node Printing Messages
9105 @section Printing Messages
9106 @cindex Messages, from @command{configure}
9108 @command{configure} scripts need to give users running them several kinds
9109 of information.  The following macros print messages in ways appropriate
9110 for each kind.  The arguments to all of them get enclosed in shell
9111 double quotes, so the shell performs variable and back-quote
9112 substitution on them.
9114 These macros are all wrappers around the @command{echo} shell command.
9115 They direct output to the appropriate file descriptor (@pxref{File
9116 Descriptor Macros}).
9117 @command{configure} scripts should rarely need to run @command{echo} directly
9118 to print messages for the user.  Using these macros makes it easy to
9119 change how and when each kind of message is printed; such changes need
9120 only be made to the macro definitions and all the callers change
9121 automatically.
9123 To diagnose static issues, i.e., when @command{autoconf} is run, see
9124 @ref{Diagnostic Macros}.
9126 @defmac AC_MSG_CHECKING (@var{feature-description})
9127 @acindex{MSG_CHECKING}
9128 Notify the user that @command{configure} is checking for a particular
9129 feature.  This macro prints a message that starts with @samp{checking }
9130 and ends with @samp{...} and no newline.  It must be followed by a call
9131 to @code{AC_MSG_RESULT} to print the result of the check and the
9132 newline.  The @var{feature-description} should be something like
9133 @samp{whether the Fortran compiler accepts C++ comments} or @samp{for
9134 c89}.
9136 This macro prints nothing if @command{configure} is run with the
9137 @option{--quiet} or @option{--silent} option.
9138 @end defmac
9140 @anchor{AC_MSG_RESULT}
9141 @defmac AC_MSG_RESULT (@var{result-description})
9142 @acindex{MSG_RESULT}
9143 Notify the user of the results of a check.  @var{result-description} is
9144 almost always the value of the cache variable for the check, typically
9145 @samp{yes}, @samp{no}, or a file name.  This macro should follow a call
9146 to @code{AC_MSG_CHECKING}, and the @var{result-description} should be
9147 the completion of the message printed by the call to
9148 @code{AC_MSG_CHECKING}.
9150 This macro prints nothing if @command{configure} is run with the
9151 @option{--quiet} or @option{--silent} option.
9152 @end defmac
9154 @anchor{AC_MSG_NOTICE}
9155 @defmac AC_MSG_NOTICE (@var{message})
9156 @acindex{MSG_NOTICE}
9157 Deliver the @var{message} to the user.  It is useful mainly to print a
9158 general description of the overall purpose of a group of feature checks,
9159 e.g.,
9161 @example
9162 AC_MSG_NOTICE([checking if stack overflow is detectable])
9163 @end example
9165 This macro prints nothing if @command{configure} is run with the
9166 @option{--quiet} or @option{--silent} option.
9167 @end defmac
9169 @anchor{AC_MSG_ERROR}
9170 @defmac AC_MSG_ERROR (@var{error-description}, @ovar{exit-status})
9171 @acindex{MSG_ERROR}
9172 Notify the user of an error that prevents @command{configure} from
9173 completing.  This macro prints an error message to the standard error
9174 output and exits @command{configure} with @var{exit-status} (1 by default).
9175 @var{error-description} should be something like @samp{invalid value
9176 $HOME for \$HOME}.
9178 The @var{error-description} should start with a lower-case letter, and
9179 ``cannot'' is preferred to ``can't''.
9180 @end defmac
9182 @defmac AC_MSG_FAILURE (@var{error-description}, @ovar{exit-status})
9183 @acindex{MSG_FAILURE}
9184 This @code{AC_MSG_ERROR} wrapper notifies the user of an error that
9185 prevents @command{configure} from completing @emph{and} that additional
9186 details are provided in @file{config.log}.  This is typically used when
9187 abnormal results are found during a compilation.
9188 @end defmac
9190 @anchor{AC_MSG_WARN}
9191 @defmac AC_MSG_WARN (@var{problem-description})
9192 @acindex{MSG_WARN}
9193 Notify the @command{configure} user of a possible problem.  This macro
9194 prints the message to the standard error output; @command{configure}
9195 continues running afterward, so macros that call @code{AC_MSG_WARN} should
9196 provide a default (back-up) behavior for the situations they warn about.
9197 @var{problem-description} should be something like @samp{ln -s seems to
9198 make hard links}.
9199 @end defmac
9203 @c ====================================================== Programming in M4.
9205 @node Programming in M4
9206 @chapter Programming in M4
9207 @cindex M4
9209 Autoconf is written on top of two layers: @dfn{M4sugar}, which provides
9210 convenient macros for pure M4 programming, and @dfn{M4sh}, which
9211 provides macros dedicated to shell script generation.
9213 As of this version of Autoconf, these two layers still contain
9214 experimental macros, whose interface might change in the future.  As a
9215 matter of fact, @emph{anything that is not documented must not be used}.
9217 @menu
9218 * M4 Quotation::                Protecting macros from unwanted expansion
9219 * Using autom4te::              The Autoconf executables backbone
9220 * Programming in M4sugar::      Convenient pure M4 macros
9221 * Programming in M4sh::         Common shell Constructs
9222 * File Descriptor Macros::      File descriptor macros for input and output
9223 @end menu
9225 @node M4 Quotation
9226 @section M4 Quotation
9227 @cindex M4 quotation
9228 @cindex quotation
9230 The most common problem with existing macros is an improper quotation.
9231 This section, which users of Autoconf can skip, but which macro writers
9232 @emph{must} read, first justifies the quotation scheme that was chosen
9233 for Autoconf and then ends with a rule of thumb.  Understanding the
9234 former helps one to follow the latter.
9236 @menu
9237 * Active Characters::           Characters that change the behavior of M4
9238 * One Macro Call::              Quotation and one macro call
9239 * Quoting and Parameters::      M4 vs. shell parameters
9240 * Quotation and Nested Macros::  Macros calling macros
9241 * Changequote is Evil::         Worse than INTERCAL: M4 + changequote
9242 * Quadrigraphs::                Another way to escape special characters
9243 * Quotation Rule Of Thumb::     One parenthesis, one quote
9244 @end menu
9246 @node Active Characters
9247 @subsection Active Characters
9249 To fully understand where proper quotation is important, you first need
9250 to know what the special characters are in Autoconf: @samp{#} introduces
9251 a comment inside which no macro expansion is performed, @samp{,}
9252 separates arguments, @samp{[} and @samp{]} are the quotes themselves,
9253 @samp{(} and @samp{)} (which M4 tries to match by pairs), and finally
9254 @samp{$} inside a macro definition.
9256 In order to understand the delicate case of macro calls, we first have
9257 to present some obvious failures.  Below they are ``obvious-ified'',
9258 but when you find them in real life, they are usually in disguise.
9260 Comments, introduced by a hash and running up to the newline, are opaque
9261 tokens to the top level: active characters are turned off, and there is
9262 no macro expansion:
9264 @example
9265 # define([def], ine)
9266 @result{}# define([def], ine)
9267 @end example
9269 Each time there can be a macro expansion, there is a quotation
9270 expansion, i.e., one level of quotes is stripped:
9272 @example
9273 int tab[10];
9274 @result{}int tab10;
9275 [int tab[10];]
9276 @result{}int tab[10];
9277 @end example
9279 Without this in mind, the reader might try hopelessly to use her macro
9280 @code{array}:
9282 @example
9283 define([array], [int tab[10];])
9284 array
9285 @result{}int tab10;
9286 [array]
9287 @result{}array
9288 @end example
9290 @noindent
9291 How can you correctly output the intended results@footnote{Using
9292 @code{defn}.}?
9295 @node One Macro Call
9296 @subsection One Macro Call
9298 Let's proceed on the interaction between active characters and macros
9299 with this small macro, which just returns its first argument:
9301 @example
9302 define([car], [$1])
9303 @end example
9305 @noindent
9306 The two pairs of quotes above are not part of the arguments of
9307 @code{define}; rather, they are understood by the top level when it
9308 tries to find the arguments of @code{define}.  Therefore, assuming
9309 @code{car} is not already defined, it is equivalent to write:
9311 @example
9312 define(car, $1)
9313 @end example
9315 @noindent
9316 But, while it is acceptable for a @file{configure.ac} to avoid unnecessary
9317 quotes, it is bad practice for Autoconf macros which must both be more
9318 robust and also advocate perfect style.
9320 At the top level, there are only two possibilities: either you
9321 quote or you don't:
9323 @example
9324 car(foo, bar, baz)
9325 @result{}foo
9326 [car(foo, bar, baz)]
9327 @result{}car(foo, bar, baz)
9328 @end example
9330 Let's pay attention to the special characters:
9332 @example
9333 car(#)
9334 @error{}EOF in argument list
9335 @end example
9337 The closing parenthesis is hidden in the comment; with a hypothetical
9338 quoting, the top level understood it this way:
9340 @example
9341 car([#)]
9342 @end example
9344 @noindent
9345 Proper quotation, of course, fixes the problem:
9347 @example
9348 car([#])
9349 @result{}#
9350 @end example
9352 Here are more examples:
9354 @example
9355 car(foo, bar)
9356 @result{}foo
9357 car([foo, bar])
9358 @result{}foo, bar
9359 car((foo, bar))
9360 @result{}(foo, bar)
9361 car([(foo], [bar)])
9362 @result{}(foo
9363 define([a], [b])
9364 @result{}
9365 car(a)
9366 @result{}b
9367 car([a])
9368 @result{}b
9369 car([[a]])
9370 @result{}a
9371 car([[[a]]])
9372 @result{}[a]
9373 @end example
9375 @node Quoting and Parameters
9376 @subsection Quoting and Parameters
9378 When M4 encounters @samp{$} within a macro definition, followed
9379 immediately by a character it recognizes (@samp{0}@dots{}@samp{9},
9380 @samp{#}, @samp{@@}, or @samp{*}), it will perform M4 parameter
9381 expansion.  This happens regardless of how many layers of quotes the
9382 parameter expansion is nested within, or even if it occurs in text that
9383 will be rescanned as a comment.
9385 @example
9386 define([none], [$1])
9387 @result{}
9388 define([one], [[$1]])
9389 @result{}
9390 define([two], [[[$1]]])
9391 @result{}
9392 define([comment], [# $1])
9393 @result{}
9394 define([active], [ACTIVE])
9395 @result{}
9396 none([active])
9397 @result{}ACTIVE
9398 one([active])
9399 @result{}active
9400 two([active])
9401 @result{}[active]
9402 comment([active])
9403 @result{}# active
9404 @end example
9406 On the other hand, since autoconf generates shell code, you often want
9407 to output shell variable expansion, rather than performing M4 parameter
9408 expansion.  To do this, you must use M4 quoting to separate the @samp{$}
9409 from the next character in the definition of your macro.  If the macro
9410 definition occurs in single-quoted text, then insert another level of
9411 quoting; if the usage is already inside a double-quoted string, then
9412 split it into concatenated strings.
9414 @example
9415 define([single], [a single-quoted $[]1 definition])
9416 @result{}
9417 define([double], [[a double-quoted $][1 definition]])
9418 @result{}
9419 single
9420 @result{}a single-quoted $1 definition
9421 double
9422 @result{}a double-quoted $1 definition
9423 @end example
9425 Posix states that M4 implementations are free to provide implementation
9426 extensions when @samp{$@{} is encountered in a macro definition.
9427 Autoconf reserves the longer sequence @samp{$@{@{} for use with planned
9428 extensions that will be available in the future @acronym{GNU} M4 2.0,
9429 but guarantees that all other instances of @samp{$@{} will be output
9430 literally.  Therefore, this idiom can also be used to output shell code
9431 parameter references:
9433 @example
9434 define([first], [$@{1@}])first
9435 @result{}$@{1@}
9436 @end example
9438 Posix also states that @samp{$11} should expand to the first parameter
9439 concatenated with a literal @samp{1}, although some versions of
9440 @acronym{GNU} M4 expand the eleventh parameter instead.  For
9441 portability, you should only use single-digit M4 parameter expansion.
9443 With this in mind, we can explore the cases where macros invoke
9444 macros@enddots{}
9446 @node Quotation and Nested Macros
9447 @subsection Quotation and Nested Macros
9449 The examples below use the following macros:
9451 @example
9452 define([car], [$1])
9453 define([active], [ACT, IVE])
9454 define([array], [int tab[10]])
9455 @end example
9457 Each additional embedded macro call introduces other possible
9458 interesting quotations:
9460 @example
9461 car(active)
9462 @result{}ACT
9463 car([active])
9464 @result{}ACT, IVE
9465 car([[active]])
9466 @result{}active
9467 @end example
9469 In the first case, the top level looks for the arguments of @code{car},
9470 and finds @samp{active}.  Because M4 evaluates its arguments
9471 before applying the macro, @samp{active} is expanded, which results in:
9473 @example
9474 car(ACT, IVE)
9475 @result{}ACT
9476 @end example
9478 @noindent
9479 In the second case, the top level gives @samp{active} as first and only
9480 argument of @code{car}, which results in:
9482 @example
9483 active
9484 @result{}ACT, IVE
9485 @end example
9487 @noindent
9488 i.e., the argument is evaluated @emph{after} the macro that invokes it.
9489 In the third case, @code{car} receives @samp{[active]}, which results in:
9491 @example
9492 [active]
9493 @result{}active
9494 @end example
9496 @noindent
9497 exactly as we already saw above.
9499 The example above, applied to a more realistic example, gives:
9501 @example
9502 car(int tab[10];)
9503 @result{}int tab10;
9504 car([int tab[10];])
9505 @result{}int tab10;
9506 car([[int tab[10];]])
9507 @result{}int tab[10];
9508 @end example
9510 @noindent
9511 Huh?  The first case is easily understood, but why is the second wrong,
9512 and the third right?  To understand that, you must know that after
9513 M4 expands a macro, the resulting text is immediately subjected
9514 to macro expansion and quote removal.  This means that the quote removal
9515 occurs twice---first before the argument is passed to the @code{car}
9516 macro, and second after the @code{car} macro expands to the first
9517 argument.
9519 As the author of the Autoconf macro @code{car}, you then consider it to
9520 be incorrect that your users have to double-quote the arguments of
9521 @code{car}, so you ``fix'' your macro.  Let's call it @code{qar} for
9522 quoted car:
9524 @example
9525 define([qar], [[$1]])
9526 @end example
9528 @noindent
9529 and check that @code{qar} is properly fixed:
9531 @example
9532 qar([int tab[10];])
9533 @result{}int tab[10];
9534 @end example
9536 @noindent
9537 Ahhh!  That's much better.
9539 But note what you've done: now that the result of @code{qar} is always
9540 a literal string, the only time a user can use nested macros is if she
9541 relies on an @emph{unquoted} macro call:
9543 @example
9544 qar(active)
9545 @result{}ACT
9546 qar([active])
9547 @result{}active
9548 @end example
9550 @noindent
9551 leaving no way for her to reproduce what she used to do with @code{car}:
9553 @example
9554 car([active])
9555 @result{}ACT, IVE
9556 @end example
9558 @noindent
9559 Worse yet: she wants to use a macro that produces a set of @code{cpp}
9560 macros:
9562 @example
9563 define([my_includes], [#include <stdio.h>])
9564 car([my_includes])
9565 @result{}#include <stdio.h>
9566 qar(my_includes)
9567 @error{}EOF in argument list
9568 @end example
9570 This macro, @code{qar}, because it double quotes its arguments, forces
9571 its users to leave their macro calls unquoted, which is dangerous.
9572 Commas and other active symbols are interpreted by M4 before
9573 they are given to the macro, often not in the way the users expect.
9574 Also, because @code{qar} behaves differently from the other macros,
9575 it's an exception that should be avoided in Autoconf.
9577 @node Changequote is Evil
9578 @subsection @code{changequote} is Evil
9579 @cindex @code{changequote}
9581 The temptation is often high to bypass proper quotation, in particular
9582 when it's late at night.  Then, many experienced Autoconf hackers
9583 finally surrender to the dark side of the force and use the ultimate
9584 weapon: @code{changequote}.
9586 The M4 builtin @code{changequote} belongs to a set of primitives that
9587 allow one to adjust the syntax of the language to adjust it to one's
9588 needs.  For instance, by default M4 uses @samp{`} and @samp{'} as
9589 quotes, but in the context of shell programming (and actually of most
9590 programming languages), that's about the worst choice one can make:
9591 because of strings and back-quoted expressions in shell code (such as
9592 @samp{'this'} and @samp{`that`}), and because of literal characters in usual
9593 programming languages (as in @samp{'0'}), there are many unbalanced
9594 @samp{`} and @samp{'}.  Proper M4 quotation then becomes a nightmare, if
9595 not impossible.  In order to make M4 useful in such a context, its
9596 designers have equipped it with @code{changequote}, which makes it
9597 possible to choose another pair of quotes.  M4sugar, M4sh, Autoconf, and
9598 Autotest all have chosen to use @samp{[} and @samp{]}.  Not especially
9599 because they are unlikely characters, but @emph{because they are
9600 characters unlikely to be unbalanced}.
9602 There are other magic primitives, such as @code{changecom} to specify
9603 what syntactic forms are comments (it is common to see
9604 @samp{changecom(<!--, -->)} when M4 is used to produce HTML pages),
9605 @code{changeword} and @code{changesyntax} to change other syntactic
9606 details (such as the character to denote the @var{n}th argument, @samp{$} by
9607 default, the parentheses around arguments, etc.).
9609 These primitives are really meant to make M4 more useful for specific
9610 domains: they should be considered like command line options:
9611 @option{--quotes}, @option{--comments}, @option{--words}, and
9612 @option{--syntax}.  Nevertheless, they are implemented as M4 builtins, as
9613 it makes M4 libraries self contained (no need for additional options).
9615 There lies the problem@enddots{}
9617 @sp 1
9619 The problem is that it is then tempting to use them in the middle of an
9620 M4 script, as opposed to its initialization.  This, if not carefully
9621 thought out, can lead to disastrous effects: @emph{you are changing the
9622 language in the middle of the execution}.  Changing and restoring the
9623 syntax is often not enough: if you happened to invoke macros in between,
9624 these macros are lost, as the current syntax is probably not
9625 the one they were implemented with.
9627 @c FIXME: I've been looking for a short, real case example, but I
9628 @c lost them all :(
9631 @node Quadrigraphs
9632 @subsection Quadrigraphs
9633 @cindex quadrigraphs
9634 @cindex @samp{@@S|@@}
9635 @cindex @samp{@@&t@@}
9636 @c Info cannot handle `:' in index entries.
9637 @c @cindex @samp{@@<:@@}
9638 @c @cindex @samp{@@:>@@}
9639 @c @cindex @samp{@@%:@@}
9640 @c @cindex @samp{@@@{:@@}
9641 @c @cindex @samp{@@:@}@@}
9643 When writing an Autoconf macro you may occasionally need to generate
9644 special characters that are difficult to express with the standard
9645 Autoconf quoting rules.  For example, you may need to output the regular
9646 expression @samp{[^[]}, which matches any character other than @samp{[}.
9647 This expression contains unbalanced brackets so it cannot be put easily
9648 into an M4 macro.
9650 Additionally, there are a few m4sugar macros (such as @code{m4_split}
9651 and @code{m4_expand}) which internally use special markers in addition
9652 to the regular quoting characters.  If the arguments to these macros
9653 contain the literal strings @samp{-=<@{(} or @samp{)@}>=-}, the macros
9654 might behave incorrectly.
9656 You can work around these problems by using one of the following
9657 @dfn{quadrigraphs}:
9659 @table @samp
9660 @item @@<:@@
9661 @samp{[}
9662 @item @@:>@@
9663 @samp{]}
9664 @item @@S|@@
9665 @samp{$}
9666 @item @@%:@@
9667 @samp{#}
9668 @item @@@{:@@
9669 @samp{(}
9670 @item @@:@}@@
9671 @samp{)}
9672 @item @@&t@@
9673 Expands to nothing.
9674 @end table
9676 Quadrigraphs are replaced at a late stage of the translation process,
9677 after @command{m4} is run, so they do not get in the way of M4 quoting.
9678 For example, the string @samp{^@@<:@@}, independently of its quotation,
9679 appears as @samp{^[} in the output.
9681 The empty quadrigraph can be used:
9683 @itemize @minus
9684 @item to mark trailing spaces explicitly
9686 Trailing spaces are smashed by @command{autom4te}.  This is a feature.
9688 @item to produce quadrigraphs and other strings reserved by m4sugar
9690 For instance @samp{@@<@@&t@@:@@} produces @samp{@@<:@@}.  For a more
9691 contrived example:
9693 @example
9694 m4_define([a], [A])m4_define([b], [B])m4_define([c], [C])dnl
9695 m4_split([a )@}>=- b -=<@{( c])
9696 @result{}[a], [], [B], [], [c]
9697 m4_split([a )@}@@&t@@>=- b -=<@@&t@@@{( c])
9698 @result{}[a], [)@}>=-], [b], [-=<@{(], [c]
9699 @end example
9701 @item to escape @emph{occurrences} of forbidden patterns
9703 For instance you might want to mention @code{AC_FOO} in a comment, while
9704 still being sure that @command{autom4te} still catches unexpanded
9705 @samp{AC_*}.  Then write @samp{AC@@&t@@_FOO}.
9706 @end itemize
9708 The name @samp{@@&t@@} was suggested by Paul Eggert:
9710 @quotation
9711 I should give some credit to the @samp{@@&t@@} pun.  The @samp{&} is my
9712 own invention, but the @samp{t} came from the source code of the
9713 @sc{algol68c} compiler, written by Steve Bourne (of Bourne shell fame),
9714 and which used @samp{mt} to denote the empty string.  In C, it would
9715 have looked like something like:
9717 @example
9718 char const mt[] = "";
9719 @end example
9721 @noindent
9722 but of course the source code was written in Algol 68.
9724 I don't know where he got @samp{mt} from: it could have been his own
9725 invention, and I suppose it could have been a common pun around the
9726 Cambridge University computer lab at the time.
9727 @end quotation
9729 @node Quotation Rule Of Thumb
9730 @subsection Quotation Rule Of Thumb
9732 To conclude, the quotation rule of thumb is:
9734 @center @emph{One pair of quotes per pair of parentheses.}
9736 Never over-quote, never under-quote, in particular in the definition of
9737 macros.  In the few places where the macros need to use brackets
9738 (usually in C program text or regular expressions), properly quote
9739 @emph{the arguments}!
9741 It is common to read Autoconf programs with snippets like:
9743 @example
9744 AC_TRY_LINK(
9745 changequote(<<, >>)dnl
9746 <<#include <time.h>
9747 #ifndef tzname /* For SGI.  */
9748 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
9749 #endif>>,
9750 changequote([, ])dnl
9751 [atoi (*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
9752 @end example
9754 @noindent
9755 which is incredibly useless since @code{AC_TRY_LINK} is @emph{already}
9756 double quoting, so you just need:
9758 @example
9759 AC_TRY_LINK(
9760 [#include <time.h>
9761 #ifndef tzname /* For SGI.  */
9762 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
9763 #endif],
9764             [atoi (*tzname);],
9765             [ac_cv_var_tzname=yes],
9766             [ac_cv_var_tzname=no])
9767 @end example
9769 @noindent
9770 The M4-fluent reader might note that these two examples are rigorously
9771 equivalent, since M4 swallows both the @samp{changequote(<<, >>)}
9772 and @samp{<<} @samp{>>} when it @dfn{collects} the arguments: these
9773 quotes are not part of the arguments!
9775 Simplified, the example above is just doing this:
9777 @example
9778 changequote(<<, >>)dnl
9779 <<[]>>
9780 changequote([, ])dnl
9781 @end example
9783 @noindent
9784 instead of simply:
9786 @example
9787 [[]]
9788 @end example
9790 With macros that do not double quote their arguments (which is the
9791 rule), double-quote the (risky) literals:
9793 @example
9794 AC_LINK_IFELSE([AC_LANG_PROGRAM(
9795 [[#include <time.h>
9796 #ifndef tzname /* For SGI.  */
9797 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
9798 #endif]],
9799                                 [atoi (*tzname);])],
9800                [ac_cv_var_tzname=yes],
9801                [ac_cv_var_tzname=no])
9802 @end example
9804 Please note that the macro @code{AC_TRY_LINK} is obsolete, so you really
9805 should be using @code{AC_LINK_IFELSE} instead.
9807 @xref{Quadrigraphs}, for what to do if you run into a hopeless case
9808 where quoting does not suffice.
9810 When you create a @command{configure} script using newly written macros,
9811 examine it carefully to check whether you need to add more quotes in
9812 your macros.  If one or more words have disappeared in the M4
9813 output, you need more quotes.  When in doubt, quote.
9815 However, it's also possible to put on too many layers of quotes.  If
9816 this happens, the resulting @command{configure} script may contain
9817 unexpanded macros.  The @command{autoconf} program checks for this problem
9818 by looking for the string @samp{AC_} in @file{configure}.  However, this
9819 heuristic does not work in general: for example, it does not catch
9820 overquoting in @code{AC_DEFINE} descriptions.
9823 @c ---------------------------------------- Using autom4te
9825 @node Using autom4te
9826 @section Using @command{autom4te}
9828 The Autoconf suite, including M4sugar, M4sh, and Autotest, in addition
9829 to Autoconf per se, heavily rely on M4.  All these different uses
9830 revealed common needs factored into a layer over M4:
9831 @command{autom4te}@footnote{
9833 Yet another great name from Lars J. Aas.
9837 @command{autom4te} is a preprocessor that is like @command{m4}.
9838 It supports M4 extensions designed for use in tools like Autoconf.
9840 @menu
9841 * autom4te Invocation::         A @acronym{GNU} M4 wrapper
9842 * Customizing autom4te::        Customizing the Autoconf package
9843 @end menu
9845 @node autom4te Invocation
9846 @subsection Invoking @command{autom4te}
9848 The command line arguments are modeled after M4's:
9850 @example
9851 autom4te @var{options} @var{files}
9852 @end example
9854 @noindent
9855 @evindex M4
9856 where the @var{files} are directly passed to @command{m4}.  By default,
9857 @acronym{GNU} M4 is found during configuration, but the environment
9858 variable
9859 @env{M4} can be set to tell @command{autom4te} where to look.  In addition
9860 to the regular expansion, it handles the replacement of the quadrigraphs
9861 (@pxref{Quadrigraphs}), and of @samp{__oline__}, the current line in the
9862 output.  It supports an extended syntax for the @var{files}:
9864 @table @file
9865 @item @var{file}.m4f
9866 This file is an M4 frozen file.  Note that @emph{all the previous files
9867 are ignored}.  See the option @option{--melt} for the rationale.
9869 @item @var{file}?
9870 If found in the library path, the @var{file} is included for expansion,
9871 otherwise it is ignored instead of triggering a failure.
9872 @end table
9874 @sp 1
9876 Of course, it supports the Autoconf common subset of options:
9878 @table @option
9879 @item --help
9880 @itemx -h
9881 Print a summary of the command line options and exit.
9883 @item --version
9884 @itemx -V
9885 Print the version number of Autoconf and exit.
9887 @item --verbose
9888 @itemx -v
9889 Report processing steps.
9891 @item --debug
9892 @itemx -d
9893 Don't remove the temporary files and be even more verbose.
9895 @item --include=@var{dir}
9896 @itemx -I @var{dir}
9897 Also look for input files in @var{dir}.  Multiple invocations
9898 accumulate.
9900 @item --output=@var{file}
9901 @itemx -o @var{file}
9902 Save output (script or trace) to @var{file}.  The file @option{-} stands
9903 for the standard output.
9904 @end table
9906 @sp 1
9908 As an extension of @command{m4}, it includes the following options:
9910 @table @option
9911 @item --warnings=@var{category}
9912 @itemx -W @var{category}
9913 @evindex WARNINGS
9914 @c FIXME: Point to the M4sugar macros, not Autoconf's.
9915 Report the warnings related to @var{category} (which can actually be a
9916 comma separated list).  @xref{Reporting Messages}, macro
9917 @code{AC_DIAGNOSE}, for a comprehensive list of categories.  Special
9918 values include:
9920 @table @samp
9921 @item all
9922 report all the warnings
9924 @item none
9925 report none
9927 @item error
9928 treats warnings as errors
9930 @item no-@var{category}
9931 disable warnings falling into @var{category}
9932 @end table
9934 Warnings about @samp{syntax} are enabled by default, and the environment
9935 variable @env{WARNINGS}, a comma separated list of categories, is
9936 honored.  @samp{autom4te -W @var{category}} actually
9937 behaves as if you had run:
9939 @example
9940 autom4te --warnings=syntax,$WARNINGS,@var{category}
9941 @end example
9943 @noindent
9944 For example, if you want to disable defaults and @env{WARNINGS}
9945 of @command{autom4te}, but enable the warnings about obsolete
9946 constructs, you would use @option{-W none,obsolete}.
9948 @cindex Back trace
9949 @cindex Macro invocation stack
9950 @command{autom4te} displays a back trace for errors, but not for
9951 warnings; if you want them, just pass @option{-W error}.
9953 @item --melt
9954 @itemx -M
9955 Do not use frozen files.  Any argument @code{@var{file}.m4f} is
9956 replaced by @code{@var{file}.m4}.  This helps tracing the macros which
9957 are executed only when the files are frozen, typically
9958 @code{m4_define}.  For instance, running:
9960 @example
9961 autom4te --melt 1.m4 2.m4f 3.m4 4.m4f input.m4
9962 @end example
9964 @noindent
9965 is roughly equivalent to running:
9967 @example
9968 m4 1.m4 2.m4 3.m4 4.m4 input.m4
9969 @end example
9971 @noindent
9972 while
9974 @example
9975 autom4te 1.m4 2.m4f 3.m4 4.m4f input.m4
9976 @end example
9978 @noindent
9979 is equivalent to:
9981 @example
9982 m4 --reload-state=4.m4f input.m4
9983 @end example
9985 @item --freeze
9986 @itemx -f
9987 Produce a frozen state file.  @command{autom4te} freezing is stricter
9988 than M4's: it must produce no warnings, and no output other than empty
9989 lines (a line with white space is @emph{not} empty) and comments
9990 (starting with @samp{#}).  Unlike @command{m4}'s similarly-named option,
9991 this option takes no argument:
9993 @example
9994 autom4te 1.m4 2.m4 3.m4 --freeze --output=3.m4f
9995 @end example
9997 @noindent
9998 corresponds to
10000 @example
10001 m4 1.m4 2.m4 3.m4 --freeze-state=3.m4f
10002 @end example
10004 @item --mode=@var{octal-mode}
10005 @itemx -m @var{octal-mode}
10006 Set the mode of the non-traces output to @var{octal-mode}; by default
10007 @samp{0666}.
10008 @end table
10010 @sp 1
10012 @cindex @file{autom4te.cache}
10013 As another additional feature over @command{m4}, @command{autom4te}
10014 caches its results.  @acronym{GNU} M4 is able to produce a regular
10015 output and traces at the same time.  Traces are heavily used in the
10016 @acronym{GNU} Build System: @command{autoheader} uses them to build
10017 @file{config.h.in}, @command{autoreconf} to determine what
10018 @acronym{GNU} Build System components are used, @command{automake} to
10019 ``parse'' @file{configure.ac} etc.  To avoid recomputation,
10020 traces are cached while performing regular expansion,
10021 and conversely.  This cache is (actually, the caches are) stored in
10022 the directory @file{autom4te.cache}.  @emph{It can safely be removed}
10023 at any moment (especially if for some reason @command{autom4te}
10024 considers it trashed).
10026 @table @option
10027 @item --cache=@var{directory}
10028 @itemx -C @var{directory}
10029 Specify the name of the directory where the result should be cached.
10030 Passing an empty value disables caching.  Be sure to pass a relative
10031 file name, as for the time being, global caches are not supported.
10033 @item --no-cache
10034 Don't cache the results.
10036 @item --force
10037 @itemx -f
10038 If a cache is used, consider it obsolete (but update it anyway).
10039 @end table
10041 @sp 1
10043 Because traces are so important to the @acronym{GNU} Build System,
10044 @command{autom4te} provides high level tracing features as compared to
10045 M4, and helps exploiting the cache:
10047 @table @option
10048 @item --trace=@var{macro}[:@var{format}]
10049 @itemx -t @var{macro}[:@var{format}]
10050 Trace the invocations of @var{macro} according to the @var{format}.
10051 Multiple @option{--trace} arguments can be used to list several macros.
10052 Multiple @option{--trace} arguments for a single macro are not
10053 cumulative; instead, you should just make @var{format} as long as
10054 needed.
10056 The @var{format} is a regular string, with newlines if desired, and
10057 several special escape codes.  It defaults to @samp{$f:$l:$n:$%}.  It can
10058 use the following special escapes:
10060 @table @samp
10061 @item $$
10062 The character @samp{$}.
10064 @item $f
10065 The file name from which @var{macro} is called.
10067 @item $l
10068 The line number from which @var{macro} is called.
10070 @item $d
10071 The depth of the @var{macro} call.  This is an M4 technical detail that
10072 you probably don't want to know about.
10074 @item $n
10075 The name of the @var{macro}.
10077 @item $@var{num}
10078 The @var{num}th argument of the call to @var{macro}.
10080 @item $@@
10081 @itemx $@var{sep}@@
10082 @itemx $@{@var{separator}@}@@
10083 All the arguments passed to @var{macro}, separated by the character
10084 @var{sep} or the string @var{separator} (@samp{,} by default).  Each
10085 argument is quoted, i.e., enclosed in a pair of square brackets.
10087 @item $*
10088 @itemx $@var{sep}*
10089 @itemx $@{@var{separator}@}*
10090 As above, but the arguments are not quoted.
10092 @item $%
10093 @itemx $@var{sep}%
10094 @itemx $@{@var{separator}@}%
10095 As above, but the arguments are not quoted, all new line characters in
10096 the arguments are smashed, and the default separator is @samp{:}.
10098 The escape @samp{$%} produces single-line trace outputs (unless you put
10099 newlines in the @samp{separator}), while @samp{$@@} and @samp{$*} do
10100 not.
10101 @end table
10103 @xref{autoconf Invocation}, for examples of trace uses.
10105 @item --preselect=@var{macro}
10106 @itemx -p @var{macro}
10107 Cache the traces of @var{macro}, but do not enable traces.  This is
10108 especially important to save CPU cycles in the future.  For instance,
10109 when invoked, @command{autoconf} preselects all the macros that
10110 @command{autoheader}, @command{automake}, @command{autoreconf}, etc.,
10111 trace, so that running @command{m4} is not needed to trace them: the
10112 cache suffices.  This results in a huge speed-up.
10113 @end table
10115 @sp 1
10117 @cindex Autom4te Library
10118 Finally, @command{autom4te} introduces the concept of @dfn{Autom4te
10119 libraries}.  They consists in a powerful yet extremely simple feature:
10120 sets of combined command line arguments:
10122 @table @option
10123 @item --language=@var{language}
10124 @itemx -l @var{language}
10125 Use the @var{language} Autom4te library.  Current languages include:
10127 @table @code
10128 @item M4sugar
10129 create M4sugar output.
10131 @item M4sh
10132 create M4sh executable shell scripts.
10134 @item Autotest
10135 create Autotest executable test suites.
10137 @item Autoconf-without-aclocal-m4
10138 create Autoconf executable configure scripts without
10139 reading @file{aclocal.m4}.
10141 @item Autoconf
10142 create Autoconf executable configure scripts.  This language inherits
10143 all the characteristics of @code{Autoconf-without-aclocal-m4} and
10144 additionally reads @file{aclocal.m4}.
10145 @end table
10147 @item --prepend-include=@var{dir}
10148 @itemx -B @var{dir}
10149 Prepend directory @var{dir} to the search path.  This is used to include
10150 the language-specific files before any third-party macros.
10152 @end table
10154 @cindex @file{autom4te.cfg}
10155 As an example, if Autoconf is installed in its default location,
10156 @file{/usr/local}, the command @samp{autom4te -l m4sugar foo.m4} is
10157 strictly equivalent to the command:
10159 @example
10160 autom4te --prepend-include /usr/local/share/autoconf \
10161   m4sugar/m4sugar.m4f --warnings syntax foo.m4
10162 @end example
10164 @noindent
10165 Recursive expansion applies here: the command @samp{autom4te -l m4sh foo.m4}
10166 is the same as @samp{autom4te --language M4sugar m4sugar/m4sh.m4f
10167 foo.m4}, i.e.:
10169 @example
10170 autom4te --prepend-include /usr/local/share/autoconf \
10171   m4sugar/m4sugar.m4f m4sugar/m4sh.m4f --mode 777 foo.m4
10172 @end example
10174 @noindent
10175 The definition of the languages is stored in @file{autom4te.cfg}.
10177 @node Customizing autom4te
10178 @subsection Customizing @command{autom4te}
10180 One can customize @command{autom4te} via @file{~/.autom4te.cfg} (i.e.,
10181 as found in the user home directory), and @file{./.autom4te.cfg} (i.e.,
10182 as found in the directory from which @command{autom4te} is run).  The
10183 order is first reading @file{autom4te.cfg}, then @file{~/.autom4te.cfg},
10184 then @file{./.autom4te.cfg}, and finally the command line arguments.
10186 In these text files, comments are introduced with @code{#}, and empty
10187 lines are ignored.  Customization is performed on a per-language basis,
10188 wrapped in between a @samp{begin-language: "@var{language}"},
10189 @samp{end-language: "@var{language}"} pair.
10191 Customizing a language stands for appending options (@pxref{autom4te
10192 Invocation}) to the current definition of the language.  Options, and
10193 more generally arguments, are introduced by @samp{args:
10194 @var{arguments}}.  You may use the traditional shell syntax to quote the
10195 @var{arguments}.
10197 As an example, to disable Autoconf caches (@file{autom4te.cache})
10198 globally, include the following lines in @file{~/.autom4te.cfg}:
10200 @verbatim
10201 ## ------------------ ##
10202 ## User Preferences.  ##
10203 ## ------------------ ##
10205 begin-language: "Autoconf-without-aclocal-m4"
10206 args: --no-cache
10207 end-language: "Autoconf-without-aclocal-m4"
10208 @end verbatim
10211 @node Programming in M4sugar
10212 @section Programming in M4sugar
10214 @cindex M4sugar
10215 M4 by itself provides only a small, but sufficient, set of all-purpose
10216 macros.  M4sugar introduces additional generic macros.  Its name was
10217 coined by Lars J. Aas: ``Readability And Greater Understanding Stands 4
10218 M4sugar''.
10220 M4sugar reserves the macro namespace @samp{^_m4_} for internal use, and
10221 the macro namespace @samp{^m4_} for M4sugar macros.  You should not
10222 define your own macros into these namespaces.
10224 @menu
10225 * Redefined M4 Macros::         M4 builtins changed in M4sugar
10226 * Diagnostic Macros::           Diagnostic messages from M4sugar
10227 * Diversion support::           Diversions in M4sugar
10228 * Conditional constructs::      Conditions in M4
10229 * Looping constructs::          Iteration in M4
10230 * Evaluation Macros::           More quotation and evaluation control
10231 * Text processing Macros::      String manipulation in M4
10232 * Number processing Macros::    Arithmetic computation in M4
10233 * Set manipulation Macros::     Set manipulation in M4
10234 * Forbidden Patterns::          Catching unexpanded macros
10235 @end menu
10237 @node Redefined M4 Macros
10238 @subsection Redefined M4 Macros
10240 @msindex{builtin}
10241 @msindex{changecom}
10242 @msindex{changequote}
10243 @msindex{debugfile}
10244 @msindex{debugmode}
10245 @msindex{decr}
10246 @msindex{define}
10247 @msindex{divnum}
10248 @msindex{dumpdef}
10249 @msindex{errprint}
10250 @msindex{esyscmd}
10251 @msindex{eval}
10252 @msindex{format}
10253 @msindex{ifdef}
10254 @msindex{incr}
10255 @msindex{index}
10256 @msindex{indir}
10257 @msindex{len}
10258 @msindex{pushdef}
10259 @msindex{shift}
10260 @msindex{substr}
10261 @msindex{syscmd}
10262 @msindex{sysval}
10263 @msindex{traceoff}
10264 @msindex{traceon}
10265 @msindex{translit}
10266 With a few exceptions, all the M4 native macros are moved in the
10267 @samp{m4_} pseudo-namespace, e.g., M4sugar renames @code{define} as
10268 @code{m4_define} etc.
10270 The list of macros unchanged from M4, except for their name, is:
10271 @itemize @minus
10272 @item m4_builtin
10273 @item m4_changecom
10274 @item m4_changequote
10275 @item m4_debugfile
10276 @item m4_debugmode
10277 @item m4_decr
10278 @item m4_define
10279 @item m4_divnum
10280 @item m4_dumpdef
10281 @item m4_errprint
10282 @item m4_esyscmd
10283 @item m4_eval
10284 @item m4_format
10285 @item m4_ifdef
10286 @item m4_incr
10287 @item m4_index
10288 @item m4_indir
10289 @item m4_len
10290 @item m4_pushdef
10291 @item m4_shift
10292 @item m4_substr
10293 @item m4_syscmd
10294 @item m4_sysval
10295 @item m4_traceoff
10296 @item m4_traceon
10297 @item m4_translit
10298 @end itemize
10300 Some M4 macros are redefined, and are slightly incompatible with their
10301 native equivalent.
10303 @defmac __file__
10304 @defmacx __line__
10305 @MSindex __file__
10306 @MSindex __line__
10307 All M4 macros starting with @samp{__} retain their original name: for
10308 example, no @code{m4__file__} is defined.
10309 @end defmac
10311 @defmac __oline__
10312 @MSindex __oline__
10313 This is not technically a macro, but a feature of Autom4te.  The
10314 sequence @code{__oline__} can be used similarly to the other m4sugar
10315 location macros, but rather than expanding to the location of the input
10316 file, it is translated to the line number where it appears in the output
10317 file after all other M4 expansions.
10318 @end defmac
10320 @defmac dnl
10321 @MSindex dnl
10322 This macro kept its original name: no @code{m4_dnl} is defined.
10323 @end defmac
10325 @defmac m4_bpatsubst (@var{string}, @var{regexp}, @ovar{replacement})
10326 @msindex{bpatsubst}
10327 This macro corresponds to @code{patsubst}.  The name @code{m4_patsubst}
10328 is kept for future versions of M4sugar, once @acronym{GNU} M4 2.0 is
10329 released and supports extended regular expression syntax.
10330 @end defmac
10332 @defmac m4_bregexp (@var{string}, @var{regexp}, @ovar{replacement})
10333 @msindex{bregexp}
10334 This macro corresponds to @code{regexp}.  The name @code{m4_regexp}
10335 is kept for future versions of M4sugar, once @acronym{GNU} M4 2.0 is
10336 released and supports extended regular expression syntax.
10337 @end defmac
10339 @defmac m4_defn (@var{macro}@dots{})
10340 @msindex{defn}
10341 This macro fails if @var{macro} is not defined, even when using older
10342 versions of M4 that did not warn.  See @code{m4_undefine}.
10343 Unfortunately, in order to support these older versions of M4, there are
10344 some situations involving unbalanced quotes where concatenating multiple
10345 macros together will work in newer M4 but not in m4sugar; use
10346 quadrigraphs to work around this.
10347 @end defmac
10349 @defmac m4_divert (@var{diversion})
10350 @msindex{divert}
10351 M4sugar relies heavily on diversions, so rather than behaving as a
10352 primitive, @code{m4_divert} behaves like:
10353 @example
10354 m4_divert_pop()m4_divert_push([@var{diversion}])
10355 @end example
10356 @noindent
10357 @xref{Diversion support}, for more details about the use of the
10358 diversion stack.
10359 @end defmac
10361 @defmac m4_exit (@var{exit-status})
10362 @msindex{exit}
10363 This macro corresponds to @code{m4exit}.
10364 @end defmac
10366 @defmac m4_if (@var{comment})
10367 @defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @ovar{not-equal})
10368 @defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @dots{})
10369 @msindex{if}
10370 This macro corresponds to @code{ifelse}.  @var{string-1} and
10371 @var{string-2} are compared literally, so usually one of the two
10372 arguments is passed unquoted.  @xref{Conditional constructs}, for more
10373 conditional idioms.
10374 @end defmac
10376 @defmac m4_include (@var{file})
10377 @defmacx m4_sinclude (@var{file})
10378 @msindex{include}
10379 @msindex{sinclude}
10380 Like the M4 builtins, but warn against multiple inclusions of @var{file}.
10381 @end defmac
10383 @defmac m4_mkstemp (@var{template})
10384 @defmacx m4_maketemp (@var{template})
10385 @msindex{maketemp}
10386 @msindex{mkstemp}
10387 Posix requires @code{maketemp} to replace the trailing @samp{X}
10388 characters in @var{template} with the process id, without regards to the
10389 existence of a file by that name, but this a security hole.  When this
10390 was pointed out to the Posix folks, they agreed to invent a new macro
10391 @code{mkstemp} that always creates a uniquely named file, but not all
10392 versions of @acronym{GNU} M4 support the new macro.  In M4sugar,
10393 @code{m4_maketemp} and @code{m4_mkstemp} are synonyms for each other,
10394 and both have the secure semantics regardless of which macro the
10395 underlying M4 provides.
10396 @end defmac
10398 @defmac m4_popdef (@var{macro}@dots{})
10399 @msindex{popdef}
10400 This macro fails if @var{macro} is not defined, even when using older
10401 versions of M4 that did not warn.  See @code{m4_undefine}.
10402 @end defmac
10404 @defmac m4_undefine (@var{macro}@dots{})
10405 @msindex{undefine}
10406 This macro fails if @var{macro} is not defined, even when using older
10407 versions of M4 that did not warn.  Use
10409 @example
10410 m4_ifdef([@var{macro}], [m4_undefine([@var{macro}])])
10411 @end example
10413 @noindent
10414 if you are not sure whether @var{macro} is defined.
10415 @end defmac
10417 @defmac m4_undivert (@var{diversion})
10418 @msindex{undivert}
10419 Unlike the M4 builtin, only one diversion can be undiverted per
10420 invocation.  Also, since the M4sugar diversion stack prefers named
10421 diversions, the use of @code{m4_undivert} to include files is risky.
10422 @xref{Diversion support}, for more details about the use of the
10423 diversion stack.
10424 @end defmac
10426 @defmac m4_wrap (@var{text})
10427 @defmacx m4_wrap_lifo (@var{text})
10428 @msindex{wrap}
10429 @msindex{wrap_lifo}
10430 These macros correspond to @code{m4wrap}.  Posix requires arguments of
10431 multiple wrap calls to be reprocessed at @acronym{EOF} in the same order
10432 as the original calls (first-in, first-out).  @acronym{GNU} M4 versions
10433 through 1.4.10, however, reprocess them in reverse order (last-in,
10434 first-out).  Both orders are useful, therefore, you can rely on
10435 @code{m4_wrap} to provide FIFO semantics and @code{m4_wrap_lifo} for
10436 LIFO semantics, regardless of the underlying @acronym{GNU} M4 version.
10438 Unlike the @acronym{GNU} M4 builtin, these macros only recognize one
10439 argument, and avoid token pasting between consecutive invocations.  On
10440 the other hand, nested calls to @code{m4_wrap} from within wrapped text
10441 work just as in the builtin.
10442 @end defmac
10445 @node Diagnostic Macros
10446 @subsection Diagnostic messages from M4sugar
10447 @cindex Messages, from @command{M4sugar}
10449 When macros statically diagnose abnormal situations, benign or fatal,
10450 they should report them using these macros.  For issuing dynamic issues,
10451 i.e., when @command{configure} is run, see @ref{Printing Messages}.
10453 @defmac m4_assert (@var{expression}, @dvar{exit-status, 1})
10454 @msindex{assert}
10455 Assert that the arithmetic @var{expression} evaluates to non-zero.
10456 Otherwise, issue a fatal error, and exit @command{autom4te} with
10457 @var{exit-status}.
10458 @end defmac
10460 @defmac m4_errprintn (@var{message})
10461 @msindex{errprintn}
10462 Similar to the builtin @code{m4_errprint}, except that a newline is
10463 guaranteed after @var{message}.
10464 @end defmac
10466 @anchor{m4_fatal}
10467 @defmac m4_fatal (@var{message})
10468 @msindex{fatal}
10469 Report a severe error @var{message} prefixed with the current location,
10470 and have @command{autom4te} die.
10471 @end defmac
10473 @defmac m4_location
10474 @msindex{location}
10475 Useful as a prefix in a message line.  Short for:
10476 @example
10477 __file__:__line__
10478 @end example
10479 @end defmac
10481 @anchor{m4_warn}
10482 @defmac m4_warn (@var{category}, @var{message})
10483 @msindex{warn}
10484 Report @var{message} as a warning (or as an error if requested by the
10485 user) if warnings of the @var{category} are turned on.  If the message
10486 is emitted, it is prefixed with the current location, and followed by a
10487 call trace of all macros defined via @code{AC_DEFUN} used to get to the
10488 current expansion.  You are encouraged to use standard categories, which
10489 currently include:
10491 @table @samp
10492 @item all
10493 messages that don't fall into one of the following categories.  Use of an
10494 empty @var{category} is equivalent.
10496 @item cross
10497 related to cross compilation issues.
10499 @item obsolete
10500 use of an obsolete construct.
10502 @item syntax
10503 dubious syntactic constructs, incorrectly ordered macro calls.
10504 @end table
10505 @end defmac
10508 @node Diversion support
10509 @subsection Diversion support
10511 M4sugar makes heavy use of diversions, because it is often the case that
10512 text that must appear early in the output is not discovered until late
10513 in the input.  Additionally, some of the topological sorting algorithms
10514 used in resolving macro dependencies use diversions.  Therefore, most
10515 macros should not need to change diversions directly, but rather rely on
10516 higher-level M4sugar macros to manage diversions transparently.
10518 To make diversion management easier, M4sugar uses the concept of named
10519 diversions.  Rather than using diversion numbers directly, it is nicer
10520 to associate a name with each diversion; the diversion number associated
10521 with a particular diversion name is an implementation detail, so you
10522 should only use diversion names.  In general, you should not output text
10523 to a named diversion until after calling the appropriate initialization
10524 routine for your language (@code{m4_init}, @code{AS_INIT},
10525 @code{AT_INIT}, @dots{}), although there are some exceptions documented
10526 below.
10528 M4sugar defines two named diversions.
10529 @table @code
10530 @item KILL
10531 Text written to this diversion is discarded.  This is the default
10532 diversion once M4sugar is initialized.
10533 @item GROW
10534 This diversion is used behind the scenes by topological sorting macros,
10535 such as @code{AC_REQUIRE}.
10536 @end table
10538 M4sh adds several more named diversions.
10539 @table @code
10540 @item BINSH
10541 This diversion is reserved for the @samp{#!} interpreter line.
10542 @item HEADER-REVISION
10543 This diversion holds text from @code{AC_REVISION}.
10544 @item HEADER-COMMENT
10545 This diversion holds comments about the purpose of a file.
10546 @item HEADER-COPYRIGHT
10547 This diversion is managed by @code{AC_COPYRIGHT}.
10548 @item M4SH-SANITIZE
10549 This diversion contains M4sh sanitization code, used to ensure M4sh is
10550 executing in a reasonable shell environment.
10551 @item M4SH-INIT
10552 This diversion contains M4sh initialization code, initializing variables
10553 that are required by other M4sh macros.
10554 @item BODY
10555 This diversion contains the body of the shell code, and is the default
10556 diversion once M4sh is initialized.
10557 @end table
10559 Autotest inherits diversions from M4sh, and changes the default
10560 diversion from @code{BODY} back to @code{KILL}.  It also adds several
10561 more named diversions, with the following subset designed for developer
10562 use.
10563 @table @code
10564 @item PREPARE_TESTS
10565 This diversion contains initialization sequences which are executed
10566 after @file{atconfig} and @file{atlocal}, and after all command line
10567 arguments have been parsed, but prior to running any tests.  It can be
10568 used to set up state that is required across all tests.  This diversion
10569 will work even before @code{AT_INIT}.
10570 @end table
10572 For now, the named diversions of Autoconf and Autoheader, and the
10573 remaining diversions of Autotest, are not documented.  In other words,
10574 intentionally outputting text into an undocumented diversion is subject
10575 to breakage in a future release of Autoconf.
10577 @defmac m4_divert_once (@var{diversion}, @ovar{content})
10578 @msindex{divert_once}
10579 Similar to @code{m4_divert_text}, except that @var{content} is only
10580 output to @var{diversion} if this is the first time that
10581 @code{m4_divert_once} has been called with its particular arguments.
10582 @end defmac
10584 @defmac m4_divert_pop (@ovar{diversion})
10585 @msindex{divert_pop}
10586 If provided, check that the current diversion is indeed @var{diversion}.
10587 Then change to the diversion located earlier on the stack, giving an
10588 error if an attempt is made to pop beyond the initial m4sugar diversion
10589 of @code{KILL}.
10590 @end defmac
10592 @defmac m4_divert_push (@var{diversion})
10593 @msindex{divert_push}
10594 Remember the former diversion on the diversion stack, and output
10595 subsequent text into @var{diversion}.  M4sugar maintains a diversion
10596 stack, and issues an error if there is not a matching pop for every
10597 push.
10598 @end defmac
10600 @defmac m4_divert_text (@var{diversion}, @ovar{content})
10601 @msindex{divert_text}
10602 Output @var{content} and a newline into @var{diversion}, without
10603 affecting the current diversion.  Shorthand for:
10604 @example
10605 m4_divert_push([@var{diversion}])@var{content}
10606 m4_divert_pop([@var{diversion}])dnl
10607 @end example
10608 @end defmac
10610 @defmac m4_init
10611 @msindex{init}
10612 Initialize the M4sugar environment, setting up the default named
10613 diversion to be @code{KILL}.
10614 @end defmac
10616 @node Conditional constructs
10617 @subsection Conditional constructs
10619 The following macros provide additional conditional contructs, as
10620 convenience wrappers around @code{m4_if}.
10622 @defmac m4_bmatch (@var{string}, @var{regex-1}, @var{value-1}, @
10623   @ovar{regex-2}, @ovar{value-2}, @dots{}, @ovar{default})
10624 @msindex{bmatch}
10625 The string @var{string} is repeatedly compared against a series of
10626 @var{regex} arguments; if a match is found, the expansion is the
10627 corresponding @var{value}, otherwise, the macro moves on to the next
10628 @var{regex}.  If no @var{regex} match, then the result is the optional
10629 @var{default}, or nothing.
10630 @end defmac
10632 @defmac m4_bpatsubsts (@var{string}, @var{regex-1}, @var{subst-1}, @
10633   @ovar{regex-2}, @ovar{subst-2}, @dots{})
10634 @msindex{bpatsubsts}
10635 The string @var{string} is altered by @var{regex-1} and @var{subst-1},
10636 as if by:
10637 @example
10638 m4_bpatsubst([[@var{string}]], [@var{regex}], [@var{subst}])
10639 @end example
10641 @noindent
10642 The result of the substitution is then passed through the next set of
10643 @var{regex} and @var{subst}, and so forth.  An empty @var{subst} implies
10644 deletion of any matched portions in the current string.  Note that this
10645 macro over-quotes @var{string}; this behavior is intentional, so that
10646 the result of each step of the recursion remains as a quoted string.
10647 However, it means that anchors (@samp{^} and @samp{$} in the @var{regex}
10648 will line up with the extra quotations, and not the characters of the
10649 original string.  The overquoting is removed after the final
10650 substitution.
10651 @end defmac
10653 @defmac m4_case (@var{string}, @var{value-1}, @var{if-value-1}, @
10654   @ovar{value-2}, @ovar{if-value-2}, @dots{}, @ovar{default})
10655 @msindex{case}
10656 Test @var{string} against multiple @var{value} possibilities, resulting
10657 in the first @var{if-value} for a match, or in the optional
10658 @var{default}.  This is shorthand for:
10659 @example
10660 m4_if([@var{string}], [@var{value-1}], [@var{if-value-1}],
10661       [@var{string}], [@var{value-2}], [@var{if-value-2}], @dots{},
10662       [@var{default}])
10663 @end example
10664 @end defmac
10666 @defmac m4_cond (@var{test-1}, @var{value-1}, @var{if-value-1}, @
10667   @ovar{test-2}, @ovar{value-2}, @ovar{if-value-2}, @dots{}, @ovar{default})
10668 @msindex{cond}
10669 This macro was introduced in Autoconf 2.62.  Similar to @code{m4_if},
10670 except that each @var{test} is expanded only when it is encountered.
10671 This is useful for short-circuiting expensive tests; while @code{m4_if}
10672 requires all its strings to be expanded up front before doing
10673 comparisons, @code{m4_cond} only expands a @var{test} when all earlier
10674 tests have failed.
10676 For an example, these two sequences give the same result, but in the
10677 case where @samp{$1} does not contain a backslash, the @code{m4_cond}
10678 version only expands @code{m4_index} once, instead of five times, for
10679 faster computation if this is a common case for @samp{$1}.  Notice that
10680 every third argument is unquoted for @code{m4_if}, and quoted for
10681 @code{m4_cond}:
10683 @example
10684 m4_if(m4_index([$1], [\]), [-1], [$2],
10685       m4_eval(m4_index([$1], [\\]) >= 0), [1], [$2],
10686       m4_eval(m4_index([$1], [\$]) >= 0), [1], [$2],
10687       m4_eval(m4_index([$1], [\`]) >= 0), [1], [$3],
10688       m4_eval(m4_index([$1], [\"]) >= 0), [1], [$3],
10689       [$2])
10690 m4_cond([m4_index([$1], [\])], [-1], [$2],
10691         [m4_eval(m4_index([$1], [\\]) >= 0)], [1], [$2],
10692         [m4_eval(m4_index([$1], [\$]) >= 0)], [1], [$2],
10693         [m4_eval(m4_index([$1], [\`]) >= 0)], [1], [$3],
10694         [m4_eval(m4_index([$1], [\"]) >= 0)], [1], [$3],
10695         [$2])
10696 @end example
10697 @end defmac
10699 @defmac m4_default (@var{expr-1}, @var{expr-2})
10700 @msindex{default}
10701 If @var{expr-1} is not empty, use it.  Otherwise, expand to
10702 @var{expr-2}.  Useful for providing a fixed default if the expression
10703 that results in @var{expr-1} would otherwise be empty.
10704 @end defmac
10706 @defmac m4_ifndef (@var{macro}, @var{if-not-defined}, @ovar{if-defined})
10707 @msindex{ifndef}
10708 This is shorthand for:
10709 @example
10710 m4_ifdef([@var{macro}], [@var{if-defined}], [@var{if-not-defined}])
10711 @end example
10712 @end defmac
10714 @defmac m4_ifset (@var{macro}, @ovar{if-true}, @ovar{if-false})
10715 @msindex{ifset}
10716 If @var{macro} is undefined, or is defined as the empty string, expand
10717 to @var{if-false}.  Otherwise, expands to @var{if-true}.  Similar to:
10718 @example
10719 m4_ifval(m4_defn([@var{macro}]), [@var{if-true}], [@var{if-false}])
10720 @end example
10721 @noindent
10722 except that it is not an error if @var{macro} is undefined.
10723 @end defmac
10725 @defmac m4_ifval (@var{cond}, @ovar{if-true}, @ovar{if-false})
10726 @msindex{ifval}
10727 Expands to @var{if-true} if @var{cond} is not empty, otherwise to
10728 @var{if-false}.  This is shorthand for:
10729 @example
10730 m4_if([@var{cond}], [], [@var{if-true}], [@var{if-false}])
10731 @end example
10732 @end defmac
10734 @defmac m4_ifvaln (@var{cond}, @ovar{if-true}, @ovar{if-false})
10735 @msindex{ifvaln}
10736 Similar to @code{m4_ifval}, except guarantee that a newline is present
10737 after any non-empty expansion.
10738 @end defmac
10740 @defmac m4_n (@var{text})
10741 @msindex{n}
10742 Expand to @var{text}, and add a newline if @var{text} is not empty.
10743 @end defmac
10746 @node Looping constructs
10747 @subsection Looping constructs
10749 The following macros are useful in implementing recursive algorithms in
10750 M4, including loop operations.  An M4 list is formed by quoting a list
10751 of quoted elements; generally the lists are comma-separated, although
10752 @code{m4_foreach_w} is whitespace-separated.  For example, the list
10753 @samp{[[a], [b,c]]} contains two elements: @samp{[a]} and @samp{[b,c]}.
10754 It is common to see lists with unquoted elements when those elements are
10755 not likely to be macro names, as in @samp{[fputc_unlocked,
10756 fgetc_unlocked]}.
10758 @defmac m4_car (@var{list})
10759 @msindex{car}
10760 Expands to the quoted first element of the comma-separated quoted
10761 @var{list}.  Often used with @code{m4_cdr} to recursively iterate
10762 through a list.  Generally, when using quoted lists of quoted elements,
10763 @code{m4_car} should be called without any extra quotes.
10764 @end defmac
10766 @defmac m4_cdr (@var{list})
10767 @msindex{cdr}
10768 Expands to a quoted list of all but the first element of the
10769 comma-separated quoted @var{list}, or the empty string if @var{list} had
10770 only one element.  Generally, when using quoted lists of quoted
10771 elements, @code{m4_cdr} should be called without any extra quotes.
10773 For example, this is a simple implementation of @code{m4_map}; note how
10774 each iteration checks for the end of recursion, then merely applies the
10775 first argument to the first element of the list, then repeats with the
10776 rest of the list.  (The actual implementation in M4sugar is a bit more
10777 involved, to gain some speed and share code with @code{m4_map_sep}).
10778 @example
10779 m4_define([m4_map], [m4_ifval([$2],
10780   [m4_apply([$1], m4_car($2))[]$0([$1], m4_cdr($2))])])dnl
10781 m4_map([ m4_eval], [[[1]], [[1+1]], [[10],[16]]])
10782 @result{} 1 2 a
10783 @end example
10784 @end defmac
10786 @defmac m4_for (@var{var}, @var{first}, @var{last}, @ovar{step}, @
10787   @var{expression})
10788 @msindex{for}
10789 Loop over the numeric values between @var{first} and @var{last}
10790 including bounds by increments of @var{step}.  For each iteration,
10791 expand @var{expression} with the numeric value assigned to @var{var}.
10792 If @var{step} is omitted, it defaults to @samp{1} or @samp{-1} depending
10793 on the order of the limits.  If given, @var{step} has to match this
10794 order.  The number of iterations is determined independently from
10795 definition of @var{var}; iteration cannot be short-circuited or
10796 lengthened by modifying @var{var} from within @var{expression}.
10797 @end defmac
10799 @defmac m4_foreach (@var{var}, @var{list}, @var{expression})
10800 @msindex{foreach}
10801 Loop over the comma-separated M4 list @var{list}, assigning each value
10802 to @var{var}, and expand @var{expression}.  The following example
10803 outputs two lines:
10805 @example
10806 m4_foreach([myvar], [[foo], [bar, baz]],
10807            [echo myvar
10808 ])dnl
10809 @result{}echo foo
10810 @result{}echo bar, baz
10811 @end example
10812 @end defmac
10814 @anchor{m4_foreach_w}
10815 @defmac m4_foreach_w (@var{var}, @var{list}, @var{expression})
10816 @msindex{foreach_w}
10817 Loop over the white-space-separated list @var{list}, assigning each value
10818 to @var{var}, and expand @var{expression}.
10820 The deprecated macro @code{AC_FOREACH} is an alias of
10821 @code{m4_foreach_w}.
10822 @end defmac
10824 @defmac m4_map (@var{macro}, @var{list})
10825 @defmacx m4_map_sep (@var{macro}, @var{separator}, @var{list})
10826 Loop over the comma separated quoted list of argument descriptions in
10827 @var{list}, and invoke @var{macro} with the arguments.  An argument
10828 description is in turn a comma-separated quoted list of quoted elements,
10829 suitable for @code{m4_apply}, making it possible to invoke @var{macro}
10830 without arguments if an argument description is empty.
10831 @code{m4_map_sep} additionally outputs @var{separator} between macro
10832 invocations, with no additional expansion of the separator.
10833 @example
10834 m4_map([m4_count], [])
10835 @result{}
10836 m4_map([ m4_count], [[],
10837                      [[1]],
10838                      [[1], [2]]])
10839 @result{} 0 1 2
10840 m4_map_sep([m4_eval], [,], [[[1+2]],
10841                             [[10], [16]]])
10842 @result{}3,a
10843 @end example
10844 @end defmac
10846 @defmac m4_shiftn (@var{count}, @dots{})
10847 @defmacx m4_shift2 (@dots{})
10848 @defmacx m4_shift3 (@dots{})
10849 @msindex{shift2}
10850 @msindex{shift3}
10851 @msindex{shiftn}
10852 @code{m4_shiftn} performs @var{count} iterations of @code{m4_shift},
10853 along with validation that enough arguments were passed in to match the
10854 shift count, and that the count is positive.  @code{m4_shift2} and
10855 @code{m4_shift3} are specializations
10856 of @code{m4_shiftn}, introduced in Autoconf 2.62, and are more efficient
10857 for two and three shifts, respectively.
10858 @end defmac
10861 @node Evaluation Macros
10862 @subsection Evaluation Macros
10864 The following macros give some control over the order of the evaluation
10865 by adding or removing levels of quotes.
10867 @defmac m4_apply (@var{macro}, @var{list})
10868 @msindex{apply}
10869 Apply the elements of the quoted, comma-separated @var{list} as the
10870 arguments to @var{macro}.  If @var{list} is empty, invoke @var{macro}
10871 without arguments.  Note the difference between @code{m4_indir}, which
10872 expects its first argument to be a macro name but can use names that are
10873 otherwise invalid, and @code{m4_apply}, where @var{macro} can contain
10874 other text, but must end in a valid macro name.
10875 @example
10876 m4_apply([m4_count], [])
10877 @result{}0
10878 m4_apply([m4_count], [[]])
10879 @result{}1
10880 m4_apply([m4_count], [[1], [2]])
10881 @result{}2
10882 m4_apply([m4_join], [[|], [1], [2]])
10883 @result{}1|2
10884 @end example
10885 @end defmac
10887 @defmac m4_count (@var{arg}, @dots{})
10888 @msindex{count}
10889 This macro returns the decimal count of the number of arguments it was
10890 passed.
10891 @end defmac
10893 @defmac m4_do (@var{arg}, @dots{})
10894 @msindex{do}
10895 This macro loops over its arguments and expands each @var{arg} in
10896 sequence.  Its main use is for readability; it allows the use of
10897 indentation and fewer @code{dnl} to result in the same expansion.  This
10898 macro guarantees that no expansion will be concatenated with subsequent
10899 text; to achieve full concatenation, use @code{m4_unquote(m4_join([],
10900 @var{arg@dots{}}))}.
10902 @example
10903 m4_define([ab],[1])m4_define([bc],[2])m4_define([abc],[3])dnl
10904 m4_do([a],[b])c
10905 @result{}abc
10906 m4_unquote(m4_join([],[a],[b]))c
10907 @result{}3
10908 m4_define([a],[A])m4_define([b],[B])m4_define([c],[C])dnl
10909 m4_define([AB],[4])m4_define([BC],[5])m4_define([ABC],[6])dnl
10910 m4_do([a],[b])c
10911 @result{}ABC
10912 m4_unquote(m4_join([],[a],[b]))c
10913 @result{}3
10914 @end example
10915 @end defmac
10917 @defmac m4_dquote (@var{arg}, @dots{})
10918 @msindex{dquote}
10919 Return the arguments as a quoted list of quoted arguments.
10920 Conveniently, if there is just one @var{arg}, this effectively adds a
10921 level of quoting.
10922 @end defmac
10924 @defmac m4_dquote_elt (@var{arg}, @dots{})
10925 @msindex{dquote_elt}
10926 Return the arguments as a series of double-quoted arguments.  Whereas
10927 @code{m4_dquote} returns a single argument, @code{m4_dquote_elt} returns
10928 as many arguments as it was passed.
10929 @end defmac
10931 @defmac m4_echo (@var{arg}, @dots{})
10932 @msindex{echo}
10933 Return the arguments, with the same level of quoting.  Other than
10934 discarding whitespace after unquoted commas, this macro is a no-op.
10935 @end defmac
10937 @defmac m4_expand (@var{arg})
10938 @msindex{expand}
10939 Return the expansion of @var{arg} as a quoted string.  Whereas
10940 @code{m4_quote} is designed to collect expanded text into a single
10941 argument, @code{m4_expand} is designed to perform one level of expansion
10942 on quoted text.  The distinction is in the treatment of whitespace
10943 following a comma in the original @var{arg}.  Any time multiple
10944 arguments are collected into one with @code{m4_quote}, the M4 argument
10945 collection rules discard the whitespace.  However, with @code{m4_expand},
10946 whitespace is preserved, even after the expansion of macros contained in
10947 @var{arg}.
10949 @example
10950 m4_define([active], [ACT, IVE])dnl
10951 m4_define([active2], [[ACT, IVE]])dnl
10952 m4_quote(active, active)
10953 @result{}ACT,IVE,ACT,IVE
10954 m4_expand([active, active])
10955 @result{}ACT, IVE, ACT, IVE
10956 m4_quote(active2, active2)
10957 @result{}ACT, IVE,ACT, IVE
10958 m4_expand([active2, active2])
10959 @result{}ACT, IVE, ACT, IVE
10960 @end example
10962 Note that @code{m4_expand} cannot handle an @var{arg} that expands to
10963 literal unbalanced quotes, but that quadrigraphs can be used when
10964 unbalanced output is necessary.  Likewise, unbalanced parentheses must
10965 be supplied with double quoting or a quadrigraph.
10967 @example
10968 m4_define([pattern], [[!@@<:@@]])dnl
10969 m4_define([bar], [BAR])dnl
10970 m4_expand([case $foo in
10971   m4_defn([pattern])@@:@}@@ bar ;;
10972   *[)] blah ;;
10973 esac])
10974 @result{}case $foo in
10975 @result{}  [![]) BAR ;;
10976 @result{}  *) blah ;;
10977 @result{}esac
10978 @end example
10979 @end defmac
10981 @defmac m4_ignore (@dots{})
10982 @msindex{ignore}
10983 This macro was introduced in Autoconf 2.62.  Expands to nothing,
10984 ignoring all of its arguments.  By itself, this isn't very useful.
10985 However, it can be used to conditionally ignore an arbitrary number of
10986 arguments, by deciding which macro name to apply to a list of arguments.
10987 @example
10988 dnl foo outputs a message only if [debug] is defined.
10989 m4_define([foo],
10990 [m4_ifdef([debug],[AC_MSG_NOTICE],[m4_ignore])([debug message])])
10991 @end example
10993 Note that for earlier versions of Autoconf, the macro @code{__gnu__} can
10994 serve the same purpose, although it is less readable.
10995 @end defmac
10997 @defmac m4_make_list (@var{arg}, @dots{})
10998 @msindex{make_list}
10999 This macro exists to aid debugging of M4sugar algorithms.  Its net
11000 effect is similar to @code{m4_dquote}---it produces a quoted list of
11001 quoted arguments, for each @var{arg}.  The difference is that this
11002 version uses a comma-newline separator instead of just comma, to improve
11003 readability of the list; with the result that it is less efficient than
11004 @code{m4_dquote}.
11005 @example
11006 m4_define([zero],[0])m4_define([one],[1])m4_define([two],[2])dnl
11007 m4_dquote(zero, [one], [[two]])
11008 @result{}[0],[one],[[two]]
11009 m4_make_list(zero, [one], [[two]])
11010 @result{}[0],
11011 @result{}[one],
11012 @result{}[[two]]
11013 m4_foreach([number], m4_dquote(zero, [one], [[two]]), [ number])
11014 @result{} 0 1 two
11015 m4_foreach([number], m4_make_list(zero, [one], [[two]]), [ number])
11016 @result{} 0 1 two
11017 @end example
11018 @end defmac
11020 @c m4_noquote is too dangerous to document - it invokes macros that
11021 @c probably rely on @samp{[]} nested quoting for proper operation.  The
11022 @c user should generally prefer m4_unquote instead.
11024 @defmac m4_quote (@var{arg}, @dots{})
11025 @msindex{quote}
11026 Return the arguments as a single entity, i.e., wrap them into a pair of
11027 quotes.  This effectively collapses multiple arguments into one,
11028 although it loses whitespace after unquoted commas in the process.
11029 @end defmac
11031 @defmac m4_reverse (@var{arg}, @dots{})
11032 @msindex{reverse}
11033 Outputs each argument with the same level of quoting, but in reverse
11034 order, and with space following each comma for readability.
11036 @example
11037 m4_define([active], [ACT,IVE])
11038 @result{}
11039 m4_reverse(active, [active])
11040 @result{}active, IVE, ACT
11041 @end example
11042 @end defmac
11044 @defmac m4_unquote (@var{arg}, @dots{})
11045 @msindex{unquote}
11046 This macro was introduced in Autoconf 2.62.  Expand each argument,
11047 separated by commas.  For a single @var{arg}, this effectively removes a
11048 layer of quoting, and @code{m4_unquote([@var{arg}])} is more efficient
11049 than the equivalent @code{m4_do([@var{arg}])}.  For multiple arguments,
11050 this results in an unquoted list of expansions.  This is commonly used
11051 with @code{m4_split}, in order to convert a single quoted list into a
11052 series of quoted elements.
11053 @end defmac
11055 The following example aims at emphasizing the difference between several
11056 scenarios: not using these macros, using @code{m4_defn}, using
11057 @code{m4_quote}, using @code{m4_dquote}, and using @code{m4_expand}.
11059 @example
11060 $ @kbd{cat example.m4}
11061 dnl Overquote, so that quotes are visible.
11062 m4_define([show], [$[]1 = [$1], $[]@@ = [$@@]])
11063 m4_define([a], [A])
11064 m4_define([mkargs], [1, 2[,] 3])
11065 m4_define([arg1], [[$1]])
11066 m4_divert([0])dnl
11067 show(a, b)
11068 show([a, b])
11069 show(m4_quote(a, b))
11070 show(m4_dquote(a, b))
11071 show(m4_expand([a, b]))
11073 arg1(mkargs)
11074 arg1([mkargs])
11075 arg1(m4_defn([mkargs]))
11076 arg1(m4_quote(mkargs))
11077 arg1(m4_dquote(mkargs))
11078 arg1(m4_expand([mkargs]))
11079 $ @kbd{autom4te -l m4sugar example.m4}
11080 $1 = A, $@@ = [A],[b]
11081 $1 = a, b, $@@ = [a, b]
11082 $1 = A,b, $@@ = [A,b]
11083 $1 = [A],[b], $@@ = [[A],[b]]
11084 $1 = A, b, $@@ = [A, b]
11087 mkargs
11088 1, 2[,] 3
11089 1,2, 3
11090 [1],[2, 3]
11091 1, 2, 3
11092 @end example
11095 @node Text processing Macros
11096 @subsection String manipulation in M4
11098 The following macros may be used to manipulate strings in M4.  Many of
11099 the macros in this section intentionally result in quoted strings as
11100 output, rather than subjecting the arguments to further expansions.  As
11101 a result, if you are manipulating text that contains active M4
11102 characters, the arguments are passed with single quoting rather than
11103 double.
11105 @defmac m4_append (@var{macro-name}, @var{string}, @ovar{separator})
11106 @defmacx m4_append_uniq (@var{macro-name}, @var{string}, @ovar{separator} @
11107   @ovar{if-uniq}, @ovar{if-duplicate})
11108 @msindex{append}
11109 @msindex{append_uniq}
11110 Redefine @var{macro-name} to its former contents with @var{separator}
11111 and @var{string} added at the end.  If @var{macro-name} was undefined
11112 before (but not if it was defined but empty), then no @var{separator} is
11113 added.  As of Autoconf 2.62, neither @var{string} nor @var{separator}
11114 are expanded during this macro; instead, they are expanded when
11115 @var{macro-name} is invoked.
11117 @code{m4_append} can be used to grow strings, and @code{m4_append_uniq}
11118 to grow strings without duplicating substrings.  Additionally,
11119 @code{m4_append_uniq} takes two optional parameters as of Autoconf 2.62;
11120 @var{if-uniq} is expanded if @var{string} was appended, and
11121 @var{if-duplicate} is expanded if @var{string} was already present.
11122 Also, @code{m4_append_uniq} warns if @var{separator} is not empty, but
11123 occurs within @var{string}, since that can lead to duplicates.
11125 Note that @code{m4_append} can scale linearly in the length of the final
11126 string, depending on the quality of the underlying M4 implementation,
11127 while @code{m4_append_uniq} has an inherent quadratic scaling factor.
11128 If an algorithm can tolerate duplicates in the final string, use the
11129 former for speed.  If duplicates must be avoided, consider using
11130 @code{m4_set_add} instead (@pxref{Set manipulation Macros}).
11132 @example
11133 m4_define([active], [ACTIVE])dnl
11134 m4_append([sentence], [This is an])dnl
11135 m4_append([sentence], [ active ])dnl
11136 m4_append([sentence], [symbol.])dnl
11137 sentence
11138 @result{}This is an ACTIVE symbol.
11139 m4_undefine([active])dnl
11140 @result{}This is an active symbol.
11141 m4_append_uniq([list], [one], [, ], [new], [existing])
11142 @result{}new
11143 m4_append_uniq([list], [one], [, ], [new], [existing])
11144 @result{}existing
11145 m4_append_uniq([list], [two], [, ], [new], [existing])
11146 @result{}new
11147 m4_append_uniq([list], [three], [, ], [new], [existing])
11148 @result{}new
11149 m4_append_uniq([list], [two], [, ], [new], [existing])
11150 @result{}existing
11151 list
11152 @result{}one, two, three
11153 m4_dquote(list)
11154 @result{}[one],[two],[three]
11155 m4_append([list2], [one], [[, ]])dnl
11156 m4_append_uniq([list2], [two], [[, ]])dnl
11157 m4_append([list2], [three], [[, ]])dnl
11158 list2
11159 @result{}one, two, three
11160 m4_dquote(list2)
11161 @result{}[one, two, three]
11162 @end example
11163 @end defmac
11165 @defmac m4_append_uniq_w (@var{macro-name}, @var{strings})
11166 @msindex{append_uniq_w}
11167 This macro was introduced in Autoconf 2.62.  It is similar to
11168 @code{m4_append_uniq}, but treats @var{strings} as a whitespace
11169 separated list of words to append, and only appends unique words.
11170 @var{macro-name} is updated with a single space between new words.
11171 @example
11172 m4_append_uniq_w([numbers], [1 1 2])dnl
11173 m4_append_uniq_w([numbers], [ 2 3 ])dnl
11174 numbers
11175 @result{}1 2 3
11176 @end example
11177 @end defmac
11179 @defmac m4_combine (@ovar{separator}, @var{prefix-list}, @ovar{infix}, @
11180   @var{suffix-1}, @ovar{suffix-2}, @dots{})
11181 @msindex{combine}
11182 This macro produces a quoted string containing the pairwise combination
11183 of every element of the quoted, comma-separated @var{prefix-list}, and
11184 every element from the @var{suffix} arguments.  Each pairwise
11185 combination is joined with @var{infix} in the middle, and successive
11186 pairs are joined by @var{separator}.  No expansion occurs on any of the
11187 arguments.  No output occurs if either the @var{prefix} or @var{suffix}
11188 list is empty, but the lists can contain empty elements.
11189 @example
11190 m4_define([a], [oops])dnl
11191 m4_combine([, ], [[a], [b], [c]], [-], [1], [2], [3])
11192 @result{}a-1, a-2, a-3, b-1, b-2, b-3, c-1, c-2, c-3
11193 m4_combine([, ], [[a], [b]], [-])
11194 @result{}
11195 m4_combine([, ], [[a], [b]], [-], [])
11196 @result{}a-, b-
11197 m4_combine([, ], [], [-], [1], [2])
11198 @result{}
11199 m4_combine([, ], [[]], [-], [1], [2])
11200 @result{}-1, -2
11201 @end example
11202 @end defmac
11204 @defmac m4_flatten (@var{string})
11205 @msindex{flatten}
11206 Flatten @var{string} into a single line.  Delete all backslash-newline
11207 pairs, and replace all remaining newlines with a space.  The result is
11208 still a quoted string.
11209 @end defmac
11211 @defmac m4_join (@ovar{separator}, @var{args}@dots{})
11212 @defmacx m4_joinall (@ovar{separator}, @var{args}@dots{})
11213 @msindex{join}
11214 @msindex{joinall}
11215 Concatenate each @var{arg}, separated by @var{separator}.
11216 @code{joinall} uses every argument, while @code{join} omits empty
11217 arguments so that there are no back-to-back separators in the output.
11218 The result is a quoted string.
11219 @example
11220 m4_define([active], [ACTIVE])dnl
11221 m4_join([|], [one], [], [active], [two])
11222 @result{}one|active|two
11223 m4_joinall([|], [one], [], [active], [two])
11224 @result{}one||active|two
11225 @end example
11227 Note that if all you intend to do is join @var{args} with commas between
11228 them, to form a quoted list suitable for @code{m4_foreach}, it is more
11229 efficient to use @code{m4_dquote}.
11230 @end defmac
11232 @defmac m4_newline
11233 @msindex{newline}
11234 This macro was introduced in Autoconf 2.62, and expands to a newline.
11235 It is primarily useful for maintaining macro formatting, and ensuring
11236 that M4 does not discard leading whitespace during argument collection.
11237 @end defmac
11239 @defmac m4_normalize (@var{string})
11240 @msindex{normalize}
11241 Remove leading and trailing spaces and tabs, sequences of
11242 backslash-then-newline, and replace multiple spaces, tabs, and newlines
11243 with a single space.  This is a combination of @code{m4_flatten} and
11244 @code{m4_strip}.
11245 @end defmac
11247 @defmac m4_re_escape (@var{string})
11248 @msindex{re_escape}
11249 Backslash-escape all characters in @var{string} that are active in
11250 regexps.
11251 @end defmac
11253 @defmac m4_split (@var{string}, @dvar{regexp, [\t ]+})
11254 @msindex{split}
11255 Split @var{string} into an M4 list of elements quoted by @samp{[} and
11256 @samp{]}, while keeping white space at the beginning and at the end.
11257 If @var{regexp} is given, use it instead of @samp{[\t ]+} for splitting.
11258 If @var{string} is empty, the result is an empty list.
11259 @end defmac
11261 @defmac m4_strip (@var{string})
11262 @msindex{strip}
11263 Strip whitespace from @var{string}.  Sequences of spaces and tabs are
11264 reduced to a single space, then leading and trailing spaces are removed.
11265 The result is still a quoted string.  Note that this does not interfere
11266 with newlines; if you want newlines stripped as well, consider
11267 @code{m4_flatten}, or do it all at once with @code{m4_normalize}.
11268 @end defmac
11270 @defmac m4_text_box (@var{message}, @dvar{frame, -})
11271 @msindex{text_box}
11272 Add a text box around @var{message}, using @var{frame} as the border
11273 character above and below the message.  The frame correctly accounts for
11274 the subsequent expansion of @var{message}.  For example:
11275 @example
11276 m4_define([macro], [abc])dnl
11277 m4_text_box([macro])
11278 @result{}## --- ##
11279 @result{}## abc ##
11280 @result{}## --- ##
11281 @end example
11283 The @var{message} must contain balanced quotes and parentheses, although
11284 quadrigraphs can be used to work around this.
11285 @end defmac
11287 @defmac m4_text_wrap (@var{string}, @ovar{prefix}, @
11288   @dvar{prefix1, @var{prefix}}, @dvar{width, 79})
11289 @msindex{text_wrap}
11290 Break @var{string} into a series of whitespace-separated words, then
11291 output those words separated by spaces, and wrapping lines any time the
11292 output would exceed @var{width} columns.  If given, @var{prefix1} begins
11293 the first line, and @var{prefix} begins all wrapped lines.  If
11294 @var{prefix1} is longer than @var{prefix}, then the first line consists
11295 of just @var{prefix1}.  If @var{prefix} is longer than @var{prefix1},
11296 padding is inserted so that the first word of @var{string} begins at the
11297 same indentation as all wrapped lines.  Note that using literal tab
11298 characters in any of the arguments will interfere with the calculation
11299 of width.  No expansions occur on @var{prefix}, @var{prefix1}, or the
11300 words of @var{string}, although quadrigraphs are recognized.
11302 For some examples:
11303 @example
11304 m4_text_wrap([Short string */], [   ], [/* ], [20])
11305 @result{}/* Short string */
11306 m4_text_wrap([Much longer string */], [   ], [/* ], [20])
11307 @result{}/* Much longer
11308 @result{}   string */
11309 m4_text_wrap([Short doc.], [          ], [  --short ], [30])
11310 @result{}  --short Short doc.
11311 m4_text_wrap([Short doc.], [          ], [  --too-wide ], [30])
11312 @result{}  --too-wide
11313 @result{}          Short doc.
11314 m4_text_wrap([Super long documentation.], [     ],
11315              [  --too-wide ], 30)
11316 @result{}  --too-wide
11317 @result{}     Super long
11318 @result{}     documentation.
11319 @end example
11320 @end defmac
11322 @defmac m4_tolower (@var{string})
11323 @defmacx m4_toupper (@var{string})
11324 @msindex{tolower}
11325 @msindex{toupper}
11326 Return @var{string} with letters converted to upper or lower case,
11327 respectively.
11328 @end defmac
11330 @node Number processing Macros
11331 @subsection Arithmetic computation in M4
11333 The following macros facilitate integer arithmetic operations.
11334 Where a parameter is documented as taking an arithmetic expression, you
11335 can use anything that can be parsed by @code{m4_eval}.
11337 @defmac m4_cmp (@var{expr-1}, @var{expr-2})
11338 @msindex{cmp}
11339 Compare the arithmetic expressions @var{expr-1} and @var{expr-2}, and
11340 expand to @samp{-1} if @var{expr-1} is smaller, @samp{0} if they are
11341 equal, and @samp{1} if @var{expr-1} is larger.
11342 @end defmac
11344 @defmac m4_list_cmp (@var{list-1}, @var{list-2})
11345 @msindex{list_cmp}
11346 Compare the two M4 lists consisting of comma-separated arithmetic
11347 expressions, left to right.  Expand to @samp{-1} for the first element
11348 pairing where the value from @var{list-1} is smaller, @samp{1} where the
11349 value from @var{list-2} is smaller, or @samp{0} if both lists have the
11350 same values.  If one list is shorter than the other, the remaining
11351 elements of the longer list are compared against zero.
11352 @example
11353 m4_list_cmp([1, 0],       [1])
11354 @result{}0
11355 m4_list_cmp([1, [1 * 0]], [1, 0])
11356 @result{}0
11357 m4_list_cmp([1, 2],       [1, 0])
11358 @result{}1
11359 m4_list_cmp([1, [1+1], 3],[1, 2])
11360 @result{}1
11361 m4_list_cmp([1, 2, -3],   [1, 2])
11362 @result{}-1
11363 m4_list_cmp([1, 0],       [1, 2])
11364 @result{}-1
11365 m4_list_cmp([1],          [1, 2])
11366 @result{}-1
11367 @end example
11368 @end defmac
11370 @defmac m4_max (@var{arg}, @dots{})
11371 @msindex{max}
11372 This macro was introduced in Autoconf 2.62.  Expand to the decimal value
11373 of the maximum arithmetic expression among all the arguments.
11374 @end defmac
11376 @defmac m4_min (@var{arg}, @dots{})
11377 @msindex{min}
11378 This macro was introduced in Autoconf 2.62.  Expand to the decimal value
11379 of the minimum arithmetic expression among all the arguments.
11380 @end defmac
11382 @defmac m4_sign (@var{expr})
11383 @msindex{sign}
11384 Expand to @samp{-1} if the arithmetic expression @var{expr} is negative,
11385 @samp{1} if it is positive, and @samp{0} if it is zero.
11386 @end defmac
11388 @anchor{m4_version_compare}
11389 @defmac m4_version_compare (@var{version-1}, @var{version-2})
11390 @msindex{version_compare}
11391 This macro was introduced in Autoconf 2.53, but had a number of
11392 usability limitations that were not lifted until Autoconf 2.62.  Compare
11393 the version strings @var{version-1} and @var{version-2}, and expand to
11394 @samp{-1} if @var{version-1} is smaller, @samp{0} if they are the same,
11395 or @samp{1} @var{version-2} is smaller.  Version strings must be a list
11396 of elements separated by @samp{.}, @samp{,} or @samp{-}, where each
11397 element is a number along with optional case-insensitive letters
11398 designating beta releases.  The comparison stops at the leftmost element
11399 that contains a difference, although a 0 element compares equal to a
11400 missing element.
11402 It is permissible to include commit identifiers in @var{version}, such
11403 as an abbreviated SHA1 of the commit, provided there is still a
11404 monotonically increasing prefix to allow for accurate version-based
11405 comparisons.  For example, this paragraph was written when the
11406 development snapshot of autoconf claimed to be at version
11407 @samp{2.61a-248-dc51}, or 248 commits after the 2.61a release, with an
11408 abbreviated commit identification of @samp{dc51}.
11410 @example
11411 m4_version_compare([1.1], [2.0])
11412 @result{}-1
11413 m4_version_compare([2.0b], [2.0a])
11414 @result{}1
11415 m4_version_compare([1.1.1], [1.1.1a])
11416 @result{}-1
11417 m4_version_compare([1.2], [1.1.1a])
11418 @result{}1
11419 m4_version_compare([1.0], [1])
11420 @result{}0
11421 m4_version_compare([1.1pre], [1.1PRE])
11422 @result{}0
11423 m4_version_compare([1.1a], [1,10])
11424 @result{}-1
11425 m4_version_compare([2.61a], [2.61a-248-dc51])
11426 @result{}-1
11427 m4_version_compare([2.61b], [2.61a-248-dc51])
11428 @result{}1
11429 @end example
11430 @end defmac
11433 @node Set manipulation Macros
11434 @subsection Set manipulation in M4
11435 @cindex Set manipulation
11436 @cindex Data structure, set
11437 @cindex Unordered set manipulation
11439 Sometimes, it is necessary to track a set of data, where the order does
11440 not matter and where there are no duplicates in the set.  The following
11441 macros facilitate set manipulations.  Each set is an opaque object,
11442 which can only be accessed via these basic operations.  The underlying
11443 implementation guarantees linear scaling for set creation, which is more
11444 efficient than using the quadratic @code{m4_append_uniq}.  Both set
11445 names and values can be arbitrary strings, except for unbalanced quotes.
11446 This implementation ties up memory for removed elements until the next
11447 operation that must traverse all the elements of a set; and although
11448 that may slow down some operations until the memory for removed elements
11449 is pruned, it still guarantees linear performance.
11451 @defmac m4_set_add (@var{set}, @var{value}, @ovar{if-uniq}, @ovar{if-dup})
11452 @msindex{set_add}
11453 Adds the string @var{value} as a member of set @var{set}.  Expand
11454 @var{if-uniq} if the element was added, or @var{if-dup} if it was
11455 previously in the set.  Operates in amortized constant time, so that set
11456 creation scales linearly.
11457 @end defmac
11459 @defmac m4_set_add_all (@var{set}, @var{value}@dots{})
11460 @msindex{set_add_all}
11461 Adds each @var{value} to the set @var{set}.  This is slightly more
11462 efficient than repeatedly invoking @code{m4_set_add}.
11463 @end defmac
11465 @defmac m4_set_contains (@var{set}, @var{value}, @ovar{if-present}, @
11466  @ovar{if-absent})
11467 @msindex{set_contains}
11468 Expands @var{if-present} if the string @var{value} is a member of
11469 @var{set}, otherwise @var{if-absent}.
11471 @example
11472 m4_set_contains([a], [1], [yes], [no])
11473 @result{}no
11474 m4_set_add([a], [1], [added], [dup])
11475 @result{}added
11476 m4_set_add([a], [1], [added], [dup])
11477 @result{}dup
11478 m4_set_contains([a], [1], [yes], [no])
11479 @result{}yes
11480 m4_set_remove([a], [1], [removed], [missing])
11481 @result{}removed
11482 m4_set_contains([a], [1], [yes], [no])
11483 @result{}no
11484 m4_set_remove([a], [1], [removed], [missing])
11485 @result{}missing
11486 @end example
11487 @end defmac
11489 @defmac m4_set_contents (@var{set}, @ovar{sep})
11490 @defmacx m4_set_dump (@var{set}, @ovar{sep})
11491 @msindex{set_contents}
11492 @msindex{set_dump}
11493 Expands to a single string consisting of all the members of the set
11494 @var{set}, each separated by @var{sep}, which is not expanded.
11495 @code{m4_set_contents} leaves the elements in @var{set} but reclaims any
11496 memory occupied by removed elements, while @code{m4_set_dump} is a
11497 faster one-shot action that also deletes the set.  No provision is made
11498 for disambiguating members that contain a non-empty @var{sep} as a
11499 substring; use @code{m4_set_empty} to distinguish between an empty set
11500 and the set containing only the empty string.  The order of the output
11501 is unspecified; in the current implementation, part of the speed of
11502 @code{m4_set_dump} results from using a different output order than
11503 @code{m4_set_contents}.  These macros scale linearly in the size of the
11504 set before memory pruning, and @code{m4_set_contents([@var{set}],
11505 [@var{sep}])} is faster than
11506 @code{m4_joinall([@var{sep}]m4_set_listc([@var{set}]))}.
11508 @example
11509 m4_set_add_all([a], [1], [2], [3])
11510 @result{}
11511 m4_set_contents([a], [-])
11512 @result{}1-2-3
11513 m4_joinall([-]m4_set_listc([a]))
11514 @result{}1-2-3
11515 m4_set_dump([a], [-])
11516 @result{}3-2-1
11517 m4_set_contents([a])
11518 @result{}
11519 m4_set_add([a], [])
11520 @result{}
11521 m4_set_contents([a], [-])
11522 @result{}
11523 @end example
11524 @end defmac
11526 @defmac m4_set_delete (@var{set})
11527 @msindex{set_delete}
11528 Delete all elements and memory associated with @var{set}.  This is
11529 linear in the set size, and faster than removing one element at a time.
11530 @end defmac
11532 @defmac m4_set_difference (@var{seta}, @var{setb})
11533 @defmacx m4_set_intersection (@var{seta}, @var{setb})
11534 @defmacx m4_set_union (@var{seta}, @var{setb})
11535 @msindex{set_difference}
11536 @msindex{set_intersection}
11537 @msindex{set_union}
11538 Compute the relation between @var{seta} and @var{setb}, and output the
11539 result as a list of quoted arguments without duplicates and with a
11540 leading comma.  Set difference selects the elements in @var{seta} but
11541 not @var{setb}, intersection selects only elements in both sets, and
11542 union selects elements in either set.  These actions are linear in the
11543 sum of the set sizes.  The leading comma is necessary to distinguish
11544 between no elements and the empty string as the only element.
11546 @example
11547 m4_set_add_all([a], [1], [2], [3])
11548 @result{}
11549 m4_set_add_all([b], [3], [], [4])
11550 @result{}
11551 m4_set_difference([a], [b])
11552 @result{},1,2
11553 m4_set_difference([b], [a])
11554 @result{},,4
11555 m4_set_intersection([a], [b])
11556 @result{},3
11557 m4_set_union([a], [b])
11558 @result{},1,2,3,,4
11559 @end example
11560 @end defmac
11562 @defmac m4_set_empty (@var{set}, @ovar{if-empty}, @ovar{if-elements})
11563 @msindex{set_empty}
11564 Expand @var{if-empty} if the set @var{set} has no elements, otherwise
11565 expand @var{if-elements}.  This macro operates in constant time.  Using
11566 this macro can help disambiguate output from @code{m4_set_contents} or
11567 @code{m4_set_list}.
11568 @end defmac
11570 @defmac m4_set_foreach (@var{set}, @var{variable}, @var{action})
11571 @msindex{set_foreach}
11572 For each element in the set @var{set}, expand @var{action} with the
11573 macro @var{variable} defined as the set element.  Behavior is
11574 unspecified if @var{action} recursively lists the contents of @var{set}
11575 (although listing other sets is acceptable), or if it modifies the set
11576 in any way other than removing the element currently contained in
11577 @var{variable}.  This macro is faster than the corresponding
11578 @code{m4_foreach([@var{variable}],
11579 m4_indir([m4_dquote]m4_set_listc([@var{set}])), [@var{action}])}.
11581 @example
11582 m4_set_add_all([a]m4_for([i], [1], [5], [], [,i]))
11583 @result{}
11584 m4_set_contents([a])
11585 @result{}12345
11586 m4_set_foreach([a], [i],
11587   [m4_if(m4_eval(i&1), [0], [m4_set_remove([a], i, [i])])])
11588 @result{}24
11589 m4_set_contents([a])
11590 @result{}135
11591 @end example
11592 @end defmac
11594 @defmac m4_set_list (@var{set})
11595 @defmacx m4_set_listc (@var{set})
11596 @msindex{set_list}
11597 @msindex{set_listc}
11598 Produce a list of arguments, where each argument is a quoted element
11599 from the set @var{set}.  The variant @code{m4_set_listc} is unambiguous,
11600 by adding a leading comma if there are any set elements, whereas the
11601 variant @code{m4_set_list} cannot distinguish between an empty set and a
11602 set containing only the empty string.  These can be directly used in
11603 macros that take multiple arguments, such as @code{m4_join} or
11604 @code{m4_set_add_all}, or wrapped by @code{m4_dquote} for macros that
11605 take a quoted list, such as @code{m4_map} or @code{m4_foreach}.  Any
11606 memory occupied by removed elements is reclaimed during these macros.
11608 @example
11609 m4_set_add_all([a], [1], [2], [3])
11610 @result{}
11611 m4_set_list([a])
11612 @result{}1,2,3
11613 m4_set_list([b])
11614 @result{}
11615 m4_set_listc([b])
11616 @result{}
11617 m4_count(m4_set_list([b]))
11618 @result{}1
11619 m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
11620 @result{}0
11621 m4_set_add([b], [])
11622 @result{}
11623 m4_set_list([b])
11624 @result{}
11625 m4_set_listc([b])
11626 @result{},
11627 m4_count(m4_set_list([b]))
11628 @result{}1
11629 m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
11630 @result{}1
11631 @end example
11632 @end defmac
11634 @defmac m4_set_remove (@var{set}, @var{value}, @ovar{if-present}, @
11635  @ovar{if-absent})
11636 @msindex{set_remove}
11637 If @var{value} is an element in the set @var{set}, then remove it and
11638 expand @var{if-present}.  Otherwise expand @var{if-absent}.  This macro
11639 operates in constant time so that multiple removals will scale linearly
11640 rather than quadratically; but when used outside of
11641 @code{m4_set_foreach}, it leaves memory occupied until the set is later
11642 compacted by @code{m4_set_contents} or @code{m4_set_list}.  Several
11643 other set operations are then less efficient between the time of element
11644 removal and subsequent memory compaction, but still maintain their
11645 guaranteed scaling performance.
11646 @end defmac
11648 @defmac m4_set_size (@var{set})
11649 @msindex{set_size}
11650 Expand to the size of the set @var{set}.  This implementation operates
11651 in constant time, and is thus more efficient than
11652 @code{m4_eval(m4_count(m4_set_listc([set])) - 1)}.
11653 @end defmac
11656 @node Forbidden Patterns
11657 @subsection Forbidden Patterns
11658 @cindex Forbidden patterns
11659 @cindex Patterns, forbidden
11661 M4sugar provides a means to define suspicious patterns, patterns
11662 describing tokens which should not be found in the output.  For
11663 instance, if an Autoconf @file{configure} script includes tokens such as
11664 @samp{AC_DEFINE}, or @samp{dnl}, then most probably something went
11665 wrong (typically a macro was not evaluated because of overquotation).
11667 M4sugar forbids all the tokens matching @samp{^_?m4_} and @samp{^dnl$}.
11668 Additional layers, such as M4sh and Autoconf, add additional forbidden
11669 patterns to the list.
11671 @defmac m4_pattern_forbid (@var{pattern})
11672 @msindex{pattern_forbid}
11673 Declare that no token matching @var{pattern} must be found in the output.
11674 Comments are not checked; this can be a problem if, for instance, you
11675 have some macro left unexpanded after an @samp{#include}.  No consensus
11676 is currently found in the Autoconf community, as some people consider it
11677 should be valid to name macros in comments (which doesn't make sense to
11678 the authors of this documentation: input, such as macros, should be
11679 documented by @samp{dnl} comments; reserving @samp{#}-comments to
11680 document the output).
11681 @end defmac
11683 Of course, you might encounter exceptions to these generic rules, for
11684 instance you might have to refer to @samp{$m4_flags}.
11686 @defmac m4_pattern_allow (@var{pattern})
11687 @msindex{pattern_allow}
11688 Any token matching @var{pattern} is allowed, including if it matches an
11689 @code{m4_pattern_forbid} pattern.
11690 @end defmac
11692 @node Programming in M4sh
11693 @section Programming in M4sh
11695 @c FIXME: Eventually will become a chapter, as it is not related to
11696 @c programming in M4 per se.
11698 M4sh, pronounced ``mash'', is aiming at producing portable Bourne shell
11699 scripts.  This name was coined by Lars J. Aas, who notes that,
11700 according to the Webster's Revised Unabridged Dictionary (1913):
11702 @quotation
11703 Mash \Mash\, n.  [Akin to G. meisch, maisch, meische, maische, mash,
11704 wash, and prob.@: to AS. miscian to mix.  See ``Mix''.]
11706 @enumerate 1
11707 @item
11708 A mass of mixed ingredients reduced to a soft pulpy state by beating or
11709 pressure@enddots{}
11711 @item
11712 A mixture of meal or bran and water fed to animals.
11714 @item
11715 A mess; trouble.  [Obs.] --Beau.@: & Fl.
11716 @end enumerate
11717 @end quotation
11720 For the time being, it is not mature enough to be widely used.
11722 M4sh reserves the M4 macro namespace @samp{^_AS_} for internal use, and
11723 the namespace @samp{^AS_} for M4sh macros.  It also reserves the shell
11724 and environment variable namespace @samp{^as_}, and the here-doc
11725 delimiter namespace @samp{^_AS[A-Z]} in the output file.  You should not
11726 define your own macros or output shell code that conflicts with these
11727 namespaces.
11729 M4sh provides portable alternatives for some common shell constructs
11730 that unfortunately are not portable in practice.
11732 @c Deprecated, to be replaced by a better API
11733 @ignore
11734 @defmac AS_BASENAME (@var{file-name})
11735 @asindex{BASENAME}
11736 Output the non-directory portion of @var{file-name}.  For example,
11737 if @code{$file} is @samp{/one/two/three}, the command
11738 @code{base=`AS_BASENAME(["$file"])`} sets @code{base} to @samp{three}.
11739 @end defmac
11740 @end ignore
11742 @defmac AS_BOURNE_COMPATIBLE
11743 @asindex{BOURNE_COMPATIBLE}
11744 Set up the shell to be more compatible with the Bourne shell as
11745 standardized by Posix, if possible.  This may involve setting
11746 environment variables, or setting options, or similar
11747 implementation-specific actions.
11748 @end defmac
11750 @defmac AS_CASE (@var{word}, @ovar{pattern1}, @ovar{if-matched1}, @
11751   @dots{}, @ovar{default})
11752 @asindex{CASE}
11753 Expand into a shell @samp{case} statement, where @var{word} is matched
11754 against one or more patterns.  @var{if-matched} is run if the
11755 corresponding pattern matched @var{word}, else @var{default} is run.
11756 @end defmac
11758 @defmac AS_DIRNAME (@var{file-name})
11759 @asindex{DIRNAME}
11760 Output the directory portion of @var{file-name}.  For example,
11761 if @code{$file} is @samp{/one/two/three}, the command
11762 @code{dir=`AS_DIRNAME(["$file"])`} sets @code{dir} to @samp{/one/two}.
11763 @end defmac
11765 @defmac AS_IF (@var{test1}, @ovar{run-if-true1}, @dots{}, @ovar{run-if-false})
11766 @asindex{IF}
11767 Run shell code @var{test1}.  If @var{test1} exits with a zero status then
11768 run shell code @var{run-if-true1}, else examine further tests.  If no test
11769 exits with a zero status, run shell code @var{run-if-false}, with
11770 simplifications if either @var{run-if-true1} or @var{run-if-false1}
11771 is empty.  For example,
11773 @example
11774 AS_IF([test "$foo" = yes], [HANDLE_FOO([yes])],
11775       [test "$foo" != no], [HANDLE_FOO([maybe])],
11776       [echo foo not specified])
11777 @end example
11779 @noindent
11780 ensures any required macros of @code{HANDLE_FOO}
11781 are expanded before the first test.
11782 @end defmac
11784 @defmac AS_INIT
11785 @asindex{INIT}
11786 Initialize the M4sh environment.  This macro calls @code{m4_init}, then
11787 outputs the @code{#! /bin/sh} line, a notice about where the output was
11788 generated from, and code to sanitize the environment for the rest of the
11789 script.  Finally, it changes the current diversion to @code{BODY}.
11790 @end defmac
11792 @defmac AS_MKDIR_P (@var{file-name})
11793 @asindex{MKDIR_P}
11794 Make the directory @var{file-name}, including intervening directories
11795 as necessary.  This is equivalent to @samp{mkdir -p @var{file-name}},
11796 except that it is portable to older versions of @command{mkdir} that
11797 lack support for the @option{-p} option.  Also, @code{AS_MKDIR_P}
11798 succeeds if @var{file-name} is a symbolic link to an existing directory,
11799 even though Posix is unclear whether @samp{mkdir -p} should
11800 succeed in that case.  If creation of @var{file-name} fails, exit the
11801 script.
11803 Also see the @code{AC_PROG_MKDIR_P} macro (@pxref{Particular Programs}).
11804 @end defmac
11806 @defmac AS_SHELL_SANITIZE
11807 @asindex{SHELL_SANITIZE}
11808 Initialize the shell suitably for @code{configure} scripts.  This has
11809 the effect of @code{AS_BOURNE_COMPATIBLE}, and sets some other
11810 environment variables for predictable results from configuration tests.
11811 For example, it sets @env{LC_ALL} to change to the default C locale.
11812 @xref{Special Shell Variables}.
11813 @end defmac
11815 @defmac AS_TR_CPP (@var{expression})
11816 @asindex{TR_CPP}
11817 Transform @var{expression} into a valid right-hand side for a C @code{#define}.
11818 For example:
11820 @example
11821 # This outputs "#define HAVE_CHAR_P 1".
11822 type="char *"
11823 echo "#define AS_TR_CPP([HAVE_$type]) 1"
11824 @end example
11825 @end defmac
11827 @defmac AS_TR_SH (@var{expression})
11828 @asindex{TR_SH}
11829 Transform @var{expression} into a valid shell variable name.  For example:
11831 @example
11832 # This outputs "Have it!".
11833 header="sys/some file.h"
11834 AS_TR_SH([HAVE_$header])=yes
11835 if test "$HAVE_sys_some_file_h" = yes; then echo "Have it!"; fi
11836 @end example
11837 @end defmac
11839 @defmac AS_SET_CATFILE (@var{var}, @var{dir}, @var{file})
11840 @asindex{SET_CATFILE}
11841 Set the shell variable @var{var} to @var{dir}/@var{file}, but
11842 optimizing the common cases (@var{dir} or @var{file} is @samp{.},
11843 @var{file} is absolute, etc.).
11844 @end defmac
11847 @node File Descriptor Macros
11848 @section File Descriptor Macros
11849 @cindex input
11850 @cindex standard input
11851 @cindex file descriptors
11852 @cindex descriptors
11853 @cindex low-level output
11854 @cindex output, low-level
11856 The following macros define file descriptors used to output messages
11857 (or input values) from @file{configure} scripts.
11858 For example:
11860 @example
11861 echo "$wombats found" >&AS_MESSAGE_LOG_FD
11862 echo 'Enter desired kangaroo count:' >&AS_MESSAGE_FD
11863 read kangaroos <&AS_ORIGINAL_STDIN_FD`
11864 @end example
11866 @noindent
11867 However doing so is seldom needed, because Autoconf provides higher
11868 level macros as described below.
11870 @defmac AS_MESSAGE_FD
11871 @asindex{MESSAGE_FD}
11872 The file descriptor for @samp{checking for...}  messages and results.
11873 Normally this directs messages to the standard output, however when
11874 @command{configure} is run with the @option{-q} option, messages sent to
11875 @code{AS_MESSAGE_FD} are discarded.
11877 If you want to display some messages, consider using one of the printing
11878 macros (@pxref{Printing Messages}) instead.  Copies of messages output
11879 via these macros are also recorded in @file{config.log}.
11880 @end defmac
11882 @defmac AS_MESSAGE_LOG_FD
11883 @asindex{MESSAGE_LOG_FD}
11885 The file descriptor for messages logged to @file{config.log}.  Macros
11886 that run tools, like @code{AC_COMPILE_IFELSE} (@pxref{Running the
11887 Compiler}), redirect all output to this descriptor.  You may want to do
11888 so if you develop such a low-level macro.
11889 @end defmac
11891 @defmac AS_ORIGINAL_STDIN_FD
11892 @asindex{ORIGINAL_STDIN_FD}
11893 The file descriptor for the original standard input.
11895 When @command{configure} runs, it may accidentally execute an
11896 interactive command that has the same name as the non-interactive meant
11897 to be used or checked.  If the standard input was the terminal, such
11898 interactive programs would cause @command{configure} to stop, pending
11899 some user input.  Therefore @command{configure} redirects its standard
11900 input from @file{/dev/null} during its initialization.  This is not
11901 normally a problem, since @command{configure} normally does not need
11902 user input.
11904 In the extreme case where your @file{configure} script really needs to
11905 obtain some values from the original standard input, you can read them
11906 explicitly from @code{AS_ORIGINAL_STDIN_FD}.
11907 @end defmac
11910 @c =================================================== Writing Autoconf Macros.
11912 @node Writing Autoconf Macros
11913 @chapter Writing Autoconf Macros
11915 When you write a feature test that could be applicable to more than one
11916 software package, the best thing to do is encapsulate it in a new macro.
11917 Here are some instructions and guidelines for writing Autoconf macros.
11919 @menu
11920 * Macro Definitions::           Basic format of an Autoconf macro
11921 * Macro Names::                 What to call your new macros
11922 * Reporting Messages::          Notifying @command{autoconf} users
11923 * Dependencies Between Macros::  What to do when macros depend on other macros
11924 * Obsoleting Macros::           Warning about old ways of doing things
11925 * Coding Style::                Writing Autoconf macros @`a la Autoconf
11926 @end menu
11928 @node Macro Definitions
11929 @section Macro Definitions
11931 @acindex{DEFUN}
11932 Autoconf macros are defined using the @code{AC_DEFUN} macro, which is
11933 similar to the M4 builtin @code{m4_define} macro.  In addition to
11934 defining a macro, @code{AC_DEFUN} adds to it some code that is used to
11935 constrain the order in which macros are called (@pxref{Prerequisite
11936 Macros}).
11938 An Autoconf macro definition looks like this:
11940 @example
11941 AC_DEFUN(@var{macro-name}, @var{macro-body})
11942 @end example
11944 You can refer to any arguments passed to the macro as @samp{$1},
11945 @samp{$2}, etc.  @xref{Definitions, , How to define new macros, m4.info,
11946 @acronym{GNU} M4}, for more complete information on writing M4 macros.
11948 Be sure to properly quote both the @var{macro-body} @emph{and} the
11949 @var{macro-name} to avoid any problems if the macro happens to have
11950 been previously defined.
11952 Each macro should have a header comment that gives its prototype, and a
11953 brief description.  When arguments have default values, display them in
11954 the prototype.  For example:
11956 @example
11957 # AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
11958 # --------------------------------------
11959 m4_define([AC_MSG_ERROR],
11960   [@{ AS_MESSAGE([error: $1], [2])
11961      exit m4_default([$2], [1]); @}])
11962 @end example
11964 Comments about the macro should be left in the header comment.  Most
11965 other comments make their way into @file{configure}, so just keep
11966 using @samp{#} to introduce comments.
11968 @cindex @code{dnl}
11969 If you have some special comments about pure M4 code, comments
11970 that make no sense in @file{configure} and in the header comment, then
11971 use the builtin @code{dnl}: it causes M4 to discard the text
11972 through the next newline.
11974 Keep in mind that @code{dnl} is rarely needed to introduce comments;
11975 @code{dnl} is more useful to get rid of the newlines following macros
11976 that produce no output, such as @code{AC_REQUIRE}.
11979 @node Macro Names
11980 @section Macro Names
11982 All of the public Autoconf macros have all-uppercase names in the
11983 namespace @samp{^AC_} to prevent them from accidentally conflicting with
11984 other text; Autoconf also reserves the namespace @samp{^_AC_} for
11985 internal macros.  All shell variables that they use for internal
11986 purposes have mostly-lowercase names starting with @samp{ac_}.  Autoconf
11987 also uses here-doc delimiters in the namespace @samp{^_AC[A-Z]}.  During
11988 @command{configure}, files produced by Autoconf make heavy use of the
11989 file system namespace @samp{^conf}.
11991 Since Autoconf is built on top of M4sugar (@pxref{Programming in
11992 M4sugar}) and M4sh (@pxref{Programming in M4sh}), you must also be aware
11993 of those namespaces (@samp{^_?\(m4\|AS\)_}).  And since
11994 @file{configure.ac} is also designed to be scanned by Autoheader,
11995 Autoscan, Autoupdate, and Automake, you should be aware of the
11996 @samp{^_?A[HNUM]_} namespaces.  In general, you @emph{should not use}
11997 the namespace of a package that does not own the macro or shell code you
11998 are writing.
12000 To ensure that your macros don't conflict with present or future
12001 Autoconf macros, you should prefix your own macro names and any shell
12002 variables they use with some other sequence.  Possibilities include your
12003 initials, or an abbreviation for the name of your organization or
12004 software package.  Historically, people have not always followed the
12005 rule of using a namespace appropriate for their package, and this has
12006 made it difficult for determining the origin of a macro (and where to
12007 report bugs about that macro), as well as difficult for the true
12008 namespace owner to add new macros without interference from pre-existing
12009 uses of third-party macros.  Perhaps the best example of this confusion
12010 is the @code{AM_GNU_GETTEXT} macro, which belongs, not to Automake, but
12011 to Gettext.
12013 Most of the Autoconf macros' names follow a structured naming convention
12014 that indicates the kind of feature check by the name.  The macro names
12015 consist of several words, separated by underscores, going from most
12016 general to most specific.  The names of their cache variables use the
12017 same convention (@pxref{Cache Variable Names}, for more information on
12018 them).
12020 The first word of the name after the namepace initials (such as
12021 @samp{AC_}) usually tells the category
12022 of the feature being tested.  Here are the categories used in Autoconf for
12023 specific test macros, the kind of macro that you are more likely to
12024 write.  They are also used for cache variables, in all-lowercase.  Use
12025 them where applicable; where they're not, invent your own categories.
12027 @table @code
12028 @item C
12029 C language builtin features.
12030 @item DECL
12031 Declarations of C variables in header files.
12032 @item FUNC
12033 Functions in libraries.
12034 @item GROUP
12035 Posix group owners of files.
12036 @item HEADER
12037 Header files.
12038 @item LIB
12039 C libraries.
12040 @item PROG
12041 The base names of programs.
12042 @item MEMBER
12043 Members of aggregates.
12044 @item SYS
12045 Operating system features.
12046 @item TYPE
12047 C builtin or declared types.
12048 @item VAR
12049 C variables in libraries.
12050 @end table
12052 After the category comes the name of the particular feature being
12053 tested.  Any further words in the macro name indicate particular aspects
12054 of the feature.  For example, @code{AC_PROG_CC_STDC} checks whether the
12055 C compiler supports @acronym{ISO} Standard C.
12057 An internal macro should have a name that starts with an underscore;
12058 Autoconf internals should therefore start with @samp{_AC_}.
12059 Additionally, a macro that is an internal subroutine of another macro
12060 should have a name that starts with an underscore and the name of that
12061 other macro, followed by one or more words saying what the internal
12062 macro does.  For example, @code{AC_PATH_X} has internal macros
12063 @code{_AC_PATH_X_XMKMF} and @code{_AC_PATH_X_DIRECT}.
12065 @node Reporting Messages
12066 @section Reporting Messages
12067 @cindex Messages, from @command{autoconf}
12069 When macros statically diagnose abnormal situations, benign or fatal, it
12070 is possible to make @command{autoconf} detect the problem, and refuse to
12071 create @file{configure} in the case of an error.  The macros in this
12072 section are considered obsolescent, and new code should use M4sugar
12073 macros for this purpose, see @ref{Diagnostic Macros}.
12075 On the other hand, it is possible to want to detect errors when
12076 @command{configure} is run, which are dependent on the environment of
12077 the user rather than the maintainer.  For dynamic diagnostics, see
12078 @ref{Printing Messages}.
12080 @defmac AC_DIAGNOSE (@var{category}, @var{message})
12081 @acindex{DIAGNOSE}
12082 Report @var{message} as a warning (or as an error if requested by the
12083 user) if warnings of the @var{category} are turned on.  This macro is
12084 obsolescent; you are encouraged to use:
12085 @example
12086 m4_warn([@var{category}], [@var{message}])
12087 @end example
12088 @noindent
12089 instead.  @xref{m4_warn}, for more details, including valid
12090 @var{category} names.
12091 @end defmac
12093 @defmac AC_WARNING (@var{message})
12094 @acindex{WARNING}
12095 Report @var{message} as a syntax warning.  This macro is obsolescent;
12096 you are encouraged to use:
12097 @example
12098 m4_warn([syntax], [@var{message}])
12099 @end example
12100 @noindent
12101 instead.  @xref{m4_warn}, for more details, as well as better
12102 finer-grained categories of warnings (not all problems have to do with
12103 syntax).
12104 @end defmac
12106 @defmac AC_FATAL (@var{message})
12107 @acindex{FATAL}
12108 Report a severe error @var{message}, and have @command{autoconf} die.
12109 This macro is obsolescent; you are encouraged to use:
12110 @example
12111 m4_fatal([@var{message}])
12112 @end example
12113 @noindent
12114 instead.  @xref{m4_fatal}, for more details.
12115 @end defmac
12117 When the user runs @samp{autoconf -W error}, warnings from
12118 @code{m4_warn} (including those issued through @code{AC_DIAGNOSE} and
12119 @code{AC_WARNING}) are reported as errors, see @ref{autoconf Invocation}.
12121 @node Dependencies Between Macros
12122 @section Dependencies Between Macros
12123 @cindex Dependencies between macros
12125 Some Autoconf macros depend on other macros having been called first in
12126 order to work correctly.  Autoconf provides a way to ensure that certain
12127 macros are called if needed and a way to warn the user if macros are
12128 called in an order that might cause incorrect operation.
12130 @menu
12131 * Prerequisite Macros::         Ensuring required information
12132 * Suggested Ordering::          Warning about possible ordering problems
12133 * One-Shot Macros::             Ensuring a macro is called only once
12134 @end menu
12136 @node Prerequisite Macros
12137 @subsection Prerequisite Macros
12138 @cindex Prerequisite macros
12139 @cindex Macros, prerequisites
12141 A macro that you write might need to use values that have previously
12142 been computed by other macros.  For example, @code{AC_DECL_YYTEXT}
12143 examines the output of @code{flex} or @code{lex}, so it depends on
12144 @code{AC_PROG_LEX} having been called first to set the shell variable
12145 @code{LEX}.
12147 Rather than forcing the user of the macros to keep track of the
12148 dependencies between them, you can use the @code{AC_REQUIRE} macro to do
12149 it automatically.  @code{AC_REQUIRE} can ensure that a macro is only
12150 called if it is needed, and only called once.
12152 @defmac AC_REQUIRE (@var{macro-name})
12153 @acindex{REQUIRE}
12154 If the M4 macro @var{macro-name} has not already been called, call it
12155 (without any arguments).  Make sure to quote @var{macro-name} with
12156 square brackets.  @var{macro-name} must have been defined using
12157 @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
12158 that it has been called.
12160 @code{AC_REQUIRE} must be used inside a macro defined by @code{AC_DEFUN}; it
12161 must not be called from the top level.
12162 @end defmac
12164 @code{AC_REQUIRE} is often misunderstood.  It really implements
12165 dependencies between macros in the sense that if one macro depends upon
12166 another, the latter is expanded @emph{before} the body of the
12167 former.  To be more precise, the required macro is expanded before
12168 the outermost defined macro in the current expansion stack.
12169 In particular, @samp{AC_REQUIRE([FOO])} is not replaced with the body of
12170 @code{FOO}.  For instance, this definition of macros:
12172 @example
12173 @group
12174 AC_DEFUN([TRAVOLTA],
12175 [test "$body_temperature_in_celsius" -gt "38" &&
12176   dance_floor=occupied])
12177 AC_DEFUN([NEWTON_JOHN],
12178 [test "$hair_style" = "curly" &&
12179   dance_floor=occupied])
12180 @end group
12182 @group
12183 AC_DEFUN([RESERVE_DANCE_FLOOR],
12184 [if date | grep '^Sat.*pm' >/dev/null 2>&1; then
12185   AC_REQUIRE([TRAVOLTA])
12186   AC_REQUIRE([NEWTON_JOHN])
12187 fi])
12188 @end group
12189 @end example
12191 @noindent
12192 with this @file{configure.ac}
12194 @example
12195 AC_INIT([Dance Manager], [1.0], [bug-dance@@example.org])
12196 RESERVE_DANCE_FLOOR
12197 if test "$dance_floor" = occupied; then
12198   AC_MSG_ERROR([cannot pick up here, let's move])
12200 @end example
12202 @noindent
12203 does not leave you with a better chance to meet a kindred soul at
12204 other times than Saturday night since it expands into:
12206 @example
12207 @group
12208 test "$body_temperature_in_Celsius" -gt "38" &&
12209   dance_floor=occupied
12210 test "$hair_style" = "curly" &&
12211   dance_floor=occupied
12213 if date | grep '^Sat.*pm' >/dev/null 2>&1; then
12217 @end group
12218 @end example
12220 This behavior was chosen on purpose: (i) it prevents messages in
12221 required macros from interrupting the messages in the requiring macros;
12222 (ii) it avoids bad surprises when shell conditionals are used, as in:
12224 @example
12225 @group
12226 if @dots{}; then
12227   AC_REQUIRE([SOME_CHECK])
12229 @dots{}
12230 SOME_CHECK
12231 @end group
12232 @end example
12234 The helper macros @code{AS_IF} and @code{AS_CASE} may be used to
12235 enforce expansion of required macros outside of shell conditional
12236 constructs.  You are furthermore encouraged to put all @code{AC_REQUIRE} calls
12237 at the beginning of a macro.  You can use @code{dnl} to avoid the empty
12238 lines they leave.
12240 @node Suggested Ordering
12241 @subsection Suggested Ordering
12242 @cindex Macros, ordering
12243 @cindex Ordering macros
12245 Some macros should be run before another macro if both are called, but
12246 neither @emph{requires} that the other be called.  For example, a macro
12247 that changes the behavior of the C compiler should be called before any
12248 macros that run the C compiler.  Many of these dependencies are noted in
12249 the documentation.
12251 Autoconf provides the @code{AC_BEFORE} macro to warn users when macros
12252 with this kind of dependency appear out of order in a
12253 @file{configure.ac} file.  The warning occurs when creating
12254 @command{configure} from @file{configure.ac}, not when running
12255 @command{configure}.
12257 For example, @code{AC_PROG_CPP} checks whether the C compiler
12258 can run the C preprocessor when given the @option{-E} option.  It should
12259 therefore be called after any macros that change which C compiler is
12260 being used, such as @code{AC_PROG_CC}.  So @code{AC_PROG_CC} contains:
12262 @example
12263 AC_BEFORE([$0], [AC_PROG_CPP])dnl
12264 @end example
12266 @noindent
12267 This warns the user if a call to @code{AC_PROG_CPP} has already occurred
12268 when @code{AC_PROG_CC} is called.
12270 @defmac AC_BEFORE (@var{this-macro-name}, @var{called-macro-name})
12271 @acindex{BEFORE}
12272 Make M4 print a warning message to the standard error output if
12273 @var{called-macro-name} has already been called.  @var{this-macro-name}
12274 should be the name of the macro that is calling @code{AC_BEFORE}.  The
12275 macro @var{called-macro-name} must have been defined using
12276 @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
12277 that it has been called.
12278 @end defmac
12280 @node One-Shot Macros
12281 @subsection One-Shot Macros
12282 @cindex One-shot macros
12283 @cindex Macros, called once
12285 Some macros should be called only once, either because calling them
12286 multiple time is unsafe, or because it is bad style.  For instance
12287 Autoconf ensures that @code{AC_CANONICAL_BUILD} and cousins
12288 (@pxref{Canonicalizing}) are evaluated only once, because it makes no
12289 sense to run these expensive checks more than once.  Such one-shot
12290 macros can be defined using @code{AC_DEFUN_ONCE}.
12292 @defmac AC_DEFUN_ONCE (@var{macro-name}, @var{macro-body})
12293 @acindex{DEFUN_ONCE}
12295 Declare macro @var{macro-name} like @code{AC_DEFUN} would (@pxref{Macro
12296 Definitions}), and emit a warning any time the macro is called more than
12297 once.
12298 @end defmac
12300 Obviously it is not sensible to evaluate a macro defined by
12301 @code{AC_DEFUN_ONCE} in a macro defined by @code{AC_DEFUN}.
12302 Most of the time you want to use @code{AC_REQUIRE} (@pxref{Prerequisite
12303 Macros}).
12305 @node Obsoleting Macros
12306 @section Obsoleting Macros
12307 @cindex Obsoleting macros
12308 @cindex Macros, obsoleting
12310 Configuration and portability technology has evolved over the years.
12311 Often better ways of solving a particular problem are developed, or
12312 ad-hoc approaches are systematized.  This process has occurred in many
12313 parts of Autoconf.  One result is that some of the macros are now
12314 considered @dfn{obsolete}; they still work, but are no longer considered
12315 the best thing to do, hence they should be replaced with more modern
12316 macros.  Ideally, @command{autoupdate} should replace the old macro calls
12317 with their modern implementation.
12319 Autoconf provides a simple means to obsolete a macro.
12321 @anchor{AU_DEFUN}
12322 @defmac AU_DEFUN (@var{old-macro}, @var{implementation}, @ovar{message})
12323 @auindex{DEFUN}
12324 Define @var{old-macro} as @var{implementation}.  The only difference
12325 with @code{AC_DEFUN} is that the user is warned that
12326 @var{old-macro} is now obsolete.
12328 If she then uses @command{autoupdate}, the call to @var{old-macro} is
12329 replaced by the modern @var{implementation}.  @var{message} should
12330 include information on what to do after running @command{autoupdate};
12331 @command{autoupdate} prints it as a warning, and includes it
12332 in the updated @file{configure.ac} file.
12334 The details of this macro are hairy: if @command{autoconf} encounters an
12335 @code{AU_DEFUN}ed macro, all macros inside its second argument are expanded
12336 as usual.  However, when @command{autoupdate} is run, only M4 and M4sugar
12337 macros are expanded here, while all other macros are disabled and
12338 appear literally in the updated @file{configure.ac}.
12339 @end defmac
12341 @defmac AU_ALIAS (@var{old-name}, @var{new-name})
12342 @auindex{ALIAS}
12343 Used if the @var{old-name} is to be replaced by a call to @var{new-macro}
12344 with the same parameters.  This happens for example if the macro was renamed.
12345 @end defmac
12347 @node Coding Style
12348 @section Coding Style
12349 @cindex Coding style
12351 The Autoconf macros follow a strict coding style.  You are encouraged to
12352 follow this style, especially if you intend to distribute your macro,
12353 either by contributing it to Autoconf itself, or via other means.
12355 The first requirement is to pay great attention to the quotation.  For
12356 more details, see @ref{Autoconf Language}, and @ref{M4 Quotation}.
12358 Do not try to invent new interfaces.  It is likely that there is a macro
12359 in Autoconf that resembles the macro you are defining: try to stick to
12360 this existing interface (order of arguments, default values, etc.).  We
12361 @emph{are} conscious that some of these interfaces are not perfect;
12362 nevertheless, when harmless, homogeneity should be preferred over
12363 creativity.
12365 Be careful about clashes both between M4 symbols and between shell
12366 variables.
12368 If you stick to the suggested M4 naming scheme (@pxref{Macro Names}),
12369 you are unlikely to generate conflicts.  Nevertheless, when you need to
12370 set a special value, @emph{avoid using a regular macro name}; rather,
12371 use an ``impossible'' name.  For instance, up to version 2.13, the macro
12372 @code{AC_SUBST} used to remember what @var{symbol} macros were already defined
12373 by setting @code{AC_SUBST_@var{symbol}}, which is a regular macro name.
12374 But since there is a macro named @code{AC_SUBST_FILE}, it was just
12375 impossible to @samp{AC_SUBST(FILE)}!  In this case,
12376 @code{AC_SUBST(@var{symbol})} or @code{_AC_SUBST(@var{symbol})} should
12377 have been used (yes, with the parentheses).
12378 @c or better yet, high-level macros such as @code{m4_expand_once}
12380 No Autoconf macro should ever enter the user-variable name space; i.e.,
12381 except for the variables that are the actual result of running the
12382 macro, all shell variables should start with @code{ac_}.  In
12383 addition, small macros or any macro that is likely to be embedded in
12384 other macros should be careful not to use obvious names.
12386 @cindex @code{dnl}
12387 Do not use @code{dnl} to introduce comments: most of the comments you
12388 are likely to write are either header comments which are not output
12389 anyway, or comments that should make their way into @file{configure}.
12390 There are exceptional cases where you do want to comment special M4
12391 constructs, in which case @code{dnl} is right, but keep in mind that it
12392 is unlikely.
12394 M4 ignores the leading blanks and newlines before each argument.
12395 Use this feature to
12396 indent in such a way that arguments are (more or less) aligned with the
12397 opening parenthesis of the macro being called.  For instance, instead of
12399 @example
12400 AC_CACHE_CHECK(for EMX OS/2 environment,
12401 ac_cv_emxos2,
12402 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
12403 [ac_cv_emxos2=yes], [ac_cv_emxos2=no])])
12404 @end example
12406 @noindent
12407 write
12409 @example
12410 AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
12411 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
12412                    [ac_cv_emxos2=yes],
12413                    [ac_cv_emxos2=no])])
12414 @end example
12416 @noindent
12417 or even
12419 @example
12420 AC_CACHE_CHECK([for EMX OS/2 environment],
12421                [ac_cv_emxos2],
12422                [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
12423                                                    [return __EMX__;])],
12424                                   [ac_cv_emxos2=yes],
12425                                   [ac_cv_emxos2=no])])
12426 @end example
12428 When using @code{AC_RUN_IFELSE} or any macro that cannot work when
12429 cross-compiling, provide a pessimistic value (typically @samp{no}).
12431 Feel free to use various tricks to prevent auxiliary tools, such as
12432 syntax-highlighting editors, from behaving improperly.  For instance,
12433 instead of:
12435 @example
12436 m4_bpatsubst([$1], [$"])
12437 @end example
12439 @noindent
12442 @example
12443 m4_bpatsubst([$1], [$""])
12444 @end example
12446 @noindent
12447 so that Emacsen do not open an endless ``string'' at the first quote.
12448 For the same reasons, avoid:
12450 @example
12451 test $[#] != 0
12452 @end example
12454 @noindent
12455 and use:
12457 @example
12458 test $[@@%:@@] != 0
12459 @end example
12461 @noindent
12462 Otherwise, the closing bracket would be hidden inside a @samp{#}-comment,
12463 breaking the bracket-matching highlighting from Emacsen.  Note the
12464 preferred style to escape from M4: @samp{$[1]}, @samp{$[@@]}, etc.  Do
12465 not escape when it is unnecessary.  Common examples of useless quotation
12466 are @samp{[$]$1} (write @samp{$$1}), @samp{[$]var} (use @samp{$var}),
12467 etc.  If you add portability issues to the picture, you'll prefer
12468 @samp{$@{1+"$[@@]"@}} to @samp{"[$]@@"}, and you'll prefer do something
12469 better than hacking Autoconf @code{:-)}.
12471 When using @command{sed}, don't use @option{-e} except for indenting
12472 purposes.  With the @code{s} and @code{y} commands, the preferred
12473 separator is @samp{/} unless @samp{/} itself might appear in the pattern
12474 or replacement, in which case you should use @samp{|}, or optionally
12475 @samp{,} if you know the pattern and replacement cannot contain a file
12476 name.  If none of these characters will do, choose a printable character
12477 that cannot appear in the pattern or replacement.  Characters from the
12478 set @samp{"#$&'()*;<=>?`|~} are good choices if the pattern or
12479 replacement might contain a file name, since they have special meaning
12480 to the shell and are less likely to occur in file names.
12482 @xref{Macro Definitions}, for details on how to define a macro.  If a
12483 macro doesn't use @code{AC_REQUIRE}, is expected to never be the object
12484 of an @code{AC_REQUIRE} directive, and macros required by other macros
12485 inside arguments do not need to be expanded before this macro, then
12486 use @code{m4_define}.  In case of doubt, use @code{AC_DEFUN}.
12487 All the @code{AC_REQUIRE} statements should be at the beginning of the
12488 macro, and each statement should be followed by @code{dnl}.
12490 You should not rely on the number of arguments: instead of checking
12491 whether an argument is missing, test that it is not empty.  It provides
12492 both a simpler and a more predictable interface to the user, and saves
12493 room for further arguments.
12495 Unless the macro is short, try to leave the closing @samp{])} at the
12496 beginning of a line, followed by a comment that repeats the name of the
12497 macro being defined.  This introduces an additional newline in
12498 @command{configure}; normally, that is not a problem, but if you want to
12499 remove it you can use @samp{[]dnl} on the last line.  You can similarly
12500 use @samp{[]dnl} after a macro call to remove its newline.  @samp{[]dnl}
12501 is recommended instead of @samp{dnl} to ensure that M4 does not
12502 interpret the @samp{dnl} as being attached to the preceding text or
12503 macro output.  For example, instead of:
12505 @example
12506 AC_DEFUN([AC_PATH_X],
12507 [AC_MSG_CHECKING([for X])
12508 AC_REQUIRE_CPP()
12509 @r{# @dots{}omitted@dots{}}
12510   AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
12511 fi])
12512 @end example
12514 @noindent
12515 you would write:
12517 @example
12518 AC_DEFUN([AC_PATH_X],
12519 [AC_REQUIRE_CPP()[]dnl
12520 AC_MSG_CHECKING([for X])
12521 @r{# @dots{}omitted@dots{}}
12522   AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
12523 fi[]dnl
12524 ])# AC_PATH_X
12525 @end example
12527 If the macro is long, try to split it into logical chunks.  Typically,
12528 macros that check for a bug in a function and prepare its
12529 @code{AC_LIBOBJ} replacement should have an auxiliary macro to perform
12530 this setup.  Do not hesitate to introduce auxiliary macros to factor
12531 your code.
12533 In order to highlight the recommended coding style, here is a macro
12534 written the old way:
12536 @example
12537 dnl Check for EMX on OS/2.
12538 dnl _AC_EMXOS2
12539 AC_DEFUN(_AC_EMXOS2,
12540 [AC_CACHE_CHECK(for EMX OS/2 environment, ac_cv_emxos2,
12541 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return __EMX__;)],
12542 ac_cv_emxos2=yes, ac_cv_emxos2=no)])
12543 test "$ac_cv_emxos2" = yes && EMXOS2=yes])
12544 @end example
12546 @noindent
12547 and the new way:
12549 @example
12550 # _AC_EMXOS2
12551 # ----------
12552 # Check for EMX on OS/2.
12553 m4_define([_AC_EMXOS2],
12554 [AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
12555 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
12556                    [ac_cv_emxos2=yes],
12557                    [ac_cv_emxos2=no])])
12558 test "$ac_cv_emxos2" = yes && EMXOS2=yes[]dnl
12559 ])# _AC_EMXOS2
12560 @end example
12565 @c ============================================= Portable Shell Programming
12567 @node Portable Shell
12568 @chapter Portable Shell Programming
12569 @cindex Portable shell programming
12571 When writing your own checks, there are some shell-script programming
12572 techniques you should avoid in order to make your code portable.  The
12573 Bourne shell and upward-compatible shells like the Korn shell and Bash
12574 have evolved over the years, but to prevent trouble, do not take
12575 advantage of features that were added after Unix version 7, circa
12576 1977 (@pxref{Systemology}).
12578 You should not use aliases, negated character classes, or other features
12579 that are not found in all Bourne-compatible shells; restrict yourself
12580 to the lowest common denominator.  Even @code{unset} is not supported
12581 by all shells!
12583 Shell functions are considered portable nowadays, though Autoconf still
12584 does not use them (Autotest does).  However, some pitfalls have to be
12585 avoided for portable use of shell functions (@pxref{Shell Functions}).
12587 Some ancient systems have quite
12588 small limits on the length of the @samp{#!} line; for instance, 32
12589 bytes (not including the newline) on SunOS 4.
12590 A few ancient 4.2@acronym{BSD} based systems (such as Dynix circa 1984)
12591 required a single space between the @samp{#!} and the @samp{/}.
12592 However, these ancient systems are no longer of practical concern.
12594 The set of external programs you should run in a @command{configure} script
12595 is fairly small.  @xref{Utilities in Makefiles, , Utilities in
12596 Makefiles, standards, @acronym{GNU} Coding Standards}, for the list.  This
12597 restriction allows users to start out with a fairly small set of
12598 programs and build the rest, avoiding too many interdependencies between
12599 packages.
12601 Some of these external utilities have a portable subset of features; see
12602 @ref{Limitations of Usual Tools}.
12604 There are other sources of documentation about shells.  The
12605 specification for the Posix
12606 @uref{http://www.opengroup.org/@/susv3/@/utilities/@/xcu_chap02.html, Shell
12607 Command Language}, though more generous than the restrictive shell
12608 subset described above, is fairly portable nowadays.  Also please see
12609 @uref{http://www.faqs.org/@/faqs/@/unix-faq/@/shell/, the Shell FAQs}.
12611 @menu
12612 * Shellology::                  A zoology of shells
12613 * Here-Documents::              Quirks and tricks
12614 * File Descriptors::            FDs and redirections
12615 * File System Conventions::     File names
12616 * Shell Pattern Matching::      Pattern matching
12617 * Shell Substitutions::         Variable and command expansions
12618 * Assignments::                 Varying side effects of assignments
12619 * Parentheses::                 Parentheses in shell scripts
12620 * Slashes::                     Slashes in shell scripts
12621 * Special Shell Variables::     Variables you should not change
12622 * Shell Functions::             What to look out for if you use them
12623 * Limitations of Builtins::     Portable use of not so portable /bin/sh
12624 * Limitations of Usual Tools::  Portable use of portable tools
12625 @end menu
12627 @node Shellology
12628 @section Shellology
12629 @cindex Shellology
12631 There are several families of shells, most prominently the Bourne family
12632 and the C shell family which are deeply incompatible.  If you want to
12633 write portable shell scripts, avoid members of the C shell family.  The
12634 @uref{http://www.faqs.org/@/faqs/@/unix-faq/@/shell/@/shell-differences/, the
12635 Shell difference FAQ} includes a small history of Posix shells, and a
12636 comparison between several of them.
12638 Below we describe some of the members of the Bourne shell family.
12640 @table @asis
12641 @item Ash
12642 @cindex Ash
12643 Ash is often used on @acronym{GNU}/Linux and @acronym{BSD}
12644 systems as a light-weight Bourne-compatible shell.  Ash 0.2 has some
12645 bugs that are fixed in the 0.3.x series, but portable shell scripts
12646 should work around them, since version 0.2 is still shipped with many
12647 @acronym{GNU}/Linux distributions.
12649 To be compatible with Ash 0.2:
12651 @itemize @minus
12652 @item
12653 don't use @samp{$?} after expanding empty or unset variables,
12654 or at the start of an @command{eval}:
12656 @example
12657 foo=
12658 false
12659 $foo
12660 echo "Do not use it: $?"
12661 false
12662 eval 'echo "Do not use it: $?"'
12663 @end example
12665 @item
12666 don't use command substitution within variable expansion:
12668 @example
12669 cat $@{FOO=`bar`@}
12670 @end example
12672 @item
12673 beware that single builtin substitutions are not performed by a
12674 subshell, hence their effect applies to the current shell!  @xref{Shell
12675 Substitutions}, item ``Command Substitution''.
12676 @end itemize
12678 @item Bash
12679 @cindex Bash
12680 To detect whether you are running Bash, test whether
12681 @code{BASH_VERSION} is set.  To require
12682 Posix compatibility, run @samp{set -o posix}.  @xref{Bash POSIX
12683 Mode, , Bash Posix Mode, bash, The @acronym{GNU} Bash Reference
12684 Manual}, for details.
12686 @item Bash 2.05 and later
12687 @cindex Bash 2.05 and later
12688 Versions 2.05 and later of Bash use a different format for the
12689 output of the @command{set} builtin, designed to make evaluating its
12690 output easier.  However, this output is not compatible with earlier
12691 versions of Bash (or with many other shells, probably).  So if
12692 you use Bash 2.05 or higher to execute @command{configure},
12693 you'll need to use Bash 2.05 for all other build tasks as well.
12695 @item Ksh
12696 @cindex Ksh
12697 @cindex Korn shell
12698 @prindex @samp{ksh}
12699 @prindex @samp{ksh88}
12700 @prindex @samp{ksh93}
12701 The Korn shell is compatible with the Bourne family and it mostly
12702 conforms to Posix.  It has two major variants commonly
12703 called @samp{ksh88} and @samp{ksh93}, named after the years of initial
12704 release.  It is usually called @command{ksh}, but is called @command{sh}
12705 on some hosts if you set your path appropriately.
12707 Solaris systems have three variants:
12708 @prindex @command{/usr/bin/ksh} on Solaris
12709 @command{/usr/bin/ksh} is @samp{ksh88}; it is
12710 standard on Solaris 2.0 and later.
12711 @prindex @command{/usr/xpg4/bin/sh} on Solaris
12712 @command{/usr/xpg4/bin/sh} is a Posix-compliant variant of
12713 @samp{ksh88}; it is standard on Solaris 9 and later.
12714 @prindex @command{/usr/dt/bin/dtksh} on Solaris
12715 @command{/usr/dt/bin/dtksh} is @samp{ksh93}.
12716 Variants that are not standard may be parts of optional
12717 packages.  There is no extra charge for these packages, but they are
12718 not part of a minimal OS install and therefore some installations may
12719 not have it.
12721 Starting with Tru64 Version 4.0, the Korn shell @command{/usr/bin/ksh}
12722 is also available as @command{/usr/bin/posix/sh}.  If the environment
12723 variable @env{BIN_SH} is set to @code{xpg4}, subsidiary invocations of
12724 the standard shell conform to Posix.
12726 @item Pdksh
12727 @prindex @samp{pdksh}
12728 A public-domain clone of the Korn shell called @command{pdksh} is widely
12729 available: it has most of the @samp{ksh88} features along with a few of
12730 its own.  It usually sets @code{KSH_VERSION}, except if invoked as
12731 @command{/bin/sh} on Open@acronym{BSD}, and similarly to Bash you can require
12732 Posix compatibility by running @samp{set -o posix}.  Unfortunately, with
12733 @command{pdksh} 5.2.14 (the latest stable version as of January 2007)
12734 Posix mode is buggy and causes @command{pdksh} to depart from Posix in
12735 at least one respect:
12737 @example
12738 $ @kbd{echo "`echo \"hello\"`"}
12739 hello
12740 $ @kbd{set -o posix}
12741 $ @kbd{echo "`echo \"hello\"`"}
12742 "hello"
12743 @end example
12745 The last line of output contains spurious quotes.  This is yet another
12746 reason why portable shell code should not contain
12747 @code{"`@dots{}\"@dots{}\"@dots{}`"} constructs (@pxref{Shell
12748 Substitutions}).
12750 @item Zsh
12751 @cindex Zsh
12752 To detect whether you are running @command{zsh}, test whether
12753 @code{ZSH_VERSION} is set.  By default @command{zsh} is @emph{not}
12754 compatible with the Bourne shell: you must execute @samp{emulate sh},
12755 and for @command{zsh} versions before 3.1.6-dev-18 you must also
12756 set @code{NULLCMD} to @samp{:}.  @xref{Compatibility, , Compatibility,
12757 zsh, The Z Shell Manual}, for details.
12759 The default Mac OS X @command{sh} was originally Zsh; it was changed to
12760 Bash in Mac OS X 10.2.
12761 @end table
12763 The following discussion between Russ Allbery and Robert Lipe is worth
12764 reading:
12766 @noindent
12767 Russ Allbery:
12769 @quotation
12770 The @acronym{GNU} assumption that @command{/bin/sh} is the one and only shell
12771 leads to a permanent deadlock.  Vendors don't want to break users'
12772 existing shell scripts, and there are some corner cases in the Bourne
12773 shell that are not completely compatible with a Posix shell.  Thus,
12774 vendors who have taken this route will @emph{never} (OK@dots{}``never say
12775 never'') replace the Bourne shell (as @command{/bin/sh}) with a
12776 Posix shell.
12777 @end quotation
12779 @noindent
12780 Robert Lipe:
12782 @quotation
12783 This is exactly the problem.  While most (at least most System V's) do
12784 have a Bourne shell that accepts shell functions most vendor
12785 @command{/bin/sh} programs are not the Posix shell.
12787 So while most modern systems do have a shell @emph{somewhere} that meets the
12788 Posix standard, the challenge is to find it.
12789 @end quotation
12791 @node Here-Documents
12792 @section Here-Documents
12793 @cindex Here-documents
12794 @cindex Shell here-documents
12796 Don't rely on @samp{\} being preserved just because it has no special
12797 meaning together with the next symbol.  In the native @command{sh}
12798 on Open@acronym{BSD} 2.7 @samp{\"} expands to @samp{"} in here-documents with
12799 unquoted delimiter.  As a general rule, if @samp{\\} expands to @samp{\}
12800 use @samp{\\} to get @samp{\}.
12802 With Open@acronym{BSD} 2.7's @command{sh}
12804 @example
12805 @group
12806 $ @kbd{cat <<EOF
12807 > \" \\
12808 > EOF}
12809 " \
12810 @end group
12811 @end example
12813 @noindent
12814 and with Bash:
12816 @example
12817 @group
12818 bash-2.04$ @kbd{cat <<EOF
12819 > \" \\
12820 > EOF}
12821 \" \
12822 @end group
12823 @end example
12825 Some shells mishandle large here-documents: for example,
12826 Solaris 10 @command{dtksh} and the UnixWare 7.1.1 Posix shell, which are
12827 derived from Korn shell version M-12/28/93d, mishandle braced variable
12828 expansion that crosses a 1024- or 4096-byte buffer boundary
12829 within a here-document.  Only the part of the variable name after the boundary
12830 is used.  For example, @code{$@{variable@}} could be replaced by the expansion
12831 of @code{$@{ble@}}.  If the end of the variable name is aligned with the block
12832 boundary, the shell reports an error, as if you used @code{$@{@}}.
12833 Instead of @code{$@{variable-default@}}, the shell may expand
12834 @code{$@{riable-default@}}, or even @code{$@{fault@}}.  This bug can often
12835 be worked around by omitting the braces: @code{$variable}.  The bug was
12836 fixed in
12837 @samp{ksh93g} (1998-04-30) but as of 2006 many operating systems were
12838 still shipping older versions with the bug.
12840 Many shells (including the Bourne shell) implement here-documents
12841 inefficiently.  In particular, some shells can be extremely inefficient when
12842 a single statement contains many here-documents.  For instance if your
12843 @file{configure.ac} includes something like:
12845 @example
12846 @group
12847 if <cross_compiling>; then
12848   assume this and that
12849 else
12850   check this
12851   check that
12852   check something else
12853   @dots{}
12854   on and on forever
12855   @dots{}
12857 @end group
12858 @end example
12860 A shell parses the whole @code{if}/@code{fi} construct, creating
12861 temporary files for each here-document in it.  Some shells create links
12862 for such here-documents on every @code{fork}, so that the clean-up code
12863 they had installed correctly removes them.  It is creating the links
12864 that can take the shell forever.
12866 Moving the tests out of the @code{if}/@code{fi}, or creating multiple
12867 @code{if}/@code{fi} constructs, would improve the performance
12868 significantly.  Anyway, this kind of construct is not exactly the
12869 typical use of Autoconf.  In fact, it's even not recommended, because M4
12870 macros can't look into shell conditionals, so we may fail to expand a
12871 macro when it was expanded before in a conditional path, and the
12872 condition turned out to be false at runtime, and we end up not
12873 executing the macro at all.
12875 @node File Descriptors
12876 @section File Descriptors
12877 @cindex Descriptors
12878 @cindex File descriptors
12879 @cindex Shell file descriptors
12881 Most shells, if not all (including Bash, Zsh, Ash), output traces on
12882 stderr, even for subshells.  This might result in undesirable content
12883 if you meant to capture the standard-error output of the inner command:
12885 @example
12886 $ @kbd{ash -x -c '(eval "echo foo >&2") 2>stderr'}
12887 $ @kbd{cat stderr}
12888 + eval echo foo >&2
12889 + echo foo
12891 $ @kbd{bash -x -c '(eval "echo foo >&2") 2>stderr'}
12892 $ @kbd{cat stderr}
12893 + eval 'echo foo >&2'
12894 ++ echo foo
12896 $ @kbd{zsh -x -c '(eval "echo foo >&2") 2>stderr'}
12897 @i{# Traces on startup files deleted here.}
12898 $ @kbd{cat stderr}
12899 +zsh:1> eval echo foo >&2
12900 +zsh:1> echo foo
12902 @end example
12904 @noindent
12905 One workaround is to grep out uninteresting lines, hoping not to remove
12906 good ones.
12908 If you intend to redirect both standard error and standard output,
12909 redirect standard output first.  This works better with @acronym{HP-UX},
12910 since its shell mishandles tracing if standard error is redirected
12911 first:
12913 @example
12914 $ @kbd{sh -x -c ': 2>err >out'}
12915 + :
12916 + 2> err $ @kbd{cat err}
12917 1> out
12918 @end example
12920 Don't try to redirect the standard error of a command substitution.  It
12921 must be done @emph{inside} the command substitution.  When running
12922 @samp{: `cd /zorglub` 2>/dev/null} expect the error message to
12923 escape, while @samp{: `cd /zorglub 2>/dev/null`} works properly.
12925 It is worth noting that Zsh (but not Ash nor Bash) makes it possible
12926 in assignments though: @samp{foo=`cd /zorglub` 2>/dev/null}.
12928 When catering to old systems, don't redirect the same file descriptor
12929 several times, as you are doomed to failure under Ultrix.
12931 @example
12932 ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
12933 UWS V4.4 (Rev. 11)
12934 $ @kbd{eval 'echo matter >fullness' >void}
12935 illegal io
12936 $ @kbd{eval '(echo matter >fullness)' >void}
12937 illegal io
12938 $ @kbd{(eval '(echo matter >fullness)') >void}
12939 Ambiguous output redirect.
12940 @end example
12942 @noindent
12943 In each case the expected result is of course @file{fullness} containing
12944 @samp{matter} and @file{void} being empty.  However, this bug is
12945 probably not of practical concern to modern platforms.
12947 Don't rely on file descriptors 0, 1, and 2 remaining closed in a
12948 subsidiary program.  If any of these descriptors is closed, the
12949 operating system may open an unspecified file for the descriptor in the
12950 new process image.  Posix says this may be done only if the subsidiary
12951 program is set-user-ID or set-group-ID, but @acronym{HP-UX} 11.23 does
12952 it even for ordinary programs.
12954 Don't rely on open file descriptors being open in child processes.  In
12955 @command{ksh}, file descriptors above 2 which are opened using
12956 @samp{exec @var{n}>file} are closed by a subsequent @samp{exec} (such as
12957 that involved in the fork-and-exec which runs a program or script).
12958 Thus, using @command{sh}, we have:
12960 @example
12961 $ @kbd{cat ./descrips}
12962 #!/bin/sh -
12963 echo hello >&5
12964 $ @kbd{exec 5>t}
12965 $ @kbd{./descrips}
12966 $ @kbd{cat t}
12967 hello
12969 @end example
12971 @noindent
12972 But using ksh:
12974 @example
12975 $ @kbd{exec 5>t}
12976 $ @kbd{./descrips}
12977 hello
12978 $ @kbd{cat t}
12980 @end example
12982 @noindent
12983 Within the process which runs the @samp{descrips} script, file
12984 descriptor 5 is closed.
12986 Don't rely on redirection to a closed file descriptor to cause an
12987 error.  With Solaris @command{/bin/sh}, when the redirection fails, the
12988 output goes to the original file descriptor.
12990 @example
12991 $ @kbd{bash -c 'echo hi >&3' 3>&-; echo $?}
12992 bash: 3: Bad file descriptor
12994 $ @kbd{/bin/sh -c 'echo hi >&3' 3>&-; echo $?}
12997 @end example
12999 @acronym{DOS} variants cannot rename or remove open files, such as in
13000 @samp{mv foo bar >foo} or @samp{rm foo >foo}, even though this is
13001 perfectly portable among Posix hosts.
13003 A few ancient systems reserved some file descriptors.  By convention,
13004 file descriptor 3 was opened to @file{/dev/tty} when you logged into
13005 Eighth Edition (1985) through Tenth Edition Unix (1989).  File
13006 descriptor 4 had a special use on the Stardent/Kubota Titan (circa
13007 1990), though we don't now remember what it was.  Both these systems are
13008 obsolete, so it's now safe to treat file descriptors 3 and 4 like any
13009 other file descriptors.
13011 @node File System Conventions
13012 @section File System Conventions
13013 @cindex File system conventions
13015 Autoconf uses shell-script processing extensively, so the file names
13016 that it processes should not contain characters that are special to the
13017 shell.  Special characters include space, tab, newline, @sc{nul}, and
13018 the following:
13020 @example
13021 " # $ & ' ( ) * ; < = > ? [ \ ` |
13022 @end example
13024 Also, file names should not begin with @samp{~} or @samp{-}, and should
13025 contain neither @samp{-} immediately after @samp{/} nor @samp{~}
13026 immediately after @samp{:}.  On Posix-like platforms, directory names
13027 should not contain @samp{:}, as this runs afoul of @samp{:} used as the
13028 path separator.
13030 These restrictions apply not only to the files that you distribute, but
13031 also to the absolute file names of your source, build, and destination
13032 directories.
13034 On some Posix-like platforms, @samp{!} and @samp{^} are special too, so
13035 they should be avoided.
13037 Posix lets implementations treat leading @file{//} specially, but
13038 requires leading @file{///} and beyond to be equivalent to @file{/}.
13039 Most Unix variants treat @file{//} like @file{/}.  However, some treat
13040 @file{//} as a ``super-root'' that can provide access to files that are
13041 not otherwise reachable from @file{/}.  The super-root tradition began
13042 with Apollo Domain/OS, which died out long ago, but unfortunately Cygwin
13043 has revived it.
13045 While @command{autoconf} and friends are usually run on some Posix
13046 variety, they can be used on other systems, most notably @acronym{DOS}
13047 variants.  This impacts several assumptions regarding file names.
13049 @noindent
13050 For example, the following code:
13052 @example
13053 case $foo_dir in
13054   /*) # Absolute
13055      ;;
13056   *)
13057      foo_dir=$dots$foo_dir ;;
13058 esac
13059 @end example
13061 @noindent
13062 fails to properly detect absolute file names on those systems, because
13063 they can use a drivespec, and usually use a backslash as directory
13064 separator.  If you want to be portable to @acronym{DOS} variants (at the
13065 price of rejecting valid but oddball Posix file names like @file{a:\b}),
13066 you can check for absolute file names like this:
13068 @cindex absolute file names, detect
13069 @example
13070 case $foo_dir in
13071   [\\/]* | ?:[\\/]* ) # Absolute
13072      ;;
13073   *)
13074      foo_dir=$dots$foo_dir ;;
13075 esac
13076 @end example
13078 @noindent
13079 Make sure you quote the brackets if appropriate and keep the backslash as
13080 first character (@pxref{Limitations of Builtins}).
13082 Also, because the colon is used as part of a drivespec, these systems don't
13083 use it as path separator.  When creating or accessing paths, you can use the
13084 @code{PATH_SEPARATOR} output variable instead.  @command{configure} sets this
13085 to the appropriate value for the build system (@samp{:} or @samp{;}) when it
13086 starts up.
13088 File names need extra care as well.  While @acronym{DOS} variants
13089 that are Posixy enough to run @command{autoconf} (such as @acronym{DJGPP})
13090 are usually able to handle long file names properly, there are still
13091 limitations that can seriously break packages.  Several of these issues
13092 can be easily detected by the
13093 @uref{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz, doschk}
13094 package.
13096 A short overview follows; problems are marked with @sc{sfn}/@sc{lfn} to
13097 indicate where they apply: @sc{sfn} means the issues are only relevant to
13098 plain @acronym{DOS}, not to @acronym{DOS} under Microsoft Windows
13099 variants, while @sc{lfn} identifies problems that exist even under
13100 Microsoft Windows variants.
13102 @table @asis
13103 @item No multiple dots (@sc{sfn})
13104 @acronym{DOS} cannot handle multiple dots in file names.  This is an especially
13105 important thing to remember when building a portable configure script,
13106 as @command{autoconf} uses a .in suffix for template files.
13108 This is perfectly OK on Posix variants:
13110 @example
13111 AC_CONFIG_HEADERS([config.h])
13112 AC_CONFIG_FILES([source.c foo.bar])
13113 AC_OUTPUT
13114 @end example
13116 @noindent
13117 but it causes problems on @acronym{DOS}, as it requires @samp{config.h.in},
13118 @samp{source.c.in} and @samp{foo.bar.in}.  To make your package more portable
13119 to @acronym{DOS}-based environments, you should use this instead:
13121 @example
13122 AC_CONFIG_HEADERS([config.h:config.hin])
13123 AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])
13124 AC_OUTPUT
13125 @end example
13127 @item No leading dot (@sc{sfn})
13128 @acronym{DOS} cannot handle file names that start with a dot.  This is usually
13129 not important for @command{autoconf}.
13131 @item Case insensitivity (@sc{lfn})
13132 @acronym{DOS} is case insensitive, so you cannot, for example, have both a
13133 file called @samp{INSTALL} and a directory called @samp{install}.  This
13134 also affects @command{make}; if there's a file called @samp{INSTALL} in
13135 the directory, @samp{make install} does nothing (unless the
13136 @samp{install} target is marked as PHONY).
13138 @item The 8+3 limit (@sc{sfn})
13139 Because the @acronym{DOS} file system only stores the first 8 characters of
13140 the file name and the first 3 of the extension, those must be unique.
13141 That means that @file{foobar-part1.c}, @file{foobar-part2.c} and
13142 @file{foobar-prettybird.c} all resolve to the same file name
13143 (@file{FOOBAR-P.C}).  The same goes for @file{foo.bar} and
13144 @file{foo.bartender}.
13146 The 8+3 limit is not usually a problem under Microsoft Windows, as it
13147 uses numeric
13148 tails in the short version of file names to make them unique.  However, a
13149 registry setting can turn this behavior off.  While this makes it
13150 possible to share file trees containing long file names between @sc{sfn}
13151 and @sc{lfn} environments, it also means the above problem applies there
13152 as well.
13154 @item Invalid characters (@sc{lfn})
13155 Some characters are invalid in @acronym{DOS} file names, and should therefore
13156 be avoided.  In a @sc{lfn} environment, these are @samp{/}, @samp{\},
13157 @samp{?}, @samp{*}, @samp{:}, @samp{<}, @samp{>}, @samp{|} and @samp{"}.
13158 In a @sc{sfn} environment, other characters are also invalid.  These
13159 include @samp{+}, @samp{,}, @samp{[} and @samp{]}.
13161 @item Invalid names (@sc{lfn})
13162 Some @acronym{DOS} file names are reserved, and cause problems if you
13163 try to use files with those names.  These names include @file{CON},
13164 @file{AUX}, @file{COM1}, @file{COM2}, @file{COM3}, @file{COM4},
13165 @file{LPT1}, @file{LPT2}, @file{LPT3}, @file{NUL}, and @file{PRN}.
13166 File names are case insensitive, so even names like
13167 @file{aux/config.guess} are disallowed.
13169 @end table
13171 @node Shell Pattern Matching
13172 @section Shell Pattern Matching
13173 @cindex Shell pattern matching
13175 Nowadays portable patterns can use negated character classes like
13176 @samp{[!-aeiou]}.  The older syntax @samp{[^-aeiou]} is supported by
13177 some shells but not others; hence portable scripts should never use
13178 @samp{^} as the first character of a bracket pattern.
13180 Outside the C locale, patterns like @samp{[a-z]} are problematic since
13181 they may match characters that are not lower-case letters.
13183 @node Shell Substitutions
13184 @section Shell Substitutions
13185 @cindex Shell substitutions
13187 Contrary to a persistent urban legend, the Bourne shell does not
13188 systematically split variables and back-quoted expressions, in particular
13189 on the right-hand side of assignments and in the argument of @code{case}.
13190 For instance, the following code:
13192 @example
13193 case "$given_srcdir" in
13194 .)  top_srcdir="`echo "$dots" | sed 's|/$||'`" ;;
13195 *)  top_srcdir="$dots$given_srcdir" ;;
13196 esac
13197 @end example
13199 @noindent
13200 is more readable when written as:
13202 @example
13203 case $given_srcdir in
13204 .)  top_srcdir=`echo "$dots" | sed 's|/$||'` ;;
13205 *)  top_srcdir=$dots$given_srcdir ;;
13206 esac
13207 @end example
13209 @noindent
13210 and in fact it is even @emph{more} portable: in the first case of the
13211 first attempt, the computation of @code{top_srcdir} is not portable,
13212 since not all shells properly understand @code{"`@dots{}"@dots{}"@dots{}`"}.
13213 Worse yet, not all shells understand @code{"`@dots{}\"@dots{}\"@dots{}`"}
13214 the same way.  There is just no portable way to use double-quoted
13215 strings inside double-quoted back-quoted expressions (pfew!).
13217 @table @code
13218 @item $@@
13219 @cindex @samp{"$@@"}
13220 One of the most famous shell-portability issues is related to
13221 @samp{"$@@"}.  When there are no positional arguments, Posix says
13222 that @samp{"$@@"} is supposed to be equivalent to nothing, but the
13223 original Unix version 7 Bourne shell treated it as equivalent to
13224 @samp{""} instead, and this behavior survives in later implementations
13225 like Digital Unix 5.0.
13227 The traditional way to work around this portability problem is to use
13228 @samp{$@{1+"$@@"@}}.  Unfortunately this method does not work with
13229 Zsh (3.x and 4.x), which is used on Mac OS X@.  When emulating
13230 the Bourne shell, Zsh performs word splitting on @samp{$@{1+"$@@"@}}:
13232 @example
13233 zsh $ @kbd{emulate sh}
13234 zsh $ @kbd{for i in "$@@"; do echo $i; done}
13235 Hello World
13237 zsh $ @kbd{for i in $@{1+"$@@"@}; do echo $i; done}
13238 Hello
13239 World
13241 @end example
13243 @noindent
13244 Zsh handles plain @samp{"$@@"} properly, but we can't use plain
13245 @samp{"$@@"} because of the portability problems mentioned above.
13246 One workaround relies on Zsh's ``global aliases'' to convert
13247 @samp{$@{1+"$@@"@}} into @samp{"$@@"} by itself:
13249 @example
13250 test "$@{ZSH_VERSION+set@}" = set && alias -g '$@{1+"$@@"@}'='"$@@"'
13251 @end example
13253 Zsh only recognizes this alias when a shell word matches it exactly;
13254 @samp{"foo"$@{1+"$@@"@}} remains subject to word splitting.  Since this
13255 case always yields at least one shell word, use plain @samp{"$@@"}.
13257 A more conservative workaround is to avoid @samp{"$@@"} if it is
13258 possible that there may be no positional arguments.  For example,
13259 instead of:
13261 @example
13262 cat conftest.c "$@@"
13263 @end example
13265 you can use this instead:
13267 @example
13268 case $# in
13269 0) cat conftest.c;;
13270 *) cat conftest.c "$@@";;
13271 esac
13272 @end example
13274 Autoconf macros often use the @command{set} command to update
13275 @samp{$@@}, so if you are writing shell code intended for
13276 @command{configure} you should not assume that the value of @samp{$@@}
13277 persists for any length of time.
13280 @item $@{10@}
13281 @cindex positional parameters
13282 The 10th, 11th, @dots{} positional parameters can be accessed only after
13283 a @code{shift}.  The 7th Edition shell reported an error if given
13284 @code{$@{10@}}, and
13285 Solaris 10 @command{/bin/sh} still acts that way:
13287 @example
13288 $ @kbd{set 1 2 3 4 5 6 7 8 9 10}
13289 $ @kbd{echo $@{10@}}
13290 bad substitution
13291 @end example
13293 @item $@{@var{var}:-@var{value}@}
13294 @c Info cannot handle `:' in index entries.
13295 @c @cindex $@{@var{var}:-@var{value}@}
13296 Old @acronym{BSD} shells, including the Ultrix @code{sh}, don't accept the
13297 colon for any shell substitution, and complain and die.
13298 Similarly for $@{@var{var}:=@var{value}@}, $@{@var{var}:?@var{value}@}, etc.
13300 @item $@{@var{var}=@var{literal}@}
13301 @cindex $@{@var{var}=@var{literal}@}
13302 Be sure to quote:
13304 @example
13305 : $@{var='Some words'@}
13306 @end example
13308 @noindent
13309 otherwise some shells, such as on Digital Unix V 5.0, die because
13310 of a ``bad substitution''.
13312 @sp 1
13314 Solaris @command{/bin/sh} has a frightening bug in its interpretation
13315 of this.  Imagine you need set a variable to a string containing
13316 @samp{@}}.  This @samp{@}} character confuses Solaris @command{/bin/sh}
13317 when the affected variable was already set.  This bug can be exercised
13318 by running:
13320 @example
13321 $ @kbd{unset foo}
13322 $ @kbd{foo=$@{foo='@}'@}}
13323 $ @kbd{echo $foo}
13325 $ @kbd{foo=$@{foo='@}'   # no error; this hints to what the bug is}
13326 $ @kbd{echo $foo}
13328 $ @kbd{foo=$@{foo='@}'@}}
13329 $ @kbd{echo $foo}
13330 @}@}
13331  ^ ugh!
13332 @end example
13334 It seems that @samp{@}} is interpreted as matching @samp{$@{}, even
13335 though it is enclosed in single quotes.  The problem doesn't happen
13336 using double quotes.
13338 @item $@{@var{var}=@var{expanded-value}@}
13339 @cindex $@{@var{var}=@var{expanded-value}@}
13340 On Ultrix,
13341 running
13343 @example
13344 default="yu,yaa"
13345 : $@{var="$default"@}
13346 @end example
13348 @noindent
13349 sets @var{var} to @samp{M-yM-uM-,M-yM-aM-a}, i.e., the 8th bit of
13350 each char is set.  You don't observe the phenomenon using a simple
13351 @samp{echo $var} since apparently the shell resets the 8th bit when it
13352 expands $var.  Here are two means to make this shell confess its sins:
13354 @example
13355 $ @kbd{cat -v <<EOF
13356 $var
13357 EOF}
13358 @end example
13360 @noindent
13363 @example
13364 $ @kbd{set | grep '^var=' | cat -v}
13365 @end example
13367 One classic incarnation of this bug is:
13369 @example
13370 default="a b c"
13371 : $@{list="$default"@}
13372 for c in $list; do
13373   echo $c
13374 done
13375 @end example
13377 @noindent
13378 You'll get @samp{a b c} on a single line.  Why?  Because there are no
13379 spaces in @samp{$list}: there are @samp{M- }, i.e., spaces with the 8th
13380 bit set, hence no IFS splitting is performed!!!
13382 One piece of good news is that Ultrix works fine with @samp{:
13383 $@{list=$default@}}; i.e., if you @emph{don't} quote.  The bad news is
13384 then that @acronym{QNX} 4.25 then sets @var{list} to the @emph{last} item of
13385 @var{default}!
13387 The portable way out consists in using a double assignment, to switch
13388 the 8th bit twice on Ultrix:
13390 @example
13391 list=$@{list="$default"@}
13392 @end example
13394 @noindent
13395 @dots{}but beware of the @samp{@}} bug from Solaris (see above).  For safety,
13396 use:
13398 @example
13399 test "$@{var+set@}" = set || var=@var{@{value@}}
13400 @end example
13402 @item $@{#@var{var}@}
13403 @itemx $@{@var{var}%@var{word}@}
13404 @itemx $@{@var{var}%%@var{word}@}
13405 @itemx $@{@var{var}#@var{word}@}
13406 @itemx $@{@var{var}##@var{word}@}
13407 @cindex $@{#@var{var}@}
13408 @cindex $@{@var{var}%@var{word}@}
13409 @cindex $@{@var{var}%%@var{word}@}
13410 @cindex $@{@var{var}#@var{word}@}
13411 @cindex $@{@var{var}##@var{word}@}
13412 Posix requires support for these usages, but they do not work with many
13413 traditional shells, e.g., Solaris 10 @command{/bin/sh}.
13415 Also, @command{pdksh} 5.2.14 mishandles some @var{word} forms.  For
13416 example if @samp{$1} is @samp{a/b} and @samp{$2} is @samp{a}, then
13417 @samp{$@{1#$2@}} should yield @samp{/b}, but with @command{pdksh} it
13418 yields the empty string.
13421 @item `@var{commands}`
13422 @cindex `@var{commands}`
13423 @cindex Command Substitution
13424 Posix requires shells to trim all trailing newlines from command
13425 output before substituting it, so assignments like
13426 @samp{dir=`echo "$file" | tr a A`} do not work as expected if
13427 @samp{$file} ends in a newline.
13429 While in general it makes no sense, do not substitute a single builtin
13430 with side effects, because Ash 0.2, trying to optimize, does not fork a
13431 subshell to perform the command.
13433 For instance, if you wanted to check that @command{cd} is silent, do not
13434 use @samp{test -z "`cd /`"} because the following can happen:
13436 @example
13437 $ @kbd{pwd}
13438 /tmp
13439 $ @kbd{test -z "`cd /`" && pwd}
13441 @end example
13443 @noindent
13444 The result of @samp{foo=`exit 1`} is left as an exercise to the reader.
13446 The MSYS shell leaves a stray byte in the expansion of a double-quoted
13447 command substitution of a native program, if the end of the substitution
13448 is not aligned with the end of the double quote.  This may be worked
13449 around by inserting another pair of quotes:
13451 @example
13452 $ @kbd{echo "`printf 'foo\r\n'` bar" > broken}
13453 $ @kbd{echo "`printf 'foo\r\n'`"" bar" | cmp - broken}
13454 - broken differ: char 4, line 1
13455 @end example
13458 @item $(@var{commands})
13459 @cindex $(@var{commands})
13460 This construct is meant to replace @samp{`@var{commands}`},
13461 and it has most of the problems listed under @code{`@var{commands}`}.
13463 This construct can be
13464 nested while this is impossible to do portably with back quotes.
13465 Unfortunately it is not yet universally supported.  Most notably, even recent
13466 releases of Solaris don't support it:
13468 @example
13469 $ @kbd{showrev -c /bin/sh | grep version}
13470 Command version: SunOS 5.10 Generic 121005-03 Oct 2006
13471 $ @kbd{echo $(echo blah)}
13472 syntax error: `(' unexpected
13473 @end example
13475 @noindent
13476 nor does @sc{irix} 6.5's Bourne shell:
13477 @example
13478 $ @kbd{uname -a}
13479 IRIX firebird-image 6.5 07151432 IP22
13480 $ @kbd{echo $(echo blah)}
13481 $(echo blah)
13482 @end example
13484 If you do use @samp{$(@var{commands})}, make sure that the commands
13485 do not start with a parenthesis, as that would cause confusion with
13486 a different notation @samp{$((@var{expression}))} that in modern
13487 shells is an arithmetic expression not a command.  To avoid the
13488 confusion, insert a space between the two opening parentheses.
13490 Avoid @var{commands} that contain unbalanced parentheses in
13491 here-documents, comments, or case statement patterns, as many shells
13492 mishandle them.  For example, Bash 3.1, @samp{ksh88}, @command{pdksh}
13493 5.2.14, and Zsh 4.2.6 all mishandle the following valid command:
13495 @example
13496 echo $(case x in x) echo hello;; esac)
13497 @end example
13500 @item $((@var{expression}))
13501 @cindex $((@var{expression}))
13502 Arithmetic expansion is not portable as some shells (most
13503 notably Solaris 10 @command{/bin/sh}) don't support it.
13505 Among shells that do support @samp{$(( ))}, not all of them obey the
13506 Posix rule that octal and hexadecimal constants must be recognized:
13508 @example
13509 $ @kbd{bash -c 'echo $(( 010 + 0x10 ))'}
13511 $ @kbd{zsh -c 'echo $(( 010 + 0x10 ))'}
13513 $ @kbd{zsh -c 'emulate sh; echo $(( 010 + 0x10 ))'}
13515 $ @kbd{pdksh -c 'echo $(( 010 + 0x10 ))'}
13516 pdksh:  010 + 0x10 : bad number `0x10'
13517 $ @kbd{pdksh -c 'echo $(( 010 ))'}
13519 @end example
13521 When it is available, using arithmetic expansion provides a noticeable
13522 speedup in script execution; but testing for support requires
13523 @command{eval} to avoid syntax errors.  If shell function support has
13524 also been detected, then this construct can be used to assign @samp{foo}
13525 to an arithmetic result, provided all numeric arguments are provided in
13526 decimal and without a leading zero:
13528 @example
13529 if ( eval 'test $(( 1 + 1 )) = 2' ) 2>/dev/null; then
13530   eval 'func_arith ()
13531   @{
13532     func_arith_result=$(( $* ))
13533   @}'
13534 else
13535   func_arith ()
13536   @{
13537     func_arith_result=`expr "$@@"`
13538   @}
13540 func_arith 1 + 1
13541 foo=$func_arith_result
13542 @end example
13545 @item ^
13546 @cindex ^ quoting
13547 Always quote @samp{^}, otherwise traditional shells such as
13548 @command{/bin/sh} on Solaris 10 treat this like @samp{|}.
13550 @end table
13553 @node Assignments
13554 @section Assignments
13555 @cindex Shell assignments
13557 When setting several variables in a row, be aware that the order of the
13558 evaluation is undefined.  For instance @samp{foo=1 foo=2; echo $foo}
13559 gives @samp{1} with Solaris @command{/bin/sh}, but @samp{2} with Bash.
13560 You must use
13561 @samp{;} to enforce the order: @samp{foo=1; foo=2; echo $foo}.
13563 Don't rely on the following to find @file{subdir/program}:
13565 @example
13566 PATH=subdir$PATH_SEPARATOR$PATH program
13567 @end example
13569 @noindent
13570 as this does not work with Zsh 3.0.6.  Use something like this
13571 instead:
13573 @example
13574 (PATH=subdir$PATH_SEPARATOR$PATH; export PATH; exec program)
13575 @end example
13577 Don't rely on the exit status of an assignment: Ash 0.2 does not change
13578 the status and propagates that of the last statement:
13580 @example
13581 $ @kbd{false || foo=bar; echo $?}
13583 $ @kbd{false || foo=`:`; echo $?}
13585 @end example
13587 @noindent
13588 and to make things even worse, @acronym{QNX} 4.25 just sets the exit status
13589 to 0 in any case:
13591 @example
13592 $ @kbd{foo=`exit 1`; echo $?}
13594 @end example
13596 To assign default values, follow this algorithm:
13598 @enumerate
13599 @item
13600 If the default value is a literal and does not contain any closing
13601 brace, use:
13603 @example
13604 : $@{var='my literal'@}
13605 @end example
13607 @item
13608 If the default value contains no closing brace, has to be expanded, and
13609 the variable being initialized is not intended to be IFS-split
13610 (i.e., it's not a list), then use:
13612 @example
13613 : $@{var="$default"@}
13614 @end example
13616 @item
13617 If the default value contains no closing brace, has to be expanded, and
13618 the variable being initialized is intended to be IFS-split (i.e., it's a list),
13619 then use:
13621 @example
13622 var=$@{var="$default"@}
13623 @end example
13625 @item
13626 If the default value contains a closing brace, then use:
13628 @example
13629 test "$@{var+set@}" = set || var="has a '@}'"
13630 @end example
13631 @end enumerate
13633 In most cases @samp{var=$@{var="$default"@}} is fine, but in case of
13634 doubt, just use the last form.  @xref{Shell Substitutions}, items
13635 @samp{$@{@var{var}:-@var{value}@}} and @samp{$@{@var{var}=@var{value}@}}
13636 for the rationale.
13638 @node Parentheses
13639 @section Parentheses in Shell Scripts
13640 @cindex Shell parentheses
13642 Beware of two opening parentheses in a row, as many shell
13643 implementations treat them specially.  Posix requires that the command
13644 @samp{((cat))} must behave like @samp{(cat)}, but many shells, including
13645 Bash and the Korn shell, treat @samp{((cat))} as an arithmetic
13646 expression equivalent to @samp{let "cat"}, and may or may not report an
13647 error when they detect that @samp{cat} is not a number.  As another
13648 example, @samp{pdksh} 5.2.14 misparses the following code:
13650 @example
13651 if ((true) || false); then
13652   echo ok
13654 @end example
13656 @noindent
13657 To work around this problem, insert a space between the two opening
13658 parentheses.  There is a similar problem and workaround with
13659 @samp{$((}; see @ref{Shell Substitutions}.
13661 @node Slashes
13662 @section Slashes in Shell Scripts
13663 @cindex Shell slashes
13665 Unpatched Tru64 5.1 @command{sh} omits the last slash of command-line
13666 arguments that contain two trailing slashes:
13668 @example
13669 $ @kbd{echo / // /// //// .// //.}
13670 / / // /// ./ //.
13671 $ @kbd{x=//}
13672 $ @kbd{eval "echo \$x"}
13674 $ @kbd{set -x}
13675 $ @kbd{echo abc | tr -t ab //}
13676 + echo abc
13677 + tr -t ab /
13679 @end example
13681 Unpatched Tru64 4.0 @command{sh} adds a slash after @samp{"$var"} if the
13682 variable is empty and the second double-quote is followed by a word that
13683 begins and ends with slash:
13685 @example
13686 $ @kbd{sh -xc 'p=; echo "$p"/ouch/'}
13688 + echo //ouch/
13689 //ouch/
13690 @end example
13692 However, our understanding is that patches are available, so perhaps
13693 it's not worth worrying about working around these horrendous bugs.
13695 @node Special Shell Variables
13696 @section Special Shell Variables
13697 @cindex Shell variables
13698 @cindex Special shell variables
13700 Some shell variables should not be used, since they can have a deep
13701 influence on the behavior of the shell.  In order to recover a sane
13702 behavior from the shell, some variables should be unset, but
13703 @command{unset} is not portable (@pxref{Limitations of Builtins}) and a
13704 fallback value is needed.
13706 As a general rule, shell variable names containing a lower-case letter
13707 are safe; you can define and use these variables without worrying about
13708 their effect on the underlying system, and without worrying about
13709 whether the shell changes them unexpectedly.  (The exception is the
13710 shell variable @code{status}, as described below.)
13712 Here is a list of names that are known to cause trouble.  This list is
13713 not exhaustive, but you should be safe if you avoid the name
13714 @code{status} and names containing only upper-case letters and
13715 underscores.
13717 @c Alphabetical order, case insensitive, `A' before `a'.
13718 @table @code
13719 @item _
13720 Many shells reserve @samp{$_} for various purposes, e.g., the name of
13721 the last command executed.
13723 @item BIN_SH
13724 @evindex BIN_SH
13725 In Tru64, if @env{BIN_SH} is set to @code{xpg4}, subsidiary invocations of
13726 the standard shell conform to Posix.
13728 @item CDPATH
13729 @evindex CDPATH
13730 When this variable is set it specifies a list of directories to search
13731 when invoking @code{cd} with a relative file name that did not start
13732 with @samp{./} or @samp{../}.  Posix
13733 1003.1-2001 says that if a nonempty directory name from @env{CDPATH}
13734 is used successfully, @code{cd} prints the resulting absolute
13735 file name.  Unfortunately this output can break idioms like
13736 @samp{abs=`cd src && pwd`} because @code{abs} receives the name twice.
13737 Also, many shells do not conform to this part of Posix; for
13738 example, @command{zsh} prints the result only if a directory name
13739 other than @file{.} was chosen from @env{CDPATH}.
13741 In practice the shells that have this problem also support
13742 @command{unset}, so you can work around the problem as follows:
13744 @example
13745 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
13746 @end example
13748 You can also avoid output by ensuring that your directory name is
13749 absolute or anchored at @samp{./}, as in @samp{abs=`cd ./src && pwd`}.
13751 Autoconf-generated scripts automatically unset @env{CDPATH} if
13752 possible, so you need not worry about this problem in those scripts.
13754 @item DUALCASE
13755 @evindex DUALCASE
13756 In the MKS shell, case statements and file name generation are
13757 case-insensitive unless @env{DUALCASE} is nonzero.
13758 Autoconf-generated scripts export this variable when they start up.
13760 @item ENV
13761 @itemx MAIL
13762 @itemx MAILPATH
13763 @itemx PS1
13764 @itemx PS2
13765 @itemx PS4
13766 @evindex ENV
13767 @evindex MAIL
13768 @evindex MAILPATH
13769 @evindex PS1
13770 @evindex PS2
13771 @evindex PS4
13772 These variables should not matter for shell scripts, since they are
13773 supposed to affect only interactive shells.  However, at least one
13774 shell (the pre-3.0 @sc{uwin} Korn shell) gets confused about
13775 whether it is interactive, which means that (for example) a @env{PS1}
13776 with a side effect can unexpectedly modify @samp{$?}.  To work around
13777 this bug, Autoconf-generated scripts do something like this:
13779 @example
13780 (unset ENV) >/dev/null 2>&1 && unset ENV MAIL MAILPATH
13781 PS1='$ '
13782 PS2='> '
13783 PS4='+ '
13784 @end example
13786 @item FPATH
13787 The Korn shell uses @env{FPATH} to find shell functions, so avoid
13788 @env{FPATH} in portable scripts.  @env{FPATH} is consulted after
13789 @env{PATH}, but you still need to be wary of tests that use @env{PATH}
13790 to find whether a command exists, since they might report the wrong
13791 result if @env{FPATH} is also set.
13793 @item IFS
13794 @evindex IFS
13795 Long ago, shell scripts inherited @env{IFS} from the environment,
13796 but this caused many problems so modern shells ignore any environment
13797 settings for @env{IFS}.
13799 Don't set the first character of @code{IFS} to backslash.  Indeed,
13800 Bourne shells use the first character (backslash) when joining the
13801 components in @samp{"$@@"} and some shells then reinterpret (!)@: the
13802 backslash escapes, so you can end up with backspace and other strange
13803 characters.
13805 The proper value for @code{IFS} (in regular code, not when performing
13806 splits) is @samp{@key{SPC}@key{TAB}@key{RET}}.  The first character is
13807 especially important, as it is used to join the arguments in @samp{$*};
13808 however, note that traditional shells, but also bash-2.04, fail to adhere
13809 to this and join with a space anyway.
13811 @item LANG
13812 @itemx LC_ALL
13813 @itemx LC_COLLATE
13814 @itemx LC_CTYPE
13815 @itemx LC_MESSAGES
13816 @itemx LC_MONETARY
13817 @itemx LC_NUMERIC
13818 @itemx LC_TIME
13819 @evindex LANG
13820 @evindex LC_ALL
13821 @evindex LC_COLLATE
13822 @evindex LC_CTYPE
13823 @evindex LC_MESSAGES
13824 @evindex LC_MONETARY
13825 @evindex LC_NUMERIC
13826 @evindex LC_TIME
13828 Autoconf-generated scripts normally set all these variables to
13829 @samp{C} because so much configuration code assumes the C locale and
13830 Posix requires that locale environment variables be set to
13831 @samp{C} if the C locale is desired.  However, some older, nonstandard
13832 systems (notably @acronym{SCO}) break if locale environment variables
13833 are set to @samp{C}, so when running on these systems
13834 Autoconf-generated scripts unset the variables instead.
13836 @item LANGUAGE
13837 @evindex LANGUAGE
13839 @env{LANGUAGE} is not specified by Posix, but it is a @acronym{GNU}
13840 extension that overrides @env{LC_ALL} in some cases, so
13841 Autoconf-generated scripts set it too.
13843 @item LC_ADDRESS
13844 @itemx LC_IDENTIFICATION
13845 @itemx LC_MEASUREMENT
13846 @itemx LC_NAME
13847 @itemx LC_PAPER
13848 @itemx LC_TELEPHONE
13849 @evindex LC_ADDRESS
13850 @evindex LC_IDENTIFICATION
13851 @evindex LC_MEASUREMENT
13852 @evindex LC_NAME
13853 @evindex LC_PAPER
13854 @evindex LC_TELEPHONE
13856 These locale environment variables are @acronym{GNU} extensions.  They
13857 are treated like their Posix brethren (@env{LC_COLLATE},
13858 etc.)@: as described above.
13860 @item LINENO
13861 Most modern shells provide the current line number in @code{LINENO}.
13862 Its value is the line number of the beginning of the current command.
13863 Autoconf attempts to execute @command{configure} with a shell that
13864 supports @code{LINENO}.
13865 If no such shell is available, it attempts to implement @code{LINENO}
13866 with a Sed prepass that replaces each instance of the string
13867 @code{$LINENO} (not followed by an alphanumeric character) with the
13868 line's number.
13870 You should not rely on @code{LINENO} within @command{eval}, as the
13871 behavior differs in practice.  Also, the possibility of the Sed
13872 prepass means that you should not rely on @code{$LINENO} when quoted,
13873 when in here-documents, or when in long commands that cross line
13874 boundaries.  Subshells should be OK, though.  In the following
13875 example, lines 1, 6, and 9 are portable, but the other instances of
13876 @code{LINENO} are not:
13878 @example
13879 @group
13880 $ @kbd{cat lineno}
13881 echo 1. $LINENO
13882 cat <<EOF
13883 3. $LINENO
13884 4. $LINENO
13886 ( echo 6. $LINENO )
13887 eval 'echo 7. $LINENO'
13888 echo 8. '$LINENO'
13889 echo 9. $LINENO '
13890 10.' $LINENO
13891 @end group
13892 @group
13893 $ @kbd{bash-2.05 lineno}
13894 1. 1
13895 3. 2
13896 4. 2
13897 6. 6
13898 7. 1
13899 8. $LINENO
13900 9. 9
13901 10. 9
13902 @end group
13903 @group
13904 $ @kbd{zsh-3.0.6 lineno}
13905 1. 1
13906 3. 2
13907 4. 2
13908 6. 6
13909 7. 7
13910 8. $LINENO
13911 9. 9
13912 10. 9
13913 @end group
13914 @group
13915 $ @kbd{pdksh-5.2.14 lineno}
13916 1. 1
13917 3. 2
13918 4. 2
13919 6. 6
13920 7. 0
13921 8. $LINENO
13922 9. 9
13923 10. 9
13924 @end group
13925 @group
13926 $ @kbd{sed '=' <lineno |}
13927 > @kbd{  sed '}
13928 > @kbd{    N}
13929 > @kbd{    s,$,-,}
13930 > @kbd{    t loop}
13931 > @kbd{    :loop}
13932 > @kbd{    s,^\([0-9]*\)\(.*\)[$]LINENO\([^a-zA-Z0-9_]\),\1\2\1\3,}
13933 > @kbd{    t loop}
13934 > @kbd{    s,-$,,}
13935 > @kbd{    s,^[0-9]*\n,,}
13936 > @kbd{  ' |}
13937 > @kbd{  sh}
13938 1. 1
13939 3. 3
13940 4. 4
13941 6. 6
13942 7. 7
13943 8. 8
13944 9. 9
13945 10. 10
13946 @end group
13947 @end example
13949 @item NULLCMD
13950 @evindex NULLCMD
13951 When executing the command @samp{>foo}, @command{zsh} executes
13952 @samp{$NULLCMD >foo} unless it is operating in Bourne shell
13953 compatibility mode and the @command{zsh} version is newer
13954 than 3.1.6-dev-18.  If you are using an older @command{zsh}
13955 and forget to set @env{NULLCMD},
13956 your script might be suspended waiting for data on its standard input.
13958 @item PATH_SEPARATOR
13959 @evindex PATH_SEPARATOR
13960 On @acronym{DJGPP} systems, the @env{PATH_SEPARATOR} environment
13961 variable can be set to either @samp{:} or @samp{;} to control the path
13962 separator Bash uses to set up certain environment variables (such as
13963 @env{PATH}).  You can set this variable to @samp{;} if you want
13964 @command{configure} to use @samp{;} as a separator; this might be useful
13965 if you plan to use non-Posix shells to execute files.  @xref{File System
13966 Conventions}, for more information about @code{PATH_SEPARATOR}.
13968 @item PWD
13969 @evindex PWD
13970 Posix 1003.1-2001 requires that @command{cd} and
13971 @command{pwd} must update the @env{PWD} environment variable to point
13972 to the logical name of the current directory, but traditional shells
13973 do not support this.  This can cause confusion if one shell instance
13974 maintains @env{PWD} but a subsidiary and different shell does not know
13975 about @env{PWD} and executes @command{cd}; in this case @env{PWD}
13976 points to the wrong directory.  Use @samp{`pwd`} rather than
13977 @samp{$PWD}.
13979 @item RANDOM
13980 Many shells provide @code{RANDOM}, a variable that returns a different
13981 integer each time it is used.  Most of the time, its value does not
13982 change when it is not used, but on @sc{irix} 6.5 the value changes all
13983 the time.  This can be observed by using @command{set}.  It is common
13984 practice to use @code{$RANDOM} as part of a file name, but code
13985 shouldn't rely on @code{$RANDOM} expanding to a nonempty string.
13987 @item status
13988 This variable is an alias to @samp{$?} for @code{zsh} (at least 3.1.6),
13989 hence read-only.  Do not use it.
13990 @end table
13992 @node Shell Functions
13993 @section Shell Functions
13994 @cindex Shell Functions
13996 Nowadays, it is difficult to find a shell that does not support
13997 shell functions at all.  However, some differences should be expected:
13999 Inside a shell function, you should not rely on the error status of a
14000 subshell if the last command of that subshell was @code{exit} or
14001 @code{trap}, as this triggers bugs in zsh 4.x; while Autoconf tries to
14002 find a shell that does not exhibit the bug, zsh might be the only shell
14003 present on the user's machine.
14005 Likewise, the state of @samp{$?} is not reliable when entering a shell
14006 function.  This has the effect that using a function as the first
14007 command in a @command{trap} handler can cause problems.
14009 @example
14010 $ @kbd{bash -c 'foo()@{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
14013 $ @kbd{ash -c 'foo()@{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
14016 @end example
14018 Shell variables and functions may share the same namespace, for example
14019 with Solaris 10 @command{/bin/sh}:
14021 @example
14022 $ @kbd{f () @{ :; @}; f=; f}
14023 f: not found
14024 @end example
14026 @noindent
14027 For this reason, Autotest uses the prefix @samp{at_func_} for its
14028 functions.
14030 Handling of positional parameters and shell options varies among shells.
14031 For example, Korn shells reset and restore trace output (@samp{set -x})
14032 and other options upon function entry and exit.  Inside a function,
14033 @acronym{IRIX} sh sets @samp{$0} to the function name.
14035 Some ancient Bourne shell variants with function support did not reset
14036 @samp{$@var{i}, @var{i} >= 0}, upon function exit, so effectively the
14037 arguments of the script were lost after the first function invocation.
14038 It is probably not worth worrying about these shells any more.
14040 With @acronym{AIX} sh, a @command{trap} on 0 installed in a shell function
14041 triggers at function exit rather than at script exit, see @xref{Limitations
14042 of Builtins}.
14044 @node Limitations of Builtins
14045 @section Limitations of Shell Builtins
14046 @cindex Shell builtins
14047 @cindex Limitations of shell builtins
14049 No, no, we are serious: some shells do have limitations!  :)
14051 You should always keep in mind that any builtin or command may support
14052 options, and therefore differ in behavior with arguments
14053 starting with a dash.  For instance, the innocent @samp{echo "$word"}
14054 can give unexpected results when @code{word} starts with a dash.  It is
14055 often possible to avoid this problem using @samp{echo "x$word"}, taking
14056 the @samp{x} into account later in the pipe.
14058 @table @asis
14059 @item @command{.}
14060 @c --------------
14061 @prindex @command{.}
14062 Use @command{.} only with regular files (use @samp{test -f}).  Bash
14063 2.03, for instance, chokes on @samp{. /dev/null}.  Remember that
14064 @command{.} uses @env{PATH} if its argument contains no slashes.  Also,
14065 some shells, including bash 3.2, implicitly append the current directory
14066 to this @env{PATH} search, even though Posix forbids it.  So if you want
14067 to use @command{.} on a file @file{foo} in the current directory, you
14068 must use @samp{. ./foo}.
14070 @item @command{!}
14071 @c --------------
14072 @prindex @command{!}
14073 The Unix version 7 shell did not support
14074 negating the exit status of commands with @command{!}, and this feature
14075 is still absent from some shells (e.g., Solaris @command{/bin/sh}).
14076 Other shells, such as FreeBSD @command{/bin/sh} or @command{ash}, have
14077 bugs when using @command{!}:
14079 @example
14080 $ @kbd{sh -c '! : | :'; echo $?}
14082 $ @kbd{ash -c '! : | :'; echo $?}
14084 $ @kbd{sh -c '! @{ :; @}'; echo $?}
14086 $ @kbd{ash -c '! @{ :; @}'; echo $?}
14087 @{: not found
14088 Syntax error: "@}" unexpected
14090 @end example
14092 Shell code like this:
14094 @example
14095 if ! cmp file1 file2 >/dev/null 2>&1; then
14096   echo files differ or trouble
14098 @end example
14100 is therefore not portable in practice.  Typically it is easy to rewrite
14101 such code, e.g.:
14103 @example
14104 cmp file1 file2 >/dev/null 2>&1 ||
14105   echo files differ or trouble
14106 @end example
14108 More generally, one can always rewrite @samp{! @var{command}} as:
14110 @example
14111 if @var{command}; then (exit 1); else :; fi
14112 @end example
14115 @item @command{@{...@}}
14116 @c --------------------
14117 @prindex @command{@{...@}}
14118 Bash 3.2 (and earlier versions) sometimes does not properly set
14119 @samp{$?} when failing to write redirected output of a compound command.
14120 This problem is most commonly observed with @samp{@{@dots{}@}}; it does
14121 not occur with @samp{(@dots{})}.  For example:
14123 @example
14124 $ @kbd{bash -c '@{ echo foo; @} >/bad; echo $?'}
14125 bash: line 1: /bad: Permission denied
14127 $ @kbd{bash -c 'while :; do echo; done >/bad; echo $?'}
14128 bash: line 1: /bad: Permission denied
14130 @end example
14132 To work around the bug, prepend @samp{:;}:
14134 @example
14135 $ @kbd{bash -c ':;@{ echo foo; @} >/bad; echo $?'}
14136 bash: line 1: /bad: Permission denied
14138 @end example
14141 @item @command{break}
14142 @c ------------------
14143 @prindex @command{break}
14144 The use of @samp{break 2} etc.@: is safe.
14147 @item @command{case}
14148 @c -----------------
14149 @prindex @command{case}
14150 You don't need to quote the argument; no splitting is performed.
14152 You don't need the final @samp{;;}, but you should use it.
14154 Posix requires support for @code{case} patterns with opening
14155 parentheses like this:
14157 @example
14158 case $file_name in
14159   (*.c) echo "C source code";;
14160 esac
14161 @end example
14163 @noindent
14164 but the @code{(} in this example is not portable to many Bourne
14165 shell implementations, which is a pity for those of us using tools that
14166 rely on balanced parentheses.  For instance, with Solaris
14167 @command{/bin/sh}:
14169 @example
14170 $ @kbd{case foo in (foo) echo foo;; esac}
14171 @error{}syntax error: `(' unexpected
14172 @end example
14174 @noindent
14175 The leading @samp{(} can be omitted safely.  In contexts where
14176 unbalanced parentheses cause other problems, such as when using a case
14177 statement as an argument to an Autoconf macro, you can also resort to
14178 creative shell comments to supply the balance:
14180 @example
14181 case $file_name in #(
14182   *.c) echo "C source code";;
14183 esac
14184 @end example
14186 Zsh handles pattern fragments derived from parameter expansions or
14187 command substitutions as though quoted:
14189 @example
14190 $ pat=\?; case aa in ?$pat) echo match;; esac
14191 $ pat=\?; case a? in ?$pat) echo match;; esac
14192 match
14193 @end example
14195 @noindent
14196 Because of a bug in its @code{fnmatch}, Bash fails to properly
14197 handle backslashes in character classes:
14199 @example
14200 bash-2.02$ @kbd{case /tmp in [/\\]*) echo OK;; esac}
14201 bash-2.02$
14202 @end example
14204 @noindent
14205 This is extremely unfortunate, since you are likely to use this code to
14206 handle Posix or @sc{ms-dos} absolute file names.  To work around this
14207 bug, always put the backslash first:
14209 @example
14210 bash-2.02$ @kbd{case '\TMP' in [\\/]*) echo OK;; esac}
14212 bash-2.02$ @kbd{case /tmp in [\\/]*) echo OK;; esac}
14214 @end example
14216 Many Bourne shells cannot handle closing brackets in character classes
14217 correctly.
14219 Some shells also have problems with backslash escaping in case you do not want
14220 to match the backslash: both a backslash and the escaped character match this
14221 pattern.  To work around this, specify the character class in a variable, so
14222 that quote removal does not apply afterwards, and the special characters don't
14223 have to be backslash-escaped:
14225 @example
14226 $ @kbd{case '\' in [\<]) echo OK;; esac}
14228 $ @kbd{scanset='[<]'; case '\' in $scanset) echo OK;; esac}
14230 @end example
14232 Even with this, Solaris @command{ksh} matches a backslash if the set
14233 contains any
14234 of the characters @samp{|}, @samp{&}, @samp{(}, or @samp{)}.
14236 Conversely, Tru64 @command{ksh} (circa 2003) erroneously always matches
14237 a closing parenthesis if not specified in a character class:
14239 @example
14240 $ @kbd{case foo in *\)*) echo fail ;; esac}
14241 fail
14242 $ @kbd{case foo in *')'*) echo fail ;; esac}
14243 fail
14244 @end example
14246 Some shells, such as Ash 0.3.8, are confused by an empty
14247 @code{case}/@code{esac}:
14249 @example
14250 ash-0.3.8 $ @kbd{case foo in esac;}
14251 @error{}Syntax error: ";" unexpected (expecting ")")
14252 @end example
14255 @item @command{cd}
14256 @c ---------------
14257 @prindex @command{cd}
14258 Posix 1003.1-2001 requires that @command{cd} must support
14259 the @option{-L} (``logical'') and @option{-P} (``physical'') options,
14260 with @option{-L} being the default.  However, traditional shells do
14261 not support these options, and their @command{cd} command has the
14262 @option{-P} behavior.
14264 Portable scripts should assume neither option is supported, and should
14265 assume neither behavior is the default.  This can be a bit tricky,
14266 since the Posix default behavior means that, for example,
14267 @samp{ls ..} and @samp{cd ..} may refer to different directories if
14268 the current logical directory is a symbolic link.  It is safe to use
14269 @command{cd @var{dir}} if @var{dir} contains no @file{..} components.
14270 Also, Autoconf-generated scripts check for this problem when computing
14271 variables like @code{ac_top_srcdir} (@pxref{Configuration Actions}),
14272 so it is safe to @command{cd} to these variables.
14274 See @xref{Special Shell Variables}, for portability problems involving
14275 @command{cd} and the @env{CDPATH} environment variable.
14276 Also please see the discussion of the @command{pwd} command.
14279 @item @command{echo}
14280 @c -----------------
14281 @prindex @command{echo}
14282 The simple @command{echo} is probably the most surprising source of
14283 portability troubles.  It is not possible to use @samp{echo} portably
14284 unless both options and escape sequences are omitted.  New applications
14285 which are not aiming at portability should use @samp{printf} instead of
14286 @samp{echo}.
14288 Don't expect any option.  @xref{Preset Output Variables}, @code{ECHO_N}
14289 etc.@: for a means to simulate @option{-n}.
14291 Do not use backslashes in the arguments, as there is no consensus on
14292 their handling.  For @samp{echo '\n' | wc -l}, the @command{sh} of
14293 Solaris outputs 2, but Bash and Zsh (in @command{sh} emulation mode) output 1.
14294 The problem is truly @command{echo}: all the shells
14295 understand @samp{'\n'} as the string composed of a backslash and an
14296 @samp{n}.
14298 Because of these problems, do not pass a string containing arbitrary
14299 characters to @command{echo}.  For example, @samp{echo "$foo"} is safe
14300 if you know that @var{foo}'s value cannot contain backslashes and cannot
14301 start with @samp{-}, but otherwise you should use a here-document like
14302 this:
14304 @example
14305 cat <<EOF
14306 $foo
14308 @end example
14311 @item @command{eval}
14312 @c -----------------
14313 @prindex @command{eval}
14314 The @command{eval} command is useful in limited circumstances, e.g.,
14315 using commands like @samp{eval table_$key=\$value} and @samp{eval
14316 value=table_$key} to simulate a hash table when the key is known to be
14317 alphanumeric.  However, @command{eval} is tricky to use on arbitrary
14318 arguments, even when it is implemented correctly.
14320 It is obviously unwise to use @samp{eval $cmd} if the string value of
14321 @samp{cmd} was derived from an untrustworthy source.  But even if the
14322 string value is valid, @samp{eval $cmd} might not work as intended,
14323 since it causes field splitting and file name expansion to occur twice,
14324 once for the @command{eval} and once for the command itself.  It is
14325 therefore safer to use @samp{eval "$cmd"}.  For example, if @var{cmd}
14326 has the value @samp{cat test?.c}, @samp{eval $cmd} might expand to the
14327 equivalent of @samp{cat test;.c} if there happens to be a file named
14328 @file{test;.c} in the current directory; and this in turn
14329 mistakenly attempts to invoke @command{cat} on the file @file{test} and
14330 then execute the command @command{.c}.  To avoid this problem, use
14331 @samp{eval "$cmd"} rather than @samp{eval $cmd}.
14333 However, suppose that you want to output the text of the evaluated
14334 command just before executing it.  Assuming the previous example,
14335 @samp{echo "Executing: $cmd"} outputs @samp{Executing: cat test?.c}, but
14336 this output doesn't show the user that @samp{test;.c} is the actual name
14337 of the copied file.  Conversely, @samp{eval "echo Executing: $cmd"}
14338 works on this example, but it fails with @samp{cmd='cat foo >bar'},
14339 since it mistakenly replaces the contents of @file{bar} by the
14340 string @samp{cat foo}.  No simple, general, and portable solution to
14341 this problem is known.
14343 You should also be wary of common bugs in @command{eval} implementations.
14344 In some shell implementations (e.g., older @command{ash}, Open@acronym{BSD} 3.8
14345 @command{sh}, @command{pdksh} v5.2.14 99/07/13.2, and @command{zsh}
14346 4.2.5), the arguments of @samp{eval} are evaluated in a context where
14347 @samp{$?} is 0, so they exhibit behavior like this:
14349 @example
14350 $ @kbd{false; eval 'echo $?'}
14352 @end example
14354 The correct behavior here is to output a nonzero value,
14355 but portable scripts should not rely on this.
14357 You should not rely on @code{LINENO} within @command{eval}.
14358 @xref{Special Shell Variables}.
14360 @item @command{exec}
14361 @c -----------------
14362 @prindex @command{exec}
14363 Posix describes several categories of shell built-ins.  Special
14364 built-ins (such as @command{exit}) must impact the environment of the
14365 current shell, and need not be available through @command{exec}.  All
14366 other built-ins are regular, and must not propagate variable assignments
14367 to the environment of the current shell.  However, the group of regular
14368 built-ins is further distinguished by commands that do not require a
14369 @env{PATH} search (such as @command{cd}), in contrast to built-ins that
14370 are offered as a more efficient version of something that must still be
14371 found in a @env{PATH} search (such as @command{echo}).  Posix is not
14372 clear on whether @command{exec} must work with the list of 17 utilities
14373 that are invoked without a @env{PATH} search, and many platforms lack an
14374 executable for some of those built-ins:
14376 @example
14377 $ @kbd{sh -c 'exec cd /tmp'}
14378 sh: line 0: exec: cd: not found
14379 @end example
14381 All other built-ins that provide utilities specified by Posix must have
14382 a counterpart executable that exists on @env{PATH}, although Posix
14383 allows @command{exec} to use the built-in instead of the executable.
14384 For example, contrast @command{bash} 3.2 and @command{pdksh} 5.2.14:
14386 @example
14387 $ @kbd{bash -c 'pwd --version' | head -n1}
14388 bash: line 0: pwd: --: invalid option
14389 pwd: usage: pwd [-LP]
14390 $ @kbd{bash -c 'exec pwd --version' | head -n1}
14391 pwd (GNU coreutils) 6.10
14392 $ @kbd{pdksh -c 'exec pwd --version' | head -n1}
14393 pdksh: pwd: --: unknown option
14394 @end example
14396 When it is desired to avoid a regular shell built-in, the workaround is
14397 to use some other forwarding command, such as @command{env} or
14398 @command{nice}, that will ensure a path search:
14400 @example
14401 $ @kbd{pdksh -c 'exec true --version' | head -n1}
14402 $ @kbd{pdksh -c 'nice true --version' | head -n1}
14403 true (GNU coreutils) 6.10
14404 $ @kbd{pdksh -c 'env true --version' | head -n1}
14405 true (GNU coreutils) 6.10
14406 @end example
14408 @item @command{exit}
14409 @c -----------------
14410 @prindex @command{exit}
14411 The default value of @command{exit} is supposed to be @code{$?};
14412 unfortunately, some shells, such as the @acronym{DJGPP} port of Bash 2.04, just
14413 perform @samp{exit 0}.
14415 @example
14416 bash-2.04$ @kbd{foo=`exit 1` || echo fail}
14417 fail
14418 bash-2.04$ @kbd{foo=`(exit 1)` || echo fail}
14419 fail
14420 bash-2.04$ @kbd{foo=`(exit 1); exit` || echo fail}
14421 bash-2.04$
14422 @end example
14424 Using @samp{exit $?} restores the expected behavior.
14426 Some shell scripts, such as those generated by @command{autoconf}, use a
14427 trap to clean up before exiting.  If the last shell command exited with
14428 nonzero status, the trap also exits with nonzero status so that the
14429 invoker can tell that an error occurred.
14431 Unfortunately, in some shells, such as Solaris @command{/bin/sh}, an exit
14432 trap ignores the @code{exit} command's argument.  In these shells, a trap
14433 cannot determine whether it was invoked by plain @code{exit} or by
14434 @code{exit 1}.  Instead of calling @code{exit} directly, use the
14435 @code{AC_MSG_ERROR} macro that has a workaround for this problem.
14438 @item @command{export}
14439 @c -------------------
14440 @prindex @command{export}
14441 The builtin @command{export} dubs a shell variable @dfn{environment
14442 variable}.  Each update of exported variables corresponds to an update
14443 of the environment variables.  Conversely, each environment variable
14444 received by the shell when it is launched should be imported as a shell
14445 variable marked as exported.
14447 Alas, many shells, such as Solaris @command{/bin/sh},
14448 @sc{irix} 6.3, @sc{irix} 5.2,
14449 @acronym{AIX} 4.1.5, and Digital Unix 4.0, forget to
14450 @command{export} the environment variables they receive.  As a result,
14451 two variables coexist: the environment variable and the shell
14452 variable.  The following code demonstrates this failure:
14454 @example
14455 #!/bin/sh
14456 echo $FOO
14457 FOO=bar
14458 echo $FOO
14459 exec /bin/sh $0
14460 @end example
14462 @noindent
14463 when run with @samp{FOO=foo} in the environment, these shells print
14464 alternately @samp{foo} and @samp{bar}, although they should print only
14465 @samp{foo} and then a sequence of @samp{bar}s.
14467 Therefore you should @command{export} again each environment variable
14468 that you update; the export can occur before or after the assignment.
14470 Posix is not clear on whether the @command{export} of an undefined
14471 variable causes the variable to be defined with the value of an empty
14472 string, or merely marks any future definition of a variable by that name
14473 for export.  Various shells behave differently in this regard:
14475 @example
14476 $ @kbd{sh -c 'export foo; env | grep foo'}
14477 $ @kbd{ash -c 'export foo; env | grep foo'}
14478 foo=
14479 @end example
14481 @item @command{false}
14482 @c ------------------
14483 @prindex @command{false}
14484 Don't expect @command{false} to exit with status 1: in native
14485 Solaris @file{/bin/false} exits with status 255.
14488 @item @command{for}
14489 @c ----------------
14490 @prindex @command{for}
14491 To loop over positional arguments, use:
14493 @example
14494 for arg
14496   echo "$arg"
14497 done
14498 @end example
14500 @noindent
14501 You may @emph{not} leave the @code{do} on the same line as @code{for},
14502 since some shells improperly grok:
14504 @example
14505 for arg; do
14506   echo "$arg"
14507 done
14508 @end example
14510 If you want to explicitly refer to the positional arguments, given the
14511 @samp{$@@} bug (@pxref{Shell Substitutions}), use:
14513 @example
14514 for arg in $@{1+"$@@"@}; do
14515   echo "$arg"
14516 done
14517 @end example
14519 @noindent
14520 But keep in mind that Zsh, even in Bourne shell emulation mode, performs
14521 word splitting on @samp{$@{1+"$@@"@}}; see @ref{Shell Substitutions},
14522 item @samp{$@@}, for more.
14525 @item @command{if}
14526 @c ---------------
14527 @prindex @command{if}
14528 Using @samp{!} is not portable.  Instead of:
14530 @example
14531 if ! cmp -s file file.new; then
14532   mv file.new file
14534 @end example
14536 @noindent
14537 use:
14539 @example
14540 if cmp -s file file.new; then :; else
14541   mv file.new file
14543 @end example
14545 There are shells that do not reset the exit status from an @command{if}:
14547 @example
14548 $ @kbd{if (exit 42); then true; fi; echo $?}
14550 @end example
14552 @noindent
14553 whereas a proper shell should have printed @samp{0}.  This is especially
14554 bad in makefiles since it produces false failures.  This is why properly
14555 written makefiles, such as Automake's, have such hairy constructs:
14557 @example
14558 if test -f "$file"; then
14559   install "$file" "$dest"
14560 else
14561   :
14563 @end example
14566 @item @command{printf}
14567 @c ------------------
14568 @prindex @command{printf}
14569 A format string starting with a @samp{-} can cause problems.
14570 Bash interprets it as an option and
14571 gives an error.  And @samp{--} to mark the end of options is not good
14572 in the Net@acronym{BSD} Almquist shell (e.g., 0.4.6) which takes that
14573 literally as the format string.  Putting the @samp{-} in a @samp{%c}
14574 or @samp{%s} is probably easiest:
14576 @example
14577 printf %s -foo
14578 @end example
14580 Bash 2.03 mishandles an escape sequence that happens to evaluate to @samp{%}:
14582 @example
14583 $ @kbd{printf '\045'}
14584 bash: printf: `%': missing format character
14585 @end example
14587 Large outputs may cause trouble.  On Solaris 2.5.1 through 10, for
14588 example, @file{/usr/bin/printf} is buggy, so when using
14589 @command{/bin/sh} the command @samp{printf %010000x 123} normally dumps
14590 core.
14593 @item @command{read}
14594 @c ------------------
14595 @prindex @command{read}
14596 Not all shells support @option{-r} (Solaris @command{/bin/sh} for example).
14599 @item @command{pwd}
14600 @c ----------------
14601 @prindex @command{pwd}
14602 With modern shells, plain @command{pwd} outputs a ``logical''
14603 directory name, some of whose components may be symbolic links.  These
14604 directory names are in contrast to ``physical'' directory names, whose
14605 components are all directories.
14607 Posix 1003.1-2001 requires that @command{pwd} must support
14608 the @option{-L} (``logical'') and @option{-P} (``physical'') options,
14609 with @option{-L} being the default.  However, traditional shells do
14610 not support these options, and their @command{pwd} command has the
14611 @option{-P} behavior.
14613 Portable scripts should assume neither option is supported, and should
14614 assume neither behavior is the default.  Also, on many hosts
14615 @samp{/bin/pwd} is equivalent to @samp{pwd -P}, but Posix
14616 does not require this behavior and portable scripts should not rely on
14619 Typically it's best to use plain @command{pwd}.  On modern hosts this
14620 outputs logical directory names, which have the following advantages:
14622 @itemize @bullet
14623 @item
14624 Logical names are what the user specified.
14625 @item
14626 Physical names may not be portable from one installation
14627 host to another due to network file system gymnastics.
14628 @item
14629 On modern hosts @samp{pwd -P} may fail due to lack of permissions to
14630 some parent directory, but plain @command{pwd} cannot fail for this
14631 reason.
14632 @end itemize
14634 Also please see the discussion of the @command{cd} command.
14637 @item @command{set}
14638 @c ----------------
14639 @prindex @command{set}
14640 With the Free@acronym{BSD} 6.0 shell, the @command{set} command (without
14641 any options) does not sort its output.
14643 The @command{set} builtin faces the usual problem with arguments
14644 starting with a
14645 dash.  Modern shells such as Bash or Zsh understand @option{--} to specify
14646 the end of the options (any argument after @option{--} is a parameter,
14647 even @samp{-x} for instance), but many traditional shells (e.g., Solaris
14648 10 @command{/bin/sh}) simply stop option
14649 processing as soon as a non-option argument is found.  Therefore, use
14650 @samp{dummy} or simply @samp{x} to end the option processing, and use
14651 @command{shift} to pop it out:
14653 @example
14654 set x $my_list; shift
14655 @end example
14657 Avoid @samp{set -}, e.g., @samp{set - $my_list}.  Posix no
14658 longer requires support for this command, and in traditional shells
14659 @samp{set - $my_list} resets the @option{-v} and @option{-x} options, which
14660 makes scripts harder to debug.
14662 Some nonstandard shells do not recognize more than one option
14663 (e.g., @samp{set -e -x} assigns @samp{-x} to the command line).  It is
14664 better to combine them:
14666 @example
14667 set -ex
14668 @end example
14670 The @acronym{BSD} shell has had several problems with the @option{-e}
14671 option, partly because @acronym{BSD} @command{make} traditionally used
14672 @option{-e} even though this was incompatible with Posix
14673 (@pxref{Failure in Make Rules}).  Older versions of the @acronym{BSD}
14674 shell (circa 1990) mishandled @samp{&&}, @samp{||}, @samp{if}, and
14675 @samp{case} when @option{-e} was in effect, causing the shell to exit
14676 unexpectedly in some cases.  This was particularly a problem with
14677 makefiles, and led to circumlocutions like @samp{sh -c 'test -f file ||
14678 touch file'}, where the seemingly-unnecessary @samp{sh -c '@dots{}'}
14679 wrapper works around the bug.
14681 Even relatively-recent versions of the @acronym{BSD} shell (e.g.,
14682 Open@acronym{BSD} 3.4) wrongly exit with @option{-e} if a command within
14683 @samp{&&} fails inside a compound statement.  For example:
14685 @example
14686 #! /bin/sh
14687 set -e
14688 foo=''
14689 test -n "$foo" && exit 1
14690 echo one
14691 if :; then
14692   test -n "$foo" && exit 1
14694 echo two
14695 @end example
14697 @noindent
14698 does not print @samp{two}.  One workaround is to use @samp{if test -n
14699 "$foo"; then exit 1; fi} rather than @samp{test -n "$foo" && exit 1}.
14700 Another possibility is to warn @acronym{BSD} users not to use @samp{sh -e}.
14703 @item @command{shift}
14704 @c ------------------
14705 @prindex @command{shift}
14706 Not only is @command{shift}ing a bad idea when there is nothing left to
14707 shift, but in addition it is not portable: the shell of @acronym{MIPS
14708 RISC/OS} 4.52 refuses to do it.
14710 Don't use @samp{shift 2} etc.; it was not in the 7th Edition Bourne shell,
14711 and it is also absent in many pre-Posix shells.
14714 @item @command{source}
14715 @c -------------------
14716 @prindex @command{source}
14717 This command is not portable, as Posix does not require it; use
14718 @command{.} instead.
14721 @item @command{test}
14722 @c -----------------
14723 @prindex @command{test}
14724 The @code{test} program is the way to perform many file and string
14725 tests.  It is often invoked by the alternate name @samp{[}, but using
14726 that name in Autoconf code is asking for trouble since it is an M4 quote
14727 character.
14729 The @option{-a}, @option{-o}, @samp{(}, and @samp{)} operands are not
14730 portable and should be avoided.  Thus, portable uses of @command{test}
14731 should never have more than four arguments, and scripts should use shell
14732 constructs like @samp{&&} and @samp{||} instead.  If you combine
14733 @samp{&&} and @samp{||} in the same statement, keep in mind that they
14734 have equal precedence, so it is often better to parenthesize even when
14735 this is redundant.  For example:
14737 @smallexample
14738 # Not portable:
14739 test "X$a" = "X$b" -a \
14740   '(' "X$c" != "X$d" -o "X$e" = "X$f" ')'
14742 # Portable:
14743 test "X$a" = "X$b" &&
14744   @{ test "X$c" != "X$d" || test "X$e" = "X$f"; @}
14745 @end smallexample
14747 @command{test} does not process options like most other commands do; for
14748 example, it does not recognize the @option{--} argument as marking the
14749 end of options.
14751 It is safe to use @samp{!} as a @command{test} operator.  For example,
14752 @samp{if test ! -d foo; @dots{}} is portable even though @samp{if ! test
14753 -d foo; @dots{}} is not.
14756 @item @command{test} (files)
14757 @c -------------------------
14758 To enable @command{configure} scripts to support cross-compilation, they
14759 shouldn't do anything that tests features of the build system instead of
14760 the host system.  But occasionally you may find it necessary to check
14761 whether some arbitrary file exists.  To do so, use @samp{test -f} or
14762 @samp{test -r}.  Do not use @samp{test -x}, because 4.3@acronym{BSD} does not
14763 have it.  Do not use @samp{test -e} either, because Solaris @command{/bin/sh}
14764 lacks it.  To test for symbolic links on systems that have them, use
14765 @samp{test -h} rather than @samp{test -L}; either form conforms to
14766 Posix 1003.1-2001, but older shells like Solaris 8
14767 @code{/bin/sh} support only @option{-h}.
14769 @item @command{test} (strings)
14770 @c ---------------------------
14771 Posix says that @samp{test "@var{string}"} succeeds if @var{string} is
14772 not null, but this usage is not portable to traditional platforms like
14773 Solaris 10 @command{/bin/sh}, which mishandle strings like @samp{!} and
14774 @samp{-n}.
14776 Posix also says that @samp{test ! "@var{string}"},
14777 @samp{test -n "@var{string}"} and
14778 @samp{test -z "@var{string}"} work with any string, but many
14779 shells (such as Solaris, @acronym{AIX} 3.2, @sc{unicos} 10.0.0.6,
14780 Digital Unix 4, etc.)@: get confused if
14781 @var{string} looks like an operator:
14783 @example
14784 $ @kbd{test -n =}
14785 test: argument expected
14786 $ @kbd{test ! -n}
14787 test: argument expected
14788 @end example
14790 Similarly, Posix says that both @samp{test "@var{string1}" = "@var{string2"}}
14791 and @samp{test "@var{string1}" != "@var{string2"}} work for any pairs of
14792 strings, but in practice this is not true for troublesome strings that
14793 look like operators or parentheses, or that begin with @samp{-}.
14795 It is best to protect such strings with a leading @samp{X}, e.g.,
14796 @samp{test "X@var{string}" != X} rather than @samp{test -n
14797 "@var{string}"} or @samp{test ! "@var{string}"}.
14799 It is common to find variations of the following idiom:
14801 @example
14802 test -n "`echo $ac_feature | sed 's/[-a-zA-Z0-9_]//g'`" &&
14803   @var{action}
14804 @end example
14806 @noindent
14807 to take an action when a token matches a given pattern.  Such constructs
14808 should be avoided by using:
14810 @example
14811 case $ac_feature in
14812   *[!-a-zA-Z0-9_]*) @var{action};;
14813 esac
14814 @end example
14816 If the pattern is a complicated regular expression that cannot be
14817 expressed as a shell pattern, use something like this instead:
14819 @example
14820 expr "X$ac_feature" : 'X.*[^-a-zA-Z0-9_]' >/dev/null &&
14821   @var{action}
14822 @end example
14824 @samp{expr "X@var{foo}" : "X@var{bar}"} is more robust than @samp{echo
14825 "X@var{foo}" | grep "^X@var{bar}"}, because it avoids problems when
14826 @samp{@var{foo}} contains backslashes.
14829 @item @command{trap}
14830 @c -----------------
14831 @prindex @command{trap}
14832 It is safe to trap at least the signals 1, 2, 13, and 15.  You can also
14833 trap 0, i.e., have the @command{trap} run when the script ends (either via an
14834 explicit @command{exit}, or the end of the script).  The trap for 0 should be
14835 installed outside of a shell function, or @acronym{AIX} 5.3 @command{/bin/sh}
14836 will invoke the trap at the end of this function.
14838 Posix says that @samp{trap - 1 2 13 15} resets the traps for the
14839 specified signals to their default values, but many common shells (e.g.,
14840 Solaris @command{/bin/sh}) misinterpret this and attempt to execute a
14841 ``command'' named @command{-} when the specified conditions arise.
14842 There is no portable workaround, except for @samp{trap - 0}, for which
14843 @samp{trap '' 0} is a portable substitute.
14845 Although Posix is not absolutely clear on this point, it is widely
14846 admitted that when entering the trap @samp{$?} should be set to the exit
14847 status of the last command run before the trap.  The ambiguity can be
14848 summarized as: ``when the trap is launched by an @command{exit}, what is
14849 the @emph{last} command run: that before @command{exit}, or
14850 @command{exit} itself?''
14852 Bash considers @command{exit} to be the last command, while Zsh and
14853 Solaris @command{/bin/sh} consider that when the trap is run it is
14854 @emph{still} in the @command{exit}, hence it is the previous exit status
14855 that the trap receives:
14857 @example
14858 $ @kbd{cat trap.sh}
14859 trap 'echo $?' 0
14860 (exit 42); exit 0
14861 $ @kbd{zsh trap.sh}
14863 $ @kbd{bash trap.sh}
14865 @end example
14867 The portable solution is then simple: when you want to @samp{exit 42},
14868 run @samp{(exit 42); exit 42}, the first @command{exit} being used to
14869 set the exit status to 42 for Zsh, and the second to trigger the trap
14870 and pass 42 as exit status for Bash.
14872 The shell in Free@acronym{BSD} 4.0 has the following bug: @samp{$?} is
14873 reset to 0 by empty lines if the code is inside @command{trap}.
14875 @example
14876 $ @kbd{trap 'false}
14878 echo $?' 0
14879 $ @kbd{exit}
14881 @end example
14883 @noindent
14884 Fortunately, this bug only affects @command{trap}.
14886 @item @command{true}
14887 @c -----------------
14888 @prindex @command{true}
14889 @c Info cannot handle `:' in index entries.
14890 @c @prindex @command{:}
14891 Don't worry: as far as we know @command{true} is portable.
14892 Nevertheless, it's not always a builtin (e.g., Bash 1.x), and the
14893 portable shell community tends to prefer using @command{:}.  This has a
14894 funny side effect: when asked whether @command{false} is more portable
14895 than @command{true} Alexandre Oliva answered:
14897 @quotation
14898 In a sense, yes, because if it doesn't exist, the shell will produce an
14899 exit status of failure, which is correct for @command{false}, but not
14900 for @command{true}.
14901 @end quotation
14904 @item @command{unset}
14905 @c ------------------
14906 @prindex @command{unset}
14907 In some nonconforming shells (e.g., Bash 2.05a), @code{unset FOO} fails
14908 when @code{FOO} is not set.  Also, Bash 2.01 mishandles @code{unset
14909 MAIL} in some cases and dumps core.
14911 A few ancient shells lack @command{unset} entirely.  Nevertheless, because
14912 it is extremely useful to disable embarrassing variables such as
14913 @code{PS1}, you can test for its existence and use
14914 it @emph{provided} you give a neutralizing value when @command{unset} is
14915 not supported:
14917 @smallexample
14918 # "|| exit" suppresses any "Segmentation fault" message.
14919 if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
14920   unset=unset
14921 else
14922   unset=false
14924 $unset PS1 || PS1='$ '
14925 @end smallexample
14927 @noindent
14928 @xref{Special Shell Variables}, for some neutralizing values.  Also, see
14929 @ref{Limitations of Builtins}, documentation of @command{export}, for
14930 the case of environment variables.
14931 @end table
14933 @node Limitations of Usual Tools
14934 @section Limitations of Usual Tools
14935 @cindex Limitations of usual tools
14937 The small set of tools you can expect to find on any machine can still
14938 include some limitations you should be aware of.
14940 @table @asis
14941 @item Awk
14942 @c ------
14943 @prindex Awk
14944 Don't leave white space before the opening parenthesis in a user function call.
14945 Posix does not allow this and @acronym{GNU} Awk rejects it:
14947 @example
14948 $ @kbd{gawk 'function die () @{ print "Aaaaarg!"  @}
14949         BEGIN @{ die () @}'}
14950 gawk: cmd. line:2:         BEGIN @{ die () @}
14951 gawk: cmd. line:2:                      ^ parse error
14952 $ @kbd{gawk 'function die () @{ print "Aaaaarg!"  @}
14953         BEGIN @{ die() @}'}
14954 Aaaaarg!
14955 @end example
14957 Posix says that if a program contains only @samp{BEGIN} actions, and
14958 contains no instances of @code{getline}, then the program merely
14959 executes the actions without reading input.  However, traditional Awk
14960 implementations (such as Solaris 10 @command{awk}) read and discard
14961 input in this case.  Portable scripts can redirect input from
14962 @file{/dev/null} to work around the problem.  For example:
14964 @example
14965 awk 'BEGIN @{print "hello world"@}' </dev/null
14966 @end example
14968 Posix says that in an @samp{END} action, @samp{$NF} (and presumably,
14969 @samp{$1}) retain their value from the last record read, if no
14970 intervening @samp{getline} occurred.  However, some implementations
14971 (such as Solaris 10 @samp{/usr/bin/awk}, @samp{nawk}, or Darwin
14972 @samp{awk}) reset these variables.  A workaround is to use an
14973 intermediate variable prior to the @samp{END} block.  For example:
14975 @example
14976 $ @kbd{cat end.awk}
14977 @{ tmp = $1 @}
14978 END @{ print "a", $1, $NF, "b", tmp @}
14979 $ @kbd{echo 1 | awk -f end.awk}
14980 a   b 1
14981 $ @kbd{echo 1 | gawk -f end.awk}
14982 a 1 1 b 1
14983 @end example
14985 If you want your program to be deterministic, don't depend on @code{for}
14986 on arrays:
14988 @example
14989 $ @kbd{cat for.awk}
14990 END @{
14991   arr["foo"] = 1
14992   arr["bar"] = 1
14993   for (i in arr)
14994     print i
14996 $ @kbd{gawk -f for.awk </dev/null}
14999 $ @kbd{nawk -f for.awk </dev/null}
15002 @end example
15004 Some Awk implementations, such as @acronym{HP-UX} 11.0's native one,
15005 mishandle anchors:
15007 @example
15008 $ @kbd{echo xfoo | $AWK '/foo|^bar/ @{ print @}'}
15009 $ @kbd{echo bar | $AWK '/foo|^bar/ @{ print @}'}
15011 $ @kbd{echo xfoo | $AWK '/^bar|foo/ @{ print @}'}
15012 xfoo
15013 $ @kbd{echo bar | $AWK '/^bar|foo/ @{ print @}'}
15015 @end example
15017 @noindent
15018 Either do not depend on such patterns (i.e., use @samp{/^(.*foo|bar)/},
15019 or use a simple test to reject such implementations.
15021 On @samp{ia64-hp-hpux11.23}, Awk mishandles @code{printf} conversions
15022 after @code{%u}:
15024 @example
15025 $ @kbd{awk 'BEGIN @{ printf "%u %d\n", 0, -1 @}'}
15026 0 0
15027 @end example
15029 @acronym{AIX} version 5.2 has an arbitrary limit of 399 on the
15030 length of regular expressions and literal strings in an Awk program.
15032 Traditional Awk implementations derived from Unix version 7, such as
15033 Solaris @command{/bin/awk}, have many limitations and do not
15034 conform to Posix.  Nowadays @code{AC_PROG_AWK} (@pxref{Particular
15035 Programs}) finds you an Awk that doesn't have these problems, but if
15036 for some reason you prefer not to use @code{AC_PROG_AWK} you may need to
15037 address them.
15039 Traditional Awk does not support multidimensional arrays or user-defined
15040 functions.
15042 Traditional Awk does not support the @option{-v} option.  You can use
15043 assignments after the program instead, e.g., @command{$AWK '@{print v
15044 $1@}' v=x}; however, don't forget that such assignments are not
15045 evaluated until they are encountered (e.g., after any @code{BEGIN}
15046 action).
15048 Traditional Awk does not support the keywords @code{delete} or @code{do}.
15050 Traditional Awk does not support the expressions
15051 @code{@var{a}?@var{b}:@var{c}}, @code{!@var{a}}, @code{@var{a}^@var{b}},
15052 or @code{@var{a}^=@var{b}}.
15054 Traditional Awk does not support the predefined @code{CONVFMT} variable.
15056 Traditional Awk supports only the predefined functions @code{exp}, @code{index},
15057 @code{int}, @code{length}, @code{log}, @code{split}, @code{sprintf},
15058 @code{sqrt}, and @code{substr}.
15060 Traditional Awk @code{getline} is not at all compatible with Posix;
15061 avoid it.
15063 Traditional Awk has @code{for (i in a) @dots{}} but no other uses of the
15064 @code{in} keyword.  For example, it lacks @code{if (i in a) @dots{}}.
15066 In code portable to both traditional and modern Awk, @code{FS} must be a
15067 string containing just one ordinary character, and similarly for the
15068 field-separator argument to @code{split}.
15070 Traditional Awk has a limit of 99 fields in a record.  Since some Awk
15071 implementations, like Tru64's, split the input even if you don't refer
15072 to any field in the script, to circumvent this problem, set @samp{FS}
15073 to an unusual character and use @code{split}.
15075 Traditional Awk has a limit of at most 99 bytes in a number formatted by
15076 @code{OFMT}; for example, @code{OFMT="%.300e"; print 0.1;} typically
15077 dumps core.
15079 The original version of Awk had a limit of at most 99 bytes per
15080 @code{split} field, 99 bytes per @code{substr} substring, and 99 bytes
15081 per run of non-special characters in a @code{printf} format, but these
15082 bugs have been fixed on all practical hosts that we know of.
15084 @item @command{basename}
15085 @c ---------------------
15086 @prindex @command{basename}
15087 Not all hosts have a working @command{basename}.
15088 You can use @command{expr} instead.
15090 @c AS_BASENAME is to be replaced by a better API.
15091 @ignore
15092 Not all hosts have a working @command{basename}, and you should instead
15093 use @code{AS_BASENAME} (@pxref{Programming in M4sh}), followed by
15094 @command{expr} if you need to strip a suffix.  For example:
15096 @example
15097 a=`basename "$aname"`       # This is not portable.
15098 a=`AS_BASENAME(["$aname"])` # This is more portable.
15100 # This is not portable.
15101 c=`basename "$cname" .c`
15103 # This is more portable.
15104 c=`AS_BASENAME(["$cname"])`
15105 case $c in
15106 ?*.c) c=`expr "X$c" : 'X\(.*\)\.c'`;;
15107 esac
15108 @end example
15109 @end ignore
15112 @item @command{cat}
15113 @c ----------------
15114 @prindex @command{cat}
15115 Don't rely on any option.
15118 @item @command{cc}
15119 @c ---------------
15120 @prindex @command{cc}
15121 The command @samp{cc -c foo.c} traditionally produces an object file
15122 named @file{foo.o}.  Most compilers allow @option{-c} to be combined
15123 with @option{-o} to specify a different object file name, but
15124 Posix does not require this combination and a few compilers
15125 lack support for it.  @xref{C Compiler}, for how @acronym{GNU} Make
15126 tests for this feature with @code{AC_PROG_CC_C_O}.
15128 When a compilation such as @samp{cc -o foo foo.c} fails, some compilers
15129 (such as @sc{cds} on Reliant Unix) leave a @file{foo.o}.
15131 @acronym{HP-UX} @command{cc} doesn't accept @file{.S} files to preprocess and
15132 assemble.  @samp{cc -c foo.S} appears to succeed, but in fact does
15133 nothing.
15135 The default executable, produced by @samp{cc foo.c}, can be
15137 @itemize
15138 @item @file{a.out} --- usual Posix convention.
15139 @item @file{b.out} --- i960 compilers (including @command{gcc}).
15140 @item @file{a.exe} --- @acronym{DJGPP} port of @command{gcc}.
15141 @item @file{a_out.exe} --- GNV @command{cc} wrapper for DEC C on OpenVMS.
15142 @item @file{foo.exe} --- various MS-DOS compilers.
15143 @end itemize
15145 The C compiler's traditional name is @command{cc}, but other names like
15146 @command{gcc} are common.  Posix 1003.1-2001 specifies the
15147 name @command{c99}, but older Posix editions specified
15148 @command{c89} and anyway these standard names are rarely used in
15149 practice.  Typically the C compiler is invoked from makefiles that use
15150 @samp{$(CC)}, so the value of the @samp{CC} make variable selects the
15151 compiler name.
15154 @item @command{chmod}
15155 @c ------------------
15156 @prindex @command{chmod}
15157 Avoid usages like @samp{chmod -w file}; use @samp{chmod a-w file}
15158 instead, for two reasons.  First, plain @option{-w} does not necessarily
15159 make the file unwritable, since it does not affect mode bits that
15160 correspond to bits in the file mode creation mask.  Second,
15161 Posix says that the @option{-w} might be interpreted as an
15162 implementation-specific option, not as a mode; Posix suggests
15163 using @samp{chmod -- -w file} to avoid this confusion, but unfortunately
15164 @samp{--} does not work on some older hosts.
15167 @item @command{cmp}
15168 @c ----------------
15169 @prindex @command{cmp}
15170 @command{cmp} performs a raw data comparison of two files, while
15171 @command{diff} compares two text files.  Therefore, if you might compare
15172 DOS files, even if only checking whether two files are different, use
15173 @command{diff} to avoid spurious differences due to differences of
15174 newline encoding.
15177 @item @command{cp}
15178 @c ---------------
15179 @prindex @command{cp}
15180 Avoid the @option{-r} option, since Posix 1003.1-2004 marks it as
15181 obsolescent and its behavior on special files is implementation-defined.
15182 Use @option{-R} instead.  On @acronym{GNU} hosts the two options
15183 are equivalent, but on Solaris hosts (for example) @command{cp -r}
15184 reads from pipes instead of replicating them.
15186 Some @command{cp} implementations (e.g., @acronym{BSD/OS} 4.2) do not allow
15187 trailing slashes at the end of nonexistent destination directories.  To
15188 avoid this problem, omit the trailing slashes.  For example, use
15189 @samp{cp -R source /tmp/newdir} rather than @samp{cp -R source
15190 /tmp/newdir/} if @file{/tmp/newdir} does not exist.
15192 @c This is thanks to Ian.
15193 The ancient SunOS 4 @command{cp} does not support @option{-f}, although
15194 its @command{mv} does.
15196 @cindex timestamp resolution
15197 Traditionally, file timestamps had 1-second resolution, and @samp{cp
15198 -p} copied the timestamps exactly.  However, many modern file systems
15199 have timestamps with 1-nanosecond resolution.  Unfortunately, @samp{cp
15200 -p} implementations truncate timestamps when copying files, so this
15201 can result in the destination file appearing to be older than the
15202 source.  The exact amount of truncation depends on the resolution of
15203 the system calls that @command{cp} uses; traditionally this was
15204 @code{utime}, which has 1-second resolution, but some newer
15205 @command{cp} implementations use @code{utimes}, which has
15206 1-microsecond resolution.  These newer implementations include @acronym{GNU}
15207 Core Utilities 5.0.91 or later, and Solaris 8 (sparc) patch 109933-02 or
15208 later.  Unfortunately as of January 2006 there is still no system
15209 call to set timestamps to the full nanosecond resolution.
15211 Bob Proulx notes that @samp{cp -p} always @emph{tries} to copy
15212 ownerships.  But whether it actually does copy ownerships or not is a
15213 system dependent policy decision implemented by the kernel.  If the
15214 kernel allows it then it happens.  If the kernel does not allow it then
15215 it does not happen.  It is not something @command{cp} itself has control
15216 over.
15218 In Unix System V any user can chown files to any other user, and System
15219 V also has a non-sticky @file{/tmp}.  That probably derives from the
15220 heritage of System V in a business environment without hostile users.
15221 @acronym{BSD} changed this
15222 to be a more secure model where only root can @command{chown} files and
15223 a sticky @file{/tmp} is used.  That undoubtedly derives from the heritage
15224 of @acronym{BSD} in a campus environment.
15226 @acronym{GNU}/Linux and Solaris by default follow @acronym{BSD}, but
15227 can be configured to allow a System V style @command{chown}.  On the
15228 other hand, @acronym{HP-UX} follows System V, but can
15229 be configured to use the modern security model and disallow
15230 @command{chown}.  Since it is an administrator-configurable parameter
15231 you can't use the name of the kernel as an indicator of the behavior.
15235 @item @command{date}
15236 @c -----------------
15237 @prindex @command{date}
15238 Some versions of @command{date} do not recognize special @samp{%} directives,
15239 and unfortunately, instead of complaining, they just pass them through,
15240 and exit with success:
15242 @example
15243 $ @kbd{uname -a}
15244 OSF1 medusa.sis.pasteur.fr V5.1 732 alpha
15245 $ @kbd{date "+%s"}
15247 @end example
15250 @item @command{diff}
15251 @c -----------------
15252 @prindex @command{diff}
15253 Option @option{-u} is nonportable.
15255 Some implementations, such as Tru64's, fail when comparing to
15256 @file{/dev/null}.  Use an empty file instead.
15259 @item @command{dirname}
15260 @c --------------------
15261 @prindex @command{dirname}
15262 Not all hosts have a working @command{dirname}, and you should instead
15263 use @code{AS_DIRNAME} (@pxref{Programming in M4sh}).  For example:
15265 @example
15266 dir=`dirname "$file"`       # This is not portable.
15267 dir=`AS_DIRNAME(["$file"])` # This is more portable.
15268 @end example
15271 @item @command{egrep}
15272 @c ------------------
15273 @prindex @command{egrep}
15274 Posix 1003.1-2001 no longer requires @command{egrep},
15275 but many hosts do not yet support the Posix
15276 replacement @code{grep -E}.  Also, some traditional implementations do
15277 not work on long input lines.  To work around these problems, invoke
15278 @code{AC_PROG_EGREP} and then use @code{$EGREP}.
15280 Portable extended regular expressions should use @samp{\} only to escape
15281 characters in the string @samp{$()*+.?[\^@{|}.  For example, @samp{\@}}
15282 is not portable, even though it typically matches @samp{@}}.
15284 The empty alternative is not portable.  Use @samp{?} instead.  For
15285 instance with Digital Unix v5.0:
15287 @example
15288 > printf "foo\n|foo\n" | $EGREP '^(|foo|bar)$'
15289 |foo
15290 > printf "bar\nbar|\n" | $EGREP '^(foo|bar|)$'
15291 bar|
15292 > printf "foo\nfoo|\n|bar\nbar\n" | $EGREP '^(foo||bar)$'
15294 |bar
15295 @end example
15297 @command{$EGREP} also suffers the limitations of @command{grep}.
15299 @item @command{expr}
15300 @c -----------------
15301 @prindex @command{expr}
15302 No @command{expr} keyword starts with @samp{X}, so use @samp{expr
15303 X"@var{word}" : 'X@var{regex}'} to keep @command{expr} from
15304 misinterpreting @var{word}.
15306 Don't use @code{length}, @code{substr}, @code{match} and @code{index}.
15308 @item @command{expr} (@samp{|})
15309 @prindex @command{expr} (@samp{|})
15310 You can use @samp{|}.  Although Posix does require that @samp{expr
15311 ''} return the empty string, it does not specify the result when you
15312 @samp{|} together the empty string (or zero) with the empty string.  For
15313 example:
15315 @example
15316 expr '' \| ''
15317 @end example
15319 Posix 1003.2-1992 returns the empty string
15320 for this case, but traditional Unix returns @samp{0} (Solaris is
15321 one such example).  In Posix 1003.1-2001, the specification was
15322 changed to match traditional Unix's behavior (which is
15323 bizarre, but it's too late to fix this).  Please note that the same
15324 problem does arise when the empty string results from a computation,
15325 as in:
15327 @example
15328 expr bar : foo \| foo : bar
15329 @end example
15331 @noindent
15332 Avoid this portability problem by avoiding the empty string.
15335 @item @command{expr} (@samp{:})
15336 @c ----------------------------
15337 @prindex @command{expr}
15338 Portable @command{expr} regular expressions should use @samp{\} to
15339 escape only characters in the string @samp{$()*.0123456789[\^n@{@}}.
15340 For example, alternation, @samp{\|}, is common but Posix does not
15341 require its support, so it should be avoided in portable scripts.
15342 Similarly, @samp{\+} and @samp{\?} should be avoided.
15344 Portable @command{expr} regular expressions should not begin with
15345 @samp{^}.  Patterns are automatically anchored so leading @samp{^} is
15346 not needed anyway.
15348 The Posix standard is ambiguous as to whether
15349 @samp{expr 'a' : '\(b\)'} outputs @samp{0} or the empty string.
15350 In practice, it outputs the empty string on most platforms, but portable
15351 scripts should not assume this.  For instance, the @acronym{QNX} 4.25 native
15352 @command{expr} returns @samp{0}.
15354 One might think that a way to get a uniform behavior would be to use
15355 the empty string as a default value:
15357 @example
15358 expr a : '\(b\)' \| ''
15359 @end example
15361 @noindent
15362 Unfortunately this behaves exactly as the original expression; see the
15363 @command{expr} (@samp{|}) entry for more information.
15365 Some ancient @command{expr} implementations (e.g., SunOS 4 @command{expr} and
15366 Solaris 8 @command{/usr/ucb/expr}) have a silly length limit that causes
15367 @command{expr} to fail if the matched substring is longer than 120
15368 bytes.  In this case, you might want to fall back on @samp{echo|sed} if
15369 @command{expr} fails.  Nowadays this is of practical importance only for
15370 the rare installer who mistakenly puts @file{/usr/ucb} before
15371 @file{/usr/bin} in @env{PATH}.
15373 On Mac OS X 10.4, @command{expr} mishandles the pattern @samp{[^-]} in
15374 some cases.  For example, the command
15375 @example
15376 expr Xpowerpc-apple-darwin8.1.0 : 'X[^-]*-[^-]*-\(.*\)'
15377 @end example
15379 @noindent
15380 outputs @samp{apple-darwin8.1.0} rather than the correct @samp{darwin8.1.0}.
15381 This particular case can be worked around by substituting @samp{[^--]}
15382 for @samp{[^-]}.
15384 Don't leave, there is some more!
15386 The @acronym{QNX} 4.25 @command{expr}, in addition of preferring @samp{0} to
15387 the empty string, has a funny behavior in its exit status: it's always 1
15388 when parentheses are used!
15390 @example
15391 $ @kbd{val=`expr 'a' : 'a'`; echo "$?: $val"}
15392 0: 1
15393 $ @kbd{val=`expr 'a' : 'b'`; echo "$?: $val"}
15394 1: 0
15396 $ @kbd{val=`expr 'a' : '\(a\)'`; echo "?: $val"}
15397 1: a
15398 $ @kbd{val=`expr 'a' : '\(b\)'`; echo "?: $val"}
15399 1: 0
15400 @end example
15402 @noindent
15403 In practice this can be a big problem if you are ready to catch failures
15404 of @command{expr} programs with some other method (such as using
15405 @command{sed}), since you may get twice the result.  For instance
15407 @example
15408 $ @kbd{expr 'a' : '\(a\)' || echo 'a' | sed 's/^\(a\)$/\1/'}
15409 @end example
15411 @noindent
15412 outputs @samp{a} on most hosts, but @samp{aa} on @acronym{QNX} 4.25.  A
15413 simple workaround consists of testing @command{expr} and using a variable
15414 set to @command{expr} or to @command{false} according to the result.
15416 Tru64 @command{expr} incorrectly treats the result as a number, if it
15417 can be interpreted that way:
15419 @example
15420 $ @kbd{expr 00001 : '.*\(...\)'}
15422 @end example
15425 @item @command{fgrep}
15426 @c ------------------
15427 @prindex @command{fgrep}
15428 Posix 1003.1-2001 no longer requires @command{fgrep},
15429 but many hosts do not yet support the Posix
15430 replacement @code{grep -F}.  Also, some traditional implementations do
15431 not work on long input lines.  To work around these problems, invoke
15432 @code{AC_PROG_FGREP} and then use @code{$FGREP}.
15435 @item @command{find}
15436 @c -----------------
15437 @prindex @command{find}
15438 The option @option{-maxdepth} seems to be @acronym{GNU} specific.
15439 Tru64 v5.1, Net@acronym{BSD} 1.5 and Solaris @command{find}
15440 commands do not understand it.
15442 The replacement of @samp{@{@}} is guaranteed only if the argument is
15443 exactly @emph{@{@}}, not if it's only a part of an argument.  For
15444 instance on DU, and @acronym{HP-UX} 10.20 and @acronym{HP-UX} 11:
15446 @example
15447 $ @kbd{touch foo}
15448 $ @kbd{find . -name foo -exec echo "@{@}-@{@}" \;}
15449 @{@}-@{@}
15450 @end example
15452 @noindent
15453 while @acronym{GNU} @command{find} reports @samp{./foo-./foo}.
15456 @item @command{grep}
15457 @c -----------------
15458 @prindex @command{grep}
15459 Portable scripts can rely on the @command{grep} options @option{-c},
15460 @option{-l}, @option{-n}, and @option{-v}, but should avoid other
15461 options.  For example, don't use @option{-w}, as Posix does not require
15462 it and Irix 6.5.16m's @command{grep} does not support it.  Also,
15463 portable scripts should not combine @option{-c} with @option{-l},
15464 as Posix does not allow this.
15466 Some of the options required by Posix are not portable in practice.
15467 Don't use @samp{grep -q} to suppress output, because many @command{grep}
15468 implementations (e.g., Solaris) do not support @option{-q}.
15469 Don't use @samp{grep -s} to suppress output either, because Posix
15470 says @option{-s} does not suppress output, only some error messages;
15471 also, the @option{-s} option of traditional @command{grep} behaved
15472 like @option{-q} does in most modern implementations.  Instead,
15473 redirect the standard output and standard error (in case the file
15474 doesn't exist) of @code{grep} to @file{/dev/null}.  Check the exit
15475 status of @code{grep} to determine whether it found a match.
15477 Some traditional @command{grep} implementations do not work on long
15478 input lines.  On AIX the default @code{grep} silently truncates long
15479 lines on the input before matching.
15481 Also, many implementations do not support multiple regexps
15482 with @option{-e}: they either reject @option{-e} entirely (e.g., Solaris)
15483 or honor only the last pattern (e.g., @acronym{IRIX} 6.5 and NeXT).  To
15484 work around these problems, invoke @code{AC_PROG_GREP} and then use
15485 @code{$GREP}.
15487 Another possible workaround for the multiple @option{-e} problem is to
15488 separate the patterns by newlines, for example:
15490 @example
15491 grep 'foo
15492 bar' in.txt
15493 @end example
15495 @noindent
15496 except that this fails with traditional @command{grep}
15497 implementations and with Open@acronym{BSD} 3.8 @command{grep}.
15499 Traditional @command{grep} implementations (e.g., Solaris) do not
15500 support the @option{-E} or @option{-F} options.  To work around these
15501 problems, invoke @code{AC_PROG_EGREP} and then use @code{$EGREP}, and
15502 similarly for @code{AC_PROG_FGREP} and @code{$FGREP}.  Even if you are
15503 willing to require support for Posix @command{grep}, your script should
15504 not use both @option{-E} and @option{-F}, since Posix does not allow
15505 this combination.
15507 Portable @command{grep} regular expressions should use @samp{\} only to
15508 escape characters in the string @samp{$()*.0123456789[\^@{@}}.  For example,
15509 alternation, @samp{\|}, is common but Posix does not require its
15510 support in basic regular expressions, so it should be avoided in
15511 portable scripts.  Solaris and HP-UX @command{grep} do not support it.
15512 Similarly, the following escape sequences should also be avoided:
15513 @samp{\<}, @samp{\>}, @samp{\+}, @samp{\?}, @samp{\`}, @samp{\'},
15514 @samp{\B}, @samp{\b}, @samp{\S}, @samp{\s}, @samp{\W}, and @samp{\w}.
15516 Posix does not specify the behavior of @command{grep} on binary files.
15517 An example where this matters is using @acronym{BSD} @command{grep} to
15518 search text that includes embedded @acronym{ANSI} escape sequences for
15519 colored output to terminals (@samp{\033[m} is the sequence to restore
15520 normal output); the behavior depends on whether input is seekable:
15522 @example
15523 $ @kbd{printf 'esc\033[mape\n' > sample}
15524 $ @kbd{grep . sample}
15525 Binary file sample matches
15526 $ @kbd{cat sample | grep .}
15527 escape
15528 @end example
15531 @item @command{join}
15532 @c -----------------
15533 @prindex @command{join}
15534 Solaris 8 @command{join} has bugs when the second operand is standard
15535 input, and when standard input is a pipe.  For example, the following
15536 shell script causes Solaris 8 @command{join} to loop forever:
15538 @example
15539 cat >file <<'EOF'
15540 1 x
15541 2 y
15543 cat file | join file -
15544 @end example
15546 Use @samp{join - file} instead.
15549 @item @command{ln}
15550 @c ---------------
15551 @prindex @command{ln}
15552 @cindex Symbolic links
15553 Don't rely on @command{ln} having a @option{-f} option.  Symbolic links
15554 are not available on old systems; use @samp{$(LN_S)} as a portable substitute.
15556 For versions of the @acronym{DJGPP} before 2.04,
15557 @command{ln} emulates symbolic links
15558 to executables by generating a stub that in turn calls the real
15559 program.  This feature also works with nonexistent files like in the
15560 Posix spec.  So @samp{ln -s file link} generates @file{link.exe},
15561 which attempts to call @file{file.exe} if run.  But this feature only
15562 works for executables, so @samp{cp -p} is used instead for these
15563 systems.  @acronym{DJGPP} versions 2.04 and later have full support
15564 for symbolic links.
15567 @item @command{ls}
15568 @c ---------------
15569 @prindex @command{ls}
15570 @cindex Listing directories
15571 The portable options are @option{-acdilrtu}.  Current practice is for
15572 @option{-l} to output both owner and group, even though ancient versions
15573 of @command{ls} omitted the group.
15575 On ancient hosts, @samp{ls foo} sent the diagnostic @samp{foo not found}
15576 to standard output if @file{foo} did not exist.  Hence a shell command
15577 like @samp{sources=`ls *.c 2>/dev/null`} did not always work, since it
15578 was equivalent to @samp{sources='*.c not found'} in the absence of
15579 @samp{.c} files.  This is no longer a practical problem, since current
15580 @command{ls} implementations send diagnostics to standard error.
15582 @item @command{mkdir}
15583 @c ------------------
15584 @prindex @command{mkdir}
15585 @cindex Making directories
15586 No @command{mkdir} option is portable to older systems.  Instead of
15587 @samp{mkdir -p @var{file-name}}, you should use
15588 @code{AS_MKDIR_P(@var{file-name})} (@pxref{Programming in M4sh})
15589 or @code{AC_PROG_MKDIR_P} (@pxref{Particular Programs}).
15591 Combining the @option{-m} and @option{-p} options, as in @samp{mkdir -m
15592 go-w -p @var{dir}}, often leads to trouble.  Free@acronym{BSD}
15593 @command{mkdir} incorrectly attempts to change the permissions of
15594 @var{dir} even if it already exists.  @acronym{HP-UX} 11.23 and
15595 @acronym{IRIX} 6.5 @command{mkdir} often assign the wrong permissions to
15596 any newly-created parents of @var{dir}.
15598 Posix does not clearly specify whether @samp{mkdir -p foo}
15599 should succeed when @file{foo} is a symbolic link to an already-existing
15600 directory.  The @acronym{GNU} Core Utilities 5.1.0 @command{mkdir}
15601 succeeds, but Solaris @command{mkdir} fails.
15603 Traditional @code{mkdir -p} implementations suffer from race conditions.
15604 For example, if you invoke @code{mkdir -p a/b} and @code{mkdir -p a/c}
15605 at the same time, both processes might detect that @file{a} is missing,
15606 one might create @file{a}, then the other might try to create @file{a}
15607 and fail with a @code{File exists} diagnostic.  The @acronym{GNU} Core
15608 Utilities (@samp{fileutils} version 4.1), Free@acronym{BSD} 5.0,
15609 Net@acronym{BSD} 2.0.2, and Open@acronym{BSD} 2.4 are known to be
15610 race-free when two processes invoke @code{mkdir -p} simultaneously, but
15611 earlier versions are vulnerable.  Solaris @command{mkdir} is still
15612 vulnerable as of Solaris 10, and other traditional Unix systems are
15613 probably vulnerable too.  This possible race is harmful in parallel
15614 builds when several Make rules call @code{mkdir -p} to
15615 construct directories.  You may use
15616 @code{install-sh -d} as a safe replacement, provided this script is
15617 recent enough; the copy shipped with Autoconf 2.60 and Automake 1.10 is
15618 OK, but copies from older versions are vulnerable.
15621 @item @command{mktemp}
15622 @c -------------------
15623 @prindex @command{mktemp}
15624 @cindex Creating temporary files
15625 Shell scripts can use temporary files safely with @command{mktemp}, but
15626 it does not exist on all systems.  A portable way to create a safe
15627 temporary file name is to create a temporary directory with mode 700 and
15628 use a file inside this directory.  Both methods prevent attackers from
15629 gaining control, though @command{mktemp} is far less likely to fail
15630 gratuitously under attack.
15632 Here is sample code to create a new temporary directory safely:
15634 @example
15635 # Create a temporary directory $tmp in $TMPDIR (default /tmp).
15636 # Use mktemp if possible; otherwise fall back on mkdir,
15637 # with $RANDOM to make collisions less likely.
15638 : $@{TMPDIR=/tmp@}
15640   tmp=`
15641     (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
15642   ` &&
15643   test -n "$tmp" && test -d "$tmp"
15644 @} || @{
15645   tmp=$TMPDIR/foo$$-$RANDOM
15646   (umask 077 && mkdir "$tmp")
15647 @} || exit $?
15648 @end example
15651 @item @command{mv}
15652 @c ---------------
15653 @prindex @command{mv}
15654 @cindex Moving open files
15655 The only portable options are @option{-f} and @option{-i}.
15657 Moving individual files between file systems is portable (it was in Unix
15658 version 6),
15659 but it is not always atomic: when doing @samp{mv new existing}, there's
15660 a critical section where neither the old nor the new version of
15661 @file{existing} actually exists.
15663 On some systems moving files from @file{/tmp} can sometimes cause
15664 undesirable (but perfectly valid) warnings, even if you created these
15665 files.  This is because @file{/tmp} belongs to a group that ordinary
15666 users are not members of, and files created in @file{/tmp} inherit
15667 the group of @file{/tmp}.  When the file is copied, @command{mv} issues
15668 a diagnostic without failing:
15670 @smallexample
15671 $ @kbd{touch /tmp/foo}
15672 $ @kbd{mv /tmp/foo .}
15673 @error{}mv: ./foo: set owner/group (was: 100/0): Operation not permitted
15674 $ @kbd{echo $?}
15676 $ @kbd{ls foo}
15678 @end smallexample
15680 @noindent
15681 This annoying behavior conforms to Posix, unfortunately.
15683 Moving directories across mount points is not portable, use @command{cp}
15684 and @command{rm}.
15686 @acronym{DOS} variants cannot rename or remove open files, and do not
15687 support commands like @samp{mv foo bar >foo}, even though this is
15688 perfectly portable among Posix hosts.
15691 @item @command{od}
15692 @c ---------------
15693 @prindex @command{od}
15695 In Mac OS X 10.3, @command{od} does not support the
15696 standard Posix options @option{-A}, @option{-j}, @option{-N}, or
15697 @option{-t}, or the @acronym{XSI} option @option{-s}.  The only
15698 supported Posix option is @option{-v}, and the only supported
15699 @acronym{XSI} options are those in @option{-bcdox}.  The @acronym{BSD}
15700 @command{hexdump} program can be used instead.
15702 This problem no longer exists in Mac OS X 10.4.3.
15705 @item @command{rm}
15706 @c ---------------
15707 @prindex @command{rm}
15708 The @option{-f} and @option{-r} options are portable.
15710 It is not portable to invoke @command{rm} without operands.  For
15711 example, on many systems @samp{rm -f -r} (with no other arguments)
15712 silently succeeds without doing anything, but it fails with a diagnostic
15713 on Net@acronym{BSD} 2.0.2.
15715 A file might not be removed even if its parent directory is writable
15716 and searchable.  Many Posix hosts cannot remove a mount point, a named
15717 stream, a working directory, or a last link to a file that is being
15718 executed.
15720 @acronym{DOS} variants cannot rename or remove open files, and do not
15721 support commands like @samp{rm foo >foo}, even though this is
15722 perfectly portable among Posix hosts.
15725 @item @command{sed}
15726 @c ----------------
15727 @prindex @command{sed}
15728 Patterns should not include the separator (unless escaped), even as part
15729 of a character class.  In conformance with Posix, the Cray
15730 @command{sed} rejects @samp{s/[^/]*$//}: use @samp{s,[^/]*$,,}.
15732 Avoid empty patterns within parentheses (i.e., @samp{\(\)}).  Posix does
15733 not require support for empty patterns, and Unicos 9 @command{sed} rejects
15734 them.
15736 Unicos 9 @command{sed} loops endlessly on patterns like @samp{.*\n.*}.
15738 Sed scripts should not use branch labels longer than 7 characters and
15739 should not contain comments.  @acronym{HP-UX} sed has a limit of 99 commands
15740 (not counting @samp{:} commands) and
15741 48 labels, which can not be circumvented by using more than one script
15742 file.  It can execute up to 19 reads with the @samp{r} command per cycle.
15743 Solaris @command{/usr/ucb/sed} rejects usages that exceed an limit of
15744 about 6000 bytes for the internal representation of commands.
15746 Avoid redundant @samp{;}, as some @command{sed} implementations, such as
15747 Net@acronym{BSD} 1.4.2's, incorrectly try to interpret the second
15748 @samp{;} as a command:
15750 @example
15751 $ @kbd{echo a | sed 's/x/x/;;s/x/x/'}
15752 sed: 1: "s/x/x/;;s/x/x/": invalid command code ;
15753 @end example
15755 Input should not have unreasonably long lines, since some @command{sed}
15756 implementations have an input buffer limited to 4000 bytes.
15758 Portable @command{sed} regular expressions should use @samp{\} only to escape
15759 characters in the string @samp{$()*.0123456789[\^n@{@}}.  For example,
15760 alternation, @samp{\|}, is common but Posix does not require its
15761 support, so it should be avoided in portable scripts.  Solaris
15762 @command{sed} does not support alternation; e.g., @samp{sed '/a\|b/d'}
15763 deletes only lines that contain the literal string @samp{a|b}.
15764 Similarly, @samp{\+} and @samp{\?} should be avoided.
15766 Anchors (@samp{^} and @samp{$}) inside groups are not portable.
15768 Nested parentheses in patterns (e.g., @samp{\(\(a*\)b*)\)}) are
15769 quite portable to current hosts, but was not supported by some ancient
15770 @command{sed} implementations like SVR3.
15772 Some @command{sed} implementations, e.g., Solaris,
15773 restrict the special role of the asterisk to one-character regular expressions.
15774 This may lead to unexpected behavior:
15776 @example
15777 $ @kbd{echo '1*23*4' | /usr/bin/sed 's/\(.\)*/x/g'}
15778 x2x4
15779 $ @kbd{echo '1*23*4' | /usr/xpg4/bin/sed 's/\(.\)*/x/g'}
15781 @end example
15783 The @option{-e} option is mostly portable.
15784 However, its argument
15785 cannot start with @samp{a}, @samp{c}, or @samp{i},
15786 as this runs afoul of a Tru64 5.1 bug.
15787 Also, its argument cannot be empty, as this fails on @acronym{AIX} 5.3.
15788 Some people prefer to use @samp{-e}:
15790 @example
15791 sed -e '@var{command-1}' \
15792     -e '@var{command-2}'
15793 @end example
15795 @noindent
15796 as opposed to the equivalent:
15798 @example
15799 sed '
15800   @var{command-1}
15801   @var{command-2}
15803 @end example
15805 @noindent
15806 The following usage is sometimes equivalent:
15808 @example
15809 sed '@var{command-1};@var{command-2}'
15810 @end example
15812 but Posix says that this use of a semicolon has undefined effect if
15813 @var{command-1}'s verb is @samp{@{}, @samp{a}, @samp{b}, @samp{c},
15814 @samp{i}, @samp{r}, @samp{t}, @samp{w}, @samp{:}, or @samp{#}, so you
15815 should use semicolon only with simple scripts that do not use these
15816 verbs.
15818 Commands inside @{ @} brackets are further restricted.  Posix says that
15819 they cannot be preceded by addresses, @samp{!}, or @samp{;}, and that
15820 each command must be followed immediately by a newline, without any
15821 intervening blanks or semicolons.  The closing bracket must be alone on
15822 a line, other than white space preceding or following it.
15824 Contrary to yet another urban legend, you may portably use @samp{&} in
15825 the replacement part of the @code{s} command to mean ``what was
15826 matched''.  All descendants of Unix version 7 @command{sed}
15827 (at least; we
15828 don't have first hand experience with older @command{sed} implementations) have
15829 supported it.
15831 Posix requires that you must not have any white space between
15832 @samp{!} and the following command.  It is OK to have blanks between
15833 the address and the @samp{!}.  For instance, on Solaris:
15835 @example
15836 $ @kbd{echo "foo" | sed -n '/bar/ ! p'}
15837 @error{}Unrecognized command: /bar/ ! p
15838 $ @kbd{echo "foo" | sed -n '/bar/! p'}
15839 @error{}Unrecognized command: /bar/! p
15840 $ @kbd{echo "foo" | sed -n '/bar/ !p'}
15842 @end example
15844 Posix also says that you should not combine @samp{!} and @samp{;}.  If
15845 you use @samp{!}, it is best to put it on a command that is delimited by
15846 newlines rather than @samp{;}.
15848 Also note that Posix requires that the @samp{b}, @samp{t}, @samp{r}, and
15849 @samp{w} commands be followed by exactly one space before their argument.
15850 On the other hand, no white space is allowed between @samp{:} and the
15851 subsequent label name.
15853 If a sed script is specified on the command line and ends in an
15854 @samp{a}, @samp{c}, or @samp{i} command, the last line of inserted text
15855 should be followed by a newline.  Otherwise some @command{sed}
15856 implementations (e.g., Open@acronym{BSD} 3.9) do not append a newline to the
15857 inserted text.
15859 Many @command{sed} implementations (e.g., MacOS X 10.4,
15860 Open@acronym{BSD} 3.9, Solaris 10
15861 @command{/usr/ucb/sed}) strip leading white space from the text of
15862 @samp{a}, @samp{c}, and @samp{i} commands.  Prepend a backslash to
15863 work around this incompatibility with Posix:
15865 @example
15866 $ @kbd{echo flushleft | sed 'a\}
15867 > @kbd{   indented}
15868 > @kbd{'}
15869 flushleft
15870 indented
15871 $ @kbd{echo foo | sed 'a\}
15872 > @kbd{\   indented}
15873 > @kbd{'}
15874 flushleft
15875    indented
15876 @end example
15878 Posix requires that with an empty regular expression, the last non-empty
15879 regular expression from either an address specification or substitution
15880 command is applied.  However, busybox 1.6.1 complains when using a
15881 substitution command with a replacement containing a back-reference to
15882 an empty regular expression; the workaround is repeating the regular
15883 expression.
15885 @example
15886 $ @kbd{echo abc | busybox sed '/a\(b\)c/ s//\1/'}
15887 sed: No previous regexp.
15888 $ @kbd{echo abc | busybox sed '/a\(b\)c/ s/a\(b\)c/\1/'}
15890 @end example
15893 @item @command{sed} (@samp{t})
15894 @c ---------------------------
15895 @prindex @command{sed} (@samp{t})
15896 Some old systems have @command{sed} that ``forget'' to reset their
15897 @samp{t} flag when starting a new cycle.  For instance on @acronym{MIPS
15898 RISC/OS}, and on @sc{irix} 5.3, if you run the following @command{sed}
15899 script (the line numbers are not actual part of the texts):
15901 @example
15902 s/keep me/kept/g  # a
15903 t end             # b
15904 s/.*/deleted/g    # c
15905 :end              # d
15906 @end example
15908 @noindent
15911 @example
15912 delete me         # 1
15913 delete me         # 2
15914 keep me           # 3
15915 delete me         # 4
15916 @end example
15918 @noindent
15919 you get
15921 @example
15922 deleted
15923 delete me
15924 kept
15925 deleted
15926 @end example
15928 @noindent
15929 instead of
15931 @example
15932 deleted
15933 deleted
15934 kept
15935 deleted
15936 @end example
15938 Why?  When processing line 1, (c) matches, therefore sets the @samp{t}
15939 flag, and the output is produced.  When processing
15940 line 2, the @samp{t} flag is still set (this is the bug).  Command (a)
15941 fails to match, but @command{sed} is not supposed to clear the @samp{t}
15942 flag when a substitution fails.  Command (b) sees that the flag is set,
15943 therefore it clears it, and jumps to (d), hence you get @samp{delete me}
15944 instead of @samp{deleted}.  When processing line (3), @samp{t} is clear,
15945 (a) matches, so the flag is set, hence (b) clears the flags and jumps.
15946 Finally, since the flag is clear, line 4 is processed properly.
15948 There are two things one should remember about @samp{t} in @command{sed}.
15949 Firstly, always remember that @samp{t} jumps if @emph{some} substitution
15950 succeeded, not only the immediately preceding substitution.  Therefore,
15951 always use a fake @samp{t clear} followed by a @samp{:clear} on the next
15952 line, to reset the @samp{t} flag where needed.
15954 Secondly, you cannot rely on @command{sed} to clear the flag at each new
15955 cycle.
15957 One portable implementation of the script above is:
15959 @example
15960 t clear
15961 :clear
15962 s/keep me/kept/g
15963 t end
15964 s/.*/deleted/g
15965 :end
15966 @end example
15968 @item @command{touch}
15969 @c ------------------
15970 @prindex @command{touch}
15971 @cindex timestamp resolution
15972 If you specify the desired timestamp (e.g., with the @option{-r}
15973 option), @command{touch} typically uses the @code{utime} or
15974 @code{utimes} system call, which can result in the same kind of
15975 timestamp truncation problems that @samp{cp -p} has.
15977 On ancient @acronym{BSD} systems, @command{touch} or any command that
15978 results in an empty file does not update the timestamps, so use a
15979 command like @command{echo} as a workaround.
15980 Also,
15981 @acronym{GNU} @command{touch} 3.16r (and presumably all before that)
15982 fails to work on SunOS 4.1.3 when the empty file is on an
15983 @acronym{NFS}-mounted 4.2 volume.
15984 However, these problems are no longer of practical concern.
15986 @item @command{tr}
15987 @c ---------------
15988 @prindex @command{tr}
15989 @cindex carriage return, deleting
15990 @cindex deleting carriage return
15991 Not all versions of @command{tr} handle all backslash character escapes.
15992 For example, Solaris 10 @command{/usr/ucb/tr} falls over, even though
15993 Solaris contains more modern @command{tr} in other locations.
15994 Therefore, it is more portable to use octal escapes, even though this
15995 ties the result to @acronym{ASCII}, when using @command{tr} to delete
15996 newlines or carriage returns.
15998 @example
15999 $ @kbd{@{ echo moon; echo light; @} | /usr/ucb/tr -d '\n' ; echo}
16001 light
16002 $ @kbd{@{ echo moon; echo light; @} | /usr/bin/tr -d '\n' ; echo}
16003 moonlight
16004 $ @kbd{@{ echo moon; echo light; @} | /usr/ucb/tr -d '\012' ; echo}
16005 moonlight
16006 @end example
16008 @end table
16011 @node Portable Make
16012 @chapter Portable Make Programming
16013 @prindex @command{make}
16014 @cindex Limitations of @command{make}
16016 Writing portable makefiles is an art.  Since a makefile's commands are
16017 executed by the shell, you must consider the shell portability issues
16018 already mentioned.  However, other issues are specific to @command{make}
16019 itself.
16021 @menu
16022 * $< in Ordinary Make Rules::   $< in ordinary rules
16023 * Failure in Make Rules::       Failing portably in rules
16024 * Special Chars in Names::      Special Characters in Macro Names
16025 * Backslash-Newline-Newline::   Empty last lines in macro definitions
16026 * Backslash-Newline Comments::  Spanning comments across line boundaries
16027 * Long Lines in Makefiles::     Line length limitations
16028 * Macros and Submakes::         @code{make macro=value} and submakes
16029 * The Make Macro MAKEFLAGS::    @code{$(MAKEFLAGS)} portability issues
16030 * The Make Macro SHELL::        @code{$(SHELL)} portability issues
16031 * Comments in Make Rules::      Other problems with Make comments
16032 * obj/ and Make::               Don't name a subdirectory @file{obj}
16033 * make -k Status::              Exit status of @samp{make -k}
16034 * VPATH and Make::              @code{VPATH} woes
16035 * Single Suffix Rules::         Single suffix rules and separated dependencies
16036 * Timestamps and Make::         Subsecond timestamp resolution
16037 @end menu
16039 @node $< in Ordinary Make Rules
16040 @section @code{$<} in Ordinary Make Rules
16042 Posix says that the @samp{$<} construct in makefiles can be
16043 used only in inference rules and in the @samp{.DEFAULT} rule; its
16044 meaning in ordinary rules is unspecified.  Solaris @command{make}
16045 for instance replaces it with the empty string.  Open@acronym{BSD} (3.0 and
16046 later) @command{make} diagnoses these uses and errors out.
16048 @node Failure in Make Rules
16049 @section Failure in Make Rules
16051 Since 1992 Posix has required that @command{make} must invoke
16052 each command with the equivalent of a @samp{sh -c} subshell.  However,
16053 many @command{make} implementations, including @acronym{BSD} make through 2004,
16054 use @samp{sh -e -c} instead, and the @option{-e} option causes the
16055 subshell to exit immediately if a subsidiary simple-command fails.  For
16056 example, the command @samp{touch T; rm -f U} always attempts to
16057 remove @file{U} with Posix make, but incompatible
16058 @command{make} implementations skip the @command{rm} if the
16059 @command{touch} fails.  One way to work around this is to reword the
16060 affected simple-commands so that they always succeed, e.g., @samp{touch
16061 T || :; rm -f U}.
16062 However, even this approach can run into common bugs in @acronym{BSD}
16063 implementations of the @option{-e} option of @command{sh} and
16064 @command{set} (@pxref{Limitations of Builtins}), so if you are worried
16065 about porting to buggy @acronym{BSD} shells it may be simpler to migrate
16066 complicated @command{make} actions into separate scripts.
16068 @node Special Chars in Names
16069 @section Special Characters in Make Macro Names
16071 Posix limits macro names to nonempty strings containing only
16072 @acronym{ASCII} letters and digits, @samp{.}, and @samp{_}.  Many
16073 @command{make} implementations allow a wider variety of characters, but
16074 portable makefiles should avoid them.  It is portable to start a name
16075 with a special character, e.g., @samp{$(.FOO)}.
16077 Some ancient @command{make} implementations don't support leading
16078 underscores in macro names.  An example is @acronym{NEWS-OS} 4.2R.
16080 @example
16081 $ @kbd{cat Makefile}
16082 _am_include = #
16083 _am_quote =
16084 all:; @@echo this is test
16085 $ @kbd{make}
16086 Make: Must be a separator on rules line 2.  Stop.
16087 $ @kbd{cat Makefile2}
16088 am_include = #
16089 am_quote =
16090 all:; @@echo this is test
16091 $ @kbd{make -f Makefile2}
16092 this is test
16093 @end example
16095 @noindent
16096 However, this problem is no longer of practical concern.
16098 @node Backslash-Newline-Newline
16099 @section Backslash-Newline-Newline in Make Macro Values
16101 @c  This has been seen on ia64 hpux 11.20, and on one hppa hpux 10.20,
16102 @c  but another hppa hpux 10.20 didn't have it.  Bob Proulx
16103 @c  <bob@proulx.com> thinks it was in hpux 8.0 too.
16104 On some versions of @acronym{HP-UX}, @command{make} reads multiple newlines
16105 following a backslash, continuing to the next non-empty line.  For
16106 example,
16108 @example
16109 FOO = one \
16111 BAR = two
16113 test:
16114         : FOO is "$(FOO)"
16115         : BAR is "$(BAR)"
16116 @end example
16118 @noindent
16119 shows @code{FOO} equal to @code{one BAR = two}.  Other implementations
16120 sensibly let a backslash continue only to the immediately following
16121 line.
16123 @node Backslash-Newline Comments
16124 @section Backslash-Newline in Make Comments
16126 According to Posix, Make comments start with @code{#}
16127 and continue until an unescaped newline is reached.
16129 @example
16130 $ @kbd{cat Makefile}
16131 # A = foo \
16132       bar \
16133       baz
16135 all:
16136         @@echo ok
16137 $ @kbd{make}   # GNU make
16139 @end example
16141 @noindent
16142 However this is not always the case.  Some implementations
16143 discard everything from @code{#} through the end of the line, ignoring any
16144 trailing backslash.
16146 @example
16147 $ @kbd{pmake}  # BSD make
16148 "Makefile", line 3: Need an operator
16149 Fatal errors encountered -- cannot continue
16150 @end example
16152 @noindent
16153 Therefore, if you want to comment out a multi-line definition, prefix each
16154 line with @code{#}, not only the first.
16156 @example
16157 # A = foo \
16158 #     bar \
16159 #     baz
16160 @end example
16162 @node Long Lines in Makefiles
16163 @section Long Lines in Makefiles
16165 Tru64 5.1's @command{make} has been reported to crash when given a
16166 makefile with lines longer than around 20 kB.  Earlier versions are
16167 reported to exit with @code{Line too long} diagnostics.
16169 @node Macros and Submakes
16170 @section @code{make macro=value} and Submakes
16172 A command-line variable definition such as @code{foo=bar} overrides any
16173 definition of @code{foo} in a makefile.  Some @command{make}
16174 implementations (such as @acronym{GNU} @command{make}) propagate this
16175 override to subsidiary invocations of @command{make}.  Some other
16176 implementations do not pass the substitution along to submakes.
16178 @example
16179 $ @kbd{cat Makefile}
16180 foo = foo
16181 one:
16182         @@echo $(foo)
16183         $(MAKE) two
16184 two:
16185         @@echo $(foo)
16186 $ @kbd{make foo=bar}            # GNU make 3.79.1
16188 make two
16189 make[1]: Entering directory `/home/adl'
16191 make[1]: Leaving directory `/home/adl'
16192 $ @kbd{pmake foo=bar}           # BSD make
16194 pmake two
16196 @end example
16198 You have a few possibilities if you do want the @code{foo=bar} override
16199 to propagate to submakes.  One is to use the @option{-e}
16200 option, which causes all environment variables to have precedence over
16201 the makefile macro definitions, and declare foo as an environment
16202 variable:
16204 @example
16205 $ @kbd{env foo=bar make -e}
16206 @end example
16208 The @option{-e} option is propagated to submakes automatically,
16209 and since the environment is inherited between @command{make}
16210 invocations, the @code{foo} macro is overridden in
16211 submakes as expected.
16213 This syntax (@code{foo=bar make -e}) is portable only when used
16214 outside of a makefile, for instance from a script or from the
16215 command line.  When run inside a @command{make} rule, @acronym{GNU}
16216 @command{make} 3.80 and prior versions forget to propagate the
16217 @option{-e} option to submakes.
16219 Moreover, using @option{-e} could have unexpected side effects if your
16220 environment contains some other macros usually defined by the
16221 makefile.  (See also the note about @code{make -e} and @code{SHELL}
16222 below.)
16224 Another way to propagate overrides to submakes is to do it
16225 manually, from your makefile:
16227 @example
16228 foo = foo
16229 one:
16230         @@echo $(foo)
16231         $(MAKE) foo=$(foo) two
16232 two:
16233         @@echo $(foo)
16234 @end example
16236 You need to foresee all macros that a user might want to override if
16237 you do that.
16239 @node The Make Macro MAKEFLAGS
16240 @section The Make Macro MAKEFLAGS
16241 @cindex @code{MAKEFLAGS} and @command{make}
16242 @cindex @command{make} and @code{MAKEFLAGS}
16244 Posix requires @command{make} to use @code{MAKEFLAGS} to affect the
16245 current and recursive invocations of make, but allows implementations
16246 several formats for the variable.  It is tricky to parse
16247 @code{$MAKEFLAGS} to determine whether @option{-s} for silent execution
16248 or @option{-k} for continued execution are in effect.  For example, you
16249 cannot assume that the first space-separated word in @code{$MAKEFLAGS}
16250 contains single-letter options, since in the Cygwin version of
16251 @acronym{GNU} @command{make} it is either @option{--unix} or
16252 @option{--win32} with the second word containing single-letter options.
16254 @example
16255 $ @kbd{cat Makefile}
16256 all:
16257         @@echo MAKEFLAGS = $(MAKEFLAGS)
16258 $ @kbd{make}
16259 MAKEFLAGS = --unix
16260 $ @kbd{make -k}
16261 MAKEFLAGS = --unix -k
16262 @end example
16264 @node The Make Macro SHELL
16265 @section The Make Macro @code{SHELL}
16266 @cindex @code{SHELL} and @command{make}
16267 @cindex @command{make} and @code{SHELL}
16269 Posix-compliant @command{make} internally uses the @code{$(SHELL)}
16270 macro to spawn shell processes and execute Make rules.  This
16271 is a builtin macro supplied by @command{make}, but it can be modified
16272 by a makefile or by a command-line argument.
16274 Not all @command{make} implementations define this @code{SHELL} macro.
16275 Tru64
16276 @command{make} is an example; this implementation always uses
16277 @code{/bin/sh}.  So it's a good idea to always define @code{SHELL} in
16278 your makefiles.  If you use Autoconf, do
16280 @example
16281 SHELL = @@SHELL@@
16282 @end example
16284 Do not force @code{SHELL = /bin/sh} because that is not correct
16285 everywhere.  For instance @acronym{DJGPP} lacks @code{/bin/sh}, and when
16286 its @acronym{GNU} @code{make} port sees such a setting it enters a special
16287 emulation mode where features like pipes and redirections are emulated
16288 on top of DOS's @command{command.com}.  Unfortunately this emulation is
16289 incomplete; for instance it does not handle command substitutions.
16290 On @acronym{DJGPP} @code{SHELL} should point to Bash.
16292 Posix-compliant @command{make} should never acquire the value of
16293 $(SHELL) from the environment, even when @code{make -e} is used
16294 (otherwise, think about what would happen to your rules if
16295 @code{SHELL=/bin/tcsh}).
16297 However not all @command{make} implementations have this exception.
16298 For instance it's not surprising that Tru64 @command{make} doesn't
16299 protect @code{SHELL}, since it doesn't use it.
16301 @example
16302 $ @kbd{cat Makefile}
16303 SHELL = /bin/sh
16304 FOO = foo
16305 all:
16306         @@echo $(SHELL)
16307         @@echo $(FOO)
16308 $ @kbd{env SHELL=/bin/tcsh FOO=bar make -e}   # Tru64 Make
16309 /bin/tcsh
16311 $ @kbd{env SHELL=/bin/tcsh FOO=bar gmake -e}  # GNU make
16312 /bin/sh
16314 @end example
16316 @node Comments in Make Rules
16317 @section Comments in Make Rules
16318 @cindex Comments in @file{Makefile} rules
16319 @cindex @file{Makefile} rules and comments
16321 Never put comments in a rule.
16323 Some @command{make} treat anything starting with a tab as a command for
16324 the current rule, even if the tab is immediately followed by a @code{#}.
16325 The @command{make} from Tru64 Unix V5.1 is one of them.  The following
16326 makefile runs @code{# foo} through the shell.
16328 @example
16329 all:
16330         # foo
16331 @end example
16333 @node obj/ and Make
16334 @section The @file{obj/} Subdirectory and Make
16335 @cindex @file{obj/}, subdirectory
16336 @cindex @acronym{BSD} @command{make} and @file{obj/}
16338 Never name one of your subdirectories @file{obj/} if you don't like
16339 surprises.
16341 If an @file{obj/} directory exists, @acronym{BSD} @command{make} enters it
16342 before reading the makefile.  Hence the makefile in the
16343 current directory is not read.
16345 @example
16346 $ @kbd{cat Makefile}
16347 all:
16348         echo Hello
16349 $ @kbd{cat obj/Makefile}
16350 all:
16351         echo World
16352 $ @kbd{make}      # GNU make
16353 echo Hello
16354 Hello
16355 $ @kbd{pmake}     # BSD make
16356 echo World
16357 World
16358 @end example
16360 @node make -k Status
16361 @section Exit Status of @code{make -k}
16362 @cindex @code{make -k}
16364 Do not rely on the exit status of @code{make -k}.  Some implementations
16365 reflect whether they encountered an error in their exit status; other
16366 implementations always succeed.
16368 @example
16369 $ @kbd{cat Makefile}
16370 all:
16371         false
16372 $ @kbd{make -k; echo exit status: $?}    # GNU make
16373 false
16374 make: *** [all] Error 1
16375 exit status: 2
16376 $ @kbd{pmake -k; echo exit status: $?}   # BSD make
16377 false
16378 *** Error code 1 (continuing)
16379 exit status: 0
16380 @end example
16382 @node VPATH and Make
16383 @section @code{VPATH} and Make
16384 @cindex @code{VPATH}
16386 Posix does not specify the semantics of @code{VPATH}.  Typically,
16387 @command{make} supports @code{VPATH}, but its implementation is not
16388 consistent.
16390 Autoconf and Automake support makefiles whose usages of @code{VPATH} are
16391 portable to recent-enough popular implementations of @command{make}, but
16392 to keep the resulting makefiles portable, a package's makefile
16393 prototypes must take the following issues into account.  These issues
16394 are complicated and are often poorly understood, and installers who use
16395 @code{VPATH} should expect to find many bugs in this area.  If you use
16396 @code{VPATH}, the simplest way to avoid these portability bugs is to
16397 stick with @acronym{GNU} @command{make}, since it is the most
16398 commonly-used @command{make} among Autoconf users.
16400 Here are some known issues with some @code{VPATH}
16401 implementations.
16403 @menu
16404 * VPATH and Double-colon::      Problems with @samp{::} on ancient hosts
16405 * $< in Explicit Rules::        @code{$<} does not work in ordinary rules
16406 * Automatic Rule Rewriting::    @code{VPATH} goes wild on Solaris
16407 * Tru64 Directory Magic::       @command{mkdir} goes wild on Tru64
16408 * Make Target Lookup::          More details about @code{VPATH} lookup
16409 @end menu
16411 @node VPATH and Double-colon
16412 @subsection @code{VPATH} and Double-colon Rules
16413 @cindex @code{VPATH} and double-colon rules
16414 @cindex double-colon rules and @code{VPATH}
16416 With ancient versions of Sun @command{make},
16417 any assignment to @code{VPATH} causes @command{make} to execute only
16418 the first set of double-colon rules.
16419 However, this problem is no longer of practical concern.
16421 @node $< in Explicit Rules
16422 @subsection @code{$<} Not Supported in Explicit Rules
16423 @cindex explicit rules, @code{$<}, and @code{VPATH}
16424 @cindex @code{$<}, explicit rules, and @code{VPATH}
16425 @cindex @code{VPATH}, explicit rules, and @code{$<}
16427 Using @code{$<} in explicit rules is not portable.
16428 The prerequisite file must be named explicitly in the rule.  If you want
16429 to find the prerequisite via a @code{VPATH} search, you have to code the
16430 whole thing manually.  @xref{Build Directories}.
16432 @node Automatic Rule Rewriting
16433 @subsection Automatic Rule Rewriting
16434 @cindex @code{VPATH} and automatic rule rewriting
16435 @cindex automatic rule rewriting and @code{VPATH}
16437 Some @command{make} implementations, such as Solaris and Tru64,
16438 search for prerequisites in @code{VPATH} and
16439 then rewrite each occurrence as a plain word in the rule.
16440 For instance:
16442 @example
16443 # This isn't portable to GNU make.
16444 VPATH = ../pkg/src
16445 f.c: if.c
16446         cp if.c f.c
16447 @end example
16449 @noindent
16450 executes @code{cp ../pkg/src/if.c f.c} if @file{if.c} is
16451 found in @file{../pkg/src}.
16453 However, this rule leads to real problems in practice.  For example, if
16454 the source directory contains an ordinary file named @file{test} that is
16455 used in a dependency, Solaris @command{make} rewrites commands like
16456 @samp{if test -r foo; @dots{}} to @samp{if ../pkg/src/test -r foo;
16457 @dots{}}, which is typically undesirable.  To avoid this problem,
16458 portable makefiles should never mention a source file whose name is that
16459 of a shell keyword like @file{until} or a shell command like
16460 @command{cat} or @command{gcc} or @command{test}.
16462 Because of these problems @acronym{GNU} @command{make} and many other
16463 @command{make} implementations do not rewrite commands, so portable
16464 makefiles should
16465 search @code{VPATH} manually.  It is tempting to write this:
16467 @smallexample
16468 # This isn't portable to Solaris make.
16469 VPATH = ../pkg/src
16470 f.c: if.c
16471         cp `test -f if.c || echo $(VPATH)/`if.c f.c
16472 @end smallexample
16474 @noindent
16475 However, the ``prerequisite rewriting'' still applies here.  So if
16476 @file{if.c} is in @file{../pkg/src}, Solaris and Tru64 @command{make}
16477 execute
16479 @smallexample
16480 cp `test -f ../pkg/src/if.c || echo ../pkg/src/`if.c f.c
16481 @end smallexample
16483 @noindent
16484 which reduces to
16486 @example
16487 cp if.c f.c
16488 @end example
16490 @noindent
16491 and thus fails.  Oops.
16493 A simple workaround, and good practice anyway, is to use @samp{$?} and
16494 @samp{$@@} when possible:
16496 @smallexample
16497 VPATH = ../pkg/src
16498 f.c: if.c
16499         cp $? $@@
16500 @end smallexample
16502 @noindent
16503 but this does not generalize well to commands with multiple
16504 prerequisites.  A more general workaround is to rewrite the rule so that
16505 the prerequisite @file{if.c} never appears as a plain word.  For
16506 example, these three rules would be safe, assuming @file{if.c} is in
16507 @file{../pkg/src} and the other files are in the working directory:
16509 @smallexample
16510 VPATH = ../pkg/src
16511 f.c: if.c f1.c
16512         cat `test -f ./if.c || echo $(VPATH)/`if.c f1.c >$@@
16513 g.c: if.c g1.c
16514         cat `test -f 'if.c' || echo $(VPATH)/`if.c g1.c >$@@
16515 h.c: if.c h1.c
16516         cat `test -f "if.c" || echo $(VPATH)/`if.c h1.c >$@@
16517 @end smallexample
16519 Things get worse when your prerequisites are in a macro.
16521 @example
16522 VPATH = ../pkg/src
16523 HEADERS = f.h g.h h.h
16524 install-HEADERS: $(HEADERS)
16525         for i in $(HEADERS); do \
16526           $(INSTALL) -m 644 \
16527             `test -f $$i || echo $(VPATH)/`$$i \
16528             $(DESTDIR)$(includedir)/$$i; \
16529         done
16530 @end example
16532 The above @code{install-HEADERS} rule is not Solaris-proof because @code{for
16533 i in $(HEADERS);} is expanded to @code{for i in f.h g.h h.h;}
16534 where @code{f.h} and @code{g.h} are plain words and are hence
16535 subject to @code{VPATH} adjustments.
16537 If the three files are in @file{../pkg/src}, the rule is run as:
16539 @example
16540 for i in ../pkg/src/f.h ../pkg/src/g.h h.h; do \
16541   install -m 644 \
16542      `test -f $i || echo ../pkg/src/`$i \
16543      /usr/local/include/$i; \
16544 done
16545 @end example
16547 where the two first @command{install} calls fail.  For instance,
16548 consider the @code{f.h} installation:
16550 @example
16551 install -m 644 \
16552   `test -f ../pkg/src/f.h || \
16553     echo ../pkg/src/ \
16554   `../pkg/src/f.h \
16555   /usr/local/include/../pkg/src/f.h;
16556 @end example
16558 @noindent
16559 It reduces to:
16561 @example
16562 install -m 644 \
16563   ../pkg/src/f.h \
16564   /usr/local/include/../pkg/src/f.h;
16565 @end example
16567 Note that the manual @code{VPATH} search did not cause any problems here;
16568 however this command installs @file{f.h} in an incorrect directory.
16570 Trying to quote @code{$(HEADERS)} in some way, as we did for
16571 @code{foo.c} a few makefiles ago, does not help:
16573 @example
16574 install-HEADERS: $(HEADERS)
16575         headers='$(HEADERS)'; \
16576         for i in $$headers; do \
16577           $(INSTALL) -m 644 \
16578             `test -f $$i || echo $(VPATH)/`$$i \
16579             $(DESTDIR)$(includedir)/$$i; \
16580         done
16581 @end example
16583 Now, @code{headers='$(HEADERS)'} macro-expands to:
16585 @example
16586 headers='f.h g.h h.h'
16587 @end example
16589 @noindent
16590 but @code{g.h} is still a plain word.  (As an aside, the idiom
16591 @code{headers='$(HEADERS)'; for i in $$headers;} is a good
16592 idea if @code{$(HEADERS)} can be empty, because some shells diagnose a
16593 syntax error on @code{for i in;}.)
16595 One workaround is to strip this unwanted @file{../pkg/src/} prefix manually:
16597 @example
16598 VPATH = ../pkg/src
16599 HEADERS = f.h g.h h.h
16600 install-HEADERS: $(HEADERS)
16601         headers='$(HEADERS)'; \
16602         for i in $$headers; do \
16603           i=`expr "$$i" : '$(VPATH)/\(.*\)'`;
16604           $(INSTALL) -m 644 \
16605             `test -f $$i || echo $(VPATH)/`$$i \
16606             $(DESTDIR)$(includedir)/$$i; \
16607         done
16608 @end example
16610 Automake does something similar.  However the above hack works only if
16611 the files listed in @code{HEADERS} are in the current directory or a
16612 subdirectory; they should not be in an enclosing directory.  If we had
16613 @code{HEADERS = ../f.h}, the above fragment would fail in a VPATH
16614 build with Tru64 @command{make}.  The reason is that not only does
16615 Tru64 @command{make} rewrite dependencies, but it also simplifies
16616 them.  Hence @code{../f.h} becomes @code{../pkg/f.h} instead of
16617 @code{../pkg/src/../f.h}.  This obviously defeats any attempt to strip
16618 a leading @file{../pkg/src/} component.
16620 The following example makes the behavior of Tru64 @command{make}
16621 more apparent.
16623 @example
16624 $ @kbd{cat Makefile}
16625 VPATH = sub
16626 all: ../foo
16627         echo ../foo
16628 $ @kbd{ls}
16629 Makefile foo
16630 $ @kbd{make}
16631 echo foo
16633 @end example
16635 @noindent
16636 Dependency @file{../foo} was found in @file{sub/../foo}, but Tru64
16637 @command{make} simplified it as @file{foo}.  (Note that the @file{sub/}
16638 directory does not even exist, this just means that the simplification
16639 occurred before the file was checked for.)
16641 For the record here is how SunOS 4 @command{make} behaves on this
16642 example.
16644 @smallexample
16645 $ @kbd{make}
16646 make: Fatal error: Don't know how to make target `../foo'
16647 $ @kbd{mkdir sub}
16648 $ @kbd{make}
16649 echo sub/../foo
16650 sub/../foo
16651 @end smallexample
16654 @node Tru64 Directory Magic
16655 @subsection Tru64 @command{make} Creates Prerequisite Directories Magically
16656 @cindex @code{VPATH} and prerequisite directories
16657 @cindex prerequisite directories and @code{VPATH}
16659 When a prerequisite is a subdirectory of @code{VPATH}, Tru64
16660 @command{make} creates it in the current directory.
16662 @example
16663 $ @kbd{mkdir -p foo/bar build}
16664 $ @kbd{cd build}
16665 $ @kbd{cat >Makefile <<END
16666 VPATH = ..
16667 all: foo/bar
16668 END}
16669 $ @kbd{make}
16670 mkdir foo
16671 mkdir foo/bar
16672 @end example
16674 This can yield unexpected results if a rule uses a manual @code{VPATH}
16675 search as presented before.
16677 @example
16678 VPATH = ..
16679 all : foo/bar
16680         command `test -d foo/bar || echo ../`foo/bar
16681 @end example
16683 The above @command{command} is run on the empty @file{foo/bar}
16684 directory that was created in the current directory.
16686 @node Make Target Lookup
16687 @subsection Make Target Lookup
16688 @cindex @code{VPATH}, resolving target pathnames
16690 @acronym{GNU} @command{make} uses a complex algorithm to decide when it
16691 should use files found via a @code{VPATH} search.  @xref{Search
16692 Algorithm, , How Directory Searches are Performed, make, The @acronym{GNU} Make
16693 Manual}.
16695 If a target needs to be rebuilt, @acronym{GNU} @command{make} discards the
16696 file name found during the @code{VPATH} search for this target, and
16697 builds the file locally using the file name given in the makefile.
16698 If a target does not need to be rebuilt, @acronym{GNU} @command{make} uses the
16699 file name found during the @code{VPATH} search.
16701 Other @command{make} implementations, like Net@acronym{BSD} @command{make}, are
16702 easier to describe: the file name found during the @code{VPATH} search
16703 is used whether the target needs to be rebuilt or not.  Therefore
16704 new files are created locally, but existing files are updated at their
16705 @code{VPATH} location.
16707 Open@acronym{BSD} and Free@acronym{BSD} @command{make}, however,
16708 never perform a
16709 @code{VPATH} search for a dependency that has an explicit rule.
16710 This is extremely annoying.
16712 When attempting a @code{VPATH} build for an autoconfiscated package
16713 (e.g., @code{mkdir build && cd build && ../configure}), this means
16714 @acronym{GNU}
16715 @command{make} builds everything locally in the @file{build}
16716 directory, while @acronym{BSD} @command{make} builds new files locally and
16717 updates existing files in the source directory.
16719 @example
16720 $ @kbd{cat Makefile}
16721 VPATH = ..
16722 all: foo.x bar.x
16723 foo.x bar.x: newer.x
16724         @@echo Building $@@
16725 $ @kbd{touch ../bar.x}
16726 $ @kbd{touch ../newer.x}
16727 $ @kbd{make}        # GNU make
16728 Building foo.x
16729 Building bar.x
16730 $ @kbd{pmake}       # NetBSD make
16731 Building foo.x
16732 Building ../bar.x
16733 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
16734 Building foo.x
16735 Building bar.x
16736 $ @kbd{tmake}       # Tru64 make
16737 Building foo.x
16738 Building bar.x
16739 $ @kbd{touch ../bar.x}
16740 $ @kbd{make}        # GNU make
16741 Building foo.x
16742 $ @kbd{pmake}       # NetBSD make
16743 Building foo.x
16744 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
16745 Building foo.x
16746 Building bar.x
16747 $ @kbd{tmake}       # Tru64 make
16748 Building foo.x
16749 Building bar.x
16750 @end example
16752 Note how Net@acronym{BSD} @command{make} updates @file{../bar.x} in its
16753 VPATH location, and how Free@acronym{BSD}, Open@acronym{BSD}, and Tru64
16754 @command{make} always
16755 update @file{bar.x}, even when @file{../bar.x} is up to date.
16757 Another point worth mentioning is that once @acronym{GNU} @command{make} has
16758 decided to ignore a @code{VPATH} file name (e.g., it ignored
16759 @file{../bar.x} in the above example) it continues to ignore it when
16760 the target occurs as a prerequisite of another rule.
16762 The following example shows that @acronym{GNU} @command{make} does not look up
16763 @file{bar.x} in @code{VPATH} before performing the @code{.x.y} rule,
16764 because it ignored the @code{VPATH} result of @file{bar.x} while running
16765 the @code{bar.x: newer.x} rule.
16767 @example
16768 $ @kbd{cat Makefile}
16769 VPATH = ..
16770 all: bar.y
16771 bar.x: newer.x
16772         @@echo Building $@@
16773 .SUFFIXES: .x .y
16774 .x.y:
16775         cp $< $@@
16776 $ @kbd{touch ../bar.x}
16777 $ @kbd{touch ../newer.x}
16778 $ @kbd{make}        # GNU make
16779 Building bar.x
16780 cp bar.x bar.y
16781 cp: cannot stat `bar.x': No such file or directory
16782 make: *** [bar.y] Error 1
16783 $ @kbd{pmake}       # NetBSD make
16784 Building ../bar.x
16785 cp ../bar.x bar.y
16786 $ @kbd{rm bar.y}
16787 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
16788 echo Building bar.x
16789 cp bar.x bar.y
16790 cp: cannot stat `bar.x': No such file or directory
16791 *** Error code 1
16792 $ @kbd{tmake}       # Tru64 make
16793 Building bar.x
16794 cp: bar.x: No such file or directory
16795 *** Exit 1
16796 @end example
16798 Note that if you drop away the command from the @code{bar.x: newer.x}
16799 rule, @acronym{GNU} @command{make} magically starts to work: it
16800 knows that @code{bar.x} hasn't been updated, therefore it doesn't
16801 discard the result from @code{VPATH} (@file{../bar.x}) in succeeding
16802 uses.  Tru64 also works, but Free@acronym{BSD} and Open@acronym{BSD}
16803 still don't.
16805 @example
16806 $ @kbd{cat Makefile}
16807 VPATH = ..
16808 all: bar.y
16809 bar.x: newer.x
16810 .SUFFIXES: .x .y
16811 .x.y:
16812         cp $< $@@
16813 $ @kbd{touch ../bar.x}
16814 $ @kbd{touch ../newer.x}
16815 $ @kbd{make}        # GNU make
16816 cp ../bar.x bar.y
16817 $ @kbd{rm bar.y}
16818 $ @kbd{pmake}       # NetBSD make
16819 cp ../bar.x bar.y
16820 $ @kbd{rm bar.y}
16821 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
16822 cp bar.x bar.y
16823 cp: cannot stat `bar.x': No such file or directory
16824 *** Error code 1
16825 $ @kbd{tmake}       # Tru64 make
16826 cp ../bar.x bar.y
16827 @end example
16829 It seems the sole solution that would please every @command{make}
16830 implementation is to never rely on @code{VPATH} searches for targets.
16831 In other words, @code{VPATH} should be reserved to unbuilt sources.
16834 @node Single Suffix Rules
16835 @section Single Suffix Rules and Separated Dependencies
16836 @cindex Single Suffix Inference Rule
16837 @cindex Rule, Single Suffix Inference
16838 A @dfn{Single Suffix Rule} is basically a usual suffix (inference) rule
16839 (@samp{.from.to:}), but which @emph{destination} suffix is empty
16840 (@samp{.from:}).
16842 @cindex Separated Dependencies
16843 @dfn{Separated dependencies} simply refers to listing the prerequisite
16844 of a target, without defining a rule.  Usually one can list on the one
16845 hand side, the rules, and on the other hand side, the dependencies.
16847 Solaris @command{make} does not support separated dependencies for
16848 targets defined by single suffix rules:
16850 @example
16851 $ @kbd{cat Makefile}
16852 .SUFFIXES: .in
16853 foo: foo.in
16854 .in:
16855         cp $< $@@
16856 $ @kbd{touch foo.in}
16857 $ @kbd{make}
16858 $ @kbd{ls}
16859 Makefile  foo.in
16860 @end example
16862 @noindent
16863 while @acronym{GNU} Make does:
16865 @example
16866 $ @kbd{gmake}
16867 cp foo.in foo
16868 $ @kbd{ls}
16869 Makefile  foo       foo.in
16870 @end example
16872 Note it works without the @samp{foo: foo.in} dependency.
16874 @example
16875 $ @kbd{cat Makefile}
16876 .SUFFIXES: .in
16877 .in:
16878         cp $< $@@
16879 $ @kbd{make foo}
16880 cp foo.in foo
16881 @end example
16883 @noindent
16884 and it works with double suffix inference rules:
16886 @example
16887 $ @kbd{cat Makefile}
16888 foo.out: foo.in
16889 .SUFFIXES: .in .out
16890 .in.out:
16891         cp $< $@@
16892 $ @kbd{make}
16893 cp foo.in foo.out
16894 @end example
16896 As a result, in such a case, you have to write target rules.
16898 @node Timestamps and Make
16899 @section Timestamp Resolution and Make
16900 @cindex timestamp resolution
16901 Traditionally, file timestamps had 1-second resolution, and
16902 @command{make} used those timestamps to determine whether one file was
16903 newer than the other.  However, many modern file systems have
16904 timestamps with 1-nanosecond resolution.  Some @command{make}
16905 implementations look at the entire timestamp; others ignore the
16906 fractional part, which can lead to incorrect results.  Normally this
16907 is not a problem, but in some extreme cases you may need to use tricks
16908 like @samp{sleep 1} to work around timestamp truncation bugs.
16910 Commands like @samp{cp -p} and @samp{touch -r} typically do not copy
16911 file timestamps to their full resolutions (@pxref{Limitations of Usual
16912 Tools}).  Hence you should be wary of rules like this:
16914 @example
16915 dest: src
16916         cp -p src dest
16917 @end example
16919 as @file{dest} often appears to be older than @file{src} after the
16920 timestamp is truncated, and this can cause @command{make} to do
16921 needless rework the next time it is invoked.  To work around this
16922 problem, you can use a timestamp file, e.g.:
16924 @example
16925 dest-stamp: src
16926         cp -p src dest
16927         date >dest-stamp
16928 @end example
16933 @c ======================================== Portable C and C++ Programming
16935 @node Portable C and C++
16936 @chapter Portable C and C++ Programming
16937 @cindex Portable C and C++ programming
16939 C and C++ programs often use low-level features of the underlying
16940 system, and therefore are often more difficult to make portable to other
16941 platforms.
16943 Several standards have been developed to help make your programs more
16944 portable.  If you write programs with these standards in mind, you can
16945 have greater confidence that your programs work on a wide variety
16946 of systems.  @xref{Standards, , Language Standards Supported by
16947 @acronym{GCC}, gcc, Using the @acronym{GNU} Compiler Collection
16948 (@acronym{GCC})}, for a list of C-related
16949 standards.  Many programs also assume the
16950 @uref{http://www.opengroup.org/susv3, Posix standard}.
16952 Some old code is written to be portable to K&R C, which predates any C
16953 standard.  K&R C compilers are no longer of practical interest, though,
16954 and the rest of section assumes at least C89, the first C standard.
16956 Program portability is a huge topic, and this section can only briefly
16957 introduce common pitfalls.  @xref{System Portability, , Portability
16958 between System Types, standards, @acronym{GNU} Coding Standards}, for
16959 more information.
16961 @menu
16962 * Varieties of Unportability::  How to make your programs unportable
16963 * Integer Overflow::            When integers get too large
16964 * Preprocessor Arithmetic::     @code{#if} expression problems
16965 * Null Pointers::               Properties of null pointers
16966 * Buffer Overruns::             Subscript errors and the like
16967 * Volatile Objects::            @code{volatile} and signals
16968 * Floating Point Portability::  Portable floating-point arithmetic
16969 * Exiting Portably::            Exiting and the exit status
16970 @end menu
16972 @node Varieties of Unportability
16973 @section Varieties of Unportability
16974 @cindex portability
16976 Autoconf tests and ordinary programs often need to test what is allowed
16977 on a system, and therefore they may need to deliberately exceed the
16978 boundaries of what the standards allow, if only to see whether an
16979 optional feature is present.  When you write such a program, you should
16980 keep in mind the difference between constraints, unspecified behavior,
16981 and undefined behavior.
16983 In C, a @dfn{constraint} is a rule that the compiler must enforce.  An
16984 example constraint is that C programs must not declare a bit-field with
16985 negative width.  Tests can therefore reliably assume that programs with
16986 negative-width bit-fields are rejected by a compiler that conforms
16987 to the standard.
16989 @dfn{Unspecified behavior} is valid behavior, where the standard allows
16990 multiple possibilities.  For example, the order of evaluation of
16991 function arguments is unspecified.  Some unspecified behavior is
16992 @dfn{implementation-defined}, i.e., documented by the implementation,
16993 but since Autoconf tests cannot read the documentation they cannot
16994 distinguish between implementation-defined and other unspecified
16995 behavior.  It is common for Autoconf tests to probe implementations to
16996 determine otherwise-unspecified behavior.
16998 @dfn{Undefined behavior} is invalid behavior, where the standard allows
16999 the implementation to do anything it pleases.  For example,
17000 dereferencing a null pointer leads to undefined behavior.  If possible,
17001 test programs should avoid undefined behavior, since a program with
17002 undefined behavior might succeed on a test that should fail.
17004 The above rules apply to programs that are intended to conform to the
17005 standard.  However, strictly-conforming programs are quite rare, since
17006 the standards are so limiting.  A major goal of Autoconf is to support
17007 programs that use implementation features not described by the standard,
17008 and it is fairly common for test programs to violate the above rules, if
17009 the programs work well enough in practice.
17011 @node Integer Overflow
17012 @section Integer Overflow
17013 @cindex integer overflow
17014 @cindex overflow, signed integer
17015 @cindex signed integer overflow
17016 @cindex wraparound arithmetic
17018 In practice many portable C programs assume that signed integer overflow wraps
17019 around reliably using two's complement arithmetic.  Yet the C standard
17020 says that program behavior is undefined on overflow, and in a few cases
17021 C programs do not work on some modern implementations because their
17022 overflows do not wrap around as their authors expected.  Conversely, in
17023 signed integer remainder, the C standard requires overflow
17024 behavior that is commonly not implemented.
17026 @menu
17027 * Integer Overflow Basics::      Why integer overflow is a problem
17028 * Signed Overflow Examples::     Examples of code assuming wraparound
17029 * Optimization and Wraparound::  Optimizations that break uses of wraparound
17030 * Signed Overflow Advice::       Practical advice for signed overflow issues
17031 * Signed Integer Division::      @code{INT_MIN / -1} and @code{INT_MIN % -1}
17032 @end menu
17034 @node Integer Overflow Basics
17035 @subsection Basics of Integer Overflow
17036 @cindex integer overflow
17037 @cindex overflow, signed integer
17038 @cindex signed integer overflow
17039 @cindex wraparound arithmetic
17041 In languages like C, unsigned integer overflow reliably wraps around;
17042 e.g., @code{UINT_MAX + 1} yields zero.
17043 This is guaranteed by the C standard and is
17044 portable in practice, unless you specify aggressive,
17045 nonstandard optimization options
17046 suitable only for special applications.
17048 In contrast, the C standard says that signed integer overflow leads to
17049 undefined behavior where a program can do anything, including dumping
17050 core or overrunning a buffer.  The misbehavior can even precede the
17051 overflow.  Such an overflow can occur during addition, subtraction,
17052 multiplication, division, and left shift.
17054 Despite this requirement of the standard, many C programs and Autoconf
17055 tests assume that signed integer overflow silently wraps around modulo a
17056 power of two, using two's complement arithmetic, so long as you cast the
17057 resulting value to a signed integer type or store it into a signed
17058 integer variable.  If you use conservative optimization flags, such
17059 programs are generally portable to the vast majority of modern
17060 platforms, with a few exceptions discussed later.
17062 For historical reasons the C standard also allows implementations with
17063 ones' complement or signed magnitude arithmetic, but it is safe to
17064 assume two's complement nowadays.
17066 Also, overflow can occur when converting an out-of-range value to a
17067 signed integer type.  Here a standard implementation must define what
17068 happens, but this might include raising an exception.  In practice all
17069 known implementations support silent wraparound in this case, so you need
17070 not worry about other possibilities.
17072 @node Signed Overflow Examples
17073 @subsection Examples of Code Assuming Wraparound Overflow
17074 @cindex integer overflow
17075 @cindex overflow, signed integer
17076 @cindex signed integer overflow
17077 @cindex wraparound arithmetic
17079 There has long been a tension between what the C standard requires for
17080 signed integer overflow, and what C programs commonly assume.  The
17081 standard allows aggressive optimizations based on assumptions that
17082 overflow never occurs, but many practical C programs rely on overflow
17083 wrapping around.  These programs do not conform to the standard, but
17084 they commonly work in practice because compiler writers are
17085 understandably reluctant to implement optimizations that would break
17086 many programs, unless perhaps a user specifies aggressive optimization.
17088 The C Standard says that if a program has signed integer overflow its
17089 behavior is undefined, and the undefined behavior can even precede the
17090 overflow.  To take an extreme example:
17092 @c Inspired by Robert Dewar's example in
17093 @c <http://gcc.gnu.org/ml/gcc/2007-01/msg00038.html> (2007-01-01).
17094 @example
17095 if (password == expected_password)
17096   allow_superuser_privileges ();
17097 else if (counter++ == INT_MAX)
17098   abort ();
17099 else
17100   printf ("%d password mismatches\n", counter);
17101 @end example
17103 @noindent
17104 If the @code{int} variable @code{counter} equals @code{INT_MAX},
17105 @code{counter++} must overflow and the behavior is undefined, so the C
17106 standard allows the compiler to optimize away the test against
17107 @code{INT_MAX} and the @code{abort} call.
17108 Worse, if an earlier bug in the program lets the compiler deduce that
17109 @code{counter == INT_MAX} or that @code{counter} previously overflowed,
17110 the C standard allows the compiler to optimize away the password test
17111 and generate code that allows superuser privileges unconditionally.
17113 Despite this requirement by the standard, it has long been common for C
17114 code to assume wraparound arithmetic after signed overflow, and all
17115 known practical C implementations support some C idioms that assume
17116 wraparound signed arithmetic, even if the idioms do not conform
17117 strictly to the standard.  If your code looks like the following
17118 examples it will almost surely work with real-world compilers.
17120 Here is an example derived from the 7th Edition Unix implementation of
17121 @code{atoi} (1979-01-10):
17123 @example
17124 char *p;
17125 int f, n;
17126 @dots{}
17127 while (*p >= '0' && *p <= '9')
17128   n = n * 10 + *p++ - '0';
17129 return (f ? -n : n);
17130 @end example
17132 @noindent
17133 Even if the input string is in range, on most modern machines this has
17134 signed overflow when computing the most negative integer (the @code{-n}
17135 overflows) or a value near an extreme integer (the first @code{+}
17136 overflows).
17138 Here is another example, derived from the 7th Edition implementation of
17139 @code{rand} (1979-01-10).  Here the programmer expects both
17140 multiplication and addition to wrap on overflow:
17142 @example
17143 static long int randx = 1;
17144 @dots{}
17145 randx = randx * 1103515245 + 12345;
17146 return (randx >> 16) & 077777;
17147 @end example
17149 In the following example, derived from the @acronym{GNU} C Library 2.5
17150 implementation of @code{mktime} (2006-09-09), the code assumes
17151 wraparound arithmetic in @code{+} to detect signed overflow:
17153 @example
17154 time_t t, t1, t2;
17155 int sec_requested, sec_adjustment;
17156 @dots{}
17157 t1 = t + sec_requested;
17158 t2 = t1 + sec_adjustment;
17159 if (((t1 < t) != (sec_requested < 0))
17160     | ((t2 < t1) != (sec_adjustment < 0)))
17161   return -1;
17162 @end example
17164 If your code looks like these examples, it is probably safe even though
17165 it does not strictly conform to the C standard.  This might lead one to
17166 believe that one can generally assume wraparound on overflow, but that
17167 is not always true, as can be seen in the next section.
17169 @node Optimization and Wraparound
17170 @subsection Optimizations That Break Wraparound Arithmetic
17171 @cindex loop induction
17173 Compilers sometimes generate code that is incompatible with wraparound
17174 integer arithmetic.  A simple example is an algebraic simplification: a
17175 compiler might translate @code{(i * 2000) / 1000} to @code{i * 2}
17176 because it assumes that @code{i * 2000} does not overflow.  The
17177 translation is not equivalent to the original when overflow occurs:
17178 e.g., in the typical case of 32-bit signed two's complement wraparound
17179 @code{int}, if @code{i} has type @code{int} and value @code{1073742},
17180 the original expression returns @minus{}2147483 but the optimized
17181 version returns the mathematically correct value 2147484.
17183 More subtly, loop induction optimizations often exploit the undefined
17184 behavior of signed overflow.  Consider the following contrived function
17185 @code{sumc}:
17187 @example
17189 sumc (int lo, int hi)
17191   int sum = 0;
17192   int i;
17193   for (i = lo; i <= hi; i++)
17194     sum ^= i * 53;
17195   return sum;
17197 @end example
17199 @noindent
17200 To avoid multiplying by 53 each time through the loop, an optimizing
17201 compiler might internally transform @code{sumc} to the equivalent of the
17202 following:
17204 @example
17206 transformed_sumc (int lo, int hi)
17208   int sum = 0;
17209   int hic = hi * 53;
17210   int ic;
17211   for (ic = lo * 53; ic <= hic; ic += 53)
17212     sum ^= ic;
17213   return sum;
17215 @end example
17217 @noindent
17218 This transformation is allowed by the C standard, but it is invalid for
17219 wraparound arithmetic when @code{INT_MAX / 53 < hi}, because then the
17220 overflow in computing expressions like @code{hi * 53} can cause the
17221 expression @code{i <= hi} to yield a different value from the
17222 transformed expression @code{ic <= hic}.
17224 For this reason, compilers that use loop induction and similar
17225 techniques often do not support reliable wraparound arithmetic when a
17226 loop induction variable like @code{ic} is involved.  Since loop
17227 induction variables are generated by the compiler, and are not visible
17228 in the source code, it is not always trivial to say whether the problem
17229 affects your code.
17231 Hardly any code actually depends on wraparound arithmetic in cases like
17232 these, so in practice these loop induction optimizations are almost
17233 always useful.  However, edge cases in this area can cause problems.
17234 For example:
17236 @example
17237 int j;
17238 for (j = 1; 0 < j; j *= 2)
17239   test (j);
17240 @end example
17242 @noindent
17243 Here, the loop attempts to iterate through all powers of 2 that
17244 @code{int} can represent, but the C standard allows a compiler to
17245 optimize away the comparison and generate an infinite loop,
17246 under the argument that behavior is undefined on overflow.  As of this
17247 writing this optimization is not done by any production version of
17248 @acronym{GCC} with @option{-O2}, but it might be performed by other
17249 compilers, or by more aggressive @acronym{GCC} optimization options,
17250 and the @acronym{GCC} developers have not decided whether it will
17251 continue to work with @acronym{GCC} and @option{-O2}.
17253 @node Signed Overflow Advice
17254 @subsection Practical Advice for Signed Overflow Issues
17255 @cindex integer overflow
17256 @cindex overflow, signed integer
17257 @cindex signed integer overflow
17258 @cindex wraparound arithmetic
17260 Ideally the safest approach is to avoid signed integer overflow
17261 entirely.  For example, instead of multiplying two signed integers, you
17262 can convert them to unsigned integers, multiply the unsigned values,
17263 then test whether the result is in signed range.
17265 Rewriting code in this way will be inconvenient, though, particularly if
17266 the signed values might be negative.  Also, it may hurt
17267 performance.  Using unsigned arithmetic to check for overflow is
17268 particularly painful to do portably and efficiently when dealing with an
17269 integer type like @code{uid_t} whose width and signedness vary from
17270 platform to platform.
17272 Furthermore, many C applications pervasively assume wraparound behavior
17273 and typically it is not easy to find and remove all these assumptions.
17274 Hence it is often useful to maintain nonstandard code that assumes
17275 wraparound on overflow, instead of rewriting the code.  The rest of this
17276 section attempts to give practical advice for this situation.
17278 If your code wants to detect signed integer overflow in @code{sum = a +
17279 b}, it is generally safe to use an expression like @code{(sum < a) != (b
17280 < 0)}.
17282 If your code uses a signed loop index, make sure that the index cannot
17283 overflow, along with all signed expressions derived from the index.
17284 Here is a contrived example of problematic code with two instances of
17285 overflow.
17287 @example
17288 for (i = INT_MAX - 10; i <= INT_MAX; i++)
17289   if (i + 1 < 0)
17290     @{
17291       report_overflow ();
17292       break;
17293     @}
17294 @end example
17296 @noindent
17297 Because of the two overflows, a compiler might optimize away or
17298 transform the two comparisons in a way that is incompatible with the
17299 wraparound assumption.
17301 If your code uses an expression like @code{(i * 2000) / 1000} and you
17302 actually want the multiplication to wrap around on overflow, use
17303 unsigned arithmetic
17304 to do it, e.g., @code{((int) (i * 2000u)) / 1000}.
17306 If your code assumes wraparound behavior and you want to insulate it
17307 against any @acronym{GCC} optimizations that would fail to support that
17308 behavior, you should use @acronym{GCC}'s @option{-fwrapv} option, which
17309 causes signed overflow to wrap around reliably (except for division and
17310 remainder, as discussed in the next section).
17312 If you need to port to platforms where signed integer overflow does not
17313 reliably wrap around (e.g., due to hardware overflow checking, or to
17314 highly aggressive optimizations), you should consider debugging with
17315 @acronym{GCC}'s @option{-ftrapv} option, which causes signed overflow to
17316 raise an exception.
17318 @node Signed Integer Division
17319 @subsection Signed Integer Division and Integer Overflow
17320 @cindex division, integer
17322 Overflow in signed
17323 integer division is not always harmless: for example, on CPUs of the
17324 i386 family, dividing @code{INT_MIN} by @code{-1} yields a SIGFPE signal
17325 which by default terminates the program.  Worse, taking the remainder
17326 of these two values typically yields the same signal on these CPUs,
17327 even though the C standard requires @code{INT_MIN % -1} to yield zero
17328 because the expression does not overflow.
17330 @node Preprocessor Arithmetic
17331 @section Preprocessor Arithmetic
17332 @cindex preprocessor arithmetic
17334 In C99, preprocessor arithmetic, used for @code{#if} expressions, must
17335 be evaluated as if all signed values are of type @code{intmax_t} and all
17336 unsigned values of type @code{uintmax_t}.  Many compilers are buggy in
17337 this area, though.  For example, as of 2007, Sun C mishandles @code{#if
17338 LLONG_MIN < 0} on a platform with 32-bit @code{long int} and 64-bit
17339 @code{long long int}.  Also, some older preprocessors mishandle
17340 constants ending in @code{LL}.  To work around these problems, you can
17341 compute the value of expressions like @code{LONG_MAX < LLONG_MAX} at
17342 @code{configure}-time rather than at @code{#if}-time.
17344 @node Null Pointers
17345 @section Properties of Null Pointers
17346 @cindex null pointers
17348 Most modern hosts reliably fail when you attempt to dereference a null
17349 pointer.
17351 On almost all modern hosts, null pointers use an all-bits-zero internal
17352 representation, so you can reliably use @code{memset} with 0 to set all
17353 the pointers in an array to null values.
17355 If @code{p} is a null pointer to an object type, the C expression
17356 @code{p + 0} always evaluates to @code{p} on modern hosts, even though
17357 the standard says that it has undefined behavior.
17359 @node Buffer Overruns
17360 @section Buffer Overruns and Subscript Errors
17361 @cindex buffer overruns
17363 Buffer overruns and subscript errors are the most common dangerous
17364 errors in C programs.  They result in undefined behavior because storing
17365 outside an array typically modifies storage that is used by some other
17366 object, and most modern systems lack runtime checks to catch these
17367 errors.  Programs should not rely on buffer overruns being caught.
17369 There is one exception to the usual rule that a portable program cannot
17370 address outside an array.  In C, it is valid to compute the address just
17371 past an object, e.g., @code{&a[N]} where @code{a} has @code{N} elements,
17372 so long as you do not dereference the resulting pointer.  But it is not
17373 valid to compute the address just before an object, e.g., @code{&a[-1]};
17374 nor is it valid to compute two past the end, e.g., @code{&a[N+1]}.  On
17375 most platforms @code{&a[-1] < &a[0] && &a[N] < &a[N+1]}, but this is not
17376 reliable in general, and it is usually easy enough to avoid the
17377 potential portability problem, e.g., by allocating an extra unused array
17378 element at the start or end.
17380 @uref{http://valgrind.org/, Valgrind} can catch many overruns.
17381 @acronym{GCC}
17382 users might also consider using the @option{-fmudflap} option to catch
17383 overruns.
17385 Buffer overruns are usually caused by off-by-one errors, but there are
17386 more subtle ways to get them.
17388 Using @code{int} values to index into an array or compute array sizes
17389 causes problems on typical 64-bit hosts where an array index might
17390 be @math{2^31} or larger.  Index values of type @code{size_t} avoid this
17391 problem, but cannot be negative.  Index values of type @code{ptrdiff_t}
17392 are signed, and are wide enough in practice.
17394 If you add or multiply two numbers to calculate an array size, e.g.,
17395 @code{malloc (x * sizeof y + z)}, havoc ensues if the addition or
17396 multiplication overflows.
17398 Many implementations of the @code{alloca} function silently misbehave
17399 and can generate buffer overflows if given sizes that are too large.
17400 The size limits are implementation dependent, but are at least 4000
17401 bytes on all platforms that we know about.
17403 The standard functions @code{asctime}, @code{asctime_r}, @code{ctime},
17404 @code{ctime_r}, and @code{gets} are prone to buffer overflows, and
17405 portable code should not use them unless the inputs are known to be
17406 within certain limits.  The time-related functions can overflow their
17407 buffers if given timestamps out of range (e.g., a year less than -999
17408 or greater than 9999).  Time-related buffer overflows cannot happen with
17409 recent-enough versions of the @acronym{GNU} C library, but are possible
17410 with other
17411 implementations.  The @code{gets} function is the worst, since it almost
17412 invariably overflows its buffer when presented with an input line larger
17413 than the buffer.
17415 @node Volatile Objects
17416 @section Volatile Objects
17417 @cindex volatile objects
17419 The keyword @code{volatile} is often misunderstood in portable code.
17420 Its use inhibits some memory-access optimizations, but programmers often
17421 wish that it had a different meaning than it actually does.
17423 @code{volatile} was designed for code that accesses special objects like
17424 memory-mapped device registers whose contents spontaneously change.
17425 Such code is inherently low-level, and it is difficult to specify
17426 portably what @code{volatile} means in these cases.  The C standard
17427 says, ``What constitutes an access to an object that has
17428 volatile-qualified type is implementation-defined,'' so in theory each
17429 implementation is supposed to fill in the gap by documenting what
17430 @code{volatile} means for that implementation.  In practice, though,
17431 this documentation is usually absent or incomplete.
17433 One area of confusion is the distinction between objects defined with
17434 volatile types, and volatile lvalues.  From the C standard's point of
17435 view, an object defined with a volatile type has externally visible
17436 behavior.  You can think of such objects as having little oscilloscope
17437 probes attached to them, so that the user can observe some properties of
17438 accesses to them, just as the user can observe data written to output
17439 files.  However, the standard does not make it clear whether users can
17440 observe accesses by volatile lvalues to ordinary objects.  For example:
17442 @example
17443 /* Declare and access a volatile object.
17444    Accesses to X are "visible" to users.  */
17445 static int volatile x;
17446 x = 1;
17448 /* Access two ordinary objects via a volatile lvalue.
17449    It's not clear whether accesses to *P are "visible".  */
17450 int y;
17451 int *z = malloc (sizeof (int));
17452 int volatile *p;
17453 p = &y;
17454 *p = 1;
17455 p = z;
17456 *p = 1;
17457 @end example
17459 Programmers often wish that @code{volatile} meant ``Perform the memory
17460 access here and now, without merging several memory accesses, without
17461 changing the memory word size, and without reordering.''  But the C
17462 standard does not require this.  For objects defined with a volatile
17463 type, accesses must be done before the next sequence point; but
17464 otherwise merging, reordering, and word-size change is allowed.  Worse,
17465 it is not clear from the standard whether volatile lvalues provide more
17466 guarantees in general than nonvolatile lvalues, if the underlying
17467 objects are ordinary.
17469 Even when accessing objects defined with a volatile type,
17470 the C standard allows only
17471 extremely limited signal handlers: the behavior is undefined if a signal
17472 handler reads any nonlocal object, or writes to any nonlocal object
17473 whose type is not @code{sig_atomic_t volatile}, or calls any standard
17474 library function other than @code{abort}, @code{signal}, and (if C99)
17475 @code{_Exit}.  Hence C compilers need not worry about a signal handler
17476 disturbing ordinary computation, unless the computation accesses a
17477 @code{sig_atomic_t volatile} lvalue that is not a local variable.
17478 (There is an obscure exception for accesses via a pointer to a volatile
17479 character, since it may point into part of a @code{sig_atomic_t
17480 volatile} object.)  Posix
17481 adds to the list of library functions callable from a portable signal
17482 handler, but otherwise is like the C standard in this area.
17484 Some C implementations allow memory-access optimizations within each
17485 translation unit, such that actual behavior agrees with the behavior
17486 required by the standard only when calling a function in some other
17487 translation unit, and a signal handler acts like it was called from a
17488 different translation unit.  The C standard hints that in these
17489 implementations, objects referred to by signal handlers ``would require
17490 explicit specification of @code{volatile} storage, as well as other
17491 implementation-defined restrictions.''  But unfortunately even for this
17492 special case these other restrictions are often not documented well.
17493 @xref{Volatiles, , When is a Volatile Object Accessed?, gcc, Using the
17494 @acronym{GNU} Compiler Collection (@acronym{GCC})}, for some
17495 restrictions imposed by @acronym{GCC}.  @xref{Defining Handlers, ,
17496 Defining Signal Handlers, libc, The @acronym{GNU} C Library}, for some
17497 restrictions imposed by the @acronym{GNU} C library.  Restrictions
17498 differ on other platforms.
17500 If possible, it is best to use a signal handler that fits within the
17501 limits imposed by the C and Posix standards.
17503 If this is not practical, you can try the following rules of thumb.  A
17504 signal handler should access only volatile lvalues, preferably lvalues
17505 that refer to objects defined with a volatile type, and should not
17506 assume that the accessed objects have an internally consistent state
17507 if they are larger than a machine word.  Furthermore, installers
17508 should employ compilers and compiler options that are commonly used
17509 for building operating system kernels, because kernels often need more
17510 from @code{volatile} than the C Standard requires, and installers who
17511 compile an application in a similar environment can sometimes benefit
17512 from the extra constraints imposed by kernels on compilers.
17513 Admittedly we are handwaving somewhat here, as there are few
17514 guarantees in this area; the rules of thumb may help to fix some bugs
17515 but there is a good chance that they will not fix them all.
17517 For @code{volatile}, C++ has the same problems that C does.
17518 Multithreaded applications have even more problems with @code{volatile},
17519 but they are beyond the scope of this section.
17521 The bottom line is that using @code{volatile} typically hurts
17522 performance but should not hurt correctness.  In some cases its use
17523 does help correctness, but these cases are often so poorly understood
17524 that all too often adding @code{volatile} to a data structure merely
17525 alleviates some symptoms of a bug while not fixing the bug in general.
17527 @node Floating Point Portability
17528 @section Floating Point Portability
17529 @cindex floating point
17531 Almost all modern systems use IEEE-754 floating point, and it is safe to
17532 assume IEEE-754 in most portable code these days.  For more information,
17533 please see David Goldberg's classic paper
17534 @uref{http://www.validlab.com/goldberg/paper.pdf, What Every Computer
17535 Scientist Should Know About Floating-Point Arithmetic}.
17537 @node Exiting Portably
17538 @section Exiting Portably
17539 @cindex exiting portably
17541 A C or C++ program can exit with status @var{N} by returning
17542 @var{N} from the @code{main} function.  Portable programs are supposed
17543 to exit either with status 0 or @code{EXIT_SUCCESS} to succeed, or with
17544 status @code{EXIT_FAILURE} to fail, but in practice it is portable to
17545 fail by exiting with status 1, and test programs that assume Posix can
17546 fail by exiting with status values from 1 through 255.  Programs on
17547 SunOS 2.0 (1985) through 3.5.2 (1988) incorrectly exited with zero
17548 status when @code{main} returned nonzero, but ancient systems like these
17549 are no longer of practical concern.
17551 A program can also exit with status @var{N} by passing @var{N} to the
17552 @code{exit} function, and a program can fail by calling the @code{abort}
17553 function.  If a program is specialized to just some platforms, it can fail
17554 by calling functions specific to those platforms, e.g., @code{_exit}
17555 (Posix) and @code{_Exit} (C99).  However, like other functions, an exit
17556 function should be declared, typically by including a header.  For
17557 example, if a C program calls @code{exit}, it should include @file{stdlib.h}
17558 either directly or via the default includes (@pxref{Default Includes}).
17560 A program can fail due to undefined behavior such as dereferencing a null
17561 pointer, but this is not recommended as undefined behavior allows an
17562 implementation to do whatever it pleases and this includes exiting
17563 successfully.
17566 @c ================================================== Manual Configuration
17568 @node Manual Configuration
17569 @chapter Manual Configuration
17571 A few kinds of features can't be guessed automatically by running test
17572 programs.  For example, the details of the object-file format, or
17573 special options that need to be passed to the compiler or linker.  You
17574 can check for such features using ad-hoc means, such as having
17575 @command{configure} check the output of the @code{uname} program, or
17576 looking for libraries that are unique to particular systems.  However,
17577 Autoconf provides a uniform method for handling unguessable features.
17579 @menu
17580 * Specifying Names::            Specifying the system type
17581 * Canonicalizing::              Getting the canonical system type
17582 * Using System Type::           What to do with the system type
17583 @end menu
17585 @node Specifying Names
17586 @section Specifying the System Type
17587 @cindex System type
17589 Autoconf-generated
17590 @command{configure} scripts can make decisions based on a canonical name
17591 for the system type, which has the form:
17592 @samp{@var{cpu}-@var{vendor}-@var{os}}, where @var{os} can be
17593 @samp{@var{system}} or @samp{@var{kernel}-@var{system}}
17595 @command{configure} can usually guess the canonical name for the type of
17596 system it's running on.  To do so it runs a script called
17597 @command{config.guess}, which infers the name using the @code{uname}
17598 command or symbols predefined by the C preprocessor.
17600 Alternately, the user can specify the system type with command line
17601 arguments to @command{configure}.  Doing so is necessary when
17602 cross-compiling.  In the most complex case of cross-compiling, three
17603 system types are involved.  The options to specify them are:
17605 @table @option
17606 @item --build=@var{build-type}
17607 the type of system on which the package is being configured and
17608 compiled.  It defaults to the result of running @command{config.guess}.
17610 @item --host=@var{host-type}
17611 the type of system on which the package runs.  By default it is the
17612 same as the build machine.  Specifying it enables the cross-compilation
17613 mode.
17615 @item --target=@var{target-type}
17616 the type of system for which any compiler tools in the package
17617 produce code (rarely needed).  By default, it is the same as host.
17618 @end table
17620 If you mean to override the result of @command{config.guess}, use
17621 @option{--build}, not @option{--host}, since the latter enables
17622 cross-compilation.  For historical reasons,
17623 whenever you specify @option{--host},
17624 be sure to specify @option{--build} too; this will be fixed in the
17625 future.  So, to enter cross-compilation mode, use a command like this
17627 @example
17628 ./configure --build=i686-pc-linux-gnu --host=m68k-coff
17629 @end example
17631 @noindent
17632 Note that if you do not specify @option{--host}, @command{configure}
17633 fails if it can't run the code generated by the specified compiler.  For
17634 example, configuring as follows fails:
17636 @example
17637 ./configure CC=m68k-coff-gcc
17638 @end example
17640 In the future, when cross-compiling Autoconf will @emph{not}
17641 accept tools (compilers, linkers, assemblers) whose name is not
17642 prefixed with the host type.  The only case when this may be
17643 useful is when you really are not cross-compiling, but only
17644 building for a least-common-denominator architecture: an example
17645 is building for @code{i386-pc-linux-gnu} while running on an
17646 @code{i686-pc-linux-gnu} architecture.  In this case, some particular
17647 pairs might be similar enough to let you get away with the system
17648 compilers, but in general the compiler might make bogus assumptions
17649 on the host: if you know what you are doing, please create symbolic
17650 links from the host compiler to the build compiler.
17652 @cindex @command{config.sub}
17653 @command{configure} recognizes short aliases for many system types; for
17654 example, @samp{decstation} can be used instead of
17655 @samp{mips-dec-ultrix4.2}.  @command{configure} runs a script called
17656 @command{config.sub} to canonicalize system type aliases.
17658 This section deliberately omits the description of the obsolete
17659 interface; see @ref{Hosts and Cross-Compilation}.
17662 @node Canonicalizing
17663 @section Getting the Canonical System Type
17664 @cindex System type
17665 @cindex Canonical system type
17667 The following macros make the system type available to @command{configure}
17668 scripts.
17670 @ovindex build_alias
17671 @ovindex host_alias
17672 @ovindex target_alias
17674 The variables @samp{build_alias}, @samp{host_alias}, and
17675 @samp{target_alias} are always exactly the arguments of @option{--build},
17676 @option{--host}, and @option{--target}; in particular, they are left empty
17677 if the user did not use them, even if the corresponding
17678 @code{AC_CANONICAL} macro was run.  Any configure script may use these
17679 variables anywhere.  These are the variables that should be used when in
17680 interaction with the user.
17682 If you need to recognize some special environments based on their system
17683 type, run the following macros to get canonical system names.  These
17684 variables are not set before the macro call.
17686 If you use these macros, you must distribute @command{config.guess} and
17687 @command{config.sub} along with your source code.  @xref{Output}, for
17688 information about the @code{AC_CONFIG_AUX_DIR} macro which you can use
17689 to control in which directory @command{configure} looks for those scripts.
17692 @defmac AC_CANONICAL_BUILD
17693 @acindex{CANONICAL_BUILD}
17694 @ovindex build
17695 @ovindex build_cpu
17696 @ovindex build_vendor
17697 @ovindex build_os
17698 Compute the canonical build-system type variable, @code{build}, and its
17699 three individual parts @code{build_cpu}, @code{build_vendor}, and
17700 @code{build_os}.
17702 If @option{--build} was specified, then @code{build} is the
17703 canonicalization of @code{build_alias} by @command{config.sub},
17704 otherwise it is determined by the shell script @command{config.guess}.
17705 @end defmac
17707 @defmac AC_CANONICAL_HOST
17708 @acindex{CANONICAL_HOST}
17709 @ovindex host
17710 @ovindex host_cpu
17711 @ovindex host_vendor
17712 @ovindex host_os
17713 Compute the canonical host-system type variable, @code{host}, and its
17714 three individual parts @code{host_cpu}, @code{host_vendor}, and
17715 @code{host_os}.
17717 If @option{--host} was specified, then @code{host} is the
17718 canonicalization of @code{host_alias} by @command{config.sub},
17719 otherwise it defaults to @code{build}.
17720 @end defmac
17722 @defmac AC_CANONICAL_TARGET
17723 @acindex{CANONICAL_TARGET}
17724 @ovindex target
17725 @ovindex target_cpu
17726 @ovindex target_vendor
17727 @ovindex target_os
17728 Compute the canonical target-system type variable, @code{target}, and its
17729 three individual parts @code{target_cpu}, @code{target_vendor}, and
17730 @code{target_os}.
17732 If @option{--target} was specified, then @code{target} is the
17733 canonicalization of @code{target_alias} by @command{config.sub},
17734 otherwise it defaults to @code{host}.
17735 @end defmac
17737 Note that there can be artifacts due to the backward compatibility
17738 code.  See @xref{Hosts and Cross-Compilation}, for more.
17740 @node Using System Type
17741 @section Using the System Type
17743 In @file{configure.ac} the system type is generally used by one or more
17744 @code{case} statements to select system-specifics.  Shell wildcards can
17745 be used to match a group of system types.
17747 For example, an extra assembler code object file could be chosen, giving
17748 access to a CPU cycle counter register.  @code{$(CYCLE_OBJ)} in the
17749 following would be used in a makefile to add the object to a
17750 program or library.
17752 @example
17753 case $host in
17754   alpha*-*-*) CYCLE_OBJ=rpcc.o ;;
17755   i?86-*-*)   CYCLE_OBJ=rdtsc.o ;;
17756   *)          CYCLE_OBJ= ;;
17757 esac
17758 AC_SUBST([CYCLE_OBJ])
17759 @end example
17761 @code{AC_CONFIG_LINKS} (@pxref{Configuration Links}) is another good way
17762 to select variant source files, for example optimized code for some
17763 CPUs.  The configured CPU type doesn't always indicate exact CPU types,
17764 so some runtime capability checks may be necessary too.
17766 @example
17767 case $host in
17768   alpha*-*-*)   AC_CONFIG_LINKS([dither.c:alpha/dither.c]) ;;
17769   powerpc*-*-*) AC_CONFIG_LINKS([dither.c:powerpc/dither.c]) ;;
17770   *-*-*)        AC_CONFIG_LINKS([dither.c:generic/dither.c]) ;;
17771 esac
17772 @end example
17774 The host system type can also be used to find cross-compilation tools
17775 with @code{AC_CHECK_TOOL} (@pxref{Generic Programs}).
17777 The above examples all show @samp{$host}, since this is where the code
17778 is going to run.  Only rarely is it necessary to test @samp{$build}
17779 (which is where the build is being done).
17781 Whenever you're tempted to use @samp{$host} it's worth considering
17782 whether some sort of probe would be better.  New system types come along
17783 periodically or previously missing features are added.  Well-written
17784 probes can adapt themselves to such things, but hard-coded lists of
17785 names can't.  Here are some guidelines,
17787 @itemize @bullet
17788 @item
17789 Availability of libraries and library functions should always be checked
17790 by probing.
17791 @item
17792 Variant behavior of system calls is best identified with runtime tests
17793 if possible, but bug workarounds or obscure difficulties might have to
17794 be driven from @samp{$host}.
17795 @item
17796 Assembler code is inevitably highly CPU-specific and is best selected
17797 according to @samp{$host_cpu}.
17798 @item
17799 Assembler variations like underscore prefix on globals or ELF versus
17800 COFF type directives are however best determined by probing, perhaps
17801 even examining the compiler output.
17802 @end itemize
17804 @samp{$target} is for use by a package creating a compiler or similar.
17805 For ordinary packages it's meaningless and should not be used.  It
17806 indicates what the created compiler should generate code for, if it can
17807 cross-compile.  @samp{$target} generally selects various hard-coded CPU
17808 and system conventions, since usually the compiler or tools under
17809 construction themselves determine how the target works.
17812 @c ===================================================== Site Configuration.
17814 @node Site Configuration
17815 @chapter Site Configuration
17817 @command{configure} scripts support several kinds of local configuration
17818 decisions.  There are ways for users to specify where external software
17819 packages are, include or exclude optional features, install programs
17820 under modified names, and set default values for @command{configure}
17821 options.
17823 @menu
17824 * Help Formatting::             Customizing @samp{configure --help}
17825 * External Software::           Working with other optional software
17826 * Package Options::             Selecting optional features
17827 * Pretty Help Strings::         Formatting help string
17828 * Option Checking::             Controlling checking of @command{configure} options
17829 * Site Details::                Configuring site details
17830 * Transforming Names::          Changing program names when installing
17831 * Site Defaults::               Giving @command{configure} local defaults
17832 @end menu
17834 @node Help Formatting
17835 @section Controlling Help Output
17837 Users consult @samp{configure --help} to learn of configuration
17838 decisions specific to your package.  By default, @command{configure}
17839 breaks this output into sections for each type of option; within each
17840 section, help strings appear in the order @file{configure.ac} defines
17841 them:
17843 @example
17844 Optional Features:
17845   @dots{}
17846   --enable-bar            include bar
17848 Optional Packages:
17849   @dots{}
17850   --with-foo              use foo
17851 @end example
17853 @defmac AC_PRESERVE_HELP_ORDER
17854 @acindex{PRESERVE_HELP_ORDER}
17856 Request an alternate @option{--help} format, in which options of all
17857 types appear together, in the order defined.  Call this macro before any
17858 @code{AC_ARG_ENABLE} or @code{AC_ARG_WITH}.
17860 @example
17861 Optional Features and Packages:
17862   @dots{}
17863   --enable-bar            include bar
17864   --with-foo              use foo
17865 @end example
17867 @end defmac
17869 @node External Software
17870 @section Working With External Software
17871 @cindex External software
17873 Some packages require, or can optionally use, other software packages
17874 that are already installed.  The user can give @command{configure}
17875 command line options to specify which such external software to use.
17876 The options have one of these forms:
17878 @c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
17879 @c awful.
17880 @example
17881 --with-@var{package}[=@var{arg}]
17882 --without-@var{package}
17883 @end example
17885 For example, @option{--with-gnu-ld} means work with the @acronym{GNU} linker
17886 instead of some other linker.  @option{--with-x} means work with The X
17887 Window System.
17889 The user can give an argument by following the package name with
17890 @samp{=} and the argument.  Giving an argument of @samp{no} is for
17891 packages that are used by default; it says to @emph{not} use the
17892 package.  An argument that is neither @samp{yes} nor @samp{no} could
17893 include a name or number of a version of the other package, to specify
17894 more precisely which other package this program is supposed to work
17895 with.  If no argument is given, it defaults to @samp{yes}.
17896 @option{--without-@var{package}} is equivalent to
17897 @option{--with-@var{package}=no}.
17899 Normally @command{configure} scripts complain about
17900 @option{--with-@var{package}} options that they do not support.
17901 @xref{Option Checking}, for details, and for how to override the
17902 defaults.
17904 For each external software package that may be used, @file{configure.ac}
17905 should call @code{AC_ARG_WITH} to detect whether the @command{configure}
17906 user asked to use it.  Whether each package is used or not by default,
17907 and which arguments are valid, is up to you.
17909 @anchor{AC_ARG_WITH}
17910 @defmac AC_ARG_WITH (@var{package}, @var{help-string}, @
17911   @ovar{action-if-given}, @ovar{action-if-not-given})
17912 @acindex{ARG_WITH}
17913 If the user gave @command{configure} the option @option{--with-@var{package}}
17914 or @option{--without-@var{package}}, run shell commands
17915 @var{action-if-given}.  If neither option was given, run shell commands
17916 @var{action-if-not-given}.  The name @var{package} indicates another
17917 software package that this program should work with.  It should consist
17918 only of alphanumeric characters, dashes, and dots.
17920 The option's argument is available to the shell commands
17921 @var{action-if-given} in the shell variable @code{withval}, which is
17922 actually just the value of the shell variable named
17923 @code{with_@var{package}}, with any non-alphanumeric characters in
17924 @var{package} changed into @samp{_}.  You may use that variable instead,
17925 if you wish.
17927 The argument @var{help-string} is a description of the option that
17928 looks like this:
17929 @example
17930   --with-readline         support fancy command line editing
17931 @end example
17933 @noindent
17934 @var{help-string} may be more than one line long, if more detail is
17935 needed.  Just make sure the columns line up in @samp{configure
17936 --help}.  Avoid tabs in the help string.  You'll need to enclose the
17937 help string in @samp{[} and @samp{]} in order to produce the leading
17938 blanks.
17940 You should format your @var{help-string} with the macro
17941 @code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
17943 The following example shows how to use the @code{AC_ARG_WITH} macro in
17944 a common situation.  You want to let the user decide whether to enable
17945 support for an external library (e.g., the readline library); if the user
17946 specified neither @option{--with-readline} nor @option{--without-readline},
17947 you want to enable support for readline only if the library is available
17948 on the system.
17950 @c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
17951 @example
17952 AC_ARG_WITH([readline],
17953   [AS_HELP_STRING([--with-readline],
17954     [support fancy command line editing @@<:@@default=check@@:>@@])],
17955   [],
17956   [with_readline=check])
17958 LIBREADLINE=
17959 AS_IF([test "x$with_readline" != xno],
17960   [AC_CHECK_LIB([readline], [main],
17961     [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
17962      AC_DEFINE([HAVE_LIBREADLINE], [1],
17963                [Define if you have libreadline])
17964     ],
17965     [if test "x$with_readline" != xcheck; then
17966        AC_MSG_FAILURE(
17967          [--with-readline was given, but test for readline failed])
17968      fi
17969     ], -lncurses)])
17970 @end example
17972 The next example shows how to use @code{AC_ARG_WITH} to give the user the
17973 possibility to enable support for the readline library, in case it is still
17974 experimental and not well tested, and is therefore disabled by default.
17976 @c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
17977 @example
17978 AC_ARG_WITH([readline],
17979   [AS_HELP_STRING([--with-readline],
17980     [enable experimental support for readline])],
17981   [],
17982   [with_readline=no])
17984 LIBREADLINE=
17985 AS_IF([test "x$with_readline" != xno],
17986   [AC_CHECK_LIB([readline], [main],
17987     [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
17988      AC_DEFINE([HAVE_LIBREADLINE], [1],
17989                [Define if you have libreadline])
17990     ],
17991     [AC_MSG_FAILURE(
17992        [--with-readline was given, but test for readline failed])],
17993     [-lncurses])])
17994 @end example
17996 The last example shows how to use @code{AC_ARG_WITH} to give the user the
17997 possibility to disable support for the readline library, given that it is
17998 an important feature and that it should be enabled by default.
18000 @c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
18001 @example
18002 AC_ARG_WITH([readline],
18003   [AS_HELP_STRING([--without-readline],
18004     [disable support for readline])],
18005   [],
18006   [with_readline=yes])
18008 LIBREADLINE=
18009 AS_IF([test "x$with_readline" != xno],
18010   [AC_CHECK_LIB([readline], [main],
18011     [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
18012      AC_DEFINE([HAVE_LIBREADLINE], [1],
18013                [Define if you have libreadline])
18014     ],
18015     [AC_MSG_FAILURE(
18016        [readline test failed (--without-readline to disable)])],
18017     [-lncurses])])
18018 @end example
18020 These three examples can be easily adapted to the case where
18021 @code{AC_ARG_ENABLE} should be preferred to @code{AC_ARG_WITH} (see
18022 @ref{Package Options}).
18023 @end defmac
18025 @node Package Options
18026 @section Choosing Package Options
18027 @cindex Package options
18028 @cindex Options, package
18030 If a software package has optional compile-time features, the user can
18031 give @command{configure} command line options to specify whether to
18032 compile them.  The options have one of these forms:
18034 @c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
18035 @c awful.
18036 @example
18037 --enable-@var{feature}[=@var{arg}]
18038 --disable-@var{feature}
18039 @end example
18041 These options allow users to choose which optional features to build and
18042 install.  @option{--enable-@var{feature}} options should never make a
18043 feature behave differently or cause one feature to replace another.
18044 They should only cause parts of the program to be built rather than left
18045 out.
18047 The user can give an argument by following the feature name with
18048 @samp{=} and the argument.  Giving an argument of @samp{no} requests
18049 that the feature @emph{not} be made available.  A feature with an
18050 argument looks like @option{--enable-debug=stabs}.  If no argument is
18051 given, it defaults to @samp{yes}.  @option{--disable-@var{feature}} is
18052 equivalent to @option{--enable-@var{feature}=no}.
18054 Normally @command{configure} scripts complain about
18055 @option{--enable-@var{package}} options that they do not support.
18056 @xref{Option Checking}, for details, and for how to override the
18057 defaults.
18059 For each optional feature, @file{configure.ac} should call
18060 @code{AC_ARG_ENABLE} to detect whether the @command{configure} user asked
18061 to include it.  Whether each feature is included or not by default, and
18062 which arguments are valid, is up to you.
18064 @anchor{AC_ARG_ENABLE}
18065 @defmac AC_ARG_ENABLE (@var{feature}, @var{help-string}, @
18066   @ovar{action-if-given}, @ovar{action-if-not-given})
18067 @acindex{ARG_ENABLE}
18068 If the user gave @command{configure} the option
18069 @option{--enable-@var{feature}} or @option{--disable-@var{feature}}, run
18070 shell commands @var{action-if-given}.  If neither option was given, run
18071 shell commands @var{action-if-not-given}.  The name @var{feature}
18072 indicates an optional user-level facility.  It should consist only of
18073 alphanumeric characters, dashes, and dots.
18075 The option's argument is available to the shell commands
18076 @var{action-if-given} in the shell variable @code{enableval}, which is
18077 actually just the value of the shell variable named
18078 @code{enable_@var{feature}}, with any non-alphanumeric characters in
18079 @var{feature} changed into @samp{_}.  You may use that variable instead,
18080 if you wish.  The @var{help-string} argument is like that of
18081 @code{AC_ARG_WITH} (@pxref{External Software}).
18083 You should format your @var{help-string} with the macro
18084 @code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
18086 See the examples suggested with the definition of @code{AC_ARG_WITH}
18087 (@pxref{External Software}) to get an idea of possible applications of
18088 @code{AC_ARG_ENABLE}.
18089 @end defmac
18091 @node Pretty Help Strings
18092 @section Making Your Help Strings Look Pretty
18093 @cindex Help strings
18095 Properly formatting the @samp{help strings} which are used in
18096 @code{AC_ARG_WITH} (@pxref{External Software}) and @code{AC_ARG_ENABLE}
18097 (@pxref{Package Options}) can be challenging.  Specifically, you want
18098 your own @samp{help strings} to line up in the appropriate columns of
18099 @samp{configure --help} just like the standard Autoconf @samp{help
18100 strings} do.  This is the purpose of the @code{AS_HELP_STRING} macro.
18102 @anchor{AS_HELP_STRING}
18103 @defmac AS_HELP_STRING (@var{left-hand-side}, @var{right-hand-side} @
18104   @dvar{indent-column, 26}, @dvar{wrap-column, 79})
18105 @asindex{HELP_STRING}
18107 Expands into an help string that looks pretty when the user executes
18108 @samp{configure --help}.  It is typically used in @code{AC_ARG_WITH}
18109 (@pxref{External Software}) or @code{AC_ARG_ENABLE} (@pxref{Package
18110 Options}).  The following example makes this clearer.
18112 @example
18113 AC_ARG_WITH([foo],
18114   [AS_HELP_STRING([--with-foo],
18115      [use foo (default is no)])],
18116   [use_foo=$withval],
18117   [use_foo=no])
18118 @end example
18120 Then the last few lines of @samp{configure --help} appear like
18121 this:
18123 @example
18124 --enable and --with options recognized:
18125   --with-foo              use foo (default is no)
18126 @end example
18128 Macro expansion is performed on the first argument.  However, the second
18129 argument of @code{AS_HELP_STRING} is treated as a whitespace separated
18130 list of text to be reformatted, and is not subject to macro expansion.
18131 Since it is not expanded, it should not be double quoted.
18132 @xref{Autoconf Language}, for a more detailed explanation.
18134 The @code{AS_HELP_STRING} macro is particularly helpful when the
18135 @var{left-hand-side} and/or @var{right-hand-side} are composed of macro
18136 arguments, as shown in the following example.  Be aware that
18137 @var{left-hand-side} may not expand to unbalanced quotes,
18138 although quadrigraphs can be used.
18140 @example
18141 AC_DEFUN([MY_ARG_WITH],
18142   [AC_ARG_WITH(m4_translit([[$1]], [_], [-]),
18143      [AS_HELP_STRING([--with-m4_translit([$1], [_], [-])],
18144                      [use $1 (default is $2)])],
18145      [use_[]$1=$withval],
18146      [use_[]$1=$2])])
18147 MY_ARG_WITH([a_b], [no])
18148 @end example
18149 @noindent
18150 Here, the last few lines of @samp{configure --help} will include:
18152 @example
18153 --enable and --with options recognized:
18154   --with-a-b              use a_b (default is no)
18155 @end example
18157 The parameters @var{indent-column} and @var{wrap-column} were introduced
18158 in Autoconf 2.62.  Generally, they should not be specified; they exist
18159 for fine-tuning of the wrapping.
18160 @example
18161 AS_HELP_STRING([--option], [description of option])
18162 @result{}  --option                description of option
18163 AS_HELP_STRING([--option], [description of option], [15], [30])
18164 @result{}  --option     description of
18165 @result{}               option
18166 @end example
18167 @end defmac
18170 @node Option Checking
18171 @section Controlling Checking of @command{configure} Options
18172 @cindex Options, Package
18174 The @command{configure} script checks its command-line options against a
18175 list of known options, like @option{--help} or @option{--config-cache}.
18176 An unknown option ordinarily indicates a mistake by the user and
18177 @command{configure} halts with an error.  However, by default unknown
18178 @option{--with-@var{package}} and @option{--enable-@var{feature}}
18179 options elicit only a warning, to support configuring entire source
18180 trees.
18182 Source trees often contain multiple packages with a top-level
18183 @command{configure} script that uses the @code{AC_CONFIG_SUBDIRS} macro
18184 (@pxref{Subdirectories}).  Because the packages generally support
18185 different @option{--with-@var{package}} and
18186 @option{--enable-@var{feature}} options, the @acronym{GNU} Coding
18187 Standards say they must accept unrecognized options without halting.
18188 Even a warning message is undesirable here, so @code{AC_CONFIG_SUBDIRS}
18189 automatically disables the warnings.
18191 This default behavior may be modified in two ways.  First, the installer
18192 can invoke @command{configure --disable-option-checking} to disable
18193 these warnings, or invoke @command{configure --enable-option-checking=fatal}
18194 options to turn them into fatal errors, respectively.  Second, the
18195 maintainer can use @code{AC_DISABLE_OPTION_CHECKING}.
18197 @defmac AC_DISABLE_OPTION_CHECKING
18198 @acindex{DISABLE_OPTION_CHECKING}
18200 By default, disable warnings related to any unrecognized
18201 @option{--with-@var{package}} or @option{--enable-@var{feature}}
18202 options.  This is implied by @code{AC_CONFIG_SUBDIRS}.
18204 The installer can override this behavior by passing
18205 @option{--enable-option-checking} (enable warnings) or
18206 @option{--enable-option-checking=fatal} (enable errors) to
18207 @command{configure}.
18208 @end defmac
18211 @node Site Details
18212 @section Configuring Site Details
18213 @cindex Site details
18215 Some software packages require complex site-specific information.  Some
18216 examples are host names to use for certain services, company names, and
18217 email addresses to contact.  Since some configuration scripts generated
18218 by Metaconfig ask for such information interactively, people sometimes
18219 wonder how to get that information in Autoconf-generated configuration
18220 scripts, which aren't interactive.
18222 Such site configuration information should be put in a file that is
18223 edited @emph{only by users}, not by programs.  The location of the file
18224 can either be based on the @code{prefix} variable, or be a standard
18225 location such as the user's home directory.  It could even be specified
18226 by an environment variable.  The programs should examine that file at
18227 runtime, rather than at compile time.  Runtime configuration is more
18228 convenient for users and makes the configuration process simpler than
18229 getting the information while configuring.  @xref{Directory Variables, ,
18230 Variables for Installation Directories, standards, @acronym{GNU} Coding
18231 Standards}, for more information on where to put data files.
18233 @node Transforming Names
18234 @section Transforming Program Names When Installing
18235 @cindex Transforming program names
18236 @cindex Program names, transforming
18238 Autoconf supports changing the names of programs when installing them.
18239 In order to use these transformations, @file{configure.ac} must call the
18240 macro @code{AC_ARG_PROGRAM}.
18242 @defmac AC_ARG_PROGRAM
18243 @acindex{ARG_PROGRAM}
18244 @ovindex program_transform_name
18245 Place in output variable @code{program_transform_name} a sequence of
18246 @code{sed} commands for changing the names of installed programs.
18248 If any of the options described below are given to @command{configure},
18249 program names are transformed accordingly.  Otherwise, if
18250 @code{AC_CANONICAL_TARGET} has been called and a @option{--target} value
18251 is given, the target type followed by a dash is used as a prefix.
18252 Otherwise, no program name transformation is done.
18253 @end defmac
18255 @menu
18256 * Transformation Options::      @command{configure} options to transform names
18257 * Transformation Examples::     Sample uses of transforming names
18258 * Transformation Rules::        Makefile uses of transforming names
18259 @end menu
18261 @node Transformation Options
18262 @subsection Transformation Options
18264 You can specify name transformations by giving @command{configure} these
18265 command line options:
18267 @table @option
18268 @item --program-prefix=@var{prefix}
18269 prepend @var{prefix} to the names;
18271 @item --program-suffix=@var{suffix}
18272 append @var{suffix} to the names;
18274 @item --program-transform-name=@var{expression}
18275 perform @code{sed} substitution @var{expression} on the names.
18276 @end table
18278 @node Transformation Examples
18279 @subsection Transformation Examples
18281 These transformations are useful with programs that can be part of a
18282 cross-compilation development environment.  For example, a
18283 cross-assembler running on a Sun 4 configured with
18284 @option{--target=i960-vxworks} is normally installed as
18285 @file{i960-vxworks-as}, rather than @file{as}, which could be confused
18286 with a native Sun 4 assembler.
18288 You can force a program name to begin with @file{g}, if you don't want
18289 @acronym{GNU} programs installed on your system to shadow other programs with
18290 the same name.  For example, if you configure @acronym{GNU} @code{diff} with
18291 @option{--program-prefix=g}, then when you run @samp{make install} it is
18292 installed as @file{/usr/local/bin/gdiff}.
18294 As a more sophisticated example, you could use
18296 @example
18297 --program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
18298 @end example
18299 @noindent
18301 to prepend @samp{g} to most of the program names in a source tree,
18302 excepting those like @code{gdb} that already have one and those like
18303 @code{less} and @code{lesskey} that aren't @acronym{GNU} programs.  (That is
18304 assuming that you have a source tree containing those programs that is
18305 set up to use this feature.)
18307 One way to install multiple versions of some programs simultaneously is
18308 to append a version number to the name of one or both.  For example, if
18309 you want to keep Autoconf version 1 around for awhile, you can configure
18310 Autoconf version 2 using @option{--program-suffix=2} to install the
18311 programs as @file{/usr/local/bin/autoconf2},
18312 @file{/usr/local/bin/autoheader2}, etc.  Nevertheless, pay attention
18313 that only the binaries are renamed, therefore you'd have problems with
18314 the library files which might overlap.
18316 @node Transformation Rules
18317 @subsection Transformation Rules
18319 Here is how to use the variable @code{program_transform_name} in a
18320 @file{Makefile.in}:
18322 @example
18323 PROGRAMS = cp ls rm
18324 transform = @@program_transform_name@@
18325 install:
18326         for p in $(PROGRAMS); do \
18327           $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | \
18328                                               sed '$(transform)'`; \
18329         done
18331 uninstall:
18332         for p in $(PROGRAMS); do \
18333           rm -f $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; \
18334         done
18335 @end example
18337 It is guaranteed that @code{program_transform_name} is never empty, and
18338 that there are no useless separators.  Therefore you may safely embed
18339 @code{program_transform_name} within a sed program using @samp{;}:
18341 @example
18342 transform = @@program_transform_name@@
18343 transform_exe = s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/
18344 @end example
18346 Whether to do the transformations on documentation files (Texinfo or
18347 @code{man}) is a tricky question; there seems to be no perfect answer,
18348 due to the several reasons for name transforming.  Documentation is not
18349 usually particular to a specific architecture, and Texinfo files do not
18350 conflict with system documentation.  But they might conflict with
18351 earlier versions of the same files, and @code{man} pages sometimes do
18352 conflict with system documentation.  As a compromise, it is probably
18353 best to do name transformations on @code{man} pages but not on Texinfo
18354 manuals.
18356 @node Site Defaults
18357 @section Setting Site Defaults
18358 @cindex Site defaults
18360 Autoconf-generated @command{configure} scripts allow your site to provide
18361 default values for some configuration values.  You do this by creating
18362 site- and system-wide initialization files.
18364 @evindex CONFIG_SITE
18365 If the environment variable @code{CONFIG_SITE} is set, @command{configure}
18366 uses its value as the name of a shell script to read.  Otherwise, it
18367 reads the shell script @file{@var{prefix}/share/config.site} if it exists,
18368 then @file{@var{prefix}/etc/config.site} if it exists.  Thus,
18369 settings in machine-specific files override those in machine-independent
18370 ones in case of conflict.
18372 Site files can be arbitrary shell scripts, but only certain kinds of
18373 code are really appropriate to be in them.  Because @command{configure}
18374 reads any cache file after it has read any site files, a site file can
18375 define a default cache file to be shared between all Autoconf-generated
18376 @command{configure} scripts run on that system (@pxref{Cache Files}).  If
18377 you set a default cache file in a site file, it is a good idea to also
18378 set the output variable @code{CC} in that site file, because the cache
18379 file is only valid for a particular compiler, but many systems have
18380 several available.
18382 You can examine or override the value set by a command line option to
18383 @command{configure} in a site file; options set shell variables that have
18384 the same names as the options, with any dashes turned into underscores.
18385 The exceptions are that @option{--without-} and @option{--disable-} options
18386 are like giving the corresponding @option{--with-} or @option{--enable-}
18387 option and the value @samp{no}.  Thus, @option{--cache-file=localcache}
18388 sets the variable @code{cache_file} to the value @samp{localcache};
18389 @option{--enable-warnings=no} or @option{--disable-warnings} sets the variable
18390 @code{enable_warnings} to the value @samp{no}; @option{--prefix=/usr} sets the
18391 variable @code{prefix} to the value @samp{/usr}; etc.
18393 Site files are also good places to set default values for other output
18394 variables, such as @code{CFLAGS}, if you need to give them non-default
18395 values: anything you would normally do, repetitively, on the command
18396 line.  If you use non-default values for @var{prefix} or
18397 @var{exec_prefix} (wherever you locate the site file), you can set them
18398 in the site file if you specify it with the @code{CONFIG_SITE}
18399 environment variable.
18401 You can set some cache values in the site file itself.  Doing this is
18402 useful if you are cross-compiling, where it is impossible to check features
18403 that require running a test program.  You could ``prime the cache'' by
18404 setting those values correctly for that system in
18405 @file{@var{prefix}/etc/config.site}.  To find out the names of the cache
18406 variables you need to set, look for shell variables with @samp{_cv_} in
18407 their names in the affected @command{configure} scripts, or in the Autoconf
18408 M4 source code for those macros.
18410 The cache file is careful to not override any variables set in the site
18411 files.  Similarly, you should not override command-line options in the
18412 site files.  Your code should check that variables such as @code{prefix}
18413 and @code{cache_file} have their default values (as set near the top of
18414 @command{configure}) before changing them.
18416 Here is a sample file @file{/usr/share/local/gnu/share/config.site}.  The
18417 command @samp{configure --prefix=/usr/share/local/gnu} would read this
18418 file (if @code{CONFIG_SITE} is not set to a different file).
18420 @example
18421 # config.site for configure
18423 # Change some defaults.
18424 test "$prefix" = NONE && prefix=/usr/share/local/gnu
18425 test "$exec_prefix" = NONE && exec_prefix=/usr/local/gnu
18426 test "$sharedstatedir" = '$@{prefix@}/com' && sharedstatedir=/var
18427 test "$localstatedir" = '$@{prefix@}/var' && localstatedir=/var
18429 # Give Autoconf 2.x generated configure scripts a shared default
18430 # cache file for feature test results, architecture-specific.
18431 if test "$cache_file" = /dev/null; then
18432   cache_file="$prefix/var/config.cache"
18433   # A cache file is only valid for one C compiler.
18434   CC=gcc
18436 @end example
18438 @cindex Filesystem Hierarchy Standard
18439 @cindex FHS
18441 Another use of @file{config.site} is for priming the directory variables
18442 in a manner consistent with the Filesystem Hierarchy Standard
18443 (@acronym{FHS}).  Once the following file is installed at
18444 @file{/usr/share/config.site}, a user can execute simply
18445 @command{./configure --prefix=/usr} to get all the directories chosen in
18446 the locations recommended by @acronym{FHS}.
18448 @example
18449 # /usr/local/config.site for FHS defaults when installing below /usr,
18450 # and the respective settings were not changed on the command line.
18451 if test "$prefix" = /usr; then
18452   test "$sysconfdir" = '$@{prefix@}/etc' && sysconfdir=/etc
18453   test "$sharedstatedir" = '$@{prefix@}/com' && sharedstatedir=/var
18454   test "$localstatedir" = '$@{prefix@}/var' && localstatedir=/var
18456 @end example
18459 @c ============================================== Running configure Scripts.
18461 @node Running configure Scripts
18462 @chapter Running @command{configure} Scripts
18463 @cindex @command{configure}
18465 Below are instructions on how to configure a package that uses a
18466 @command{configure} script, suitable for inclusion as an @file{INSTALL}
18467 file in the package.  A plain-text version of @file{INSTALL} which you
18468 may use comes with Autoconf.
18470 @menu
18471 * Basic Installation::          Instructions for typical cases
18472 * Compilers and Options::       Selecting compilers and optimization
18473 * Multiple Architectures::      Compiling for multiple architectures at once
18474 * Installation Names::          Installing in different directories
18475 * Optional Features::           Selecting optional features
18476 * System Type::                 Specifying the system type
18477 * Sharing Defaults::            Setting site-wide defaults for @command{configure}
18478 * Defining Variables::          Specifying the compiler etc.
18479 * configure Invocation::        Changing how @command{configure} runs
18480 @end menu
18482 @set autoconf
18483 @include install.texi
18486 @c ============================================== config.status Invocation
18488 @node config.status Invocation
18489 @chapter config.status Invocation
18490 @cindex @command{config.status}
18492 The @command{configure} script creates a file named @file{config.status},
18493 which actually configures, @dfn{instantiates}, the template files.  It
18494 also records the configuration options that were specified when the
18495 package was last configured in case reconfiguring is needed.
18497 Synopsis:
18498 @example
18499 ./config.status @var{option}@dots{} [@var{file}@dots{}]
18500 @end example
18502 It configures the @var{files}; if none are specified, all the templates
18503 are instantiated.  The files must be specified without their
18504 dependencies, as in
18506 @example
18507 ./config.status foobar
18508 @end example
18510 @noindent
18513 @example
18514 ./config.status foobar:foo.in:bar.in
18515 @end example
18517 The supported options are:
18519 @table @option
18520 @item --help
18521 @itemx -h
18522 Print a summary of the command line options, the list of the template
18523 files, and exit.
18525 @item --version
18526 @itemx -V
18527 Print the version number of Autoconf and the configuration settings,
18528 and exit.
18530 @item --silent
18531 @itemx --quiet
18532 @itemx -q
18533 Do not print progress messages.
18535 @item --debug
18536 @itemx -d
18537 Don't remove the temporary files.
18539 @item --file=@var{file}[:@var{template}]
18540 Require that @var{file} be instantiated as if
18541 @samp{AC_CONFIG_FILES(@var{file}:@var{template})} was used.  Both
18542 @var{file} and @var{template} may be @samp{-} in which case the standard
18543 output and/or standard input, respectively, is used.  If a
18544 @var{template} file name is relative, it is first looked for in the build
18545 tree, and then in the source tree.  @xref{Configuration Actions}, for
18546 more details.
18548 This option and the following ones provide one way for separately
18549 distributed packages to share the values computed by @command{configure}.
18550 Doing so can be useful if some of the packages need a superset of the
18551 features that one of them, perhaps a common library, does.  These
18552 options allow a @file{config.status} file to create files other than the
18553 ones that its @file{configure.ac} specifies, so it can be used for a
18554 different package.
18556 @item --header=@var{file}[:@var{template}]
18557 Same as @option{--file} above, but with @samp{AC_CONFIG_HEADERS}.
18559 @item --recheck
18560 Ask @file{config.status} to update itself and exit (no instantiation).
18561 This option is useful if you change @command{configure}, so that the
18562 results of some tests might be different from the previous run.  The
18563 @option{--recheck} option reruns @command{configure} with the same arguments
18564 you used before, plus the @option{--no-create} option, which prevents
18565 @command{configure} from running @file{config.status} and creating
18566 @file{Makefile} and other files, and the @option{--no-recursion} option,
18567 which prevents @command{configure} from running other @command{configure}
18568 scripts in subdirectories.  (This is so other Make rules can
18569 run @file{config.status} when it changes; @pxref{Automatic Remaking},
18570 for an example).
18571 @end table
18573 @file{config.status} checks several optional environment variables that
18574 can alter its behavior:
18576 @defvar CONFIG_SHELL
18577 @evindex CONFIG_SHELL
18578 The shell with which to run @command{configure} for the @option{--recheck}
18579 option.  It must be Bourne-compatible.  The default is a shell that
18580 supports @code{LINENO} if available, and @file{/bin/sh} otherwise.
18581 Invoking @command{configure} by hand bypasses this setting, so you may
18582 need to use a command like @samp{CONFIG_SHELL=/bin/bash /bin/bash ./configure}
18583 to insure that the same shell is used everywhere.  The absolute name of the
18584 shell should be passed.
18585 @end defvar
18587 @defvar CONFIG_STATUS
18588 @evindex CONFIG_STATUS
18589 The file name to use for the shell script that records the
18590 configuration.  The default is @file{./config.status}.  This variable is
18591 useful when one package uses parts of another and the @command{configure}
18592 scripts shouldn't be merged because they are maintained separately.
18593 @end defvar
18595 You can use @file{./config.status} in your makefiles.  For example, in
18596 the dependencies given above (@pxref{Automatic Remaking}),
18597 @file{config.status} is run twice when @file{configure.ac} has changed.
18598 If that bothers you, you can make each run only regenerate the files for
18599 that rule:
18600 @example
18601 @group
18602 config.h: stamp-h
18603 stamp-h: config.h.in config.status
18604         ./config.status config.h
18605         echo > stamp-h
18607 Makefile: Makefile.in config.status
18608         ./config.status Makefile
18609 @end group
18610 @end example
18612 The calling convention of @file{config.status} has changed; see
18613 @ref{Obsolete config.status Use}, for details.
18616 @c =================================================== Obsolete Constructs
18618 @node Obsolete Constructs
18619 @chapter Obsolete Constructs
18620 @cindex Obsolete constructs
18622 Autoconf changes, and throughout the years some constructs have been
18623 obsoleted.  Most of the changes involve the macros, but in some cases
18624 the tools themselves, or even some concepts, are now considered
18625 obsolete.
18627 You may completely skip this chapter if you are new to Autoconf.  Its
18628 intention is mainly to help maintainers updating their packages by
18629 understanding how to move to more modern constructs.
18631 @menu
18632 * Obsolete config.status Use::  Obsolete convention for @command{config.status}
18633 * acconfig Header::             Additional entries in @file{config.h.in}
18634 * autoupdate Invocation::       Automatic update of @file{configure.ac}
18635 * Obsolete Macros::             Backward compatibility macros
18636 * Autoconf 1::                  Tips for upgrading your files
18637 * Autoconf 2.13::               Some fresher tips
18638 @end menu
18640 @node Obsolete config.status Use
18641 @section Obsolete @file{config.status} Invocation
18643 @file{config.status} now supports arguments to specify the files to
18644 instantiate; see @ref{config.status Invocation}, for more details.
18645 Before, environment variables had to be used.
18647 @defvar CONFIG_COMMANDS
18648 @evindex CONFIG_COMMANDS
18649 The tags of the commands to execute.  The default is the arguments given
18650 to @code{AC_OUTPUT} and @code{AC_CONFIG_COMMANDS} in
18651 @file{configure.ac}.
18652 @end defvar
18654 @defvar CONFIG_FILES
18655 @evindex CONFIG_FILES
18656 The files in which to perform @samp{@@@var{variable}@@} substitutions.
18657 The default is the arguments given to @code{AC_OUTPUT} and
18658 @code{AC_CONFIG_FILES} in @file{configure.ac}.
18659 @end defvar
18661 @defvar CONFIG_HEADERS
18662 @evindex CONFIG_HEADERS
18663 The files in which to substitute C @code{#define} statements.  The
18664 default is the arguments given to @code{AC_CONFIG_HEADERS}; if that
18665 macro was not called, @file{config.status} ignores this variable.
18666 @end defvar
18668 @defvar CONFIG_LINKS
18669 @evindex CONFIG_LINKS
18670 The symbolic links to establish.  The default is the arguments given to
18671 @code{AC_CONFIG_LINKS}; if that macro was not called,
18672 @file{config.status} ignores this variable.
18673 @end defvar
18675 In @ref{config.status Invocation}, using this old interface, the example
18676 would be:
18678 @example
18679 @group
18680 config.h: stamp-h
18681 stamp-h: config.h.in config.status
18682         CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_FILES= \
18683           CONFIG_HEADERS=config.h ./config.status
18684         echo > stamp-h
18686 Makefile: Makefile.in config.status
18687         CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_HEADERS= \
18688           CONFIG_FILES=Makefile ./config.status
18689 @end group
18690 @end example
18692 @noindent
18693 (If @file{configure.ac} does not call @code{AC_CONFIG_HEADERS}, there is
18694 no need to set @code{CONFIG_HEADERS} in the @code{make} rules.  Equally
18695 for @code{CONFIG_COMMANDS}, etc.)
18698 @node acconfig Header
18699 @section @file{acconfig.h}
18701 @cindex @file{acconfig.h}
18702 @cindex @file{config.h.top}
18703 @cindex @file{config.h.bot}
18705 In order to produce @file{config.h.in}, @command{autoheader} needs to
18706 build or to find templates for each symbol.  Modern releases of Autoconf
18707 use @code{AH_VERBATIM} and @code{AH_TEMPLATE} (@pxref{Autoheader
18708 Macros}), but in older releases a file, @file{acconfig.h}, contained the
18709 list of needed templates.  @command{autoheader} copied comments and
18710 @code{#define} and @code{#undef} statements from @file{acconfig.h} in
18711 the current directory, if present.  This file used to be mandatory if
18712 you @code{AC_DEFINE} any additional symbols.
18714 Modern releases of Autoconf also provide @code{AH_TOP} and
18715 @code{AH_BOTTOM} if you need to prepend/append some information to
18716 @file{config.h.in}.  Ancient versions of Autoconf had a similar feature:
18717 if @file{./acconfig.h} contains the string @samp{@@TOP@@},
18718 @command{autoheader} copies the lines before the line containing
18719 @samp{@@TOP@@} into the top of the file that it generates.  Similarly,
18720 if @file{./acconfig.h} contains the string @samp{@@BOTTOM@@},
18721 @command{autoheader} copies the lines after that line to the end of the
18722 file it generates.  Either or both of those strings may be omitted.  An
18723 even older alternate way to produce the same effect in ancient versions
18724 of Autoconf is to create the files @file{@var{file}.top} (typically
18725 @file{config.h.top}) and/or @file{@var{file}.bot} in the current
18726 directory.  If they exist, @command{autoheader} copies them to the
18727 beginning and end, respectively, of its output.
18729 In former versions of Autoconf, the files used in preparing a software
18730 package for distribution were:
18731 @example
18732 @group
18733 configure.ac --.   .------> autoconf* -----> configure
18734                +---+
18735 [aclocal.m4] --+   `---.
18736 [acsite.m4] ---'       |
18737                        +--> [autoheader*] -> [config.h.in]
18738 [acconfig.h] ----.     |
18739                  +-----'
18740 [config.h.top] --+
18741 [config.h.bot] --'
18742 @end group
18743 @end example
18745 Using only the @code{AH_} macros, @file{configure.ac} should be
18746 self-contained, and should not depend upon @file{acconfig.h} etc.
18749 @node autoupdate Invocation
18750 @section Using @command{autoupdate} to Modernize @file{configure.ac}
18751 @cindex @command{autoupdate}
18753 The @command{autoupdate} program updates a @file{configure.ac} file that
18754 calls Autoconf macros by their old names to use the current macro names.
18755 In version 2 of Autoconf, most of the macros were renamed to use a more
18756 uniform and descriptive naming scheme.  @xref{Macro Names}, for a
18757 description of the new scheme.  Although the old names still work
18758 (@pxref{Obsolete Macros}, for a list of the old macros and the corresponding
18759 new names), you can make your @file{configure.ac} files more readable
18760 and make it easier to use the current Autoconf documentation if you
18761 update them to use the new macro names.
18763 @evindex SIMPLE_BACKUP_SUFFIX
18764 If given no arguments, @command{autoupdate} updates @file{configure.ac},
18765 backing up the original version with the suffix @file{~} (or the value
18766 of the environment variable @code{SIMPLE_BACKUP_SUFFIX}, if that is
18767 set).  If you give @command{autoupdate} an argument, it reads that file
18768 instead of @file{configure.ac} and writes the updated file to the
18769 standard output.
18771 @noindent
18772 @command{autoupdate} accepts the following options:
18774 @table @option
18775 @item --help
18776 @itemx -h
18777 Print a summary of the command line options and exit.
18779 @item --version
18780 @itemx -V
18781 Print the version number of Autoconf and exit.
18783 @item --verbose
18784 @itemx -v
18785 Report processing steps.
18787 @item --debug
18788 @itemx -d
18789 Don't remove the temporary files.
18791 @item --force
18792 @itemx -f
18793 Force the update even if the file has not changed.  Disregard the cache.
18795 @item --include=@var{dir}
18796 @itemx -I @var{dir}
18797 Also look for input files in @var{dir}.  Multiple invocations accumulate.
18798 Directories are browsed from last to first.
18799 @end table
18801 @node Obsolete Macros
18802 @section Obsolete Macros
18804 Several macros are obsoleted in Autoconf, for various reasons (typically
18805 they failed to quote properly, couldn't be extended for more recent
18806 issues, etc.).  They are still supported, but deprecated: their use
18807 should be avoided.
18809 During the jump from Autoconf version 1 to version 2, most of the
18810 macros were renamed to use a more uniform and descriptive naming scheme,
18811 but their signature did not change.  @xref{Macro Names}, for a
18812 description of the new naming scheme.  Below, if there is just the mapping
18813 from old names to new names for these macros, the reader is invited to
18814 refer to the definition of the new macro for the signature and the
18815 description.
18817 @defmac AC_AIX
18818 @acindex{AIX}
18819 @cvindex _ALL_SOURCE
18820 This macro is a platform-specific subset of
18821 @code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
18822 @end defmac
18824 @defmac AC_ALLOCA
18825 @acindex{ALLOCA}
18826 Replaced by @code{AC_FUNC_ALLOCA} (@pxref{AC_FUNC_ALLOCA}).
18827 @end defmac
18829 @defmac AC_ARG_ARRAY
18830 @acindex{ARG_ARRAY}
18831 Removed because of limited usefulness.
18832 @end defmac
18834 @defmac AC_C_CROSS
18835 @acindex{C_CROSS}
18836 This macro is obsolete; it does nothing.
18837 @end defmac
18839 @defmac AC_C_LONG_DOUBLE
18840 @acindex{C_LONG_DOUBLE}
18841 @cvindex HAVE_LONG_DOUBLE
18842 If the C compiler supports a working @code{long double} type with more
18843 range or precision than the @code{double} type, define
18844 @code{HAVE_LONG_DOUBLE}.
18846 You should use @code{AC_TYPE_LONG_DOUBLE} or
18847 @code{AC_TYPE_LONG_DOUBLE_WIDER} instead.  @xref{Particular Types}.
18848 @end defmac
18850 @defmac AC_CANONICAL_SYSTEM
18851 @acindex{CANONICAL_SYSTEM}
18852 Determine the system type and set output variables to the names of the
18853 canonical system types.  @xref{Canonicalizing}, for details about the
18854 variables this macro sets.
18856 The user is encouraged to use either @code{AC_CANONICAL_BUILD}, or
18857 @code{AC_CANONICAL_HOST}, or @code{AC_CANONICAL_TARGET}, depending on
18858 the needs.  Using @code{AC_CANONICAL_TARGET} is enough to run the two
18859 other macros (@pxref{Canonicalizing}).
18860 @end defmac
18862 @defmac AC_CHAR_UNSIGNED
18863 @acindex{CHAR_UNSIGNED}
18864 Replaced by @code{AC_C_CHAR_UNSIGNED} (@pxref{AC_C_CHAR_UNSIGNED}).
18865 @end defmac
18867 @defmac AC_CHECK_TYPE (@var{type}, @var{default})
18868 @acindex{CHECK_TYPE}
18869 Autoconf, up to 2.13, used to provide this version of
18870 @code{AC_CHECK_TYPE}, deprecated because of its flaws.  First, although
18871 it is a member of the @code{CHECK} clan, it does
18872 more than just checking.  Secondly, missing types are defined
18873 using @code{#define}, not @code{typedef}, and this can lead to
18874 problems in the case of pointer types.
18876 This use of @code{AC_CHECK_TYPE} is obsolete and discouraged; see
18877 @ref{Generic Types}, for the description of the current macro.
18879 If the type @var{type} is not defined, define it to be the C (or C++)
18880 builtin type @var{default}, e.g., @samp{short int} or @samp{unsigned int}.
18882 This macro is equivalent to:
18884 @example
18885 AC_CHECK_TYPE([@var{type}], [],
18886   [AC_DEFINE_UNQUOTED([@var{type}], [@var{default}],
18887      [Define to `@var{default}'
18888       if <sys/types.h> does not define.])])
18889 @end example
18891 In order to keep backward compatibility, the two versions of
18892 @code{AC_CHECK_TYPE} are implemented, selected using these heuristics:
18894 @enumerate
18895 @item
18896 If there are three or four arguments, the modern version is used.
18898 @item
18899 If the second argument appears to be a C or C++ type, then the
18900 obsolete version is used.  This happens if the argument is a C or C++
18901 @emph{builtin} type or a C identifier ending in @samp{_t}, optionally
18902 followed by one of @samp{[(* } and then by a string of zero or more
18903 characters taken from the set @samp{[]()* _a-zA-Z0-9}.
18905 @item
18906 If the second argument is spelled with the alphabet of valid C and C++
18907 types, the user is warned and the modern version is used.
18909 @item
18910 Otherwise, the modern version is used.
18911 @end enumerate
18913 @noindent
18914 You are encouraged either to use a valid builtin type, or to use the
18915 equivalent modern code (see above), or better yet, to use
18916 @code{AC_CHECK_TYPES} together with
18918 @example
18919 #ifndef HAVE_LOFF_T
18920 typedef loff_t off_t;
18921 #endif
18922 @end example
18923 @end defmac
18924 @c end of AC_CHECK_TYPE
18926 @defmac AC_CHECKING (@var{feature-description})
18927 @acindex{CHECKING}
18928 Same as
18930 @example
18931 AC_MSG_NOTICE([checking @var{feature-description}@dots{}]
18932 @end example
18934 @noindent
18935 @xref{AC_MSG_NOTICE}.
18936 @end defmac
18938 @defmac AC_COMPILE_CHECK (@var{echo-text}, @var{includes}, @
18939   @var{function-body}, @var{action-if-true}, @ovar{action-if-false})
18940 @acindex{COMPILE_CHECK}
18941 This is an obsolete version of @code{AC_TRY_COMPILE} itself replaced by
18942 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}), with the
18943 addition that it prints @samp{checking for @var{echo-text}} to the
18944 standard output first, if @var{echo-text} is non-empty.  Use
18945 @code{AC_MSG_CHECKING} and @code{AC_MSG_RESULT} instead to print
18946 messages (@pxref{Printing Messages}).
18947 @end defmac
18949 @defmac AC_CONST
18950 @acindex{CONST}
18951 Replaced by @code{AC_C_CONST} (@pxref{AC_C_CONST}).
18952 @end defmac
18954 @defmac AC_CROSS_CHECK
18955 @acindex{CROSS_CHECK}
18956 Same as @code{AC_C_CROSS}, which is obsolete too, and does nothing
18957 @code{:-)}.
18958 @end defmac
18960 @defmac AC_CYGWIN
18961 @acindex{CYGWIN}
18962 @evindex CYGWIN
18963 Check for the Cygwin environment in which case the shell variable
18964 @code{CYGWIN} is set to @samp{yes}.  Don't use this macro, the dignified
18965 means to check the nature of the host is using @code{AC_CANONICAL_HOST}
18966 (@pxref{Canonicalizing}).  As a matter of fact this macro is defined as:
18968 @example
18969 AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
18970 case $host_os in
18971   *cygwin* ) CYGWIN=yes;;
18972          * ) CYGWIN=no;;
18973 esac
18974 @end example
18976 Beware that the variable @env{CYGWIN} has a special meaning when
18977 running Cygwin, and should not be changed.  That's yet another reason
18978 not to use this macro.
18979 @end defmac
18981 @defmac AC_DECL_SYS_SIGLIST
18982 @acindex{DECL_SYS_SIGLIST}
18983 @cvindex SYS_SIGLIST_DECLARED
18984 Same as:
18986 @example
18987 AC_CHECK_DECLS([sys_siglist], [], [],
18988 [#include <signal.h>
18989 /* NetBSD declares sys_siglist in unistd.h.  */
18990 #ifdef HAVE_UNISTD_H
18991 # include <unistd.h>
18992 #endif
18994 @end example
18996 @noindent
18997 @xref{AC_CHECK_DECLS}.
18998 @end defmac
19000 @defmac AC_DECL_YYTEXT
19001 @acindex{DECL_YYTEXT}
19002 Does nothing, now integrated in @code{AC_PROG_LEX} (@pxref{AC_PROG_LEX}).
19003 @end defmac
19005 @defmac AC_DIR_HEADER
19006 @acindex{DIR_HEADER}
19007 @cvindex DIRENT
19008 @cvindex SYSNDIR
19009 @cvindex SYSDIR
19010 @cvindex NDIR
19011 Like calling @code{AC_FUNC_CLOSEDIR_VOID}
19012 (@pxref{AC_FUNC_CLOSEDIR_VOID}) and @code{AC_HEADER_DIRENT}
19013 (@pxref{AC_HEADER_DIRENT}),
19014 but defines a different set of C preprocessor macros to indicate which
19015 header file is found:
19017 @multitable {@file{sys/ndir.h}} {Old Symbol} {@code{HAVE_SYS_NDIR_H}}
19018 @item Header            @tab Old Symbol     @tab New Symbol
19019 @item @file{dirent.h}   @tab @code{DIRENT}  @tab @code{HAVE_DIRENT_H}
19020 @item @file{sys/ndir.h} @tab @code{SYSNDIR} @tab @code{HAVE_SYS_NDIR_H}
19021 @item @file{sys/dir.h}  @tab @code{SYSDIR}  @tab @code{HAVE_SYS_DIR_H}
19022 @item @file{ndir.h}     @tab @code{NDIR}    @tab @code{HAVE_NDIR_H}
19023 @end multitable
19024 @end defmac
19026 @defmac AC_DYNIX_SEQ
19027 @acindex{DYNIX_SEQ}
19028 If on DYNIX/ptx, add @option{-lseq} to output variable
19029 @code{LIBS}.  This macro used to be defined as
19031 @example
19032 AC_CHECK_LIB([seq], [getmntent], [LIBS="-lseq $LIBS"])
19033 @end example
19035 @noindent
19036 now it is just @code{AC_FUNC_GETMNTENT} (@pxref{AC_FUNC_GETMNTENT}).
19037 @end defmac
19039 @defmac AC_EXEEXT
19040 @acindex{EXEEXT}
19041 @ovindex EXEEXT
19042 Defined the output variable @code{EXEEXT} based on the output of the
19043 compiler, which is now done automatically.  Typically set to empty
19044 string if Posix and @samp{.exe} if a @acronym{DOS} variant.
19045 @end defmac
19047 @defmac AC_EMXOS2
19048 @acindex{EMXOS2}
19049 Similar to @code{AC_CYGWIN} but checks for the EMX environment on OS/2
19050 and sets @code{EMXOS2}.  Don't use this macro, the dignified means to
19051 check the nature of the host is using @code{AC_CANONICAL_HOST}
19052 (@pxref{Canonicalizing}).
19053 @end defmac
19055 @defmac AC_ENABLE (@var{feature}, @var{action-if-given}, @
19056   @ovar{action-if-not-given})
19057 @acindex{ENABLE}
19058 This is an obsolete version of @code{AC_ARG_ENABLE} that does not
19059 support providing a help string (@pxref{AC_ARG_ENABLE}).
19060 @end defmac
19062 @defmac AC_ERROR
19063 @acindex{ERROR}
19064 Replaced by @code{AC_MSG_ERROR} (@pxref{AC_MSG_ERROR}).
19065 @end defmac
19067 @defmac AC_FIND_X
19068 @acindex{FIND_X}
19069 Replaced by @code{AC_PATH_X} (@pxref{AC_PATH_X}).
19070 @end defmac
19072 @defmac AC_FIND_XTRA
19073 @acindex{FIND_XTRA}
19074 Replaced by @code{AC_PATH_XTRA} (@pxref{AC_PATH_XTRA}).
19075 @end defmac
19077 @defmac AC_FOREACH
19078 @acindex{FOREACH}
19079 Replaced by @code{m4_foreach_w} (@pxref{m4_foreach_w}).
19080 @end defmac
19082 @defmac AC_FUNC_CHECK
19083 @acindex{FUNC_CHECK}
19084 Replaced by @code{AC_CHECK_FUNC} (@pxref{AC_CHECK_FUNC}).
19085 @end defmac
19087 @anchor{AC_FUNC_SETVBUF_REVERSED}
19088 @defmac AC_FUNC_SETVBUF_REVERSED
19089 @acindex{FUNC_SETVBUF_REVERSED}
19090 @cvindex SETVBUF_REVERSED
19091 @c @fuindex setvbuf
19092 @prindex @code{setvbuf}
19093 Do nothing.  Formerly, this macro checked whether @code{setvbuf} takes
19094 the buffering type as its second argument and the buffer pointer as the
19095 third, instead of the other way around, and defined
19096 @code{SETVBUF_REVERSED}.  However, the last systems to have the problem
19097 were those based on SVR2, which became obsolete in 1987, and the macro
19098 is no longer needed.
19099 @end defmac
19101 @defmac AC_FUNC_WAIT3
19102 @acindex{FUNC_WAIT3}
19103 @cvindex HAVE_WAIT3
19104 If @code{wait3} is found and fills in the contents of its third argument
19105 (a @samp{struct rusage *}), which @acronym{HP-UX} does not do, define
19106 @code{HAVE_WAIT3}.
19108 These days portable programs should use @code{waitpid}, not
19109 @code{wait3}, as @code{wait3} has been removed from Posix.
19110 @end defmac
19112 @defmac AC_GCC_TRADITIONAL
19113 @acindex{GCC_TRADITIONAL}
19114 Replaced by @code{AC_PROG_GCC_TRADITIONAL} (@pxref{AC_PROG_GCC_TRADITIONAL}).
19115 @end defmac
19117 @defmac AC_GETGROUPS_T
19118 @acindex{GETGROUPS_T}
19119 Replaced by @code{AC_TYPE_GETGROUPS} (@pxref{AC_TYPE_GETGROUPS}).
19120 @end defmac
19122 @defmac AC_GETLOADAVG
19123 @acindex{GETLOADAVG}
19124 Replaced by @code{AC_FUNC_GETLOADAVG} (@pxref{AC_FUNC_GETLOADAVG}).
19125 @end defmac
19127 @defmac AC_GNU_SOURCE
19128 @acindex{GNU_SOURCE}
19129 @cvindex _GNU_SOURCE
19130 This macro is a platform-specific subset of
19131 @code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
19132 @end defmac
19134 @defmac AC_HAVE_FUNCS
19135 @acindex{HAVE_FUNCS}
19136 Replaced by @code{AC_CHECK_FUNCS} (@pxref{AC_CHECK_FUNCS}).
19137 @end defmac
19139 @defmac AC_HAVE_HEADERS
19140 @acindex{HAVE_HEADERS}
19141 Replaced by @code{AC_CHECK_HEADERS} (@pxref{AC_CHECK_HEADERS}).
19142 @end defmac
19144 @defmac AC_HAVE_LIBRARY (@var{library}, @ovar{action-if-found}, @
19145   @ovar{action-if-not-found}, @ovar{other-libraries})
19146 @acindex{HAVE_LIBRARY}
19147 This macro is equivalent to calling @code{AC_CHECK_LIB} with a
19148 @var{function} argument of @code{main}.  In addition, @var{library} can
19149 be written as any of @samp{foo}, @option{-lfoo}, or @samp{libfoo.a}.  In
19150 all of those cases, the compiler is passed @option{-lfoo}.  However,
19151 @var{library} cannot be a shell variable; it must be a literal name.
19152 @xref{AC_CHECK_LIB}.
19153 @end defmac
19155 @defmac AC_HAVE_POUNDBANG
19156 @acindex{HAVE_POUNDBANG}
19157 Replaced by @code{AC_SYS_INTERPRETER} (@pxref{AC_SYS_INTERPRETER}).
19158 @end defmac
19160 @defmac AC_HEADER_CHECK
19161 @acindex{HEADER_CHECK}
19162 Replaced by @code{AC_CHECK_HEADER} (@pxref{AC_CHECK_HEADER}).
19163 @end defmac
19165 @defmac AC_HEADER_EGREP
19166 @acindex{HEADER_EGREP}
19167 Replaced by @code{AC_EGREP_HEADER} (@pxref{AC_EGREP_HEADER}).
19168 @end defmac
19170 @defmac AC_HELP_STRING
19171 @acindex{HELP_STRING}
19172 Replaced by @code{AS_HELP_STRING} (@pxref{AS_HELP_STRING}).
19173 @end defmac
19175 @defmac AC_INIT (@var{unique-file-in-source-dir})
19176 @acindex{INIT}
19177 Formerly @code{AC_INIT} used to have a single argument, and was
19178 equivalent to:
19180 @example
19181 AC_INIT
19182 AC_CONFIG_SRCDIR(@var{unique-file-in-source-dir})
19183 @end example
19184 See @ref{AC_INIT} and @ref{AC_CONFIG_SRCDIR}.
19185 @end defmac
19187 @defmac AC_INLINE
19188 @acindex{INLINE}
19189 Replaced by @code{AC_C_INLINE} (@pxref{AC_C_INLINE}).
19190 @end defmac
19192 @defmac AC_INT_16_BITS
19193 @acindex{INT_16_BITS}
19194 @cvindex INT_16_BITS
19195 If the C type @code{int} is 16 bits wide, define @code{INT_16_BITS}.
19196 Use @samp{AC_CHECK_SIZEOF(int)} instead (@pxref{AC_CHECK_SIZEOF}).
19197 @end defmac
19199 @defmac AC_IRIX_SUN
19200 @acindex{IRIX_SUN}
19201 If on @sc{irix} (Silicon Graphics Unix), add @option{-lsun} to output
19202 @code{LIBS}.  If you were using it to get @code{getmntent}, use
19203 @code{AC_FUNC_GETMNTENT} instead.  If you used it for the NIS versions
19204 of the password and group functions, use @samp{AC_CHECK_LIB(sun,
19205 getpwnam)}.  Up to Autoconf 2.13, it used to be
19207 @example
19208 AC_CHECK_LIB([sun], [getmntent], [LIBS="-lsun $LIBS"])
19209 @end example
19211 @noindent
19212 now it is defined as
19214 @example
19215 AC_FUNC_GETMNTENT
19216 AC_CHECK_LIB([sun], [getpwnam])
19217 @end example
19219 @noindent
19220 See @ref{AC_FUNC_GETMNTENT} and @ref{AC_CHECK_LIB}.
19221 @end defmac
19223 @defmac AC_ISC_POSIX
19224 @acindex{ISC_POSIX}
19225 @ovindex LIBS
19226 This macro adds @option{-lcposix} to output variable @code{LIBS} if
19227 necessary for Posix facilities.  Sun dropped support for the obsolete
19228 @sc{interactive} Systems Corporation Unix on 2006-07-23.  New programs
19229 need not use this macro.  It is implemented as
19230 @code{AC_SEARCH_LIBS([strerror], [cposix])} (@pxref{AC_SEARCH_LIBS}).
19231 @end defmac
19233 @defmac AC_LANG_C
19234 @acindex{LANG_C}
19235 Same as @samp{AC_LANG([C])} (@pxref{AC_LANG}).
19236 @end defmac
19238 @defmac AC_LANG_CPLUSPLUS
19239 @acindex{LANG_CPLUSPLUS}
19240 Same as @samp{AC_LANG([C++])} (@pxref{AC_LANG}).
19241 @end defmac
19243 @defmac AC_LANG_FORTRAN77
19244 @acindex{LANG_FORTRAN77}
19245 Same as @samp{AC_LANG([Fortran 77])} (@pxref{AC_LANG}).
19246 @end defmac
19248 @defmac AC_LANG_RESTORE
19249 @acindex{LANG_RESTORE}
19250 Select the @var{language} that is saved on the top of the stack, as set
19251 by @code{AC_LANG_SAVE}, remove it from the stack, and call
19252 @code{AC_LANG(@var{language})}.  @xref{Language Choice}, for the
19253 preferred way to change languages.
19254 @end defmac
19256 @defmac AC_LANG_SAVE
19257 @acindex{LANG_SAVE}
19258 Remember the current language (as set by @code{AC_LANG}) on a stack.
19259 The current language does not change.  @code{AC_LANG_PUSH} is preferred
19260 (@pxref{AC_LANG_PUSH}).
19261 @end defmac
19263 @defmac AC_LINK_FILES (@var{source}@dots{}, @var{dest}@dots{})
19264 @acindex{LINK_FILES}
19265 This is an obsolete version of @code{AC_CONFIG_LINKS}
19266 (@pxref{AC_CONFIG_LINKS}.  An updated version of:
19268 @example
19269 AC_LINK_FILES(config/$machine.h config/$obj_format.h,
19270               host.h            object.h)
19271 @end example
19273 @noindent
19276 @example
19277 AC_CONFIG_LINKS([host.h:config/$machine.h
19278                 object.h:config/$obj_format.h])
19279 @end example
19280 @end defmac
19282 @defmac AC_LN_S
19283 @acindex{LN_S}
19284 Replaced by @code{AC_PROG_LN_S} (@pxref{AC_PROG_LN_S}).
19285 @end defmac
19287 @defmac AC_LONG_64_BITS
19288 @acindex{LONG_64_BITS}
19289 @cvindex LONG_64_BITS
19290 Define @code{LONG_64_BITS} if the C type @code{long int} is 64 bits wide.
19291 Use the generic macro @samp{AC_CHECK_SIZEOF([long int])} instead
19292 (@pxref{AC_CHECK_SIZEOF}).
19293 @end defmac
19295 @defmac AC_LONG_DOUBLE
19296 @acindex{LONG_DOUBLE}
19297 If the C compiler supports a working @code{long double} type with more
19298 range or precision than the @code{double} type, define
19299 @code{HAVE_LONG_DOUBLE}.
19301 You should use @code{AC_TYPE_LONG_DOUBLE} or
19302 @code{AC_TYPE_LONG_DOUBLE_WIDER} instead.  @xref{Particular Types}.
19303 @end defmac
19305 @defmac AC_LONG_FILE_NAMES
19306 @acindex{LONG_FILE_NAMES}
19307 Replaced by
19308 @example
19309 AC_SYS_LONG_FILE_NAMES
19310 @end example
19311 @noindent
19312 @xref{AC_SYS_LONG_FILE_NAMES}.
19313 @end defmac
19315 @defmac AC_MAJOR_HEADER
19316 @acindex{MAJOR_HEADER}
19317 Replaced by @code{AC_HEADER_MAJOR} (@pxref{AC_HEADER_MAJOR}).
19318 @end defmac
19320 @defmac AC_MEMORY_H
19321 @acindex{MEMORY_H}
19322 @cvindex NEED_MEMORY_H
19323 Used to define @code{NEED_MEMORY_H} if the @code{mem} functions were
19324 defined in @file{memory.h}.  Today it is equivalent to
19325 @samp{AC_CHECK_HEADERS([memory.h])} (@pxref{AC_CHECK_HEADERS}).  Adjust
19326 your code to depend upon
19327 @code{HAVE_MEMORY_H}, not @code{NEED_MEMORY_H}; see @ref{Standard
19328 Symbols}.
19329 @end defmac
19331 @defmac AC_MINGW32
19332 @acindex{MINGW32}
19333 Similar to @code{AC_CYGWIN} but checks for the MinGW compiler
19334 environment and sets @code{MINGW32}.  Don't use this macro, the
19335 dignified means to check the nature of the host is using
19336 @code{AC_CANONICAL_HOST} (@pxref{Canonicalizing}).
19337 @end defmac
19339 @defmac AC_MINIX
19340 @acindex{MINIX}
19341 @cvindex _MINIX
19342 @cvindex _POSIX_SOURCE
19343 @cvindex _POSIX_1_SOURCE
19344 This macro is a platform-specific subset of
19345 @code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
19346 @end defmac
19348 @defmac AC_MINUS_C_MINUS_O
19349 @acindex{MINUS_C_MINUS_O}
19350 Replaced by @code{AC_PROG_CC_C_O} (@pxref{AC_PROG_CC_C_O}).
19351 @end defmac
19353 @defmac AC_MMAP
19354 @acindex{MMAP}
19355 Replaced by @code{AC_FUNC_MMAP} (@pxref{AC_FUNC_MMAP}).
19356 @end defmac
19358 @defmac AC_MODE_T
19359 @acindex{MODE_T}
19360 Replaced by @code{AC_TYPE_MODE_T} (@pxref{AC_TYPE_MODE_T}).
19361 @end defmac
19363 @defmac AC_OBJEXT
19364 @acindex{OBJEXT}
19365 @ovindex OBJEXT
19366 Defined the output variable @code{OBJEXT} based on the output of the
19367 compiler, after .c files have been excluded.  Typically set to @samp{o}
19368 if Posix, @samp{obj} if a @acronym{DOS} variant.
19369 Now the compiler checking macros handle
19370 this automatically.
19371 @end defmac
19373 @defmac AC_OBSOLETE (@var{this-macro-name}, @ovar{suggestion})
19374 @acindex{OBSOLETE}
19375 Make M4 print a message to the standard error output warning that
19376 @var{this-macro-name} is obsolete, and giving the file and line number
19377 where it was called.  @var{this-macro-name} should be the name of the
19378 macro that is calling @code{AC_OBSOLETE}.  If @var{suggestion} is given,
19379 it is printed at the end of the warning message; for example, it can be
19380 a suggestion for what to use instead of @var{this-macro-name}.
19382 For instance
19384 @example
19385 AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
19386 @end example
19388 @noindent
19389 You are encouraged to use @code{AU_DEFUN} instead, since it gives better
19390 services to the user (@pxref{AU_DEFUN}).
19391 @end defmac
19393 @defmac AC_OFF_T
19394 @acindex{OFF_T}
19395 Replaced by @code{AC_TYPE_OFF_T} (@pxref{AC_TYPE_OFF_T}).
19396 @end defmac
19398 @defmac AC_OUTPUT (@ovar{file}@dots{}, @ovar{extra-cmds}, @ovar{init-cmds})
19399 @acindex{OUTPUT}
19400 The use of @code{AC_OUTPUT} with arguments is deprecated.  This obsoleted
19401 interface is equivalent to:
19403 @example
19404 @group
19405 AC_CONFIG_FILES(@var{file}@dots{})
19406 AC_CONFIG_COMMANDS([default],
19407                    @var{extra-cmds}, @var{init-cmds})
19408 AC_OUTPUT
19409 @end group
19410 @end example
19412 @noindent
19413 See @ref{AC_CONFIG_FILES}, @ref{AC_CONFIG_COMMANDS}, and @ref{AC_OUTPUT}.
19414 @end defmac
19416 @defmac AC_OUTPUT_COMMANDS (@var{extra-cmds}, @ovar{init-cmds})
19417 @acindex{OUTPUT_COMMANDS}
19418 Specify additional shell commands to run at the end of
19419 @file{config.status}, and shell commands to initialize any variables
19420 from @command{configure}.  This macro may be called multiple times.  It is
19421 obsolete, replaced by @code{AC_CONFIG_COMMANDS} (@pxref{AC_CONFIG_COMMANDS}).
19423 Here is an unrealistic example:
19425 @example
19426 fubar=27
19427 AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.],
19428                    [fubar=$fubar])
19429 AC_OUTPUT_COMMANDS([echo this is another, extra, bit],
19430                    [echo init bit])
19431 @end example
19433 Aside from the fact that @code{AC_CONFIG_COMMANDS} requires an
19434 additional key, an important difference is that
19435 @code{AC_OUTPUT_COMMANDS} is quoting its arguments twice, unlike
19436 @code{AC_CONFIG_COMMANDS}.  This means that @code{AC_CONFIG_COMMANDS}
19437 can safely be given macro calls as arguments:
19439 @example
19440 AC_CONFIG_COMMANDS(foo, [my_FOO()])
19441 @end example
19443 @noindent
19444 Conversely, where one level of quoting was enough for literal strings
19445 with @code{AC_OUTPUT_COMMANDS}, you need two with
19446 @code{AC_CONFIG_COMMANDS}.  The following lines are equivalent:
19448 @example
19449 @group
19450 AC_OUTPUT_COMMANDS([echo "Square brackets: []"])
19451 AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
19452 @end group
19453 @end example
19454 @end defmac
19456 @defmac AC_PID_T
19457 @acindex{PID_T}
19458 Replaced by @code{AC_TYPE_PID_T} (@pxref{AC_TYPE_PID_T}).
19459 @end defmac
19461 @defmac AC_PREFIX
19462 @acindex{PREFIX}
19463 Replaced by @code{AC_PREFIX_PROGRAM} (@pxref{AC_PREFIX_PROGRAM}).
19464 @end defmac
19466 @defmac AC_PROGRAMS_CHECK
19467 @acindex{PROGRAMS_CHECK}
19468 Replaced by @code{AC_CHECK_PROGS} (@pxref{AC_CHECK_PROGS}).
19469 @end defmac
19471 @defmac AC_PROGRAMS_PATH
19472 @acindex{PROGRAMS_PATH}
19473 Replaced by @code{AC_PATH_PROGS} (@pxref{AC_PATH_PROGS}).
19474 @end defmac
19476 @defmac AC_PROGRAM_CHECK
19477 @acindex{PROGRAM_CHECK}
19478 Replaced by @code{AC_CHECK_PROG} (@pxref{AC_CHECK_PROG}).
19479 @end defmac
19481 @defmac AC_PROGRAM_EGREP
19482 @acindex{PROGRAM_EGREP}
19483 Replaced by @code{AC_EGREP_CPP} (@pxref{AC_EGREP_CPP}).
19484 @end defmac
19486 @defmac AC_PROGRAM_PATH
19487 @acindex{PROGRAM_PATH}
19488 Replaced by @code{AC_PATH_PROG} (@pxref{AC_PATH_PROG}).
19489 @end defmac
19491 @defmac AC_REMOTE_TAPE
19492 @acindex{REMOTE_TAPE}
19493 Removed because of limited usefulness.
19494 @end defmac
19496 @defmac AC_RESTARTABLE_SYSCALLS
19497 @acindex{RESTARTABLE_SYSCALLS}
19498 This macro was renamed @code{AC_SYS_RESTARTABLE_SYSCALLS}.  However,
19499 these days portable programs should use @code{sigaction} with
19500 @code{SA_RESTART} if they want restartable system calls.  They should
19501 not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
19502 system call is restartable is a dynamic issue, not a configuration-time
19503 issue.
19504 @end defmac
19506 @defmac AC_RETSIGTYPE
19507 @acindex{RETSIGTYPE}
19508 Replaced by @code{AC_TYPE_SIGNAL} (@pxref{AC_TYPE_SIGNAL}), which itself
19509 is obsolete when assuming C89 or better.
19510 @end defmac
19512 @defmac AC_RSH
19513 @acindex{RSH}
19514 Removed because of limited usefulness.
19515 @end defmac
19517 @defmac AC_SCO_INTL
19518 @acindex{SCO_INTL}
19519 @ovindex LIBS
19520 If on SCO Unix, add @option{-lintl} to output variable @code{LIBS}.  This
19521 macro used to do this:
19523 @example
19524 AC_CHECK_LIB([intl], [strftime], [LIBS="-lintl $LIBS"])
19525 @end example
19527 @noindent
19528 Now it just calls @code{AC_FUNC_STRFTIME} instead (@pxref{AC_FUNC_STRFTIME}).
19529 @end defmac
19531 @defmac AC_SETVBUF_REVERSED
19532 @acindex{SETVBUF_REVERSED}
19533 Replaced by
19534 @example
19535 AC_FUNC_SETVBUF_REVERSED
19536 @end example
19537 @noindent
19538 @xref{AC_FUNC_SETVBUF_REVERSED}.
19539 @end defmac
19541 @defmac AC_SET_MAKE
19542 @acindex{SET_MAKE}
19543 Replaced by @code{AC_PROG_MAKE_SET} (@pxref{AC_PROG_MAKE_SET}).
19544 @end defmac
19546 @defmac AC_SIZEOF_TYPE
19547 @acindex{SIZEOF_TYPE}
19548 Replaced by @code{AC_CHECK_SIZEOF} (@pxref{AC_CHECK_SIZEOF}).
19549 @end defmac
19551 @defmac AC_SIZE_T
19552 @acindex{SIZE_T}
19553 Replaced by @code{AC_TYPE_SIZE_T} (@pxref{AC_TYPE_SIZE_T}).
19554 @end defmac
19556 @defmac AC_STAT_MACROS_BROKEN
19557 @acindex{STAT_MACROS_BROKEN}
19558 Replaced by @code{AC_HEADER_STAT} (@pxref{AC_HEADER_STAT}).
19559 @end defmac
19561 @defmac AC_STDC_HEADERS
19562 @acindex{STDC_HEADERS}
19563 Replaced by @code{AC_HEADER_STDC} (@pxref{AC_HEADER_STDC}).
19564 @end defmac
19566 @defmac AC_STRCOLL
19567 @acindex{STRCOLL}
19568 Replaced by @code{AC_FUNC_STRCOLL} (@pxref{AC_FUNC_STRCOLL}).
19569 @end defmac
19571 @defmac AC_STRUCT_ST_BLKSIZE
19572 @acindex{STRUCT_ST_BLKSIZE}
19573 @cvindex HAVE_STRUCT_STAT_ST_BLKSIZE
19574 @cvindex HAVE_ST_BLKSIZE
19575 If @code{struct stat} contains an @code{st_blksize} member, define
19576 @code{HAVE_STRUCT_STAT_ST_BLKSIZE}.  The former name,
19577 @code{HAVE_ST_BLKSIZE} is to be avoided, as its support will cease in
19578 the future.  This macro is obsoleted, and should be replaced by
19580 @example
19581 AC_CHECK_MEMBERS([struct stat.st_blksize])
19582 @end example
19583 @noindent
19584 @xref{AC_CHECK_MEMBERS}.
19585 @end defmac
19587 @defmac AC_STRUCT_ST_RDEV
19588 @acindex{STRUCT_ST_RDEV}
19589 @cvindex HAVE_ST_RDEV
19590 @cvindex HAVE_STRUCT_STAT_ST_RDEV
19591 If @code{struct stat} contains an @code{st_rdev} member, define
19592 @code{HAVE_STRUCT_STAT_ST_RDEV}.  The former name for this macro,
19593 @code{HAVE_ST_RDEV}, is to be avoided as it will cease to be supported
19594 in the future.  Actually, even the new macro is obsolete and should be
19595 replaced by:
19596 @example
19597 AC_CHECK_MEMBERS([struct stat.st_rdev])
19598 @end example
19599 @noindent
19600 @xref{AC_CHECK_MEMBERS}.
19601 @end defmac
19603 @defmac AC_ST_BLKSIZE
19604 @acindex{ST_BLKSIZE}
19605 Replaced by @code{AC_CHECK_MEMBERS} (@pxref{AC_CHECK_MEMBERS}).
19606 @end defmac
19608 @defmac AC_ST_BLOCKS
19609 @acindex{ST_BLOCKS}
19610 Replaced by @code{AC_STRUCT_ST_BLOCKS} (@pxref{AC_STRUCT_ST_BLOCKS}).
19611 @end defmac
19613 @defmac AC_ST_RDEV
19614 @acindex{ST_RDEV}
19615 Replaced by @code{AC_CHECK_MEMBERS} (@pxref{AC_CHECK_MEMBERS}).
19616 @end defmac
19618 @defmac AC_SYS_RESTARTABLE_SYSCALLS
19619 @acindex{SYS_RESTARTABLE_SYSCALLS}
19620 @cvindex HAVE_RESTARTABLE_SYSCALLS
19621 If the system automatically restarts a system call that is interrupted
19622 by a signal, define @code{HAVE_RESTARTABLE_SYSCALLS}.  This macro does
19623 not check whether system calls are restarted in general---it checks whether a
19624 signal handler installed with @code{signal} (but not @code{sigaction})
19625 causes system calls to be restarted.  It does not check whether system calls
19626 can be restarted when interrupted by signals that have no handler.
19628 These days portable programs should use @code{sigaction} with
19629 @code{SA_RESTART} if they want restartable system calls.  They should
19630 not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
19631 system call is restartable is a dynamic issue, not a configuration-time
19632 issue.
19633 @end defmac
19635 @defmac AC_SYS_SIGLIST_DECLARED
19636 @acindex{SYS_SIGLIST_DECLARED}
19637 This macro was renamed @code{AC_DECL_SYS_SIGLIST}.  However, even that
19638 name is obsolete, as the same functionality is now acheived via
19639 @code{AC_CHECK_DECLS} (@pxref{AC_CHECK_DECLS}).
19640 @end defmac
19642 @defmac AC_TEST_CPP
19643 @acindex{TEST_CPP}
19644 This macro was renamed @code{AC_TRY_CPP}, which in turn was replaced by
19645 @code{AC_PREPROC_IFELSE} (@pxref{AC_PREPROC_IFELSE}).
19646 @end defmac
19648 @defmac AC_TEST_PROGRAM
19649 @acindex{TEST_PROGRAM}
19650 This macro was renamed @code{AC_TRY_RUN}, which in turn was replaced by
19651 @code{AC_RUN_IFELSE} (@pxref{AC_RUN_IFELSE}).
19652 @end defmac
19654 @defmac AC_TIMEZONE
19655 @acindex{TIMEZONE}
19656 Replaced by @code{AC_STRUCT_TIMEZONE} (@pxref{AC_STRUCT_TIMEZONE}).
19657 @end defmac
19659 @defmac AC_TIME_WITH_SYS_TIME
19660 @acindex{TIME_WITH_SYS_TIME}
19661 Replaced by @code{AC_HEADER_TIME} (@pxref{AC_HEADER_TIME}).
19662 @end defmac
19664 @defmac AC_TRY_COMPILE (@var{includes}, @var{function-body}, @
19665   @ovar{action-if-true}, @ovar{action-if-false})
19666 @acindex{TRY_COMPILE}
19667 Same as:
19669 @example
19670 AC_COMPILE_IFELSE(
19671   [AC_LANG_PROGRAM([[@var{includes}]],
19672      [[@var{function-body}]])],
19673   [@var{action-if-true}],
19674   [@var{action-if-false}])
19675 @end example
19677 @noindent
19678 @xref{Running the Compiler}.
19680 This macro double quotes both @var{includes} and @var{function-body}.
19682 For C and C++, @var{includes} is any @code{#include} statements needed
19683 by the code in @var{function-body} (@var{includes} is ignored if
19684 the currently selected language is Fortran or Fortran 77).  The compiler
19685 and compilation flags are determined by the current language
19686 (@pxref{Language Choice}).
19687 @end defmac
19689 @defmac AC_TRY_CPP (@var{input}, @ovar{action-if-true}, @ovar{action-if-false})
19690 @acindex{TRY_CPP}
19691 Same as:
19693 @example
19694 AC_PREPROC_IFELSE(
19695   [AC_LANG_SOURCE([[@var{input}]])],
19696   [@var{action-if-true}],
19697   [@var{action-if-false}])
19698 @end example
19700 @noindent
19701 @xref{Running the Preprocessor}.
19703 This macro double quotes the @var{input}.
19704 @end defmac
19706 @defmac AC_TRY_LINK (@var{includes}, @var{function-body}, @
19707   @ovar{action-if-true}, @ovar{action-if-false})
19708 @acindex{TRY_LINK}
19709 Same as:
19711 @example
19712 AC_LINK_IFELSE(
19713   [AC_LANG_PROGRAM([[@var{includes}]],
19714      [[@var{function-body}]])],
19715   [@var{action-if-true}],
19716   [@var{action-if-false}])
19717 @end example
19719 @noindent
19720 @xref{Running the Compiler}.
19722 This macro double quotes both @var{includes} and @var{function-body}.
19724 Depending on the current language (@pxref{Language Choice}), create a
19725 test program to see whether a function whose body consists of
19726 @var{function-body} can be compiled and linked.  If the file compiles
19727 and links successfully, run shell commands @var{action-if-found},
19728 otherwise run @var{action-if-not-found}.
19730 This macro double quotes both @var{includes} and @var{function-body}.
19732 For C and C++, @var{includes} is any @code{#include} statements needed
19733 by the code in @var{function-body} (@var{includes} is ignored if
19734 the currently selected language is Fortran or Fortran 77).  The compiler
19735 and compilation flags are determined by the current language
19736 (@pxref{Language Choice}), and in addition @code{LDFLAGS} and
19737 @code{LIBS} are used for linking.
19738 @end defmac
19740 @defmac AC_TRY_LINK_FUNC (@var{function}, @ovar{action-if-found}, @
19741   @ovar{action-if-not-found})
19742 @acindex{TRY_LINK_FUNC}
19743 This macro is equivalent to
19744 @example
19745 AC_LINK_IFELSE([AC_LANG_CALL([], [@var{function}])],
19746   [@var{action-if-found}], [@var{action-if-not-found}])
19747 @end example
19748 @noindent
19749 @xref{AC_LINK_IFELSE}.
19750 @end defmac
19752 @defmac AC_TRY_RUN (@var{program}, @ovar{action-if-true}, @
19753   @ovar{action-if-false}, @ovar{action-if-cross-compiling})
19754 @acindex{TRY_RUN}
19755 Same as:
19757 @example
19758 AC_RUN_IFELSE(
19759   [AC_LANG_SOURCE([[@var{program}]])],
19760   [@var{action-if-true}],
19761   [@var{action-if-false}],
19762   [@var{action-if-cross-compiling}])
19763 @end example
19765 @noindent
19766 @xref{Runtime}.
19767 @end defmac
19769 @anchor{AC_TYPE_SIGNAL}
19770 @defmac AC_TYPE_SIGNAL
19771 @acindex{TYPE_SIGNAL}
19772 @cvindex RETSIGTYPE
19773 @hdrindex{signal.h}
19774 If @file{signal.h} declares @code{signal} as returning a pointer to a
19775 function returning @code{void}, define @code{RETSIGTYPE} to be
19776 @code{void}; otherwise, define it to be @code{int}.  These days, it is
19777 portable to assume C89, and that signal handlers return @code{void},
19778 without needing to use this macro or @code{RETSIGTYPE}.
19780 When targetting older K&R C, it is possible to define signal handlers as
19781 returning type @code{RETSIGTYPE}, and omit a return statement:
19783 @example
19784 @group
19785 RETSIGTYPE
19786 hup_handler ()
19788 @dots{}
19790 @end group
19791 @end example
19792 @end defmac
19794 @defmac AC_UID_T
19795 @acindex{UID_T}
19796 Replaced by @code{AC_TYPE_UID_T} (@pxref{AC_TYPE_UID_T}).
19797 @end defmac
19799 @defmac AC_UNISTD_H
19800 @acindex{UNISTD_H}
19801 Same as @samp{AC_CHECK_HEADERS([unistd.h])} (@pxref{AC_CHECK_HEADERS}).
19802 @end defmac
19804 @defmac AC_USG
19805 @acindex{USG}
19806 @cvindex USG
19807 Define @code{USG} if the @acronym{BSD} string functions are defined in
19808 @file{strings.h}.  You should no longer depend upon @code{USG}, but on
19809 @code{HAVE_STRING_H}; see @ref{Standard Symbols}.
19810 @end defmac
19812 @defmac AC_UTIME_NULL
19813 @acindex{UTIME_NULL}
19814 Replaced by @code{AC_FUNC_UTIME_NULL} (@pxref{AC_FUNC_UTIME_NULL}).
19815 @end defmac
19817 @defmac AC_VALIDATE_CACHED_SYSTEM_TUPLE (@ovar{cmd})
19818 @acindex{VALIDATE_CACHED_SYSTEM_TUPLE}
19819 If the cache file is inconsistent with the current host, target and
19820 build system types, it used to execute @var{cmd} or print a default
19821 error message.  This is now handled by default.
19822 @end defmac
19824 @defmac AC_VERBOSE (@var{result-description})
19825 @acindex{VERBOSE}
19826 Replaced by @code{AC_MSG_RESULT} (@pxref{AC_MSG_RESULT}).
19827 @end defmac
19829 @defmac AC_VFORK
19830 @acindex{VFORK}
19831 Replaced by @code{AC_FUNC_FORK} (@pxref{AC_FUNC_FORK}).
19832 @end defmac
19834 @defmac AC_VPRINTF
19835 @acindex{VPRINTF}
19836 Replaced by @code{AC_FUNC_VPRINTF} (@pxref{AC_FUNC_VPRINTF}).
19837 @end defmac
19839 @defmac AC_WAIT3
19840 @acindex{WAIT3}
19841 This macro was renamed @code{AC_FUNC_WAIT3}.  However, these days
19842 portable programs should use @code{waitpid}, not @code{wait3}, as
19843 @code{wait3} has been removed from Posix.
19844 @end defmac
19846 @defmac AC_WARN
19847 @acindex{WARN}
19848 Replaced by @code{AC_MSG_WARN} (@pxref{AC_MSG_WARN}).
19849 @end defmac
19851 @defmac AC_WITH (@var{package}, @var{action-if-given}, @
19852   @ovar{action-if-not-given})
19853 @acindex{WITH}
19854 This is an obsolete version of @code{AC_ARG_WITH} that does not
19855 support providing a help string (@pxref{AC_ARG_WITH}).
19856 @end defmac
19858 @defmac AC_WORDS_BIGENDIAN
19859 @acindex{WORDS_BIGENDIAN}
19860 Replaced by @code{AC_C_BIGENDIAN} (@pxref{AC_C_BIGENDIAN}).
19861 @end defmac
19863 @defmac AC_XENIX_DIR
19864 @acindex{XENIX_DIR}
19865 @ovindex LIBS
19866 This macro used to add @option{-lx} to output variable @code{LIBS} if on
19867 Xenix.  Also, if @file{dirent.h} is being checked for, added
19868 @option{-ldir} to @code{LIBS}.  Now it is merely an alias of
19869 @code{AC_HEADER_DIRENT} instead, plus some code to detect whether
19870 running @sc{xenix} on which you should not depend:
19872 @example
19873 AC_MSG_CHECKING([for Xenix])
19874 AC_EGREP_CPP([yes],
19875 [#if defined M_XENIX && !defined M_UNIX
19876   yes
19877 #endif],
19878              [AC_MSG_RESULT([yes]); XENIX=yes],
19879              [AC_MSG_RESULT([no]); XENIX=])
19880 @end example
19881 @noindent
19882 Don't use this macro, the dignified means to check the nature of the
19883 host is using @code{AC_CANONICAL_HOST} (@pxref{Canonicalizing}).
19884 @end defmac
19886 @defmac AC_YYTEXT_POINTER
19887 @acindex{YYTEXT_POINTER}
19888 This macro was renamed @code{AC_DECL_YYTEXT}, which in turn was
19889 integrated into @code{AC_PROG_LEX} (@pxref{AC_PROG_LEX}).
19890 @end defmac
19892 @node Autoconf 1
19893 @section Upgrading From Version 1
19894 @cindex Upgrading autoconf
19895 @cindex Autoconf upgrading
19897 Autoconf version 2 is mostly backward compatible with version 1.
19898 However, it introduces better ways to do some things, and doesn't
19899 support some of the ugly things in version 1.  So, depending on how
19900 sophisticated your @file{configure.ac} files are, you might have to do
19901 some manual work in order to upgrade to version 2.  This chapter points
19902 out some problems to watch for when upgrading.  Also, perhaps your
19903 @command{configure} scripts could benefit from some of the new features in
19904 version 2; the changes are summarized in the file @file{NEWS} in the
19905 Autoconf distribution.
19907 @menu
19908 * Changed File Names::          Files you might rename
19909 * Changed Makefiles::           New things to put in @file{Makefile.in}
19910 * Changed Macros::              Macro calls you might replace
19911 * Changed Results::             Changes in how to check test results
19912 * Changed Macro Writing::       Better ways to write your own macros
19913 @end menu
19915 @node Changed File Names
19916 @subsection Changed File Names
19918 If you have an @file{aclocal.m4} installed with Autoconf (as opposed to
19919 in a particular package's source directory), you must rename it to
19920 @file{acsite.m4}.  @xref{autoconf Invocation}.
19922 If you distribute @file{install.sh} with your package, rename it to
19923 @file{install-sh} so @code{make} builtin rules don't inadvertently
19924 create a file called @file{install} from it.  @code{AC_PROG_INSTALL}
19925 looks for the script under both names, but it is best to use the new name.
19927 If you were using @file{config.h.top}, @file{config.h.bot}, or
19928 @file{acconfig.h}, you still can, but you have less clutter if you
19929 use the @code{AH_} macros.  @xref{Autoheader Macros}.
19931 @node Changed Makefiles
19932 @subsection Changed Makefiles
19934 Add @samp{@@CFLAGS@@}, @samp{@@CPPFLAGS@@}, and @samp{@@LDFLAGS@@} in
19935 your @file{Makefile.in} files, so they can take advantage of the values
19936 of those variables in the environment when @command{configure} is run.
19937 Doing this isn't necessary, but it's a convenience for users.
19939 Also add @samp{@@configure_input@@} in a comment to each input file for
19940 @code{AC_OUTPUT}, so that the output files contain a comment saying
19941 they were produced by @command{configure}.  Automatically selecting the
19942 right comment syntax for all the kinds of files that people call
19943 @code{AC_OUTPUT} on became too much work.
19945 Add @file{config.log} and @file{config.cache} to the list of files you
19946 remove in @code{distclean} targets.
19948 If you have the following in @file{Makefile.in}:
19950 @example
19951 prefix = /usr/local
19952 exec_prefix = $(prefix)
19953 @end example
19955 @noindent
19956 you must change it to:
19958 @example
19959 prefix = @@prefix@@
19960 exec_prefix = @@exec_prefix@@
19961 @end example
19963 @noindent
19964 The old behavior of replacing those variables without @samp{@@}
19965 characters around them has been removed.
19967 @node Changed Macros
19968 @subsection Changed Macros
19970 Many of the macros were renamed in Autoconf version 2.  You can still
19971 use the old names, but the new ones are clearer, and it's easier to find
19972 the documentation for them.  @xref{Obsolete Macros}, for a table showing the
19973 new names for the old macros.  Use the @command{autoupdate} program to
19974 convert your @file{configure.ac} to using the new macro names.
19975 @xref{autoupdate Invocation}.
19977 Some macros have been superseded by similar ones that do the job better,
19978 but are not call-compatible.  If you get warnings about calling obsolete
19979 macros while running @command{autoconf}, you may safely ignore them, but
19980 your @command{configure} script generally works better if you follow
19981 the advice that is printed about what to replace the obsolete macros with.  In
19982 particular, the mechanism for reporting the results of tests has
19983 changed.  If you were using @command{echo} or @code{AC_VERBOSE} (perhaps
19984 via @code{AC_COMPILE_CHECK}), your @command{configure} script's output
19985 looks better if you switch to @code{AC_MSG_CHECKING} and
19986 @code{AC_MSG_RESULT}.  @xref{Printing Messages}.  Those macros work best
19987 in conjunction with cache variables.  @xref{Caching Results}.
19991 @node Changed Results
19992 @subsection Changed Results
19994 If you were checking the results of previous tests by examining the
19995 shell variable @code{DEFS}, you need to switch to checking the values of
19996 the cache variables for those tests.  @code{DEFS} no longer exists while
19997 @command{configure} is running; it is only created when generating output
19998 files.  This difference from version 1 is because properly quoting the
19999 contents of that variable turned out to be too cumbersome and
20000 inefficient to do every time @code{AC_DEFINE} is called.  @xref{Cache
20001 Variable Names}.
20003 For example, here is a @file{configure.ac} fragment written for Autoconf
20004 version 1:
20006 @example
20007 AC_HAVE_FUNCS(syslog)
20008 case "$DEFS" in
20009 *-DHAVE_SYSLOG*) ;;
20010 *) # syslog is not in the default libraries.  See if it's in some other.
20011   saved_LIBS="$LIBS"
20012   for lib in bsd socket inet; do
20013     AC_CHECKING(for syslog in -l$lib)
20014     LIBS="-l$lib $saved_LIBS"
20015     AC_HAVE_FUNCS(syslog)
20016     case "$DEFS" in
20017     *-DHAVE_SYSLOG*) break ;;
20018     *) ;;
20019     esac
20020     LIBS="$saved_LIBS"
20021   done ;;
20022 esac
20023 @end example
20025 Here is a way to write it for version 2:
20027 @example
20028 AC_CHECK_FUNCS([syslog])
20029 if test $ac_cv_func_syslog = no; then
20030   # syslog is not in the default libraries.  See if it's in some other.
20031   for lib in bsd socket inet; do
20032     AC_CHECK_LIB([$lib], [syslog], [AC_DEFINE([HAVE_SYSLOG])
20033       LIBS="-l$lib $LIBS"; break])
20034   done
20036 @end example
20038 If you were working around bugs in @code{AC_DEFINE_UNQUOTED} by adding
20039 backslashes before quotes, you need to remove them.  It now works
20040 predictably, and does not treat quotes (except back quotes) specially.
20041 @xref{Setting Output Variables}.
20043 All of the Boolean shell variables set by Autoconf macros now use
20044 @samp{yes} for the true value.  Most of them use @samp{no} for false,
20045 though for backward compatibility some use the empty string instead.  If
20046 you were relying on a shell variable being set to something like 1 or
20047 @samp{t} for true, you need to change your tests.
20049 @node Changed Macro Writing
20050 @subsection Changed Macro Writing
20052 When defining your own macros, you should now use @code{AC_DEFUN}
20053 instead of @code{define}.  @code{AC_DEFUN} automatically calls
20054 @code{AC_PROVIDE} and ensures that macros called via @code{AC_REQUIRE}
20055 do not interrupt other macros, to prevent nested @samp{checking@dots{}}
20056 messages on the screen.  There's no actual harm in continuing to use the
20057 older way, but it's less convenient and attractive.  @xref{Macro
20058 Definitions}.
20060 You probably looked at the macros that came with Autoconf as a guide for
20061 how to do things.  It would be a good idea to take a look at the new
20062 versions of them, as the style is somewhat improved and they take
20063 advantage of some new features.
20065 If you were doing tricky things with undocumented Autoconf internals
20066 (macros, variables, diversions), check whether you need to change
20067 anything to account for changes that have been made.  Perhaps you can
20068 even use an officially supported technique in version 2 instead of
20069 kludging.  Or perhaps not.
20071 To speed up your locally written feature tests, add caching to them.
20072 See whether any of your tests are of general enough usefulness to
20073 encapsulate them into macros that you can share.
20076 @node Autoconf 2.13
20077 @section Upgrading From Version 2.13
20078 @cindex Upgrading autoconf
20079 @cindex Autoconf upgrading
20081 The introduction of the previous section (@pxref{Autoconf 1}) perfectly
20082 suits this section@enddots{}
20084 @quotation
20085 Autoconf version 2.50 is mostly backward compatible with version 2.13.
20086 However, it introduces better ways to do some things, and doesn't
20087 support some of the ugly things in version 2.13.  So, depending on how
20088 sophisticated your @file{configure.ac} files are, you might have to do
20089 some manual work in order to upgrade to version 2.50.  This chapter
20090 points out some problems to watch for when upgrading.  Also, perhaps
20091 your @command{configure} scripts could benefit from some of the new
20092 features in version 2.50; the changes are summarized in the file
20093 @file{NEWS} in the Autoconf distribution.
20094 @end quotation
20096 @menu
20097 * Changed Quotation::           Broken code which used to work
20098 * New Macros::                  Interaction with foreign macros
20099 * Hosts and Cross-Compilation::  Bugward compatibility kludges
20100 * AC_LIBOBJ vs LIBOBJS::        LIBOBJS is a forbidden token
20101 * AC_FOO_IFELSE vs AC_TRY_FOO::  A more generic scheme for testing sources
20102 @end menu
20104 @node Changed Quotation
20105 @subsection Changed Quotation
20107 The most important changes are invisible to you: the implementation of
20108 most macros have completely changed.  This allowed more factorization of
20109 the code, better error messages, a higher uniformity of the user's
20110 interface etc.  Unfortunately, as a side effect, some construct which
20111 used to (miraculously) work might break starting with Autoconf 2.50.
20112 The most common culprit is bad quotation.
20114 For instance, in the following example, the message is not properly
20115 quoted:
20117 @example
20118 AC_INIT
20119 AC_CHECK_HEADERS(foo.h, ,
20120   AC_MSG_ERROR(cannot find foo.h, bailing out))
20121 AC_OUTPUT
20122 @end example
20124 @noindent
20125 Autoconf 2.13 simply ignores it:
20127 @example
20128 $ @kbd{autoconf-2.13; ./configure --silent}
20129 creating cache ./config.cache
20130 configure: error: cannot find foo.h
20132 @end example
20134 @noindent
20135 while Autoconf 2.50 produces a broken @file{configure}:
20137 @example
20138 $ @kbd{autoconf-2.50; ./configure --silent}
20139 configure: error: cannot find foo.h
20140 ./configure: exit: bad non-numeric arg `bailing'
20141 ./configure: exit: bad non-numeric arg `bailing'
20143 @end example
20145 The message needs to be quoted, and the @code{AC_MSG_ERROR} invocation
20146 too!
20148 @example
20149 AC_INIT([Example], [1.0], [bug-example@@example.org])
20150 AC_CHECK_HEADERS([foo.h], [],
20151   [AC_MSG_ERROR([cannot find foo.h, bailing out])])
20152 AC_OUTPUT
20153 @end example
20155 Many many (and many more) Autoconf macros were lacking proper quotation,
20156 including no less than@dots{} @code{AC_DEFUN} itself!
20158 @example
20159 $ @kbd{cat configure.in}
20160 AC_DEFUN([AC_PROG_INSTALL],
20161 [# My own much better version
20163 AC_INIT
20164 AC_PROG_INSTALL
20165 AC_OUTPUT
20166 $ @kbd{autoconf-2.13}
20167 autoconf: Undefined macros:
20168 ***BUG in Autoconf--please report*** AC_FD_MSG
20169 ***BUG in Autoconf--please report*** AC_EPI
20170 configure.in:1:AC_DEFUN([AC_PROG_INSTALL],
20171 configure.in:5:AC_PROG_INSTALL
20172 $ @kbd{autoconf-2.50}
20174 @end example
20177 @node New Macros
20178 @subsection New Macros
20180 @cindex undefined macro
20181 @cindex @code{_m4_divert_diversion}
20183 While Autoconf was relatively dormant in the late 1990s, Automake
20184 provided Autoconf-like macros for a while.  Starting with Autoconf 2.50
20185 in 2001, Autoconf provided
20186 versions of these macros, integrated in the @code{AC_} namespace,
20187 instead of @code{AM_}.  But in order to ease the upgrading via
20188 @command{autoupdate}, bindings to such @code{AM_} macros are provided.
20190 Unfortunately older versions of Automake (e.g., Automake 1.4)
20191 did not quote the names of these macros.
20192 Therefore, when @command{m4} finds something like
20193 @samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, @dots{})} in @file{aclocal.m4},
20194 @code{AM_TYPE_PTRDIFF_T} is
20195 expanded, replaced with its Autoconf definition.
20197 Fortunately Autoconf catches pre-@code{AC_INIT} expansions, and
20198 complains, in its own words:
20200 @example
20201 $ @kbd{cat configure.ac}
20202 AC_INIT([Example], [1.0], [bug-example@@example.org])
20203 AM_TYPE_PTRDIFF_T
20204 $ @kbd{aclocal-1.4}
20205 $ @kbd{autoconf}
20206 aclocal.m4:17: error: m4_defn: undefined macro: _m4_divert_diversion
20207 aclocal.m4:17: the top level
20208 autom4te: m4 failed with exit status: 1
20210 @end example
20212 Modern versions of Automake no longer define most of these
20213 macros, and properly quote the names of the remaining macros.
20214 If you must use an old Automake, do not depend upon macros from Automake
20215 as it is simply not its job
20216 to provide macros (but the one it requires itself):
20218 @example
20219 $ @kbd{cat configure.ac}
20220 AC_INIT([Example], [1.0], [bug-example@@example.org])
20221 AM_TYPE_PTRDIFF_T
20222 $ @kbd{rm aclocal.m4}
20223 $ @kbd{autoupdate}
20224 autoupdate: `configure.ac' is updated
20225 $ @kbd{cat configure.ac}
20226 AC_INIT([Example], [1.0], [bug-example@@example.org])
20227 AC_CHECK_TYPES([ptrdiff_t])
20228 $ @kbd{aclocal-1.4}
20229 $ @kbd{autoconf}
20231 @end example
20234 @node Hosts and Cross-Compilation
20235 @subsection Hosts and Cross-Compilation
20236 @cindex Cross compilation
20238 Based on the experience of compiler writers, and after long public
20239 debates, many aspects of the cross-compilation chain have changed:
20241 @itemize @minus
20242 @item
20243 the relationship between the build, host, and target architecture types,
20245 @item
20246 the command line interface for specifying them to @command{configure},
20248 @item
20249 the variables defined in @command{configure},
20251 @item
20252 the enabling of cross-compilation mode.
20253 @end itemize
20255 @sp 1
20257 The relationship between build, host, and target have been cleaned up:
20258 the chain of default is now simply: target defaults to host, host to
20259 build, and build to the result of @command{config.guess}.  Nevertheless,
20260 in order to ease the transition from 2.13 to 2.50, the following
20261 transition scheme is implemented.  @emph{Do not rely on it}, as it will
20262 be completely disabled in a couple of releases (we cannot keep it, as it
20263 proves to cause more problems than it cures).
20265 They all default to the result of running @command{config.guess}, unless
20266 you specify either @option{--build} or @option{--host}.  In this case,
20267 the default becomes the system type you specified.  If you specify both,
20268 and they're different, @command{configure} enters cross compilation
20269 mode, so it doesn't run any tests that require execution.
20271 Hint: if you mean to override the result of @command{config.guess},
20272 prefer @option{--build} over @option{--host}.  In the future,
20273 @option{--host} will not override the name of the build system type.
20274 Whenever you specify @option{--host}, be sure to specify @option{--build}
20275 too.
20277 @sp 1
20279 For backward compatibility, @command{configure} accepts a system
20280 type as an option by itself.  Such an option overrides the
20281 defaults for build, host, and target system types.  The following
20282 configure statement configures a cross toolchain that runs on
20283 Net@acronym{BSD}/alpha but generates code for @acronym{GNU} Hurd/sparc,
20284 which is also the build platform.
20286 @example
20287 ./configure --host=alpha-netbsd sparc-gnu
20288 @end example
20290 @sp 1
20292 In Autoconf 2.13 and before, the variables @code{build}, @code{host},
20293 and @code{target} had a different semantics before and after the
20294 invocation of @code{AC_CANONICAL_BUILD} etc.  Now, the argument of
20295 @option{--build} is strictly copied into @code{build_alias}, and is left
20296 empty otherwise.  After the @code{AC_CANONICAL_BUILD}, @code{build} is
20297 set to the canonicalized build type.  To ease the transition, before,
20298 its contents is the same as that of @code{build_alias}.  Do @emph{not}
20299 rely on this broken feature.
20301 For consistency with the backward compatibility scheme exposed above,
20302 when @option{--host} is specified but @option{--build} isn't, the build
20303 system is assumed to be the same as @option{--host}, and
20304 @samp{build_alias} is set to that value.  Eventually, this
20305 historically incorrect behavior will go away.
20307 @sp 1
20309 The former scheme to enable cross-compilation proved to cause more harm
20310 than good, in particular, it used to be triggered too easily, leaving
20311 regular end users puzzled in front of cryptic error messages.
20312 @command{configure} could even enter cross-compilation mode only
20313 because the compiler was not functional.  This is mainly because
20314 @command{configure} used to try to detect cross-compilation, instead of
20315 waiting for an explicit flag from the user.
20317 Now, @command{configure} enters cross-compilation mode if and only if
20318 @option{--host} is passed.
20320 That's the short documentation.  To ease the transition between 2.13 and
20321 its successors, a more complicated scheme is implemented.  @emph{Do not
20322 rely on the following}, as it will be removed in the near future.
20324 If you specify @option{--host}, but not @option{--build}, when
20325 @command{configure} performs the first compiler test it tries to run
20326 an executable produced by the compiler.  If the execution fails, it
20327 enters cross-compilation mode.  This is fragile.  Moreover, by the time
20328 the compiler test is performed, it may be too late to modify the
20329 build-system type: other tests may have already been performed.
20330 Therefore, whenever you specify @option{--host}, be sure to specify
20331 @option{--build} too.
20333 @example
20334 ./configure --build=i686-pc-linux-gnu --host=m68k-coff
20335 @end example
20337 @noindent
20338 enters cross-compilation mode.  The former interface, which
20339 consisted in setting the compiler to a cross-compiler without informing
20340 @command{configure} is obsolete.  For instance, @command{configure}
20341 fails if it can't run the code generated by the specified compiler if you
20342 configure as follows:
20344 @example
20345 ./configure CC=m68k-coff-gcc
20346 @end example
20349 @node AC_LIBOBJ vs LIBOBJS
20350 @subsection @code{AC_LIBOBJ} vs.@: @code{LIBOBJS}
20352 Up to Autoconf 2.13, the replacement of functions was triggered via the
20353 variable @code{LIBOBJS}.  Since Autoconf 2.50, the macro
20354 @code{AC_LIBOBJ} should be used instead (@pxref{Generic Functions}).
20355 Starting at Autoconf 2.53, the use of @code{LIBOBJS} is an error.
20357 This change is mandated by the unification of the @acronym{GNU} Build System
20358 components.  In particular, the various fragile techniques used to parse
20359 a @file{configure.ac} are all replaced with the use of traces.  As a
20360 consequence, any action must be traceable, which obsoletes critical
20361 variable assignments.  Fortunately, @code{LIBOBJS} was the only problem,
20362 and it can even be handled gracefully (read, ``without your having to
20363 change something'').
20365 There were two typical uses of @code{LIBOBJS}: asking for a replacement
20366 function, and adjusting @code{LIBOBJS} for Automake and/or Libtool.
20368 @sp 1
20370 As for function replacement, the fix is immediate: use
20371 @code{AC_LIBOBJ}.  For instance:
20373 @example
20374 LIBOBJS="$LIBOBJS fnmatch.o"
20375 LIBOBJS="$LIBOBJS malloc.$ac_objext"
20376 @end example
20378 @noindent
20379 should be replaced with:
20381 @example
20382 AC_LIBOBJ([fnmatch])
20383 AC_LIBOBJ([malloc])
20384 @end example
20386 @sp 1
20388 @ovindex LIBOBJDIR
20389 When used with Automake 1.10 or newer, a suitable value for
20390 @code{LIBOBJDIR} is set so that the @code{LIBOBJS} and @code{LTLIBOBJS}
20391 can be referenced from any @file{Makefile.am}.  Even without Automake,
20392 arranging for @code{LIBOBJDIR} to be set correctly enables
20393 referencing @code{LIBOBJS} and @code{LTLIBOBJS} in another directory.
20394 The @code{LIBOBJDIR} feature is experimental.
20397 @node AC_FOO_IFELSE vs AC_TRY_FOO
20398 @subsection @code{AC_FOO_IFELSE} vs.@: @code{AC_TRY_FOO}
20400 Since Autoconf 2.50, internal codes uses @code{AC_PREPROC_IFELSE},
20401 @code{AC_COMPILE_IFELSE}, @code{AC_LINK_IFELSE}, and
20402 @code{AC_RUN_IFELSE} on one hand and @code{AC_LANG_SOURCES},
20403 and @code{AC_LANG_PROGRAM} on the other hand instead of the deprecated
20404 @code{AC_TRY_CPP}, @code{AC_TRY_COMPILE}, @code{AC_TRY_LINK}, and
20405 @code{AC_TRY_RUN}.  The motivations where:
20406 @itemize @minus
20407 @item
20408 a more consistent interface: @code{AC_TRY_COMPILE} etc.@: were double
20409 quoting their arguments;
20411 @item
20412 the combinatoric explosion is solved by decomposing on the one hand the
20413 generation of sources, and on the other hand executing the program;
20415 @item
20416 this scheme helps supporting more languages than plain C and C++.
20417 @end itemize
20419 In addition to the change of syntax, the philosophy has changed too:
20420 while emphasis was put on speed at the expense of accuracy, today's
20421 Autoconf promotes accuracy of the testing framework at, ahem@dots{}, the
20422 expense of speed.
20425 As a perfect example of what is @emph{not} to be done, here is how to
20426 find out whether a header file contains a particular declaration, such
20427 as a typedef, a structure, a structure member, or a function.  Use
20428 @code{AC_EGREP_HEADER} instead of running @code{grep} directly on the
20429 header file; on some systems the symbol might be defined in another
20430 header file that the file you are checking includes.
20432 As a (bad) example, here is how you should not check for C preprocessor
20433 symbols, either defined by header files or predefined by the C
20434 preprocessor: using @code{AC_EGREP_CPP}:
20436 @example
20437 @group
20438 AC_EGREP_CPP(yes,
20439 [#ifdef _AIX
20440   yes
20441 #endif
20442 ], is_aix=yes, is_aix=no)
20443 @end group
20444 @end example
20446 The above example, properly written would (i) use
20447 @code{AC_LANG_PROGRAM}, and (ii) run the compiler:
20449 @example
20450 @group
20451 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
20452 [[#ifndef _AIX
20453  error: This isn't AIX!
20454 #endif
20455 ]])],
20456                    [is_aix=yes],
20457                    [is_aix=no])
20458 @end group
20459 @end example
20462 @c ============================= Generating Test Suites with Autotest
20464 @node Using Autotest
20465 @chapter Generating Test Suites with Autotest
20467 @cindex Autotest
20469 @display
20470 @strong{N.B.: This section describes an experimental feature which will
20471 be part of Autoconf in a forthcoming release.  Although we believe
20472 Autotest is stabilizing, this documentation describes an interface which
20473 might change in the future: do not depend upon Autotest without
20474 subscribing to the Autoconf mailing lists.}
20475 @end display
20477 It is paradoxical that portable projects depend on nonportable tools
20478 to run their test suite.  Autoconf by itself is the paragon of this
20479 problem: although it aims at perfectly portability, up to 2.13 its
20480 test suite was using Deja@acronym{GNU}, a rich and complex testing
20481 framework, but which is far from being standard on Posix systems.
20482 Worse yet, it was likely to be missing on the most fragile platforms,
20483 the very platforms that are most likely to torture Autoconf and
20484 exhibit deficiencies.
20486 To circumvent this problem, many package maintainers have developed their
20487 own testing framework, based on simple shell scripts whose sole outputs
20488 are exit status values describing whether the test succeeded.  Most of
20489 these tests share common patterns, and this can result in lots of
20490 duplicated code and tedious maintenance.
20492 Following exactly the same reasoning that yielded to the inception of
20493 Autoconf, Autotest provides a test suite generation framework, based on
20494 M4 macros building a portable shell script.  The suite itself is
20495 equipped with automatic logging and tracing facilities which greatly
20496 diminish the interaction with bug reporters, and simple timing reports.
20498 Autoconf itself has been using Autotest for years, and we do attest that
20499 it has considerably improved the strength of the test suite and the
20500 quality of bug reports.  Other projects are known to use some generation
20501 of Autotest, such as Bison, Free Recode, Free Wdiff, @acronym{GNU} Tar, each of
20502 them with different needs, and this usage has validated Autotest as a general
20503 testing framework.
20505 Nonetheless, compared to Deja@acronym{GNU}, Autotest is inadequate for
20506 interactive tool testing, which is probably its main limitation.
20508 @menu
20509 * Using an Autotest Test Suite::  Autotest and the user
20510 * Writing Testsuites::          Autotest macros
20511 * testsuite Invocation::        Running @command{testsuite} scripts
20512 * Making testsuite Scripts::    Using autom4te to create @command{testsuite}
20513 @end menu
20515 @node Using an Autotest Test Suite
20516 @section Using an Autotest Test Suite
20518 @menu
20519 * testsuite Scripts::           The concepts of Autotest
20520 * Autotest Logs::               Their contents
20521 @end menu
20523 @node testsuite Scripts
20524 @subsection @command{testsuite} Scripts
20526 @cindex @command{testsuite}
20528 Generating testing or validation suites using Autotest is rather easy.
20529 The whole validation suite is held in a file to be processed through
20530 @command{autom4te}, itself using @acronym{GNU} M4 under the scene, to
20531 produce a stand-alone Bourne shell script which then gets distributed.
20532 Neither @command{autom4te} nor @acronym{GNU} M4 are needed at
20533 the installer's end.
20535 @cindex test group
20536 Each test of the validation suite should be part of some test group.  A
20537 @dfn{test group} is a sequence of interwoven tests that ought to be
20538 executed together, usually because one test in the group creates data
20539 files than a later test in the same group needs to read.  Complex test
20540 groups make later debugging more tedious.  It is much better to
20541 keep only a few tests per test group.  Ideally there is only one test
20542 per test group.
20544 For all but the simplest packages, some file such as @file{testsuite.at}
20545 does not fully hold all test sources, as these are often easier to
20546 maintain in separate files.  Each of these separate files holds a single
20547 test group, or a sequence of test groups all addressing some common
20548 functionality in the package.  In such cases, @file{testsuite.at}
20549 merely initializes the validation suite, and sometimes does elementary
20550 health checking, before listing include statements for all other test
20551 files.  The special file @file{package.m4}, containing the
20552 identification of the package, is automatically included if found.
20554 A convenient alternative consists in moving all the global issues
20555 (local Autotest macros, elementary health checking, and @code{AT_INIT}
20556 invocation) into the file @code{local.at}, and making
20557 @file{testsuite.at} be a simple list of @code{m4_include} of sub test
20558 suites.  In such case, generating the whole test suite or pieces of it
20559 is only a matter of choosing the @command{autom4te} command line
20560 arguments.
20562 The validation scripts that Autotest produces are by convention called
20563 @command{testsuite}.  When run, @command{testsuite} executes each test
20564 group in turn, producing only one summary line per test to say if that
20565 particular test succeeded or failed.  At end of all tests, summarizing
20566 counters get printed.  One debugging directory is left for each test
20567 group which failed, if any: such directories are named
20568 @file{testsuite.dir/@var{nn}}, where @var{nn} is the sequence number of
20569 the test group, and they include:
20571 @itemize @bullet
20572 @item a debugging script named @file{run} which reruns the test in
20573 @dfn{debug mode} (@pxref{testsuite Invocation}).  The automatic generation
20574 of debugging scripts has the purpose of easing the chase for bugs.
20576 @item all the files created with @code{AT_DATA}
20578 @item a log of the run, named @file{testsuite.log}
20579 @end itemize
20581 In the ideal situation, none of the tests fail, and consequently no
20582 debugging directory is left behind for validation.
20584 It often happens in practice that individual tests in the validation
20585 suite need to get information coming out of the configuration process.
20586 Some of this information, common for all validation suites, is provided
20587 through the file @file{atconfig}, automatically created by
20588 @code{AC_CONFIG_TESTDIR}.  For configuration informations which your
20589 testing environment specifically needs, you might prepare an optional
20590 file named @file{atlocal.in}, instantiated by @code{AC_CONFIG_FILES}.
20591 The configuration process produces @file{atconfig} and @file{atlocal}
20592 out of these two input files, and these two produced files are
20593 automatically read by the @file{testsuite} script.
20595 Here is a diagram showing the relationship between files.
20597 @noindent
20598 Files used in preparing a software package for distribution:
20600 @example
20601                 [package.m4] -->.
20602                                  \
20603 subfile-1.at ->.  [local.at] ---->+
20604     ...         \                  \
20605 subfile-i.at ---->-- testsuite.at -->-- autom4te* -->testsuite
20606     ...         /
20607 subfile-n.at ->'
20608 @end example
20610 @noindent
20611 Files used in configuring a software package:
20613 @example
20614                                      .--> atconfig
20615                                     /
20616 [atlocal.in] -->  config.status* --<
20617                                     \
20618                                      `--> [atlocal]
20619 @end example
20621 @noindent
20622 Files created during the test suite execution:
20624 @example
20625 atconfig -->.                    .--> testsuite.log
20626              \                  /
20627               >-- testsuite* --<
20628              /                  \
20629 [atlocal] ->'                    `--> [testsuite.dir]
20630 @end example
20633 @node Autotest Logs
20634 @subsection Autotest Logs
20636 When run, the test suite creates a log file named after itself, e.g., a
20637 test suite named @command{testsuite} creates @file{testsuite.log}.  It
20638 contains a lot of information, usually more than maintainers actually
20639 need, but therefore most of the time it contains all that is needed:
20641 @table @asis
20642 @item command line arguments
20643 @c akim s/to consist in/to consist of/
20644 A bad but unfortunately widespread habit consists of
20645 setting environment variables before the command, such as in
20646 @samp{CC=my-home-grown-cc ./testsuite}.  The test suite does not
20647 know this change, hence (i) it cannot report it to you, and (ii)
20648 it cannot preserve the value of @code{CC} for subsequent runs.
20649 Autoconf faced exactly the same problem, and solved it by asking
20650 users to pass the variable definitions as command line arguments.
20651 Autotest requires this rule, too, but has no means to enforce it; the log
20652 then contains a trace of the variables that were changed by the user.
20654 @item @file{ChangeLog} excerpts
20655 The topmost lines of all the @file{ChangeLog} files found in the source
20656 hierarchy.  This is especially useful when bugs are reported against
20657 development versions of the package, since the version string does not
20658 provide sufficient information to know the exact state of the sources
20659 the user compiled.  Of course, this relies on the use of a
20660 @file{ChangeLog}.
20662 @item build machine
20663 Running a test suite in a cross-compile environment is not an easy task,
20664 since it would mean having the test suite run on a machine @var{build},
20665 while running programs on a machine @var{host}.  It is much simpler to
20666 run both the test suite and the programs on @var{host}, but then, from
20667 the point of view of the test suite, there remains a single environment,
20668 @var{host} = @var{build}.  The log contains relevant information on the
20669 state of the build machine, including some important environment
20670 variables.
20671 @c FIXME: How about having an M4sh macro to say `hey, log the value
20672 @c of `@dots{}'?  This would help both Autoconf and Autotest.
20674 @item tested programs
20675 The absolute file name and answers to @option{--version} of the tested
20676 programs (see @ref{Writing Testsuites}, @code{AT_TESTED}).
20678 @item configuration log
20679 The contents of @file{config.log}, as created by @command{configure},
20680 are appended.  It contains the configuration flags and a detailed report
20681 on the configuration itself.
20682 @end table
20685 @node Writing Testsuites
20686 @section Writing @file{testsuite.at}
20688 The @file{testsuite.at} is a Bourne shell script making use of special
20689 Autotest M4 macros.  It often contains a call to @code{AT_INIT} near
20690 its beginning followed by one call to @code{m4_include} per source file
20691 for tests.  Each such included file, or the remainder of
20692 @file{testsuite.at} if include files are not used, contain a sequence of
20693 test groups.  Each test group begins with a call to @code{AT_SETUP},
20694 then an arbitrary number of shell commands or calls to @code{AT_CHECK},
20695 and then completes with a call to @code{AT_CLEANUP}.  Multiple test
20696 groups can be categorized by a call to @code{AT_BANNER}.
20698 @defmac AT_INIT (@ovar{name})
20699 @atindex{INIT}
20700 @c FIXME: Not clear, plus duplication of the information.
20701 Initialize Autotest.  Giving a @var{name} to the test suite is
20702 encouraged if your package includes several test suites.  In any case,
20703 the test suite always displays the package name and version.  It also
20704 inherits the package bug report address.
20705 @end defmac
20707 @defmac AT_COPYRIGHT (@var{copyright-notice})
20708 @atindex{COPYRIGHT}
20709 @cindex Copyright Notice
20710 State that, in addition to the Free Software Foundation's copyright on
20711 the Autotest macros, parts of your test suite are covered by
20712 @var{copyright-notice}.
20714 The @var{copyright-notice} shows up in both the head of
20715 @command{testsuite} and in @samp{testsuite --version}.
20716 @end defmac
20718 @defmac AT_TESTED (@var{executables})
20719 @atindex{TESTED}
20720 Log the file name and answer to @option{--version} of each program in
20721 space-separated list @var{executables}.  Several invocations register
20722 new executables, in other words, don't fear registering one program
20723 several times.
20724 @end defmac
20726 Autotest test suites rely on @env{PATH} to find the tested program.
20727 This avoids the need to generate absolute names of the various tools, and
20728 makes it possible to test installed programs.  Therefore, knowing which
20729 programs are being exercised is crucial to understanding problems in
20730 the test suite itself, or its occasional misuses.  It is a good idea to
20731 also subscribe foreign programs you depend upon, to avoid incompatible
20732 diagnostics.
20734 @sp 1
20736 @defmac AT_BANNER (@var{test-category-name})
20737 @atindex{BANNER}
20738 This macro identifies the start of a category of related test groups.
20739 When the resulting @file{testsuite} is invoked with more than one test
20740 group to run, its output will include a banner containing
20741 @var{test-category-name} prior to any tests run from that category.  The
20742 banner should be no more than about 40 or 50 characters.  A blank banner
20743 will not print, effectively ending a category and letting subsequent
20744 test groups behave as though they are uncategorized when run in
20745 isolation.
20746 @end defmac
20748 @defmac AT_SETUP (@var{test-group-name})
20749 @atindex{SETUP}
20750 This macro starts a group of related tests, all to be executed in the
20751 same subshell.  It accepts a single argument, which holds a few words
20752 (no more than about 30 or 40 characters) quickly describing the purpose
20753 of the test group being started.  @var{test-group-name} must not expand
20754 to unbalanced quotes, although quadrigraphs can be used.
20755 @end defmac
20757 @defmac AT_KEYWORDS (@var{keywords})
20758 @atindex{KEYWORDS}
20759 Associate the space-separated list of @var{keywords} to the enclosing
20760 test group.  This makes it possible to run ``slices'' of the test suite.
20761 For instance, if some of your test groups exercise some @samp{foo}
20762 feature, then using @samp{AT_KEYWORDS(foo)} lets you run
20763 @samp{./testsuite -k foo} to run exclusively these test groups.  The
20764 @var{title} of the test group is automatically recorded to
20765 @code{AT_KEYWORDS}.
20767 Several invocations within a test group accumulate new keywords.  In
20768 other words, don't fear registering the same keyword several times in a
20769 test group.
20770 @end defmac
20772 @defmac AT_CAPTURE_FILE (@var{file})
20773 @atindex{CAPTURE_FILE}
20774 If the current test group fails, log the contents of @var{file}.
20775 Several identical calls within one test group have no additional effect.
20776 @end defmac
20778 @defmac AT_XFAIL_IF (@var{shell-condition})
20779 @atindex{XFAIL_IF}
20780 Determine whether the test is expected to fail because it is a known
20781 bug (for unsupported features, you should skip the test).
20782 @var{shell-condition} is a shell expression such as a @code{test}
20783 command; you can instantiate this macro many times from within the
20784 same test group, and one of the conditions is enough to turn
20785 the test into an expected failure.
20786 @end defmac
20788 @defmac AT_CLEANUP
20789 @atindex{CLEANUP}
20790 End the current test group.
20791 @end defmac
20793 @sp 1
20795 @defmac AT_DATA (@var{file}, @var{contents})
20796 @atindex{DATA}
20797 Initialize an input data @var{file} with given @var{contents}.  Of
20798 course, the @var{contents} have to be properly quoted between square
20799 brackets to protect against included commas or spurious M4
20800 expansion.  The contents must end with an end of line.  @var{file} must
20801 be a single shell word that expands into a single file name.
20802 @end defmac
20804 @defmac AT_CHECK (@var{commands}, @dvar{status, 0}, @dvar{stdout, }, @
20805   @dvar{stderr, }, @ovar{run-if-fail}, @ovar{run-if-pass})
20806 @atindex{CHECK}
20807 Execute a test by performing given shell @var{commands}.  These commands
20808 should normally exit with @var{status}, while producing expected
20809 @var{stdout} and @var{stderr} contents.  If @var{commands} exit with
20810 status 77, then the whole test group is skipped.  Otherwise, if this test
20811 fails, run shell commands @var{run-if-fail} or, if this test passes, run shell
20812 commands @var{run-if-pass}.
20814 This macro must be invoked in between @code{AT_SETUP} and @code{AT_CLEANUP}.
20816 @c Previously, we had this:
20817 @c  The @var{commands} @emph{must not} redirect the standard output, nor the
20818 @c  standard error.
20819 @c to prevent trigerring the double redirect bug on Ultrix, see
20820 @c `File Descriptors'.  This was too restricting, and Ultrix is pretty
20821 @c much dead, so we dropped the limitation; the obvious workaround on
20822 @c Ultrix is to use a working shell there.
20824 If @var{status}, or @var{stdout}, or @var{stderr} is @samp{ignore}, then
20825 the corresponding value is not checked.
20827 The special value @samp{expout} for @var{stdout} means the expected
20828 output of the @var{commands} is the content of the file @file{expout}.
20829 If @var{stdout} is @samp{stdout}, then the standard output of the
20830 @var{commands} is available for further tests in the file @file{stdout}.
20831 Similarly for @var{stderr} with @samp{experr} and @samp{stderr}.
20832 @end defmac
20835 @node testsuite Invocation
20836 @section Running @command{testsuite} Scripts
20837 @cindex @command{testsuite}
20839 Autotest test suites support the following arguments:
20841 @table @option
20842 @item --help
20843 @itemx -h
20844 Display the list of options and exit successfully.
20846 @item --version
20847 @itemx -V
20848 Display the version of the test suite and exit successfully.
20850 @item --directory=@var{dir}
20851 @itemx -C @var{dir}
20852 Change the current directory to @var{dir} before creating any files.
20853 Useful for running the testsuite in a subdirectory from a top-level
20854 Makefile.
20856 @item --clean
20857 @itemx -c
20858 Remove all the files the test suite might have created and exit.  Meant
20859 for @code{clean} Make targets.
20861 @item --list
20862 @itemx -l
20863 List all the tests (or only the selection), including their possible
20864 keywords.
20865 @end table
20867 @sp 1
20869 By default all tests are performed (or described with
20870 @option{--list}) in the default environment first silently, then
20871 verbosely, but the environment, set of tests, and verbosity level can be
20872 tuned:
20874 @table @samp
20875 @item @var{variable}=@var{value}
20876 Set the environment @var{variable} to @var{value}.  Use this rather
20877 than @samp{FOO=foo ./testsuite} as debugging scripts would then run in a
20878 different environment.
20880 @cindex @code{AUTOTEST_PATH}
20881 The variable @code{AUTOTEST_PATH} specifies the testing path to prepend
20882 to @env{PATH}.  Relative directory names (not starting with
20883 @samp{/}) are considered to be relative to the top level of the
20884 package being built.  All directories are made absolute, first
20885 starting from the top level @emph{build} tree, then from the
20886 @emph{source} tree.  For instance @samp{./testsuite
20887 AUTOTEST_PATH=tests:bin} for a @file{/src/foo-1.0} source package built
20888 in @file{/tmp/foo} results in @samp{/tmp/foo/tests:/tmp/foo/bin} and
20889 then @samp{/src/foo-1.0/tests:/src/foo-1.0/bin} being prepended to
20890 @env{PATH}.
20892 @item @var{number}
20893 @itemx @var{number}-@var{number}
20894 @itemx @var{number}-
20895 @itemx -@var{number}
20896 Add the corresponding test groups, with obvious semantics, to the
20897 selection.
20899 @item --keywords=@var{keywords}
20900 @itemx -k @var{keywords}
20901 Add to the selection the test groups with title or keywords (arguments
20902 to @code{AT_SETUP} or @code{AT_KEYWORDS}) that match @emph{all} keywords
20903 of the comma separated list @var{keywords}, case-insensitively.  Use
20904 @samp{!} immediately before the keyword to invert the selection for this
20905 keyword.  By default, the keywords match whole words; enclose them in
20906 @samp{.*} to also match parts of words.
20908 For example, running
20910 @example
20911 @kbd{./testsuite -k 'autoupdate,.*FUNC.*'}
20912 @end example
20914 @noindent
20915 selects all tests tagged @samp{autoupdate} @emph{and} with tags
20916 containing @samp{FUNC} (as in @samp{AC_CHECK_FUNC}, @samp{AC_FUNC_ALLOCA},
20917 etc.), while
20919 @example
20920 @kbd{./testsuite -k '!autoupdate' -k '.*FUNC.*'}
20921 @end example
20923 @noindent
20924 selects all tests not tagged @samp{autoupdate} @emph{or} with tags
20925 containing @samp{FUNC}.
20927 @item --errexit
20928 @itemx -e
20929 If any test fails, immediately abort testing.  It implies
20930 @option{--debug}: post test group clean up, and top-level logging
20931 are inhibited.  This option is meant for the full test
20932 suite, it is not really useful for generated debugging scripts.
20934 @item --verbose
20935 @itemx -v
20936 Force more verbosity in the detailed output of what is being done.  This
20937 is the default for debugging scripts.
20939 @item --debug
20940 @itemx -d
20941 Do not remove the files after a test group was performed ---but they are
20942 still removed @emph{before}, therefore using this option is sane when
20943 running several test groups.  Create debugging scripts.  Do not
20944 overwrite the top-level
20945 log (in order to preserve supposedly existing full log file).  This is
20946 the default for debugging scripts, but it can also be useful to debug
20947 the testsuite itself.
20949 @item --trace
20950 @itemx -x
20951 Trigger shell tracing of the test groups.
20952 @end table
20955 @node Making testsuite Scripts
20956 @section Making @command{testsuite} Scripts
20958 For putting Autotest into movement, you need some configuration and
20959 makefile machinery.  We recommend, at least if your package uses deep or
20960 shallow hierarchies, that you use @file{tests/} as the name of the
20961 directory holding all your tests and their makefile.  Here is a
20962 check list of things to do.
20964 @itemize @minus
20966 @item
20967 @cindex @file{package.m4}
20968 Make sure to create the file @file{package.m4}, which defines the
20969 identity of the package.  It must define @code{AT_PACKAGE_STRING}, the
20970 full signature of the package, and @code{AT_PACKAGE_BUGREPORT}, the
20971 address to which bug reports should be sent.  For sake of completeness,
20972 we suggest that you also define @code{AT_PACKAGE_NAME},
20973 @code{AT_PACKAGE_TARNAME}, and @code{AT_PACKAGE_VERSION}.
20974 @xref{Initializing configure}, for a description of these variables.  We
20975 suggest the following makefile excerpt:
20977 @smallexample
20978 # The `:;' works around a Bash 3.2 bug when the output is not writeable.
20979 $(srcdir)/package.m4: $(top_srcdir)/configure.ac
20980         :;@{ \
20981           echo '# Signature of the current package.' && \
20982           echo 'm4_define([AT_PACKAGE_NAME],      [@@PACKAGE_NAME@@])' && \
20983           echo 'm4_define([AT_PACKAGE_TARNAME],   [@@PACKAGE_TARNAME@@])' && \
20984           echo 'm4_define([AT_PACKAGE_VERSION],   [@@PACKAGE_VERSION@@])' && \
20985           echo 'm4_define([AT_PACKAGE_STRING],    [@@PACKAGE_STRING@@])' && \
20986           echo 'm4_define([AT_PACKAGE_BUGREPORT], [@@PACKAGE_BUGREPORT@@])'; \
20987         @} >'$(srcdir)/package.m4'
20988 @end smallexample
20990 @noindent
20991 Be sure to distribute @file{package.m4} and to put it into the source
20992 hierarchy: the test suite ought to be shipped!
20994 @item
20995 Invoke @code{AC_CONFIG_TESTDIR}.
20997 @defmac AC_CONFIG_TESTDIR (@var{directory}, @dvar{test-path, directory})
20998 @acindex{CONFIG_TESTDIR}
20999 An Autotest test suite is to be configured in @var{directory}.  This
21000 macro requires the instantiation of @file{@var{directory}/atconfig} from
21001 @file{@var{directory}/atconfig.in}, and sets the default
21002 @code{AUTOTEST_PATH} to @var{test-path} (@pxref{testsuite Invocation}).
21003 @end defmac
21005 @item
21006 Still within @file{configure.ac}, as appropriate, ensure that some
21007 @code{AC_CONFIG_FILES} command includes substitution for
21008 @file{tests/atlocal}.
21010 @item
21011 The @file{tests/Makefile.in} should be modified so the validation in
21012 your package is triggered by @samp{make check}.  An example is provided
21013 below.
21014 @end itemize
21016 With Automake, here is a minimal example about how to link @samp{make
21017 check} with a validation suite.
21019 @example
21020 EXTRA_DIST = testsuite.at $(TESTSUITE) atlocal.in
21021 TESTSUITE = $(srcdir)/testsuite
21023 check-local: atconfig atlocal $(TESTSUITE)
21024         $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
21026 installcheck-local: atconfig atlocal $(TESTSUITE)
21027         $(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' \
21028           $(TESTSUITEFLAGS)
21030 clean-local:
21031         test ! -f '$(TESTSUITE)' || \
21032          $(SHELL) '$(TESTSUITE)' --clean
21034 AUTOTEST = $(AUTOM4TE) --language=autotest
21035 $(TESTSUITE): $(srcdir)/testsuite.at
21036         $(AUTOTEST) -I '$(srcdir)' -o $@@.tmp $@@.at
21037         mv $@@.tmp $@@
21038 @end example
21040 You might want to list explicitly the dependencies, i.e., the list of
21041 the files @file{testsuite.at} includes.
21043 If you don't use Automake, you might need to add lines inspired from the
21044 following:
21046 @example
21047 subdir = tests
21049 atconfig: $(top_builddir)/config.status
21050         cd $(top_builddir) && \
21051            $(SHELL) ./config.status $(subdir)/$@@
21053 atlocal: $(srcdir)/atlocal.in $(top_builddir)/config.status
21054         cd $(top_builddir) && \
21055            $(SHELL) ./config.status $(subdir)/$@@
21056 @end example
21058 @noindent
21059 and manage to have @code{$(EXTRA_DIST)} distributed.
21061 If you use Automake, however, you don't need to add a rule to generate
21062 @file{atlocal}.
21064 With all this in place, and if you have not initialized @samp{TESTSUITEFLAGS}
21065 within your makefile, you can fine-tune test suite execution with this
21066 variable, for example:
21068 @example
21069 make check TESTSUITEFLAGS='-v -d -x 75 -k AC_PROG_CC CFLAGS=-g'
21070 @end example
21074 @c =============================== Frequent Autoconf Questions, with answers
21076 @node FAQ
21077 @chapter Frequent Autoconf Questions, with answers
21079 Several questions about Autoconf come up occasionally.  Here some of them
21080 are addressed.
21082 @menu
21083 * Distributing::                Distributing @command{configure} scripts
21084 * Why GNU M4::                  Why not use the standard M4?
21085 * Bootstrapping::               Autoconf and @acronym{GNU} M4 require each other?
21086 * Why Not Imake::               Why @acronym{GNU} uses @command{configure} instead of Imake
21087 * Defining Directories::        Passing @code{datadir} to program
21088 * Autom4te Cache::              What is it?  Can I remove it?
21089 * Present But Cannot Be Compiled::  Compiler and Preprocessor Disagree
21090 @end menu
21092 @node Distributing
21093 @section Distributing @command{configure} Scripts
21094 @cindex License
21096 @display
21097 What are the restrictions on distributing @command{configure}
21098 scripts that Autoconf generates?  How does that affect my
21099 programs that use them?
21100 @end display
21102 There are no restrictions on how the configuration scripts that Autoconf
21103 produces may be distributed or used.  In Autoconf version 1, they were
21104 covered by the @acronym{GNU} General Public License.  We still encourage
21105 software authors to distribute their work under terms like those of the
21106 @acronym{GPL}, but doing so is not required to use Autoconf.
21108 Of the other files that might be used with @command{configure},
21109 @file{config.h.in} is under whatever copyright you use for your
21110 @file{configure.ac}.  @file{config.sub} and @file{config.guess} have an
21111 exception to the @acronym{GPL} when they are used with an Autoconf-generated
21112 @command{configure} script, which permits you to distribute them under the
21113 same terms as the rest of your package.  @file{install-sh} is from the X
21114 Consortium and is not copyrighted.
21116 @node Why GNU M4
21117 @section Why Require @acronym{GNU} M4?
21119 @display
21120 Why does Autoconf require @acronym{GNU} M4?
21121 @end display
21123 Many M4 implementations have hard-coded limitations on the size and
21124 number of macros that Autoconf exceeds.  They also lack several
21125 builtin macros that it would be difficult to get along without in a
21126 sophisticated application like Autoconf, including:
21128 @example
21129 m4_builtin
21130 m4_indir
21131 m4_bpatsubst
21132 __file__
21133 __line__
21134 @end example
21136 Autoconf requires version 1.4.5 or later of @acronym{GNU} M4.
21138 Since only software maintainers need to use Autoconf, and since @acronym{GNU}
21139 M4 is simple to configure and install, it seems reasonable to require
21140 @acronym{GNU} M4 to be installed also.  Many maintainers of @acronym{GNU} and
21141 other free software already have most of the @acronym{GNU} utilities
21142 installed, since they prefer them.
21144 @node Bootstrapping
21145 @section How Can I Bootstrap?
21146 @cindex Bootstrap
21148 @display
21149 If Autoconf requires @acronym{GNU} M4 and @acronym{GNU} M4 has an Autoconf
21150 @command{configure} script, how do I bootstrap?  It seems like a chicken
21151 and egg problem!
21152 @end display
21154 This is a misunderstanding.  Although @acronym{GNU} M4 does come with a
21155 @command{configure} script produced by Autoconf, Autoconf is not required
21156 in order to run the script and install @acronym{GNU} M4.  Autoconf is only
21157 required if you want to change the M4 @command{configure} script, which few
21158 people have to do (mainly its maintainer).
21160 @node Why Not Imake
21161 @section Why Not Imake?
21162 @cindex Imake
21164 @display
21165 Why not use Imake instead of @command{configure} scripts?
21166 @end display
21168 Several people have written addressing this question, so I include
21169 adaptations of their explanations here.
21171 The following answer is based on one written by Richard Pixley:
21173 @quotation
21174 Autoconf generated scripts frequently work on machines that it has
21175 never been set up to handle before.  That is, it does a good job of
21176 inferring a configuration for a new system.  Imake cannot do this.
21178 Imake uses a common database of host specific data.  For X11, this makes
21179 sense because the distribution is made as a collection of tools, by one
21180 central authority who has control over the database.
21182 @acronym{GNU} tools are not released this way.  Each @acronym{GNU} tool has a
21183 maintainer; these maintainers are scattered across the world.  Using a
21184 common database would be a maintenance nightmare.  Autoconf may appear
21185 to be this kind of database, but in fact it is not.  Instead of listing
21186 host dependencies, it lists program requirements.
21188 If you view the @acronym{GNU} suite as a collection of native tools, then the
21189 problems are similar.  But the @acronym{GNU} development tools can be
21190 configured as cross tools in almost any host+target permutation.  All of
21191 these configurations can be installed concurrently.  They can even be
21192 configured to share host independent files across hosts.  Imake doesn't
21193 address these issues.
21195 Imake templates are a form of standardization.  The @acronym{GNU} coding
21196 standards address the same issues without necessarily imposing the same
21197 restrictions.
21198 @end quotation
21201 Here is some further explanation, written by Per Bothner:
21203 @quotation
21204 One of the advantages of Imake is that it easy to generate large
21205 makefiles using the @samp{#include} and macro mechanisms of @command{cpp}.
21206 However, @code{cpp} is not programmable: it has limited conditional
21207 facilities, and no looping.  And @code{cpp} cannot inspect its
21208 environment.
21210 All of these problems are solved by using @code{sh} instead of
21211 @code{cpp}.  The shell is fully programmable, has macro substitution,
21212 can execute (or source) other shell scripts, and can inspect its
21213 environment.
21214 @end quotation
21217 Paul Eggert elaborates more:
21219 @quotation
21220 With Autoconf, installers need not assume that Imake itself is already
21221 installed and working well.  This may not seem like much of an advantage
21222 to people who are accustomed to Imake.  But on many hosts Imake is not
21223 installed or the default installation is not working well, and requiring
21224 Imake to install a package hinders the acceptance of that package on
21225 those hosts.  For example, the Imake template and configuration files
21226 might not be installed properly on a host, or the Imake build procedure
21227 might wrongly assume that all source files are in one big directory
21228 tree, or the Imake configuration might assume one compiler whereas the
21229 package or the installer needs to use another, or there might be a
21230 version mismatch between the Imake expected by the package and the Imake
21231 supported by the host.  These problems are much rarer with Autoconf,
21232 where each package comes with its own independent configuration
21233 processor.
21235 Also, Imake often suffers from unexpected interactions between
21236 @command{make} and the installer's C preprocessor.  The fundamental problem
21237 here is that the C preprocessor was designed to preprocess C programs,
21238 not makefiles.  This is much less of a problem with Autoconf,
21239 which uses the general-purpose preprocessor M4, and where the
21240 package's author (rather than the installer) does the preprocessing in a
21241 standard way.
21242 @end quotation
21245 Finally, Mark Eichin notes:
21247 @quotation
21248 Imake isn't all that extensible, either.  In order to add new features to
21249 Imake, you need to provide your own project template, and duplicate most
21250 of the features of the existing one.  This means that for a sophisticated
21251 project, using the vendor-provided Imake templates fails to provide any
21252 leverage---since they don't cover anything that your own project needs
21253 (unless it is an X11 program).
21255 On the other side, though:
21257 The one advantage that Imake has over @command{configure}:
21258 @file{Imakefile} files tend to be much shorter (likewise, less redundant)
21259 than @file{Makefile.in} files.  There is a fix to this, however---at least
21260 for the Kerberos V5 tree, we've modified things to call in common
21261 @file{post.in} and @file{pre.in} makefile fragments for the
21262 entire tree.  This means that a lot of common things don't have to be
21263 duplicated, even though they normally are in @command{configure} setups.
21264 @end quotation
21267 @node Defining Directories
21268 @section How Do I @code{#define} Installation Directories?
21270 @display
21271 My program needs library files, installed in @code{datadir} and
21272 similar.  If I use
21274 @example
21275 AC_DEFINE_UNQUOTED([DATADIR], [$datadir],
21276   [Define to the read-only architecture-independent
21277    data directory.])
21278 @end example
21280 @noindent
21281 I get
21283 @example
21284 #define DATADIR "$@{prefix@}/share"
21285 @end example
21286 @end display
21288 As already explained, this behavior is on purpose, mandated by the
21289 @acronym{GNU} Coding Standards, see @ref{Installation Directory
21290 Variables}.  There are several means to achieve a similar goal:
21292 @itemize @minus
21293 @item
21294 Do not use @code{AC_DEFINE} but use your makefile to pass the
21295 actual value of @code{datadir} via compilation flags.
21296 @xref{Installation Directory Variables}, for the details.
21298 @item
21299 This solution can be simplified when compiling a program: you may either
21300 extend the @code{CPPFLAGS}:
21302 @example
21303 CPPFLAGS = -DDATADIR='"$(datadir)"' @@CPPFLAGS@@
21304 @end example
21306 @noindent
21307 If you are using Automake, you should use @code{AM_CPPFLAGS} instead:
21309 @example
21310 AM_CPPFLAGS = -DDATADIR='"$(datadir)"'
21311 @end example
21313 @noindent
21314 Alternatively, create a dedicated header file:
21316 @example
21317 DISTCLEANFILES = myprog-paths.h
21318 myprog-paths.h: Makefile
21319         echo '#define DATADIR "$(datadir)"' >$@@
21320 @end example
21322 @item
21323 Use @code{AC_DEFINE} but have @command{configure} compute the literal
21324 value of @code{datadir} and others.  Many people have wrapped macros to
21325 automate this task.  For instance, the macro @code{AC_DEFINE_DIR} from
21326 the @uref{http://autoconf-archive.cryp.to/, Autoconf Macro
21327 Archive}.
21329 This solution does not conform to the @acronym{GNU} Coding Standards.
21331 @item
21332 Note that all the previous solutions hard wire the absolute name of
21333 these directories in the executables, which is not a good property.  You
21334 may try to compute the names relative to @code{prefix}, and try to
21335 find @code{prefix} at runtime, this way your package is relocatable.
21336 @end itemize
21339 @node Autom4te Cache
21340 @section What is @file{autom4te.cache}?
21342 @display
21343 What is this directory @file{autom4te.cache}?  Can I safely remove it?
21344 @end display
21346 In the @acronym{GNU} Build System, @file{configure.ac} plays a central
21347 role and is read by many tools: @command{autoconf} to create
21348 @file{configure}, @command{autoheader} to create @file{config.h.in},
21349 @command{automake} to create @file{Makefile.in}, @command{autoscan} to
21350 check the completeness of @file{configure.ac}, @command{autoreconf} to
21351 check the @acronym{GNU} Build System components that are used.  To
21352 ``read @file{configure.ac}'' actually means to compile it with M4,
21353 which can be a long process for complex @file{configure.ac}.
21355 This is why all these tools, instead of running directly M4, invoke
21356 @command{autom4te} (@pxref{autom4te Invocation}) which, while answering to
21357 a specific demand, stores additional information in
21358 @file{autom4te.cache} for future runs.  For instance, if you run
21359 @command{autoconf}, behind the scenes, @command{autom4te} also
21360 stores information for the other tools, so that when you invoke
21361 @command{autoheader} or @command{automake} etc., reprocessing
21362 @file{configure.ac} is not needed.  The speed up is frequently 30%,
21363 and is increasing with the size of @file{configure.ac}.
21365 But it is and remains being simply a cache: you can safely remove it.
21367 @sp 1
21369 @display
21370 Can I permanently get rid of it?
21371 @end display
21373 The creation of this cache can be disabled from
21374 @file{~/.autom4te.cfg}, see @ref{Customizing autom4te}, for more
21375 details.  You should be aware that disabling the cache slows down the
21376 Autoconf test suite by 40%.  The more @acronym{GNU} Build System
21377 components are used, the more the cache is useful; for instance
21378 running @samp{autoreconf -f} on the Core Utilities is twice slower without
21379 the cache @emph{although @option{--force} implies that the cache is
21380 not fully exploited}, and eight times slower than without
21381 @option{--force}.
21384 @node Present But Cannot Be Compiled
21385 @section Header Present But Cannot Be Compiled
21387 The most important guideline to bear in mind when checking for
21388 features is to mimic as much as possible the intended use.
21389 Unfortunately, old versions of @code{AC_CHECK_HEADER} and
21390 @code{AC_CHECK_HEADERS} failed to follow this idea, and called
21391 the preprocessor, instead of the compiler, to check for headers.  As a
21392 result, incompatibilities between headers went unnoticed during
21393 configuration, and maintainers finally had to deal with this issue
21394 elsewhere.
21396 As of Autoconf 2.56 both checks are performed, and @code{configure}
21397 complains loudly if the compiler and the preprocessor do not agree.
21398 For the time being the result used is that of the preprocessor, to give
21399 maintainers time to adjust their @file{configure.ac}, but in the
21400 future, only the compiler will be considered.
21402 Consider the following example:
21404 @smallexample
21405 $ @kbd{cat number.h}
21406 typedef int number;
21407 $ @kbd{cat pi.h}
21408 const number pi = 3;
21409 $ @kbd{cat configure.ac}
21410 AC_INIT([Example], [1.0], [bug-example@@example.org])
21411 AC_CHECK_HEADERS([pi.h])
21412 $ @kbd{autoconf -Wall}
21413 $ @kbd{./configure}
21414 checking for gcc... gcc
21415 checking for C compiler default output file name... a.out
21416 checking whether the C compiler works... yes
21417 checking whether we are cross compiling... no
21418 checking for suffix of executables...
21419 checking for suffix of object files... o
21420 checking whether we are using the GNU C compiler... yes
21421 checking whether gcc accepts -g... yes
21422 checking for gcc option to accept ISO C89... none needed
21423 checking how to run the C preprocessor... gcc -E
21424 checking for grep that handles long lines and -e... grep
21425 checking for egrep... grep -E
21426 checking for ANSI C header files... yes
21427 checking for sys/types.h... yes
21428 checking for sys/stat.h... yes
21429 checking for stdlib.h... yes
21430 checking for string.h... yes
21431 checking for memory.h... yes
21432 checking for strings.h... yes
21433 checking for inttypes.h... yes
21434 checking for stdint.h... yes
21435 checking for unistd.h... yes
21436 checking pi.h usability... no
21437 checking pi.h presence... yes
21438 configure: WARNING: pi.h: present but cannot be compiled
21439 configure: WARNING: pi.h:     check for missing prerequisite headers?
21440 configure: WARNING: pi.h: see the Autoconf documentation
21441 configure: WARNING: pi.h:     section "Present But Cannot Be Compiled"
21442 configure: WARNING: pi.h: proceeding with the preprocessor's result
21443 configure: WARNING: pi.h: in the future, the compiler will take precedence
21444 configure: WARNING:     ## -------------------------------------- ##
21445 configure: WARNING:     ## Report this to bug-example@@example.org ##
21446 configure: WARNING:     ## -------------------------------------- ##
21447 checking for pi.h... yes
21448 @end smallexample
21450 @noindent
21451 The proper way the handle this case is using the fourth argument
21452 (@pxref{Generic Headers}):
21454 @example
21455 $ @kbd{cat configure.ac}
21456 AC_INIT([Example], [1.0], [bug-example@@example.org])
21457 AC_CHECK_HEADERS([number.h pi.h], [], [],
21458 [[#ifdef HAVE_NUMBER_H
21459 # include <number.h>
21460 #endif
21462 $ @kbd{autoconf -Wall}
21463 $ @kbd{./configure}
21464 checking for gcc... gcc
21465 checking for C compiler default output... a.out
21466 checking whether the C compiler works... yes
21467 checking whether we are cross compiling... no
21468 checking for suffix of executables...
21469 checking for suffix of object files... o
21470 checking whether we are using the GNU C compiler... yes
21471 checking whether gcc accepts -g... yes
21472 checking for gcc option to accept ANSI C... none needed
21473 checking for number.h... yes
21474 checking for pi.h... yes
21475 @end example
21477 See @ref{Particular Headers}, for a list of headers with their
21478 prerequisite.
21480 @c ===================================================== History of Autoconf.
21482 @node History
21483 @chapter History of Autoconf
21484 @cindex History of autoconf
21486 You may be wondering, Why was Autoconf originally written?  How did it
21487 get into its present form?  (Why does it look like gorilla spit?)  If
21488 you're not wondering, then this chapter contains no information useful
21489 to you, and you might as well skip it.  If you @emph{are} wondering,
21490 then let there be light@enddots{}
21492 @menu
21493 * Genesis::                     Prehistory and naming of @command{configure}
21494 * Exodus::                      The plagues of M4 and Perl
21495 * Leviticus::                   The priestly code of portability arrives
21496 * Numbers::                     Growth and contributors
21497 * Deuteronomy::                 Approaching the promises of easy configuration
21498 @end menu
21500 @node Genesis
21501 @section Genesis
21503 In June 1991 I was maintaining many of the @acronym{GNU} utilities for the
21504 Free Software Foundation.  As they were ported to more platforms and
21505 more programs were added, the number of @option{-D} options that users
21506 had to select in the makefile (around 20) became burdensome.
21507 Especially for me---I had to test each new release on a bunch of
21508 different systems.  So I wrote a little shell script to guess some of
21509 the correct settings for the fileutils package, and released it as part
21510 of fileutils 2.0.  That @command{configure} script worked well enough that
21511 the next month I adapted it (by hand) to create similar @command{configure}
21512 scripts for several other @acronym{GNU} utilities packages.  Brian Berliner
21513 also adapted one of my scripts for his @acronym{CVS} revision control system.
21515 Later that summer, I learned that Richard Stallman and Richard Pixley
21516 were developing similar scripts to use in the @acronym{GNU} compiler tools;
21517 so I adapted my @command{configure} scripts to support their evolving
21518 interface: using the file name @file{Makefile.in} as the templates;
21519 adding @samp{+srcdir}, the first option (of many); and creating
21520 @file{config.status} files.
21522 @node Exodus
21523 @section Exodus
21525 As I got feedback from users, I incorporated many improvements, using
21526 Emacs to search and replace, cut and paste, similar changes in each of
21527 the scripts.  As I adapted more @acronym{GNU} utilities packages to use
21528 @command{configure} scripts, updating them all by hand became impractical.
21529 Rich Murphey, the maintainer of the @acronym{GNU} graphics utilities, sent me
21530 mail saying that the @command{configure} scripts were great, and asking if
21531 I had a tool for generating them that I could send him.  No, I thought,
21532 but I should!  So I started to work out how to generate them.  And the
21533 journey from the slavery of hand-written @command{configure} scripts to the
21534 abundance and ease of Autoconf began.
21536 Cygnus @command{configure}, which was being developed at around that time,
21537 is table driven; it is meant to deal mainly with a discrete number of
21538 system types with a small number of mainly unguessable features (such as
21539 details of the object file format).  The automatic configuration system
21540 that Brian Fox had developed for Bash takes a similar approach.  For
21541 general use, it seems to me a hopeless cause to try to maintain an
21542 up-to-date database of which features each variant of each operating
21543 system has.  It's easier and more reliable to check for most features on
21544 the fly---especially on hybrid systems that people have hacked on
21545 locally or that have patches from vendors installed.
21547 I considered using an architecture similar to that of Cygnus
21548 @command{configure}, where there is a single @command{configure} script that
21549 reads pieces of @file{configure.in} when run.  But I didn't want to have
21550 to distribute all of the feature tests with every package, so I settled
21551 on having a different @command{configure} made from each
21552 @file{configure.in} by a preprocessor.  That approach also offered more
21553 control and flexibility.
21555 I looked briefly into using the Metaconfig package, by Larry Wall,
21556 Harlan Stenn, and Raphael Manfredi, but I decided not to for several
21557 reasons.  The @command{Configure} scripts it produces are interactive,
21558 which I find quite inconvenient; I didn't like the ways it checked for
21559 some features (such as library functions); I didn't know that it was
21560 still being maintained, and the @command{Configure} scripts I had
21561 seen didn't work on many modern systems (such as System V R4 and NeXT);
21562 it wasn't flexible in what it could do in response to a feature's
21563 presence or absence; I found it confusing to learn; and it was too big
21564 and complex for my needs (I didn't realize then how much Autoconf would
21565 eventually have to grow).
21567 I considered using Perl to generate my style of @command{configure}
21568 scripts, but decided that M4 was better suited to the job of simple
21569 textual substitutions: it gets in the way less, because output is
21570 implicit.  Plus, everyone already has it.  (Initially I didn't rely on
21571 the @acronym{GNU} extensions to M4.)  Also, some of my friends at the
21572 University of Maryland had recently been putting M4 front ends on
21573 several programs, including @code{tvtwm}, and I was interested in trying
21574 out a new language.
21576 @node Leviticus
21577 @section Leviticus
21579 Since my @command{configure} scripts determine the system's capabilities
21580 automatically, with no interactive user intervention, I decided to call
21581 the program that generates them Autoconfig.  But with a version number
21582 tacked on, that name would be too long for old Unix file systems,
21583 so I shortened it to Autoconf.
21585 In the fall of 1991 I called together a group of fellow questers after
21586 the Holy Grail of portability (er, that is, alpha testers) to give me
21587 feedback as I encapsulated pieces of my handwritten scripts in M4 macros
21588 and continued to add features and improve the techniques used in the
21589 checks.  Prominent among the testers were Fran@,{c}ois Pinard, who came up
21590 with the idea of making an Autoconf shell script to run M4
21591 and check for unresolved macro calls; Richard Pixley, who suggested
21592 running the compiler instead of searching the file system to find
21593 include files and symbols, for more accurate results; Karl Berry, who
21594 got Autoconf to configure @TeX{} and added the macro index to the
21595 documentation; and Ian Lance Taylor, who added support for creating a C
21596 header file as an alternative to putting @option{-D} options in a
21597 makefile, so he could use Autoconf for his @acronym{UUCP} package.
21598 The alpha testers cheerfully adjusted their files again and again as the
21599 names and calling conventions of the Autoconf macros changed from
21600 release to release.  They all contributed many specific checks, great
21601 ideas, and bug fixes.
21603 @node Numbers
21604 @section Numbers
21606 In July 1992, after months of alpha testing, I released Autoconf 1.0,
21607 and converted many @acronym{GNU} packages to use it.  I was surprised by how
21608 positive the reaction to it was.  More people started using it than I
21609 could keep track of, including people working on software that wasn't
21610 part of the @acronym{GNU} Project (such as TCL, FSP, and Kerberos V5).
21611 Autoconf continued to improve rapidly, as many people using the
21612 @command{configure} scripts reported problems they encountered.
21614 Autoconf turned out to be a good torture test for M4 implementations.
21615 Unix M4 started to dump core because of the length of the
21616 macros that Autoconf defined, and several bugs showed up in @acronym{GNU}
21617 M4 as well.  Eventually, we realized that we needed to use some
21618 features that only @acronym{GNU} M4 has.  4.3@acronym{BSD} M4, in
21619 particular, has an impoverished set of builtin macros; the System V
21620 version is better, but still doesn't provide everything we need.
21622 More development occurred as people put Autoconf under more stresses
21623 (and to uses I hadn't anticipated).  Karl Berry added checks for X11.
21624 david zuhn contributed C++ support.  Fran@,{c}ois Pinard made it diagnose
21625 invalid arguments.  Jim Blandy bravely coerced it into configuring
21626 @acronym{GNU} Emacs, laying the groundwork for several later improvements.
21627 Roland McGrath got it to configure the @acronym{GNU} C Library, wrote the
21628 @command{autoheader} script to automate the creation of C header file
21629 templates, and added a @option{--verbose} option to @command{configure}.
21630 Noah Friedman added the @option{--autoconf-dir} option and
21631 @code{AC_MACRODIR} environment variable.  (He also coined the term
21632 @dfn{autoconfiscate} to mean ``adapt a software package to use
21633 Autoconf''.)  Roland and Noah improved the quoting protection in
21634 @code{AC_DEFINE} and fixed many bugs, especially when I got sick of
21635 dealing with portability problems from February through June, 1993.
21637 @node Deuteronomy
21638 @section Deuteronomy
21640 A long wish list for major features had accumulated, and the effect of
21641 several years of patching by various people had left some residual
21642 cruft.  In April 1994, while working for Cygnus Support, I began a major
21643 revision of Autoconf.  I added most of the features of the Cygnus
21644 @command{configure} that Autoconf had lacked, largely by adapting the
21645 relevant parts of Cygnus @command{configure} with the help of david zuhn
21646 and Ken Raeburn.  These features include support for using
21647 @file{config.sub}, @file{config.guess}, @option{--host}, and
21648 @option{--target}; making links to files; and running @command{configure}
21649 scripts in subdirectories.  Adding these features enabled Ken to convert
21650 @acronym{GNU} @code{as}, and Rob Savoye to convert Deja@acronym{GNU}, to using
21651 Autoconf.
21653 I added more features in response to other peoples' requests.  Many
21654 people had asked for @command{configure} scripts to share the results of
21655 the checks between runs, because (particularly when configuring a large
21656 source tree, like Cygnus does) they were frustratingly slow.  Mike
21657 Haertel suggested adding site-specific initialization scripts.  People
21658 distributing software that had to unpack on MS-DOS asked for a way to
21659 override the @file{.in} extension on the file names, which produced file
21660 names like @file{config.h.in} containing two dots.  Jim Avera did an
21661 extensive examination of the problems with quoting in @code{AC_DEFINE}
21662 and @code{AC_SUBST}; his insights led to significant improvements.
21663 Richard Stallman asked that compiler output be sent to @file{config.log}
21664 instead of @file{/dev/null}, to help people debug the Emacs
21665 @command{configure} script.
21667 I made some other changes because of my dissatisfaction with the quality
21668 of the program.  I made the messages showing results of the checks less
21669 ambiguous, always printing a result.  I regularized the names of the
21670 macros and cleaned up coding style inconsistencies.  I added some
21671 auxiliary utilities that I had developed to help convert source code
21672 packages to use Autoconf.  With the help of Fran@,{c}ois Pinard, I made
21673 the macros not interrupt each others' messages.  (That feature revealed
21674 some performance bottlenecks in @acronym{GNU} M4, which he hastily
21675 corrected!)  I reorganized the documentation around problems people want
21676 to solve.  And I began a test suite, because experience had shown that
21677 Autoconf has a pronounced tendency to regress when we change it.
21679 Again, several alpha testers gave invaluable feedback, especially
21680 Fran@,{c}ois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn,
21681 and Mark Eichin.
21683 Finally, version 2.0 was ready.  And there was much rejoicing.  (And I
21684 have free time again.  I think.  Yeah, right.)
21687 @c ========================================================== Appendices
21690 @node GNU Free Documentation License
21691 @appendix GNU Free Documentation License
21693 @include fdl.texi
21695 @node Indices
21696 @appendix Indices
21698 @menu
21699 * Environment Variable Index::  Index of environment variables used
21700 * Output Variable Index::       Index of variables set in output files
21701 * Preprocessor Symbol Index::   Index of C preprocessor symbols defined
21702 * Autoconf Macro Index::        Index of Autoconf macros
21703 * M4 Macro Index::              Index of M4, M4sugar, and M4sh macros
21704 * Autotest Macro Index::        Index of Autotest macros
21705 * Program & Function Index::    Index of those with portability problems
21706 * Concept Index::               General index
21707 @end menu
21709 @node Environment Variable Index
21710 @appendixsec Environment Variable Index
21712 This is an alphabetical list of the environment variables that Autoconf
21713 checks.
21715 @printindex ev
21717 @node Output Variable Index
21718 @appendixsec Output Variable Index
21720 This is an alphabetical list of the variables that Autoconf can
21721 substitute into files that it creates, typically one or more
21722 makefiles.  @xref{Setting Output Variables}, for more information
21723 on how this is done.
21725 @printindex ov
21727 @node Preprocessor Symbol Index
21728 @appendixsec Preprocessor Symbol Index
21730 This is an alphabetical list of the C preprocessor symbols that the
21731 Autoconf macros define.  To work with Autoconf, C source code needs to
21732 use these names in @code{#if} or @code{#ifdef} directives.
21734 @printindex cv
21736 @node Autoconf Macro Index
21737 @appendixsec Autoconf Macro Index
21739 This is an alphabetical list of the Autoconf macros.
21740 @ifset shortindexflag
21741 To make the list easier to use, the macros are listed without their
21742 preceding @samp{AC_}.
21743 @end ifset
21745 @printindex AC
21747 @node M4 Macro Index
21748 @appendixsec M4 Macro Index
21750 This is an alphabetical list of the M4, M4sugar, and M4sh macros.
21751 @ifset shortindexflag
21752 To make the list easier to use, the macros are listed without their
21753 preceding @samp{m4_} or @samp{AS_}.
21754 @end ifset
21756 @printindex MS
21758 @node Autotest Macro Index
21759 @appendixsec Autotest Macro Index
21761 This is an alphabetical list of the Autotest macros.
21762 @ifset shortindexflag
21763 To make the list easier to use, the macros are listed without their
21764 preceding @samp{AT_}.
21765 @end ifset
21767 @printindex AT
21769 @node Program & Function Index
21770 @appendixsec Program and Function Index
21772 This is an alphabetical list of the programs and functions whose
21773 portability is discussed in this document.
21775 @printindex pr
21777 @node Concept Index
21778 @appendixsec Concept Index
21780 This is an alphabetical list of the files, tools, and concepts
21781 introduced in this document.
21783 @printindex cp
21785 @bye
21787 @c  LocalWords:  texinfo setfilename autoconf texi settitle setchapternewpage
21788 @c  LocalWords:  setcontentsaftertitlepage finalout ARG ovar varname dvar acx
21789 @c  LocalWords:  makeinfo dvi defcodeindex ev ov CPP cv Autotest mv defindex fn
21790 @c  LocalWords:  shortindexflag iftex ifset acindex ACindex ifclear ahindex fu
21791 @c  LocalWords:  asindex MSindex atindex ATindex auindex hdrindex prindex FIXME
21792 @c  LocalWords:  msindex alloca fnindex Aaarg indices FSF's dircategory ifnames
21793 @c  LocalWords:  direntry autoscan autoreconf autoheader autoupdate config FDs
21794 @c  LocalWords:  testsuite titlepage Elliston Demaille vskip filll ifnottex hmm
21795 @c  LocalWords:  insertcopying Autoconf's detailmenu Automake Libtool Posix ois
21796 @c  LocalWords:  Systemology Checkpointing Changequote INTERCAL changequote dfn
21797 @c  LocalWords:  Quadrigraphs builtins Shellology acconfig Bugward LIBOBJ Imake
21798 @c  LocalWords:  LIBOBJS IFELSE cindex flushright Pinard Metaconfig uref Simons
21799 @c  LocalWords:  distclean uninstall noindent versioning Tromey dir
21800 @c  LocalWords:  SAMS samp aclocal acsite underquoted emph itemx prepend SUBST
21801 @c  LocalWords:  evindex automake Gettext autopoint gettext symlink libtoolize
21802 @c  LocalWords:  defmac INIT tarname ovindex cvindex BUGREPORT PREREQ asis PROG
21803 @c  LocalWords:  SRCDIR srcdir globbing afterwards cmds foos fooo foooo init cd
21804 @c  LocalWords:  builddir timestamp src Imakefile chmod defvar CFLAGS CPPFLAGS
21805 @c  LocalWords:  CXXFLAGS DEFS DHAVE defvarx FCFLAGS FFLAGS LDFLAGS bindir GCC
21806 @c  LocalWords:  datadir datarootdir docdir dvidir htmldir libdir ifnothtml kbd
21807 @c  LocalWords:  includedir infodir libexecdir localedir localstatedir mandir
21808 @c  LocalWords:  oldincludedir pdfdir PDF psdir PostScript sbindir sysconfdir
21809 @c  LocalWords:  sharedstatedir DDATADIR sed tmp pkgdatadir VPATH conf unistd
21810 @c  LocalWords:  undef endif builtin FUNCS ifndef STACKSEG getb GETB YMP fubar
21811 @c  LocalWords:  PRE dest SUBDIRS subdirs fi struct STDC stdlib stddef INTTYPES
21812 @c  LocalWords:  inttypes STDINT stdint AWK AIX Solaris NeXT env EGREP FGREP yy
21813 @c  LocalWords:  LEXLIB YYTEXT lfl nonportable Automake's LN RANLIB byacc INETD
21814 @c  LocalWords:  inetd prog PROGS progs ranlib lmp lXt lX nsl gethostbyname UX
21815 @c  LocalWords:  NextStep isinf isnan glibc IRIX sunmath lm lsunmath pre sizeof
21816 @c  LocalWords:  ld inline malloc putenv setenv FreeBSD realloc SunOS MinGW
21817 @c  LocalWords:  snprintf vsnprintf sprintf vsprintf sscanf gcc strerror ifdef
21818 @c  LocalWords:  strnlen sysconf PAGESIZE unsetenv va fallback memcpy dst FUNC
21819 @c  LocalWords:  PowerPC GNUC libPW pragma Olibcalls CHOWN chown CLOSEDIR VFORK
21820 @c  LocalWords:  closedir FNMATCH fnmatch vfork FSEEKO LARGEFILE fseeko SVR sc
21821 @c  LocalWords:  largefile GETGROUPS getgroups GETLOADAVG DGUX UMAX NLIST KMEM
21822 @c  LocalWords:  SETGID getloadavg nlist GETMNTENT irix
21823 @c  LocalWords:  getmntent UnixWare GETPGRP getpgid getpgrp Posix's pid LSTAT
21824 @c  LocalWords:  lstat rpl MEMCMP memcmp OpenStep MBRTOWC mbrtowc MKTIME mktime
21825 @c  LocalWords:  localtime MMAP mmap OBSTACK obstack obstacks ARGTYPES timeval
21826 @c  LocalWords:  SETPGRP setpgrp defmacx Hurd SETVBUF setvbuf STRCOLL strcoll
21827 @c  LocalWords:  STRTOD strtod DECL STRFTIME strftime SCO UTIME utime VPRINTF
21828 @c  LocalWords:  DOPRNT vprintf doprnt sp unfixable LIBSOURCE LIBSOURCES Eggert
21829 @c  LocalWords:  linux netinet ia Tru XFree DIRENT NDIR dirent ndir multitable
21830 @c  LocalWords:  NAMLEN strlen namlen MKDEV SYSMACROS makedev RESOLV resolv DNS
21831 @c  LocalWords:  inet structs NAMESER arpa NETDB netdb UTekV UTS GCC's kB
21832 @c  LocalWords:  STDBOOL BOOL stdbool conformant cplusplus bool Bool stdarg tm
21833 @c  LocalWords:  ctype strchr strrchr rindex bcopy memmove memchr WEXITSTATUS
21834 @c  LocalWords:  WIFEXITED TIOCGWINSZ GWINSZ termios preprocess preprocessable
21835 @c  LocalWords:  DECLS strdup calloc BLKSIZE blksize RDEV rdev TZNAME tzname pw
21836 @c  LocalWords:  passwd gecos pwd MBSTATE mbstate wchar RETSIGTYPE hup UID uid
21837 @c  LocalWords:  gid ptrdiff uintmax EXEEXT OBJEXT Ae conftest AXP str
21838 @c  LocalWords:  ALIGNOF WERROR Werror cpp HP's WorkShop egcs un fied stdc CXX
21839 @c  LocalWords:  varargs BIGENDIAN Endianness SPARC endianness grep'ed CONST FC
21840 @c  LocalWords:  const STRINGIZE stringizing PARAMS unprotoize protos KCC cxx
21841 @c  LocalWords:  xlC aCC CXXCPP FREEFORM xlf FLIBS FCLIBS ish SRCEXT XTRA LFS
21842 @c  LocalWords:  ISC lcposix MINIX Minix conditionalized inlines hw dD confdefs
21843 @c  LocalWords:  fputs stdout PREPROC ar UFS HFS QNX realtime fstype STATVFS se
21844 @c  LocalWords:  statvfs STATFS statfs func machfile hdr lelf raboof DEFUN GTK
21845 @c  LocalWords:  GTKMM Grmph ified ine defn baz EOF qar Ahhh changecom algol io
21846 @c  LocalWords:  changeword quadrigraphs quadrigraph dnl SGI atoi overquoting
21847 @c  LocalWords:  Aas Wcross sep args namespace undefine bpatsubst popdef dquote
21848 @c  LocalWords:  bregexp Overquote overquotation meisch maisch meische maische
21849 @c  LocalWords:  miscian DIRNAME dirname MKDIR CATFILE XMKMF TRAVOLTA celsius
21850 @c  LocalWords:  EMX emxos Emacsen Korn DYNIX subshell posix Ksh ksh Pdksh Zsh
21851 @c  LocalWords:  pdksh zsh Allbery Lipe Kubota UWS zorglub stderr eval esac lfn
21852 @c  LocalWords:  drivespec Posixy DJGPP doschk prettybird LPT pfew Zsh's yu yaa
21853 @c  LocalWords:  yM uM aM firebird IP subdir misparses ok Unpatched abc bc zA
21854 @c  LocalWords:  CDPATH DUALCASE LINENO prepass Subshells lineno NULLCMD cmp wc
21855 @c  LocalWords:  MAILPATH scanset arg NetBSD Almquist printf expr cp
21856 @c  LocalWords:  Oliva awk Aaaaarg cmd regex xfoo GNV OpenVMS VM
21857 @c  LocalWords:  sparc Proulx nbar nfoo maxdepth acdilrtu TWG mc
21858 @c  LocalWords:  mkdir exe uname OpenBSD Fileutils mktemp umask TMPDIR guid os
21859 @c  LocalWords:  fooXXXXXX Unicos utimes hpux hppa unescaped
21860 @c  LocalWords:  pmake DOS's gmake ifoo DESTDIR autoconfiscated pc coff mips gg
21861 @c  LocalWords:  dec ultrix cpu wildcards rpcc rdtsc powerpc readline
21862 @c  LocalWords:  withval vxworks gless localcache usr LOFF loff CYGWIN Cygwin
21863 @c  LocalWords:  cygwin SIGLIST siglist SYSNDIR SYSDIR ptx lseq rusage elif MSC
21864 @c  LocalWords:  lfoo POUNDBANG lsun NIS getpwnam SYSCALLS RSH INTL lintl aix
21865 @c  LocalWords:  intl lx ldir syslog bsd EPI toolchain netbsd objext de KNR nn
21866 @c  LocalWords:  fication LTLIBOBJS Wdiff TESTDIR atconfig atlocal akim XFAIL
21867 @c  LocalWords:  ChangeLog prepended errexit smallexample TESTSUITEFLAGS GPL er
21868 @c  LocalWords:  installcheck autotest indir Pixley Bothner Eichin Kerberos adl
21869 @c  LocalWords:  DISTCLEANFILES preprocessor's fileutils Stallman Murphey Stenn
21870 @c  LocalWords:  Manfredi Autoconfig TCL FSP david zuhn Blandy MACRODIR Raeburn
21871 @c  LocalWords:  autoconfiscate Savoye Haertel Avera Meyering fdl appendixsec
21872 @c  LocalWords:  printindex american LIBOBJDIR LibdirTest ERLCFLAGS OBJCFLAGS
21873 @c  LocalWords:  VER Gnulib online xyes strcpy TYPEOF typeof OBJC objcc objc ln
21874 @c  LocalWords:  GOBJC OTP ERLC erl valloc decr dumpdef errprint incr
21875 @c  LocalWords:  esyscmd len maketemp pushdef substr syscmd sysval translit txt
21876 @c  LocalWords:  sinclude foreach myvar tolower toupper uniq BASENAME STDIN
21877 @c  LocalWords:  Dynix descrips basename aname cname macroexpands xno xcheck
21878 @c  LocalWords:  LIBREADLINE lreadline lncurses libreadline
21880 @c Local Variables:
21881 @c fill-column: 72
21882 @c ispell-local-dictionary: "american"
21883 @c indent-tabs-mode: nil
21884 @c whitespace-check-buffer-indent: nil
21885 @c End: