AC_PROG_LEX no longer sets LEXLIB for yywrap
[autoconf.git] / doc / autoconf.texi
blobb8f889cc2c23661ef5387edf47a90e7fe393dc98
1 \input texinfo @c -*-texinfo-*-
2 @comment ========================================================
3 @comment %**start of header
4 @setfilename autoconf.info
5 @include version.texi
6 @settitle Autoconf
7 @documentencoding UTF-8
8 @set txicodequoteundirected
9 @set txicodequotebacktick
10 @setchapternewpage odd
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{]}
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{]}
27 @end macro
29 @c @dvarv(ARG, DEFAULT-VAR)
30 @c ------------------------
31 @c Same as @dvar{ARG, DEFAULT-VAR}, but with @var instead of @samp
32 @c around DEFAULT-VAR.
33 @macro dvarv{varname, default}
34 @r{[}@var{\varname\} = @var{\default\}@r{]}@c
35 @end macro
37 @c Handling the indexes with Texinfo yields several different problems.
39 @c Because we want to drop out the AC_ part of the macro names in the
40 @c printed manual, but not in the other outputs, we need a layer above
41 @c the usual @acindex{} etc.  That's why we first define indexes such as
42 @c acx meant to become the macro @acindex.  First of all, using 'ac_'
43 @c does not work with makeinfo, and using 'ac1' doesn't work with TeX.
44 @c So use something more regular 'acx'.  Then you finish with a printed
45 @c index saying 'index is not existent'.  Of course: you ought to use
46 @c two letters :(  So you use capitals.
48 @c Second, when defining a macro in the TeX world, following spaces are
49 @c eaten.  But then, since we embed @acxindex commands that use the end
50 @c of line as an end marker, the whole things wrecks itself.  So make
51 @c sure you do *force* an additional end of line, add a '@c'.
53 @c Finally, you might want to get rid of TeX expansion, using --expand
54 @c with texi2dvi.  But then you wake up an old problem: we use macros
55 @c in @defmac etc. where TeX does perform the expansion, but not makeinfo.
57 @c Define an environment variable index, for variables users may set
58 @c in their environment or on the configure command line.
59 @defcodeindex ev
60 @c Define an output variable index, for commonly AC_SUBST'ed variables.
61 @defcodeindex ov
62 @c Define a cache variable index, for variables matching *_cv_*.
63 @defcodeindex CA
64 @c Other shell variables not fitting the above categories should be
65 @c listed in the predefined vrindex, which we merge in the concept index.
66 @syncodeindex vr cp
67 @c Define a CPP preprocessor macro index, for #define'd strings.
68 @defcodeindex cv
69 @c Define an Autoconf macro index that @defmac doesn't write to.
70 @defcodeindex AC
71 @c Define an Autotest macro index that @defmac doesn't write to.
72 @defcodeindex AT
73 @c Define an M4sugar macro index that @defmac doesn't write to.
74 @defcodeindex MS
75 @c Define an index for *foreign* programs: 'mv' etc.  Used for the
76 @c portability sections and so on.
77 @defindex pr
79 @c shortindexflag
80 @c --------------
81 @c Shall we factor AC_ out of the Autoconf macro index etc.?
82 @iftex
83 @set shortindexflag
84 @end iftex
86 @c @acindex{MACRO}
87 @c ---------------
88 @c Registering an AC_\MACRO\.
89 @ifset shortindexflag
90 @macro acindex{macro}
91 @ACindex \macro\
93 @end macro
94 @end ifset
95 @ifclear shortindexflag
96 @macro acindex{macro}
97 @ACindex AC_\macro\
98 @end macro
99 @end ifclear
101 @c @ahindex{MACRO}
102 @c ---------------
103 @c Registering an AH_\MACRO\.
104 @macro ahindex{macro}
105 @ACindex AH_\macro\
107 @end macro
109 @c @asindex{MACRO}
110 @c ---------------
111 @c Registering an AS_\MACRO\.
112 @ifset shortindexflag
113 @macro asindex{macro}
114 @MSindex \macro\
116 @end macro
117 @end ifset
118 @ifclear shortindexflag
119 @macro asindex{macro}
120 @MSindex AS_\macro\
121 @end macro
122 @end ifclear
124 @c @atindex{MACRO}
125 @c ---------------
126 @c Registering an AT_\MACRO\.
127 @ifset shortindexflag
128 @macro atindex{macro}
129 @ATindex \macro\
131 @end macro
132 @end ifset
133 @ifclear shortindexflag
134 @macro atindex{macro}
135 @ATindex AT_\macro\
136 @end macro
137 @end ifclear
139 @c @auindex{MACRO}
140 @c ---------------
141 @c Registering an AU_\MACRO\.
142 @macro auindex{macro}
143 @ACindex AU_\macro\
145 @end macro
147 @c @hdrindex{MACRO}
148 @c ----------------
149 @c Indexing a header.
150 @macro hdrindex{macro}
151 @prindex @file{\macro\}
153 @end macro
155 @c @msindex{MACRO}
156 @c ---------------
157 @c Registering an m4_\MACRO\.
158 @ifset shortindexflag
159 @macro msindex{macro}
160 @MSindex \macro\
162 @end macro
163 @end ifset
164 @ifclear shortindexflag
165 @macro msindex{macro}
166 @MSindex m4_\macro\
167 @end macro
168 @end ifclear
171 @c @caindex{VARIABLE}
172 @c ------------------
173 @c Registering an ac_cv_\VARIABLE\ cache variable.
174 @ifset shortindexflag
175 @macro caindex{macro}
176 @CAindex \macro\
177 @end macro
178 @end ifset
179 @ifclear shortindexflag
180 @macro caindex{macro}
181 @CAindex ac_cv_\macro\
182 @end macro
183 @end ifclear
185 @c Define an index for functions: `alloca' etc.  Used for the
186 @c portability sections and so on.  We can't use `fn' (aka `fnindex),
187 @c since `@defmac' goes into it => we'd get all the macros too.
189 @c   FIXME: Aaarg!  It seems there are too many indices for TeX :(
191 @c   ! No room for a new @write .
192 @c   l.112 @defcodeindex fu
194 @c   so don't define yet another one :(  Just put some tags before each
195 @c   @prindex which is actually a @funindex.
197 @c   @defcodeindex fu
200 @c   @c Put the programs and functions into their own index.
201 @c   @syncodeindex fu pr
203 @comment %**end of header
204 @comment ========================================================
206 @copying
208 This manual (@value{UPDATED}) is for GNU Autoconf
209 (version @value{VERSION}),
210 a package for creating scripts to configure source code packages using
211 templates and an M4 macro package.
213 Copyright @copyright{} 1992--1996, 1998--2017, 2020
214 Free Software Foundation, Inc.
216 @quotation
217 Permission is granted to copy, distribute and/or modify this document
218 under the terms of the GNU Free Documentation License,
219 Version 1.3 or any later version published by the Free Software
220 Foundation; with no Invariant Sections, no Front-Cover texts, and
221 no Back-Cover Texts.  A copy of the license is included in the section
222 entitled ``GNU Free Documentation License.''
223 @end quotation
224 @end copying
228 @dircategory Software development
229 @direntry
230 * Autoconf: (autoconf).         Create source code configuration scripts.
231 @end direntry
233 @dircategory Individual utilities
234 @direntry
235 * autoscan: (autoconf)autoscan Invocation.
236                                 Semi-automatic @file{configure.ac} writing
237 * ifnames: (autoconf)ifnames Invocation.        Listing conditionals in source.
238 * autoconf-invocation: (autoconf)autoconf Invocation.
239                                 How to create configuration scripts
240 * autoreconf: (autoconf)autoreconf Invocation.
241                                 Remaking multiple @command{configure} scripts
242 * autoheader: (autoconf)autoheader Invocation.
243                                 How to create configuration templates
244 * autom4te: (autoconf)autom4te Invocation.
245                                 The Autoconf executables backbone
246 * configure: (autoconf)configure Invocation.    Configuring a package.
247 * autoupdate: (autoconf)autoupdate Invocation.
248                                 Automatic update of @file{configure.ac}
249 * config.status: (autoconf)config.status Invocation. Recreating configurations.
250 * testsuite: (autoconf)testsuite Invocation.    Running an Autotest test suite.
251 @end direntry
253 @titlepage
254 @title Autoconf
255 @subtitle Creating Automatic Configuration Scripts
256 @subtitle for version @value{VERSION}, @value{UPDATED}
257 @author David MacKenzie
258 @author Ben Elliston
259 @author Akim Demaille
260 @page
261 @vskip 0pt plus 1filll
262 @insertcopying
263 @end titlepage
265 @contents
268 @ifnottex
269 @node Top
270 @top Autoconf
271 @insertcopying
272 @end ifnottex
274 @c The master menu, created with texinfo-master-menu, goes here.
276 @menu
277 * Introduction::                Autoconf's purpose, strengths, and weaknesses
278 * The GNU Build System::        A set of tools for portable software packages
279 * Making configure Scripts::    How to organize and produce Autoconf scripts
280 * Setup::                       Initialization and output
281 * Existing Tests::              Macros that check for particular features
282 * Writing Tests::               How to write new feature checks
283 * Results::                     What to do with results from feature checks
284 * Programming in M4::           Layers on top of which Autoconf is written
285 * Programming in M4sh::         Shell portability layer
286 * Writing Autoconf Macros::     Adding new macros to Autoconf
287 * Portable Shell::              Shell script portability pitfalls
288 * Portable Make::               Makefile portability pitfalls
289 * Portable C and C++::          C and C++ portability pitfalls
290 * Manual Configuration::        Selecting features that can't be guessed
291 * Site Configuration::          Local defaults for @command{configure}
292 * Running configure Scripts::   How to use the Autoconf output
293 * config.status Invocation::    Recreating a configuration
294 * Obsolete Constructs::         Kept for backward compatibility
295 * Using Autotest::              Creating portable test suites
296 * FAQ::                         Frequent Autoconf Questions, with answers
297 * History::                     History of Autoconf
298 * GNU Free Documentation License::  License for copying this manual
299 * Indices::                     Indices of symbols, concepts, etc.
301 @detailmenu
302  --- The Detailed Node Listing ---
304 The GNU Build System
306 * Automake::                    Escaping makefile hell
307 * Gnulib::                      The GNU portability library
308 * Libtool::                     Building libraries portably
309 * Pointers::                    More info on the GNU build system
311 Making @command{configure} Scripts
313 * Writing Autoconf Input::      What to put in an Autoconf input file
314 * autoscan Invocation::         Semi-automatic @file{configure.ac} writing
315 * ifnames Invocation::          Listing the conditionals in source code
316 * autoconf Invocation::         How to create configuration scripts
317 * autoreconf Invocation::       Remaking multiple @command{configure} scripts
319 Writing @file{configure.ac}
321 * Shell Script Compiler::       Autoconf as solution of a problem
322 * Autoconf Language::           Programming in Autoconf
323 * Autoconf Input Layout::       Standard organization of @file{configure.ac}
325 Initialization and Output Files
327 * Initializing configure::      Option processing etc.
328 * Versioning::                  Dealing with Autoconf versions
329 * Notices::                     Copyright, version numbers in @command{configure}
330 * Input::                       Where Autoconf should find files
331 * Output::                      Outputting results from the configuration
332 * Configuration Actions::       Preparing the output based on results
333 * Configuration Files::         Creating output files
334 * Makefile Substitutions::      Using output variables in makefiles
335 * Configuration Headers::       Creating a configuration header file
336 * Configuration Commands::      Running arbitrary instantiation commands
337 * Configuration Links::         Links depending on the configuration
338 * Subdirectories::              Configuring independent packages together
339 * Default Prefix::              Changing the default installation prefix
341 Substitutions in Makefiles
343 * Preset Output Variables::     Output variables that are always set
344 * Installation Directory Variables::  Other preset output variables
345 * Changed Directory Variables::  Warnings about @file{datarootdir}
346 * Build Directories::           Supporting multiple concurrent compiles
347 * Automatic Remaking::          Makefile rules for configuring
349 Configuration Header Files
351 * Header Templates::            Input for the configuration headers
352 * autoheader Invocation::       How to create configuration templates
353 * Autoheader Macros::           How to specify CPP templates
355 Existing Tests
357 * Common Behavior::             Macros' standard schemes
358 * Alternative Programs::        Selecting between alternative programs
359 * Files::                       Checking for the existence of files
360 * Libraries::                   Library archives that might be missing
361 * Library Functions::           C library functions that might be missing
362 * Header Files::                Header files that might be missing
363 * Declarations::                Declarations that may be missing
364 * Structures::                  Structures or members that might be missing
365 * Types::                       Types that might be missing
366 * Compilers and Preprocessors::  Checking for compiling programs
367 * System Services::             Operating system services
368 * C and Posix Variants::        Kludges for C and Posix variants
369 * Erlang Libraries::            Checking for the existence of Erlang libraries
371 Common Behavior
373 * Standard Symbols::            Symbols defined by the macros
374 * Default Includes::            Includes used by the generic macros
376 Alternative Programs
378 * Particular Programs::         Special handling to find certain programs
379 * Generic Programs::            How to find other programs
381 Library Functions
383 * Function Portability::        Pitfalls with usual functions
384 * Particular Functions::        Special handling to find certain functions
385 * Generic Functions::           How to find other functions
387 Header Files
389 * Header Portability::          Collected knowledge on common headers
390 * Particular Headers::          Special handling to find certain headers
391 * Generic Headers::             How to find other headers
393 Declarations
395 * Particular Declarations::     Macros to check for certain declarations
396 * Generic Declarations::        How to find other declarations
398 Structures
400 * Particular Structures::       Macros to check for certain structure members
401 * Generic Structures::          How to find other structure members
403 Types
405 * Particular Types::            Special handling to find certain types
406 * Generic Types::               How to find other types
408 Compilers and Preprocessors
410 * Specific Compiler Characteristics::  Some portability issues
411 * Generic Compiler Characteristics::  Language independent tests and features
412 * C Compiler::                  Checking its characteristics
413 * C++ Compiler::                Likewise
414 * Objective C Compiler::        Likewise
415 * Objective C++ Compiler::      Likewise
416 * Erlang Compiler and Interpreter::  Likewise
417 * Fortran Compiler::            Likewise
418 * Go Compiler::                 Likewise
420 Writing Tests
422 * Language Choice::             Selecting which language to use for testing
423 * Writing Test Programs::       Forging source files for compilers
424 * Running the Preprocessor::    Detecting preprocessor symbols
425 * Running the Compiler::        Detecting language or header features
426 * Running the Linker::          Detecting library features
427 * Runtime::                     Testing for runtime features
428 * Systemology::                 A zoology of operating systems
429 * Multiple Cases::              Tests for several possible values
431 Writing Test Programs
433 * Guidelines::                  General rules for writing test programs
434 * Test Functions::              Avoiding pitfalls in test programs
435 * Generating Sources::          Source program boilerplate
437 Results of Tests
439 * Defining Symbols::            Defining C preprocessor symbols
440 * Setting Output Variables::    Replacing variables in output files
441 * Special Chars in Variables::  Characters to beware of in variables
442 * Caching Results::             Speeding up subsequent @command{configure} runs
443 * Printing Messages::           Notifying @command{configure} users
445 Caching Results
447 * Cache Variable Names::        Shell variables used in caches
448 * Cache Files::                 Files @command{configure} uses for caching
449 * Cache Checkpointing::         Loading and saving the cache file
451 Programming in M4
453 * M4 Quotation::                Protecting macros from unwanted expansion
454 * Using autom4te::              The Autoconf executables backbone
455 * Programming in M4sugar::      Convenient pure M4 macros
456 * Debugging via autom4te::      Figuring out what M4 was doing
458 M4 Quotation
460 * Active Characters::           Characters that change the behavior of M4
461 * One Macro Call::              Quotation and one macro call
462 * Quoting and Parameters::      M4 vs. shell parameters
463 * Quotation and Nested Macros::  Macros calling macros
464 * Changequote is Evil::         Worse than INTERCAL: M4 + changequote
465 * Quadrigraphs::                Another way to escape special characters
466 * Balancing Parentheses::       Dealing with unbalanced parentheses
467 * Quotation Rule Of Thumb::     One parenthesis, one quote
469 Using @command{autom4te}
471 * autom4te Invocation::         A GNU M4 wrapper
472 * Customizing autom4te::        Customizing the Autoconf package
474 Programming in M4sugar
476 * Redefined M4 Macros::         M4 builtins changed in M4sugar
477 * Diagnostic Macros::           Diagnostic messages from M4sugar
478 * Diversion support::           Diversions in M4sugar
479 * Conditional constructs::      Conditions in M4
480 * Looping constructs::          Iteration in M4
481 * Evaluation Macros::           More quotation and evaluation control
482 * Text processing Macros::      String manipulation in M4
483 * Number processing Macros::    Arithmetic computation in M4
484 * Set manipulation Macros::     Set manipulation in M4
485 * Forbidden Patterns::          Catching unexpanded macros
487 Programming in M4sh
489 * Common Shell Constructs::     Portability layer for common shell constructs
490 * Polymorphic Variables::       Support for indirect variable names
491 * Initialization Macros::       Macros to establish a sane shell environment
492 * File Descriptor Macros::      File descriptor macros for input and output
494 Writing Autoconf Macros
496 * Macro Definitions::           Basic format of an Autoconf macro
497 * Macro Names::                 What to call your new macros
498 * Reporting Messages::          Notifying @command{autoconf} users
499 * Dependencies Between Macros::  What to do when macros depend on other macros
500 * Obsoleting Macros::           Warning about old ways of doing things
501 * Coding Style::                Writing Autoconf macros @`a la Autoconf
503 Dependencies Between Macros
505 * Prerequisite Macros::         Ensuring required information
506 * Suggested Ordering::          Warning about possible ordering problems
507 * One-Shot Macros::             Ensuring a macro is called only once
509 Portable Shell Programming
511 * Shellology::                  A zoology of shells
512 * Invoking the Shell::          Invoking the shell as a command
513 * Here-Documents::              Quirks and tricks
514 * File Descriptors::            FDs and redirections
515 * Signal Handling::             Shells, signals, and headaches
516 * File System Conventions::     File names
517 * Shell Pattern Matching::      Pattern matching
518 * Shell Substitutions::         Variable and command expansions
519 * Assignments::                 Varying side effects of assignments
520 * Parentheses::                 Parentheses in shell scripts
521 * Slashes::                     Slashes in shell scripts
522 * Special Shell Variables::     Variables you should not change
523 * Shell Functions::             What to look out for if you use them
524 * Limitations of Builtins::     Portable use of not so portable /bin/sh
525 * Limitations of Usual Tools::  Portable use of portable tools
527 Portable Make Programming
529 * $< in Ordinary Make Rules::   $< in ordinary rules
530 * Failure in Make Rules::       Failing portably in rules
531 * Special Chars in Names::      Special Characters in Macro Names
532 * Backslash-Newline-Empty::     Empty lines after backslash-newline
533 * Backslash-Newline Comments::  Spanning comments across line boundaries
534 * Long Lines in Makefiles::     Line length limitations
535 * Macros and Submakes::         @code{make macro=value} and submakes
536 * The Make Macro MAKEFLAGS::    @code{$(MAKEFLAGS)} portability issues
537 * The Make Macro SHELL::        @code{$(SHELL)} portability issues
538 * Parallel Make::               Parallel @command{make} quirks
539 * Comments in Make Rules::      Other problems with Make comments
540 * Newlines in Make Rules::      Using literal newlines in rules
541 * Comments in Make Macros::     Other problems with Make comments in macros
542 * Trailing whitespace in Make Macros::  Macro substitution problems
543 * Command-line Macros and whitespace::  Whitespace trimming of values
544 * obj/ and Make::               Don't name a subdirectory @file{obj}
545 * make -k Status::              Exit status of @samp{make -k}
546 * VPATH and Make::              @code{VPATH} woes
547 * Single Suffix Rules::         Single suffix rules and separated dependencies
548 * Timestamps and Make::         Sub-second timestamp resolution
550 @code{VPATH} and Make
552 * Variables listed in VPATH::   @code{VPATH} must be literal on ancient hosts
553 * VPATH and Double-colon::      Problems with @samp{::} on ancient hosts
554 * $< in Explicit Rules::        @code{$<} does not work in ordinary rules
555 * Automatic Rule Rewriting::    @code{VPATH} goes wild on Solaris
556 * Tru64 Directory Magic::       @command{mkdir} goes wild on Tru64
557 * Make Target Lookup::          More details about @code{VPATH} lookup
559 Portable C and C++ Programming
561 * Varieties of Unportability::  How to make your programs unportable
562 * Integer Overflow::            When integers get too large
563 * Preprocessor Arithmetic::     @code{#if} expression problems
564 * Null Pointers::               Properties of null pointers
565 * Buffer Overruns::             Subscript errors and the like
566 * Volatile Objects::            @code{volatile} and signals
567 * Floating Point Portability::  Portable floating-point arithmetic
568 * Exiting Portably::            Exiting and the exit status
570 Integer Overflow
572 * Integer Overflow Basics::     Why integer overflow is a problem
573 * Signed Overflow Examples::    Examples of code assuming wraparound
574 * Optimization and Wraparound::  Optimizations that break uses of wraparound
575 * Signed Overflow Advice::      Practical advice for signed overflow issues
576 * Signed Integer Division::     @code{INT_MIN / -1} and @code{INT_MIN % -1}
578 Manual Configuration
580 * Specifying Target Triplets::  Specifying target triplets
581 * Canonicalizing::              Getting the canonical system type
582 * Using System Type::           What to do with the system type
584 Site Configuration
586 * Help Formatting::             Customizing @samp{configure --help}
587 * External Software::           Working with other optional software
588 * Package Options::             Selecting optional features
589 * Pretty Help Strings::         Formatting help string
590 * Option Checking::             Controlling checking of @command{configure} options
591 * Site Details::                Configuring site details
592 * Transforming Names::          Changing program names when installing
593 * Site Defaults::               Giving @command{configure} local defaults
595 Transforming Program Names When Installing
597 * Transformation Options::      @command{configure} options to transform names
598 * Transformation Examples::     Sample uses of transforming names
599 * Transformation Rules::        Makefile uses of transforming names
601 Running @command{configure} Scripts
603 * Basic Installation::          Instructions for typical cases
604 * Compilers and Options::       Selecting compilers and optimization
605 * Multiple Architectures::      Compiling for multiple architectures at once
606 * Installation Names::          Installing in different directories
607 * Optional Features::           Selecting optional features
608 * Particular Systems::          Particular systems
609 * System Type::                 Specifying the system type
610 * Sharing Defaults::            Setting site-wide defaults for @command{configure}
611 * Defining Variables::          Specifying the compiler etc.
612 * configure Invocation::        Changing how @command{configure} runs
614 Obsolete Constructs
616 * Obsolete config.status Use::  Obsolete convention for @command{config.status}
617 * acconfig Header::             Additional entries in @file{config.h.in}
618 * autoupdate Invocation::       Automatic update of @file{configure.ac}
619 * Obsolete Macros::             Backward compatibility macros
620 * Autoconf 1::                  Tips for upgrading your files
621 * Autoconf 2.13::               Some fresher tips
623 Upgrading From Version 1
625 * Changed File Names::          Files you might rename
626 * Changed Makefiles::           New things to put in @file{Makefile.in}
627 * Changed Macros::              Macro calls you might replace
628 * Changed Results::             Changes in how to check test results
629 * Changed Macro Writing::       Better ways to write your own macros
631 Upgrading From Version 2.13
633 * Changed Quotation::           Broken code which used to work
634 * New Macros::                  Interaction with foreign macros
635 * Hosts and Cross-Compilation::  Bugward compatibility kludges
636 * AC_LIBOBJ vs LIBOBJS::        LIBOBJS is a forbidden token
637 * AC_ACT_IFELSE vs AC_TRY_ACT::  A more generic scheme for testing sources
639 Generating Test Suites with Autotest
641 * Using an Autotest Test Suite::  Autotest and the user
642 * Writing Testsuites::          Autotest macros
643 * testsuite Invocation::        Running @command{testsuite} scripts
644 * Making testsuite Scripts::    Using autom4te to create @command{testsuite}
646 Using an Autotest Test Suite
648 * testsuite Scripts::           The concepts of Autotest
649 * Autotest Logs::               Their contents
651 Frequent Autoconf Questions, with answers
653 * Distributing::                Distributing @command{configure} scripts
654 * Why GNU M4::                  Why not use the standard M4?
655 * Bootstrapping::               Autoconf and GNU M4 require each other?
656 * Why Not Imake::               Why GNU uses @command{configure} instead of Imake
657 * Defining Directories::        Passing @code{datadir} to program
658 * Autom4te Cache::              What is it?  Can I remove it?
659 * Present But Cannot Be Compiled::  Compiler and Preprocessor Disagree
660 * Expanded Before Required::    Expanded Before Required
661 * Debugging::                   Debugging @command{configure} scripts
663 History of Autoconf
665 * Genesis::                     Prehistory and naming of @command{configure}
666 * Exodus::                      The plagues of M4 and Perl
667 * Leviticus::                   The priestly code of portability arrives
668 * Numbers::                     Growth and contributors
669 * Deuteronomy::                 Approaching the promises of easy configuration
671 Indices
673 * Environment Variable Index::  Index of environment variables used
674 * Output Variable Index::       Index of variables set in output files
675 * Preprocessor Symbol Index::   Index of C preprocessor symbols defined
676 * Cache Variable Index::        Index of documented cache variables
677 * Autoconf Macro Index::        Index of Autoconf macros
678 * M4 Macro Index::              Index of M4, M4sugar, and M4sh macros
679 * Autotest Macro Index::        Index of Autotest macros
680 * Program & Function Index::    Index of those with portability problems
681 * Concept Index::               General index
683 @end detailmenu
684 @end menu
686 @c ============================================================= Introduction.
688 @node Introduction
689 @chapter Introduction
690 @cindex Introduction
692 @flushright
693 A physicist, an engineer, and a computer scientist were discussing the
694 nature of God.  ``Surely a Physicist,'' said the physicist, ``because
695 early in the Creation, God made Light; and you know, Maxwell's
696 equations, the dual nature of electromagnetic waves, the relativistic
697 consequences@enddots{}'' ``An Engineer!,'' said the engineer, ``because
698 before making Light, God split the Chaos into Land and Water; it takes
699 a hell of an engineer to handle that big amount of mud, and orderly
700 separation of solids from liquids@enddots{}'' The computer scientist
701 shouted: ``And the Chaos, where do you think it was coming from, hmm?''
703 ---Anonymous
704 @end flushright
705 @c (via Franc,ois Pinard)
707 Autoconf is a tool for producing shell scripts that automatically
708 configure software source code packages to adapt to many kinds of
709 Posix-like systems.  The configuration scripts produced by Autoconf
710 are independent of Autoconf when they are run, so their users do not
711 need to have Autoconf.
713 The configuration scripts produced by Autoconf require no manual user
714 intervention when run; they do not normally even need an argument
715 specifying the system type.  Instead, they individually test for the
716 presence of each feature that the software package they are for might need.
717 (Before each check, they print a one-line message stating what they are
718 checking for, so the user doesn't get too bored while waiting for the
719 script to finish.)  As a result, they deal well with systems that are
720 hybrids or customized from the more common Posix variants.  There is
721 no need to maintain files that list the features supported by each
722 release of each variant of Posix.
724 For each software package that Autoconf is used with, it creates a
725 configuration script from a template file that lists the system features
726 that the package needs or can use.  After the shell code to recognize
727 and respond to a system feature has been written, Autoconf allows it to
728 be shared by many software packages that can use (or need) that feature.
729 If it later turns out that the shell code needs adjustment for some
730 reason, it needs to be changed in only one place; all of the
731 configuration scripts can be regenerated automatically to take advantage
732 of the updated code.
734 @c "Those who do not understand Unix are condemned to reinvent it, poorly."
735 @c --Henry Spencer, 1987 (see https://en.wikipedia.org/wiki/Unix_philosophy)
736 Those who do not understand Autoconf are condemned to reinvent it, poorly.
737 The primary goal of Autoconf is making the @emph{user's} life easier;
738 making the @emph{maintainer's} life easier is only a secondary goal.
739 Put another way, the primary goal is not to make the generation of
740 @file{configure} automatic for package maintainers (although patches
741 along that front are welcome, since package maintainers form the user
742 base of Autoconf); rather, the goal is to make @file{configure}
743 painless, portable, and predictable for the end user of each
744 @dfn{autoconfiscated} package.  And to this degree, Autoconf is highly
745 successful at its goal---most complaints to the Autoconf list are
746 about difficulties in writing Autoconf input, and not in the behavior of
747 the resulting @file{configure}.  Even packages that don't use Autoconf
748 will generally provide a @file{configure} script, and the most common
749 complaint about these alternative home-grown scripts is that they fail
750 to meet one or more of the GNU Coding Standards (@pxref{Configuration, , ,
751 standards, The GNU Coding Standards}) that users
752 have come to expect from Autoconf-generated @file{configure} scripts.
754 The Metaconfig package is similar in purpose to Autoconf, but the
755 scripts it produces require manual user intervention, which is quite
756 inconvenient when configuring large source trees.  Unlike Metaconfig
757 scripts, Autoconf scripts can support cross-compiling, if some care is
758 taken in writing them.
760 Autoconf does not solve all problems related to making portable
761 software packages---for a more complete solution, it should be used in
762 concert with other GNU build tools like Automake and
763 Libtool.  These other tools take on jobs like the creation of a
764 portable, recursive makefile with all of the standard targets,
765 linking of shared libraries, and so on.  @xref{The GNU Build System},
766 for more information.
768 Autoconf imposes some restrictions on the names of macros used with
769 @code{#if} in C programs (@pxref{Preprocessor Symbol Index}).
771 Autoconf requires GNU M4 version 1.4.6 or later in order to
772 generate the scripts.  It uses features that some versions of M4,
773 including GNU M4 1.3, do not have.  Autoconf works better
774 with GNU M4 version 1.4.14 or later, though this is not
775 required.
777 @xref{Autoconf 1}, for information about upgrading from version 1.
778 @xref{History}, for the story of Autoconf's development.  @xref{FAQ},
779 for answers to some common questions about Autoconf.
781 See the @uref{https://@/www.gnu.org/@/software/@/autoconf/,
782 Autoconf web page} for up-to-date information, details on the mailing
783 lists, pointers to a list of known bugs, etc.
785 Mail suggestions to @email{autoconf@@gnu.org, the Autoconf mailing
786 list}.  Past suggestions are
787 @uref{https://@/lists.gnu.org/@/archive/@/html/@/autoconf/, archived}.
789 Mail bug reports to @email{bug-autoconf@@gnu.org, the
790 Autoconf Bugs mailing list}.  Past bug reports are
791 @uref{https://@/lists.gnu.org/@/archive/@/html/@/bug-autoconf/, archived}.
793 If possible, first check that your bug is
794 not already solved in current development versions, and that it has not
795 been reported yet.  Be sure to include all the needed information and a
796 short @file{configure.ac} that demonstrates the problem.
798 Autoconf's development tree is accessible via @command{git}; see the
799 @uref{https://@/savannah.gnu.org/@/projects/@/autoconf/, Autoconf
800 Summary} for details, or view
801 @uref{https://@/git.sv.gnu.org/@/gitweb/@/?p=autoconf.git, the actual
802 repository}.  Anonymous CVS access is also available, see
803 @file{README} for more details.  Patches relative to the
804 current @command{git} version can be sent for review to the
805 @email{autoconf-patches@@gnu.org, Autoconf Patches mailing list}, with
806 discussion on prior patches
807 @uref{https://@/lists.gnu.org/@/archive/@/html/@/autoconf-@/patches/,
808 archived}; and all commits are posted in the read-only
809 @email{autoconf-commit@@gnu.org, Autoconf Commit mailing list}, which is
810 also @uref{https://@/lists.gnu.org/@/archive/@/html/@/autoconf-commit/,
811 archived}.
813 Because of its mission, the Autoconf package itself
814 includes only a set of often-used
815 macros that have already demonstrated their usefulness.  Nevertheless,
816 if you wish to share your macros, or find existing ones, see the
817 @uref{https://@/www.gnu.org/@/software/@/autoconf-archive/, Autoconf Macro
818 Archive}, which is kindly run by @email{simons@@cryp.to,
819 Peter Simons}.
822 @c ================================================= The GNU Build System
824 @node The GNU Build System
825 @chapter The GNU Build System
826 @cindex GNU build system
828 Autoconf solves an important problem---reliable discovery of
829 system-specific build and runtime information---but this is only one
830 piece of the puzzle for the development of portable software.  To this
831 end, the GNU project has developed a suite of integrated
832 utilities to finish the job Autoconf started: the GNU build
833 system, whose most important components are Autoconf, Automake, and
834 Libtool.  In this chapter, we introduce you to those tools, point you
835 to sources of more information, and try to convince you to use the
836 entire GNU build system for your software.
838 @menu
839 * Automake::                    Escaping makefile hell
840 * Gnulib::                      The GNU portability library
841 * Libtool::                     Building libraries portably
842 * Pointers::                    More info on the GNU build system
843 @end menu
845 @node Automake
846 @section Automake
848 The ubiquity of @command{make} means that a makefile is almost the
849 only viable way to distribute automatic build rules for software, but
850 one quickly runs into its numerous limitations.  Its lack of
851 support for automatic dependency tracking, recursive builds in
852 subdirectories, reliable timestamps (e.g., for network file systems), and
853 so on, mean that developers must painfully (and often incorrectly)
854 reinvent the wheel for each project.  Portability is non-trivial, thanks
855 to the quirks of @command{make} on many systems.  On top of all this is the
856 manual labor required to implement the many standard targets that users
857 have come to expect (@code{make install}, @code{make distclean},
858 @code{make uninstall}, etc.).  Since you are, of course, using Autoconf,
859 you also have to insert repetitive code in your @file{Makefile.in} to
860 recognize @code{@@CC@@}, @code{@@CFLAGS@@}, and other substitutions
861 provided by @command{configure}.  Into this mess steps @dfn{Automake}.
862 @cindex Automake
864 Automake allows you to specify your build needs in a @file{Makefile.am}
865 file with a vastly simpler and more powerful syntax than that of a plain
866 makefile, and then generates a portable @file{Makefile.in} for
867 use with Autoconf.  For example, the @file{Makefile.am} to build and
868 install a simple ``Hello world'' program might look like:
870 @example
871 bin_PROGRAMS = hello
872 hello_SOURCES = hello.c
873 @end example
875 @noindent
876 The resulting @file{Makefile.in} (~400 lines) automatically supports all
877 the standard targets, the substitutions provided by Autoconf, automatic
878 dependency tracking, @code{VPATH} building, and so on.  @command{make}
879 builds the @code{hello} program, and @code{make install} installs it
880 in @file{/usr/local/bin} (or whatever prefix was given to
881 @command{configure}, if not @file{/usr/local}).
883 The benefits of Automake increase for larger packages (especially ones
884 with subdirectories), but even for small programs the added convenience
885 and portability can be substantial.  And that's not all@enddots{}
887 @node Gnulib
888 @section Gnulib
890 GNU software has a well-deserved reputation for running on
891 many different types of systems.  While our primary goal is to write
892 software for the GNU system, many users and developers have
893 been introduced to us through the systems that they were already using.
895 @cindex Gnulib
896 Gnulib is a central location for common GNU code, intended to
897 be shared among free software packages.  Its components are typically
898 shared at the source level, rather than being a library that gets built,
899 installed, and linked against.  The idea is to copy files from Gnulib
900 into your own source tree.  There is no distribution tarball; developers
901 should just grab source modules from the repository.  The source files
902 are available online, under various licenses, mostly GNU
903 GPL or GNU LGPL.
905 Gnulib modules typically contain C source code along with Autoconf
906 macros used to configure the source code.  For example, the Gnulib
907 @code{stdalign} module implements a @file{stdalign.h} header that nearly
908 conforms to C11, even on old-fashioned hosts that lack @file{stdalign.h}.
909 This module contains a source file for the replacement header, along
910 with an Autoconf macro that arranges to use the replacement header on
911 old-fashioned systems.
913 @node Libtool
914 @section Libtool
916 Often, one wants to build not only programs, but libraries, so that
917 other programs can benefit from the fruits of your labor.  Ideally, one
918 would like to produce @emph{shared} (dynamically linked) libraries,
919 which can be used by multiple programs without duplication on disk or in
920 memory and can be updated independently of the linked programs.
921 Producing shared libraries portably, however, is the stuff of
922 nightmares---each system has its own incompatible tools, compiler flags,
923 and magic incantations.  Fortunately, GNU provides a solution:
924 @dfn{Libtool}.
925 @cindex Libtool
927 Libtool handles all the requirements of building shared libraries for
928 you, and at this time seems to be the @emph{only} way to do so with any
929 portability.  It also handles many other headaches, such as: the
930 interaction of Make rules with the variable suffixes of
931 shared libraries, linking reliably with shared libraries before they are
932 installed by the superuser, and supplying a consistent versioning system
933 (so that different versions of a library can be installed or upgraded
934 without breaking binary compatibility).  Although Libtool, like
935 Autoconf, can be used without Automake, it is most simply utilized in
936 conjunction with Automake---there, Libtool is used automatically
937 whenever shared libraries are needed, and you need not know its syntax.
939 @node Pointers
940 @section Pointers
942 Developers who are used to the simplicity of @command{make} for small
943 projects on a single system might be daunted at the prospect of
944 learning to use Automake and Autoconf.  As your software is
945 distributed to more and more users, however, you otherwise
946 quickly find yourself putting lots of effort into reinventing the
947 services that the GNU build tools provide, and making the
948 same mistakes that they once made and overcame.  (Besides, since
949 you're already learning Autoconf, Automake is a piece of cake.)
951 There are a number of places that you can go to for more information on
952 the GNU build tools.
954 @itemize @minus
956 @item Web
958 The project home pages for
959 @uref{https://@/www@/.gnu@/.org/@/software/@/autoconf/, Autoconf},
960 @uref{https://@/www@/.gnu@/.org/@/software/@/automake/, Automake},
961 @uref{https://@/www@/.gnu@/.org/@/software/@/gnulib/, Gnulib}, and
962 @uref{https://@/www@/.gnu@/.org/@/software/@/libtool/, Libtool}.
964 @item Automake Manual
966 @xref{Top, , Automake, automake, GNU Automake}, for more
967 information on Automake.
969 @item Books
971 The book @cite{GNU Autoconf, Automake and
972 Libtool}@footnote{@cite{GNU Autoconf, Automake and Libtool},
973 by G. V. Vaughan, B. Elliston, T. Tromey, and I. L. Taylor.  SAMS (originally
974 New Riders), 2000, ISBN 1578701902.} describes the complete GNU
975 build environment.  You can also find
976 @uref{https://@/www.sourceware.org/@/autobook/, the entire book on-line}.
978 @end itemize
980 @c ================================================= Making configure Scripts.
982 @node Making configure Scripts
983 @chapter Making @command{configure} Scripts
984 @cindex @file{aclocal.m4}
985 @cindex @command{configure}
987 The configuration scripts that Autoconf produces are by convention
988 called @command{configure}.  When run, @command{configure} creates several
989 files, replacing configuration parameters in them with appropriate
990 values.  The files that @command{configure} creates are:
992 @itemize @minus
993 @item
994 one or more @file{Makefile} files, usually one in each subdirectory of the
995 package (@pxref{Makefile Substitutions});
997 @item
998 optionally, a C header file, the name of which is configurable,
999 containing @code{#define} directives (@pxref{Configuration Headers});
1001 @item
1002 a shell script called @file{config.status} that, when run, recreates
1003 the files listed above (@pxref{config.status Invocation});
1005 @item
1006 an optional shell script normally called @file{config.cache}
1007 (created when using @samp{configure --config-cache}) that
1008 saves the results of running many of the tests (@pxref{Cache Files});
1010 @item
1011 a file called @file{config.log} containing any messages produced by
1012 compilers, to help debugging if @command{configure} makes a mistake.
1013 @end itemize
1015 @cindex @file{configure.ac}
1016 To create a @command{configure} script with Autoconf, you need
1017 to write an Autoconf input file @file{configure.ac} and run
1018 @command{autoconf} on it.  If you write your own feature tests to
1019 supplement those that come with Autoconf, you might also write files
1020 called @file{aclocal.m4} and @file{acsite.m4}.  If you use a C header
1021 file to contain @code{#define} directives, you might also run
1022 @command{autoheader}, and you can distribute the generated file
1023 @file{config.h.in} with the package.
1025 Here is a diagram showing how the files that can be used in
1026 configuration are produced.  Programs that are executed are suffixed by
1027 @samp{*}.  Optional files are enclosed in square brackets (@samp{[]}).
1028 @command{autoconf} and @command{autoheader} also read the installed Autoconf
1029 macro files (by reading @file{autoconf.m4}).
1031 @noindent
1032 Files used in preparing a software package for distribution, when using
1033 just Autoconf:
1034 @example
1035 your source files --> [autoscan*] --> [configure.scan] --> configure.ac
1037 @group
1038 configure.ac --.
1039                |   .------> autoconf* -----> configure
1040 [aclocal.m4] --+---+
1041                |   `-----> [autoheader*] --> [config.h.in]
1042 [acsite.m4] ---'
1043 @end group
1045 Makefile.in
1046 @end example
1048 @noindent
1049 Additionally, if you use Automake, the following additional productions
1050 come into play:
1052 @example
1053 @group
1054 [acinclude.m4] --.
1055                  |
1056 [local macros] --+--> aclocal* --> aclocal.m4
1057                  |
1058 configure.ac ----'
1059 @end group
1061 @group
1062 configure.ac --.
1063                +--> automake* --> Makefile.in
1064 Makefile.am ---'
1065 @end group
1066 @end example
1068 @noindent
1069 Files used in configuring a software package:
1070 @example
1071 @group
1072                        .-------------> [config.cache]
1073 configure* ------------+-------------> config.log
1074                        |
1075 [config.h.in] -.       v            .-> [config.h] -.
1076                +--> config.status* -+               +--> make*
1077 Makefile.in ---'                    `-> Makefile ---'
1078 @end group
1079 @end example
1081 @menu
1082 * Writing Autoconf Input::      What to put in an Autoconf input file
1083 * autoscan Invocation::         Semi-automatic @file{configure.ac} writing
1084 * ifnames Invocation::          Listing the conditionals in source code
1085 * autoconf Invocation::         How to create configuration scripts
1086 * autoreconf Invocation::       Remaking multiple @command{configure} scripts
1087 @end menu
1089 @node Writing Autoconf Input
1090 @section Writing @file{configure.ac}
1092 To produce a @command{configure} script for a software package, create a
1093 file called @file{configure.ac} that contains invocations of the
1094 Autoconf macros that test the system features your package needs or can
1095 use.  Autoconf macros already exist to check for many features; see
1096 @ref{Existing Tests}, for their descriptions.  For most other features,
1097 you can use Autoconf template macros to produce custom checks; see
1098 @ref{Writing Tests}, for information about them.  For especially tricky
1099 or specialized features, @file{configure.ac} might need to contain some
1100 hand-crafted shell commands; see @ref{Portable Shell, , Portable Shell
1101 Programming}.  The @command{autoscan} program can give you a good start
1102 in writing @file{configure.ac} (@pxref{autoscan Invocation}, for more
1103 information).
1105 @cindex @file{configure.in}
1106 Previous versions of Autoconf promoted the name @file{configure.in},
1107 which is somewhat ambiguous (the tool needed to process this file is not
1108 described by its extension), and introduces a slight confusion with
1109 @file{config.h.in} and so on (for which @samp{.in} means ``to be
1110 processed by @command{configure}'').  Using @file{configure.ac} is now
1111 preferred, while the use of @file{configure.in} will cause warnings
1112 from @command{autoconf}.
1114 @menu
1115 * Shell Script Compiler::       Autoconf as solution of a problem
1116 * Autoconf Language::           Programming in Autoconf
1117 * Autoconf Input Layout::       Standard organization of @file{configure.ac}
1118 @end menu
1120 @node Shell Script Compiler
1121 @subsection A Shell Script Compiler
1123 Just as for any other computer language, in order to properly program
1124 @file{configure.ac} in Autoconf you must understand @emph{what} problem
1125 the language tries to address and @emph{how} it does so.
1127 The problem Autoconf addresses is that the world is a mess.  After all,
1128 you are using Autoconf in order to have your package compile easily on
1129 all sorts of different systems, some of them being extremely hostile.
1130 Autoconf itself bears the price for these differences: @command{configure}
1131 must run on all those systems, and thus @command{configure} must limit itself
1132 to their lowest common denominator of features.
1134 Naturally, you might then think of shell scripts; who needs
1135 @command{autoconf}?  A set of properly written shell functions is enough to
1136 make it easy to write @command{configure} scripts by hand.  Sigh!
1137 Unfortunately, even in 2008, where shells without any function support are
1138 far and few between, there are pitfalls to avoid when making use of them.
1139 Also, finding a Bourne shell that accepts shell functions is not trivial,
1140 even though there is almost always one on interesting porting targets.
1142 So, what is really needed is some kind of compiler, @command{autoconf},
1143 that takes an Autoconf program, @file{configure.ac}, and transforms it
1144 into a portable shell script, @command{configure}.
1146 How does @command{autoconf} perform this task?
1148 There are two obvious possibilities: creating a brand new language or
1149 extending an existing one.  The former option is attractive: all
1150 sorts of optimizations could easily be implemented in the compiler and
1151 many rigorous checks could be performed on the Autoconf program
1152 (e.g., rejecting any non-portable construct).  Alternatively, you can
1153 extend an existing language, such as the @code{sh} (Bourne shell)
1154 language.
1156 Autoconf does the latter: it is a layer on top of @code{sh}.  It was
1157 therefore most convenient to implement @command{autoconf} as a macro
1158 expander: a program that repeatedly performs @dfn{macro expansions} on
1159 text input, replacing macro calls with macro bodies and producing a pure
1160 @code{sh} script in the end.  Instead of implementing a dedicated
1161 Autoconf macro expander, it is natural to use an existing
1162 general-purpose macro language, such as M4, and implement the extensions
1163 as a set of M4 macros.
1166 @node Autoconf Language
1167 @subsection The Autoconf Language
1168 @cindex quotation
1170 The Autoconf language differs from many other computer
1171 languages because it treats actual code the same as plain text.  Whereas
1172 in C, for instance, data and instructions have different syntactic
1173 status, in Autoconf their status is rigorously the same.  Therefore, we
1174 need a means to distinguish literal strings from text to be expanded:
1175 quotation.
1177 When calling macros that take arguments, there must not be any white
1178 space between the macro name and the open parenthesis.
1180 @example
1181 AC_INIT ([oops], [1.0]) # incorrect
1182 AC_INIT([hello], [1.0]) # good
1183 @end example
1185 Arguments should
1186 be enclosed within the quote characters @samp{[} and @samp{]}, and be
1187 separated by commas.  Any leading blanks or newlines in arguments are ignored,
1188 unless they are quoted.  You should always quote an argument that
1189 might contain a macro name, comma, parenthesis, or a leading blank or
1190 newline.  This rule applies recursively for every macro
1191 call, including macros called from other macros.  For more details on
1192 quoting rules, see @ref{Programming in M4}.
1194 For instance:
1196 @example
1197 AC_CHECK_HEADER([stdio.h],
1198                 [AC_DEFINE([HAVE_STDIO_H], [1],
1199                    [Define to 1 if you have <stdio.h>.])],
1200                 [AC_MSG_ERROR([sorry, can't do anything for you])])
1201 @end example
1203 @noindent
1204 is quoted properly.  You may safely simplify its quotation to:
1206 @example
1207 AC_CHECK_HEADER([stdio.h],
1208                 [AC_DEFINE([HAVE_STDIO_H], 1,
1209                    [Define to 1 if you have <stdio.h>.])],
1210                 [AC_MSG_ERROR([sorry, can't do anything for you])])
1211 @end example
1213 @noindent
1214 because @samp{1} cannot contain a macro call.  Here, the argument of
1215 @code{AC_MSG_ERROR} must be quoted; otherwise, its comma would be
1216 interpreted as an argument separator.  Also, the second and third arguments
1217 of @samp{AC_CHECK_HEADER} must be quoted, since they contain
1218 macro calls.  The three arguments @samp{HAVE_STDIO_H}, @samp{stdio.h},
1219 and @samp{Define to 1 if you have <stdio.h>.} do not need quoting, but
1220 if you unwisely defined a macro with a name like @samp{Define} or
1221 @samp{stdio} then they would need quoting.  Cautious Autoconf users
1222 would keep the quotes, but many Autoconf users find such precautions
1223 annoying, and would rewrite the example as follows:
1225 @example
1226 AC_CHECK_HEADER(stdio.h,
1227                 [AC_DEFINE(HAVE_STDIO_H, 1,
1228                    [Define to 1 if you have <stdio.h>.])],
1229                 [AC_MSG_ERROR([sorry, can't do anything for you])])
1230 @end example
1232 @noindent
1233 This is safe, so long as you adopt good naming conventions and do not
1234 define macros with names like @samp{HAVE_STDIO_H}, @samp{stdio}, or
1235 @samp{h}.  Though it is also safe here to omit the quotes around
1236 @samp{Define to 1 if you have <stdio.h>.} this is not recommended, as
1237 message strings are more likely to inadvertently contain commas.
1239 The following example is wrong and dangerous, as it is underquoted:
1241 @example
1242 AC_CHECK_HEADER(stdio.h,
1243                 AC_DEFINE(HAVE_STDIO_H, 1,
1244                    Define to 1 if you have <stdio.h>.),
1245                 AC_MSG_ERROR([sorry, can't do anything for you]))
1246 @end example
1248 In other cases, you may want to use text that also resembles a macro
1249 call.  You must quote that text (whether just the potential problem, or
1250 the entire line) even when it is not passed as a macro argument; and you
1251 may also have to use @code{m4_pattern_allow} (@pxref{Forbidden
1252 Patterns}), to declare your intention that the resulting configure file
1253 will have a literal that resembles what would otherwise be reserved for
1254 a macro name.  For example:
1256 @example
1257 dnl Simulate a possible future autoconf macro
1258 m4_define([AC_DC], [oops])
1259 dnl Underquoted:
1260 echo "Hard rock was here!  --AC_DC"
1261 dnl Correctly quoted:
1262 m4_pattern_allow([AC_DC])
1263 echo "Hard rock was here!  --[AC_DC]"
1264 [echo "Hard rock was here!  --AC_DC"]
1265 @end example
1267 @noindent
1268 which results in this text in @file{configure}:
1270 @example
1271 echo "Hard rock was here!  --oops"
1272 echo "Hard rock was here!  --AC_DC"
1273 echo "Hard rock was here!  --AC_DC"
1274 @end example
1276 @noindent
1277 When you use the same text in a macro argument, you must therefore have
1278 an extra quotation level (since one is stripped away by the macro
1279 substitution).  In general, then, it is a good idea to @emph{use double
1280 quoting for all literal string arguments}, either around just the
1281 problematic portions, or over the entire argument:
1283 @example
1284 m4_pattern_allow([AC_DC])
1285 AC_MSG_WARN([[AC_DC] stinks  --Iron Maiden])
1286 AC_MSG_WARN([[AC_DC stinks  --Iron Maiden]])
1287 @end example
1289 It is also possible to avoid the problematic patterns in the first
1290 place, by the use of additional escaping (either a quadrigraph, or
1291 creative shell constructs), in which case it is no longer necessary to
1292 use @code{m4_pattern_allow}:
1294 @example
1295 echo "Hard rock was here!  --AC""_DC"
1296 AC_MSG_WARN([[AC@@&t@@_DC stinks  --Iron Maiden]])
1297 @end example
1299 You are now able to understand one of the constructs of Autoconf that
1300 has been continually misunderstood@enddots{}  The rule of thumb is that
1301 @emph{whenever you expect macro expansion, expect quote expansion};
1302 i.e., expect one level of quotes to be lost.  For instance:
1304 @example
1305 AC_COMPILE_IFELSE(AC_LANG_SOURCE([char b[10];]), [],
1306  [AC_MSG_ERROR([you lose])])
1307 @end example
1309 @noindent
1310 is incorrect: here, the first argument of @code{AC_LANG_SOURCE} is
1311 @samp{char b[10];} and is expanded once, which results in
1312 @samp{char b10;}; and the @code{AC_LANG_SOURCE} is also expanded prior
1313 to being passed to @code{AC_COMPILE_IFELSE}.  (There was an idiom common
1314 in Autoconf's past to
1315 address this issue via the M4 @code{changequote} primitive, but do not
1316 use it!)  Let's take a closer look: the author meant the first argument
1317 to be understood as a literal, and therefore it must be quoted twice;
1318 likewise, the intermediate @code{AC_LANG_SOURCE} macro should be quoted
1319 once so that it is only expanded after the rest of the body of
1320 @code{AC_COMPILE_IFELSE} is in place:
1322 @example
1323 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char b[10];]])], [],
1324   [AC_MSG_ERROR([you lose])])
1325 @end example
1327 @noindent
1328 Voil@`a, you actually produce @samp{char b[10];} this time!
1330 On the other hand, descriptions (e.g., the last parameter of
1331 @code{AC_DEFINE} or @code{AS_HELP_STRING}) are not literals---they
1332 are subject to line breaking, for example---and should not be double quoted.
1333 Even if these descriptions are short and are not actually broken, double
1334 quoting them yields weird results.
1336 Some macros take optional arguments, which this documentation represents
1337 as @ovar{arg} (not to be confused with the quote characters).  You may
1338 just leave them empty, or use @samp{[]} to make the emptiness of the
1339 argument explicit, or you may simply omit the trailing commas.  The
1340 three lines below are equivalent:
1342 @example
1343 AC_CHECK_HEADERS([stdio.h], [], [], [])
1344 AC_CHECK_HEADERS([stdio.h],,,)
1345 AC_CHECK_HEADERS([stdio.h])
1346 @end example
1348 It is best to put each macro call on its own line in
1349 @file{configure.ac}.  Most of the macros don't add extra newlines; they
1350 rely on the newline after the macro call to terminate the commands.
1351 This approach makes the generated @command{configure} script a little
1352 easier to read by not inserting lots of blank lines.  It is generally
1353 safe to set shell variables on the same line as a macro call, because
1354 the shell allows assignments without intervening newlines.
1356 You can include comments in @file{configure.ac} files by starting them
1357 with the @samp{#}.  For example, it is helpful to begin
1358 @file{configure.ac} files with a line like this:
1360 @example
1361 # Process this file with autoconf to produce a configure script.
1362 @end example
1364 @node Autoconf Input Layout
1365 @subsection Standard @file{configure.ac} Layout
1367 The order in which @file{configure.ac} calls the Autoconf macros is not
1368 important, with a few exceptions.  Every @file{configure.ac} must
1369 contain a call to @code{AC_INIT} before the checks, and a call to
1370 @code{AC_OUTPUT} at the end (@pxref{Output}).  Additionally, some macros
1371 rely on other macros having been called first, because they check
1372 previously set values of some variables to decide what to do.  These
1373 macros are noted in the individual descriptions (@pxref{Existing
1374 Tests}), and they also warn you when @command{configure} is created if they
1375 are called out of order.
1377 To encourage consistency, here is a suggested order for calling the
1378 Autoconf macros.  Generally speaking, the things near the end of this
1379 list are those that could depend on things earlier in it.  For example,
1380 library functions could be affected by types and libraries.
1382 @display
1383 @group
1384 Autoconf requirements
1385 @code{AC_INIT(@var{package}, @var{version}, @var{bug-report-address})}
1386 information on the package
1387 checks for programs
1388 checks for libraries
1389 checks for header files
1390 checks for types
1391 checks for structures
1392 checks for compiler characteristics
1393 checks for library functions
1394 checks for system services
1395 @code{AC_CONFIG_FILES(@r{[}@var{file@dots{}}@r{]})}
1396 @code{AC_OUTPUT}
1397 @end group
1398 @end display
1401 @node autoscan Invocation
1402 @section Using @command{autoscan} to Create @file{configure.ac}
1403 @cindex @command{autoscan}
1405 The @command{autoscan} program can help you create and/or maintain a
1406 @file{configure.ac} file for a software package.  @command{autoscan}
1407 examines source files in the directory tree rooted at a directory given
1408 as a command line argument, or the current directory if none is given.
1409 It searches the source files for common portability problems and creates
1410 a file @file{configure.scan} which is a preliminary @file{configure.ac}
1411 for that package, and checks a possibly existing @file{configure.ac} for
1412 completeness.
1414 When using @command{autoscan} to create a @file{configure.ac}, you
1415 should manually examine @file{configure.scan} before renaming it to
1416 @file{configure.ac}; it probably needs some adjustments.
1417 Occasionally, @command{autoscan} outputs a macro in the wrong order
1418 relative to another macro, so that @command{autoconf} produces a warning;
1419 you need to move such macros manually.  Also, if you want the package to
1420 use a configuration header file, you must add a call to
1421 @code{AC_CONFIG_HEADERS} (@pxref{Configuration Headers}).  You might
1422 also have to change or add some @code{#if} directives to your program in
1423 order to make it work with Autoconf (@pxref{ifnames Invocation}, for
1424 information about a program that can help with that job).
1426 When using @command{autoscan} to maintain a @file{configure.ac}, simply
1427 consider adding its suggestions.  The file @file{autoscan.log}
1428 contains detailed information on why a macro is requested.
1430 @command{autoscan} uses several data files (installed along with Autoconf)
1431 to determine which macros to output when it finds particular symbols in
1432 a package's source files.  These data files all have the same format:
1433 each line consists of a symbol, one or more blanks, and the Autoconf macro to
1434 output if that symbol is encountered.  Lines starting with @samp{#} are
1435 comments.
1437 @command{autoscan} accepts the following options:
1439 @table @option
1440 @item --help
1441 @itemx -h
1442 Print a summary of the command line options and exit.
1444 @item --version
1445 @itemx -V
1446 Print the version number of Autoconf and exit.
1448 @item --verbose
1449 @itemx -v
1450 Print the names of the files it examines and the potentially interesting
1451 symbols it finds in them.  This output can be voluminous.
1453 @item --debug
1454 @itemx -d
1455 Don't remove temporary files.
1457 @item --include=@var{dir}
1458 @itemx -I @var{dir}
1459 Append @var{dir} to the include path.  Multiple invocations accumulate.
1461 @item --prepend-include=@var{dir}
1462 @itemx -B @var{dir}
1463 Prepend @var{dir} to the include path.  Multiple invocations accumulate.
1464 @end table
1466 @node ifnames Invocation
1467 @section Using @command{ifnames} to List Conditionals
1468 @cindex @command{ifnames}
1470 @command{ifnames} can help you write @file{configure.ac} for a software
1471 package.  It prints the identifiers that the package already uses in C
1472 preprocessor conditionals.  If a package has already been set up to have
1473 some portability, @command{ifnames} can thus help you figure out what its
1474 @command{configure} needs to check for.  It may help fill in some gaps in a
1475 @file{configure.ac} generated by @command{autoscan} (@pxref{autoscan
1476 Invocation}).
1478 @command{ifnames} scans all of the C source files named on the command line
1479 (or the standard input, if none are given) and writes to the standard
1480 output a sorted list of all the identifiers that appear in those files
1481 in @code{#if}, @code{#elif}, @code{#ifdef}, or @code{#ifndef}
1482 directives.  It prints each identifier on a line, followed by a
1483 space-separated list of the files in which that identifier occurs.
1485 @noindent
1486 @command{ifnames} accepts the following options:
1488 @table @option
1489 @item --help
1490 @itemx -h
1491 Print a summary of the command line options and exit.
1493 @item --version
1494 @itemx -V
1495 Print the version number of Autoconf and exit.
1496 @end table
1498 @node autoconf Invocation
1499 @section Using @command{autoconf} to Create @command{configure}
1500 @cindex @command{autoconf}
1502 To create @command{configure} from @file{configure.ac}, run the
1503 @command{autoconf} program with no arguments.  @command{autoconf} processes
1504 @file{configure.ac} with the M4 macro processor, using the
1505 Autoconf macros.  If you give @command{autoconf} an argument, it reads that
1506 file instead of @file{configure.ac} and writes the configuration script
1507 to the standard output instead of to @command{configure}.  If you give
1508 @command{autoconf} the argument @option{-}, it reads from the standard
1509 input instead of @file{configure.ac} and writes the configuration script
1510 to the standard output.
1512 The Autoconf macros are defined in several files.  Some of the files are
1513 distributed with Autoconf; @command{autoconf} reads them first.  Then it
1514 looks for the optional file @file{acsite.m4} in the directory that
1515 contains the distributed Autoconf macro files, and for the optional file
1516 @file{aclocal.m4} in the current directory.  Those files can contain
1517 your site's or the package's own Autoconf macro definitions
1518 (@pxref{Writing Autoconf Macros}, for more information).  If a macro is
1519 defined in more than one of the files that @command{autoconf} reads, the
1520 last definition it reads overrides the earlier ones.
1522 @command{autoconf} accepts the following options:
1524 @table @option
1525 @item --help
1526 @itemx -h
1527 Print a summary of the command line options and exit.
1529 @item --version
1530 @itemx -V
1531 Print the version number of Autoconf and exit.
1533 @item --verbose
1534 @itemx -v
1535 Report processing steps.
1537 @item --debug
1538 @itemx -d
1539 Don't remove the temporary files.
1541 @item --force
1542 @itemx -f
1543 Remake @file{configure} even if newer than its input files.
1545 @item --include=@var{dir}
1546 @itemx -I @var{dir}
1547 Append @var{dir} to the include path.  Multiple invocations accumulate.
1549 @item --prepend-include=@var{dir}
1550 @itemx -B @var{dir}
1551 Prepend @var{dir} to the include path.  Multiple invocations accumulate.
1553 @item --output=@var{file}
1554 @itemx -o @var{file}
1555 Save output (script or trace) to @var{file}.  The file @option{-} stands
1556 for the standard output.
1558 @item --warnings=@var{category}
1559 @itemx -W @var{category}
1560 @evindex WARNINGS
1561 Report the warnings related to @var{category} (which can actually be a
1562 comma separated list).  @xref{Reporting Messages}, macro
1563 @code{AC_DIAGNOSE}, for a comprehensive list of categories.  Special
1564 values include:
1566 @table @samp
1567 @item all
1568 report all the warnings
1570 @item none
1571 report none
1573 @item error
1574 treats warnings as errors
1576 @item no-@var{category}
1577 disable warnings falling into @var{category}
1578 @end table
1580 Warnings about @samp{syntax} are enabled by default, and the environment
1581 variable @env{WARNINGS}, a comma separated list of categories, is
1582 honored as well.  Passing @option{-W @var{category}} actually behaves as if
1583 you had passed @option{--warnings syntax,$WARNINGS,@var{category}}.  To
1584 disable the defaults and @env{WARNINGS}, and then
1585 enable warnings about obsolete constructs, use @option{-W
1586 none,obsolete}.
1588 @cindex Back trace
1589 @cindex Macro invocation stack
1590 Because @command{autoconf} uses @command{autom4te} behind the scenes, it
1591 displays a back trace for errors, but not for warnings; if you want
1592 them, just pass @option{-W error}.  @xref{autom4te Invocation}, for some
1593 examples.
1595 @item --trace=@var{macro}[:@var{format}]
1596 @itemx -t @var{macro}[:@var{format}]
1597 Do not create the @command{configure} script, but list the calls to
1598 @var{macro} according to the @var{format}.  Multiple @option{--trace}
1599 arguments can be used to list several macros.  Multiple @option{--trace}
1600 arguments for a single macro are not cumulative; instead, you should
1601 just make @var{format} as long as needed.
1603 The @var{format} is a regular string, with newlines if desired, and
1604 several special escape codes.  It defaults to @samp{$f:$l:$n:$%}; see
1605 @ref{autom4te Invocation}, for details on the @var{format}.
1607 @item --initialization
1608 @itemx -i
1609 By default, @option{--trace} does not trace the initialization of the
1610 Autoconf macros (typically the @code{AC_DEFUN} definitions).  This
1611 results in a noticeable speedup, but can be disabled by this option.
1612 @end table
1615 It is often necessary to check the content of a @file{configure.ac}
1616 file, but parsing it yourself is extremely fragile and error-prone.  It
1617 is suggested that you rely upon @option{--trace} to scan
1618 @file{configure.ac}.  For instance, to find the list of variables that
1619 are substituted, use:
1621 @example
1622 @group
1623 $ @kbd{autoconf -t AC_SUBST}
1624 configure.ac:2:AC_SUBST:ECHO_C
1625 configure.ac:2:AC_SUBST:ECHO_N
1626 configure.ac:2:AC_SUBST:ECHO_T
1627 @i{More traces deleted}
1628 @end group
1629 @end example
1631 @noindent
1632 The example below highlights the difference between @samp{$@@},
1633 @samp{$*}, and @samp{$%}.
1635 @example
1636 @group
1637 $ @kbd{cat configure.ac}
1638 AC_DEFINE(This, is, [an
1639 [example]])
1640 $ @kbd{autoconf -t 'AC_DEFINE:@@: $@@}
1641 *: $*
1642 %: $%'
1643 @@: [This],[is],[an
1644 [example]]
1645 *: This,is,an
1646 [example]
1647 %: This:is:an [example]
1648 @end group
1649 @end example
1651 @noindent
1652 The @var{format} gives you a lot of freedom:
1654 @example
1655 @group
1656 $ @kbd{autoconf -t 'AC_SUBST:$$ac_subst@{"$1"@} = "$f:$l";'}
1657 $ac_subst@{"ECHO_C"@} = "configure.ac:2";
1658 $ac_subst@{"ECHO_N"@} = "configure.ac:2";
1659 $ac_subst@{"ECHO_T"@} = "configure.ac:2";
1660 @i{More traces deleted}
1661 @end group
1662 @end example
1664 @noindent
1665 A long @var{separator} can be used to improve the readability of complex
1666 structures, and to ease their parsing (for instance when no single
1667 character is suitable as a separator):
1669 @example
1670 @group
1671 $ @kbd{autoconf -t 'AM_MISSING_PROG:$@{|:::::|@}*'}
1672 ACLOCAL|:::::|aclocal|:::::|$missing_dir
1673 AUTOCONF|:::::|autoconf|:::::|$missing_dir
1674 AUTOMAKE|:::::|automake|:::::|$missing_dir
1675 @i{More traces deleted}
1676 @end group
1677 @end example
1679 @node autoreconf Invocation
1680 @section Using @command{autoreconf} to Update @command{configure} Scripts
1681 @cindex @command{autoreconf}
1683 Installing the various components of the GNU Build System can be
1684 tedious: running @command{autopoint} for Gettext, @command{automake} for
1685 @file{Makefile.in} etc.@: in each directory.  It may be needed either
1686 because some tools such as @command{automake} have been updated on your
1687 system, or because some of the sources such as @file{configure.ac} have
1688 been updated, or finally, simply in order to install the GNU Build
1689 System in a fresh tree.
1691 @command{autoreconf} runs @command{autoconf}, @command{autoheader},
1692 @command{aclocal}, @command{automake}, @command{libtoolize}, and
1693 @command{autopoint} (when appropriate) repeatedly to update the
1694 GNU Build System in the specified directories and their
1695 subdirectories (@pxref{Subdirectories}).  By default, it only remakes
1696 those files that are older than their sources.  The environment variables
1697 @env{AUTOM4TE}, @env{AUTOCONF}, @env{AUTOHEADER}, @env{AUTOMAKE},
1698 @env{ACLOCAL}, @env{AUTOPOINT}, @env{LIBTOOLIZE}, @env{M4}, and @env{MAKE}
1699 may be used to override the invocation of the respective tools.
1701 If you install a new version of some tool, you can make
1702 @command{autoreconf} remake @emph{all} of the files by giving it the
1703 @option{--force} option.
1705 @xref{Automatic Remaking}, for Make rules to automatically
1706 rebuild @command{configure} scripts when their source files change.  That
1707 method handles the timestamps of configuration header templates
1708 properly, but does not pass @option{--autoconf-dir=@var{dir}} or
1709 @option{--localdir=@var{dir}}.
1711 @cindex Gettext
1712 @cindex @command{autopoint}
1713 Gettext supplies the @command{autopoint} command to add translation
1714 infrastructure to a source package.  If you use @command{autopoint},
1715 your @file{configure.ac} should invoke both @code{AM_GNU_GETTEXT} and
1716 @code{AM_GNU_GETTEXT_VERSION(@var{gettext-version})}.  @xref{autopoint
1717 Invocation, , Invoking the @code{autopoint} Program, gettext,
1718 GNU @code{gettext} utilities}, for further details.
1720 @noindent
1721 @command{autoreconf} accepts the following options:
1723 @table @option
1724 @item --help
1725 @itemx -h
1726 Print a summary of the command line options and exit.
1728 @item --version
1729 @itemx -V
1730 Print the version number of Autoconf and exit.
1732 @item --verbose
1733 @itemx -v
1734 Print the name of each directory @command{autoreconf} examines and the
1735 commands it runs.  If given two or more times, pass @option{--verbose}
1736 to subordinate tools that support it.
1738 @item --debug
1739 @itemx -d
1740 Don't remove the temporary files.
1742 @item --force
1743 @itemx -f
1744 Consider all generated and standard auxiliary files to be obsolete.
1745 This remakes even @file{configure} scripts and configuration headers
1746 that are newer than their input files (@file{configure.ac} and, if
1747 present, @file{aclocal.m4}).
1749 If deemed appropriate, this option triggers calls to @samp{automake
1750 --force-missing}.  Passing both @option{--force} and @option{--install}
1751 to @command{autoreconf} will in turn undo any customizations to standard
1752 files.  Note that the macro @code{AM_INIT_AUTOMAKE} has some options
1753 which change the set of files considered to be standard.
1755 @item --install
1756 @itemx -i
1757 Install any missing standard auxiliary files in the package.  By
1758 default, files are copied; this can be changed with @option{--symlink}.
1760 If deemed appropriate, this option triggers calls to
1761 @samp{automake --add-missing},
1762 @samp{libtoolize}, @samp{autopoint}, etc.
1764 @item --no-recursive
1765 Do not rebuild files in subdirectories to configure (see @ref{Subdirectories},
1766 macro @code{AC_CONFIG_SUBDIRS}).
1768 @item --symlink
1769 @itemx -s
1770 When used with @option{--install}, install symbolic links to the missing
1771 auxiliary files instead of copying them.
1773 @item --make
1774 @itemx -m
1775 When the directories were configured, update the configuration by
1776 running @samp{./config.status --recheck && ./config.status}, and then
1777 run @samp{make}.
1779 @item --include=@var{dir}
1780 @itemx -I @var{dir}
1781 Append @var{dir} to the include path.  Multiple invocations accumulate.
1782 Passed on to @command{aclocal}, @command{autoconf} and
1783 @command{autoheader} internally.
1785 @item --prepend-include=@var{dir}
1786 @itemx -B @var{dir}
1787 Prepend @var{dir} to the include path.  Multiple invocations accumulate.
1788 Passed on to @command{autoconf} and @command{autoheader} internally.
1790 @item --warnings=@var{category}
1791 @itemx -W @var{category}
1792 @evindex WARNINGS
1793 Report the warnings related to @var{category} (which can actually be a
1794 comma separated list).
1796 @table @samp
1797 @item cross
1798 related to cross compilation issues.
1800 @item obsolete
1801 report the uses of obsolete constructs.
1803 @item portability
1804 portability issues
1806 @item syntax
1807 dubious syntactic constructs.
1809 @item all
1810 report all the warnings
1812 @item none
1813 report none
1815 @item error
1816 treats warnings as errors
1818 @item no-@var{category}
1819 disable warnings falling into @var{category}
1820 @end table
1822 Warnings about @samp{syntax} are enabled by default, and the environment
1823 variable @env{WARNINGS}, a comma separated list of categories, is
1824 honored as well.  Passing @option{-W @var{category}} actually behaves as if
1825 you had passed @option{--warnings syntax,$WARNINGS,@var{category}}.  To
1826 disable the defaults and @env{WARNINGS}, and then
1827 enable warnings about obsolete constructs, use @option{-W
1828 none,obsolete}.
1829 @end table
1831 If you want @command{autoreconf} to pass flags that are not listed here
1832 on to @command{aclocal}, set @code{ACLOCAL_AMFLAGS} in your @file{Makefile.am}.
1833 Due to a limitation in the Autoconf implementation these flags currently
1834 must be set on a single line in @file{Makefile.am}, without any
1835 backslash-newlines.  Also, be aware that future Automake releases might
1836 start flagging @code{ACLOCAL_AMFLAGS} as obsolescent, or even remove
1837 support for it.
1839 @c ========================================= Initialization and Output Files.
1841 @node Setup
1842 @chapter Initialization and Output Files
1844 Autoconf-generated @command{configure} scripts need some information about
1845 how to initialize, such as how to find the package's source files and
1846 about the output files to produce.  The following sections describe the
1847 initialization and the creation of output files.
1849 @menu
1850 * Initializing configure::      Option processing etc.
1851 * Versioning::                  Dealing with Autoconf versions
1852 * Notices::                     Copyright, version numbers in @command{configure}
1853 * Input::                       Where Autoconf should find files
1854 * Output::                      Outputting results from the configuration
1855 * Configuration Actions::       Preparing the output based on results
1856 * Configuration Files::         Creating output files
1857 * Makefile Substitutions::      Using output variables in makefiles
1858 * Configuration Headers::       Creating a configuration header file
1859 * Configuration Commands::      Running arbitrary instantiation commands
1860 * Configuration Links::         Links depending on the configuration
1861 * Subdirectories::              Configuring independent packages together
1862 * Default Prefix::              Changing the default installation prefix
1863 @end menu
1865 @node Initializing configure
1866 @section Initializing @command{configure}
1868 Every @command{configure} script must call @code{AC_INIT} before doing
1869 anything else that produces output.  Calls to silent macros, such as
1870 @code{AC_DEFUN}, may also occur prior to @code{AC_INIT}, although these
1871 are generally used via @file{aclocal.m4}, since that is implicitly
1872 included before the start of @file{configure.ac}.  The only other
1873 required macro is @code{AC_OUTPUT} (@pxref{Output}).
1875 @anchor{AC_INIT}
1876 @defmac AC_INIT (@var{package}, @var{version}, @ovar{bug-report}, @
1877   @ovar{tarname}, @ovar{url})
1878 @acindex{INIT}
1879 Process any command-line arguments and perform initialization
1880 and verification.
1882 Set the name of the @var{package} and its @var{version}.  These are
1883 typically used in @option{--version} support, including that of
1884 @command{configure}.  The optional argument @var{bug-report} should be
1885 the email to which users should send bug reports.  The package
1886 @var{tarname} differs from @var{package}: the latter designates the full
1887 package name (e.g., @samp{GNU Autoconf}), while the former is meant for
1888 distribution tar ball names (e.g., @samp{autoconf}).  It defaults to
1889 @var{package} with @samp{GNU } stripped, lower-cased, and all characters
1890 other than alphanumerics and underscores are changed to @samp{-}.  If
1891 provided, @var{url} should be the home page for the package.
1893 The arguments of @code{AC_INIT} must be static, i.e., there should not
1894 be any shell computation, quotes, or newlines, but they can be computed
1895 by M4.  This is because the package information strings are expanded at
1896 M4 time into several contexts, and must give the same text at shell time
1897 whether used in single-quoted strings, double-quoted strings, quoted
1898 here-documents, or unquoted here-documents.  It is permissible to use
1899 @code{m4_esyscmd} or @code{m4_esyscmd_s} for computing a version string
1900 that changes with every commit to a version control system (in fact,
1901 Autoconf does just that, for all builds of the development tree made
1902 between releases).
1904 The following M4 macros (e.g., @code{AC_PACKAGE_NAME}), output variables
1905 (e.g., @code{PACKAGE_NAME}), and preprocessor symbols (e.g.,
1906 @code{PACKAGE_NAME}), are defined by @code{AC_INIT}:
1908 @table @asis
1909 @item @code{AC_PACKAGE_NAME}, @code{PACKAGE_NAME}
1910 @acindex{PACKAGE_NAME}
1911 @ovindex PACKAGE_NAME
1912 @cvindex PACKAGE_NAME
1913 Exactly @var{package}.
1915 @item @code{AC_PACKAGE_TARNAME}, @code{PACKAGE_TARNAME}
1916 @acindex{PACKAGE_TARNAME}
1917 @ovindex PACKAGE_TARNAME
1918 @cvindex PACKAGE_TARNAME
1919 Exactly @var{tarname}, possibly generated from @var{package}.
1921 @item @code{AC_PACKAGE_VERSION}, @code{PACKAGE_VERSION}
1922 @acindex{PACKAGE_VERSION}
1923 @ovindex PACKAGE_VERSION
1924 @cvindex PACKAGE_VERSION
1925 Exactly @var{version}.
1927 @item @code{AC_PACKAGE_STRING}, @code{PACKAGE_STRING}
1928 @acindex{PACKAGE_STRING}
1929 @ovindex PACKAGE_STRING
1930 @cvindex PACKAGE_STRING
1931 Exactly @samp{@var{package} @var{version}}.
1933 @item @code{AC_PACKAGE_BUGREPORT}, @code{PACKAGE_BUGREPORT}
1934 @acindex{PACKAGE_BUGREPORT}
1935 @ovindex PACKAGE_BUGREPORT
1936 @cvindex PACKAGE_BUGREPORT
1937 Exactly @var{bug-report}, if one was provided.  Typically an email
1938 address, or URL to a bug management web page.
1940 @item @code{AC_PACKAGE_URL}, @code{PACKAGE_URL}
1941 @acindex{PACKAGE_URL}
1942 @ovindex PACKAGE_URL
1943 @cvindex PACKAGE_URL
1944 Exactly @var{url}, if one was provided.  If @var{url} was empty, but
1945 @var{package} begins with @samp{GNU }, then this defaults to
1946 @samp{https://@/www.gnu.org/@/software/@/@var{tarname}/}, otherwise, no URL is
1947 assumed.
1948 @end table
1949 @end defmac
1951 If your @command{configure} script does its own option processing, it
1952 should inspect @samp{$@@} or @samp{$*} immediately after calling
1953 @code{AC_INIT}, because other Autoconf macros liberally use the
1954 @command{set} command to process strings, and this has the side effect
1955 of updating @samp{$@@} and @samp{$*}.  However, we suggest that you use
1956 standard macros like @code{AC_ARG_ENABLE} instead of attempting to
1957 implement your own option processing.  @xref{Site Configuration}.
1959 @node Versioning
1960 @section Dealing with Autoconf versions
1961 @cindex Autoconf version
1962 @cindex version, Autoconf
1964 The following optional macros can be used to help choose the minimum
1965 version of Autoconf that can successfully compile a given
1966 @file{configure.ac}.
1968 @defmac AC_PREREQ (@var{version})
1969 @acindex{PREREQ}
1970 @cindex Version
1971 Ensure that a recent enough version of Autoconf is being used.  If the
1972 version of Autoconf being used to create @command{configure} is
1973 earlier than @var{version}, print an error message to the standard
1974 error output and exit with failure (exit status is 63).  For example:
1976 @example
1977 AC_PREREQ([@value{VERSION}])
1978 @end example
1980 This macro may be used before @code{AC_INIT}.
1981 @end defmac
1983 @defmac AC_AUTOCONF_VERSION
1984 @acindex{AUTOCONF_VERSION}
1985 This macro was introduced in Autoconf 2.62.  It identifies the version
1986 of Autoconf that is currently parsing the input file, in a format
1987 suitable for @code{m4_version_compare} (@pxref{m4_version_compare}); in
1988 other words, for this release of Autoconf, its value is
1989 @samp{@value{VERSION}}.  One potential use of this macro is for writing
1990 conditional fallbacks based on when a feature was added to Autoconf,
1991 rather than using @code{AC_PREREQ} to require the newer version of
1992 Autoconf.  However, remember that the Autoconf philosophy favors feature
1993 checks over version checks.
1995 You should not expand this macro directly; use
1996 @samp{m4_defn([AC_AUTOCONF_VERSION])} instead.  This is because some
1997 users might
1998 have a beta version of Autoconf installed, with arbitrary letters
1999 included in its version string.  This means it is possible for the
2000 version string to contain the name of a defined macro, such that
2001 expanding @code{AC_AUTOCONF_VERSION} would trigger the expansion of that
2002 macro during rescanning, and change the version string to be different
2003 than what you intended to check.
2004 @end defmac
2006 @node Notices
2007 @section Notices in @command{configure}
2008 @cindex Notices in @command{configure}
2010 The following macros manage version numbers for @command{configure}
2011 scripts.  Using them is optional.
2013 @defmac AC_COPYRIGHT (@var{copyright-notice})
2014 @acindex{COPYRIGHT}
2015 @cindex Copyright Notice
2016 State that, in addition to the Free Software Foundation's copyright on
2017 the Autoconf macros, parts of your @command{configure} are covered by the
2018 @var{copyright-notice}.
2020 The @var{copyright-notice} shows up in both the head of
2021 @command{configure} and in @samp{configure --version}.
2022 @end defmac
2025 @defmac AC_REVISION (@var{revision-info})
2026 @acindex{REVISION}
2027 @cindex Revision
2028 Copy revision stamp @var{revision-info} into the @command{configure}
2029 script, with any dollar signs or double-quotes removed.  This macro lets
2030 you put a revision stamp from @file{configure.ac} into @command{configure}
2031 without RCS or CVS changing it when you check in
2032 @command{configure}.  That way, you can determine easily which revision of
2033 @file{configure.ac} a particular @command{configure} corresponds to.
2035 For example, this line in @file{configure.ac}:
2037 @c The @w prevents RCS from changing the example in the manual.
2038 @example
2039 AC_REVISION([@w{$}Revision: 1.30 $])
2040 @end example
2042 @noindent
2043 produces this in @command{configure}:
2045 @example
2046 #!/bin/sh
2047 # From configure.ac Revision: 1.30
2048 @end example
2049 @end defmac
2052 @node Input
2053 @section Finding @command{configure} Input
2055 @anchor{AC_CONFIG_SRCDIR}
2056 @defmac AC_CONFIG_SRCDIR (@var{unique-file-in-source-dir})
2057 @acindex{CONFIG_SRCDIR}
2058 @var{unique-file-in-source-dir} is some file that is in the package's
2059 source directory; @command{configure} checks for this file's existence to
2060 make sure that the directory that it is told contains the source code in
2061 fact does.  Occasionally people accidentally specify the wrong directory
2062 with @option{--srcdir}; this is a safety check.  @xref{configure
2063 Invocation}, for more information.
2064 @end defmac
2067 @c FIXME: Remove definitively once --install explained.
2069 @c Small packages may store all their macros in @code{aclocal.m4}.  As the
2070 @c set of macros grows, or for maintenance reasons, a maintainer may prefer
2071 @c to split the macros in several files.  In this case, Autoconf must be
2072 @c told which files to load, and in which order.
2074 @c @defmac AC_INCLUDE (@var{file}@dots{})
2075 @c @acindex{INCLUDE}
2076 @c @c FIXME: There is no longer shell globbing.
2077 @c Read the macro definitions that appear in the listed files.  A list of
2078 @c space-separated file names or shell globbing patterns is expected.  The
2079 @c files are read in the order they're listed.
2081 @c Because the order of definition of macros is important (only the last
2082 @c definition of a macro is used), beware that it is @code{AC_INIT} that
2083 @c loads @file{acsite.m4} and @file{aclocal.m4}.  Note that
2084 @c @code{AC_INCLUDE}ing a file before @code{AC_INIT} or within
2085 @c @file{aclocal.m4} is different from doing so after @code{AC_INIT}: in
2086 @c the latter case, non-macro lines from included files may end up in the
2087 @c @file{configure} script, whereas in the former case, they'd be discarded
2088 @c just like any text that appear before @code{AC_INIT}.
2089 @c @end defmac
2091 Packages that do manual configuration or use the @command{install} program
2092 might need to tell @command{configure} where to find some other shell
2093 scripts by calling @code{AC_CONFIG_AUX_DIR}, though the default places
2094 it looks are correct for most cases.
2096 @defmac AC_CONFIG_AUX_DIR (@var{dir})
2097 @acindex{CONFIG_AUX_DIR}
2098 Use the auxiliary build tools (e.g., @file{install-sh},
2099 @file{config.sub}, @file{config.guess}, Cygnus @command{configure},
2100 Automake and Libtool scripts, etc.)@: that are in directory @var{dir}.
2101 These are auxiliary files used in configuration.  @var{dir} can be
2102 either absolute or relative to @file{@var{srcdir}}.  The default is
2103 @file{@var{srcdir}} or @file{@var{srcdir}/..} or
2104 @file{@var{srcdir}/../..}, whichever is the first that contains
2105 @file{install-sh}.  The other files are not checked for, so that using
2106 @code{AC_PROG_INSTALL} does not automatically require distributing the
2107 other auxiliary files.  It checks for @file{install.sh} also, but that
2108 name is obsolete because some @command{make} have a rule that creates
2109 @file{install} from it if there is no makefile.
2111 The auxiliary directory is commonly named @file{build-aux}.
2112 If you need portability to DOS variants, do not name the
2113 auxiliary directory @file{aux}.  @xref{File System Conventions}.
2114 @end defmac
2116 @defmac AC_REQUIRE_AUX_FILE (@var{file})
2117 @acindex{REQUIRE_AUX_FILE}
2118 Declares that @var{file} is expected in the directory defined above.  In
2119 Autoconf proper, this macro does nothing: its sole purpose is to be
2120 traced by third-party tools to produce a list of expected auxiliary
2121 files.  For instance it is called by macros like @code{AC_PROG_INSTALL}
2122 (@pxref{Particular Programs}) or @code{AC_CANONICAL_BUILD}
2123 (@pxref{Canonicalizing}) to register the auxiliary files they need.
2124 @end defmac
2126 Similarly, packages that use @command{aclocal} should declare where
2127 local macros can be found using @code{AC_CONFIG_MACRO_DIRS}.
2129 @defmac AC_CONFIG_MACRO_DIRS (@var{dir1} [@var{dir2} ... @var{dirN}])
2130 @defmacx AC_CONFIG_MACRO_DIR (@var{dir})
2131 @acindex{CONFIG_MACRO_DIRS}
2132 @acindex{CONFIG_MACRO_DIR}
2133 @acindex{CONFIG_MACRO_DIR_TRACE}
2134 Specify the given directories as the location of additional local Autoconf
2135 macros.  These macros are intended for use by commands like
2136 @command{autoreconf} or @command{aclocal} that trace macro calls; they should
2137 be called directly from @file{configure.ac} so that tools that install
2138 macros for @command{aclocal} can find the macros' declarations.  Tools
2139 that want to learn which directories have been selected should trace
2140 @code{AC_CONFIG_MACRO_DIR_TRACE}, which will be called once per directory.
2142 AC_CONFIG_MACRO_DIRS is the preferred form, and can be called multiple
2143 times and with multiple arguments; in such cases, directories in earlier
2144 calls are expected to be searched before directories in later calls, and
2145 directories appearing in the same call are expected to be searched in
2146 the order in which they appear in the call.  For historical reasons, the
2147 macro AC_CONFIG_MACRO_DIR can also be used once, if it appears first,
2148 for tools such as older @command{libtool} that weren't prepared to
2149 handle multiple directories.  For example, a usage like
2151 @smallexample
2152 AC_CONFIG_MACRO_DIR([dir1])
2153 AC_CONFIG_MACRO_DIRS([dir2])
2154 AC_CONFIG_MACRO_DIRS([dir3 dir4])
2155 @end smallexample
2157 will cause the trace of AC_CONFIG_MACRO_DIR_TRACE to appear four times,
2158 and should cause the directories to be searched in this order:
2159 @samp{dir1 dir2 dir3 dir4}.
2161 Note that if you use @command{aclocal} from an Automake release prior to
2162 1.13 to generate @file{aclocal.m4}, you must also set
2163 @code{ACLOCAL_AMFLAGS = -I @var{dir1} [-I @var{dir2} ... -I @var{dirN}]}
2164 in your top-level @file{Makefile.am}.  Due to a limitation in
2165 the Autoconf implementation of @command{autoreconf}, these include
2166 directives currently must be set on a single line in @file{Makefile.am},
2167 without any backslash-newlines.
2168 @end defmac
2171 @node Output
2172 @section Outputting Files
2173 @cindex Outputting files
2175 Every Autoconf script, e.g., @file{configure.ac}, should finish by
2176 calling @code{AC_OUTPUT}.  That is the macro that generates and runs
2177 @file{config.status}, which in turn creates the makefiles and any
2178 other files resulting from configuration.  This is the only required
2179 macro besides @code{AC_INIT} (@pxref{Input}).
2181 @anchor{AC_OUTPUT}
2182 @defmac AC_OUTPUT
2183 @acindex{OUTPUT}
2184 @cindex Instantiation
2185 Generate @file{config.status} and launch it.  Call this macro once, at
2186 the end of @file{configure.ac}.
2188 @file{config.status} performs all the configuration actions: all the
2189 output files (see @ref{Configuration Files}, macro
2190 @code{AC_CONFIG_FILES}), header files (see @ref{Configuration Headers},
2191 macro @code{AC_CONFIG_HEADERS}), commands (see @ref{Configuration
2192 Commands}, macro @code{AC_CONFIG_COMMANDS}), links (see
2193 @ref{Configuration Links}, macro @code{AC_CONFIG_LINKS}), subdirectories
2194 to configure (see @ref{Subdirectories}, macro @code{AC_CONFIG_SUBDIRS})
2195 are honored.
2197 The location of your @code{AC_OUTPUT} invocation is the exact point
2198 where configuration actions are taken: any code afterwards is
2199 executed by @command{configure} once @command{config.status} was run.  If
2200 you want to bind actions to @command{config.status} itself
2201 (independently of whether @command{configure} is being run), see
2202 @ref{Configuration Commands, , Running Arbitrary Configuration
2203 Commands}.
2204 @end defmac
2206 Historically, the usage of @code{AC_OUTPUT} was somewhat different.
2207 @xref{Obsolete Macros}, for a description of the arguments that
2208 @code{AC_OUTPUT} used to support.
2211 If you run @command{make} in subdirectories, you should run it using the
2212 @command{make} variable @code{MAKE}.  Most versions of @command{make} set
2213 @code{MAKE} to the name of the @command{make} program plus any options it
2214 was given.  (But many do not include in it the values of any variables
2215 set on the command line, so those are not passed on automatically.)
2216 Some old versions of @command{make} do not set this variable.  The
2217 following macro allows you to use it even with those versions.
2219 @anchor{AC_PROG_MAKE_SET}
2220 @defmac AC_PROG_MAKE_SET
2221 @acindex{PROG_MAKE_SET}
2222 @ovindex SET_MAKE
2223 If the Make command, @code{$MAKE} if set or else @samp{make}, predefines
2224 @code{$(MAKE)}, define output variable @code{SET_MAKE} to be empty.
2225 Otherwise, define @code{SET_MAKE} to a macro definition that sets
2226 @code{$(MAKE)}, such as @samp{MAKE=make}.  Calls @code{AC_SUBST} for
2227 @code{SET_MAKE}.
2228 @end defmac
2230 If you use this macro, place a line like this in each @file{Makefile.in}
2231 that runs @command{MAKE} on other directories:
2233 @example
2234 @@SET_MAKE@@
2235 @end example
2239 @node Configuration Actions
2240 @section Performing Configuration Actions
2241 @cindex Configuration actions
2243 @file{configure} is designed so that it appears to do everything itself,
2244 but there is actually a hidden slave: @file{config.status}.
2245 @file{configure} is in charge of examining your system, but it is
2246 @file{config.status} that actually takes the proper actions based on the
2247 results of @file{configure}.  The most typical task of
2248 @file{config.status} is to @emph{instantiate} files.
2250 @acindex{CONFIG_@var{ITEMS}}
2251 This section describes the common behavior of the four standard
2252 instantiating macros: @code{AC_CONFIG_FILES}, @code{AC_CONFIG_HEADERS},
2253 @code{AC_CONFIG_COMMANDS} and @code{AC_CONFIG_LINKS}.  They all
2254 have this prototype:
2256 @c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
2257 @c awful.
2258 @example
2259 AC_CONFIG_@var{ITEMS}(@var{tag}@dots{}, @r{[}@var{commands}@r{]}, @r{[}@var{init-cmds}@r{]})
2260 @end example
2262 @noindent
2263 where the arguments are:
2265 @table @var
2266 @item tag@dots{}
2267 A blank-or-newline-separated list of tags, which are typically the names of
2268 the files to instantiate.
2270 You are encouraged to use literals as @var{tags}.  In particular, you
2271 should avoid
2273 @example
2274 @dots{} && my_foos="$my_foos fooo"
2275 @dots{} && my_foos="$my_foos foooo"
2276 AC_CONFIG_@var{ITEMS}([$my_foos])
2277 @end example
2279 @noindent
2280 and use this instead:
2282 @example
2283 @dots{} && AC_CONFIG_@var{ITEMS}([fooo])
2284 @dots{} && AC_CONFIG_@var{ITEMS}([foooo])
2285 @end example
2287 The macros @code{AC_CONFIG_FILES} and @code{AC_CONFIG_HEADERS} use
2288 special @var{tag} values: they may have the form @samp{@var{output}} or
2289 @samp{@var{output}:@var{inputs}}.  The file @var{output} is instantiated
2290 from its templates, @var{inputs} (defaulting to @samp{@var{output}.in}).
2292 @samp{AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk])},
2293 for example, asks for
2294 the creation of the file @file{Makefile} that contains the expansion of the
2295 output variables in the concatenation of @file{boiler/top.mk} and
2296 @file{boiler/bot.mk}.
2298 The special value @samp{-} might be used to denote the standard output
2299 when used in @var{output}, or the standard input when used in the
2300 @var{inputs}.  You most probably don't need to use this in
2301 @file{configure.ac}, but it is convenient when using the command line
2302 interface of @file{./config.status}, see @ref{config.status Invocation},
2303 for more details.
2305 The @var{inputs} may be absolute or relative file names.  In the latter
2306 case they are first looked for in the build tree, and then in the source
2307 tree.  Input files should be text files, and a line length below 2000
2308 bytes should be safe.
2310 @item commands
2311 Shell commands output literally into @file{config.status}, and
2312 associated with a tag that the user can use to tell @file{config.status}
2313 which commands to run.  The commands are run each time a @var{tag}
2314 request is given to @file{config.status}, typically each time the file
2315 @file{@var{tag}} is created.
2317 The variables set during the execution of @command{configure} are
2318 @emph{not} available here: you first need to set them via the
2319 @var{init-cmds}.  Nonetheless the following variables are pre-computed:
2321 @table @code
2322 @item srcdir
2323 @vrindex srcdir
2324 The name of the top source directory, assuming that the working
2325 directory is the top build directory.  This
2326 is what @command{configure}'s @option{--srcdir} option sets.
2328 @item ac_top_srcdir
2329 @vrindex ac_top_srcdir
2330 The name of the top source directory, assuming that the working
2331 directory is the current build directory.
2333 @item ac_top_build_prefix
2334 @vrindex ac_top_build_prefix
2335 The name of the top build directory, assuming that the working
2336 directory is the current build directory.
2337 It can be empty, or else ends with a slash, so that you may concatenate
2340 @item ac_srcdir
2341 @vrindex ac_srcdir
2342 The name of the corresponding source directory, assuming that the
2343 working directory is the current build directory.
2345 @item tmp
2346 @vrindex tmp
2347 The name of a temporary directory within the build tree, which you
2348 can use if you need to create additional temporary files.  The
2349 directory is cleaned up when @command{config.status} is done or
2350 interrupted.  Please use package-specific file name prefixes to
2351 avoid clashing with files that @command{config.status} may use
2352 internally.
2353 @end table
2355 @noindent
2356 The @dfn{current} directory refers to the directory (or
2357 pseudo-directory) containing the input part of @var{tags}.  For
2358 instance, running
2360 @example
2361 AC_CONFIG_COMMANDS([deep/dir/out:in/in.in], [@dots{}], [@dots{}])
2362 @end example
2364 @noindent
2365  with @option{--srcdir=../package} produces the following values:
2367 @example
2368 # Argument of --srcdir
2369 srcdir='../package'
2370 # Reversing deep/dir
2371 ac_top_build_prefix='../../'
2372 # Concatenation of $ac_top_build_prefix and srcdir
2373 ac_top_srcdir='../../../package'
2374 # Concatenation of $ac_top_srcdir and deep/dir
2375 ac_srcdir='../../../package/deep/dir'
2376 @end example
2378 @noindent
2379 independently of @samp{in/in.in}.
2381 @item init-cmds
2382 Shell commands output @emph{unquoted} near the beginning of
2383 @file{config.status}, and executed each time @file{config.status} runs
2384 (regardless of the tag).  Because they are unquoted, for example,
2385 @samp{$var} is output as the value of @code{var}.  @var{init-cmds}
2386 is typically used by @file{configure} to give @file{config.status} some
2387 variables it needs to run the @var{commands}.
2389 You should be extremely cautious in your variable names: all the
2390 @var{init-cmds} share the same name space and may overwrite each other
2391 in unpredictable ways.  Sorry@enddots{}
2392 @end table
2394 All these macros can be called multiple times, with different
2395 @var{tag} values, of course!
2398 @node Configuration Files
2399 @section Creating Configuration Files
2400 @cindex Creating configuration files
2401 @cindex Configuration file creation
2403 Be sure to read the previous section, @ref{Configuration Actions}.
2405 @anchor{AC_CONFIG_FILES}
2406 @defmac AC_CONFIG_FILES (@var{file}@dots{}, @ovar{cmds}, @ovar{init-cmds})
2407 @acindex{CONFIG_FILES}
2408 Make @code{AC_OUTPUT} create each @file{@var{file}} by copying an input
2409 file (by default @file{@var{file}.in}), substituting the output variable
2410 values.
2411 @c Before we used to have this feature, which was later rejected
2412 @c because it complicates the writing of makefiles:
2413 @c If the file would be unchanged, it is left untouched, to preserve
2414 @c timestamp.
2415 This macro is one of the instantiating macros; see @ref{Configuration
2416 Actions}.  @xref{Makefile Substitutions}, for more information on using
2417 output variables.  @xref{Setting Output Variables}, for more information
2418 on creating them.  This macro creates the directory that the file is in
2419 if it doesn't exist.  Usually, makefiles are created this way,
2420 but other files, such as @file{.gdbinit}, can be specified as well.
2422 Typical calls to @code{AC_CONFIG_FILES} look like this:
2424 @example
2425 AC_CONFIG_FILES([Makefile src/Makefile man/Makefile X/Imakefile])
2426 AC_CONFIG_FILES([autoconf], [chmod +x autoconf])
2427 @end example
2429 You can override an input file name by appending to @var{file} a
2430 colon-separated list of input files.  Examples:
2432 @example
2433 AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk]
2434                 [lib/Makefile:boiler/lib.mk])
2435 @end example
2437 @noindent
2438 Doing this allows you to keep your file names acceptable to
2439 DOS variants, or
2440 to prepend and/or append boilerplate to the file.
2441 @end defmac
2445 @node Makefile Substitutions
2446 @section Substitutions in Makefiles
2447 @cindex Substitutions in makefiles
2448 @cindex Makefile substitutions
2450 Each subdirectory in a distribution that contains something to be
2451 compiled or installed should come with a file @file{Makefile.in}, from
2452 which @command{configure} creates a file @file{Makefile} in that directory.
2453 To create @file{Makefile}, @command{configure} performs a simple variable
2454 substitution, replacing occurrences of @samp{@@@var{variable}@@} in
2455 @file{Makefile.in} with the value that @command{configure} has determined
2456 for that variable.  Variables that are substituted into output files in
2457 this way are called @dfn{output variables}.  They are ordinary shell
2458 variables that are set in @command{configure}.  To make @command{configure}
2459 substitute a particular variable into the output files, the macro
2460 @code{AC_SUBST} must be called with that variable name as an argument.
2461 Any occurrences of @samp{@@@var{variable}@@} for other variables are
2462 left unchanged.  @xref{Setting Output Variables}, for more information
2463 on creating output variables with @code{AC_SUBST}.
2465 A software package that uses a @command{configure} script should be
2466 distributed with a file @file{Makefile.in}, but no makefile; that
2467 way, the user has to properly configure the package for the local system
2468 before compiling it.
2470 @xref{Makefile Conventions, , Makefile Conventions, standards, The
2471 GNU Coding Standards}, for more information on what to put in
2472 makefiles.
2474 @menu
2475 * Preset Output Variables::     Output variables that are always set
2476 * Installation Directory Variables::  Other preset output variables
2477 * Changed Directory Variables::  Warnings about @file{datarootdir}
2478 * Build Directories::           Supporting multiple concurrent compiles
2479 * Automatic Remaking::          Makefile rules for configuring
2480 @end menu
2482 @node Preset Output Variables
2483 @subsection Preset Output Variables
2484 @cindex Output variables
2486 Some output variables are preset by the Autoconf macros.  Some of the
2487 Autoconf macros set additional output variables, which are mentioned in
2488 the descriptions for those macros.  @xref{Output Variable Index}, for a
2489 complete list of output variables.  @xref{Installation Directory
2490 Variables}, for the list of the preset ones related to installation
2491 directories.  Below are listed the other preset ones, many of which are
2492 precious variables (@pxref{Setting Output Variables},
2493 @code{AC_ARG_VAR}).
2495 The preset variables which are available during @file{config.status}
2496 (@pxref{Configuration Actions}) may also be used during
2497 @command{configure} tests.  For example, it is permissible to reference
2498 @samp{$srcdir} when constructing a list of directories to pass via
2499 the @option{-I} option during a compiler feature check.  When used in this
2500 manner, coupled with the fact that @command{configure} is always run
2501 from the top build directory, it is sufficient to use just
2502 @samp{$srcdir} instead of @samp{$top_srcdir}.
2504 @c Just say no to ASCII sorting!  We're humans, not computers.
2505 @c These variables are listed as they would be in a dictionary:
2506 @c actor
2507 @c Actress
2508 @c actress
2510 @defvar CFLAGS
2511 @evindex CFLAGS
2512 @ovindex CFLAGS
2513 Debugging and optimization options for the C compiler.  If it is not set
2514 in the environment when @command{configure} runs, the default value is set
2515 when you call @code{AC_PROG_CC} (or empty if you don't).  @command{configure}
2516 uses this variable when compiling or linking programs to test for C features.
2518 If a compiler option affects only the behavior of the preprocessor
2519 (e.g., @option{-D@var{name}}), it should be put into @code{CPPFLAGS}
2520 instead.  If it affects only the linker (e.g., @option{-L@var{directory}}),
2521 it should be put into @code{LDFLAGS} instead.  If it
2522 affects only the compiler proper, @code{CFLAGS} is the natural home for
2523 it.  If an option affects multiple phases of the compiler, though,
2524 matters get tricky.  One approach to put such options directly into
2525 @code{CC}, e.g., @code{CC='gcc -m64'}.  Another is to put them into both
2526 @code{CPPFLAGS} and @code{LDFLAGS}, but not into @code{CFLAGS}.
2528 However, remember that some @file{Makefile} variables are reserved by
2529 the GNU Coding Standards for the use of the ``user''---the person
2530 building the package.  For instance, @code{CFLAGS} is one such variable.
2532 Sometimes package developers are tempted to set user variables such as
2533 @code{CFLAGS} because it appears to make their job easier.  However, the
2534 package itself should never set a user variable, particularly not to
2535 include switches that are required for proper compilation of the
2536 package.  Since these variables are documented as being for the package
2537 builder, that person rightfully expects to be able to override any of
2538 these variables at build time.  If the package developer needs to add
2539 switches without interfering with the user, the proper way to do that is
2540 to introduce an additional variable.  Automake makes this easy by
2541 introducing @code{AM_CFLAGS} (@pxref{Flag Variables Ordering, , ,
2542 automake, GNU Automake}), but the concept is the same even if
2543 Automake is not used.
2544 @end defvar
2546 @defvar configure_input
2547 @ovindex configure_input
2548 A comment saying that the file was generated automatically by
2549 @command{configure} and giving the name of the input file.
2550 @code{AC_OUTPUT} adds a comment line containing this variable to the top
2551 of every makefile it creates.  For other files, you should
2552 reference this variable in a comment at the top of each input file.  For
2553 example, an input shell script should begin like this:
2555 @example
2556 #!/bin/sh
2557 # @@configure_input@@
2558 @end example
2560 @noindent
2561 The presence of that line also reminds people editing the file that it
2562 needs to be processed by @command{configure} in order to be used.
2563 @end defvar
2565 @defvar CPPFLAGS
2566 @evindex CPPFLAGS
2567 @ovindex CPPFLAGS
2568 Preprocessor options for the C, C++, Objective C, and Objective C++
2569 preprocessors and compilers.  If
2570 it is not set in the environment when @command{configure} runs, the default
2571 value is empty.  @command{configure} uses this variable when preprocessing
2572 or compiling programs to test for C, C++, Objective C, and Objective C++
2573 features.
2575 This variable's contents should contain options like @option{-I},
2576 @option{-D}, and @option{-U} that affect only the behavior of the
2577 preprocessor.  Please see the explanation of @code{CFLAGS} for what you
2578 can do if an option affects other phases of the compiler as well.
2580 Currently, @command{configure} always links as part of a single
2581 invocation of the compiler that also preprocesses and compiles, so it
2582 uses this variable also when linking programs.  However, it is unwise to
2583 depend on this behavior because the GNU Coding Standards do
2584 not require it and many packages do not use @code{CPPFLAGS} when linking
2585 programs.
2587 @xref{Special Chars in Variables}, for limitations that @code{CPPFLAGS}
2588 might run into.
2589 @end defvar
2591 @defvar CXXFLAGS
2592 @evindex CXXFLAGS
2593 @ovindex CXXFLAGS
2594 Debugging and optimization options for the C++ compiler.  It acts like
2595 @code{CFLAGS}, but for C++ instead of C.
2596 @end defvar
2598 @defvar DEFS
2599 @ovindex DEFS
2600 @option{-D} options to pass to the C compiler.  If @code{AC_CONFIG_HEADERS}
2601 is called, @command{configure} replaces @samp{@@DEFS@@} with
2602 @option{-DHAVE_CONFIG_H} instead (@pxref{Configuration Headers}).  This
2603 variable is not defined while @command{configure} is performing its tests,
2604 only when creating the output files.  @xref{Setting Output Variables}, for
2605 how to check the results of previous tests.
2606 @end defvar
2608 @defvar ECHO_C
2609 @defvarx ECHO_N
2610 @defvarx ECHO_T
2611 @ovindex ECHO_C
2612 @ovindex ECHO_N
2613 @ovindex ECHO_T
2614 How does one suppress the trailing newline from @command{echo} for
2615 question-answer message pairs?  These variables provide a way:
2617 @example
2618 echo $ECHO_N "And the winner is... $ECHO_C"
2619 sleep 100000000000
2620 echo "$@{ECHO_T@}dead."
2621 @end example
2623 @noindent
2624 Some old and uncommon @command{echo} implementations offer no means to
2625 achieve this, in which case @code{ECHO_T} is set to tab.  You might not
2626 want to use it.
2627 @end defvar
2629 @defvar ERLCFLAGS
2630 @evindex ERLCFLAGS
2631 @ovindex ERLCFLAGS
2632 Debugging and optimization options for the Erlang compiler.  If it is not set
2633 in the environment when @command{configure} runs, the default value is empty.
2634 @command{configure} uses this variable when compiling
2635 programs to test for Erlang features.
2636 @end defvar
2638 @defvar FCFLAGS
2639 @evindex FCFLAGS
2640 @ovindex FCFLAGS
2641 Debugging and optimization options for the Fortran compiler.  If it
2642 is not set in the environment when @command{configure} runs, the default
2643 value is set when you call @code{AC_PROG_FC} (or empty if you don't).
2644 @command{configure} uses this variable when compiling or linking
2645 programs to test for Fortran features.
2646 @end defvar
2648 @defvar FFLAGS
2649 @evindex FFLAGS
2650 @ovindex FFLAGS
2651 Debugging and optimization options for the Fortran 77 compiler.  If it
2652 is not set in the environment when @command{configure} runs, the default
2653 value is set when you call @code{AC_PROG_F77} (or empty if you don't).
2654 @command{configure} uses this variable when compiling or linking
2655 programs to test for Fortran 77 features.
2656 @end defvar
2658 @defvar LDFLAGS
2659 @evindex LDFLAGS
2660 @ovindex LDFLAGS
2661 Options for the linker.  If it is not set
2662 in the environment when @command{configure} runs, the default value is empty.
2663 @command{configure} uses this variable when linking programs to test for
2664 C, C++, Objective C, Objective C++, Fortran, and Go features.
2666 This variable's contents should contain options like @option{-s} and
2667 @option{-L} that affect only the behavior of the linker.  Please see the
2668 explanation of @code{CFLAGS} for what you can do if an option also
2669 affects other phases of the compiler.
2671 Don't use this variable to pass library names
2672 (@option{-l}) to the linker; use @code{LIBS} instead.
2673 @end defvar
2675 @defvar LIBS
2676 @evindex LIBS
2677 @ovindex LIBS
2678 @option{-l} options to pass to the linker.  The default value is empty,
2679 but some Autoconf macros may prepend extra libraries to this variable if
2680 those libraries are found and provide necessary functions, see
2681 @ref{Libraries}.  @command{configure} uses this variable when linking
2682 programs to test for C, C++, Objective C, Objective C++, Fortran, and Go
2683 features.
2684 @end defvar
2686 @defvar OBJCFLAGS
2687 @evindex OBJCFLAGS
2688 @ovindex OBJCFLAGS
2689 Debugging and optimization options for the Objective C compiler.  It
2690 acts like @code{CFLAGS}, but for Objective C instead of C.
2691 @end defvar
2693 @defvar OBJCXXFLAGS
2694 @evindex OBJCXXFLAGS
2695 @ovindex OBJCXXFLAGS
2696 Debugging and optimization options for the Objective C++ compiler.  It
2697 acts like @code{CXXFLAGS}, but for Objective C++ instead of C++.
2698 @end defvar
2700 @defvar GOFLAGS
2701 @evindex GOFLAGS
2702 @ovindex GOFLAGS
2703 Debugging and optimization options for the Go compiler.  It acts like
2704 @code{CFLAGS}, but for Go instead of C.
2705 @end defvar
2707 @defvar builddir
2708 @ovindex builddir
2709 Rigorously equal to @samp{.}.  Added for symmetry only.
2710 @end defvar
2712 @defvar abs_builddir
2713 @ovindex abs_builddir
2714 Absolute name of @code{builddir}.
2715 @end defvar
2717 @defvar top_builddir
2718 @ovindex top_builddir
2719 The relative name of the top level of the current build tree.  In the
2720 top-level directory, this is the same as @code{builddir}.
2721 @end defvar
2723 @defvar top_build_prefix
2724 @ovindex top_build_prefix
2725 The relative name of the top level of the current build tree with final
2726 slash if nonempty.  This is the same as @code{top_builddir}, except that
2727 it contains zero or more runs of @code{../}, so it should not be
2728 appended with a slash for concatenation.  This helps for @command{make}
2729 implementations that otherwise do not treat @file{./file} and @file{file}
2730 as equal in the top-level build directory.
2731 @end defvar
2733 @defvar abs_top_builddir
2734 @ovindex abs_top_builddir
2735 Absolute name of @code{top_builddir}.
2736 @end defvar
2738 @defvar srcdir
2739 @ovindex srcdir
2740 The name of the directory that contains the source code for
2741 that makefile.
2742 @end defvar
2744 @defvar abs_srcdir
2745 @ovindex abs_srcdir
2746 Absolute name of @code{srcdir}.
2747 @end defvar
2749 @defvar top_srcdir
2750 @ovindex top_srcdir
2751 The name of the top-level source code directory for the
2752 package.  In the top-level directory, this is the same as @code{srcdir}.
2753 @end defvar
2755 @defvar abs_top_srcdir
2756 @ovindex abs_top_srcdir
2757 Absolute name of @code{top_srcdir}.
2758 @end defvar
2760 @node Installation Directory Variables
2761 @subsection Installation Directory Variables
2762 @cindex Installation directories
2763 @cindex Directories, installation
2765 The following variables specify the directories for
2766 package installation, see @ref{Directory Variables, , Variables for
2767 Installation Directories, standards, The GNU Coding
2768 Standards}, for more information.  Each variable corresponds to an
2769 argument of @command{configure}; trailing slashes are stripped so that
2770 expressions such as @samp{$@{prefix@}/lib} expand with only one slash
2771 between directory names.  See the end of this section for
2772 details on when and how to use these variables.
2774 @defvar bindir
2775 @ovindex bindir
2776 The directory for installing executables that users run.
2777 @end defvar
2779 @defvar datadir
2780 @ovindex datadir
2781 The directory for installing idiosyncratic read-only
2782 architecture-independent data.
2783 @end defvar
2785 @defvar datarootdir
2786 @ovindex datarootdir
2787 The root of the directory tree for read-only architecture-independent
2788 data files.
2789 @end defvar
2791 @defvar docdir
2792 @ovindex docdir
2793 The directory for installing documentation files (other than Info and
2794 man).
2795 @end defvar
2797 @defvar dvidir
2798 @ovindex dvidir
2799 The directory for installing documentation files in DVI format.
2800 @end defvar
2802 @defvar exec_prefix
2803 @ovindex exec_prefix
2804 The installation prefix for architecture-dependent files.  By default
2805 it's the same as @code{prefix}.  You should avoid installing anything
2806 directly to @code{exec_prefix}.  However, the default value for
2807 directories containing architecture-dependent files should be relative
2808 to @code{exec_prefix}.
2809 @end defvar
2811 @defvar htmldir
2812 @ovindex htmldir
2813 The directory for installing HTML documentation.
2814 @end defvar
2816 @defvar includedir
2817 @ovindex includedir
2818 The directory for installing C header files.
2819 @end defvar
2821 @defvar infodir
2822 @ovindex infodir
2823 The directory for installing documentation in Info format.
2824 @end defvar
2826 @defvar libdir
2827 @ovindex libdir
2828 The directory for installing object code libraries.
2829 @end defvar
2831 @defvar libexecdir
2832 @ovindex libexecdir
2833 The directory for installing executables that other programs run.
2834 @end defvar
2836 @defvar localedir
2837 @ovindex localedir
2838 The directory for installing locale-dependent but
2839 architecture-independent data, such as message catalogs.  This directory
2840 usually has a subdirectory per locale.
2841 @end defvar
2843 @defvar localstatedir
2844 @ovindex localstatedir
2845 The directory for installing modifiable single-machine data.  Content in
2846 this directory typically survives a reboot.
2847 @end defvar
2849 @defvar runstatedir
2850 @ovindex runstatedir
2851 The directory for installing temporary modifiable single-machine data.
2852 Content in this directory survives as long as the process is running
2853 (such as pid files), as contrasted with @file{/tmp} that may be
2854 periodically cleaned.  Conversely, this directory is typically cleaned
2855 on a reboot.  By default, this is a subdirectory of
2856 @code{localstatedir}.
2857 @end defvar
2859 @defvar mandir
2860 @ovindex mandir
2861 The top-level directory for installing documentation in man format.
2862 @end defvar
2864 @defvar oldincludedir
2865 @ovindex oldincludedir
2866 The directory for installing C header files for non-GCC compilers.
2867 @end defvar
2869 @defvar pdfdir
2870 @ovindex pdfdir
2871 The directory for installing PDF documentation.
2872 @end defvar
2874 @defvar prefix
2875 @ovindex prefix
2876 The common installation prefix for all files.  If @code{exec_prefix}
2877 is defined to a different value, @code{prefix} is used only for
2878 architecture-independent files.
2879 @end defvar
2881 @defvar psdir
2882 @ovindex psdir
2883 The directory for installing PostScript documentation.
2884 @end defvar
2886 @defvar sbindir
2887 @ovindex sbindir
2888 The directory for installing executables that system
2889 administrators run.
2890 @end defvar
2892 @defvar sharedstatedir
2893 @ovindex sharedstatedir
2894 The directory for installing modifiable architecture-independent data.
2895 @end defvar
2897 @defvar sysconfdir
2898 @ovindex sysconfdir
2899 The directory for installing read-only single-machine data.
2900 @end defvar
2903 Most of these variables have values that rely on @code{prefix} or
2904 @code{exec_prefix}.  It is deliberate that the directory output
2905 variables keep them unexpanded: typically @samp{@@datarootdir@@} is
2906 replaced by @samp{$@{prefix@}/share}, not @samp{/usr/local/share}, and
2907 @samp{@@datadir@@} is replaced by @samp{$@{datarootdir@}}.
2909 This behavior is mandated by the GNU Coding Standards, so that when
2910 the user runs:
2912 @table @samp
2913 @item make
2914 she can still specify a different prefix from the one specified to
2915 @command{configure}, in which case, if needed, the package should hard
2916 code dependencies corresponding to the make-specified prefix.
2918 @item make install
2919 she can specify a different installation location, in which case the
2920 package @emph{must} still depend on the location which was compiled in
2921 (i.e., never recompile when @samp{make install} is run).  This is an
2922 extremely important feature, as many people may decide to install all
2923 the files of a package grouped together, and then install links from
2924 the final locations to there.
2925 @end table
2927 In order to support these features, it is essential that
2928 @code{datarootdir} remains defined as @samp{$@{prefix@}/share},
2929 so that its value can be expanded based
2930 on the current value of @code{prefix}.
2932 A corollary is that you should not use these variables except in
2933 makefiles.  For instance, instead of trying to evaluate @code{datadir}
2934 in @file{configure} and hard-coding it in makefiles using
2935 e.g., @samp{AC_DEFINE_UNQUOTED([DATADIR], ["$datadir"], [Data directory.])},
2936 you should add
2937 @option{-DDATADIR='$(datadir)'} to your makefile's definition of
2938 @code{CPPFLAGS} (@code{AM_CPPFLAGS} if you are also using Automake).
2940 Similarly, you should not rely on @code{AC_CONFIG_FILES} to replace
2941 @code{bindir} and friends in your shell scripts and other files; instead,
2942 let @command{make} manage their replacement.  For instance Autoconf
2943 ships templates of its shell scripts ending with @samp{.in}, and uses a
2944 makefile snippet similar to the following to build scripts like
2945 @command{autoheader} and @command{autom4te}:
2947 @example
2948 @group
2949 edit = sed \
2950         -e 's|@@bindir[@@]|$(bindir)|g' \
2951         -e 's|@@pkgdatadir[@@]|$(pkgdatadir)|g' \
2952         -e 's|@@prefix[@@]|$(prefix)|g'
2953 @end group
2955 @group
2956 autoheader autom4te: Makefile
2957         rm -f $@@ $@@.tmp
2958         srcdir=''; \
2959           test -f ./$@@.in || srcdir=$(srcdir)/; \
2960           $(edit) $$@{srcdir@}$@@.in >$@@.tmp
2961 @c $$ restore font-lock
2962         chmod +x $@@.tmp
2963         chmod a-w $@@.tmp
2964         mv $@@.tmp $@@
2965 @end group
2967 @group
2968 autoheader: $(srcdir)/autoheader.in
2969 autom4te: $(srcdir)/autom4te.in
2970 @end group
2971 @end example
2973 Some details are noteworthy:
2975 @table @asis
2976 @item @samp{@@bindir[@@]}
2977 The brackets prevent @command{configure} from replacing
2978 @samp{@@bindir@@} in the Sed expression itself.
2979 Brackets are preferable to a backslash here, since
2980 Posix says @samp{\@@} is not portable.
2982 @item @samp{$(bindir)}
2983 Don't use @samp{@@bindir@@}!  Use the matching makefile variable
2984 instead.
2986 @item @samp{$(pkgdatadir)}
2987 The example takes advantage of the variable @samp{$(pkgdatadir)}
2988 provided by Automake; it is equivalent to @samp{$(datadir)/$(PACKAGE)}.
2990 @item @samp{/}
2991 Don't use @samp{/} in the Sed expressions that replace file names since
2992 most likely the
2993 variables you use, such as @samp{$(bindir)}, contain @samp{/}.
2994 Use a shell metacharacter instead, such as @samp{|}.
2996 @item special characters
2997 File names, file name components, and the value of @code{VPATH} should
2998 not contain shell metacharacters or white
2999 space.  @xref{Special Chars in Variables}.
3001 @item dependency on @file{Makefile}
3002 Since @code{edit} uses values that depend on the configuration specific
3003 values (@code{prefix}, etc.)@: and not only on @code{VERSION} and so forth,
3004 the output depends on @file{Makefile}, not @file{configure.ac}.
3006 @item @samp{$@@}
3007 The main rule is generic, and uses @samp{$@@} extensively to
3008 avoid the need for multiple copies of the rule.
3010 @item Separated dependencies and single suffix rules
3011 You can't use them!  The above snippet cannot be (portably) rewritten
3014 @example
3015 autoconf autoheader: Makefile
3016 @group
3017 .in:
3018         rm -f $@@ $@@.tmp
3019         $(edit) $< >$@@.tmp
3020         chmod +x $@@.tmp
3021         mv $@@.tmp $@@
3022 @end group
3023 @end example
3025 @xref{Single Suffix Rules}, for details.
3027 @item @samp{$(srcdir)}
3028 Be sure to specify the name of the source directory,
3029 otherwise the package won't support separated builds.
3030 @end table
3032 For the more specific installation of Erlang libraries, the following variables
3033 are defined:
3035 @defvar ERLANG_INSTALL_LIB_DIR
3036 @ovindex ERLANG_INSTALL_LIB_DIR
3037 @acindex{ERLANG_SUBST_INSTALL_LIB_DIR}
3038 The common parent directory of Erlang library installation directories.
3039 This variable is set by calling the @code{AC_ERLANG_SUBST_INSTALL_LIB_DIR}
3040 macro in @file{configure.ac}.
3041 @end defvar
3043 @defvar ERLANG_INSTALL_LIB_DIR_@var{library}
3044 @ovindex ERLANG_INSTALL_LIB_DIR_@var{library}
3045 @acindex{ERLANG_SUBST_INSTALL_LIB_SUBDIR}
3046 The installation directory for Erlang library @var{library}.
3047 This variable is set by using the
3048 @samp{AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR}
3049 macro in @file{configure.ac}.
3050 @end defvar
3052 @xref{Erlang Libraries}, for details.
3055 @node Changed Directory Variables
3056 @subsection Changed Directory Variables
3057 @cindex @file{datarootdir}
3059 In Autoconf 2.60, the set of directory variables has changed, and the
3060 defaults of some variables have been adjusted
3061 (@pxref{Installation Directory Variables}) to changes in the
3062 GNU Coding Standards.  Notably, @file{datadir}, @file{infodir}, and
3063 @file{mandir} are now expressed in terms of @file{datarootdir}.  If you are
3064 upgrading from an earlier Autoconf version, you may need to adjust your files
3065 to ensure that the directory variables are substituted correctly
3066 (@pxref{Defining Directories}), and that a definition of @file{datarootdir} is
3067 in place.  For example, in a @file{Makefile.in}, adding
3069 @example
3070 datarootdir = @@datarootdir@@
3071 @end example
3073 @noindent
3074 is usually sufficient.  If you use Automake to create @file{Makefile.in},
3075 it will add this for you.
3077 To help with the transition, Autoconf warns about files that seem to use
3078 @code{datarootdir} without defining it.  In some cases, it then expands
3079 the value of @code{$datarootdir} in substitutions of the directory
3080 variables.  The following example shows such a warning:
3082 @example
3083 $ @kbd{cat configure.ac}
3084 AC_INIT
3085 AC_CONFIG_FILES([Makefile])
3086 AC_OUTPUT
3087 $ @kbd{cat Makefile.in}
3088 prefix = @@prefix@@
3089 datadir = @@datadir@@
3090 $ @kbd{autoconf}
3091 $ @kbd{configure}
3092 configure: creating ./config.status
3093 config.status: creating Makefile
3094 config.status: WARNING:
3095                Makefile.in seems to ignore the --datarootdir setting
3096 $ @kbd{cat Makefile}
3097 prefix = /usr/local
3098 datadir = $@{prefix@}/share
3099 @end example
3101 Usually one can easily change the file to accommodate both older and newer
3102 Autoconf releases:
3104 @example
3105 $ @kbd{cat Makefile.in}
3106 prefix = @@prefix@@
3107 datarootdir = @@datarootdir@@
3108 datadir = @@datadir@@
3109 $ @kbd{configure}
3110 configure: creating ./config.status
3111 config.status: creating Makefile
3112 $ @kbd{cat Makefile}
3113 prefix = /usr/local
3114 datarootdir = $@{prefix@}/share
3115 datadir = $@{datarootdir@}
3116 @end example
3118 @acindex{DATAROOTDIR_CHECKED}
3119 In some cases, however, the checks may not be able to detect that a suitable
3120 initialization of @code{datarootdir} is in place, or they may fail to detect
3121 that such an initialization is necessary in the output file.  If, after
3122 auditing your package, there are still spurious @file{configure} warnings about
3123 @code{datarootdir}, you may add the line
3125 @example
3126 AC_DEFUN([AC_DATAROOTDIR_CHECKED])
3127 @end example
3129 @noindent
3130 to your @file{configure.ac} to disable the warnings.  This is an exception
3131 to the usual rule that you should not define a macro whose name begins with
3132 @code{AC_} (@pxref{Macro Names}).
3136 @node Build Directories
3137 @subsection Build Directories
3138 @cindex Build directories
3139 @cindex Directories, build
3141 You can support compiling a software package for several architectures
3142 simultaneously from the same copy of the source code.  The object files
3143 for each architecture are kept in their own directory.
3145 To support doing this, @command{make} uses the @code{VPATH} variable to
3146 find the files that are in the source directory.  GNU Make
3147 can do this.  Most other recent @command{make} programs can do this as
3148 well, though they may have difficulties and it is often simpler to
3149 recommend GNU @command{make} (@pxref{VPATH and Make}).  Older
3150 @command{make} programs do not support @code{VPATH}; when using them, the
3151 source code must be in the same directory as the object files.
3153 If you are using GNU Automake, the remaining details in this
3154 section are already covered for you, based on the contents of your
3155 @file{Makefile.am}.  But if you are using Autoconf in isolation, then
3156 supporting @code{VPATH} requires the following in your
3157 @file{Makefile.in}:
3159 @example
3160 srcdir = @@srcdir@@
3161 VPATH = @@srcdir@@
3162 @end example
3164 Do not set @code{VPATH} to the value of another variable (@pxref{Variables
3165 listed in VPATH}.
3167 @command{configure} substitutes the correct value for @code{srcdir} when
3168 it produces @file{Makefile}.
3170 Do not use the @command{make} variable @code{$<}, which expands to the
3171 file name of the file in the source directory (found with @code{VPATH}),
3172 except in implicit rules.  (An implicit rule is one such as @samp{.c.o},
3173 which tells how to create a @file{.o} file from a @file{.c} file.)  Some
3174 versions of @command{make} do not set @code{$<} in explicit rules; they
3175 expand it to an empty value.
3177 Instead, Make command lines should always refer to source
3178 files by prefixing them with @samp{$(srcdir)/}.  It's safer
3179 to quote the source directory name, in case it contains characters that
3180 are special to the shell.  Because @samp{$(srcdir)} is expanded by Make,
3181 single-quoting works and is safer than double-quoting.  For example:
3183 @example
3184 time.info: time.texinfo
3185         $(MAKEINFO) '$(srcdir)/time.texinfo'
3186 @end example
3188 @node Automatic Remaking
3189 @subsection Automatic Remaking
3190 @cindex Automatic remaking
3191 @cindex Remaking automatically
3193 You can put rules like the following in the top-level @file{Makefile.in}
3194 for a package to automatically update the configuration information when
3195 you change the configuration files.  This example includes all of the
3196 optional files, such as @file{aclocal.m4} and those related to
3197 configuration header files.  Omit from the @file{Makefile.in} rules for
3198 any of these files that your package does not use.
3200 The @samp{$(srcdir)/} prefix is included because of limitations in the
3201 @code{VPATH} mechanism.
3203 The @file{stamp-} files are necessary because the timestamps of
3204 @file{config.h.in} and @file{config.h} are not changed if remaking
3205 them does not change their contents.  This feature avoids unnecessary
3206 recompilation.  You should include the file @file{stamp-h.in} in your
3207 package's distribution, so that @command{make} considers
3208 @file{config.h.in} up to date.  Don't use @command{touch}
3209 (@pxref{touch, , Limitations of Usual Tools}); instead, use
3210 @command{echo} (using
3211 @command{date} would cause needless differences, hence CVS
3212 conflicts, etc.).
3214 @example
3215 @group
3216 $(srcdir)/configure: configure.ac aclocal.m4
3217         cd '$(srcdir)' && autoconf
3219 # autoheader might not change config.h.in, so touch a stamp file.
3220 $(srcdir)/config.h.in: stamp-h.in ;
3221 $(srcdir)/stamp-h.in: configure.ac aclocal.m4
3222         cd '$(srcdir)' && autoheader
3223         echo timestamp > '$(srcdir)/stamp-h.in'
3225 config.h: stamp-h ;
3226 stamp-h: config.h.in config.status
3227         ./config.status
3229 Makefile: Makefile.in config.status
3230         ./config.status
3232 config.status: configure
3233         ./config.status --recheck
3234 @end group
3235 @end example
3237 @noindent
3238 (Be careful if you copy these lines directly into your makefile, as you
3239 need to convert the indented lines to start with the tab character.)
3241 In addition, you should use
3243 @example
3244 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
3245 @end example
3247 @noindent
3248 so @file{config.status} ensures that @file{config.h} is considered up to
3249 date.  @xref{Output}, for more information about @code{AC_OUTPUT}.
3251 @xref{config.status Invocation}, for more examples of handling
3252 configuration-related dependencies.
3254 @node Configuration Headers
3255 @section Configuration Header Files
3256 @cindex Configuration Header
3257 @cindex @file{config.h}
3259 When a package contains more than a few tests that define C preprocessor
3260 symbols, the command lines to pass @option{-D} options to the compiler
3261 can get quite long.  This causes two problems.  One is that the
3262 @command{make} output is hard to visually scan for errors.  More
3263 seriously, the command lines can exceed the length limits of some
3264 operating systems.  As an alternative to passing @option{-D} options to
3265 the compiler, @command{configure} scripts can create a C header file
3266 containing @samp{#define} directives.  The @code{AC_CONFIG_HEADERS}
3267 macro selects this kind of output.  Though it can be called anywhere
3268 between @code{AC_INIT} and @code{AC_OUTPUT}, it is customary to call
3269 it right after @code{AC_INIT}.
3271 The package should @samp{#include} the configuration header file before
3272 any other header files, to prevent inconsistencies in declarations (for
3273 example, if it redefines @code{const}, or if it defines a macro like
3274 @code{_FILE_OFFSET_BITS} that affects the behavior of system
3275 headers). Note that it is okay to only include @file{config.h} from
3276 @file{.c} files; the project's @file{.h} files can rely on
3277 @file{config.h} already being included first by the corresponding
3278 @file{.c} file.
3280 To provide for VPATH builds, remember to pass the C compiler a @option{-I.}
3281 option (or @option{-I..}; whichever directory contains @file{config.h}).
3282 Even if you use @samp{#include "config.h"}, the preprocessor searches only
3283 the directory of the currently read file, i.e., the source directory, not
3284 the build directory.
3286 With the appropriate @option{-I} option, you can use
3287 @samp{#include <config.h>}.  Actually, it's a good habit to use it,
3288 because in the rare case when the source directory contains another
3289 @file{config.h}, the build directory should be searched first.
3292 @defmac AC_CONFIG_HEADERS (@var{header} @dots{}, @ovar{cmds}, @ovar{init-cmds})
3293 @acindex{CONFIG_HEADERS}
3294 @cvindex HAVE_CONFIG_H
3295 This macro is one of the instantiating macros; see @ref{Configuration
3296 Actions}.  Make @code{AC_OUTPUT} create the file(s) in the
3297 blank-or-newline-separated list @var{header} containing C preprocessor
3298 @code{#define} statements, and replace @samp{@@DEFS@@} in generated
3299 files with @option{-DHAVE_CONFIG_H} instead of the value of @code{DEFS}.
3300 The usual name for @var{header} is @file{config.h}.
3302 If @var{header} already exists and its contents are identical to what
3303 @code{AC_OUTPUT} would put in it, it is left alone.  Doing this allows
3304 making some changes in the configuration without needlessly causing
3305 object files that depend on the header file to be recompiled.
3307 Usually the input file is named @file{@var{header}.in}; however, you can
3308 override the input file name by appending to @var{header} a
3309 colon-separated list of input files.  For example, you might need to make
3310 the input file name acceptable to DOS variants:
3312 @example
3313 AC_CONFIG_HEADERS([config.h:config.hin])
3314 @end example
3316 @end defmac
3318 @defmac AH_HEADER
3319 @ahindex{HEADER}
3320 This macro is defined as the name of the first declared config header
3321 and undefined if no config headers have been declared up to this point.
3322 A third-party macro may, for example, require use of a config header
3323 without invoking AC_CONFIG_HEADERS twice, like this:
3325 @example
3326 AC_CONFIG_COMMANDS_PRE(
3327         [m4_ifndef([AH_HEADER], [AC_CONFIG_HEADERS([config.h])])])
3328 @end example
3330 @end defmac
3332 @xref{Configuration Actions}, for more details on @var{header}.
3334 @menu
3335 * Header Templates::            Input for the configuration headers
3336 * autoheader Invocation::       How to create configuration templates
3337 * Autoheader Macros::           How to specify CPP templates
3338 @end menu
3340 @node Header Templates
3341 @subsection Configuration Header Templates
3342 @cindex Configuration Header Template
3343 @cindex Header templates
3344 @cindex @file{config.h.in}
3346 Your distribution should contain a template file that looks as you want
3347 the final header file to look, including comments, with @code{#undef}
3348 statements which are used as hooks.  For example, suppose your
3349 @file{configure.ac} makes these calls:
3351 @example
3352 AC_CONFIG_HEADERS([conf.h])
3353 AC_CHECK_HEADERS([unistd.h])
3354 @end example
3356 @noindent
3357 Then you could have code like the following in @file{conf.h.in}.
3358 The @file{conf.h} created by @command{configure} defines @samp{HAVE_UNISTD_H}
3359 to 1, if and only if the system has @file{unistd.h}.
3361 @example
3362 @group
3363 /* Define as 1 if you have unistd.h.  */
3364 #undef HAVE_UNISTD_H
3365 @end group
3366 @end example
3368 The format of the template file is stricter than what the C preprocessor
3369 is required to accept.  A directive line should contain only whitespace,
3370 @samp{#undef}, and @samp{HAVE_UNISTD_H}.  The use of @samp{#define}
3371 instead of @samp{#undef}, or of comments on the same line as
3372 @samp{#undef}, is strongly discouraged.  Each hook should only be listed
3373 once.  Other preprocessor lines, such as @samp{#ifdef} or
3374 @samp{#include}, are copied verbatim from the template into the
3375 generated header.
3377 Since it is a tedious task to keep a template header up to date, you may
3378 use @command{autoheader} to generate it, see @ref{autoheader Invocation}.
3380 During the instantiation of the header, each @samp{#undef} line in the
3381 template file for each symbol defined by @samp{AC_DEFINE} is changed to an
3382 appropriate @samp{#define}. If the corresponding @samp{AC_DEFINE} has not
3383 been executed during the @command{configure} run, the @samp{#undef} line is
3384 commented out.  (This is important, e.g., for @samp{_POSIX_SOURCE}:
3385 on many systems, it can be implicitly defined by the compiler, and
3386 undefining it in the header would then break compilation of subsequent
3387 headers.)
3389 Currently, @emph{all} remaining @samp{#undef} lines in the header
3390 template are commented out, whether or not there was a corresponding
3391 @samp{AC_DEFINE} for the macro name; but this behavior is not guaranteed
3392 for future releases of Autoconf.
3394 Generally speaking, since you should not use @samp{#define}, and you
3395 cannot guarantee whether a @samp{#undef} directive in the header
3396 template will be converted to a @samp{#define} or commented out in the
3397 generated header file, the template file cannot be used for conditional
3398 definition effects.  Consequently, if you need to use the construct
3400 @example
3401 @group
3402 #ifdef THIS
3403 # define THAT
3404 #endif
3405 @end group
3406 @end example
3408 @noindent
3409 you must place it outside of the template.
3410 If you absolutely need to hook it to the config header itself, please put
3411 the directives to a separate file, and @samp{#include} that file from the
3412 config header template.  If you are using @command{autoheader}, you would
3413 probably use @samp{AH_BOTTOM} to append the @samp{#include} directive.
3416 @node autoheader Invocation
3417 @subsection Using @command{autoheader} to Create @file{config.h.in}
3418 @cindex @command{autoheader}
3420 The @command{autoheader} program can create a template file of C
3421 @samp{#define} statements for @command{configure} to use.
3422 It searches for the first invocation of @code{AC_CONFIG_HEADERS} in
3423 @file{configure} sources to determine the name of the template.
3424 (If the first call of @code{AC_CONFIG_HEADERS} specifies more than one
3425 input file name, @command{autoheader} uses the first one.)
3427 It is recommended that only one input file is used.  If you want to append
3428 a boilerplate code, it is preferable to use
3429 @samp{AH_BOTTOM([#include <conf_post.h>])}.
3430 File @file{conf_post.h} is not processed during the configuration then,
3431 which make things clearer.  Analogically, @code{AH_TOP} can be used to
3432 prepend a boilerplate code.
3434 In order to do its job, @command{autoheader} needs you to document all
3435 of the symbols that you might use.  Typically this is done via an
3436 @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED} call whose first argument
3437 is a literal symbol and whose third argument describes the symbol
3438 (@pxref{Defining Symbols}).  Alternatively, you can use
3439 @code{AH_TEMPLATE} (@pxref{Autoheader Macros}), or you can supply a
3440 suitable input file for a subsequent configuration header file.
3441 Symbols defined by Autoconf's builtin tests are already documented properly;
3442 you need to document only those that you
3443 define yourself.
3445 You might wonder why @command{autoheader} is needed: after all, why
3446 would @command{configure} need to ``patch'' a @file{config.h.in} to
3447 produce a @file{config.h} instead of just creating @file{config.h} from
3448 scratch?  Well, when everything rocks, the answer is just that we are
3449 wasting our time maintaining @command{autoheader}: generating
3450 @file{config.h} directly is all that is needed.  When things go wrong,
3451 however, you'll be thankful for the existence of @command{autoheader}.
3453 The fact that the symbols are documented is important in order to
3454 @emph{check} that @file{config.h} makes sense.  The fact that there is a
3455 well-defined list of symbols that should be defined (or not) is
3456 also important for people who are porting packages to environments where
3457 @command{configure} cannot be run: they just have to @emph{fill in the
3458 blanks}.
3460 But let's come back to the point: the invocation of @command{autoheader}@dots{}
3462 If you give @command{autoheader} an argument, it uses that file instead
3463 of @file{configure.ac} and writes the header file to the standard output
3464 instead of to @file{config.h.in}.  If you give @command{autoheader} an
3465 argument of @option{-}, it reads the standard input instead of
3466 @file{configure.ac} and writes the header file to the standard output.
3468 @command{autoheader} accepts the following options:
3470 @table @option
3471 @item --help
3472 @itemx -h
3473 Print a summary of the command line options and exit.
3475 @item --version
3476 @itemx -V
3477 Print the version number of Autoconf and exit.
3479 @item --verbose
3480 @itemx -v
3481 Report processing steps.
3483 @item --debug
3484 @itemx -d
3485 Don't remove the temporary files.
3487 @item --force
3488 @itemx -f
3489 Remake the template file even if newer than its input files.
3491 @item --include=@var{dir}
3492 @itemx -I @var{dir}
3493 Append @var{dir} to the include path.  Multiple invocations accumulate.
3495 @item --prepend-include=@var{dir}
3496 @itemx -B @var{dir}
3497 Prepend @var{dir} to the include path.  Multiple invocations accumulate.
3499 @item --warnings=@var{category}
3500 @itemx -W @var{category}
3501 @evindex WARNINGS
3502 Report the warnings related to @var{category} (which can actually be a
3503 comma separated list).  Current categories include:
3505 @table @samp
3506 @item obsolete
3507 report the uses of obsolete constructs
3509 @item all
3510 report all the warnings
3512 @item none
3513 report none
3515 @item error
3516 treats warnings as errors
3518 @item no-@var{category}
3519 disable warnings falling into @var{category}
3520 @end table
3522 @end table
3526 @node Autoheader Macros
3527 @subsection Autoheader Macros
3528 @cindex Autoheader macros
3530 @command{autoheader} scans @file{configure.ac} and figures out which C
3531 preprocessor symbols it might define.  It knows how to generate
3532 templates for symbols defined by @code{AC_CHECK_HEADERS},
3533 @code{AC_CHECK_FUNCS} etc., but if you @code{AC_DEFINE} any additional
3534 symbol, you must define a template for it.  If there are missing
3535 templates, @command{autoheader} fails with an error message.
3537 The template for a @var{symbol} is created
3538 by @command{autoheader} from
3539 the @var{description} argument to an @code{AC_DEFINE};
3540 see @ref{Defining Symbols}.
3542 For special needs, you can use the following macros.
3545 @defmac AH_TEMPLATE (@var{key}, @var{description})
3546 @ahindex{TEMPLATE}
3547 Tell @command{autoheader} to generate a template for @var{key}.  This macro
3548 generates standard templates just like @code{AC_DEFINE} when a
3549 @var{description} is given.
3551 For example:
3553 @example
3554 AH_TEMPLATE([CRAY_STACKSEG_END],
3555             [Define to one of _getb67, GETB67, getb67
3556              for Cray-2 and Cray-YMP systems.  This
3557              function is required for alloca.c support
3558              on those systems.])
3559 @end example
3561 @noindent
3562 generates the following template, with the description properly
3563 justified.
3565 @example
3566 /* Define to one of _getb67, GETB67, getb67 for Cray-2 and
3567    Cray-YMP systems.  This function is required for alloca.c
3568    support on those systems.  */
3569 #undef CRAY_STACKSEG_END
3570 @end example
3571 @end defmac
3574 @defmac AH_VERBATIM (@var{key}, @var{template})
3575 @ahindex{VERBATIM}
3576 Tell @command{autoheader} to include the @var{template} as-is in the header
3577 template file.  This @var{template} is associated with the @var{key},
3578 which is used to sort all the different templates and guarantee their
3579 uniqueness.  It should be a symbol that can be defined via @code{AC_DEFINE}.
3580 @end defmac
3583 @defmac AH_TOP (@var{text})
3584 @ahindex{TOP}
3585 Include @var{text} at the top of the header template file.
3586 @end defmac
3589 @defmac AH_BOTTOM (@var{text})
3590 @ahindex{BOTTOM}
3591 Include @var{text} at the bottom of the header template file.
3592 @end defmac
3595 Please note that @var{text} gets included ``verbatim'' to the template file,
3596 not to the resulting config header, so it can easily get mangled when the
3597 template is processed.  There is rarely a need for something other than
3599 @example
3600 AH_BOTTOM([#include <custom.h>])
3601 @end example
3605 @node Configuration Commands
3606 @section Running Arbitrary Configuration Commands
3607 @cindex Configuration commands
3608 @cindex Commands for configuration
3610 You can execute arbitrary commands before, during, and after
3611 @file{config.status} is run.  The three following macros accumulate the
3612 commands to run when they are called multiple times.
3613 @code{AC_CONFIG_COMMANDS} replaces the obsolete macro
3614 @code{AC_OUTPUT_COMMANDS}; see @ref{Obsolete Macros}, for details.
3616 @anchor{AC_CONFIG_COMMANDS}
3617 @defmac AC_CONFIG_COMMANDS (@var{tag}@dots{}, @ovar{cmds}, @ovar{init-cmds})
3618 @acindex{CONFIG_COMMANDS}
3619 Specify additional shell commands to run at the end of
3620 @file{config.status}, and shell commands to initialize any variables
3621 from @command{configure}.  Associate the commands with @var{tag}.
3622 Since typically the @var{cmds} create a file, @var{tag} should
3623 naturally be the name of that file.  If needed, the directory hosting
3624 @var{tag} is created.  This macro is one of the instantiating macros;
3625 see @ref{Configuration Actions}.
3627 Here is an unrealistic example:
3628 @example
3629 fubar=42
3630 AC_CONFIG_COMMANDS([fubar],
3631                    [echo this is extra $fubar, and so on.],
3632                    [fubar=$fubar])
3633 @end example
3635 Here is a better one:
3636 @example
3637 AC_CONFIG_COMMANDS([timestamp], [date >timestamp])
3638 @end example
3639 @end defmac
3641 The following two macros look similar, but in fact they are not of the same
3642 breed: they are executed directly by @file{configure}, so you cannot use
3643 @file{config.status} to rerun them.
3645 @c Yet it is good to leave them here.  The user sees them together and
3646 @c decides which best fits their needs.
3648 @defmac AC_CONFIG_COMMANDS_PRE (@var{cmds})
3649 @acindex{CONFIG_COMMANDS_PRE}
3650 Execute the @var{cmds} right before creating @file{config.status}.
3652 This macro presents the last opportunity to call @code{AC_SUBST},
3653 @code{AC_DEFINE}, or @code{AC_CONFIG_@var{ITEMS}} macros.
3654 @end defmac
3656 @defmac AC_CONFIG_COMMANDS_POST (@var{cmds})
3657 @acindex{CONFIG_COMMANDS_POST}
3658 Execute the @var{cmds} right after creating @file{config.status}.
3659 @end defmac
3664 @node Configuration Links
3665 @section Creating Configuration Links
3666 @cindex Configuration links
3667 @cindex Links for configuration
3669 You may find it convenient to create links whose destinations depend upon
3670 results of tests.  One can use @code{AC_CONFIG_COMMANDS} but the
3671 creation of relative symbolic links can be delicate when the package is
3672 built in a directory different from the source directory.
3674 @anchor{AC_CONFIG_LINKS}
3675 @defmac AC_CONFIG_LINKS (@var{dest}:@var{source}@dots{}, @ovar{cmds}, @
3676   @ovar{init-cmds})
3677 @acindex{CONFIG_LINKS}
3678 @cindex Links
3679 Make @code{AC_OUTPUT} link each of the existing files @var{source} to
3680 the corresponding link name @var{dest}.  Makes a symbolic link if
3681 possible, otherwise a hard link if possible, otherwise a copy.  The
3682 @var{dest} and @var{source} names should be relative to the top level
3683 source or build directory.  This macro is one of the instantiating
3684 macros; see @ref{Configuration Actions}.
3686 For example, this call:
3688 @example
3689 AC_CONFIG_LINKS([host.h:config/$machine.h
3690                 object.h:config/$obj_format.h])
3691 @end example
3693 @noindent
3694 creates in the current directory @file{host.h} as a link to
3695 @file{@var{srcdir}/config/$machine.h}, and @file{object.h} as a
3696 link to @file{@var{srcdir}/config/$obj_format.h}.
3698 The tempting value @samp{.} for @var{dest} is invalid: it makes it
3699 impossible for @samp{config.status} to guess the links to establish.
3701 One can then run:
3702 @example
3703 ./config.status host.h object.h
3704 @end example
3705 @noindent
3706 to create the links.
3707 @end defmac
3711 @node Subdirectories
3712 @section Configuring Other Packages in Subdirectories
3713 @cindex Configure subdirectories
3714 @cindex Subdirectory configure
3716 In most situations, calling @code{AC_OUTPUT} is sufficient to produce
3717 makefiles in subdirectories.  However, @command{configure} scripts
3718 that control more than one independent package can use
3719 @code{AC_CONFIG_SUBDIRS} to run @command{configure} scripts for other
3720 packages in subdirectories.
3722 @defmac AC_CONFIG_SUBDIRS (@var{dir} @dots{})
3723 @acindex{CONFIG_SUBDIRS}
3724 @ovindex subdirs
3725 Make @code{AC_OUTPUT} run @command{configure} in each subdirectory
3726 @var{dir} in the given blank-or-newline-separated list.  Each @var{dir} should
3727 be a literal, i.e., please do not use:
3729 @example
3730 @c If you change this example, adjust tests/torture.at:Non-literal AC_CONFIG_SUBDIRS.
3731 if test "x$package_foo_enabled" = xyes; then
3732   my_subdirs="$my_subdirs foo"
3734 AC_CONFIG_SUBDIRS([$my_subdirs])
3735 @end example
3737 @noindent
3738 because this prevents @samp{./configure --help=recursive} from
3739 displaying the options of the package @code{foo}.  Instead, you should
3740 write:
3742 @example
3743 if test "x$package_foo_enabled" = xyes; then
3744   AC_CONFIG_SUBDIRS([foo])
3746 @end example
3748 If a given @var{dir} is not found at @command{configure} run time, a
3749 warning is reported; if the subdirectory is optional, write:
3751 @example
3752 if test -d "$srcdir/foo"; then
3753   AC_CONFIG_SUBDIRS([foo])
3755 @end example
3757 @c NB: Yes, below we mean configure.in, not configure.ac.
3758 If a given @var{dir} contains @command{configure.gnu}, it is run instead
3759 of @command{configure}.  This is for packages that might use a
3760 non-Autoconf script @command{Configure}, which can't be called through a
3761 wrapper @command{configure} since it would be the same file on
3762 case-insensitive file systems.  Likewise, if a @var{dir} contains
3763 @file{configure.in} but no @command{configure}, the Cygnus
3764 @command{configure} script found by @code{AC_CONFIG_AUX_DIR} is used.
3766 The subdirectory @command{configure} scripts are given the same command
3767 line options that were given to this @command{configure} script, with minor
3768 changes if needed, which include:
3770 @itemize @minus
3771 @item
3772 adjusting a relative name for the cache file;
3774 @item
3775 adjusting a relative name for the source directory;
3777 @item
3778 propagating the current value of @code{$prefix}, including if it was
3779 defaulted, and if the default values of the top level and of the subdirectory
3780 @file{configure} differ.
3781 @end itemize
3783 This macro also sets the output variable @code{subdirs} to the list of
3784 directories @samp{@var{dir} @dots{}}.  Make rules can use
3785 this variable to determine which subdirectories to recurse into.
3787 This macro may be called multiple times.
3788 @end defmac
3790 @node Default Prefix
3791 @section Default Prefix
3792 @cindex Install prefix
3793 @cindex Prefix for install
3795 By default, @command{configure} sets the prefix for files it installs to
3796 @file{/usr/local}.  The user of @command{configure} can select a different
3797 prefix using the @option{--prefix} and @option{--exec-prefix} options.
3798 There are two ways to change the default: when creating
3799 @command{configure}, and when running it.
3801 Some software packages might want to install in a directory other than
3802 @file{/usr/local} by default.  To accomplish that, use the
3803 @code{AC_PREFIX_DEFAULT} macro.
3805 @defmac AC_PREFIX_DEFAULT (@var{prefix})
3806 @acindex{PREFIX_DEFAULT}
3807 Set the default installation prefix to @var{prefix} instead of
3808 @file{/usr/local}.
3809 @end defmac
3811 It may be convenient for users to have @command{configure} guess the
3812 installation prefix from the location of a related program that they
3813 have already installed.  If you wish to do that, you can call
3814 @code{AC_PREFIX_PROGRAM}.
3816 @anchor{AC_PREFIX_PROGRAM}
3817 @defmac AC_PREFIX_PROGRAM (@var{program})
3818 @acindex{PREFIX_PROGRAM}
3819 If the user did not specify an installation prefix (using the
3820 @option{--prefix} option), guess a value for it by looking for
3821 @var{program} in @env{PATH}, the way the shell does.  If @var{program}
3822 is found, set the prefix to the parent of the directory containing
3823 @var{program}, else default the prefix as described above
3824 (@file{/usr/local} or @code{AC_PREFIX_DEFAULT}).  For example, if
3825 @var{program} is @code{gcc} and the @env{PATH} contains
3826 @file{/usr/local/gnu/bin/gcc}, set the prefix to @file{/usr/local/gnu}.
3827 @end defmac
3831 @c ======================================================== Existing tests
3833 @node Existing Tests
3834 @chapter Existing Tests
3836 These macros test for particular system features that packages might
3837 need or want to use.  If you need to test for a kind of feature that
3838 none of these macros check for, you can probably do it by calling
3839 primitive test macros with appropriate arguments (@pxref{Writing
3840 Tests}).
3842 These tests print messages telling the user which feature they're
3843 checking for, and what they find.  They cache their results for future
3844 @command{configure} runs (@pxref{Caching Results}).
3846 Some of these macros set output variables.  @xref{Makefile
3847 Substitutions}, for how to get their values.  The phrase ``define
3848 @var{name}'' is used below as a shorthand to mean ``define the C
3849 preprocessor symbol @var{name} to the value 1''.  @xref{Defining
3850 Symbols}, for how to get those symbol definitions into your program.
3852 @menu
3853 * Common Behavior::             Macros' standard schemes
3854 * Alternative Programs::        Selecting between alternative programs
3855 * Files::                       Checking for the existence of files
3856 * Libraries::                   Library archives that might be missing
3857 * Library Functions::           C library functions that might be missing
3858 * Header Files::                Header files that might be missing
3859 * Declarations::                Declarations that may be missing
3860 * Structures::                  Structures or members that might be missing
3861 * Types::                       Types that might be missing
3862 * Compilers and Preprocessors::  Checking for compiling programs
3863 * System Services::             Operating system services
3864 * C and Posix Variants::        Kludges for C and Posix variants
3865 * Erlang Libraries::            Checking for the existence of Erlang libraries
3866 @end menu
3868 @node Common Behavior
3869 @section Common Behavior
3870 @cindex Common autoconf behavior
3872 Much effort has been expended to make Autoconf easy to learn.  The most
3873 obvious way to reach this goal is simply to enforce standard interfaces
3874 and behaviors, avoiding exceptions as much as possible.  Because of
3875 history and inertia, unfortunately, there are still too many exceptions
3876 in Autoconf; nevertheless, this section describes some of the common
3877 rules.
3879 @menu
3880 * Standard Symbols::            Symbols defined by the macros
3881 * Default Includes::            Includes used by the generic macros
3882 @end menu
3884 @node Standard Symbols
3885 @subsection Standard Symbols
3886 @cindex Standard symbols
3888 All the generic macros that @code{AC_DEFINE} a symbol as a result of
3889 their test transform their @var{argument} values to a standard alphabet.
3890 First, @var{argument} is converted to upper case and any asterisks
3891 (@samp{*}) are each converted to @samp{P}.  Any remaining characters
3892 that are not alphanumeric are converted to underscores.
3894 For instance,
3896 @example
3897 AC_CHECK_TYPES([struct $Expensive*])
3898 @end example
3900 @noindent
3901 defines the symbol @samp{HAVE_STRUCT__EXPENSIVEP} if the check
3902 succeeds.
3905 @node Default Includes
3906 @subsection Default Includes
3907 @cindex Default includes
3908 @cindex Includes, default
3909 @hdrindex{assert.h}
3910 @hdrindex{ctype.h}
3911 @hdrindex{errno.h}
3912 @hdrindex{float.h}
3913 @hdrindex{iso646.h}
3914 @hdrindex{limits.h}
3915 @hdrindex{locale.h}
3916 @hdrindex{math.h}
3917 @hdrindex{setjmp.h}
3918 @hdrindex{signal.h}
3919 @hdrindex{stdarg.h}
3920 @hdrindex{stddef.h}
3921 @hdrindex{stdio.h}
3922 @hdrindex{stdlib.h}
3923 @hdrindex{string.h}
3924 @hdrindex{time.h}
3925 @hdrindex{wchar.h}
3926 @hdrindex{wctype.h}
3928 Test programs frequently need to include headers that may or may not be
3929 available on the system whose features are being tested.  Each test can
3930 use all the preprocessor macros that have been @code{AC_DEFINE}d by
3931 previous tests, so for example one may write
3933 @example
3934 @group
3935 #include <time.h>
3936 #ifdef HAVE_SYS_TIME_H
3937 # include <sys/time.h>
3938 #endif
3939 @end group
3940 @end example
3942 @noindent
3943 if @file{sys/time.h} has already been tested for.
3945 All hosted environments that are still of interest for portable code
3946 provide all of the headers specified in ISO C90 (as amended in 1995):
3947 @file{assert.h}, @file{ctype.h}, @file{errno.h}, @file{float.h},
3948 @file{iso646.h}, @file{limits.h}, @file{locale.h}, @file{math.h},
3949 @file{setjmp.h}, @file{signal.h}, @file{stdarg.h}, @file{stddef.h},
3950 @file{stdio.h}, @file{stdlib.h}, @file{string.h}, @file{time.h},
3951 @file{wchar.h}, and @file{wctype.h}.  Most programs can safely include
3952 these headers unconditionally.  All other headers, including all headers
3953 from later revisions of the C standard, need to be tested for
3954 (@pxref{Header Files}).
3956 If your program needs to be portable to a @emph{freestanding}
3957 environment, such as an embedded OS that doesn't provide all of the
3958 facilities of the C90 standard library, you may need to test for some of
3959 the above headers as well.  Note that many Autoconf macros internally
3960 assume that the complete set of C90 headers are available.
3962 Most generic macros use the following macro to provide a default set
3963 of includes:
3965 @defmac AC_INCLUDES_DEFAULT (@ovar{include-directives})
3966 @acindex{INCLUDES_DEFAULT}
3967 Expand to @var{include-directives} if present and nonempty, otherwise to:
3969 @example
3970 @group
3971 #include <stddef.h>
3972 #include <stdio.h>
3973 #include <stdlib.h>
3974 #include <string.h>
3975 #ifdef HAVE_SYS_TYPES_H
3976 # include <sys/types.h>
3977 #endif
3978 #ifdef HAVE_SYS_STAT_H
3979 # include <sys/stat.h>
3980 #endif
3981 #ifdef HAVE_STRINGS_H
3982 # include <strings.h>
3983 #endif
3984 #ifdef HAVE_INTTYPES_H
3985 # include <inttypes.h>
3986 #endif
3987 #ifdef HAVE_STDINT_H
3988 # include <stdint.h>
3989 #endif
3990 #ifdef HAVE_UNISTD_H
3991 # include <unistd.h>
3992 #endif
3993 @end group
3994 @end example
3996 Using this macro without @var{include-directives} has the side effect of
3997 checking for @file{sys/types.h}, @file{sys/stat.h}, @file{strings.h},
3998 @file{inttypes.h}, @file{stdint.h}, and @file{unistd.h}, as if by
3999 @code{AC_CHECK_HEADERS}.  For backward compatibility's sake, it also
4000 unconditionally defines @code{HAVE_STRING_H}, @code{HAVE_STDLIB_H}, and
4001 @code{STDC_HEADERS}.  New code should not make use of these preprocessor
4002 macros.
4003 @end defmac
4005 @defmac AC_CHECK_INCLUDES_DEFAULT
4006 @acindex{CHECK_INCLUDES_DEFAULT}
4007 Check for all the headers that @code{AC_INCLUDES_DEFAULT} would check
4008 for as a side-effect, if this has not already happened.
4010 This macro mainly exists so that @code{autoupdate} can replace certain
4011 obsolete constructs with it. You should not need to use it yourself; in
4012 fact, it is likely to be safe to delete it from any script in which it
4013 appears.  (@code{autoupdate} does not know whether preprocessor macros
4014 such as @code{HAVE_STDINT_H} are used in the program, nor whether they
4015 would get defined as a side-effect of other checks.)
4016 @end defmac
4018 @node Alternative Programs
4019 @section Alternative Programs
4020 @cindex Programs, checking
4022 These macros check for the presence or behavior of particular programs.
4023 They are used to choose between several alternative programs and to
4024 decide what to do once one has been chosen.  If there is no macro
4025 specifically defined to check for a program you need, and you don't need
4026 to check for any special properties of it, then you can use one of the
4027 general program-check macros.
4029 @menu
4030 * Particular Programs::         Special handling to find certain programs
4031 * Generic Programs::            How to find other programs
4032 @end menu
4034 @node Particular Programs
4035 @subsection Particular Program Checks
4037 These macros check for particular programs---whether they exist, and
4038 in some cases whether they support certain features.
4040 @defmac AC_PROG_AWK
4041 @acindex{PROG_AWK}
4042 @ovindex AWK
4043 @caindex prog_AWK
4044 Check for @code{gawk}, @code{mawk}, @code{nawk}, and @code{awk}, in that
4045 order, and set output variable @code{AWK} to the first one that is found.
4046 It tries @code{gawk} first because that is reported to be the
4047 best implementation.  The result can be overridden by setting the
4048 variable @code{AWK} or the cache variable @code{ac_cv_prog_AWK}.
4050 Using this macro is sufficient to avoid the pitfalls of traditional
4051 @command{awk} (@pxref{awk, , Limitations of Usual Tools}).
4052 @end defmac
4054 @defmac AC_PROG_GREP
4055 @acindex{PROG_GREP}
4056 @ovindex GREP
4057 @caindex prog_GREP
4058 Look for the best available @code{grep} or @code{ggrep} that accepts the
4059 longest input lines possible, and that supports multiple @option{-e} options.
4060 Set the output variable @code{GREP} to whatever is chosen.
4061 @xref{grep, , Limitations of Usual Tools}, for more information about
4062 portability problems with the @command{grep} command family.  The result
4063 can be overridden by setting the @code{GREP} variable and is cached in the
4064 @code{ac_cv_path_GREP} variable.
4065 @end defmac
4067 @defmac AC_PROG_EGREP
4068 @acindex{PROG_EGREP}
4069 @ovindex EGREP
4070 @caindex prog_EGREP
4071 Check whether @code{$GREP -E} works, or else look for the best available
4072 @code{egrep} or @code{gegrep} that accepts the longest input lines possible.
4073 Set the output variable @code{EGREP} to whatever is chosen.  The result
4074 can be overridden by setting the @code{EGREP} variable and is cached in the
4075 @code{ac_cv_path_EGREP} variable.
4076 @end defmac
4078 @defmac AC_PROG_FGREP
4079 @acindex{PROG_FGREP}
4080 @ovindex FGREP
4081 @caindex prog_FGREP
4082 Check whether @code{$GREP -F} works, or else look for the best available
4083 @code{fgrep} or @code{gfgrep} that accepts the longest input lines possible.
4084 Set the output variable @code{FGREP} to whatever is chosen.  The result
4085 can be overridden by setting the @code{FGREP} variable and is cached in the
4086 @code{ac_cv_path_FGREP} variable.
4087 @end defmac
4089 @defmac AC_PROG_INSTALL
4090 @acindex{PROG_INSTALL}
4091 @ovindex INSTALL
4092 @ovindex INSTALL_PROGRAM
4093 @ovindex INSTALL_DATA
4094 @ovindex INSTALL_SCRIPT
4095 @caindex path_install
4096 Set output variable @code{INSTALL} to the name of a BSD-compatible
4097 @command{install} program, if one is found in the current @env{PATH}.
4098 Otherwise, set @code{INSTALL} to @samp{@var{dir}/install-sh -c},
4099 checking the directories specified to @code{AC_CONFIG_AUX_DIR} (or its
4100 default directories) to determine @var{dir} (@pxref{Output}).  Also set
4101 the variables @code{INSTALL_PROGRAM} and @code{INSTALL_SCRIPT} to
4102 @samp{$@{INSTALL@}} and @code{INSTALL_DATA} to @samp{$@{INSTALL@} -m 644}.
4104 @samp{@@INSTALL@@} is special, as its value may vary for different
4105 configuration files.
4107 This macro screens out various instances of @command{install} known not to
4108 work.  It prefers to find a C program rather than a shell script, for
4109 speed.  Instead of @file{install-sh}, it can also use @file{install.sh},
4110 but that name is obsolete because some @command{make} programs have a rule
4111 that creates @file{install} from it if there is no makefile.  Further, this
4112 macro requires @command{install} to be able to install multiple files into a
4113 target directory in a single invocation.
4115 Autoconf comes with a copy of @file{install-sh} that you can use.  If
4116 you use @code{AC_PROG_INSTALL}, you must include either
4117 @file{install-sh} or @file{install.sh} in your distribution; otherwise
4118 @command{configure} produces an error message saying it can't find
4119 them---even if the system you're on has a good @command{install} program.
4120 This check is a safety measure to prevent you from accidentally leaving
4121 that file out, which would prevent your package from installing on
4122 systems that don't have a BSD-compatible @command{install} program.
4124 If you need to use your own installation program because it has features
4125 not found in standard @command{install} programs, there is no reason to use
4126 @code{AC_PROG_INSTALL}; just put the file name of your program into your
4127 @file{Makefile.in} files.
4129 The result of the test can be overridden by setting the variable
4130 @code{INSTALL} or the cache variable @code{ac_cv_path_install}.
4131 @end defmac
4133 @defmac AC_PROG_MKDIR_P
4134 @acindex{PROG_MKDIR_P}
4135 @ovindex MKDIR_P
4136 @caindex path_mkdir
4137 Set output variable @code{MKDIR_P} to a program that ensures that for
4138 each argument, a directory named by this argument exists, creating it
4139 and its parent directories if needed, and without race conditions when
4140 two instances of the program attempt to make the same directory at
4141 nearly the same time.
4143 This macro uses the @samp{mkdir -p} command if possible.  Otherwise, it
4144 falls back on invoking @command{install-sh} with the @option{-d} option,
4145 so your package should
4146 contain @file{install-sh} as described under @code{AC_PROG_INSTALL}.
4147 An @file{install-sh} file that predates Autoconf 2.60 or Automake 1.10
4148 is vulnerable to race conditions, so if you want to support parallel
4149 installs from
4150 different packages into the same directory you need to make sure you
4151 have an up-to-date @file{install-sh}.  In particular, be careful about
4152 using @samp{autoreconf -if} if your Automake predates Automake 1.10.
4154 This macro is related to the @code{AS_MKDIR_P} macro (@pxref{Programming
4155 in M4sh}), but it sets an output variable intended for use in other
4156 files, whereas @code{AS_MKDIR_P} is intended for use in scripts like
4157 @command{configure}.  Also, @code{AS_MKDIR_P} does not accept options,
4158 but @code{MKDIR_P} supports the @option{-m} option, e.g., a makefile
4159 might invoke @code{$(MKDIR_P) -m 0 dir} to create an inaccessible
4160 directory, and conversely a makefile should use @code{$(MKDIR_P) --
4161 $(FOO)} if @var{FOO} might yield a value that begins with @samp{-}.
4162 Finally, @code{AS_MKDIR_P} does not check for race condition
4163 vulnerability, whereas @code{AC_PROG_MKDIR_P} does.
4165 @samp{@@MKDIR_P@@} is special, as its value may vary for different
4166 configuration files.
4168 The result of the test can be overridden by setting the variable
4169 @code{MKDIR_P} or the cache variable @code{ac_cv_path_mkdir}.
4170 @end defmac
4172 @anchor{AC_PROG_LEX}
4173 @defmac AC_PROG_LEX
4174 @acindex{PROG_LEX}
4175 @ovindex LEX
4176 @ovindex LEXLIB
4177 @cvindex YYTEXT_POINTER
4178 @ovindex LEX_OUTPUT_ROOT
4179 @caindex prog_LEX
4180 If @code{flex} is found, set output variable @code{LEX} to @samp{flex}.
4181 Otherwise set @code{LEX} to @samp{lex}, if found.
4182 If neither variant is available, set @code{LEX}
4183 to @samp{:}; for packages that ship the generated @file{file.yy.c}
4184 alongside the source @file{file.l}, this default allows users without a
4185 lexer generator to still build the package even if the timestamp for
4186 @file{file.l} is inadvertently changed.
4188 If generated lexers need a library to work, set output variable
4189 @code{LEXLIB} to an option for that library (e.g., @option{-ll});
4190 otherwise define @code{LEXLIB} to empty.  A library that merely defines
4191 @code{main} and @code{yywrap} placeholder functions is not considered
4192 to be needed.
4194 Define @code{YYTEXT_POINTER} if @code{yytext} defaults to @samp{char *} instead
4195 of to @samp{char []}.  Also set output variable @code{LEX_OUTPUT_ROOT} to
4196 the base of the file name that the lexer generates; usually
4197 @file{lex.yy}, but sometimes something else.  These results vary
4198 according to whether @code{lex} or @code{flex} is being used.
4200 You are encouraged to use Flex in your sources, since it is both more
4201 pleasant to use than plain Lex and the C source it produces is portable.
4202 In order to ensure portability, however, you must either provide a
4203 function @code{yywrap} or, if you don't use it (e.g., your scanner has
4204 no @samp{#include}-like feature), simply include a @samp{%noyywrap}
4205 statement in the scanner's source.  Once this done, the scanner is
4206 portable (unless @emph{you} felt free to use nonportable constructs) and
4207 does not depend on any library.  In this case, and in this case only, it
4208 is suggested that you use this Autoconf snippet:
4210 @example
4211 AC_PROG_LEX
4212 if test "x$LEX" != xflex; then
4213   LEX="$SHELL $missing_dir/missing flex"
4214   AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
4215   AC_SUBST([LEXLIB], [''])
4217 @end example
4219 The shell script @command{missing} can be found in the Automake
4220 distribution.
4222 Remember that the user may have supplied an alternate location in
4223 @env{LEX}, so if Flex is required, it is better to check that the user
4224 provided something sufficient by parsing the output of @samp{$LEX
4225 --version} than by simply relying on @code{test "x$LEX" = xflex}.
4227 To ensure backward compatibility, Automake's @code{AM_PROG_LEX} invokes
4228 (indirectly) this macro twice, which causes an annoying but benign
4229 ``@code{AC_PROG_LEX} invoked multiple times'' warning.  Future versions
4230 of Automake will fix this issue; meanwhile, just ignore this message.
4232 As part of running the test, this macro may delete any file in the
4233 configuration directory named @file{lex.yy.c} or @file{lexyy.c}.
4235 The result of this test can be influenced by setting the variable
4236 @code{LEX} or the cache variable @code{ac_cv_prog_LEX}.
4237 @end defmac
4239 @anchor{AC_PROG_LN_S}
4240 @defmac AC_PROG_LN_S
4241 @acindex{PROG_LN_S}
4242 @ovindex LN_S
4243 If @samp{ln -s} works on the current file system (the operating system
4244 and file system support symbolic links), set the output variable
4245 @code{LN_S} to @samp{ln -s}; otherwise, if @samp{ln} works, set
4246 @code{LN_S} to @samp{ln}, and otherwise set it to @samp{cp -pR}.
4248 If you make a link in a directory other than the current directory, its
4249 meaning depends on whether @samp{ln} or @samp{ln -s} is used.  To safely
4250 create links using @samp{$(LN_S)}, either find out which form is used
4251 and adjust the arguments, or always invoke @code{ln} in the directory
4252 where the link is to be created.
4254 In other words, it does not work to do:
4255 @example
4256 $(LN_S) foo /x/bar
4257 @end example
4259 Instead, do:
4261 @example
4262 (cd /x && $(LN_S) foo bar)
4263 @end example
4264 @end defmac
4266 @defmac AC_PROG_RANLIB
4267 @acindex{PROG_RANLIB}
4268 @ovindex RANLIB
4269 @c @caindex prog_RANLIB
4270 @c @caindex prog_ac_ct_RANLIB
4271 Set output variable @code{RANLIB} to @samp{ranlib} if @code{ranlib}
4272 is found, and otherwise to @samp{:} (do nothing).
4273 @end defmac
4275 @defmac AC_PROG_SED
4276 @acindex{PROG_SED}
4277 @ovindex SED
4278 @caindex path_SED
4279 Set output variable @code{SED} to a Sed implementation that conforms to
4280 Posix and does not have arbitrary length limits.  Report an error if no
4281 acceptable Sed is found.  @xref{sed, , Limitations of Usual Tools}, for more
4282 information about portability problems with Sed.
4284 The result of this test can be overridden by setting the @code{SED} variable
4285 and is cached in the @code{ac_cv_path_SED} variable.
4286 @end defmac
4288 @defmac AC_PROG_YACC
4289 @acindex{PROG_YACC}
4290 @evindex YACC
4291 @evindex YFLAGS
4292 @ovindex YACC
4293 @caindex prog_YACC
4294 If @code{bison} is found, set output variable @code{YACC} to @samp{bison
4295 -y}.  Otherwise, if @code{byacc} is found, set @code{YACC} to
4296 @samp{byacc}.  Otherwise set @code{YACC} to @samp{yacc}.
4297 The result of this test can be influenced by setting the variable
4298 @code{YACC} or the cache variable @code{ac_cv_prog_YACC}.
4299 @end defmac
4301 @node Generic Programs
4302 @subsection Generic Program and File Checks
4304 These macros are used to find programs not covered by the ``particular''
4305 test macros.  If you need to check the behavior of a program as well as
4306 find out whether it is present, you have to write your own test for it
4307 (@pxref{Writing Tests}).  By default, these macros use the environment
4308 variable @env{PATH}.  If you need to check for a program that might not
4309 be in the user's @env{PATH}, you can pass a modified path to use
4310 instead, like this:
4312 @example
4313 AC_PATH_PROG([INETD], [inetd], [/usr/libexec/inetd],
4314              [$PATH$PATH_SEPARATOR/usr/libexec$PATH_SEPARATOR]dnl
4315 [/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc])
4316 @end example
4318 You are strongly encouraged to declare the @var{variable} passed to
4319 @code{AC_CHECK_PROG} etc.@: as precious.  @xref{Setting Output Variables},
4320 @code{AC_ARG_VAR}, for more details.
4322 @anchor{AC_CHECK_PROG}
4323 @defmac AC_CHECK_PROG (@var{variable}, @var{prog-to-check-for}, @
4324   @var{value-if-found}, @ovar{value-if-not-found}, @dvar{path, $PATH}, @
4325   @ovar{reject})
4326 @acindex{CHECK_PROG}
4327 @caindex prog_@var{variable}
4328 Check whether program @var{prog-to-check-for} exists in @var{path}.  If
4329 it is found, set @var{variable} to @var{value-if-found}, otherwise to
4330 @var{value-if-not-found}, if given.  Always pass over @var{reject} (an
4331 absolute file name) even if it is the first found in the search path; in
4332 that case, set @var{variable} using the absolute file name of the
4333 @var{prog-to-check-for} found that is not @var{reject}.  If
4334 @var{variable} was already set, do nothing.  Calls @code{AC_SUBST} for
4335 @var{variable}.  The result of this test can be overridden by setting the
4336 @var{variable} variable or the cache variable
4337 @code{ac_cv_prog_@var{variable}}.
4338 @end defmac
4340 @anchor{AC_CHECK_PROGS}
4341 @defmac AC_CHECK_PROGS (@var{variable}, @var{progs-to-check-for}, @
4342   @ovar{value-if-not-found}, @dvar{path, $PATH})
4343 @acindex{CHECK_PROGS}
4344 @caindex prog_@var{variable}
4345 Check for each program in the blank-separated list
4346 @var{progs-to-check-for} existing in the @var{path}.  If one is found, set
4347 @var{variable} to the name of that program.  Otherwise, continue
4348 checking the next program in the list.  If none of the programs in the
4349 list are found, set @var{variable} to @var{value-if-not-found}; if
4350 @var{value-if-not-found} is not specified, the value of @var{variable}
4351 is not changed.  Calls @code{AC_SUBST} for @var{variable}.  The result of
4352 this test can be overridden by setting the @var{variable} variable or the
4353 cache variable @code{ac_cv_prog_@var{variable}}.
4354 @end defmac
4356 @defmac AC_CHECK_TARGET_TOOL (@var{variable}, @var{prog-to-check-for}, @
4357   @ovar{value-if-not-found}, @dvar{path, $PATH})
4358 @acindex{CHECK_TARGET_TOOL}
4359 Like @code{AC_CHECK_PROG}, but first looks for @var{prog-to-check-for}
4360 with a prefix of the target type as determined by
4361 @code{AC_CANONICAL_TARGET}, followed by a dash (@pxref{Canonicalizing}).
4362 If the tool cannot be found with a prefix, and if the build and target
4363 types are equal, then it is also searched for without a prefix.
4365 As noted in @ref{Specifying Target Triplets}, the
4366 target is rarely specified, because most of the time it is the same
4367 as the host: it is the type of system for which any compiler tool in
4368 the package produces code.  What this macro looks for is,
4369 for example, @emph{a tool @r{(assembler, linker, etc.)}@: that the
4370 compiler driver @r{(@command{gcc} for the GNU C Compiler)}
4371 uses to produce objects, archives or executables}.
4372 @end defmac
4374 @defmac AC_CHECK_TOOL (@var{variable}, @var{prog-to-check-for}, @
4375   @ovar{value-if-not-found}, @dvar{path, $PATH})
4376 @acindex{CHECK_TOOL}
4377 @c @caindex prog_@var{VARIABLE}
4378 @c @caindex prog_ac_ct_@var{VARIABLE}
4379 Like @code{AC_CHECK_PROG}, but first looks for @var{prog-to-check-for}
4380 with a prefix of the host type as specified by @option{--host}, followed by a
4381 dash.  For example, if the user runs
4382 @samp{configure --build=x86_64-gnu --host=aarch64-linux-gnu}, then this call:
4383 @example
4384 AC_CHECK_TOOL([RANLIB], [ranlib], [:])
4385 @end example
4386 @noindent
4387 sets @code{RANLIB} to @file{aarch64-linux-gnu-ranlib} if that program exists in
4388 @var{path}, or otherwise to @samp{ranlib} if that program exists in
4389 @var{path}, or to @samp{:} if neither program exists.
4391 When cross-compiling, this macro will issue a warning if no program
4392 prefixed with the host type could be found.
4393 For more information, see @ref{Specifying Target Triplets}.
4394 @end defmac
4396 @defmac AC_CHECK_TARGET_TOOLS (@var{variable}, @var{progs-to-check-for}, @
4397   @ovar{value-if-not-found}, @dvar{path, $PATH})
4398 @acindex{CHECK_TARGET_TOOLS}
4399 Like @code{AC_CHECK_TARGET_TOOL}, each of the tools in the list
4400 @var{progs-to-check-for} are checked with a prefix of the target type as
4401 determined by @code{AC_CANONICAL_TARGET}, followed by a dash
4402 (@pxref{Canonicalizing}).  If none of the tools can be found with a
4403 prefix, and if the build and target types are equal, then the first one
4404 without a prefix is used.  If a tool is found, set @var{variable} to
4405 the name of that program.  If none of the tools in the list are found,
4406 set @var{variable} to @var{value-if-not-found}; if @var{value-if-not-found}
4407 is not specified, the value of @var{variable} is not changed.  Calls
4408 @code{AC_SUBST} for @var{variable}.
4409 @end defmac
4411 @defmac AC_CHECK_TOOLS (@var{variable}, @var{progs-to-check-for}, @
4412   @ovar{value-if-not-found}, @dvar{path, $PATH})
4413 @acindex{CHECK_TOOLS}
4414 Like @code{AC_CHECK_TOOL}, each of the tools in the list
4415 @var{progs-to-check-for} are checked with a prefix of the host type as
4416 determined by @code{AC_CANONICAL_HOST}, followed by a dash
4417 (@pxref{Canonicalizing}).  If none of the tools can be found with a
4418 prefix, then the first one without a prefix is used.  If a tool is found,
4419 set @var{variable} to the name of that program.  If none of the tools in
4420 the list are found, set @var{variable} to @var{value-if-not-found}; if
4421 @var{value-if-not-found} is not specified, the value of @var{variable}
4422 is not changed.  Calls @code{AC_SUBST} for @var{variable}.
4424 When cross-compiling, this macro will issue a warning if no program
4425 prefixed with the host type could be found.
4426 For more information, see @ref{Specifying Target Triplets}.
4427 @end defmac
4429 @anchor{AC_PATH_PROG}
4430 @defmac AC_PATH_PROG (@var{variable}, @var{prog-to-check-for}, @
4431   @ovar{value-if-not-found}, @dvar{path, $PATH})
4432 @acindex{PATH_PROG}
4433 @caindex path_@var{variable}
4434 Like @code{AC_CHECK_PROG}, but set @var{variable} to the absolute
4435 name of @var{prog-to-check-for} if found.  The result of this test
4436 can be overridden by setting the @var{variable} variable.  A positive
4437 result of this test is cached in the @code{ac_cv_path_@var{variable}}
4438 variable.
4439 @end defmac
4441 @anchor{AC_PATH_PROGS}
4442 @defmac AC_PATH_PROGS (@var{variable}, @var{progs-to-check-for}, @
4443   @ovar{value-if-not-found}, @dvar{path, $PATH})
4444 @acindex{PATH_PROGS}
4445 @caindex path_@var{variable}
4446 Like @code{AC_CHECK_PROGS}, but if any of @var{progs-to-check-for}
4447 are found, set @var{variable} to the absolute name of the program
4448 found.  The result of this test can be overridden by setting the
4449 @var{variable} variable.  A positive result of this test is cached in
4450 the @code{ac_cv_path_@var{variable}} variable.
4451 @end defmac
4453 @defmac AC_PATH_PROGS_FEATURE_CHECK (@var{variable}, @
4454   @var{progs-to-check-for}, @var{feature-test}, @
4455   @ovar{action-if-not-found}, @dvar{path, $PATH})
4456 @acindex{PATH_PROGS_FEATURE_CHECK}
4457 @caindex path_@var{variable}
4458 @vrindex ac_path_@var{variable}
4459 @vrindex ac_path_@var{variable}_found
4460 This macro was introduced in Autoconf 2.62.  If @var{variable} is not
4461 empty, then set the cache variable @code{ac_cv_path_@var{variable}} to
4462 its value.  Otherwise, check for each program in the blank-separated
4463 list @var{progs-to-check-for} existing in @var{path}.  For each program
4464 found, execute @var{feature-test} with @code{ac_path_@var{variable}}
4465 set to the absolute name of the candidate program.  If no invocation of
4466 @var{feature-test} sets the shell variable
4467 @code{ac_cv_path_@var{variable}}, then @var{action-if-not-found} is
4468 executed.  @var{feature-test} will be run even when
4469 @code{ac_cv_path_@var{variable}} is set, to provide the ability to
4470 choose a better candidate found later in @var{path}; to accept the
4471 current setting and bypass all further checks, @var{feature-test} can
4472 execute @code{ac_path_@var{variable}_found=:}.
4474 Note that this macro has some subtle differences from
4475 @code{AC_CHECK_PROGS}.  It is designed to be run inside
4476 @code{AC_CACHE_VAL}, therefore, it should have no side effects.  In
4477 particular, @var{variable} is not set to the final value of
4478 @code{ac_cv_path_@var{variable}}, nor is @code{AC_SUBST} automatically
4479 run.  Also, on failure, any action can be performed, whereas
4480 @code{AC_CHECK_PROGS} only performs
4481 @code{@var{variable}=@var{value-if-not-found}}.
4483 Here is an example, similar to what Autoconf uses in its own configure
4484 script.  It will search for an implementation of @command{m4} that
4485 supports the @code{indir} builtin, even if it goes by the name
4486 @command{gm4} or is not the first implementation on @env{PATH}.
4488 @example
4489 AC_CACHE_CHECK([for m4 that supports indir], [ac_cv_path_M4],
4490   [AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4],
4491     [[m4out=`echo 'changequote([,])indir([divnum])' | $ac_path_M4`
4492       test "x$m4out" = x0 \
4493       && ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:]],
4494     [AC_MSG_ERROR([could not find m4 that supports indir])])])
4495 AC_SUBST([M4], [$ac_cv_path_M4])
4496 @end example
4497 @end defmac
4499 @defmac AC_PATH_TARGET_TOOL (@var{variable}, @var{prog-to-check-for}, @
4500   @ovar{value-if-not-found}, @dvar{path, $PATH})
4501 @acindex{PATH_TARGET_TOOL}
4502 Like @code{AC_CHECK_TARGET_TOOL}, but set @var{variable} to the absolute
4503 name of the program if it is found.
4504 @end defmac
4506 @defmac AC_PATH_TOOL (@var{variable}, @var{prog-to-check-for}, @
4507   @ovar{value-if-not-found}, @dvar{path, $PATH})
4508 @acindex{PATH_TOOL}
4509 Like @code{AC_CHECK_TOOL}, but set @var{variable} to the absolute
4510 name of the program if it is found.
4512 When cross-compiling, this macro will issue a warning if no program
4513 prefixed with the host type could be found.
4514 For more information, see @ref{Specifying Target Triplets}.
4515 @end defmac
4518 @node Files
4519 @section Files
4520 @cindex File, checking
4522 You might also need to check for the existence of files.  Before using
4523 these macros, ask yourself whether a runtime test might not be a better
4524 solution.  Be aware that, like most Autoconf macros, they test a feature
4525 of the host machine, and therefore, they die when cross-compiling.
4527 @defmac AC_CHECK_FILE (@var{file}, @ovar{action-if-found}, @
4528   @ovar{action-if-not-found})
4529 @acindex{CHECK_FILE}
4530 @caindex file_@var{file}
4531 Check whether file @var{file} exists on the native system.  If it is
4532 found, execute @var{action-if-found}, otherwise do
4533 @var{action-if-not-found}, if given.  Cache the result of this test
4534 in the @code{ac_cv_file_@var{file}} variable, with characters not
4535 suitable for a variable name mapped to underscores.
4536 @end defmac
4538 @defmac AC_CHECK_FILES (@var{files}, @ovar{action-if-found}, @
4539   @ovar{action-if-not-found})
4540 @acindex{CHECK_FILES}
4541 @caindex file_@var{file}
4542 For each file listed in @var{files}, execute @code{AC_CHECK_FILE}
4543 and perform either @var{action-if-found} or @var{action-if-not-found}.
4544 Like @code{AC_CHECK_FILE}, this defines @samp{HAVE_@var{file}}
4545 (@pxref{Standard Symbols}) for each file found and caches the results of
4546 each test in the @code{ac_cv_file_@var{file}} variable, with characters
4547 not suitable for a variable name mapped to underscores.
4548 @end defmac
4551 @node Libraries
4552 @section Library Files
4553 @cindex Library, checking
4555 The following macros check for the presence of certain C, C++, Fortran,
4556 or Go library archive files.
4558 @anchor{AC_CHECK_LIB}
4559 @defmac AC_CHECK_LIB (@var{library}, @var{function}, @
4560   @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
4561 @acindex{CHECK_LIB}
4562 @caindex lib_@var{library}_@var{function}
4563 Test whether the library @var{library} is available by trying to link
4564 a test program that calls function @var{function} with the library.
4565 @var{function} should be a function provided by the library.
4566 Use the base
4567 name of the library; e.g., to check for @option{-lmp}, use @samp{mp} as
4568 the @var{library} argument.
4570 @var{action-if-found} is a list of shell commands to run if the link
4571 with the library succeeds; @var{action-if-not-found} is a list of shell
4572 commands to run if the link fails.  If @var{action-if-found} is not
4573 specified, the default action prepends @option{-l@var{library}} to
4574 @code{LIBS} and defines @samp{HAVE_LIB@var{library}} (in all
4575 capitals).  This macro is intended to support building @code{LIBS} in
4576 a right-to-left (least-dependent to most-dependent) fashion such that
4577 library dependencies are satisfied as a natural side effect of
4578 consecutive tests.  Linkers are sensitive to library ordering
4579 so the order in which @code{LIBS} is generated is important to reliable
4580 detection of libraries.
4582 If linking with @var{library} results in unresolved symbols that would
4583 be resolved by linking with additional libraries, give those libraries
4584 as the @var{other-libraries} argument, separated by spaces:
4585 e.g., @option{-lXt -lX11}.  Otherwise, this macro may fail to detect
4586 that @var{library} is present, because linking the test program can
4587 fail with unresolved symbols.  The @var{other-libraries} argument
4588 should be limited to cases where it is desirable to test for one library
4589 in the presence of another that is not already in @code{LIBS}.
4591 @code{AC_CHECK_LIB} requires some care in usage, and should be avoided
4592 in some common cases.  Many standard functions like @code{gethostbyname}
4593 appear in the standard C library on some hosts, and in special libraries
4594 like @code{nsl} on other hosts.  On some hosts the special libraries
4595 contain variant implementations that you may not want to use.  These
4596 days it is normally better to use @code{AC_SEARCH_LIBS([gethostbyname],
4597 [nsl])} instead of @code{AC_CHECK_LIB([nsl], [gethostbyname])}.
4599 The result of this test is cached in the
4600 @code{ac_cv_lib_@var{library}_@var{function}} variable.
4601 @end defmac
4603 @anchor{AC_SEARCH_LIBS}
4604 @defmac AC_SEARCH_LIBS (@var{function}, @var{search-libs}, @
4605   @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
4606 @acindex{SEARCH_LIBS}
4607 @caindex search_@var{function}
4608 Search for a library defining @var{function} if it's not already
4609 available.  This equates to calling
4610 @samp{AC_LINK_IFELSE([AC_LANG_CALL([], [@var{function}])])} first with
4611 no libraries, then for each library listed in @var{search-libs}.
4613 Prepend @option{-l@var{library}} to @code{LIBS} for the first library found
4614 to contain @var{function}, and run @var{action-if-found}.  If the
4615 function is not found, run @var{action-if-not-found}.
4617 If linking with @var{library} results in unresolved symbols that would
4618 be resolved by linking with additional libraries, give those libraries
4619 as the @var{other-libraries} argument, separated by spaces:
4620 e.g., @option{-lXt -lX11}.  Otherwise, this macro fails to detect
4621 that @var{function} is present, because linking the test program
4622 always fails with unresolved symbols.
4624 The result of this test is cached in the
4625 @code{ac_cv_search_@var{function}} variable as @samp{none required} if
4626 @var{function} is already available, as @samp{no} if no library
4627 containing @var{function} was found, otherwise as the
4628 @option{-l@var{library}} option that needs to be prepended to @code{LIBS}.
4629 @end defmac
4633 @node Library Functions
4634 @section Library Functions
4636 The following macros check for particular C library functions.
4637 If there is no macro specifically defined to check for a function you need,
4638 and you don't need to check for any special properties of
4639 it, then you can use one of the general function-check macros.
4641 @menu
4642 * Function Portability::        Pitfalls with usual functions
4643 * Particular Functions::        Special handling to find certain functions
4644 * Generic Functions::           How to find other functions
4645 @end menu
4647 @node Function Portability
4648 @subsection Portability of C Functions
4649 @cindex Portability of C functions
4650 @cindex C function portability
4652 Most usual functions can either be missing, or be buggy, or be limited
4653 on some architectures.  This section tries to make an inventory of these
4654 portability issues.  By definition, this list always requires
4655 additions.  A much more complete list is maintained by the Gnulib
4656 project (@pxref{Gnulib}), covering @ref{Function Substitutes, ,
4657 Current Posix Functions, gnulib, GNU gnulib}, @ref{Legacy Function
4658 Substitutes, , Legacy Functions, gnulib, GNU gnulib}, and @ref{Glibc
4659 Function Substitutes, , Glibc Functions, gnulib, GNU gnulib}.  Please
4660 help us keep the gnulib list as complete as possible.
4662 @table @asis
4663 @item @code{exit}
4664 @c @fuindex exit
4665 @prindex @code{exit}
4666 On ancient hosts, @code{exit} returned @code{int}.
4667 This is because @code{exit} predates @code{void}, and there was a long
4668 tradition of it returning @code{int}.
4670 On current hosts, the problem more likely is that @code{exit} is not
4671 declared, due to C++ problems of some sort or another.  For this reason
4672 we suggest that test programs not invoke @code{exit}, but return from
4673 @code{main} instead.
4675 @item @code{free}
4676 @c @fuindex free
4677 @prindex @code{free}
4678 The C standard says a call @code{free (NULL)} does nothing, but
4679 some old systems don't support this (e.g., NextStep).
4681 @item @code{isinf}
4682 @itemx @code{isnan}
4683 @c @fuindex isinf
4684 @c @fuindex isnan
4685 @prindex @code{isinf}
4686 @prindex @code{isnan}
4687 In C99 and later, @code{isinf} and @code{isnan} are
4688 macros.  On some systems just macros are available
4689 (e.g., HP-UX and Solaris 10), on
4690 some systems both macros and functions (e.g., glibc 2.3.2), and on some
4691 systems only functions (e.g., IRIX 6 and Solaris 9).  In some cases
4692 these functions are declared in nonstandard headers like
4693 @code{<sunmath.h>} and defined in non-default libraries like
4694 @option{-lm} or @option{-lsunmath}.
4696 In C99 and later, @code{isinf} and @code{isnan} macros work correctly with
4697 @code{long double} arguments, but pre-C99 systems that use functions
4698 typically assume @code{double} arguments.  On such a system,
4699 @code{isinf} incorrectly returns true for a finite @code{long double}
4700 argument that is outside the range of @code{double}.
4702 The best workaround for these issues is to use gnulib modules
4703 @code{isinf} and @code{isnan} (@pxref{Gnulib}).  But a lighter weight
4704 solution involves code like the following.
4706 @smallexample
4707 #include <math.h>
4709 #ifndef isnan
4710 # define isnan(x) \
4711     (sizeof (x) == sizeof (long double) ? isnan_ld (x) \
4712      : sizeof (x) == sizeof (double) ? isnan_d (x) \
4713      : isnan_f (x))
4714 static int isnan_f  (float       x) @{ return x != x; @}
4715 static int isnan_d  (double      x) @{ return x != x; @}
4716 static int isnan_ld (long double x) @{ return x != x; @}
4717 #endif
4719 #ifndef isinf
4720 # define isinf(x) \
4721     (sizeof (x) == sizeof (long double) ? isinf_ld (x) \
4722      : sizeof (x) == sizeof (double) ? isinf_d (x) \
4723      : isinf_f (x))
4724 static int isinf_f  (float       x)
4725 @{ return !isnan (x) && isnan (x - x); @}
4726 static int isinf_d  (double      x)
4727 @{ return !isnan (x) && isnan (x - x); @}
4728 static int isinf_ld (long double x)
4729 @{ return !isnan (x) && isnan (x - x); @}
4730 #endif
4731 @end smallexample
4733 Some optimizing compilers mishandle these definitions, but systems with that bug
4734 typically have many other floating point corner-case compliance problems
4735 anyway, so it's probably not worth worrying about.
4737 @item @code{malloc}
4738 @c @fuindex malloc
4739 @prindex @code{malloc}
4740 The C standard says a call @code{malloc (0)} is implementation
4741 dependent.  It can return either @code{NULL} or a new non-null pointer.
4742 The latter is more common (e.g., the GNU C Library) but is by
4743 no means universal.  @code{AC_FUNC_MALLOC}
4744 can be used to insist on non-@code{NULL} (@pxref{Particular Functions}).
4746 @item @code{putenv}
4747 @c @fuindex putenv
4748 @prindex @code{putenv}
4749 Posix prefers @code{setenv} to @code{putenv}; among other things,
4750 @code{putenv} is not required of all Posix implementations, but
4751 @code{setenv} is.
4753 Posix specifies that @code{putenv} puts the given string directly in
4754 @code{environ}, but some systems make a copy of it instead (e.g.,
4755 glibc 2.0, or BSD).  And when a copy is made, @code{unsetenv} might
4756 not free it, causing a memory leak (e.g., FreeBSD 4).
4758 On some systems @code{putenv ("FOO")} removes @samp{FOO} from the
4759 environment, but this is not standard usage and it dumps core
4760 on some systems (e.g., AIX).
4762 On MinGW, a call @code{putenv ("FOO=")} removes @samp{FOO} from the
4763 environment, rather than inserting it with an empty value.
4765 @item @code{realloc}
4766 @c @fuindex realloc
4767 @prindex @code{realloc}
4768 The C standard says a call @code{realloc (NULL, size)} is equivalent
4769 to @code{malloc (size)}, but some old systems don't support this (e.g.,
4770 NextStep).
4772 @item @code{signal} handler
4773 @c @fuindex signal
4774 @prindex @code{signal}
4775 @prindex @code{sigaction}
4776 Normally @code{signal} takes a handler function with a return type of
4777 @code{void}, but some old systems required @code{int} instead.  Any
4778 actual @code{int} value returned is not used; this is only a
4779 difference in the function prototype demanded.
4781 All systems we know of in current use return @code{void}.  The
4782 @code{int} was to support K&R C, where of course @code{void} is not
4783 available.  The obsolete macro @code{AC_TYPE_SIGNAL}
4784 (@pxref{AC_TYPE_SIGNAL}) can be used to establish the correct type in
4785 all cases.
4787 In most cases, it is more robust to use @code{sigaction} when it is
4788 available, rather than @code{signal}.
4790 @item @code{snprintf}
4791 @c @fuindex snprintf
4792 @prindex @code{snprintf}
4793 @c @fuindex vsnprintf
4794 @prindex @code{vsnprintf}
4795 In C99 and later, if the output array isn't big enough
4796 and if no other errors occur, @code{snprintf} and @code{vsnprintf}
4797 truncate the output and return the number of bytes that ought to have
4798 been produced.  Some older systems return the truncated length (e.g.,
4799 GNU C Library 2.0.x or IRIX 6.5), some a negative value
4800 (e.g., earlier GNU C Library versions), and some the buffer
4801 length without truncation (e.g., 32-bit Solaris 7).  Also, some buggy
4802 older systems ignore the length and overrun the buffer (e.g., 64-bit
4803 Solaris 7).
4805 @item @code{sprintf}
4806 @c @fuindex sprintf
4807 @prindex @code{sprintf}
4808 @c @fuindex vsprintf
4809 @prindex @code{vsprintf}
4810 The C standard says @code{sprintf} and @code{vsprintf} return the
4811 number of bytes written.  On some ancient systems (SunOS 4 for
4812 instance) they return the buffer pointer instead, but these no
4813 longer need to be worried about.
4815 @item @code{sscanf}
4816 @c @fuindex sscanf
4817 @prindex @code{sscanf}
4818 On various old systems, e.g., HP-UX 9, @code{sscanf} requires
4819 that its
4820 input string be writable (though it doesn't actually change it).  This
4821 can be a problem when using @command{gcc} since it normally puts
4822 constant strings in read-only memory (@pxref{Incompatibilities,
4823 Incompatibilities of GCC, , gcc, Using and
4824 Porting the GNU Compiler Collection}).  Apparently in some cases even
4825 having format strings read-only can be a problem.
4827 @item @code{strerror_r}
4828 @c @fuindex strerror_r
4829 @prindex @code{strerror_r}
4830 Posix specifies that @code{strerror_r} returns an @code{int}, but many
4831 systems (e.g., GNU C Library version 2.2.4) provide a
4832 different version returning a @code{char *}.  @code{AC_FUNC_STRERROR_R}
4833 can detect which is in use (@pxref{Particular Functions}).
4835 @item @code{strnlen}
4836 @c @fuindex strnlen
4837 @prindex @code{strnlen}
4838 AIX 4.3 provides a broken version which produces the
4839 following results:
4841 @example
4842 strnlen ("foobar", 0) = 0
4843 strnlen ("foobar", 1) = 3
4844 strnlen ("foobar", 2) = 2
4845 strnlen ("foobar", 3) = 1
4846 strnlen ("foobar", 4) = 0
4847 strnlen ("foobar", 5) = 6
4848 strnlen ("foobar", 6) = 6
4849 strnlen ("foobar", 7) = 6
4850 strnlen ("foobar", 8) = 6
4851 strnlen ("foobar", 9) = 6
4852 @end example
4854 @item @code{sysconf}
4855 @c @fuindex sysconf
4856 @prindex @code{sysconf}
4857 @code{_SC_PAGESIZE} is standard, but some older systems (e.g., HP-UX
4858 9) have @code{_SC_PAGE_SIZE} instead.  This can be tested with
4859 @code{#ifdef}.
4861 @item @code{unlink}
4862 @c @fuindex unlink
4863 @prindex @code{unlink}
4864 The Posix spec says that @code{unlink} causes the given file to be
4865 removed only after there are no more open file handles for it.  Some
4866 non-Posix hosts have trouble with this requirement, though,
4867 and some DOS variants even corrupt the file system.
4869 @item @code{unsetenv}
4870 @c @fuindex unsetenv
4871 @prindex @code{unsetenv}
4872 On MinGW, @code{unsetenv} is not available, but a variable @samp{FOO}
4873 can be removed with a call @code{putenv ("FOO=")}, as described under
4874 @code{putenv} above.
4876 @item @code{va_copy}
4877 @c @fuindex va_copy
4878 @prindex @code{va_copy}
4879 C99 and later provide @code{va_copy} for copying
4880 @code{va_list} variables.  It may be available in older environments
4881 too, though possibly as @code{__va_copy} (e.g., @command{gcc} in strict
4882 pre-C99 mode).  These can be tested with @code{#ifdef}.  A fallback to
4883 @code{memcpy (&dst, &src, sizeof (va_list))} gives maximum
4884 portability.
4886 @item @code{va_list}
4887 @c @fuindex va_list
4888 @prindex @code{va_list}
4889 @code{va_list} is not necessarily just a pointer.  It can be a
4890 @code{struct} (e.g., @command{gcc} on Alpha), which means @code{NULL} is
4891 not portable.  Or it can be an array (e.g., @command{gcc} in some
4892 PowerPC configurations), which means as a function parameter it can be
4893 effectively call-by-reference and library routines might modify the
4894 value back in the caller (e.g., @code{vsnprintf} in the GNU C Library
4895 2.1).
4897 @item Signed @code{>>}
4898 Normally the C @code{>>} right shift of a signed type replicates the
4899 high bit, giving a so-called ``arithmetic'' shift.  But care should be
4900 taken since Standard C doesn't require that behavior.  On those
4901 few processors without a native arithmetic shift (for instance Cray
4902 vector systems) zero bits may be shifted in, the same as a shift of an
4903 unsigned type.
4905 @item Integer @code{/}
4906 C divides signed integers by truncating their quotient toward zero,
4907 yielding the same result as Fortran.  However, before C99 the standard
4908 allowed C implementations to take the floor or ceiling of the quotient
4909 in some cases.  Hardly any implementations took advantage of this
4910 freedom, though, and it's probably not worth worrying about this issue
4911 nowadays.
4912 @end table
4915 @node Particular Functions
4916 @subsection Particular Function Checks
4917 @cindex Function, checking
4919 These macros check for particular C functions---whether they exist, and
4920 in some cases how they respond when given certain arguments.
4922 @anchor{AC_FUNC_ALLOCA}
4923 @defmac AC_FUNC_ALLOCA
4924 @acindex{FUNC_ALLOCA}
4925 @cvindex C_ALLOCA
4926 @cvindex HAVE_ALLOCA_H
4927 @ovindex ALLOCA
4928 @c @fuindex alloca
4929 @prindex @code{alloca}
4930 @hdrindex{alloca.h}
4931 @c @caindex working_alloca_h
4932 Check for the @code{alloca} function.  Define @code{HAVE_ALLOCA_H} if
4933 @file{alloca.h} defines a working @code{alloca}.  If not, look for a
4934 builtin alternative.  If either method succeeds, define
4935 @code{HAVE_ALLOCA}.  Otherwise, set the output variable @code{ALLOCA} to
4936 @samp{$@{LIBOBJDIR@}alloca.o} and define
4937 @code{C_ALLOCA} (so programs can periodically call @samp{alloca (0)} to
4938 garbage collect).  This variable is separate from @code{LIBOBJS} so
4939 multiple programs can share the value of @code{ALLOCA} without needing
4940 to create an actual library, in case only some of them use the code in
4941 @code{LIBOBJS}.  The @samp{$@{LIBOBJDIR@}} prefix serves the same
4942 purpose as in @code{LIBOBJS} (@pxref{AC_LIBOBJ vs LIBOBJS}).
4944 Source files that use @code{alloca} should start with a piece of code
4945 like the following, to declare it properly.
4947 @example
4948 @group
4949 #include <stdlib.h>
4950 #include <stddef.h>
4951 #ifdef HAVE_ALLOCA_H
4952 # include <alloca.h>
4953 #elif !defined alloca
4954 # ifdef __GNUC__
4955 #  define alloca __builtin_alloca
4956 # elif defined _MSC_VER
4957 #  include <malloc.h>
4958 #  define alloca _alloca
4959 # elif !defined HAVE_ALLOCA
4960 #  ifdef  __cplusplus
4961 extern "C"
4962 #  endif
4963 void *alloca (size_t);
4964 # endif
4965 #endif
4966 @end group
4967 @end example
4968 @end defmac
4970 @defmac AC_FUNC_CHOWN
4971 @acindex{FUNC_CHOWN}
4972 @cvindex HAVE_CHOWN
4973 @c @fuindex chown
4974 @prindex @code{chown}
4975 @caindex func_chown_works
4976 If the @code{chown} function is available and works (in particular, it
4977 should accept @option{-1} for @code{uid} and @code{gid}), define
4978 @code{HAVE_CHOWN}.  The result of this macro is cached in the
4979 @code{ac_cv_func_chown_works} variable.
4980 @end defmac
4982 @anchor{AC_FUNC_CLOSEDIR_VOID}
4983 @defmac AC_FUNC_CLOSEDIR_VOID
4984 @acindex{FUNC_CLOSEDIR_VOID}
4985 @cvindex CLOSEDIR_VOID
4986 @c @fuindex closedir
4987 @prindex @code{closedir}
4988 @caindex func_closedir_void
4989 If the @code{closedir} function does not return a meaningful value,
4990 define @code{CLOSEDIR_VOID}.  Otherwise, callers ought to check its
4991 return value for an error indicator.
4993 Currently this test is implemented by running a test program.  When
4994 cross compiling the pessimistic assumption that @code{closedir} does not
4995 return a meaningful value is made.
4997 The result of this macro is cached in the @code{ac_cv_func_closedir_void}
4998 variable.
5000 This macro is obsolescent, as @code{closedir} returns a meaningful value
5001 on current systems.  New programs need not use this macro.
5002 @end defmac
5004 @defmac AC_FUNC_ERROR_AT_LINE
5005 @acindex{FUNC_ERROR_AT_LINE}
5006 @c @fuindex error_at_line
5007 @prindex @code{error_at_line}
5008 @caindex lib_error_at_line
5009 If the @code{error_at_line} function is not found, require an
5010 @code{AC_LIBOBJ} replacement of @samp{error}.
5012 The result of this macro is cached in the @code{ac_cv_lib_error_at_line}
5013 variable.
5015 The @code{AC_FUNC_ERROR_AT_LINE} macro is obsolescent.  New programs
5016 should use Gnulib's @code{error} module.  @xref{Gnulib}.
5017 @end defmac
5019 @defmac AC_FUNC_FNMATCH
5020 @acindex{FUNC_FNMATCH}
5021 @c @fuindex fnmatch
5022 @prindex @code{fnmatch}
5023 @caindex func_fnmatch_works
5024 If the @code{fnmatch} function conforms to Posix, define
5025 @code{HAVE_FNMATCH}.  Detect common implementation bugs, for example,
5026 the bugs in Solaris 2.4.
5028 Unlike the other specific
5029 @code{AC_FUNC} macros, @code{AC_FUNC_FNMATCH} does not replace a
5030 broken/missing @code{fnmatch}.  This is for historical reasons.
5031 See @code{AC_REPLACE_FNMATCH} below.
5033 The result of this macro is cached in the @code{ac_cv_func_fnmatch_works}
5034 variable.
5036 This macro is obsolescent.  New programs should use Gnulib's
5037 @code{fnmatch-posix} module.  @xref{Gnulib}.
5038 @end defmac
5040 @defmac AC_FUNC_FNMATCH_GNU
5041 @acindex{FUNC_FNMATCH_GNU}
5042 @c @fuindex fnmatch
5043 @prindex @code{fnmatch}
5044 @caindex func_fnmatch_gnu
5045 Behave like @code{AC_REPLACE_FNMATCH} (@emph{replace}) but also test
5046 whether @code{fnmatch} supports GNU extensions.  Detect common
5047 implementation bugs, for example, the bugs in the GNU C
5048 Library 2.1.
5050 The result of this macro is cached in the @code{ac_cv_func_fnmatch_gnu}
5051 variable.
5053 This macro is obsolescent.  New programs should use Gnulib's
5054 @code{fnmatch-gnu} module.  @xref{Gnulib}.
5055 @end defmac
5057 @anchor{AC_FUNC_FORK}
5058 @defmac AC_FUNC_FORK
5059 @acindex{FUNC_FORK}
5060 @cvindex HAVE_VFORK_H
5061 @cvindex HAVE_WORKING_FORK
5062 @cvindex HAVE_WORKING_VFORK
5063 @cvindex vfork
5064 @c @fuindex fork
5065 @prindex @code{fork}
5066 @c @fuindex vfork
5067 @prindex @code{vfork}
5068 @hdrindex{vfork.h}
5069 @c @caindex func_fork
5070 @c @caindex func_fork_works
5071 This macro checks for the @code{fork} and @code{vfork} functions.  If a
5072 working @code{fork} is found, define @code{HAVE_WORKING_FORK}.  This macro
5073 checks whether @code{fork} is just a stub by trying to run it.
5075 If @file{vfork.h} is found, define @code{HAVE_VFORK_H}.  If a working
5076 @code{vfork} is found, define @code{HAVE_WORKING_VFORK}.  Otherwise,
5077 define @code{vfork} to be @code{fork} for backward compatibility with
5078 previous versions of @command{autoconf}.  This macro checks for several known
5079 errors in implementations of @code{vfork} and considers the system to not
5080 have a working @code{vfork} if it detects any of them.
5082 Since this macro defines @code{vfork} only for backward compatibility with
5083 previous versions of @command{autoconf} you're encouraged to define it
5084 yourself in new code:
5085 @example
5086 @group
5087 #ifndef HAVE_WORKING_VFORK
5088 # define vfork fork
5089 #endif
5090 @end group
5091 @end example
5093 The results of this macro are cached in the @code{ac_cv_func_fork_works}
5094 and @code{ac_cv_func_vfork_works} variables.  In order to override the
5095 test, you also need to set the @code{ac_cv_func_fork} and
5096 @code{ac_cv_func_vfork} variables.
5097 @end defmac
5099 @defmac AC_FUNC_FSEEKO
5100 @acindex{FUNC_FSEEKO}
5101 @cvindex _LARGEFILE_SOURCE
5102 @cvindex HAVE_FSEEKO
5103 @c @fuindex fseeko
5104 @prindex @code{fseeko}
5105 @c @fuindex ftello
5106 @prindex @code{ftello}
5107 @c @caindex sys_largefile_source
5108 If the @code{fseeko} function is available, define @code{HAVE_FSEEKO}.
5109 Define @code{_LARGEFILE_SOURCE} if necessary to make the prototype
5110 visible on some systems (e.g., glibc 2.2).  Otherwise linkage problems
5111 may occur when compiling with @code{AC_SYS_LARGEFILE} on
5112 largefile-sensitive systems where @code{off_t} does not default to a
5113 64bit entity.  All systems with @code{fseeko} also supply @code{ftello}.
5114 @end defmac
5116 @defmac AC_FUNC_GETGROUPS
5117 @acindex{FUNC_GETGROUPS}
5118 @cvindex HAVE_GETGROUPS
5119 @ovindex GETGROUPS_LIBS
5120 @c @fuindex getgroups
5121 @prindex @code{getgroups}
5122 @caindex func_getgroups_works
5123 If the @code{getgroups} function is available and works (unlike on
5124 Ultrix 4.3, where @samp{getgroups (0, 0)} always fails), define
5125 @code{HAVE_GETGROUPS}.  Set @code{GETGROUPS_LIBS} to any libraries
5126 needed to get that function.  This macro runs @code{AC_TYPE_GETGROUPS}.
5127 @end defmac
5129 @anchor{AC_FUNC_GETLOADAVG}
5130 @defmac AC_FUNC_GETLOADAVG
5131 @acindex{FUNC_GETLOADAVG}
5132 @cvindex SVR4
5133 @cvindex DGUX
5134 @cvindex UMAX
5135 @cvindex UMAX4_3
5136 @cvindex HAVE_NLIST_H
5137 @cvindex NLIST_NAME_UNION
5138 @cvindex GETLOADAVG_PRIVILEGED
5139 @cvindex NEED_SETGID
5140 @cvindex C_GETLOADAVG
5141 @ovindex LIBOBJS
5142 @ovindex NEED_SETGID
5143 @ovindex KMEM_GROUP
5144 @ovindex GETLOADAVG_LIBS
5145 @c @fuindex getloadavg
5146 @prindex @code{getloadavg}
5147 Check how to get the system load averages.  To perform its tests
5148 properly, this macro needs the file @file{getloadavg.c}; therefore, be
5149 sure to set the @code{AC_LIBOBJ} replacement directory properly (see
5150 @ref{Generic Functions}, @code{AC_CONFIG_LIBOBJ_DIR}).
5152 If the system has the @code{getloadavg} function, define
5153 @code{HAVE_GETLOADAVG}, and set @code{GETLOADAVG_LIBS} to any libraries
5154 necessary to get that function.  Also add @code{GETLOADAVG_LIBS} to
5155 @code{LIBS}.  Otherwise, require an @code{AC_LIBOBJ} replacement for
5156 @samp{getloadavg} and possibly define several other C preprocessor
5157 macros and output variables:
5159 @enumerate
5160 @item
5161 Define @code{C_GETLOADAVG}.
5163 @item
5164 Define @code{SVR4}, @code{DGUX}, @code{UMAX}, or @code{UMAX4_3} if on
5165 those systems.
5167 @item
5168 @hdrindex{nlist.h}
5169 If @file{nlist.h} is found, define @code{HAVE_NLIST_H}.
5171 @item
5172 If @samp{struct nlist} has an @samp{n_un.n_name} member, define
5173 @code{HAVE_STRUCT_NLIST_N_UN_N_NAME}.  The obsolete symbol
5174 @code{NLIST_NAME_UNION} is still defined, but do not depend upon it.
5176 @item
5177 Programs may need to be installed set-group-ID (or set-user-ID) for
5178 @code{getloadavg} to work.  In this case, define
5179 @code{GETLOADAVG_PRIVILEGED}, set the output variable @code{NEED_SETGID}
5180 to @samp{true} (and otherwise to @samp{false}), and set
5181 @code{KMEM_GROUP} to the name of the group that should own the installed
5182 program.
5183 @end enumerate
5185 The @code{AC_FUNC_GETLOADAVG} macro is obsolescent.  New programs should
5186 use Gnulib's @code{getloadavg} module.  @xref{Gnulib}.
5187 @end defmac
5189 @anchor{AC_FUNC_GETMNTENT}
5190 @defmac AC_FUNC_GETMNTENT
5191 @acindex{FUNC_GETMNTENT}
5192 @cvindex HAVE_GETMNTENT
5193 @c @fuindex getmntent
5194 @prindex @code{getmntent}
5195 @caindex search_getmntent
5196 Check for @code{getmntent} in the standard C library, and then in the
5197 @file{sun}, @file{seq}, and @file{gen} libraries, for UNICOS,
5198 IRIX 4, PTX, and UnixWare, respectively.  Then, if
5199 @code{getmntent} is available, define @code{HAVE_GETMNTENT} and set
5200 @code{ac_cv_func_getmntent} to @code{yes}.  Otherwise set
5201 @code{ac_cv_func_getmntent} to @code{no}.
5203 The result of this macro can be overridden by setting the cache variable
5204 @code{ac_cv_search_getmntent}.
5205 @end defmac
5207 @defmac AC_FUNC_GETPGRP
5208 @acindex{FUNC_GETPGRP}
5209 @cvindex GETPGRP_VOID
5210 @c @fuindex getpgid
5211 @c @fuindex getpgrp
5212 @prindex @code{getpgid}
5213 @prindex @code{getpgrp}
5214 @caindex func_getpgrp_void
5215 Define @code{GETPGRP_VOID} if it is an error to pass 0 to
5216 @code{getpgrp}; this is the Posix behavior.  On older BSD
5217 systems, you must pass 0 to @code{getpgrp}, as it takes an argument and
5218 behaves like Posix's @code{getpgid}.
5220 @example
5221 #ifdef GETPGRP_VOID
5222   pid = getpgrp ();
5223 #else
5224   pid = getpgrp (0);
5225 #endif
5226 @end example
5228 This macro does not check whether
5229 @code{getpgrp} exists at all; if you need to work in that situation,
5230 first call @code{AC_CHECK_FUNC} for @code{getpgrp}.
5232 The result of this macro is cached in the @code{ac_cv_func_getpgrp_void}
5233 variable.
5235 This macro is obsolescent, as current systems have a @code{getpgrp}
5236 whose signature conforms to Posix.  New programs need not use this macro.
5237 @end defmac
5239 @defmac AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
5240 @acindex{FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK}
5241 @cvindex LSTAT_FOLLOWS_SLASHED_SYMLINK
5242 @c @fuindex lstat
5243 @prindex @code{lstat}
5244 @caindex func_lstat_dereferences_slashed_symlink
5245 If @file{link} is a symbolic link, then @code{lstat} should treat
5246 @file{link/} the same as @file{link/.}.  However, many older
5247 @code{lstat} implementations incorrectly ignore trailing slashes.
5249 It is safe to assume that if @code{lstat} incorrectly ignores
5250 trailing slashes, then other symbolic-link-aware functions like
5251 @code{unlink} also incorrectly ignore trailing slashes.
5253 If @code{lstat} behaves properly, define
5254 @code{LSTAT_FOLLOWS_SLASHED_SYMLINK}, otherwise require an
5255 @code{AC_LIBOBJ} replacement of @code{lstat}.
5257 The result of this macro is cached in the
5258 @code{ac_cv_func_lstat_dereferences_slashed_symlink} variable.
5260 The @code{AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK} macro is obsolescent.
5261 New programs should use Gnulib's @code{lstat} module.  @xref{Gnulib}.
5262 @end defmac
5264 @defmac AC_FUNC_MALLOC
5265 @acindex{FUNC_MALLOC}
5266 @cvindex HAVE_MALLOC
5267 @cvindex malloc
5268 @c @fuindex malloc
5269 @prindex @code{malloc}
5270 @caindex func_malloc_0_nonnull
5271 If the @code{malloc} function is compatible with the GNU C
5272 library @code{malloc} (i.e., @samp{malloc (0)} returns a valid
5273 pointer), define @code{HAVE_MALLOC} to 1.  Otherwise define
5274 @code{HAVE_MALLOC} to 0, ask for an @code{AC_LIBOBJ} replacement for
5275 @samp{malloc}, and define @code{malloc} to @code{rpl_malloc} so that the
5276 native @code{malloc} is not used in the main project.
5278 Typically, the replacement file @file{malloc.c} should look like (note
5279 the @samp{#undef malloc}):
5281 @verbatim
5282 #include <config.h>
5283 #undef malloc
5285 #include <sys/types.h>
5287 void *malloc ();
5289 /* Allocate an N-byte block of memory from the heap.
5290    If N is zero, allocate a 1-byte block.  */
5292 void *
5293 rpl_malloc (size_t n)
5295   if (n == 0)
5296     n = 1;
5297   return malloc (n);
5299 @end verbatim
5301 The result of this macro is cached in the
5302 @code{ac_cv_func_malloc_0_nonnull} variable.
5303 @end defmac
5305 @defmac AC_FUNC_MBRTOWC
5306 @acindex{FUNC_MBRTOWC}
5307 @cvindex HAVE_MBRTOWC
5308 @c @fuindex mbrtowc
5309 @prindex @code{mbrtowc}
5310 @caindex func_mbrtowc
5311 Define @code{HAVE_MBRTOWC} to 1 if the function @code{mbrtowc} and the
5312 type @code{mbstate_t} are properly declared.
5314 The result of this macro is cached in the @code{ac_cv_func_mbrtowc}
5315 variable.
5316 @end defmac
5318 @defmac AC_FUNC_MEMCMP
5319 @acindex{FUNC_MEMCMP}
5320 @ovindex LIBOBJS
5321 @c @fuindex memcmp
5322 @prindex @code{memcmp}
5323 @caindex func_memcmp_working
5324 If the @code{memcmp} function is not available, or does not work on
5325 8-bit data (like the one on SunOS 4.1.3), or fails when comparing 16
5326 bytes or more and with at least one buffer not starting on a 4-byte
5327 boundary (such as the one on NeXT x86 OpenStep), require an
5328 @code{AC_LIBOBJ} replacement for @samp{memcmp}.
5330 The result of this macro is cached in the
5331 @code{ac_cv_func_memcmp_working} variable.
5333 This macro is obsolescent, as current systems have a working
5334 @code{memcmp}.  New programs need not use this macro.
5335 @end defmac
5337 @defmac AC_FUNC_MKTIME
5338 @acindex{FUNC_MKTIME}
5339 @ovindex LIBOBJS
5340 @c @fuindex mktime
5341 @prindex @code{mktime}
5342 @caindex func_working_mktime
5343 If the @code{mktime} function is not available, or does not work
5344 correctly, require an @code{AC_LIBOBJ} replacement for @samp{mktime}.
5345 For the purposes of this test, @code{mktime} should conform to the
5346 Posix standard and should be the inverse of
5347 @code{localtime}.
5349 The result of this macro is cached in the
5350 @code{ac_cv_func_working_mktime} variable.
5352 The @code{AC_FUNC_MKTIME} macro is obsolescent.  New programs should
5353 use Gnulib's @code{mktime} module.  @xref{Gnulib}.
5354 @end defmac
5356 @anchor{AC_FUNC_MMAP}
5357 @defmac AC_FUNC_MMAP
5358 @acindex{FUNC_MMAP}
5359 @cvindex HAVE_MMAP
5360 @c @fuindex mmap
5361 @prindex @code{mmap}
5362 @caindex func_mmap_fixed_mapped
5363 If the @code{mmap} function exists and works correctly, define
5364 @code{HAVE_MMAP}.  This checks only private fixed mapping of already-mapped
5365 memory.
5367 The result of this macro is cached in the
5368 @code{ac_cv_func_mmap_fixed_mapped} variable.
5369 @end defmac
5371 @defmac AC_FUNC_OBSTACK
5372 @acindex{FUNC_OBSTACK}
5373 @cvindex HAVE_OBSTACK
5374 @cindex obstack
5375 @caindex func_obstack
5376 If the obstacks are found, define @code{HAVE_OBSTACK}, else require an
5377 @code{AC_LIBOBJ} replacement for @samp{obstack}.
5379 The result of this macro is cached in the @code{ac_cv_func_obstack}
5380 variable.
5381 @end defmac
5383 @defmac AC_FUNC_REALLOC
5384 @acindex{FUNC_REALLOC}
5385 @cvindex HAVE_REALLOC
5386 @cvindex realloc
5387 @c @fuindex realloc
5388 @prindex @code{realloc}
5389 @caindex func_realloc_0_nonnull
5390 If the @code{realloc} function is compatible with the GNU C
5391 library @code{realloc} (i.e., @samp{realloc (NULL, 0)} returns a
5392 valid pointer), define @code{HAVE_REALLOC} to 1.  Otherwise define
5393 @code{HAVE_REALLOC} to 0, ask for an @code{AC_LIBOBJ} replacement for
5394 @samp{realloc}, and define @code{realloc} to @code{rpl_realloc} so that
5395 the native @code{realloc} is not used in the main project.  See
5396 @code{AC_FUNC_MALLOC} for details.
5398 The result of this macro is cached in the
5399 @code{ac_cv_func_realloc_0_nonnull} variable.
5400 @end defmac
5402 @defmac AC_FUNC_SELECT_ARGTYPES
5403 @acindex{FUNC_SELECT_ARGTYPES}
5404 @cvindex SELECT_TYPE_ARG1
5405 @cvindex SELECT_TYPE_ARG234
5406 @cvindex SELECT_TYPE_ARG5
5407 @c @fuindex select
5408 @prindex @code{select}
5409 @c @caindex func_select_args
5410 Determines the correct type to be passed for each of the
5411 @code{select} function's arguments, and defines those types
5412 in @code{SELECT_TYPE_ARG1}, @code{SELECT_TYPE_ARG234}, and
5413 @code{SELECT_TYPE_ARG5} respectively.  @code{SELECT_TYPE_ARG1} defaults
5414 to @samp{int}, @code{SELECT_TYPE_ARG234} defaults to @samp{int *},
5415 and @code{SELECT_TYPE_ARG5} defaults to @samp{struct timeval *}.
5417 This macro is obsolescent, as current systems have a @code{select} whose
5418 signature conforms to Posix.  New programs need not use this macro.
5419 @end defmac
5421 @defmac AC_FUNC_SETPGRP
5422 @acindex{FUNC_SETPGRP}
5423 @cvindex SETPGRP_VOID
5424 @c @fuindex setpgrp
5425 @prindex @code{setpgrp}
5426 @caindex func_setpgrp_void
5427 If @code{setpgrp} takes no argument (the Posix version), define
5428 @code{SETPGRP_VOID}.  Otherwise, it is the BSD version, which takes
5429 two process IDs as arguments.  This macro does not check whether
5430 @code{setpgrp} exists at all; if you need to work in that situation,
5431 first call @code{AC_CHECK_FUNC} for @code{setpgrp}.
5433 The result of this macro is cached in the @code{ac_cv_func_setpgrp_void}
5434 variable.
5436 This macro is obsolescent, as current systems have a @code{setpgrp}
5437 whose signature conforms to Posix.  New programs need not use this macro.
5438 @end defmac
5440 @defmac AC_FUNC_STAT
5441 @defmacx AC_FUNC_LSTAT
5442 @acindex{FUNC_STAT}
5443 @acindex{FUNC_LSTAT}
5444 @cvindex HAVE_STAT_EMPTY_STRING_BUG
5445 @cvindex HAVE_LSTAT_EMPTY_STRING_BUG
5446 @c @fuindex stat
5447 @prindex @code{stat}
5448 @c @fuindex lstat
5449 @prindex @code{lstat}
5450 @caindex func_stat_empty_string_bug
5451 @caindex func_lstat_empty_string_bug
5452 Determine whether @code{stat} or @code{lstat} have the bug that it
5453 succeeds when given the zero-length file name as argument.  The @code{stat}
5454 and @code{lstat} from SunOS 4.1.4 and the Hurd (as of 1998-11-01) do
5455 this.
5457 If it does, then define @code{HAVE_STAT_EMPTY_STRING_BUG} (or
5458 @code{HAVE_LSTAT_EMPTY_STRING_BUG}) and ask for an @code{AC_LIBOBJ}
5459 replacement of it.
5461 The results of these macros are cached in the
5462 @code{ac_cv_func_stat_empty_string_bug} and the
5463 @code{ac_cv_func_lstat_empty_string_bug} variables, respectively.
5465 These macros are obsolescent, as no current systems have the bug.
5466 New programs need not use these macros.
5467 @end defmac
5469 @anchor{AC_FUNC_STRCOLL}
5470 @defmac AC_FUNC_STRCOLL
5471 @acindex{FUNC_STRCOLL}
5472 @cvindex HAVE_STRCOLL
5473 @c @fuindex strcoll
5474 @prindex @code{strcoll}
5475 @caindex func_strcoll_works
5476 If the @code{strcoll} function exists and works correctly, define
5477 @code{HAVE_STRCOLL}.  This does a bit more than
5478 @samp{AC_CHECK_FUNCS(strcoll)}, because some systems have incorrect
5479 definitions of @code{strcoll} that should not be used.
5481 The result of this macro is cached in the @code{ac_cv_func_strcoll_works}
5482 variable.
5483 @end defmac
5485 @defmac AC_FUNC_STRERROR_R
5486 @acindex{FUNC_STRERROR_R}
5487 @cvindex HAVE_STRERROR_R
5488 @cvindex HAVE_DECL_STRERROR_R
5489 @cvindex STRERROR_R_CHAR_P
5490 @c @fuindex strerror_r
5491 @caindex func_strerror_r_char_p
5492 @prindex @code{strerror_r}
5493 If @code{strerror_r} is available, define @code{HAVE_STRERROR_R}, and if
5494 it is declared, define @code{HAVE_DECL_STRERROR_R}.  If it returns a
5495 @code{char *} message, define @code{STRERROR_R_CHAR_P}; otherwise it
5496 returns an @code{int} error number.  The Thread-Safe Functions option of
5497 Posix requires @code{strerror_r} to return @code{int}, but
5498 many systems (including, for example, version 2.2.4 of the GNU C
5499 Library) return a @code{char *} value that is not necessarily equal to
5500 the buffer argument.
5502 The result of this macro is cached in the
5503 @code{ac_cv_func_strerror_r_char_p} variable.
5504 @end defmac
5506 @anchor{AC_FUNC_STRFTIME}
5507 @defmac AC_FUNC_STRFTIME
5508 @acindex{FUNC_STRFTIME}
5509 @cvindex HAVE_STRFTIME
5510 @c @fuindex strftime
5511 @prindex @code{strftime}
5512 Check for @code{strftime} in the @file{intl} library, for SCO Unix.
5513 Then, if @code{strftime} is available, define @code{HAVE_STRFTIME}.
5515 This macro is obsolescent, as no current systems require the @file{intl}
5516 library for @code{strftime}.  New programs need not use this macro.
5517 @end defmac
5519 @defmac AC_FUNC_STRTOD
5520 @acindex{FUNC_STRTOD}
5521 @ovindex POW_LIB
5522 @c @fuindex strtod
5523 @prindex @code{strtod}
5524 @caindex func_strtod
5525 @caindex func_pow
5526 If the @code{strtod} function does not exist or doesn't work correctly,
5527 ask for an @code{AC_LIBOBJ} replacement of @samp{strtod}.  In this case,
5528 because @file{strtod.c} is likely to need @samp{pow}, set the output
5529 variable @code{POW_LIB} to the extra library needed.
5531 This macro caches its result in the @code{ac_cv_func_strtod} variable
5532 and depends upon the result in the @code{ac_cv_func_pow} variable.
5534 The @code{AC_FUNC_STRTOD} macro is obsolescent.  New programs should
5535 use Gnulib's @code{strtod} module.  @xref{Gnulib}.
5536 @end defmac
5538 @defmac AC_FUNC_STRTOLD
5539 @acindex{FUNC_STRTOLD}
5540 @cvindex HAVE_STRTOLD
5541 @prindex @code{strtold}
5542 @caindex func_strtold
5543 If the @code{strtold} function exists and conforms to C99 or later, define
5544 @code{HAVE_STRTOLD}.
5546 This macro caches its result in the @code{ac_cv_func_strtold} variable.
5547 @end defmac
5549 @defmac AC_FUNC_STRNLEN
5550 @acindex{FUNC_STRNLEN}
5551 @cvindex HAVE_STRNLEN
5552 @c @fuindex strnlen
5553 @prindex @code{strnlen}
5554 @caindex func_strnlen_working
5555 If the @code{strnlen} function is not available, or is buggy (like the one
5556 from AIX 4.3), require an @code{AC_LIBOBJ} replacement for it.
5558 This macro caches its result in the @code{ac_cv_func_strnlen_working}
5559 variable.
5560 @end defmac
5562 @anchor{AC_FUNC_UTIME_NULL}
5563 @defmac AC_FUNC_UTIME_NULL
5564 @acindex{FUNC_UTIME_NULL}
5565 @cvindex HAVE_UTIME_NULL
5566 @c @fuindex utime
5567 @prindex @code{utime}
5568 @caindex func_utime_null
5569 If @samp{utime (@var{file}, NULL)} sets @var{file}'s timestamp to
5570 the present, define @code{HAVE_UTIME_NULL}.
5572 This macro caches its result in the @code{ac_cv_func_utime_null}
5573 variable.
5575 This macro is obsolescent, as all current systems have a @code{utime}
5576 that behaves this way.  New programs need not use this macro.
5577 @end defmac
5579 @anchor{AC_FUNC_VPRINTF}
5580 @defmac AC_FUNC_VPRINTF
5581 @acindex{FUNC_VPRINTF}
5582 @cvindex HAVE_VPRINTF
5583 @cvindex HAVE_DOPRNT
5584 @c @fuindex vprintf
5585 @prindex @code{vprintf}
5586 @c @fuindex vsprintf
5587 @prindex @code{vsprintf}
5588 If @code{vprintf} is found, define @code{HAVE_VPRINTF}.  Otherwise, if
5589 @code{_doprnt} is found, define @code{HAVE_DOPRNT}.  (If @code{vprintf}
5590 is available, you may assume that @code{vfprintf} and @code{vsprintf}
5591 are also available.)
5593 This macro is obsolescent, as all current systems have @code{vprintf}.
5594 New programs need not use this macro.
5595 @end defmac
5597 @defmac AC_REPLACE_FNMATCH
5598 @acindex{REPLACE_FNMATCH}
5599 @c @fuindex fnmatch
5600 @prindex @code{fnmatch}
5601 @hdrindex{fnmatch.h}
5602 @caindex func_fnmatch_works
5603 If the @code{fnmatch} function does not conform to Posix (see
5604 @code{AC_FUNC_FNMATCH}), ask for its @code{AC_LIBOBJ} replacement.
5606 The files @file{fnmatch.c}, @file{fnmatch_loop.c}, and @file{fnmatch_.h}
5607 in the @code{AC_LIBOBJ} replacement directory are assumed to contain a
5608 copy of the source code of GNU @code{fnmatch}.  If necessary,
5609 this source code is compiled as an @code{AC_LIBOBJ} replacement, and the
5610 @file{fnmatch_.h} file is linked to @file{fnmatch.h} so that it can be
5611 included in place of the system @code{<fnmatch.h>}.
5613 This macro caches its result in the @code{ac_cv_func_fnmatch_works}
5614 variable.
5616 This macro is obsolescent, as it assumes the use of particular source
5617 files.  New programs should use Gnulib's @code{fnmatch-posix} module,
5618 which provides this macro along with the source files.  @xref{Gnulib}.
5619 @end defmac
5623 @node Generic Functions
5624 @subsection Generic Function Checks
5626 These macros are used to find functions not covered by the ``particular''
5627 test macros.  If the functions might be in libraries other than the
5628 default C library, first call @code{AC_CHECK_LIB} for those libraries.
5629 If you need to check the behavior of a function as well as find out
5630 whether it is present, you have to write your own test for
5631 it (@pxref{Writing Tests}).
5633 @anchor{AC_CHECK_FUNC}
5634 @defmac AC_CHECK_FUNC (@var{function}, @ovar{action-if-found}, @
5635   @ovar{action-if-not-found})
5636 @acindex{CHECK_FUNC}
5637 @caindex func_@var{function}
5638 If C function @var{function} is available, run shell commands
5639 @var{action-if-found}, otherwise @var{action-if-not-found}.  If you just
5640 want to define a symbol if the function is available, consider using
5641 @code{AC_CHECK_FUNCS} instead.  This macro checks for functions with C
5642 linkage even when @code{AC_LANG(C++)} has been called, since C is more
5643 standardized than C++.  (@pxref{Language Choice}, for more information
5644 about selecting the language for checks.)
5646 This macro caches its result in the @code{ac_cv_func_@var{function}}
5647 variable.
5648 @end defmac
5650 @anchor{AC_CHECK_FUNCS}
5651 @defmac AC_CHECK_FUNCS (@var{function}@dots{}, @ovar{action-if-found}, @
5652   @ovar{action-if-not-found})
5653 @acindex{CHECK_FUNCS}
5654 @cvindex HAVE_@var{function}
5655 For each @var{function} enumerated in the blank-or-newline-separated argument
5656 list, define @code{HAVE_@var{function}} (in all capitals) if it is available.
5657 If @var{action-if-found} is given, it is additional shell code to
5658 execute when one of the functions is found.  You can give it a value of
5659 @samp{break} to break out of the loop on the first match.  If
5660 @var{action-if-not-found} is given, it is executed when one of the
5661 functions is not found.
5663 Results are cached for each @var{function} as in @code{AC_CHECK_FUNC}.
5664 @end defmac
5666 @defmac AC_CHECK_FUNCS_ONCE (@var{function}@dots{})
5667 @acindex{CHECK_FUNCS_ONCE}
5668 @cvindex HAVE_@var{function}
5669 For each @var{function} enumerated in the blank-or-newline-separated argument
5670 list, define @code{HAVE_@var{function}} (in all capitals) if it is available.
5671 This is a once-only variant of @code{AC_CHECK_FUNCS}.  It generates the
5672 checking code at most once, so that @command{configure} is smaller and
5673 faster; but the checks cannot be conditionalized and are always done once,
5674 early during the @command{configure} run.
5675 @end defmac
5677 @sp 1
5679 Autoconf follows a philosophy that was formed over the years by those
5680 who have struggled for portability: isolate the portability issues in
5681 specific files, and then program as if you were in a Posix
5682 environment.  Some functions may be missing or unfixable, and your
5683 package must be ready to replace them.
5685 Suitable replacements for many such problem functions are available from
5686 Gnulib (@pxref{Gnulib}).
5688 @defmac AC_LIBOBJ (@var{function})
5689 @acindex{LIBOBJ}
5690 @ovindex LIBOBJS
5691 Specify that @samp{@var{function}.c} must be included in the executables
5692 to replace a missing or broken implementation of @var{function}.
5694 @vrindex ac_objext
5695 Technically, it adds @samp{@var{function}.$ac_objext} to the output
5696 variable @code{LIBOBJS} if it is not already in, and calls
5697 @code{AC_LIBSOURCE} for @samp{@var{function}.c}.  You should not
5698 directly change @code{LIBOBJS}, since this is not traceable.
5699 @end defmac
5701 @defmac AC_LIBSOURCE (@var{file})
5702 @acindex{LIBSOURCE}
5703 Specify that @var{file} might be needed to compile the project.  If you
5704 need to know what files might be needed by a @file{configure.ac}, you
5705 should trace @code{AC_LIBSOURCE}.  @var{file} must be a literal.
5707 This macro is called automatically from @code{AC_LIBOBJ}, but you must
5708 call it explicitly if you pass a shell variable to @code{AC_LIBOBJ}.  In
5709 that case, since shell variables cannot be traced statically, you must
5710 pass to @code{AC_LIBSOURCE} any possible files that the shell variable
5711 might cause @code{AC_LIBOBJ} to need.  For example, if you want to pass
5712 a variable @code{$foo_or_bar} to @code{AC_LIBOBJ} that holds either
5713 @code{"foo"} or @code{"bar"}, you should do:
5715 @example
5716 AC_LIBSOURCE([foo.c])
5717 AC_LIBSOURCE([bar.c])
5718 AC_LIBOBJ([$foo_or_bar])
5719 @end example
5721 @noindent
5722 There is usually a way to avoid this, however, and you are encouraged to
5723 simply call @code{AC_LIBOBJ} with literal arguments.
5725 Note that this macro replaces the obsolete @code{AC_LIBOBJ_DECL}, with
5726 slightly different semantics: the old macro took the function name,
5727 e.g., @code{foo}, as its argument rather than the file name.
5728 @end defmac
5730 @defmac AC_LIBSOURCES (@var{files})
5731 @acindex{LIBSOURCES}
5732 Like @code{AC_LIBSOURCE}, but accepts one or more @var{files} in a
5733 comma-separated M4 list.  Thus, the above example might be rewritten:
5735 @example
5736 AC_LIBSOURCES([foo.c, bar.c])
5737 AC_LIBOBJ([$foo_or_bar])
5738 @end example
5739 @end defmac
5741 @defmac AC_CONFIG_LIBOBJ_DIR (@var{directory})
5742 @acindex{CONFIG_LIBOBJ_DIR}
5743 Specify that @code{AC_LIBOBJ} replacement files are to be found in
5744 @var{directory}, a name relative to the top level of the
5745 source tree.  The replacement directory defaults to @file{.}, the top
5746 level directory, and the most typical value is @file{lib}, corresponding
5747 to @samp{AC_CONFIG_LIBOBJ_DIR([lib])}.
5749 @command{configure} might need to know the replacement directory for the
5750 following reasons: (i) some checks use the replacement files, (ii) some
5751 macros bypass broken system headers by installing links to the
5752 replacement headers (iii) when used in conjunction with Automake,
5753 within each makefile, @var{directory} is used as a relative path
5754 from @code{$(top_srcdir)} to each object named in @code{LIBOBJS} and
5755 @code{LTLIBOBJS}, etc.
5756 @end defmac
5758 @sp 1
5760 It is common to merely check for the existence of a function, and ask
5761 for its @code{AC_LIBOBJ} replacement if missing.  The following macro is
5762 a convenient shorthand.
5764 @defmac AC_REPLACE_FUNCS (@var{function}@dots{})
5765 @acindex{REPLACE_FUNCS}
5766 @cvindex HAVE_@var{function}
5767 @ovindex LIBOBJS
5768 Like @code{AC_CHECK_FUNCS}, but uses @samp{AC_LIBOBJ(@var{function})} as
5769 @var{action-if-not-found}.  You can declare your replacement function by
5770 enclosing the prototype in @samp{#ifndef HAVE_@var{function}}.  If the
5771 system has the function, it probably declares it in a header file you
5772 should be including, so you shouldn't redeclare it lest your declaration
5773 conflict.
5774 @end defmac
5776 @node Header Files
5777 @section Header Files
5778 @cindex Header, checking
5780 The following macros check for the presence of certain C header files.
5781 If there is no macro specifically defined to check for a header file you need,
5782 and you don't need to check for any special properties of
5783 it, then you can use one of the general header-file check macros.
5785 @menu
5786 * Header Portability::          Collected knowledge on common headers
5787 * Particular Headers::          Special handling to find certain headers
5788 * Generic Headers::             How to find other headers
5789 @end menu
5791 @node Header Portability
5792 @subsection Portability of Headers
5793 @cindex Portability of headers
5794 @cindex Header portability
5796 This section documents some collected knowledge about common headers,
5797 and the problems they cause.  By definition, this list always requires
5798 additions.  A much more complete list is maintained by the Gnulib
5799 project (@pxref{Gnulib}), covering @ref{Header File Substitutes, ,
5800 Posix Headers, gnulib, GNU gnulib} and @ref{Glibc Header File
5801 Substitutes, , Glibc Headers, gnulib, GNU gnulib}.  Please help us keep
5802 the gnulib list as complete as possible.
5804 When we say that a header ``may require'' some set of other headers, we
5805 mean that it may be necessary for you to manually include those other
5806 headers first, or the contents of the header under test will fail to
5807 compile.  When checking for these headers, you must provide the
5808 potentially-required headers in the @var{includes} argument to
5809 @code{AC_CHECK_HEADER} or @code{AC_CHECK_HEADERS}, or the check will
5810 fail spuriously.  @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes})
5811 arranges to include a number of common requirements and should normally
5812 come first in your @var{includes}.  For example, @file{net/if.h} may
5813 require @file{sys/types.h}, @file{sys/socket.h}, or both, and
5814 @code{AC_INCLUDES_DEFAULT} handles @file{sys/types.h} but not
5815 @file{sys/socket.h}, so you should check for it like this:
5817 @example
5818 AC_CHECK_HEADERS([sys/socket.h])
5819 AC_CHECK_HEADERS([net/if.h], [], [],
5820 [AC_INCLUDES_DEFAULT[
5821 #ifdef HAVE_SYS_SOCKET_H
5822 # include <sys/socket.h>
5823 #endif
5825 @end example
5827 Note that the example mixes single quoting (for@code{AC_INCLUDES_DEFAULT},
5828 so that it gets expanded) and double quoting (to ensure that each
5829 preprocessor @code{#} gets treated as a literal string rather than a
5830 comment).
5832 @table @asis
5834 @item @file{limits.h}
5835 In C99 and later, @file{limits.h} defines @code{LLONG_MIN},
5836 @code{LLONG_MAX}, and @code{ULLONG_MAX}, but many almost-C99
5837 environments (e.g., default GCC 4.0.2 + glibc 2.4) do not
5838 define them.
5840 @item @file{memory.h}
5841 @hdrindex{memory.h}
5842 This header file is obsolete; use @file{string.h} instead.
5844 @item @file{strings.h}
5845 @hdrindex{strings.h}
5846 On some systems, this is the only header that declares
5847 @code{strcasecmp}, @code{strncasecmp}, and @code{ffs}.
5849 This header may or may not include @file{string.h} for you.  However, on
5850 all recent systems it is safe to include both @file{string.h} and
5851 @file{strings.h}, in either order, in the same source file.
5853 @item @file{inttypes.h} vs.@: @file{stdint.h}
5854 @hdrindex{inttypes.h}
5855 @hdrindex{stdint.h}
5856 C99 specifies that @file{inttypes.h} includes @file{stdint.h}, so there's
5857 no need to include @file{stdint.h} separately in a standard environment.
5858 However, some implementations have @file{inttypes.h} but not @file{stdint.h}
5859 (e.g., Solaris 7), and some have @file{stdint.h} but not @file{inttypes.h}
5860 (e.g. MSVC 2012).  Therefore, it is necessary to check for each and include
5861 each only if available.
5863 @item @file{linux/irda.h}
5864 @hdrindex{linux/irda.h}
5865 This header may require @file{linux/types.h} and/or @file{sys/socket.h}.
5867 @item @file{linux/random.h}
5868 @hdrindex{linux/random.h}
5869 This header may require @file{linux/types.h}.
5871 @item @file{net/if.h}
5872 @hdrindex{net/if.h}
5873 This header may require @file{sys/types.h} and/or @file{sys/socket.h}.
5875 @item @file{netinet/if_ether.h}
5876 @hdrindex{netinet/if_ether.h}
5877 This header may require some combination of @file{sys/types.h},
5878 @file{sys/socket.h}, @file{netinet/in.h}, and @file{net/if.h}.
5880 @item @file{sys/mount.h}
5881 @hdrindex{sys/mount.h}
5882 This header may require @file{sys/params.h}.
5884 @item @file{sys/ptem.h}
5885 @hdrindex{sys/ptem.h}
5886 This header may require @file{sys/stream.h}.
5888 @item @file{sys/socket.h}
5889 @hdrindex{sys/socket.h}
5890 This header may require @file{sys/types.h}.
5892 @item @file{sys/ucred.h}
5893 @hdrindex{sys/ucred.h}
5894 This header may require @file{sys/types.h}.
5896 @item @file{X11/extensions/scrnsaver.h}
5897 @hdrindex{X11/extensions/scrnsaver.h}
5898 Using XFree86, this header requires @file{X11/Xlib.h}, which is probably
5899 so required that you might not even consider looking for it.
5901 @end table
5904 @node Particular Headers
5905 @subsection Particular Header Checks
5907 These macros check for particular system header files---whether they
5908 exist, and in some cases whether they declare certain symbols.
5910 @defmac AC_CHECK_HEADER_STDBOOL
5911 @acindex{CHECK_HEADER_STDBOOL}
5912 @cvindex HAVE__BOOL
5913 @hdrindex{stdbool.h}
5914 @caindex header_stdbool_h
5915 Check whether @file{stdbool.h} exists and conforms to C99 or later,
5916 and cache the result in the @code{ac_cv_header_stdbool_h} variable.
5917 If the type @code{_Bool} is defined, define @code{HAVE__BOOL} to 1.
5919 This macro is intended for use by Gnulib (@pxref{Gnulib}) and other
5920 packages that supply a substitute @file{stdbool.h} on platforms lacking
5921 a conforming one.  The @code{AC_HEADER_STDBOOL} macro is better for code
5922 that explicitly checks for @file{stdbool.h}.
5923 @end defmac
5925 @defmac AC_HEADER_ASSERT
5926 @acindex{HEADER_ASSERT}
5927 @cvindex NDEBUG
5928 @hdrindex{assert.h}
5929 Check whether to enable assertions in the style of @file{assert.h}.
5930 Assertions are enabled by default, but the user can override this by
5931 invoking @command{configure} with the @option{--disable-assert} option.
5932 @end defmac
5934 @anchor{AC_HEADER_DIRENT}
5935 @defmac AC_HEADER_DIRENT
5936 @acindex{HEADER_DIRENT}
5937 @cvindex HAVE_DIRENT_H
5938 @cvindex HAVE_NDIR_H
5939 @cvindex HAVE_SYS_DIR_H
5940 @cvindex HAVE_SYS_NDIR_H
5941 @hdrindex{dirent.h}
5942 @hdrindex{sys/ndir.h}
5943 @hdrindex{sys/dir.h}
5944 @hdrindex{ndir.h}
5945 Check for the following header files.  For the first one that is
5946 found and defines @samp{DIR}, define the listed C preprocessor macro:
5948 @multitable {@file{sys/ndir.h}} {@code{HAVE_SYS_NDIR_H}}
5949 @item @file{dirent.h}   @tab @code{HAVE_DIRENT_H}
5950 @item @file{sys/ndir.h} @tab @code{HAVE_SYS_NDIR_H}
5951 @item @file{sys/dir.h}  @tab @code{HAVE_SYS_DIR_H}
5952 @item @file{ndir.h}     @tab @code{HAVE_NDIR_H}
5953 @end multitable
5955 The directory-library declarations in your source code should look
5956 something like the following:
5958 @example
5959 @group
5960 #include <sys/types.h>
5961 #ifdef HAVE_DIRENT_H
5962 # include <dirent.h>
5963 # define NAMLEN(dirent) strlen ((dirent)->d_name)
5964 #else
5965 # define dirent direct
5966 # define NAMLEN(dirent) ((dirent)->d_namlen)
5967 # ifdef HAVE_SYS_NDIR_H
5968 #  include <sys/ndir.h>
5969 # endif
5970 # ifdef HAVE_SYS_DIR_H
5971 #  include <sys/dir.h>
5972 # endif
5973 # ifdef HAVE_NDIR_H
5974 #  include <ndir.h>
5975 # endif
5976 #endif
5977 @end group
5978 @end example
5980 Using the above declarations, the program would declare variables to be
5981 of type @code{struct dirent}, not @code{struct direct}, and would access
5982 the length of a directory entry name by passing a pointer to a
5983 @code{struct dirent} to the @code{NAMLEN} macro.
5985 This macro also checks for the SCO Xenix @file{dir} and @file{x} libraries.
5987 This macro is obsolescent, as all current systems with directory
5988 libraries have @code{<dirent.h>}.  New programs need not use this macro.
5990 Also see @code{AC_STRUCT_DIRENT_D_INO} and
5991 @code{AC_STRUCT_DIRENT_D_TYPE} (@pxref{Particular Structures}).
5992 @end defmac
5994 @anchor{AC_HEADER_MAJOR}
5995 @defmac AC_HEADER_MAJOR
5996 @acindex{HEADER_MAJOR}
5997 @cvindex MAJOR_IN_MKDEV
5998 @cvindex MAJOR_IN_SYSMACROS
5999 @hdrindex{sys/mkdev.h}
6000 @hdrindex{sys/sysmacros.h}
6001 Detect the headers required to use @code{makedev}, @code{major}, and
6002 @code{minor}.  These functions may be defined by @file{sys/mkdev.h},
6003 @code{sys/sysmacros.h}, or @file{sys/types.h}.
6005 @code{AC_HEADER_MAJOR} defines @code{MAJOR_IN_MKDEV} if they are in
6006 @file{sys/mkdev.h}, or @code{MAJOR_IN_SYSMACROS} if they are in
6007 @file{sys/sysmacros.h}.  If neither macro is defined, they are either in
6008 @file{sys/types.h} or unavailable.
6010 To properly use these functions, your code should contain something
6011 like:
6013 @verbatim
6014 #include <sys/types.h>
6015 #ifdef MAJOR_IN_MKDEV
6016 # include <sys/mkdev.h>
6017 #elif defined MAJOR_IN_SYSMACROS
6018 # include <sys/sysmacros.h>
6019 #endif
6020 @end verbatim
6022 Note: Configure scripts built with Autoconf 2.69 or earlier will not
6023 detect a problem if @file{sys/types.h} contains definitions of
6024 @code{major}, @code{minor}, and/or @code{makedev} that trigger compiler
6025 warnings upon use.  This is known to occur with GNU libc 2.25, where
6026 those definitions are being deprecated to reduce namespace pollution.
6027 If it is not practical to use Autoconf 2.70 to regenerate the configure
6028 script of affected software, you can work around the problem by setting
6029 @samp{ac_cv_header_sys_types_h_makedev=no}, as an argument to
6030 @command{configure} or as part of a @file{config.site} site default file
6031 (@pxref{Site Defaults}).
6032 @end defmac
6034 @defmac AC_HEADER_RESOLV
6035 @acindex{HEADER_RESOLV}
6036 @cvindex HAVE_RESOLV_H
6037 @hdrindex{resolv.h}
6038 Checks for header @file{resolv.h}, checking for prerequisites first.
6039 To properly use @file{resolv.h}, your code should contain something like
6040 the following:
6042 @verbatim
6043 #ifdef HAVE_SYS_TYPES_H
6044 #  include <sys/types.h>
6045 #endif
6046 #ifdef HAVE_NETINET_IN_H
6047 #  include <netinet/in.h>   /* inet_ functions / structs */
6048 #endif
6049 #ifdef HAVE_ARPA_NAMESER_H
6050 #  include <arpa/nameser.h> /* DNS HEADER struct */
6051 #endif
6052 #ifdef HAVE_NETDB_H
6053 #  include <netdb.h>
6054 #endif
6055 #include <resolv.h>
6056 @end verbatim
6057 @end defmac
6059 @anchor{AC_HEADER_STAT}
6060 @defmac AC_HEADER_STAT
6061 @acindex{HEADER_STAT}
6062 @cvindex STAT_MACROS_BROKEN
6063 @hdrindex{sys/stat.h}
6064 If the macros @code{S_ISDIR}, @code{S_ISREG}, etc.@: defined in
6065 @file{sys/stat.h} do not work properly (returning false positives),
6066 define @code{STAT_MACROS_BROKEN}.  This is the case on Tektronix UTekV,
6067 Amdahl UTS and Motorola System V/88.
6069 This macro is obsolescent, as no current systems have the bug.
6070 New programs need not use this macro.
6071 @end defmac
6073 @defmac AC_HEADER_STDBOOL
6074 @acindex{HEADER_STDBOOL}
6075 @cvindex HAVE_STDBOOL_H
6076 @cvindex HAVE__BOOL
6077 @hdrindex{stdbool.h}
6078 @caindex header_stdbool_h
6079 If @file{stdbool.h} exists and conforms to C99 or later, define
6080 @code{HAVE_STDBOOL_H} to 1; if the type @code{_Bool} is defined, define
6081 @code{HAVE__BOOL} to 1.  To fulfill the standard's requirements, your
6082 program could contain the following code:
6084 @example
6085 @group
6086 #ifdef HAVE_STDBOOL_H
6087 # include <stdbool.h>
6088 #else
6089 # ifndef HAVE__BOOL
6090 #  ifdef __cplusplus
6091 typedef bool _Bool;
6092 #  else
6093 #   define _Bool signed char
6094 #  endif
6095 # endif
6096 # define bool _Bool
6097 # define false 0
6098 # define true 1
6099 # define __bool_true_false_are_defined 1
6100 #endif
6101 @end group
6102 @end example
6104 Alternatively you can use the @samp{stdbool} package of Gnulib
6105 (@pxref{Gnulib}).  It simplifies your code so that it can say just
6106 @code{#include <stdbool.h>}, and it adds support for less-common
6107 platforms.
6109 This macro caches its result in the @code{ac_cv_header_stdbool_h}
6110 variable.
6112 This macro differs from @code{AC_CHECK_HEADER_STDBOOL} only in that it
6113 defines @code{HAVE_STDBOOL_H} whereas @code{AC_CHECK_HEADER_STDBOOL}
6114 does not.
6115 @end defmac
6117 @anchor{AC_HEADER_STDC}
6118 @defmac AC_HEADER_STDC
6119 @acindex{HEADER_STDC}
6120 @cvindex STDC_HEADERS
6121 @caindex header_stdc
6123 This macro is obsolescent.  Its sole effect is to make sure that all the
6124 headers that are included by @code{AC_INCLUDES_DEFAULT} (@pxref{Default
6125 Includes}), but not part of ISO C90, have been checked for.
6127 All hosted environments that are still of interest for portable code
6128 provide all of the headers specified in ISO C90 (as amended in 1995).
6129 @end defmac
6131 @defmac AC_HEADER_SYS_WAIT
6132 @acindex{HEADER_SYS_WAIT}
6133 @cvindex HAVE_SYS_WAIT_H
6134 @hdrindex{sys/wait.h}
6135 @caindex header_sys_wait_h
6136 If @file{sys/wait.h} exists and is compatible with Posix, define
6137 @code{HAVE_SYS_WAIT_H}.  Incompatibility can occur if @file{sys/wait.h}
6138 does not exist, or if it uses the old BSD @code{union wait} instead
6139 of @code{int} to store a status value.  If @file{sys/wait.h} is not
6140 Posix compatible, then instead of including it, define the
6141 Posix macros with their usual interpretations.  Here is an
6142 example:
6144 @example
6145 @group
6146 #include <sys/types.h>
6147 #ifdef HAVE_SYS_WAIT_H
6148 # include <sys/wait.h>
6149 #endif
6150 #ifndef WEXITSTATUS
6151 # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
6152 #endif
6153 #ifndef WIFEXITED
6154 # define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
6155 #endif
6156 @end group
6157 @end example
6159 @noindent
6160 This macro caches its result in the @code{ac_cv_header_sys_wait_h}
6161 variable.
6163 This macro is obsolescent, as current systems are compatible with Posix.
6164 New programs need not use this macro.
6165 @end defmac
6167 @cvindex _POSIX_VERSION
6168 @hdrindex{unistd.h}
6169 @code{_POSIX_VERSION} is defined when @file{unistd.h} is included on
6170 Posix systems.  If there is no @file{unistd.h}, it is definitely
6171 not a Posix system.  However, some non-Posix systems do
6172 have @file{unistd.h}.
6174 The way to check whether the system supports Posix is:
6176 @example
6177 @group
6178 #ifdef HAVE_UNISTD_H
6179 # include <sys/types.h>
6180 # include <unistd.h>
6181 #endif
6183 #ifdef _POSIX_VERSION
6184 /* Code for Posix systems.  */
6185 #endif
6186 @end group
6187 @end example
6189 @defmac AC_HEADER_TIOCGWINSZ
6190 @acindex{HEADER_TIOCGWINSZ}
6191 @cvindex GWINSZ_IN_SYS_IOCTL
6192 @hdrindex{sys/ioctl.h}
6193 @hdrindex{termios.h}
6194 @c FIXME: I need clarifications from Jim.
6195 If the use of @code{TIOCGWINSZ} requires @file{<sys/ioctl.h>}, then
6196 define @code{GWINSZ_IN_SYS_IOCTL}.  Otherwise @code{TIOCGWINSZ} can be
6197 found in @file{<termios.h>}.
6199 Use:
6201 @example
6202 @group
6203 #ifdef HAVE_TERMIOS_H
6204 # include <termios.h>
6205 #endif
6207 #ifdef GWINSZ_IN_SYS_IOCTL
6208 # include <sys/ioctl.h>
6209 #endif
6210 @end group
6211 @end example
6212 @end defmac
6214 @node Generic Headers
6215 @subsection Generic Header Checks
6217 These macros are used to find system header files not covered by the
6218 ``particular'' test macros.  If you need to check the contents of a header
6219 as well as find out whether it is present, you have to write your own
6220 test for it (@pxref{Writing Tests}).
6222 @anchor{AC_CHECK_HEADER}
6223 @defmac AC_CHECK_HEADER (@var{header-file}, @ovar{action-if-found}, @
6224   @ovar{action-if-not-found}, @ovar{includes})
6225 @acindex{CHECK_HEADER}
6226 @caindex header_@var{header-file}
6227 If the system header file @var{header-file} is compilable, execute shell
6228 commands @var{action-if-found}, otherwise execute
6229 @var{action-if-not-found}.  If you just want to define a symbol if the
6230 header file is available, consider using @code{AC_CHECK_HEADERS}
6231 instead.
6233 @var{includes} should be the appropriate @dfn{prerequisite} code, i.e.@:
6234 whatever might be required to appear above
6235 @samp{#include <@var{header-file}>} for it to compile without error.
6236 This can be anything, but will normally be additional @samp{#include}
6237 directives. If @var{includes} is omitted or empty, @file{configure} will
6238 use the contents of the macro @code{AC_INCLUDES_DEFAULT}.
6239 @xref{Default Includes}.
6241 This macro used to check only for the @emph{presence} of a header, not
6242 whether its contents were acceptable to the compiler.  Some older
6243 @command{configure} scripts rely on this behavior, so it is still
6244 available by specifying @samp{-} as @var{includes}.  This mechanism is
6245 deprecated as of Autoconf 2.70; situations where a preprocessor-only
6246 check is required should use @code{AC_PREPROC_IFELSE}.
6247 @xref{Running the Preprocessor}.
6249 This macro caches its result in the @code{ac_cv_header_@var{header-file}}
6250 variable, with characters not suitable for a variable name mapped to
6251 underscores.
6252 @end defmac
6254 @anchor{AC_CHECK_HEADERS}
6255 @defmac AC_CHECK_HEADERS (@var{header-file}@dots{}, @
6256   @ovar{action-if-found}, @ovar{action-if-not-found}, @
6257   @ovar{includes})
6258 @acindex{CHECK_HEADERS}
6259 @cvindex HAVE_@var{header}
6260 @caindex header_@var{header-file}
6261 For each given system header file @var{header-file} in the
6262 blank-separated argument list that exists, define
6263 @code{HAVE_@var{header-file}} (in all capitals).  If @var{action-if-found}
6264 is given, it is additional shell code to execute when one of the header
6265 files is found.  You can give it a value of @samp{break} to break out of
6266 the loop on the first match.  If @var{action-if-not-found} is given, it
6267 is executed when one of the header files is not found.
6269 @var{includes} is interpreted as in @code{AC_CHECK_HEADER}, in order to
6270 choose the set of preprocessor directives supplied before the header
6271 under test.
6273 This macro caches its result in the @code{ac_cv_header_@var{header-file}}
6274 variable, with characters not suitable for a variable name mapped to
6275 underscores.
6276 @end defmac
6278 @defmac AC_CHECK_HEADERS_ONCE (@var{header-file}@dots{})
6279 @acindex{CHECK_HEADERS_ONCE}
6280 @cvindex HAVE_@var{header}
6281 For each given system header file @var{header-file} in the
6282 blank-separated argument list that exists, define
6283 @code{HAVE_@var{header-file}} (in all capitals).
6285 If you do not need the full power of @code{AC_CHECK_HEADERS}, this
6286 variant generates smaller, faster @command{configure} files.  All
6287 headers passed to @code{AC_CHECK_HEADERS_ONCE} are checked for in one
6288 pass, early during the @command{configure} run.  The checks cannot be
6289 conditionalized, you cannot specify an @var{action-if-found} or
6290 @var{action-if-not-found}, and @code{AC_INCLUDES_DEFAULT} is always used
6291 for the prerequisites.
6292 @end defmac
6294 In previous versions of Autoconf, these macros merely checked whether
6295 the header was accepted by the preprocessor.  This was changed because
6296 the old test was inappropriate for typical uses.  Headers are typically
6297 used to compile, not merely to preprocess, and the old behavior
6298 sometimes accepted headers that clashed at compile-time
6299 (@pxref{Present But Cannot Be Compiled}).  If for some reason it is
6300 inappropriate to check whether a header is compilable, you should use
6301 @code{AC_PREPROC_IFELSE} (@pxref{Running the Preprocessor}) instead of
6302 these macros.
6304 Requiring each header to compile improves the robustness of the test,
6305 but it also requires you to make sure that the @var{includes} are
6306 correct.  Most system headers nowadays make sure to @code{#include}
6307 whatever they require, or else have their dependencies satisfied by
6308 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), but
6309 @pxref{Header Portability}, for known exceptions.  In general, if you
6310 are looking for @file{bar.h}, which requires that @file{foo.h} be
6311 included first if it exists, you should do something like this:
6313 @example
6314 AC_CHECK_HEADERS([foo.h])
6315 AC_CHECK_HEADERS([bar.h], [], [],
6316 [#ifdef HAVE_FOO_H
6317 # include <foo.h>
6318 #endif
6320 @end example
6322 @node Declarations
6323 @section Declarations
6324 @cindex Declaration, checking
6326 The following macros check for the declaration of variables and
6327 functions.  If there is no macro specifically defined to check for a
6328 symbol you need, then you can use the general macros (@pxref{Generic
6329 Declarations}) or, for more complex tests, you may use
6330 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}).
6332 @menu
6333 * Particular Declarations::     Macros to check for certain declarations
6334 * Generic Declarations::        How to find other declarations
6335 @end menu
6337 @node Particular Declarations
6338 @subsection Particular Declaration Checks
6340 There are no specific macros for declarations.
6342 @node Generic Declarations
6343 @subsection Generic Declaration Checks
6345 These macros are used to find declarations not covered by the ``particular''
6346 test macros.
6348 @defmac AC_CHECK_DECL (@var{symbol}, @ovar{action-if-found}, @
6349   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
6350 @acindex{CHECK_DECL}
6351 @caindex have_decl_@var{symbol}
6352 If @var{symbol} (a function, variable, or constant) is not declared in
6353 @var{includes} and a declaration is needed, run the shell commands
6354 @var{action-if-not-found}, otherwise @var{action-if-found}.
6355 @var{includes} is a series of include directives, defaulting to
6356 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
6357 prior to the declaration under test.
6359 This macro actually tests whether @var{symbol} is defined as a macro or
6360 can be used as an r-value, not whether it is really declared, because it
6361 is much safer to avoid introducing extra declarations when they are not
6362 needed.  In order to facilitate use of C++ and overloaded function
6363 declarations, it is possible to specify function argument types in
6364 parentheses for types which can be zero-initialized:
6366 @example
6367 AC_CHECK_DECL([basename(char *)])
6368 @end example
6370 Some compilers don't indicate every missing declaration by the error
6371 status.  This macro checks the standard error from such compilers and
6372 considers a declaration missing if any warnings have been reported.  For
6373 most compilers, though, warnings do not affect this macro's outcome
6374 unless @code{AC_LANG_WERROR} is also specified.
6376 This macro caches its result in the @code{ac_cv_have_decl_@var{symbol}}
6377 variable, with characters not suitable for a variable name mapped to
6378 underscores.
6379 @end defmac
6381 @anchor{AC_CHECK_DECLS}
6382 @defmac AC_CHECK_DECLS (@var{symbols}, @ovar{action-if-found}, @
6383   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
6384 @acindex{CHECK_DECLS}
6385 @cvindex HAVE_DECL_@var{symbol}
6386 @caindex have_decl_@var{symbol}
6387 For each of the @var{symbols} (@emph{comma}-separated list with optional
6388 function argument types for C++ overloads), define
6389 @code{HAVE_DECL_@var{symbol}} (in all capitals) to @samp{1} if
6390 @var{symbol} is declared, otherwise to @samp{0}.  If
6391 @var{action-if-not-found} is given, it is additional shell code to
6392 execute when one of the function declarations is needed, otherwise
6393 @var{action-if-found} is executed.
6395 @var{includes} is a series of include directives, defaulting to
6396 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
6397 prior to the declarations under test.
6399 This macro uses an M4 list as first argument:
6400 @example
6401 AC_CHECK_DECLS([strdup])
6402 AC_CHECK_DECLS([strlen])
6403 AC_CHECK_DECLS([malloc, realloc, calloc, free])
6404 AC_CHECK_DECLS([j0], [], [], [[#include <math.h>]])
6405 AC_CHECK_DECLS([[basename(char *)], [dirname(char *)]])
6406 @end example
6408 Unlike the other @samp{AC_CHECK_*S} macros, when a @var{symbol} is not
6409 declared, @code{HAVE_DECL_@var{symbol}} is defined to @samp{0} instead
6410 of leaving @code{HAVE_DECL_@var{symbol}} undeclared.  When you are
6411 @emph{sure} that the check was performed, use
6412 @code{HAVE_DECL_@var{symbol}} in @code{#if}:
6414 @example
6415 #if !HAVE_DECL_SYMBOL
6416 extern char *symbol;
6417 #endif
6418 @end example
6420 @noindent
6421 If the test may have not been performed, however, because it is safer
6422 @emph{not} to declare a symbol than to use a declaration that conflicts
6423 with the system's one, you should use:
6425 @example
6426 #if defined HAVE_DECL_MALLOC && !HAVE_DECL_MALLOC
6427 void *malloc (size_t *s);
6428 #endif
6429 @end example
6431 @noindent
6432 You fall into the second category only in extreme situations: either
6433 your files may be used without being configured, or they are used during
6434 the configuration.  In most cases the traditional approach is enough.
6436 Some compilers don't indicate every missing declaration by the error
6437 status.  This macro checks the standard error from such compilers and
6438 considers a declaration missing if any warnings have been reported.  For
6439 most compilers, though, warnings do not affect this macro's outcome
6440 unless @code{AC_LANG_WERROR} is also specified.
6442 This macro caches its results in @code{ac_cv_have_decl_@var{symbol}}
6443 variables, with characters not suitable for a variable name mapped to
6444 underscores.
6445 @end defmac
6447 @defmac AC_CHECK_DECLS_ONCE (@var{symbols})
6448 @acindex{CHECK_DECLS_ONCE}
6449 @cvindex HAVE_DECL_@var{symbol}
6450 For each of the @var{symbols} (@emph{comma}-separated list), define
6451 @code{HAVE_DECL_@var{symbol}} (in all capitals) to @samp{1} if
6452 @var{symbol} is declared in the default include files, otherwise to
6453 @samp{0}.  This is a once-only variant of @code{AC_CHECK_DECLS}.  It
6454 generates the checking code at most once, so that @command{configure} is
6455 smaller and faster; but the checks cannot be conditionalized and are
6456 always done once, early during the @command{configure} run.
6457 @end defmac
6460 @node Structures
6461 @section Structures
6462 @cindex Structure, checking
6464 The following macros check for the presence of certain members in C
6465 structures.  If there is no macro specifically defined to check for a
6466 member you need, then you can use the general structure-member macros
6467 (@pxref{Generic Structures}) or, for more complex tests, you may use
6468 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}).
6470 @menu
6471 * Particular Structures::       Macros to check for certain structure members
6472 * Generic Structures::          How to find other structure members
6473 @end menu
6475 @node Particular Structures
6476 @subsection Particular Structure Checks
6478 The following macros check for certain structures or structure members.
6480 @defmac AC_STRUCT_DIRENT_D_INO
6481 @acindex{STRUCT_DIRENT_D_INO}
6482 @cvindex HAVE_STRUCT_DIRENT_D_INO
6483 @c @caindex header_dirent_dirent_h
6484 @c @caindex member_struct_dirent_d_ino
6485 Perform all the actions of @code{AC_HEADER_DIRENT} (@pxref{Particular
6486 Headers}).  Then, if @code{struct dirent} contains a @code{d_ino}
6487 member, define @code{HAVE_STRUCT_DIRENT_D_INO}.
6489 @code{HAVE_STRUCT_DIRENT_D_INO} indicates only the presence of
6490 @code{d_ino}, not whether its contents are always reliable.
6491 Traditionally, a zero @code{d_ino} indicated a deleted directory entry,
6492 though current systems hide this detail from the user and never return
6493 zero @code{d_ino} values.
6494 Many current systems report an incorrect @code{d_ino} for a directory
6495 entry that is a mount point.
6496 @end defmac
6498 @defmac AC_STRUCT_DIRENT_D_TYPE
6499 @acindex{STRUCT_DIRENT_D_TYPE}
6500 @cvindex HAVE_STRUCT_DIRENT_D_TYPE
6501 @c @caindex header_dirent_dirent_h
6502 @c @caindex member_struct_dirent_d_type
6503 Perform all the actions of @code{AC_HEADER_DIRENT} (@pxref{Particular
6504 Headers}).  Then, if @code{struct dirent} contains a @code{d_type}
6505 member, define @code{HAVE_STRUCT_DIRENT_D_TYPE}.
6506 @end defmac
6508 @anchor{AC_STRUCT_ST_BLOCKS}
6509 @defmac AC_STRUCT_ST_BLOCKS
6510 @acindex{STRUCT_ST_BLOCKS}
6511 @cvindex HAVE_STRUCT_STAT_ST_BLOCKS
6512 @cvindex HAVE_ST_BLOCKS
6513 @ovindex LIBOBJS
6514 @caindex member_struct_stat_st_blocks
6515 If @code{struct stat} contains an @code{st_blocks} member, define
6516 @code{HAVE_STRUCT_STAT_ST_BLOCKS}.  Otherwise, require an
6517 @code{AC_LIBOBJ} replacement of @samp{fileblocks}.  The former name,
6518 @code{HAVE_ST_BLOCKS} is to be avoided, as its support will cease in the
6519 future.
6521 This macro caches its result in the @code{ac_cv_member_struct_stat_st_blocks}
6522 variable.
6523 @end defmac
6525 @defmac AC_STRUCT_TM
6526 @acindex{STRUCT_TM}
6527 @cvindex TM_IN_SYS_TIME
6528 @hdrindex{time.h}
6529 @hdrindex{sys/time.h}
6530 If @file{time.h} does not define @code{struct tm}, define
6531 @code{TM_IN_SYS_TIME}, which means that including @file{sys/time.h}
6532 had better define @code{struct tm}.
6534 This macro is obsolescent, as @file{time.h} defines @code{struct tm} in
6535 current systems.  New programs need not use this macro.
6536 @end defmac
6538 @anchor{AC_STRUCT_TIMEZONE}
6539 @defmac AC_STRUCT_TIMEZONE
6540 @acindex{STRUCT_TIMEZONE}
6541 @cvindex HAVE_DECL_TZNAME
6542 @cvindex HAVE_STRUCT_TM_TM_ZONE
6543 @cvindex HAVE_TM_ZONE
6544 @cvindex HAVE_TZNAME
6545 @c @caindex member_struct_tm_tm_zone
6546 @c @caindex struct_tm
6547 Figure out how to get the current timezone.  If @code{struct tm} has a
6548 @code{tm_zone} member, define @code{HAVE_STRUCT_TM_TM_ZONE} (and the
6549 obsoleted @code{HAVE_TM_ZONE}).  Otherwise, if the external array
6550 @code{tzname} is found, define @code{HAVE_TZNAME}; if it is declared,
6551 define @code{HAVE_DECL_TZNAME}.
6552 @end defmac
6554 @node Generic Structures
6555 @subsection Generic Structure Checks
6557 These macros are used to find structure members not covered by the
6558 ``particular'' test macros.
6560 @defmac AC_CHECK_MEMBER (@var{aggregate}.@var{member}, @
6561   @ovar{action-if-found}, @ovar{action-if-not-found}, @
6562   @dvar{includes, AC_INCLUDES_DEFAULT})
6563 @acindex{CHECK_MEMBER}
6564 @caindex member_@var{aggregate}_@var{member}
6565 Check whether @var{member} is a member of the aggregate @var{aggregate}.
6566 If no @var{includes} are specified, the default includes are used
6567 (@pxref{Default Includes}).
6569 @example
6570 AC_CHECK_MEMBER([struct passwd.pw_gecos], [],
6571                 [AC_MSG_ERROR([we need 'passwd.pw_gecos'])],
6572                 [[#include <pwd.h>]])
6573 @end example
6575 You can use this macro for submembers:
6577 @example
6578 AC_CHECK_MEMBER(struct top.middle.bot)
6579 @end example
6581 This macro caches its result in the
6582 @code{ac_cv_member_@var{aggregate}_@var{member}} variable, with
6583 characters not suitable for a variable name mapped to underscores.
6584 @end defmac
6586 @anchor{AC_CHECK_MEMBERS}
6587 @defmac AC_CHECK_MEMBERS (@var{members}, @ovar{action-if-found}, @
6588   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
6589 @acindex{CHECK_MEMBERS}
6590 @cvindex HAVE_@var{aggregate}_@var{member}
6591 Check for the existence of each @samp{@var{aggregate}.@var{member}} of
6592 @var{members} using the previous macro.  When @var{member} belongs to
6593 @var{aggregate}, define @code{HAVE_@var{aggregate}_@var{member}} (in all
6594 capitals, with spaces and dots replaced by underscores).  If
6595 @var{action-if-found} is given, it is executed for each of the found
6596 members.  If @var{action-if-not-found} is given, it is executed for each
6597 of the members that could not be found.
6599 @var{includes} is a series of include directives, defaulting to
6600 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
6601 prior to the members under test.
6603 This macro uses M4 lists:
6604 @example
6605 AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize])
6606 @end example
6607 @end defmac
6610 @node Types
6611 @section Types
6612 @cindex Types
6613 @cindex C types
6615 The following macros check for C types, either builtin or typedefs.  If
6616 there is no macro specifically defined to check for a type you need, and
6617 you don't need to check for any special properties of it, then you can
6618 use a general type-check macro.
6620 @menu
6621 * Particular Types::            Special handling to find certain types
6622 * Generic Types::               How to find other types
6623 @end menu
6625 @node Particular Types
6626 @subsection Particular Type Checks
6628 @hdrindex{sys/types.h}
6629 @hdrindex{stdlib.h}
6630 @hdrindex{stdint.h}
6631 @hdrindex{inttypes.h}
6632 These macros check for particular C types in @file{sys/types.h},
6633 @file{stdlib.h}, @file{stdint.h}, @file{inttypes.h} and others, if they
6634 exist.
6636 The Gnulib @code{stdint} module is an alternate way to define many of
6637 these symbols; it is useful if you prefer your code to assume a
6638 C99-or-better environment.  @xref{Gnulib}.
6640 @anchor{AC_TYPE_GETGROUPS}
6641 @defmac AC_TYPE_GETGROUPS
6642 @acindex{TYPE_GETGROUPS}
6643 @cvindex GETGROUPS_T
6644 @caindex type_getgroups
6645 Define @code{GETGROUPS_T} to be whichever of @code{gid_t} or @code{int}
6646 is the base type of the array argument to @code{getgroups}.
6648 This macro caches the base type in the @code{ac_cv_type_getgroups}
6649 variable.
6650 @end defmac
6652 @defmac AC_TYPE_INT8_T
6653 @acindex{TYPE_INT8_T}
6654 @cvindex HAVE_INT8_T
6655 @cvindex int8_t
6656 @caindex c_int8_t
6657 If @file{stdint.h} or @file{inttypes.h} does not define the type
6658 @code{int8_t}, define @code{int8_t} to a signed
6659 integer type that is exactly 8 bits wide and that uses two's complement
6660 representation, if such a type exists.
6661 If you are worried about porting to hosts that lack such a type, you can
6662 use the results of this macro in C89-or-later code as follows:
6664 @example
6665 #if HAVE_STDINT_H
6666 # include <stdint.h>
6667 #endif
6668 #if defined INT8_MAX || defined int8_t
6669  @emph{code using int8_t}
6670 #else
6671  @emph{complicated alternative using >8-bit 'signed char'}
6672 #endif
6673 @end example
6675 This macro caches the type in the @code{ac_cv_c_int8_t} variable.
6676 @end defmac
6678 @defmac AC_TYPE_INT16_T
6679 @acindex{TYPE_INT16_T}
6680 @cvindex HAVE_INT16_T
6681 @cvindex int16_t
6682 @caindex c_int16_t
6683 This is like @code{AC_TYPE_INT8_T}, except for 16-bit integers.
6684 @end defmac
6686 @defmac AC_TYPE_INT32_T
6687 @acindex{TYPE_INT32_T}
6688 @cvindex HAVE_INT32_T
6689 @cvindex int32_t
6690 @caindex c_int32_t
6691 This is like @code{AC_TYPE_INT8_T}, except for 32-bit integers.
6692 @end defmac
6694 @defmac AC_TYPE_INT64_T
6695 @acindex{TYPE_INT64_T}
6696 @cvindex HAVE_INT64_T
6697 @cvindex int64_t
6698 @caindex c_int64_t
6699 This is like @code{AC_TYPE_INT8_T}, except for 64-bit integers.
6700 @end defmac
6702 @defmac AC_TYPE_INTMAX_T
6703 @acindex{TYPE_INTMAX_T}
6704 @cvindex HAVE_INTMAX_T
6705 @cvindex intmax_t
6706 @c @caindex type_intmax_t
6707 If @file{stdint.h} or @file{inttypes.h} defines the type @code{intmax_t},
6708 define @code{HAVE_INTMAX_T}.  Otherwise, define @code{intmax_t} to the
6709 widest signed integer type.
6710 @end defmac
6712 @defmac AC_TYPE_INTPTR_T
6713 @acindex{TYPE_INTPTR_T}
6714 @cvindex HAVE_INTPTR_T
6715 @cvindex intptr_t
6716 @c @caindex type_intptr_t
6717 If @file{stdint.h} or @file{inttypes.h} defines the type @code{intptr_t},
6718 define @code{HAVE_INTPTR_T}.  Otherwise, define @code{intptr_t} to a
6719 signed integer type wide enough to hold a pointer, if such a type
6720 exists.
6721 @end defmac
6723 @defmac AC_TYPE_LONG_DOUBLE
6724 @acindex{TYPE_LONG_DOUBLE}
6725 @cvindex HAVE_LONG_DOUBLE
6726 @caindex type_long_double
6727 If the C compiler supports a working @code{long double} type, define
6728 @code{HAVE_LONG_DOUBLE}.  The @code{long double} type might have the
6729 same range and precision as @code{double}.
6731 This macro caches its result in the @code{ac_cv_type_long_double}
6732 variable.
6734 This macro is obsolescent, as current C compilers support @code{long
6735 double}.  New programs need not use this macro.
6736 @end defmac
6738 @defmac AC_TYPE_LONG_DOUBLE_WIDER
6739 @acindex{TYPE_LONG_DOUBLE_WIDER}
6740 @cvindex HAVE_LONG_DOUBLE_WIDER
6741 @caindex type_long_double_wider
6742 If the C compiler supports a working @code{long double} type with more
6743 range or precision than the @code{double} type, define
6744 @code{HAVE_LONG_DOUBLE_WIDER}.
6746 This macro caches its result in the @code{ac_cv_type_long_double_wider}
6747 variable.
6748 @end defmac
6750 @defmac AC_TYPE_LONG_LONG_INT
6751 @acindex{TYPE_LONG_LONG_INT}
6752 @cvindex HAVE_LONG_LONG_INT
6753 @caindex type_long_long_int
6754 If the C compiler supports a working @code{long long int} type, define
6755 @code{HAVE_LONG_LONG_INT}.  However, this test does not test
6756 @code{long long int} values in preprocessor @code{#if} expressions,
6757 because too many compilers mishandle such expressions.
6758 @xref{Preprocessor Arithmetic}.
6760 This macro caches its result in the @code{ac_cv_type_long_long_int}
6761 variable.
6762 @end defmac
6764 @defmac AC_TYPE_MBSTATE_T
6765 @acindex{TYPE_MBSTATE_T}
6766 @cvindex mbstate_t
6767 @hdrindex{wchar.h}
6768 @caindex type_mbstate_t
6769 Define @code{HAVE_MBSTATE_T} if @code{<wchar.h>} declares the
6770 @code{mbstate_t} type.  Also, define @code{mbstate_t} to be a type if
6771 @code{<wchar.h>} does not declare it.
6773 This macro caches its result in the @code{ac_cv_type_mbstate_t}
6774 variable.
6775 @end defmac
6777 @anchor{AC_TYPE_MODE_T}
6778 @defmac AC_TYPE_MODE_T
6779 @acindex{TYPE_MODE_T}
6780 @cvindex mode_t
6781 @caindex type_mode_t
6782 Define @code{mode_t} to a suitable type, if standard headers do not
6783 define it.
6785 This macro caches its result in the @code{ac_cv_type_mode_t} variable.
6786 @end defmac
6788 @anchor{AC_TYPE_OFF_T}
6789 @defmac AC_TYPE_OFF_T
6790 @acindex{TYPE_OFF_T}
6791 @cvindex off_t
6792 @caindex type_off_t
6793 Define @code{off_t} to a suitable type, if standard headers do not
6794 define it.
6796 This macro caches its result in the @code{ac_cv_type_off_t} variable.
6797 @end defmac
6799 @anchor{AC_TYPE_PID_T}
6800 @defmac AC_TYPE_PID_T
6801 @acindex{TYPE_PID_T}
6802 @cvindex pid_t
6803 @caindex type_pid_t
6804 Define @code{pid_t} to a suitable type, if standard headers do not
6805 define it.
6807 This macro caches its result in the @code{ac_cv_type_pid_t} variable.
6808 @end defmac
6810 @anchor{AC_TYPE_SIZE_T}
6811 @defmac AC_TYPE_SIZE_T
6812 @acindex{TYPE_SIZE_T}
6813 @cvindex size_t
6814 @caindex type_size_t
6815 Define @code{size_t} to a suitable type, if standard headers do not
6816 define it.
6818 This macro caches its result in the @code{ac_cv_type_size_t} variable.
6819 @end defmac
6821 @defmac AC_TYPE_SSIZE_T
6822 @acindex{TYPE_SSIZE_T}
6823 @cvindex ssize_t
6824 @caindex type_ssize_t
6825 Define @code{ssize_t} to a suitable type, if standard headers do not
6826 define it.
6828 This macro caches its result in the @code{ac_cv_type_ssize_t} variable.
6829 @end defmac
6831 @anchor{AC_TYPE_UID_T}
6832 @defmac AC_TYPE_UID_T
6833 @acindex{TYPE_UID_T}
6834 @cvindex uid_t
6835 @cvindex gid_t
6836 @caindex type_uid_t
6837 Define @code{uid_t} and @code{gid_t} to suitable types, if standard
6838 headers do not define them.
6840 This macro caches its result in the @code{ac_cv_type_uid_t} variable.
6841 @end defmac
6843 @defmac AC_TYPE_UINT8_T
6844 @acindex{TYPE_UINT8_T}
6845 @cvindex HAVE_UINT8_T
6846 @cvindex uint8_t
6847 @caindex c_uint8_t
6848 If @file{stdint.h} or @file{inttypes.h} does not define the type
6849 @code{uint8_t}, define @code{uint8_t} to an
6850 unsigned integer type that is exactly 8 bits wide, if such a type
6851 exists.
6852 This is like @code{AC_TYPE_INT8_T}, except for unsigned integers.
6853 @end defmac
6855 @defmac AC_TYPE_UINT16_T
6856 @acindex{TYPE_UINT16_T}
6857 @cvindex HAVE_UINT16_T
6858 @cvindex uint16_t
6859 @caindex c_uint16_t
6860 This is like @code{AC_TYPE_UINT8_T}, except for 16-bit integers.
6861 @end defmac
6863 @defmac AC_TYPE_UINT32_T
6864 @acindex{TYPE_UINT32_T}
6865 @cvindex HAVE_UINT32_T
6866 @cvindex uint32_t
6867 @caindex c_uint32_t
6868 This is like @code{AC_TYPE_UINT8_T}, except for 32-bit integers.
6869 @end defmac
6871 @defmac AC_TYPE_UINT64_T
6872 @acindex{TYPE_UINT64_T}
6873 @cvindex HAVE_UINT64_T
6874 @cvindex uint64_t
6875 @caindex c_uint64_t
6876 This is like @code{AC_TYPE_UINT8_T}, except for 64-bit integers.
6877 @end defmac
6879 @defmac AC_TYPE_UINTMAX_T
6880 @acindex{TYPE_UINTMAX_T}
6881 @cvindex HAVE_UINTMAX_T
6882 @cvindex uintmax_t
6883 @c @caindex type_uintmax_t
6884 If @file{stdint.h} or @file{inttypes.h} defines the type @code{uintmax_t},
6885 define @code{HAVE_UINTMAX_T}.  Otherwise, define @code{uintmax_t} to the
6886 widest unsigned integer type.
6887 @end defmac
6889 @defmac AC_TYPE_UINTPTR_T
6890 @acindex{TYPE_UINTPTR_T}
6891 @cvindex HAVE_UINTPTR_T
6892 @cvindex uintptr_t
6893 @c @caindex type_uintptr_t
6894 If @file{stdint.h} or @file{inttypes.h} defines the type @code{uintptr_t},
6895 define @code{HAVE_UINTPTR_T}.  Otherwise, define @code{uintptr_t} to an
6896 unsigned integer type wide enough to hold a pointer, if such a type
6897 exists.
6898 @end defmac
6900 @defmac AC_TYPE_UNSIGNED_LONG_LONG_INT
6901 @acindex{TYPE_UNSIGNED_LONG_LONG_INT}
6902 @cvindex HAVE_UNSIGNED_LONG_LONG_INT
6903 @caindex type_unsigned_long_long_int
6904 If the C compiler supports a working @code{unsigned long long int} type,
6905 define @code{HAVE_UNSIGNED_LONG_LONG_INT}.  However, this test does not test
6906 @code{unsigned long long int} values in preprocessor @code{#if} expressions,
6907 because too many compilers mishandle such expressions.
6908 @xref{Preprocessor Arithmetic}.
6910 This macro caches its result in the @code{ac_cv_type_unsigned_long_long_int}
6911 variable.
6912 @end defmac
6914 @node Generic Types
6915 @subsection Generic Type Checks
6917 These macros are used to check for types not covered by the ``particular''
6918 test macros.
6920 @defmac AC_CHECK_TYPE (@var{type}, @ovar{action-if-found}, @
6921   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
6922 @acindex{CHECK_TYPE}
6923 @caindex type_@var{type}
6924 Check whether @var{type} is defined.  It may be a compiler builtin type
6925 or defined by the @var{includes}.  @var{includes} is a series of include
6926 directives, defaulting to @code{AC_INCLUDES_DEFAULT} (@pxref{Default
6927 Includes}), which are used prior to the type under test.
6929 In C, @var{type} must be a type-name, so that the expression @samp{sizeof
6930 (@var{type})} is valid (but @samp{sizeof ((@var{type}))} is not).  The
6931 same test is applied when compiling for C++, which means that in C++
6932 @var{type} should be a type-id and should not be an anonymous
6933 @samp{struct} or @samp{union}.
6935 This macro caches its result in the @code{ac_cv_type_@var{type}}
6936 variable, with @samp{*} mapped to @samp{p} and other characters not
6937 suitable for a variable name mapped to underscores.
6938 @end defmac
6941 @defmac AC_CHECK_TYPES (@var{types}, @ovar{action-if-found}, @
6942   @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
6943 @acindex{CHECK_TYPES}
6944 @cvindex HAVE_@var{type}
6945 For each @var{type} of the @var{types} that is defined, define
6946 @code{HAVE_@var{type}} (in all capitals).  Each @var{type} must follow
6947 the rules of @code{AC_CHECK_TYPE}.  If no @var{includes} are
6948 specified, the default includes are used (@pxref{Default Includes}).  If
6949 @var{action-if-found} is given, it is additional shell code to execute
6950 when one of the types is found.  If @var{action-if-not-found} is given,
6951 it is executed when one of the types is not found.
6953 This macro uses M4 lists:
6954 @example
6955 AC_CHECK_TYPES([ptrdiff_t])
6956 AC_CHECK_TYPES([unsigned long long int, uintmax_t])
6957 AC_CHECK_TYPES([float_t], [], [], [[#include <math.h>]])
6958 @end example
6960 @end defmac
6962 Autoconf, up to 2.13, used to provide to another version of
6963 @code{AC_CHECK_TYPE}, broken by design.  In order to keep backward
6964 compatibility, a simple heuristic, quite safe but not totally, is
6965 implemented.  In case of doubt, read the documentation of the former
6966 @code{AC_CHECK_TYPE}, see @ref{Obsolete Macros}.
6969 @node Compilers and Preprocessors
6970 @section Compilers and Preprocessors
6971 @cindex Compilers
6972 @cindex Preprocessors
6974 @ovindex EXEEXT
6975 All the tests for compilers (@code{AC_PROG_CC}, @code{AC_PROG_CXX},
6976 @code{AC_PROG_F77}) define the output variable @code{EXEEXT} based on
6977 the output of the compiler, typically to the empty string if
6978 Posix and @samp{.exe} if a DOS variant.
6980 @ovindex OBJEXT
6981 They also define the output variable @code{OBJEXT} based on the
6982 output of the compiler, after @file{.c} files have been excluded, typically
6983 to @samp{o} if Posix, @samp{obj} if a DOS variant.
6985 If the compiler being used does not produce executables, the tests fail.  If
6986 the executables can't be run, and cross-compilation is not enabled, they
6987 fail too.  @xref{Manual Configuration}, for more on support for cross
6988 compiling.
6990 @menu
6991 * Specific Compiler Characteristics::  Some portability issues
6992 * Generic Compiler Characteristics::  Language independent tests and features
6993 * C Compiler::                  Checking its characteristics
6994 * C++ Compiler::                Likewise
6995 * Objective C Compiler::        Likewise
6996 * Objective C++ Compiler::      Likewise
6997 * Erlang Compiler and Interpreter::  Likewise
6998 * Fortran Compiler::            Likewise
6999 * Go Compiler::                 Likewise
7000 @end menu
7002 @node Specific Compiler Characteristics
7003 @subsection Specific Compiler Characteristics
7005 Some compilers exhibit different behaviors.
7007 @table @asis
7008 @item Static/Dynamic Expressions
7009 Autoconf relies on a trick to extract one bit of information from the C
7010 compiler: using negative array sizes.  For instance the following
7011 excerpt of a C source demonstrates how to test whether @samp{int} objects are 4
7012 bytes wide:
7014 @example
7015 static int test_array[sizeof (int) == 4 ? 1 : -1];
7016 @end example
7018 @noindent
7019 To our knowledge, there is a single compiler that does not support this
7020 trick: the HP C compilers (the real ones, not only the
7021 ``bundled'') on HP-UX 11.00.
7022 They incorrectly reject the above program with the diagnostic
7023 ``Variable-length arrays cannot have static storage.''
7024 This bug comes from HP compilers' mishandling of @code{sizeof (int)},
7025 not from the @code{? 1 : -1}, and
7026 Autoconf works around this problem by casting @code{sizeof (int)} to
7027 @code{long int} before comparing it.
7028 @end table
7030 @node Generic Compiler Characteristics
7031 @subsection Generic Compiler Characteristics
7033 @anchor{AC_CHECK_SIZEOF}
7034 @defmac AC_CHECK_SIZEOF (@var{type-or-expr}, @ovar{unused}, @
7035   @dvar{includes, AC_INCLUDES_DEFAULT})
7036 @acindex{CHECK_SIZEOF}
7037 @cvindex SIZEOF_@var{type-or-expr}
7038 @caindex sizeof_@var{type-or-expr}
7039 Define @code{SIZEOF_@var{type-or-expr}} (@pxref{Standard Symbols}) to be
7040 the size in bytes of @var{type-or-expr}, which may be either a type or
7041 an expression returning a value that has a size.  If the expression
7042 @samp{sizeof (@var{type-or-expr})} is invalid, the result is 0.
7043 @var{includes} is a series of include directives, defaulting to
7044 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
7045 prior to the expression under test.
7047 This macro now works even when cross-compiling.  The @var{unused}
7048 argument was used when cross-compiling.
7050 For example, the call
7052 @example
7053 @c If you change this example, adjust tests/semantics.at:AC_CHECK_SIZEOF struct.
7054 AC_CHECK_SIZEOF([int *])
7055 @end example
7057 @noindent
7058 defines @code{SIZEOF_INT_P} to be 8 on DEC Alpha AXP systems.
7060 This macro caches its result in the @code{ac_cv_sizeof_@var{type-or-expr}}
7061 variable, with @samp{*} mapped to @samp{p} and other characters not
7062 suitable for a variable name mapped to underscores.
7063 @end defmac
7065 @defmac AC_CHECK_ALIGNOF (@var{type}, @dvar{includes, AC_INCLUDES_DEFAULT})
7066 @acindex{CHECK_ALIGNOF}
7067 @cvindex ALIGNOF_@var{type}
7068 @caindex alignof_@var{type-or-expr}
7069 Define @code{ALIGNOF_@var{type}} (@pxref{Standard Symbols}) to be the
7070 alignment in bytes of @var{type}.  @samp{@var{type} y;} must be valid as
7071 a structure member declaration.  If @samp{type} is unknown, the result
7072 is 0.  If no @var{includes} are specified, the default includes are used
7073 (@pxref{Default Includes}).
7075 This macro caches its result in the @code{ac_cv_alignof_@var{type-or-expr}}
7076 variable, with @samp{*} mapped to @samp{p} and other characters not
7077 suitable for a variable name mapped to underscores.
7078 @end defmac
7080 @defmac AC_COMPUTE_INT (@var{var}, @var{expression}, @
7081   @dvar{includes, AC_INCLUDES_DEFAULT}, @ovar{action-if-fails})
7082 @acindex{COMPUTE_INT}
7083 Store into the shell variable @var{var} the value of the integer
7084 @var{expression}.  The
7085 value should fit in an initializer in a C variable of type @code{signed
7086 long}.  To support cross compilation (in which case, the macro only works on
7087 hosts that use twos-complement arithmetic), it should be possible to evaluate
7088 the expression at compile-time.  If no @var{includes} are specified, the
7089 default includes are used (@pxref{Default Includes}).
7091 Execute @var{action-if-fails} if the value cannot be determined correctly.
7092 @end defmac
7094 @defmac AC_LANG_WERROR
7095 @acindex{LANG_WERROR}
7096 Normally Autoconf ignores warnings generated by the compiler, linker, and
7097 preprocessor.  If this macro is used, warnings count as fatal
7098 errors for the current language.  This macro is useful when the
7099 results of configuration are used where warnings are unacceptable; for
7100 instance, if parts of a program are built with the GCC
7101 @option{-Werror}
7102 option.  If the whole program is built using @option{-Werror} it is
7103 often simpler to put @option{-Werror} in the compiler flags (@code{CFLAGS},
7104 etc.).
7105 @end defmac
7107 @defmac AC_OPENMP
7108 @acindex{OPENMP}
7109 @cvindex _OPENMP
7110 @ovindex OPENMP_CFLAGS
7111 @ovindex OPENMP_CXXFLAGS
7112 @ovindex OPENMP_FFLAGS
7113 @ovindex OPENMP_FCFLAGS
7114 @caindex prog_c_openmp
7115 @caindex prog_cxx_openmp
7116 @caindex prog_f77_openmp
7117 @caindex prog_fc_openmp
7118 @uref{http://@/www.openmp.org/, OpenMP} specifies extensions of C, C++,
7119 and Fortran that simplify optimization of shared memory parallelism,
7120 which is a common problem on multi-core CPUs.
7122 If the current language is C, the macro @code{AC_OPENMP} sets the
7123 variable @code{OPENMP_CFLAGS} to the C compiler flags needed for
7124 supporting OpenMP@.  @code{OPENMP_CFLAGS} is set to empty if the
7125 compiler already supports OpenMP, if it has no way to activate OpenMP
7126 support, or if the user rejects OpenMP support by invoking
7127 @samp{configure} with the @samp{--disable-openmp} option.
7129 @code{OPENMP_CFLAGS} needs to be used when compiling programs, when
7130 preprocessing program source, and when linking programs.  Therefore you
7131 need to add @code{$(OPENMP_CFLAGS)} to the @code{CFLAGS} of C programs
7132 that use OpenMP@.  If you preprocess OpenMP-specific C code, you also
7133 need to add @code{$(OPENMP_CFLAGS)} to @code{CPPFLAGS}.  The presence of
7134 OpenMP support is revealed at compile time by the preprocessor macro
7135 @code{_OPENMP}.
7137 Linking a program with @code{OPENMP_CFLAGS} typically adds one more
7138 shared library to the program's dependencies, so its use is recommended
7139 only on programs that actually require OpenMP.
7141 If the current language is C++, @code{AC_OPENMP} sets the variable
7142 @code{OPENMP_CXXFLAGS}, suitably for the C++ compiler.  The same remarks
7143 hold as for C.
7145 If the current language is Fortran 77 or Fortran, @code{AC_OPENMP} sets
7146 the variable @code{OPENMP_FFLAGS} or @code{OPENMP_FCFLAGS},
7147 respectively.  Similar remarks as for C hold, except that
7148 @code{CPPFLAGS} is not used for Fortran, and no preprocessor macro
7149 signals OpenMP support.
7151 For portability, it is best to avoid spaces between @samp{#} and
7152 @samp{pragma omp}.  That is, write @samp{#pragma omp}, not
7153 @samp{# pragma omp}.  The Sun WorkShop 6.2 C compiler chokes on the
7154 latter.
7156 This macro caches its result in the @code{ac_cv_prog_c_openmp},
7157 @code{ac_cv_prog_cxx_openmp}, @code{ac_cv_prog_f77_openmp}, or
7158 @code{ac_cv_prog_fc_openmp} variable, depending on the current language.
7159 @end defmac
7161 @node C Compiler
7162 @subsection C Compiler Characteristics
7164 The following macros provide ways to find and exercise a C Compiler.
7165 There are a few constructs that ought to be avoided, but do not deserve
7166 being checked for, since they can easily be worked around.
7168 @table @asis
7169 @item Don't use lines containing solitary backslashes
7170 They tickle a bug in the HP-UX C compiler (checked on
7171 HP-UX 10.20,
7172 11.00, and 11i).  When given the following source:
7174 @example
7175 #ifdef __STDC__
7177 * A comment with backslash-newlines in it.  %@{ %@} *\
7180 char str[] = "\\
7181 " A string with backslash-newlines in it %@{ %@} \\
7183 char apostrophe = '\\
7187 #endif
7188 @end example
7190 @noindent
7191 the compiler incorrectly fails with the diagnostics ``Non-terminating
7192 comment at end of file'' and ``Missing @samp{#endif} at end of file.''
7193 Removing the lines with solitary backslashes solves the problem.
7195 @item Don't compile several files at once if output matters to you
7196 Some compilers, such as HP's, report names of files being
7197 compiled when given more than one file operand.  For instance:
7199 @example
7200 $ @kbd{cc a.c b.c}
7201 a.c:
7202 b.c:
7203 @end example
7205 @noindent
7206 This can cause problems if you observe the output of the compiler to
7207 detect failures.  Invoking @samp{cc -c a.c && cc -c b.c && cc -o c a.o
7208 b.o} solves the issue.
7210 @item Don't rely on @code{#error} failing
7211 The IRIX C compiler does not fail when #error is preprocessed; it
7212 simply emits a diagnostic and continues, exiting successfully.  So,
7213 instead of an error directive like @code{#error "Unsupported word size"}
7214 it is more portable to use an invalid directive like @code{#Unsupported
7215 word size} in Autoconf tests.  In ordinary source code, @code{#error} is
7216 OK, since installers with inadequate compilers like IRIX can simply
7217 examine these compilers' diagnostic output.
7219 @item Don't rely on correct @code{#line} support
7220 On Solaris, @command{c89} (at least Sun C 5.3 through 5.8)
7221 diagnoses @code{#line} directives whose line
7222 numbers are greater than 32767.  Nothing in Posix
7223 makes this invalid.  That is why Autoconf stopped issuing
7224 @code{#line} directives.
7225 @end table
7227 @anchor{AC_PROG_CC}
7228 @defmac AC_PROG_CC (@ovar{compiler-search-list})
7229 @acindex{PROG_CC}
7230 @evindex CC
7231 @evindex CFLAGS
7232 @ovindex CC
7233 @ovindex CFLAGS
7234 @caindex prog_cc_stdc
7235 Determine a C compiler to use.  If @code{CC} is not already set in the
7236 environment, check for @code{gcc} and @code{cc}, then for other C
7237 compilers.  Set output variable @code{CC} to the name of the compiler
7238 found.
7240 This macro may, however, be invoked with an optional first argument
7241 which, if specified, must be a blank-separated list of C compilers to
7242 search for.  This just gives the user an opportunity to specify an
7243 alternative search list for the C compiler.  For example, if you didn't
7244 like the default order, then you could invoke @code{AC_PROG_CC} like
7245 this:
7247 @example
7248 AC_PROG_CC([gcc cl cc])
7249 @end example
7251 If necessary, add an option to output variable @code{CC} to enable
7252 support for ISO Standard C features with extensions.  Prefer the newest
7253 C standard that is supported.  Currently the newest standard is ISO C11,
7254 with ISO C99 and ANSI C89 (ISO C90) being the older versions.
7255 After calling this macro you can check whether the C compiler has been
7256 set to accept Standard C; if not, the shell variable
7257 @code{ac_cv_prog_cc_stdc} is set to @samp{no}.
7259 When attempting to add compiler options, prefer extended functionality
7260 to strict conformance: the goal is to enable whatever standard features
7261 that are available, not to check for full conformance to the standard or
7262 to prohibit incompatible extensions.  Test for C11 support by checking
7263 for @code{_Alignas}, @code{_Alignof}, @code{_Noreturn},
7264 @code{_Static_assert}, UTF-8 string literals, duplicate @code{typedef}s,
7265 and anonymous structures and unions.  Test for C99 support by checking
7266 for @code{_Bool}, @code{//} comments, flexible array members,
7267 @code{inline}, signed and unsigned @code{long long int}, mixed code and
7268 declarations, named initialization of structs, @code{restrict},
7269 @code{va_copy}, varargs macros, variable declarations in @code{for}
7270 loops, and variable length arrays.  Test for C89 support by checking for
7271 function prototypes.
7273 If using a compiler that supports GNU C, set shell variable @code{GCC} to
7274 @samp{yes}.  If output variable @code{CFLAGS} was not already set, set
7275 it to @option{-g -O2} for a GNU C compiler (@option{-O2} on systems
7276 where the compiler does not accept @option{-g}), or @option{-g} for
7277 other compilers.  If your package does not like this default, then it is
7278 acceptable to insert the line @samp{: $@{CFLAGS=""@}} after @code{AC_INIT}
7279 and before @code{AC_PROG_CC} to select an empty default instead.
7281 Many Autoconf macros use a compiler, and thus call
7282 @samp{AC_REQUIRE([AC_PROG_CC])} to ensure that the compiler has been
7283 determined before the body of the outermost @code{AC_DEFUN} macro.
7284 @code{AC_PROG_CC} is therefore defined via @code{AC_DEFUN_ONCE} to avoid
7285 needless reexpansion (@pxref{One-Shot Macros}).
7286 @end defmac
7288 @anchor{AC_PROG_CC_C_O}
7289 @defmac AC_PROG_CC_C_O
7290 @acindex{PROG_CC_C_O}
7291 @cvindex NO_MINUS_C_MINUS_O
7292 @caindex prog_cc_@var{compiler}_c_o
7293 If the C compiler does not accept the @option{-c} and @option{-o} options
7294 simultaneously, define @code{NO_MINUS_C_MINUS_O}.  This macro actually
7295 tests both the compiler found by @code{AC_PROG_CC}, and, if different,
7296 the first @code{cc} in the path.  The test fails if one fails.  This
7297 macro was created for GNU Make to choose the default C compilation
7298 rule.
7300 For the compiler @var{compiler}, this macro caches its result in the
7301 @code{ac_cv_prog_cc_@var{compiler}_c_o} variable.
7302 @end defmac
7305 @defmac AC_PROG_CPP
7306 @acindex{PROG_CPP}
7307 @evindex CPP
7308 @ovindex CPP
7309 Set output variable @code{CPP} to a command that runs the
7310 C preprocessor.  If @samp{$CC -E} doesn't work, @file{/lib/cpp} is used.
7311 It is only portable to run @code{CPP} on files with a @file{.c}
7312 extension.
7314 Some preprocessors don't indicate missing include files by the error
7315 status.  For such preprocessors an internal variable is set that causes
7316 other macros to check the standard error from the preprocessor and
7317 consider the test failed if any warnings have been reported.
7318 For most preprocessors, though, warnings do not cause include-file
7319 tests to fail unless @code{AC_PROG_CPP_WERROR} is also specified.
7320 @end defmac
7322 @defmac AC_PROG_CPP_WERROR
7323 @acindex{PROG_CPP_WERROR}
7324 @ovindex CPP
7325 This acts like @code{AC_PROG_CPP}, except it treats warnings from the
7326 preprocessor as errors even if the preprocessor exit status indicates
7327 success.  This is useful for avoiding headers that generate mandatory
7328 warnings, such as deprecation notices.
7329 @end defmac
7332 The following macros check for C compiler or machine architecture
7333 features.  To check for characteristics not listed here, use
7334 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}) or
7335 @code{AC_RUN_IFELSE} (@pxref{Runtime}).
7337 @defmac AC_C_BACKSLASH_A
7338 @acindex{C_BACKSLASH_A}
7339 @cvindex HAVE_C_BACKSLASH_A
7340 Define @samp{HAVE_C_BACKSLASH_A} to 1 if the C compiler understands
7341 @samp{\a}.
7343 This macro is obsolescent, as current C compilers understand @samp{\a}.
7344 New programs need not use this macro.
7345 @end defmac
7347 @anchor{AC_C_BIGENDIAN}
7348 @defmac AC_C_BIGENDIAN (@ovar{action-if-true}, @ovar{action-if-false}, @
7349   @ovar{action-if-unknown}, @ovar{action-if-universal})
7350 @acindex{C_BIGENDIAN}
7351 @cvindex WORDS_BIGENDIAN
7352 @cindex Endianness
7353 If words are stored with the most significant byte first (like Motorola
7354 and SPARC CPUs), execute @var{action-if-true}.  If words are stored with
7355 the least significant byte first (like Intel and VAX CPUs), execute
7356 @var{action-if-false}.
7358 This macro runs a test-case if endianness cannot be determined from the
7359 system header files.  When cross-compiling, the test-case is not run but
7360 grep'ed for some magic values.  @var{action-if-unknown} is executed if
7361 the latter case fails to determine the byte sex of the host system.
7363 In some cases a single run of a compiler can generate code for multiple
7364 architectures.  This can happen, for example, when generating Mac OS X
7365 universal binary files, which work on both PowerPC and Intel
7366 architectures.  In this case, the different variants might be for
7367 architectures with differing endianness.  If
7368 @command{configure} detects this, it executes @var{action-if-universal}
7369 instead of @var{action-if-unknown}.
7371 The default for @var{action-if-true} is to define
7372 @samp{WORDS_BIGENDIAN}.  The default for @var{action-if-false} is to do
7373 nothing.  The default for @var{action-if-unknown} is to
7374 abort configure and tell the installer how to bypass this test.
7375 And finally, the default for @var{action-if-universal} is to ensure that
7376 @samp{WORDS_BIGENDIAN} is defined if and only if a universal build is
7377 detected and the current code is big-endian; this default works only if
7378 @command{autoheader} is used (@pxref{autoheader Invocation}).
7380 If you use this macro without specifying @var{action-if-universal}, you
7381 should also use @code{AC_CONFIG_HEADERS}; otherwise
7382 @samp{WORDS_BIGENDIAN} may be set incorrectly for Mac OS X universal
7383 binary files.
7384 @end defmac
7386 @anchor{AC_C_CONST}
7387 @defmac AC_C_CONST
7388 @acindex{C_CONST}
7389 @cvindex const
7390 @caindex c_const
7391 If the C compiler does not fully support the @code{const} keyword,
7392 define @code{const} to be empty.  Some C compilers that do
7393 not define @code{__STDC__} do support @code{const}; some compilers that
7394 define @code{__STDC__} do not completely support @code{const}.  Programs
7395 can simply use @code{const} as if every C compiler supported it; for
7396 those that don't, the makefile or configuration header file
7397 defines it as empty.
7399 Occasionally installers use a C++ compiler to compile C code, typically
7400 because they lack a C compiler.  This causes problems with @code{const},
7401 because C and C++ treat @code{const} differently.  For example:
7403 @example
7404 const int foo;
7405 @end example
7407 @noindent
7408 is valid in C but not in C++.  These differences unfortunately cannot be
7409 papered over by defining @code{const} to be empty.
7411 If @command{autoconf} detects this situation, it leaves @code{const} alone,
7412 as this generally yields better results in practice.  However, using a
7413 C++ compiler to compile C code is not recommended or supported, and
7414 installers who run into trouble in this area should get a C compiler
7415 like GCC to compile their C code.
7417 This macro caches its result in the @code{ac_cv_c_const} variable.
7419 This macro is obsolescent, as current C compilers support @code{const}.
7420 New programs need not use this macro.
7421 @end defmac
7423 @defmac AC_C__GENERIC
7424 @acindex{C__GENERIC}
7425 @cvindex _Generic
7426 If the C compiler supports C11-style generic selection using the
7427 @code{_Generic} keyword, define @code{HAVE_C__GENERIC}.
7428 @end defmac
7430 @defmac AC_C_RESTRICT
7431 @acindex{C_RESTRICT}
7432 @cvindex restrict
7433 @caindex c_restrict
7434 If the C compiler recognizes a variant spelling for the @code{restrict}
7435 keyword (@code{__restrict}, @code{__restrict__}, or @code{_Restrict}),
7436 then define @code{restrict} to that; this is more likely to do the right
7437 thing with compilers that support language variants where plain
7438 @code{restrict} is not a keyword.  Otherwise, if the C compiler
7439 recognizes the @code{restrict} keyword, don't do anything.
7440 Otherwise, define @code{restrict} to be empty.
7441 Thus, programs may simply use @code{restrict} as if every C compiler
7442 supported it; for those that do not, the makefile
7443 or configuration header defines it away.
7445 Although support in C++ for the @code{restrict} keyword is not
7446 required, several C++ compilers do accept the keyword.
7447 This macro works for them, too.
7449 This macro caches @samp{no} in the @code{ac_cv_c_restrict} variable
7450 if @code{restrict} is not supported, and a supported spelling otherwise.
7451 @end defmac
7453 @defmac AC_C_VOLATILE
7454 @acindex{C_VOLATILE}
7455 @cvindex volatile
7456 If the C compiler does not understand the keyword @code{volatile},
7457 define @code{volatile} to be empty.  Programs can simply use
7458 @code{volatile} as if every C compiler supported it; for those that do
7459 not, the makefile or configuration header defines it as
7460 empty.
7462 If the correctness of your program depends on the semantics of
7463 @code{volatile}, simply defining it to be empty does, in a sense, break
7464 your code.  However, given that the compiler does not support
7465 @code{volatile}, you are at its mercy anyway.  At least your
7466 program compiles, when it wouldn't before.
7467 @xref{Volatile Objects}, for more about @code{volatile}.
7469 In general, the @code{volatile} keyword is a standard C feature, so
7470 you might expect that @code{volatile} is available only when
7471 @code{__STDC__} is defined.  However, Ultrix 4.3's native compiler does
7472 support volatile, but does not define @code{__STDC__}.
7474 This macro is obsolescent, as current C compilers support @code{volatile}.
7475 New programs need not use this macro.
7476 @end defmac
7478 @anchor{AC_C_INLINE}
7479 @defmac AC_C_INLINE
7480 @acindex{C_INLINE}
7481 @cvindex inline
7482 If the C compiler supports the keyword @code{inline}, do nothing.
7483 Otherwise define @code{inline} to @code{__inline__} or @code{__inline}
7484 if it accepts one of those, otherwise define @code{inline} to be empty.
7485 @end defmac
7487 @anchor{AC_C_CHAR_UNSIGNED}
7488 @defmac AC_C_CHAR_UNSIGNED
7489 @acindex{C_CHAR_UNSIGNED}
7490 @cvindex __CHAR_UNSIGNED__
7491 If the C type @code{char} is unsigned, define @code{__CHAR_UNSIGNED__},
7492 unless the C compiler predefines it.
7494 These days, using this macro is not necessary.  The same information can
7495 be determined by this portable alternative, thus avoiding the use of
7496 preprocessor macros in the namespace reserved for the implementation.
7498 @example
7499 #include <limits.h>
7500 #if CHAR_MIN == 0
7501 # define CHAR_UNSIGNED 1
7502 #endif
7503 @end example
7504 @end defmac
7506 @defmac AC_C_STRINGIZE
7507 @acindex{C_STRINGIZE}
7508 @cvindex HAVE_STRINGIZE
7509 If the C preprocessor supports the stringizing operator, define
7510 @code{HAVE_STRINGIZE}.  The stringizing operator is @samp{#} and is
7511 found in macros such as this:
7513 @example
7514 #define x(y) #y
7515 @end example
7517 This macro is obsolescent, as current C compilers support the
7518 stringizing operator.  New programs need not use this macro.
7519 @end defmac
7521 @defmac AC_C_FLEXIBLE_ARRAY_MEMBER
7522 @acindex{C_FLEXIBLE_ARRAY_MEMBER}
7523 @cvindex FLEXIBLE_ARRAY_MEMBER
7524 If the C compiler supports flexible array members, define
7525 @code{FLEXIBLE_ARRAY_MEMBER} to nothing; otherwise define it to 1.
7526 That way, a declaration like this:
7528 @example
7529 struct s
7530   @{
7531     size_t n_vals;
7532     double val[FLEXIBLE_ARRAY_MEMBER];
7533   @};
7534 @end example
7536 @noindent
7537 will let applications use the ``struct hack'' even with compilers that
7538 do not support flexible array members.  To allocate and use such an
7539 object, you can use code like this:
7541 @example
7542 size_t i;
7543 size_t n = compute_value_count ();
7544 struct s *p =
7545    malloc (offsetof (struct s, val)
7546            + n * sizeof (double));
7547 p->n_vals = n;
7548 for (i = 0; i < n; i++)
7549   p->val[i] = compute_value (i);
7550 @end example
7551 @end defmac
7553 @defmac AC_C_VARARRAYS
7554 @acindex{C_VARARRAYS}
7555 @cvindex __STDC_NO_VLA__
7556 @cvindex HAVE_C_VARARRAYS
7557 If the C compiler does not support variable-length arrays, define the
7558 macro @code{__STDC_NO_VLA__} to be 1 if it is not already defined.  A
7559 variable-length array is an array of automatic storage duration whose
7560 length is determined at run time, when the array is declared.  For
7561 backward compatibility this macro also defines @code{HAVE_C_VARARRAYS}
7562 if the C compiler supports variable-length arrays, but this usage is
7563 obsolescent and new programs should use @code{__STDC_NO_VLA__}.
7564 @end defmac
7566 @defmac AC_C_TYPEOF
7567 @acindex{C_TYPEOF}
7568 @cvindex HAVE_TYPEOF
7569 @cvindex typeof
7570 If the C compiler supports GNU C's @code{typeof} syntax either
7571 directly or
7572 through a different spelling of the keyword (e.g., @code{__typeof__}),
7573 define @code{HAVE_TYPEOF}.  If the support is available only through a
7574 different spelling, define @code{typeof} to that spelling.
7575 @end defmac
7577 @defmac AC_C_PROTOTYPES
7578 @acindex{C_PROTOTYPES}
7579 @cvindex PROTOTYPES
7580 @cvindex __PROTOTYPES
7581 @cvindex PARAMS
7582 If function prototypes are understood by the compiler (as determined by
7583 @code{AC_PROG_CC}), define @code{PROTOTYPES} and @code{__PROTOTYPES}.
7584 Defining @code{__PROTOTYPES} is for the benefit of
7585 header files that cannot use macros that infringe on user name space.
7587 This macro is obsolescent, as current C compilers support prototypes.
7588 New programs need not use this macro.
7589 @end defmac
7591 @anchor{AC_PROG_GCC_TRADITIONAL}
7592 @defmac AC_PROG_GCC_TRADITIONAL
7593 @acindex{PROG_GCC_TRADITIONAL}
7594 @ovindex CC
7595 Add @option{-traditional} to output variable @code{CC} if using a
7596 GNU C compiler and @code{ioctl} does not work properly without
7597 @option{-traditional}.  That usually happens when the fixed header files
7598 have not been installed on an old system.
7600 This macro is obsolescent, since current versions of the GNU C
7601 compiler fix the header files automatically when installed.
7602 @end defmac
7605 @node C++ Compiler
7606 @subsection C++ Compiler Characteristics
7609 @defmac AC_PROG_CXX (@ovar{compiler-search-list})
7610 @acindex{PROG_CXX}
7611 @evindex CXX
7612 @evindex CXXFLAGS
7613 @ovindex CXX
7614 @ovindex CXXFLAGS
7615 Determine a C++ compiler to use.  Check whether the environment variable
7616 @code{CXX} or @code{CCC} (in that order) is set; if so, then set output
7617 variable @code{CXX} to its value.
7619 Otherwise, if the macro is invoked without an argument, then search for
7620 a C++ compiler under the likely names (first @code{g++} and @code{c++}
7621 then other names).  If none of those checks succeed, then as a last
7622 resort set @code{CXX} to @code{g++}.
7624 This macro may, however, be invoked with an optional first argument
7625 which, if specified, must be a blank-separated list of C++ compilers to
7626 search for.  This just gives the user an opportunity to specify an
7627 alternative search list for the C++ compiler.  For example, if you
7628 didn't like the default order, then you could invoke @code{AC_PROG_CXX}
7629 like this:
7631 @example
7632 AC_PROG_CXX([gcc cl KCC CC cxx cc++ xlC aCC c++ g++])
7633 @end example
7635 If necessary, add an option to output variable @code{CXX} to enable
7636 support for ISO Standard C++ features with extensions.  Prefer the
7637 newest C++ standard that is supported.  Currently the newest standard is
7638 ISO C++11, with ISO C++98 being the previous standard.  After calling
7639 this macro you can check whether the C++ compiler has been set to accept
7640 Standard C++; if not, the shell variable @code{ac_cv_prog_cxx_stdcxx} is
7641 set to @samp{no}.  If the C++ compiler will not accept C++11, the shell
7642 variable @code{ac_cv_prog_cxx_cxx11} is set to @samp{no}, and if it will
7643 not accept C++98, the shell variable @code{ac_cv_prog_cxx_cxx98} is set
7644 to @samp{no}.
7646 When attempting to add compiler options, prefer extended functionality
7647 to strict conformance: the goal is to enable whatever standard features
7648 that are available, not to check for full conformance to the standard or
7649 to prohibit incompatible extensions.  Test for C++11 support by checking
7650 for the language features @code{auto}, @code{constexpr},
7651 @code{decltype}, @code{default}ed and @code{delete}ed constructors,
7652 delegate constructors, @code{final}, initializer lists, lambda
7653 functions, @code{nullptr}, @code{override}, range-based for loops,
7654 template brackets without spaces and unicode literals, and library
7655 features @code{std::array}, @code{std::shared_ptr},
7656 @code{std::weak_ptr}, @code{std::regex} and @code{std::tuple}.  Test for
7657 C++98 support using basic features of the @code{std} namespace including
7658 @code{std::string}, containers (@code{std::list}, @code{std::map},
7659 @code{std::set}, @code{std::vector}), streams (fstreams, iostreams,
7660 stringstreams, iomanip), @code{std::pair}, exceptions (@code{try},
7661 @code{catch} and @code{std::runtime_error}) and algorithms.  Tests for
7662 more recent standards include all the tests for older standards.
7664 If using the GNU C++ compiler, set shell variable @code{GXX} to
7665 @samp{yes}.  If output variable @code{CXXFLAGS} was not already set, set
7666 it to @option{-g -O2} for the GNU C++ compiler (@option{-O2} on
7667 systems where G++ does not accept @option{-g}), or @option{-g} for other
7668 compilers.  If your package does not like this default, then it is
7669 acceptable to insert the line @samp{: $@{CXXFLAGS=""@}} after @code{AC_INIT}
7670 and before @code{AC_PROG_CXX} to select an empty default instead.
7671 @end defmac
7673 @defmac AC_PROG_CXXCPP
7674 @acindex{PROG_CXXCPP}
7675 @evindex CXXCPP
7676 @ovindex CXXCPP
7677 Set output variable @code{CXXCPP} to a command that runs the C++
7678 preprocessor.  If @samp{$CXX -E} doesn't work, @file{/lib/cpp} is used.
7679 It is portable to run @code{CXXCPP} only on files with a @file{.c},
7680 @file{.C}, @file{.cc}, or @file{.cpp} extension.
7682 Some preprocessors don't indicate missing include files by the error
7683 status.  For such preprocessors an internal variable is set that causes
7684 other macros to check the standard error from the preprocessor and
7685 consider the test failed if any warnings have been reported.  However,
7686 it is not known whether such broken preprocessors exist for C++.
7687 @end defmac
7689 @defmac AC_PROG_CXX_C_O
7690 @acindex{PROG_CXX_C_O}
7691 @cvindex CXX_NO_MINUS_C_MINUS_O
7692 Test whether the C++ compiler accepts the options @option{-c} and
7693 @option{-o} simultaneously, and define @code{CXX_NO_MINUS_C_MINUS_O},
7694 if it does not.
7695 @end defmac
7698 @node Objective C Compiler
7699 @subsection Objective C Compiler Characteristics
7702 @defmac AC_PROG_OBJC (@ovar{compiler-search-list})
7703 @acindex{PROG_OBJC}
7704 @evindex OBJC
7705 @evindex OBJCFLAGS
7706 @ovindex OBJC
7707 @ovindex OBJCFLAGS
7708 Determine an Objective C compiler to use.  If @code{OBJC} is not already
7709 set in the environment, check for Objective C compilers.  Set output
7710 variable @code{OBJC} to the name of the compiler found.
7712 This macro may, however, be invoked with an optional first argument
7713 which, if specified, must be a blank-separated list of Objective C compilers to
7714 search for.  This just gives the user an opportunity to specify an
7715 alternative search list for the Objective C compiler.  For example, if you
7716 didn't like the default order, then you could invoke @code{AC_PROG_OBJC}
7717 like this:
7719 @example
7720 AC_PROG_OBJC([gcc objcc objc])
7721 @end example
7723 If using a compiler that supports GNU Objective C, set shell variable
7724 @code{GOBJC} to @samp{yes}.  If output variable @code{OBJCFLAGS} was not
7725 already set, set it to @option{-g -O2} for a GNU Objective C
7726 compiler (@option{-O2} on systems where the compiler does not accept
7727 @option{-g}), or @option{-g} for other compilers.
7728 @end defmac
7730 @defmac AC_PROG_OBJCPP
7731 @acindex{PROG_OBJCPP}
7732 @evindex OBJCPP
7733 @ovindex OBJCPP
7734 Set output variable @code{OBJCPP} to a command that runs the Objective C
7735 preprocessor.  If @samp{$OBJC -E} doesn't work, @file{/lib/cpp} is used.
7736 @end defmac
7739 @node Objective C++ Compiler
7740 @subsection Objective C++ Compiler Characteristics
7743 @defmac AC_PROG_OBJCXX (@ovar{compiler-search-list})
7744 @acindex{PROG_OBJCXX}
7745 @evindex OBJCXX
7746 @evindex OBJCXXFLAGS
7747 @ovindex OBJCXX
7748 @ovindex OBJCXXFLAGS
7749 Determine an Objective C++ compiler to use.  If @code{OBJCXX} is not already
7750 set in the environment, check for Objective C++ compilers.  Set output
7751 variable @code{OBJCXX} to the name of the compiler found.
7753 This macro may, however, be invoked with an optional first argument
7754 which, if specified, must be a blank-separated list of Objective C++ compilers
7755 to search for.  This just gives the user an opportunity to specify an
7756 alternative search list for the Objective C++ compiler.  For example, if you
7757 didn't like the default order, then you could invoke @code{AC_PROG_OBJCXX}
7758 like this:
7760 @example
7761 AC_PROG_OBJCXX([gcc g++ objcc++ objcxx])
7762 @end example
7764 If using a compiler that supports GNU Objective C++, set shell variable
7765 @code{GOBJCXX} to @samp{yes}.  If output variable @code{OBJCXXFLAGS} was not
7766 already set, set it to @option{-g -O2} for a GNU Objective C++
7767 compiler (@option{-O2} on systems where the compiler does not accept
7768 @option{-g}), or @option{-g} for other compilers.
7769 @end defmac
7771 @defmac AC_PROG_OBJCXXCPP
7772 @acindex{PROG_OBJCXXCPP}
7773 @evindex OBJCXXCPP
7774 @ovindex OBJCXXCPP
7775 Set output variable @code{OBJCXXCPP} to a command that runs the Objective C++
7776 preprocessor.  If @samp{$OBJCXX -E} doesn't work, @file{/lib/cpp} is used.
7777 @end defmac
7780 @node Erlang Compiler and Interpreter
7781 @subsection Erlang Compiler and Interpreter Characteristics
7782 @cindex Erlang
7784 Autoconf defines the following macros for determining paths to the essential
7785 Erlang/OTP programs:
7787 @defmac AC_ERLANG_PATH_ERLC (@ovar{value-if-not-found}, @dvar{path, $PATH})
7788 @acindex{ERLANG_PATH_ERLC}
7789 @evindex ERLC
7790 @evindex ERLCFLAGS
7791 @ovindex ERLC
7792 @ovindex ERLCFLAGS
7793 Determine an Erlang compiler to use.  If @code{ERLC} is not already set in the
7794 environment, check for @command{erlc}.  Set output variable @code{ERLC} to the
7795 complete path of the compiler command found.  In addition, if @code{ERLCFLAGS}
7796 is not set in the environment, set it to an empty value.
7798 The two optional arguments have the same meaning as the two last arguments of
7799 macro @code{AC_PATH_PROG} for looking for the @command{erlc} program.  For
7800 example, to look for @command{erlc} only in the @file{/usr/lib/erlang/bin}
7801 directory:
7803 @example
7804 AC_ERLANG_PATH_ERLC([not found], [/usr/lib/erlang/bin])
7805 @end example
7806 @end defmac
7808 @defmac AC_ERLANG_NEED_ERLC (@dvar{path, $PATH})
7809 @acindex{ERLANG_NEED_ERLC}
7810 A simplified variant of the @code{AC_ERLANG_PATH_ERLC} macro, that prints an
7811 error message and exits the @command{configure} script if the @command{erlc}
7812 program is not found.
7813 @end defmac
7815 @defmac AC_ERLANG_PATH_ERL (@ovar{value-if-not-found}, @dvar{path, $PATH})
7816 @acindex{ERLANG_PATH_ERL}
7817 @evindex ERL
7818 @ovindex ERL
7819 Determine an Erlang interpreter to use.  If @code{ERL} is not already
7820 set in the
7821 environment, check for @command{erl}.  Set output variable @code{ERL} to the
7822 complete path of the interpreter command found.
7824 The two optional arguments have the same meaning as the two last arguments of
7825 macro @code{AC_PATH_PROG} for looking for the @command{erl} program.  For
7826 example, to look for @command{erl} only in the @file{/usr/lib/erlang/bin}
7827 directory:
7829 @example
7830 AC_ERLANG_PATH_ERL([not found], [/usr/lib/erlang/bin])
7831 @end example
7832 @end defmac
7834 @defmac AC_ERLANG_NEED_ERL (@dvar{path, $PATH})
7835 @acindex{ERLANG_NEED_ERL}
7836 A simplified variant of the @code{AC_ERLANG_PATH_ERL} macro, that prints an
7837 error message and exits the @command{configure} script if the @command{erl}
7838 program is not found.
7839 @end defmac
7842 @node Fortran Compiler
7843 @subsection Fortran Compiler Characteristics
7844 @cindex Fortran
7845 @cindex F77
7847 The Autoconf Fortran support is divided into two categories: legacy
7848 Fortran 77 macros (@code{F77}), and modern Fortran macros (@code{FC}).
7849 The former are intended for traditional Fortran 77 code, and have output
7850 variables like @code{F77}, @code{FFLAGS}, and @code{FLIBS}.  The latter
7851 are for newer programs that can (or must) compile under the newer
7852 Fortran standards, and have output variables like @code{FC},
7853 @code{FCFLAGS}, and @code{FCLIBS}.
7855 Except for the macros @code{AC_FC_SRCEXT}, @code{AC_FC_FREEFORM},
7856 @code{AC_FC_FIXEDFORM}, and @code{AC_FC_LINE_LENGTH} (see below), the
7857 @code{FC} and @code{F77} macros behave almost identically, and so they
7858 are documented together in this section.
7861 @defmac AC_PROG_F77 (@ovar{compiler-search-list})
7862 @acindex{PROG_F77}
7863 @evindex F77
7864 @evindex FFLAGS
7865 @ovindex F77
7866 @ovindex FFLAGS
7867 @caindex f77_compiler_gnu
7868 @caindex prog_f77_g
7869 Determine a Fortran 77 compiler to use.  If @code{F77} is not already
7870 set in the environment, then check for @code{g77} and @code{f77}, and
7871 then some other names.  Set the output variable @code{F77} to the name
7872 of the compiler found.
7874 This macro may, however, be invoked with an optional first argument
7875 which, if specified, must be a blank-separated list of Fortran 77
7876 compilers to search for.  This just gives the user an opportunity to
7877 specify an alternative search list for the Fortran 77 compiler.  For
7878 example, if you didn't like the default order, then you could invoke
7879 @code{AC_PROG_F77} like this:
7881 @example
7882 AC_PROG_F77([fl32 f77 fort77 xlf g77 f90 xlf90])
7883 @end example
7885 If using a compiler that supports GNU Fortran 77,
7886 set the shell variable @code{G77} to @samp{yes}.
7887 If the output variable @code{FFLAGS} was not already set in the
7888 environment, set it to @option{-g -02} for @code{g77} (or @option{-O2}
7889 where the GNU Fortran 77 compiler does not accept @option{-g}), or
7890 @option{-g} for other compilers.
7892 The result of the GNU test is cached in the
7893 @code{ac_cv_f77_compiler_gnu} variable, acceptance of @option{-g} in the
7894 @code{ac_cv_prog_f77_g} variable.
7895 @end defmac
7897 @defmac AC_PROG_FC (@ovar{compiler-search-list}, @ovar{dialect})
7898 @acindex{PROG_FC}
7899 @evindex FC
7900 @evindex FCFLAGS
7901 @ovindex FC
7902 @ovindex FCFLAGS
7903 @caindex fc_compiler_gnu
7904 @caindex prog_fc_g
7905 Determine a Fortran compiler to use.  If @code{FC} is not already set in
7906 the environment, then @code{dialect} is a hint to indicate what Fortran
7907 dialect to search for; the default is to search for the newest available
7908 dialect.  Set the output variable @code{FC} to the name of the compiler
7909 found.
7911 By default, newer dialects are preferred over older dialects, but if
7912 @code{dialect} is specified then older dialects are preferred starting
7913 with the specified dialect.  @code{dialect} can currently be one of
7914 Fortran 77, Fortran 90, or Fortran 95.  However, this is only a hint of
7915 which compiler @emph{name} to prefer (e.g., @code{f90} or @code{f95}),
7916 and no attempt is made to guarantee that a particular language standard
7917 is actually supported.  Thus, it is preferable that you avoid the
7918 @code{dialect} option, and use AC_PROG_FC only for code compatible with
7919 the latest Fortran standard.
7921 This macro may, alternatively, be invoked with an optional first argument
7922 which, if specified, must be a blank-separated list of Fortran
7923 compilers to search for, just as in @code{AC_PROG_F77}.
7925 If using a compiler that supports GNU Fortran,
7926 set the shell variable @code{GFC} to @samp{yes}.
7927 If the output variable @code{FCFLAGS} was not already set in the
7928 environment, then set it to @option{-g -02} for a GNU Fortran compiler (or
7929 @option{-O2} where the compiler does not accept @option{-g}), or
7930 @option{-g} for other compilers.
7932 The result of the GNU test is cached in the @code{ac_cv_fc_compiler_gnu}
7933 variable, acceptance of @option{-g} in the @code{ac_cv_prog_fc_g}
7934 variable.
7935 @end defmac
7937 @defmac AC_PROG_F77_C_O
7938 @defmacx AC_PROG_FC_C_O
7939 @acindex{PROG_F77_C_O}
7940 @acindex{PROG_FC_C_O}
7941 @cvindex F77_NO_MINUS_C_MINUS_O
7942 @cvindex FC_NO_MINUS_C_MINUS_O
7943 @caindex prog_f77_c_o
7944 @caindex prog_fc_c_o
7945 Test whether the Fortran compiler accepts the options @option{-c} and
7946 @option{-o} simultaneously, and define @code{F77_NO_MINUS_C_MINUS_O} or
7947 @code{FC_NO_MINUS_C_MINUS_O}, respectively, if it does not.
7949 The result of the test is cached in the @code{ac_cv_prog_f77_c_o} or
7950 @code{ac_cv_prog_fc_c_o} variable, respectively.
7951 @end defmac
7953 The following macros check for Fortran compiler characteristics.
7954 To check for characteristics not listed here, use
7955 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}) or
7956 @code{AC_RUN_IFELSE} (@pxref{Runtime}), making sure to first set the
7957 current language to Fortran 77 or Fortran via @code{AC_LANG([Fortran 77])}
7958 or @code{AC_LANG(Fortran)} (@pxref{Language Choice}).
7961 @defmac AC_F77_LIBRARY_LDFLAGS
7962 @defmacx AC_FC_LIBRARY_LDFLAGS
7963 @acindex{F77_LIBRARY_LDFLAGS}
7964 @ovindex FLIBS
7965 @acindex{FC_LIBRARY_LDFLAGS}
7966 @ovindex FCLIBS
7967 @caindex prog_f77_v
7968 @caindex prog_fc_v
7969 @caindex f77_libs
7970 @caindex fc_libs
7971 Determine the linker flags (e.g., @option{-L} and @option{-l}) for the
7972 @dfn{Fortran intrinsic and runtime libraries} that are required to
7973 successfully link a Fortran program or shared library.  The output
7974 variable @code{FLIBS} or @code{FCLIBS} is set to these flags (which
7975 should be included after @code{LIBS} when linking).
7977 This macro is intended to be used in those situations when it is
7978 necessary to mix, e.g., C++ and Fortran source code in a single
7979 program or shared library (@pxref{Mixing Fortran 77 With C and C++, , ,
7980 automake, GNU Automake}).
7982 For example, if object files from a C++ and Fortran compiler must be
7983 linked together, then the C++ compiler/linker must be used for linking
7984 (since special C++-ish things need to happen at link time like calling
7985 global constructors, instantiating templates, enabling exception
7986 support, etc.).
7988 However, the Fortran intrinsic and runtime libraries must be linked in
7989 as well, but the C++ compiler/linker doesn't know by default how to add
7990 these Fortran 77 libraries.  Hence, this macro was created to determine
7991 these Fortran libraries.
7993 The macros @code{AC_F77_DUMMY_MAIN} and @code{AC_FC_DUMMY_MAIN} or
7994 @code{AC_F77_MAIN} and @code{AC_FC_MAIN} are probably also necessary to
7995 link C/C++ with Fortran; see below.  Further, it is highly recommended
7996 that you use @code{AC_CONFIG_HEADERS} (@pxref{Configuration Headers})
7997 because the complex defines that the function wrapper macros create
7998 may not work with C/C++ compiler drivers.
8000 These macros internally compute the flag needed to verbose linking
8001 output and cache it in @code{ac_cv_prog_f77_v} or @code{ac_cv_prog_fc_v}
8002 variables, respectively.  The computed linker flags are cached in
8003 @code{ac_cv_f77_libs} or @code{ac_cv_fc_libs}, respectively.
8004 @end defmac
8006 @defmac AC_F77_DUMMY_MAIN (@ovar{action-if-found}, @
8007   @dvar{action-if-not-found, AC_MSG_FAILURE})
8008 @defmacx AC_FC_DUMMY_MAIN (@ovar{action-if-found}, @
8009   @dvar{action-if-not-found, AC_MSG_FAILURE})
8010 @acindex{F77_DUMMY_MAIN}
8011 @cvindex F77_DUMMY_MAIN
8012 @acindex{FC_DUMMY_MAIN}
8013 @cvindex FC_DUMMY_MAIN
8014 @caindex f77_dummy_main
8015 @caindex fc_dummy_main
8016 With many compilers, the Fortran libraries detected by
8017 @code{AC_F77_LIBRARY_LDFLAGS} or @code{AC_FC_LIBRARY_LDFLAGS} provide
8018 their own @code{main} entry function that initializes things like
8019 Fortran I/O, and which then calls a user-provided entry function named
8020 (say) @code{MAIN__} to run the user's program.  The
8021 @code{AC_F77_DUMMY_MAIN} and @code{AC_FC_DUMMY_MAIN} or
8022 @code{AC_F77_MAIN} and @code{AC_FC_MAIN} macros figure out how to deal with
8023 this interaction.
8025 When using Fortran for purely numerical functions (no I/O, etc.)@: often
8026 one prefers to provide one's own @code{main} and skip the Fortran
8027 library initializations.  In this case, however, one may still need to
8028 provide a dummy @code{MAIN__} routine in order to prevent linking errors
8029 on some systems.  @code{AC_F77_DUMMY_MAIN} or @code{AC_FC_DUMMY_MAIN}
8030 detects whether any such routine is @emph{required} for linking, and
8031 what its name is; the shell variable @code{F77_DUMMY_MAIN} or
8032 @code{FC_DUMMY_MAIN} holds this name, @code{unknown} when no solution
8033 was found, and @code{none} when no such dummy main is needed.
8035 By default, @var{action-if-found} defines @code{F77_DUMMY_MAIN} or
8036 @code{FC_DUMMY_MAIN} to the name of this routine (e.g., @code{MAIN__})
8037 @emph{if} it is required.  @var{action-if-not-found} defaults to
8038 exiting with an error.
8040 In order to link with Fortran routines, the user's C/C++ program should
8041 then include the following code to define the dummy main if it is
8042 needed:
8044 @example
8045 @c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
8046 #ifdef F77_DUMMY_MAIN
8047 #  ifdef __cplusplus
8048      extern "C"
8049 #  endif
8050    int F77_DUMMY_MAIN () @{ return 1; @}
8051 #endif
8052 @end example
8054 (Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
8056 Note that this macro is called automatically from @code{AC_F77_WRAPPERS}
8057 or @code{AC_FC_WRAPPERS}; there is generally no need to call it
8058 explicitly unless one wants to change the default actions.
8060 The result of this macro is cached in the @code{ac_cv_f77_dummy_main} or
8061 @code{ac_cv_fc_dummy_main} variable, respectively.
8062 @end defmac
8064 @defmac AC_F77_MAIN
8065 @defmacx AC_FC_MAIN
8066 @acindex{F77_MAIN}
8067 @cvindex F77_MAIN
8068 @acindex{FC_MAIN}
8069 @cvindex FC_MAIN
8070 @caindex f77_main
8071 @caindex fc_main
8072 As discussed above, many Fortran libraries allow you to provide an entry
8073 point called (say) @code{MAIN__} instead of the usual @code{main}, which
8074 is then called by a @code{main} function in the Fortran libraries that
8075 initializes things like Fortran I/O@.  The
8076 @code{AC_F77_MAIN} and @code{AC_FC_MAIN} macros detect whether it is
8077 @emph{possible} to utilize such an alternate main function, and defines
8078 @code{F77_MAIN} and @code{FC_MAIN} to the name of the function.  (If no
8079 alternate main function name is found, @code{F77_MAIN} and @code{FC_MAIN} are
8080 simply defined to @code{main}.)
8082 Thus, when calling Fortran routines from C that perform things like I/O,
8083 one should use this macro and declare the "main" function like so:
8085 @example
8086 @c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
8087 #ifdef __cplusplus
8088   extern "C"
8089 #endif
8090 int F77_MAIN (int argc, char *argv[]);
8091 @end example
8093 (Again, replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
8095 The result of this macro is cached in the @code{ac_cv_f77_main} or
8096 @code{ac_cv_fc_main} variable, respectively.
8097 @end defmac
8099 @defmac AC_F77_WRAPPERS
8100 @defmacx AC_FC_WRAPPERS
8101 @acindex{F77_WRAPPERS}
8102 @cvindex F77_FUNC
8103 @cvindex F77_FUNC_
8104 @acindex{FC_WRAPPERS}
8105 @cvindex FC_FUNC
8106 @cvindex FC_FUNC_
8107 @caindex f77_mangling
8108 @caindex fc_mangling
8109 Defines C macros @code{F77_FUNC (name, NAME)}, @code{FC_FUNC (name, NAME)},
8110 @code{F77_FUNC_(name, NAME)}, and @code{FC_FUNC_(name, NAME)} to properly
8111 mangle the names of C/C++ identifiers, and identifiers with underscores,
8112 respectively, so that they match the name-mangling scheme used by the
8113 Fortran compiler.
8115 Fortran is case-insensitive, and in order to achieve this the Fortran
8116 compiler converts all identifiers into a canonical case and format.  To
8117 call a Fortran subroutine from C or to write a C function that is
8118 callable from Fortran, the C program must explicitly use identifiers in
8119 the format expected by the Fortran compiler.  In order to do this, one
8120 simply wraps all C identifiers in one of the macros provided by
8121 @code{AC_F77_WRAPPERS} or @code{AC_FC_WRAPPERS}.  For example, suppose
8122 you have the following Fortran 77 subroutine:
8124 @example
8125 @c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
8126       subroutine foobar (x, y)
8127       double precision x, y
8128       y = 3.14159 * x
8129       return
8130       end
8131 @end example
8133 You would then declare its prototype in C or C++ as:
8135 @example
8136 @c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
8137 #define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
8138 #ifdef __cplusplus
8139 extern "C"  /* prevent C++ name mangling */
8140 #endif
8141 void FOOBAR_F77 (double *x, double *y);
8142 @end example
8144 Note that we pass both the lowercase and uppercase versions of the
8145 function name to @code{F77_FUNC} so that it can select the right one.
8146 Note also that all parameters to Fortran 77 routines are passed as
8147 pointers (@pxref{Mixing Fortran 77 With C and C++, , , automake, GNU
8148 Automake}).
8150 (Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
8152 Although Autoconf tries to be intelligent about detecting the
8153 name-mangling scheme of the Fortran compiler, there may be Fortran
8154 compilers that it doesn't support yet.  In this case, the above code
8155 generates a compile-time error, but some other behavior
8156 (e.g., disabling Fortran-related features) can be induced by checking
8157 whether @code{F77_FUNC} or @code{FC_FUNC} is defined.
8159 Now, to call that routine from a C program, we would do something like:
8161 @example
8162 @c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
8164     double x = 2.7183, y;
8165     FOOBAR_F77 (&x, &y);
8167 @end example
8169 If the Fortran identifier contains an underscore (e.g., @code{foo_bar}),
8170 you should use @code{F77_FUNC_} or @code{FC_FUNC_} instead of
8171 @code{F77_FUNC} or @code{FC_FUNC} (with the same arguments).  This is
8172 because some Fortran compilers mangle names differently if they contain
8173 an underscore.
8175 The name mangling scheme is encoded in the @code{ac_cv_f77_mangling} or
8176 @code{ac_cv_fc_mangling} cache variable, respectively, and also used for
8177 the @code{AC_F77_FUNC} and @code{AC_FC_FUNC} macros described below.
8178 @end defmac
8180 @defmac AC_F77_FUNC (@var{name}, @ovar{shellvar})
8181 @defmacx AC_FC_FUNC (@var{name}, @ovar{shellvar})
8182 @acindex{F77_FUNC}
8183 @acindex{FC_FUNC}
8184 Given an identifier @var{name}, set the shell variable @var{shellvar} to
8185 hold the mangled version @var{name} according to the rules of the
8186 Fortran linker (see also @code{AC_F77_WRAPPERS} or
8187 @code{AC_FC_WRAPPERS}).  @var{shellvar} is optional; if it is not
8188 supplied, the shell variable is simply @var{name}.  The purpose of
8189 this macro is to give the caller a way to access the name-mangling
8190 information other than through the C preprocessor as above, for example,
8191 to call Fortran routines from some language other than C/C++.
8192 @end defmac
8194 @defmac AC_FC_SRCEXT (@var{ext}, @ovar{action-if-success}, @
8195   @dvar{action-if-failure, AC_MSG_FAILURE})
8196 @defmacx AC_FC_PP_SRCEXT (@var{ext}, @ovar{action-if-success}, @
8197   @dvar{action-if-failure, AC_MSG_FAILURE})
8198 @acindex{FC_SRCEXT}
8199 @acindex{FC_PP_SRCEXT}
8200 @caindex fc_srcext_@var{ext}
8201 @caindex fc_pp_srcext_@var{ext}
8202 By default, the @code{FC} macros perform their tests using a @file{.f}
8203 extension for source-code files.  Some compilers, however, only enable
8204 newer language features for appropriately named files, e.g., Fortran 90
8205 features only for @file{.f90} files, or preprocessing only with
8206 @file{.F} files or maybe other upper-case extensions.  On the other
8207 hand, some other compilers expect all source files to end in @file{.f}
8208 and require special flags to support other file name extensions.  The
8209 @code{AC_FC_SRCEXT} and @code{AC_FC_PP_SRCEXT} macros deal with these
8210 issues.
8212 The @code{AC_FC_SRCEXT} macro tries to get the @code{FC} compiler to
8213 accept files ending with the extension @file{.@var{ext}} (i.e.,
8214 @var{ext} does @emph{not} contain the dot).  If any special compiler
8215 flags are needed for this, it stores them in the output variable
8216 @code{FCFLAGS_@var{ext}}.  This extension and these flags are then used
8217 for all subsequent @code{FC} tests (until @code{AC_FC_SRCEXT} or
8218 @code{AC_FC_PP_SRCEXT} is called another time).
8220 For example, you would use @code{AC_FC_SRCEXT(f90)} to employ the
8221 @file{.f90} extension in future tests, and it would set the
8222 @code{FCFLAGS_f90} output variable with any extra flags that are needed
8223 to compile such files.
8225 Similarly, the @code{AC_FC_PP_SRCEXT} macro tries to get the @code{FC}
8226 compiler to preprocess and compile files with the extension
8227 @file{.@var{ext}}.  When both @command{fpp} and @command{cpp} style
8228 preprocessing are provided, the former is preferred, as the latter may
8229 treat continuation lines, @code{//} tokens, and white space differently
8230 from what some Fortran dialects expect.  Conversely, if you do not want
8231 files to be preprocessed, use only lower-case characters in the file
8232 name extension.  Like with @code{AC_FC_SRCEXT(f90)}, any needed flags
8233 are stored in the @code{FCFLAGS_@var{ext}} variable.
8235 The @code{FCFLAGS_@var{ext}} flags can @emph{not} be simply absorbed
8236 into @code{FCFLAGS}, for two reasons based on the limitations of some
8237 compilers.  First, only one @code{FCFLAGS_@var{ext}} can be used at a
8238 time, so files with different extensions must be compiled separately.
8239 Second, @code{FCFLAGS_@var{ext}} must appear @emph{immediately} before
8240 the source-code file name when compiling.  So, continuing the example
8241 above, you might compile a @file{foo.f90} file in your makefile with the
8242 command:
8244 @example
8245 foo.o: foo.f90
8246        $(FC) -c $(FCFLAGS) $(FCFLAGS_f90) '$(srcdir)/foo.f90'
8247 @end example
8249 If @code{AC_FC_SRCEXT} or @code{AC_FC_PP_SRCEXT} succeeds in compiling
8250 files with the @var{ext} extension, it calls @var{action-if-success}
8251 (defaults to nothing).  If it fails, and cannot find a way to make the
8252 @code{FC} compiler accept such files, it calls @var{action-if-failure}
8253 (defaults to exiting with an error message).
8255 The @code{AC_FC_SRCEXT} and @code{AC_FC_PP_SRCEXT} macros cache their
8256 results in @code{ac_cv_fc_srcext_@var{ext}} and
8257 @code{ac_cv_fc_pp_srcext_@var{ext}} variables, respectively.
8258 @end defmac
8260 @defmac AC_FC_PP_DEFINE (@ovar{action-if-success}, @
8261   @dvar{action-if-failure, AC_MSG_FAILURE})
8262 @acindex{FC_PP_DEFINE}
8263 @caindex fc_pp_define
8265 Find a flag to specify defines for preprocessed Fortran.  Not all
8266 Fortran compilers use @option{-D}.  Substitute @code{FC_DEFINE} with
8267 the result and call @var{action-if-success} (defaults to nothing) if
8268 successful, and @var{action-if-failure} (defaults to failing with an
8269 error message) if not.
8271 This macro calls @code{AC_FC_PP_SRCEXT([F])} in order to learn how to
8272 preprocess a @file{conftest.F} file, but restores a previously used
8273 Fortran source file extension afterwards again.
8275 The result of this test is cached in the @code{ac_cv_fc_pp_define}
8276 variable.
8277 @end defmac
8279 @defmac AC_FC_FREEFORM (@ovar{action-if-success}, @
8280   @dvar{action-if-failure, AC_MSG_FAILURE})
8281 @acindex{FC_FREEFORM}
8282 @caindex fc_freeform
8284 Try to ensure that the Fortran compiler (@code{$FC}) allows free-format
8285 source code (as opposed to the older fixed-format style from Fortran
8286 77).  If necessary, it may add some additional flags to @code{FCFLAGS}.
8288 This macro is most important if you are using the default @file{.f}
8289 extension, since many compilers interpret this extension as indicating
8290 fixed-format source unless an additional flag is supplied.  If you
8291 specify a different extension with @code{AC_FC_SRCEXT}, such as
8292 @file{.f90}, then @code{AC_FC_FREEFORM} ordinarily succeeds without
8293 modifying @code{FCFLAGS}.  For extensions which the compiler does not
8294 know about, the flag set by the @code{AC_FC_SRCEXT} macro might let
8295 the compiler assume Fortran 77 by default, however.
8297 If @code{AC_FC_FREEFORM} succeeds in compiling free-form source, it
8298 calls @var{action-if-success} (defaults to nothing).  If it fails, it
8299 calls @var{action-if-failure} (defaults to exiting with an error
8300 message).
8302 The result of this test, or @samp{none} or @samp{unknown}, is cached in
8303 the @code{ac_cv_fc_freeform} variable.
8304 @end defmac
8306 @defmac AC_FC_FIXEDFORM (@ovar{action-if-success}, @
8307   @dvar{action-if-failure, AC_MSG_FAILURE})
8308 @acindex{FC_FIXEDFORM}
8309 @caindex fc_fixedform
8311 Try to ensure that the Fortran compiler (@code{$FC}) allows the old
8312 fixed-format source code (as opposed to free-format style).  If
8313 necessary, it may add some additional flags to @code{FCFLAGS}.
8315 This macro is needed for some compilers alias names like @command{xlf95}
8316 which assume free-form source code by default, and in case you want to
8317 use fixed-form source with an extension like @file{.f90} which many
8318 compilers interpret as free-form by default.  If you specify a different
8319 extension with @code{AC_FC_SRCEXT}, such as @file{.f}, then
8320 @code{AC_FC_FIXEDFORM} ordinarily succeeds without modifying
8321 @code{FCFLAGS}.
8323 If @code{AC_FC_FIXEDFORM} succeeds in compiling fixed-form source, it
8324 calls @var{action-if-success} (defaults to nothing).  If it fails, it
8325 calls @var{action-if-failure} (defaults to exiting with an error
8326 message).
8328 The result of this test, or @samp{none} or @samp{unknown}, is cached in
8329 the @code{ac_cv_fc_fixedform} variable.
8330 @end defmac
8332 @defmac AC_FC_LINE_LENGTH (@ovar{length}, @ovar{action-if-success}, @
8333   @dvar{action-if-failure, AC_MSG_FAILURE})
8334 @acindex{FC_LINE_LENGTH}
8335 @caindex fc_line_length
8337 Try to ensure that the Fortran compiler (@code{$FC}) accepts long source
8338 code lines.  The @var{length} argument may be given as 80, 132, or
8339 unlimited, and defaults to 132.  Note that line lengths above 254
8340 columns are not portable, and some compilers do not accept more than 132
8341 columns at least for fixed format source.  If necessary, it may add some
8342 additional flags to @code{FCFLAGS}.
8344 If @code{AC_FC_LINE_LENGTH} succeeds in compiling fixed-form source, it
8345 calls @var{action-if-success} (defaults to nothing).  If it fails, it
8346 calls @var{action-if-failure} (defaults to exiting with an error
8347 message).
8349 The result of this test, or @samp{none} or @samp{unknown}, is cached in
8350 the @code{ac_cv_fc_line_length} variable.
8351 @end defmac
8353 @defmac AC_FC_CHECK_BOUNDS (@ovar{action-if-success}, @
8354   @dvar{action-if-failure, AC_MSG_FAILURE})
8355 @acindex{FC_CHECK_BOUNDS}
8356 @caindex fc_check_bounds
8358 The @code{AC_FC_CHECK_BOUNDS} macro tries to enable array bounds checking
8359 in the Fortran compiler.  If successful, the @var{action-if-success}
8360 is called and any needed flags are added to @code{FCFLAGS}.  Otherwise,
8361 @var{action-if-failure} is called, which defaults to failing with an error
8362 message.  The macro currently requires Fortran 90 or a newer dialect.
8364 The result of the macro is cached in the @code{ac_cv_fc_check_bounds}
8365 variable.
8366 @end defmac
8368 @defmac AC_F77_IMPLICIT_NONE (@ovar{action-if-success}, @
8369   @dvar{action-if-failure, AC_MSG_FAILURE})
8370 @defmacx AC_FC_IMPLICIT_NONE (@ovar{action-if-success}, @
8371   @dvar{action-if-failure, AC_MSG_FAILURE})
8372 @acindex{F77_IMPLICIT_NONE}
8373 @acindex{FC_IMPLICIT_NONE}
8374 @caindex f77_implicit_none
8375 @caindex fc_implicit_none
8377 Try to disallow implicit declarations in the Fortran compiler.  If
8378 successful, @var{action-if-success} is called and any needed flags
8379 are added to @code{FFLAGS} or @code{FCFLAGS}, respectively.  Otherwise,
8380 @var{action-if-failure} is called, which defaults to failing with an error
8381 message.
8383 The result of these macros are cached in the
8384 @code{ac_cv_f77_implicit_none} and @code{ac_cv_fc_implicit_none}
8385 variables, respectively.
8386 @end defmac
8388 @defmac AC_FC_MODULE_EXTENSION
8389 @acindex{FC_MODULE_EXTENSION}
8390 @caindex fc_module_ext
8391 @ovindex FC_MODEXT
8393 Find the Fortran 90 module file name extension.  Most Fortran 90
8394 compilers store module information in files separate from the object
8395 files.  The module files are usually named after the name of the module
8396 rather than the source file name, with characters possibly turned to
8397 upper case, plus an extension, often @file{.mod}.
8399 Not all compilers use module files at all, or by default.  The Cray
8400 Fortran compiler requires @option{-e m} in order to store and search
8401 module information in @file{.mod} files rather than in object files.
8402 Likewise, the Fujitsu Fortran compilers uses the @option{-Am} option to
8403 indicate how module information is stored.
8405 The @code{AC_FC_MODULE_EXTENSION} macro computes the module extension
8406 without the leading dot, and stores that in the @code{FC_MODEXT}
8407 variable.  If the compiler does not produce module files, or the
8408 extension cannot be determined, @code{FC_MODEXT} is empty.  Typically,
8409 the result of this macro may be used in cleanup @command{make} rules as
8410 follows:
8412 @example
8413 clean-modules:
8414         -test -z "$(FC_MODEXT)" || rm -f *.$(FC_MODEXT)
8415 @end example
8417 The extension, or @samp{unknown}, is cached in the
8418 @code{ac_cv_fc_module_ext} variable.
8419 @end defmac
8421 @defmac AC_FC_MODULE_FLAG (@ovar{action-if-success}, @
8422   @dvar{action-if-failure, AC_MSG_FAILURE})
8423 @acindex{FC_MODULE_FLAG}
8424 @caindex fc_module_flag
8425 @ovindex FC_MODINC
8426 @ovindex ac_empty
8428 Find the compiler flag to include Fortran 90 module information from
8429 another directory, and store that in the @code{FC_MODINC} variable.
8430 Call @var{action-if-success} (defaults to nothing) if successful, and
8431 set @code{FC_MODINC} to empty and call @var{action-if-failure} (defaults
8432 to exiting with an error message) if not.
8434 Most Fortran 90 compilers provide a way to specify module directories.
8435 Some have separate flags for the directory to write module files to,
8436 and directories to search them in, whereas others only allow writing to
8437 the current directory or to the first directory specified in the include
8438 path.  Further, with some compilers, the module search path and the
8439 preprocessor search path can only be modified with the same flag.  Thus,
8440 for portability, write module files to the current directory only and
8441 list that as first directory in the search path.
8443 There may be no whitespace between @code{FC_MODINC} and the following
8444 directory name, but @code{FC_MODINC} may contain trailing white space.
8445 For example, if you use Automake and would like to search @file{../lib}
8446 for module files, you can use the following:
8448 @example
8449 AM_FCFLAGS = $(FC_MODINC). $(FC_MODINC)../lib
8450 @end example
8452 Inside @command{configure} tests, you can use:
8454 @example
8455 if test -n "$FC_MODINC"; then
8456   FCFLAGS="$FCFLAGS $FC_MODINC. $FC_MODINC../lib"
8458 @end example
8460 The flag is cached in the @code{ac_cv_fc_module_flag} variable.
8461 The substituted value of @code{FC_MODINC} may refer to the
8462 @code{ac_empty} dummy placeholder empty variable, to avoid losing
8463 the significant trailing whitespace in a @file{Makefile}.
8464 @end defmac
8466 @defmac AC_FC_MODULE_OUTPUT_FLAG (@ovar{action-if-success}, @
8467   @dvar{action-if-failure, AC_MSG_FAILURE})
8468 @acindex{FC_MODULE_OUTPUT_FLAG}
8469 @caindex fc_module_output_flag
8470 @ovindex FC_MODOUT
8472 Find the compiler flag to write Fortran 90 module information to
8473 another directory, and store that in the @code{FC_MODOUT} variable.
8474 Call @var{action-if-success} (defaults to nothing) if successful, and
8475 set @code{FC_MODOUT} to empty and call @var{action-if-failure} (defaults
8476 to exiting with an error message) if not.
8478 Not all Fortran 90 compilers write module files, and of those that do,
8479 not all allow writing to a directory other than the current one, nor
8480 do all have separate flags for writing and reading; see the description
8481 of @code{AC_FC_MODULE_FLAG} above.  If you need to be able to write to
8482 another directory, for maximum portability use @code{FC_MODOUT} before
8483 any @code{FC_MODINC} and include both the current directory and the one
8484 you write to in the search path:
8486 @example
8487 AM_FCFLAGS = $(FC_MODOUT)../mod $(FC_MODINC)../mod $(FC_MODINC). @dots{}
8488 @end example
8490 The flag is cached in the @code{ac_cv_fc_module_output_flag} variable.
8491 The substituted value of @code{FC_MODOUT} may refer to the
8492 @code{ac_empty} dummy placeholder empty variable, to avoid losing
8493 the significant trailing whitespace in a @file{Makefile}.
8494 @end defmac
8497 @node Go Compiler
8498 @subsection Go Compiler Characteristics
8499 @cindex Go
8501 Autoconf provides basic support for the Go programming language when
8502 using the @code{gccgo} compiler (there is currently no support for the
8503 @code{6g} and @code{8g} compilers).
8505 @defmac AC_PROG_GO (@ovar{compiler-search-list})
8506 Find the Go compiler to use.  Check whether the environment variable
8507 @code{GOC} is set; if so, then set output variable @code{GOC} to its
8508 value.
8510 Otherwise, if the macro is invoked without an argument, then search for
8511 a Go compiler named @code{gccgo}.  If it is not found, then as a last
8512 resort set @code{GOC} to @code{gccgo}.
8514 This macro may be invoked with an optional first argument which, if
8515 specified, must be a blank-separated list of Go compilers to search for.
8517 If output variable @code{GOFLAGS} was not already set, set it to
8518 @option{-g -O2}.  If your package does not like this default,
8519 @code{GOFLAGS} may be set before @code{AC_PROG_GO}.
8520 @end defmac
8523 @node System Services
8524 @section System Services
8526 The following macros check for operating system services or capabilities.
8528 @anchor{AC_PATH_X}
8529 @defmac AC_PATH_X
8530 @acindex{PATH_X}
8531 @evindex XMKMF
8532 @cindex X Window System
8533 Try to locate the X Window System include files and libraries.  If the
8534 user gave the command line options @option{--x-includes=@var{dir}} and
8535 @option{--x-libraries=@var{dir}}, use those directories.
8537 If either or both were not given, get the missing values by running
8538 @code{xmkmf} (or an executable pointed to by the @code{XMKMF}
8539 environment variable) on a trivial @file{Imakefile} and examining the
8540 makefile that it produces.  Setting @code{XMKMF} to @samp{false}
8541 disables this method.
8543 If this method fails to find the X Window System, @command{configure}
8544 looks for the files in several directories where they often reside.
8545 If either method is successful, set the shell variables
8546 @code{x_includes} and @code{x_libraries} to their locations, unless they
8547 are in directories the compiler searches by default.
8549 If both methods fail, or the user gave the command line option
8550 @option{--without-x}, set the shell variable @code{no_x} to @samp{yes};
8551 otherwise set it to the empty string.
8552 @end defmac
8554 @anchor{AC_PATH_XTRA}
8555 @defmac AC_PATH_XTRA
8556 @acindex{PATH_XTRA}
8557 @ovindex X_CFLAGS
8558 @ovindex X_LIBS
8559 @ovindex X_EXTRA_LIBS
8560 @ovindex X_PRE_LIBS
8561 @cvindex X_DISPLAY_MISSING
8562 An enhanced version of @code{AC_PATH_X}.  It adds the C compiler flags
8563 that X needs to output variable @code{X_CFLAGS}, and the X linker flags
8564 to @code{X_LIBS}.  Define @code{X_DISPLAY_MISSING} if X is not
8565 available.
8567 This macro also checks for special libraries that some systems need in
8568 order to compile X programs.  It adds any that the system needs to
8569 output variable @code{X_EXTRA_LIBS}.  And it checks for special X11R6
8570 libraries that need to be linked with before @option{-lX11}, and adds
8571 any found to the output variable @code{X_PRE_LIBS}.
8573 @c This is an incomplete kludge.  Make a real way to do it.
8574 @c If you need to check for other X functions or libraries yourself, then
8575 @c after calling this macro, add the contents of @code{X_EXTRA_LIBS} to
8576 @c @code{LIBS} temporarily, like this: (FIXME - add example)
8577 @end defmac
8579 @anchor{AC_SYS_INTERPRETER}
8580 @defmac AC_SYS_INTERPRETER
8581 @acindex{SYS_INTERPRETER}
8582 Check whether the system supports starting scripts with a line of the
8583 form @samp{#!/bin/sh} to select the interpreter to use for the script.
8584 After running this macro, shell code in @file{configure.ac} can check
8585 the shell variable @code{interpval}; it is set to @samp{yes}
8586 if the system supports @samp{#!}, @samp{no} if not.
8587 @end defmac
8589 @defmac AC_SYS_LARGEFILE
8590 @acindex{SYS_LARGEFILE}
8591 @cvindex _FILE_OFFSET_BITS
8592 @cvindex _LARGE_FILES
8593 @ovindex CC
8594 @cindex Large file support
8595 @cindex LFS
8596 Arrange for 64-bit file offsets, known as
8597 @uref{http://@/www.unix.org/@/version2/@/whatsnew/@/lfs20mar.html,
8598 large-file support}.  On some hosts, one must use special compiler
8599 options to build programs that can access large files.  Append any such
8600 options to the output variable @code{CC}.  Define
8601 @code{_FILE_OFFSET_BITS} and @code{_LARGE_FILES} if necessary.
8603 Large-file support can be disabled by configuring with the
8604 @option{--disable-largefile} option.
8606 If you use this macro, check that your program works even when
8607 @code{off_t} is wider than @code{long int}, since this is common when
8608 large-file support is enabled.  For example, it is not correct to print
8609 an arbitrary @code{off_t} value @code{X} with @code{printf ("%ld",
8610 (long int) X)}.  Also, when using this macro in concert with
8611 @code{AC_CONFIG_HEADERS}, be sure that @file{config.h} is included
8612 before any system header.
8614 The LFS introduced the @code{fseeko} and @code{ftello} functions to
8615 replace their C counterparts @code{fseek} and @code{ftell} that do not
8616 use @code{off_t}.  Take care to use @code{AC_FUNC_FSEEKO} to make their
8617 prototypes available when using them and large-file support is
8618 enabled.
8619 @end defmac
8621 @anchor{AC_SYS_LONG_FILE_NAMES}
8622 @defmac AC_SYS_LONG_FILE_NAMES
8623 @acindex{SYS_LONG_FILE_NAMES}
8624 @cvindex HAVE_LONG_FILE_NAMES
8625 If the system supports file names longer than 14 characters, define
8626 @code{HAVE_LONG_FILE_NAMES}.
8627 @end defmac
8629 @defmac AC_SYS_POSIX_TERMIOS
8630 @acindex{SYS_POSIX_TERMIOS}
8631 @cindex Posix termios headers
8632 @cindex termios Posix headers
8633 @caindex sys_posix_termios
8634 Check to see if the Posix termios headers and functions are available on the
8635 system.  If so, set the shell variable @code{ac_cv_sys_posix_termios} to
8636 @samp{yes}.  If not, set the variable to @samp{no}.
8637 @end defmac
8639 @node C and Posix Variants
8640 @section C and Posix Variants
8642 The following macro makes it possible to use C language and library
8643 extensions defined by the C standards committee, features of Posix that
8644 are extensions to C, and platform extensions not defined by Posix.
8646 @anchor{AC_USE_SYSTEM_EXTENSIONS}
8647 @defmac AC_USE_SYSTEM_EXTENSIONS
8648 @acindex{USE_SYSTEM_EXTENSIONS}
8649 If possible, enable extensions to C or Posix on hosts that normally
8650 disable the extensions, typically due to standards-conformance namespace
8651 issues.  This should be called before any macros that run the C
8652 compiler.  Also, when using this macro in concert with
8653 @code{AC_CONFIG_HEADERS}, be sure that @file{config.h} is included
8654 before any system header.  The following preprocessor macros are defined
8655 where appropriate:
8657 @table @code
8658 @item _GNU_SOURCE
8659 @cvindex _GNU_SOURCE
8660 Enable extensions on GNU/Linux.
8661 @item _ALL_SOURCE
8662 @cvindex _ALL_SOURCE
8663 Enable extensions for AIX 3, and for Interix.
8664 @item _DARWIN_C_SOURCE
8665 @cvindex _DARWIN_C_SOURCE
8666 Enable extensions for macOS.
8667 @item _MINIX
8668 @cvindex _MINIX
8669 Identify Minix platform.  This particular preprocessor macro is
8670 obsolescent, and may be removed in a future release of Autoconf.
8671 @item _NETBSD_SOURCE
8672 @cvindex _NETBSD_SOURCE
8673 Enable NetBSD-related extensions for Minix.
8674 @item _POSIX_1_SOURCE
8675 @cvindex _POSIX_1_SOURCE
8676 Enable additional Posix functions for Minix.
8677 @item _POSIX_PTHREAD_SEMANTICS
8678 @cvindex _POSIX_PTHREAD_SEMANTICS
8679 Enable threading extensions on Solaris.
8680 @item _POSIX_SOURCE
8681 @cvindex _POSIX_SOURCE
8682 Enable Posix functions for Minix.
8683 @item _TANDEM_SOURCE
8684 @cvindex _TANDEM_SOURCE
8685 Enable extensions for the HP NonStop platform.
8686 @item _XOPEN_SOURCE
8687 @cvindex _XOPEN_SOURCE
8688 Enable X/Open extensions for HP-UX.
8689 @item __EXTENSIONS__
8690 @cvindex __EXTENSIONS__
8691 Enable general extensions on Solaris.
8692 @item __STDC_WANT_IEC_60559_ATTRIBS_EXT__
8693 @cvindex __STDC_WANT_IEC_60559_ATTRIBS_EXT__
8694 Enable extensions specified by ISO/IEC TS 18661-5:2014.
8695 @item __STDC_WANT_IEC_60559_BFP_EXT__
8696 @cvindex __STDC_WANT_IEC_60559_BFP_EXT__
8697 Enable extensions specified by ISO/IEC TS 18661-1:2014.
8698 @item __STDC_WANT_IEC_60559_DFP_EXT__
8699 @cvindex __STDC_WANT_IEC_60559_DFP_EXT__
8700 Enable extensions specified by ISO/IEC TS 18661-2:2015.
8701 @item __STDC_WANT_IEC_60559_FUNCS_EXT__
8702 @cvindex __STDC_WANT_IEC_60559_FUNCS_EXT__
8703 Enable extensions specified by ISO/IEC TS 18661-4:2015.
8704 @item __STDC_WANT_IEC_60559_TYPES_EXT__
8705 @cvindex __STDC_WANT_IEC_60559_TYPES_EXT__
8706 Enable extensions specified by ISO/IEC TS 18661-3:2015.
8707 @item __STDC_WANT_LIB_EXT2__
8708 @cvindex __STDC_WANT_LIB_EXT2__
8709 Enable extensions specified by ISO/IEC TR 24731-2:2010.
8710 @item __STDC_WANT_MATH_SPEC_FUNCS__
8711 @cvindex __STDC_WANT_MATH_SPEC_FUNCS__
8712 Enable extensions specified by ISO/IEC 24747:2009.
8713 @end table
8715 @cvindex __STDC_WANT_DEC_FP__
8716 The C preprocessor macro @code{__STDC_WANT_DEC_FP__} is not defined.
8717 ISO/IEC TR 24732:2009 was superseded by ISO/IEC TS 18661-2:2015.
8719 @cvindex __STDC_WANT_LIB_EXT1__
8720 The C preprocessor macro @code{__STDC_WANT_LIB_EXT1__} is not defined,
8721 as C11 Annex K is problematic.  See: O'Donell C, Sebor M.
8722 @uref{http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm, Field
8723 Experience With Annex K---Bounds Checking Interfaces}.
8725 The Autoconf macro @code{AC_USE_SYSTEM_EXTENSIONS} was introduced in
8726 Autoconf 2.60.
8727 @end defmac
8730 @node Erlang Libraries
8731 @section Erlang Libraries
8732 @cindex Erlang, Library, checking
8734 The following macros check for an installation of Erlang/OTP, and for the
8735 presence of certain Erlang libraries.  All those macros require the
8736 configuration of an Erlang interpreter and an Erlang compiler
8737 (@pxref{Erlang Compiler and Interpreter}).
8739 @defmac AC_ERLANG_SUBST_ERTS_VER
8740 @acindex{ERLANG_SUBST_ERTS_VER}
8741 @ovindex ERLANG_ERTS_VER
8742 Set the output variable @code{ERLANG_ERTS_VER} to the version of the
8743 Erlang runtime system (as returned by Erlang's
8744 @code{erlang:system_info(version)} function).  The result of this test
8745 is cached if caching is enabled when running @command{configure}.  The
8746 @code{ERLANG_ERTS_VER} variable is not intended to be used for testing
8747 for features of specific ERTS versions, but to be used for substituting
8748 the ERTS version in Erlang/OTP release resource files (@code{.rel}
8749 files), as shown below.
8750 @end defmac
8752 @defmac AC_ERLANG_SUBST_ROOT_DIR
8753 @acindex{ERLANG_SUBST_ROOT_DIR}
8754 @ovindex ERLANG_ROOT_DIR
8755 Set the output variable @code{ERLANG_ROOT_DIR} to the path to the base
8756 directory in which Erlang/OTP is installed (as returned by Erlang's
8757 @code{code:root_dir/0} function).  The result of this test is cached if
8758 caching is enabled when running @command{configure}.
8759 @end defmac
8761 @defmac AC_ERLANG_SUBST_LIB_DIR
8762 @acindex{ERLANG_SUBST_LIB_DIR}
8763 @ovindex ERLANG_LIB_DIR
8764 Set the output variable @code{ERLANG_LIB_DIR} to the path of the library
8765 directory of Erlang/OTP (as returned by Erlang's
8766 @code{code:lib_dir/0} function), which subdirectories each contain an installed
8767 Erlang/OTP library.  The result of this test is cached if caching is enabled
8768 when running @command{configure}.
8769 @end defmac
8771 @defmac AC_ERLANG_CHECK_LIB (@var{library}, @ovar{action-if-found}, @
8772   @ovar{action-if-not-found})
8773 @acindex{ERLANG_CHECK_LIB}
8774 @ovindex ERLANG_LIB_DIR_@var{library}
8775 @ovindex ERLANG_LIB_VER_@var{library}
8776 Test whether the Erlang/OTP library @var{library} is installed by
8777 calling Erlang's @code{code:lib_dir/1} function.  The result of this
8778 test is cached if caching is enabled when running @command{configure}.
8779 @var{action-if-found} is a list of shell commands to run if the library
8780 is installed; @var{action-if-not-found} is a list of shell commands to
8781 run if it is not.  Additionally, if the library is installed, the output
8782 variable @samp{ERLANG_LIB_DIR_@var{library}} is set to the path to the
8783 library installation directory, and the output variable
8784 @samp{ERLANG_LIB_VER_@var{library}} is set to the version number that is
8785 part of the subdirectory name, if it is in the standard form
8786 (@code{@var{library}-@var{version}}).  If the directory name does not
8787 have a version part, @samp{ERLANG_LIB_VER_@var{library}} is set to the
8788 empty string.  If the library is not installed,
8789 @samp{ERLANG_LIB_DIR_@var{library}} and
8790 @samp{ERLANG_LIB_VER_@var{library}} are set to @code{"not found"}.  For
8791 example, to check if library @code{stdlib} is installed:
8793 @example
8794 AC_ERLANG_CHECK_LIB([stdlib],
8795   [echo "stdlib version \"$ERLANG_LIB_VER_stdlib\""
8796    echo "is installed in \"$ERLANG_LIB_DIR_stdlib\""],
8797   [AC_MSG_ERROR([stdlib was not found!])])
8798 @end example
8800 The @samp{ERLANG_LIB_VER_@var{library}} variables (set by
8801 @code{AC_ERLANG_CHECK_LIB}) and the @code{ERLANG_ERTS_VER} variable (set
8802 by @code{AC_ERLANG_SUBST_ERTS_VER}) are not intended to be used for
8803 testing for features of specific versions of libraries or of the Erlang
8804 runtime system.  Those variables are intended to be substituted in
8805 Erlang release resource files (@code{.rel} files).  For instance, to
8806 generate a @file{example.rel} file for an application depending on the
8807 @code{stdlib} library, @file{configure.ac} could contain:
8809 @example
8810 AC_ERLANG_SUBST_ERTS_VER
8811 AC_ERLANG_CHECK_LIB([stdlib],
8812   [],
8813   [AC_MSG_ERROR([stdlib was not found!])])
8814 AC_CONFIG_FILES([example.rel])
8815 @end example
8817 @noindent
8818 The @file{example.rel.in} file used to generate @file{example.rel}
8819 should contain:
8821 @example
8822 @{release,
8823     @{"@@PACKAGE@@", "@@VERSION@@"@},
8824     @{erts, "@@ERLANG_ERTS_VER@@"@},
8825     [@{stdlib, "@@ERLANG_LIB_VER_stdlib@@"@},
8826      @{@@PACKAGE@@, "@@VERSION@@"@}]@}.
8827 @end example
8828 @end defmac
8830 In addition to the above macros, which test installed Erlang libraries, the
8831 following macros determine the paths to the directories into which newly built
8832 Erlang libraries are to be installed:
8834 @defmac AC_ERLANG_SUBST_INSTALL_LIB_DIR
8835 @acindex{ERLANG_SUBST_INSTALL_LIB_DIR}
8836 @ovindex ERLANG_INSTALL_LIB_DIR
8838 Set the @code{ERLANG_INSTALL_LIB_DIR} output variable to the directory into
8839 which every built Erlang library should be installed in a separate
8840 subdirectory.
8841 If this variable is not set in the environment when @command{configure} runs,
8842 its default value is @code{$@{libdir@}/erlang/lib}.
8843 @end defmac
8845 @defmac AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR (@var{library}, @var{version})
8846 @acindex{ERLANG_SUBST_INSTALL_LIB_SUBDIR}
8847 @ovindex ERLANG_INSTALL_LIB_DIR_@var{library}
8849 Set the @samp{ERLANG_INSTALL_LIB_DIR_@var{library}} output variable to the
8850 directory into which the built Erlang library @var{library} version
8851 @var{version} should be installed.  If this variable is not set in the
8852 environment when @command{configure} runs, its default value is
8853 @samp{$ERLANG_INSTALL_LIB_DIR/@var{library}-@var{version}}, the value of the
8854 @code{ERLANG_INSTALL_LIB_DIR} variable being set by the
8855 @code{AC_ERLANG_SUBST_INSTALL_LIB_DIR} macro.
8856 @end defmac
8862 @c ========================================================= Writing Tests
8864 @node Writing Tests
8865 @chapter Writing Tests
8867 If the existing feature tests don't do something you need, you have to
8868 write new ones.  These macros are the building blocks.  They provide
8869 ways for other macros to check whether various kinds of features are
8870 available and report the results.
8872 This chapter contains some suggestions and some of the reasons why the
8873 existing tests are written the way they are.  You can also learn a lot
8874 about how to write Autoconf tests by looking at the existing ones.  If
8875 something goes wrong in one or more of the Autoconf tests, this
8876 information can help you understand the assumptions behind them, which
8877 might help you figure out how to best solve the problem.
8879 These macros check the output of the compiler system of the current
8880 language (@pxref{Language Choice}).  They do not cache the results of
8881 their tests for future use (@pxref{Caching Results}), because they don't
8882 know enough about the information they are checking for to generate a
8883 cache variable name.  They also do not print any messages, for the same
8884 reason.  The checks for particular kinds of features call these macros
8885 and do cache their results and print messages about what they're
8886 checking for.
8888 When you write a feature test that could be applicable to more than one
8889 software package, the best thing to do is encapsulate it in a new macro.
8890 @xref{Writing Autoconf Macros}, for how to do that.
8892 @menu
8893 * Language Choice::             Selecting which language to use for testing
8894 * Writing Test Programs::       Forging source files for compilers
8895 * Running the Preprocessor::    Detecting preprocessor symbols
8896 * Running the Compiler::        Detecting language or header features
8897 * Running the Linker::          Detecting library features
8898 * Runtime::                     Testing for runtime features
8899 * Systemology::                 A zoology of operating systems
8900 * Multiple Cases::              Tests for several possible values
8901 @end menu
8903 @node Language Choice
8904 @section Language Choice
8905 @cindex Language
8907 Autoconf-generated @command{configure} scripts check for the C compiler and
8908 its features by default.  Packages that use other programming languages
8909 (maybe more than one, e.g., C and C++) need to test features of the
8910 compilers for the respective languages.  The following macros determine
8911 which programming language is used in the subsequent tests in
8912 @file{configure.ac}.
8914 @anchor{AC_LANG}
8915 @defmac AC_LANG (@var{language})
8916 @acindex{LANG}
8917 Do compilation tests using the compiler, preprocessor, and file
8918 extensions for the specified @var{language}.
8920 Supported languages are:
8922 @table @samp
8923 @item C
8924 Do compilation tests using @code{CC} and @code{CPP} and use extension
8925 @file{.c} for test programs.  Use compilation flags: @code{CPPFLAGS} with
8926 @code{CPP}, and both @code{CPPFLAGS} and @code{CFLAGS} with @code{CC}.
8928 @item C++
8929 Do compilation tests using @code{CXX} and @code{CXXCPP} and use
8930 extension @file{.C} for test programs.  Use compilation flags:
8931 @code{CPPFLAGS} with @code{CXXCPP}, and both @code{CPPFLAGS} and
8932 @code{CXXFLAGS} with @code{CXX}.
8934 @item Fortran 77
8935 Do compilation tests using @code{F77} and use extension @file{.f} for
8936 test programs.  Use compilation flags: @code{FFLAGS}.
8938 @item Fortran
8939 Do compilation tests using @code{FC} and use extension @file{.f} (or
8940 whatever has been set by @code{AC_FC_SRCEXT}) for test programs.  Use
8941 compilation flags: @code{FCFLAGS}.
8943 @item Erlang
8944 @ovindex ERLC
8945 @ovindex ERL
8946 @ovindex ERLCFLAGS
8947 Compile and execute tests using @code{ERLC} and @code{ERL} and use extension
8948 @file{.erl} for test Erlang modules.  Use compilation flags: @code{ERLCFLAGS}.
8950 @item Objective C
8951 Do compilation tests using @code{OBJC} and @code{OBJCPP} and use
8952 extension @file{.m} for test programs.  Use compilation flags:
8953 @code{CPPFLAGS} with @code{OBJCPP}, and both @code{CPPFLAGS} and
8954 @code{OBJCFLAGS} with @code{OBJC}.
8956 @item Objective C++
8957 Do compilation tests using @code{OBJCXX} and @code{OBJCXXCPP} and use
8958 extension @file{.mm} for test programs.  Use compilation flags:
8959 @code{CPPFLAGS} with @code{OBJCXXCPP}, and both @code{CPPFLAGS} and
8960 @code{OBJCXXFLAGS} with @code{OBJCXX}.
8962 @item Go
8963 Do compilation tests using @code{GOC} and use extension @file{.go} for
8964 test programs.  Use compilation flags @code{GOFLAGS}.
8965 @end table
8966 @end defmac
8968 @anchor{AC_LANG_PUSH}
8969 @defmac AC_LANG_PUSH (@var{language})
8970 @acindex{LANG_PUSH}
8971 Remember the current language (as set by @code{AC_LANG}) on a stack, and
8972 then select the @var{language}.  Use this macro and @code{AC_LANG_POP}
8973 in macros that need to temporarily switch to a particular language.
8974 @end defmac
8976 @defmac AC_LANG_POP (@ovar{language})
8977 @acindex{LANG_POP}
8978 Select the language that is saved on the top of the stack, as set by
8979 @code{AC_LANG_PUSH}, and remove it from the stack.
8981 If given, @var{language} specifies the language we just @emph{quit}.  It
8982 is a good idea to specify it when it's known (which should be the
8983 case@dots{}), since Autoconf detects inconsistencies.
8985 @example
8986 AC_LANG_PUSH([Fortran 77])
8987 # Perform some tests on Fortran 77.
8988 # @dots{}
8989 AC_LANG_POP([Fortran 77])
8990 @end example
8991 @end defmac
8993 @defmac AC_LANG_ASSERT (@var{language})
8994 @acindex{LANG_ASSERT}
8995 Check statically that the current language is @var{language}.
8996 You should use this in your language specific macros
8997 to avoid that they be called with an inappropriate language.
8999 This macro runs only at @command{autoconf} time, and incurs no cost at
9000 @command{configure} time.  Sadly enough and because Autoconf is a two
9001 layer language @footnote{Because M4 is not aware of Sh code,
9002 especially conditionals, some optimizations that look nice statically
9003 may produce incorrect results at runtime.}, the macros
9004 @code{AC_LANG_PUSH} and @code{AC_LANG_POP} cannot be ``optimizing'',
9005 therefore as much as possible you ought to avoid using them to wrap
9006 your code, rather, require from the user to run the macro with a
9007 correct current language, and check it with @code{AC_LANG_ASSERT}.
9008 And anyway, that may help the user understand she is running a Fortran
9009 macro while expecting a result about her Fortran 77 compiler@enddots{}
9010 @end defmac
9013 @defmac AC_REQUIRE_CPP
9014 @acindex{REQUIRE_CPP}
9015 Ensure that whichever preprocessor would currently be used for tests has
9016 been found.  Calls @code{AC_REQUIRE} (@pxref{Prerequisite Macros}) with an
9017 argument of either @code{AC_PROG_CPP} or @code{AC_PROG_CXXCPP},
9018 depending on which language is current.
9019 @end defmac
9022 @node Writing Test Programs
9023 @section Writing Test Programs
9025 Autoconf tests follow a common scheme: feed some program with some
9026 input, and most of the time, feed a compiler with some source file.
9027 This section is dedicated to these source samples.
9029 @menu
9030 * Guidelines::                  General rules for writing test programs
9031 * Test Functions::              Avoiding pitfalls in test programs
9032 * Generating Sources::          Source program boilerplate
9033 @end menu
9035 @node Guidelines
9036 @subsection Guidelines for Test Programs
9038 The most important rule to follow when writing testing samples is:
9040 @center @emph{Look for realism.}
9042 This motto means that testing samples must be written with the same
9043 strictness as real programs are written.  In particular, you should
9044 avoid ``shortcuts'' and simplifications.
9046 Don't just play with the preprocessor if you want to prepare a
9047 compilation.  For instance, using @command{cpp} to check whether a header is
9048 functional might let your @command{configure} accept a header which
9049 causes some @emph{compiler} error.  Do not hesitate to check a header with
9050 other headers included before, especially required headers.
9052 Make sure the symbols you use are properly defined, i.e., refrain from
9053 simply declaring a function yourself instead of including the proper
9054 header.
9056 Test programs should not write to standard output.  They
9057 should exit with status 0 if the test succeeds, and with status 1
9058 otherwise, so that success
9059 can be distinguished easily from a core dump or other failure;
9060 segmentation violations and other failures produce a nonzero exit
9061 status.  Unless you arrange for @code{exit} to be declared, test
9062 programs should @code{return}, not @code{exit}, from @code{main},
9063 because on many systems @code{exit} is not declared by default.
9065 Test programs can use @code{#if} or @code{#ifdef} to check the values of
9066 preprocessor macros defined by tests that have already run.  For
9067 example, if you call @code{AC_HEADER_STDBOOL}, then later on in
9068 @file{configure.ac} you can have a test program that includes
9069 @file{stdbool.h} conditionally:
9071 @example
9072 @group
9073 #ifdef HAVE_STDBOOL_H
9074 # include <stdbool.h>
9075 #endif
9076 @end group
9077 @end example
9079 Both @code{#if HAVE_STDBOOL_H} and @code{#ifdef HAVE_STDBOOL_H} will
9080 work with any standard C compiler.  Some developers prefer @code{#if}
9081 because it is easier to read, while others prefer @code{#ifdef} because
9082 it avoids diagnostics with picky compilers like GCC with the
9083 @option{-Wundef} option.
9085 If a test program needs to use or create a data file, give it a name
9086 that starts with @file{conftest}, such as @file{conftest.data}.  The
9087 @command{configure} script cleans up by running @samp{rm -f -r conftest*}
9088 after running test programs and if the script is interrupted.
9090 @node Test Functions
9091 @subsection Test Functions
9093 These days it's safe to assume support for function prototypes
9094 (introduced in C89).
9096 Functions that test programs declare should also be conditionalized for
9097 C++, which requires @samp{extern "C"} prototypes.  Make sure to not
9098 include any header files containing clashing prototypes.
9100 @example
9101 #ifdef __cplusplus
9102 extern "C"
9103 #endif
9104 void *valloc (size_t);
9105 @end example
9107 If a test program calls a function with invalid parameters (just to see
9108 whether it exists), organize the program to ensure that it never invokes
9109 that function.  You can do this by calling it in another function that is
9110 never invoked.  You can't do it by putting it after a call to
9111 @code{exit}, because GCC version 2 knows that @code{exit}
9112 never returns
9113 and optimizes out any code that follows it in the same block.
9115 If you include any header files, be sure to call the functions
9116 relevant to them with the correct number of arguments, even if they are
9117 just 0, to avoid compilation errors due to prototypes.  GCC
9118 version 2
9119 has internal prototypes for several functions that it automatically
9120 inlines; for example, @code{memcpy}.  To avoid errors when checking for
9121 them, either pass them the correct number of arguments or redeclare them
9122 with a different return type (such as @code{char}).
9125 @node Generating Sources
9126 @subsection Generating Sources
9128 Autoconf provides a set of macros that can be used to generate test
9129 source files.  They are written to be language generic, i.e., they
9130 actually depend on the current language (@pxref{Language Choice}) to
9131 ``format'' the output properly.
9134 @defmac AC_LANG_CONFTEST (@var{source})
9135 @acindex{LANG_CONFTEST}
9136 Save the @var{source} text in the current test source file:
9137 @file{conftest.@var{extension}} where the @var{extension} depends on the
9138 current language.  As of Autoconf 2.63b, the source file also contains
9139 the results of all of the @code{AC_DEFINE} performed so far.
9141 Note that the @var{source} is evaluated exactly once, like regular
9142 Autoconf macro arguments, and therefore (i) you may pass a macro
9143 invocation, (ii) if not, be sure to double quote if needed.
9145 This macro issues a warning during @command{autoconf} processing if
9146 @var{source} does not include an expansion of the macro
9147 @code{AC_LANG_DEFINES_PROVIDED} (note that both @code{AC_LANG_SOURCE} and
9148 @code{AC_LANG_PROGRAM} call this macro, and thus avoid the warning).
9150 This macro is seldom called directly, but is used under the hood by more
9151 common macros such as @code{AC_COMPILE_IFELSE} and @code{AC_RUN_IFELSE}.
9152 @end defmac
9154 @defmac AC_LANG_DEFINES_PROVIDED
9155 @acindex{LANG_DEFINES_PROVIDED}
9156 This macro is called as a witness that the file
9157 @file{conftest.@var{extension}} appropriate for the current language is
9158 complete, including all previously determined results from
9159 @code{AC_DEFINE}.  This macro is seldom called directly, but exists if
9160 you have a compelling reason to write a conftest file without using
9161 @code{AC_LANG_SOURCE}, yet still want to avoid a syntax warning from
9162 @code{AC_LANG_CONFTEST}.
9163 @end defmac
9165 @defmac AC_LANG_SOURCE (@var{source})
9166 @acindex{LANG_SOURCE}
9167 Expands into the @var{source}, with the definition of
9168 all the @code{AC_DEFINE} performed so far.  This macro includes an
9169 expansion of @code{AC_LANG_DEFINES_PROVIDED}.
9171 In many cases, you may find it more convenient to use the wrapper
9172 @code{AC_LANG_PROGRAM}.
9173 @end defmac
9175 For instance, executing (observe the double quotation!):
9177 @example
9178 @c If you change this example, adjust tests/compile.at:AC_LANG_SOURCE example.
9179 AC_INIT([Hello], [1.0], [bug-hello@@example.org], [],
9180         [https://www.example.org/])
9181 AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
9182   [Greetings string.])
9183 AC_LANG([C])
9184 AC_LANG_CONFTEST(
9185    [AC_LANG_SOURCE([[const char hw[] = "Hello, World\n";]])])
9186 gcc -E -dD conftest.c
9187 @end example
9189 @noindent
9190 on a system with @command{gcc} installed, results in:
9192 @example
9193 @c If you change this example, adjust tests/compile.at:AC_LANG_SOURCE example.
9194 @dots{}
9195 @asis{#} 1 "conftest.c"
9197 #define PACKAGE_NAME "Hello"
9198 #define PACKAGE_TARNAME "hello"
9199 #define PACKAGE_VERSION "1.0"
9200 #define PACKAGE_STRING "Hello 1.0"
9201 #define PACKAGE_BUGREPORT "bug-hello@@example.org"
9202 #define PACKAGE_URL "https://www.example.org/"
9203 #define HELLO_WORLD "Hello, World\n"
9205 const char hw[] = "Hello, World\n";
9206 @end example
9208 When the test language is Fortran, Erlang, or Go, the @code{AC_DEFINE}
9209 definitions are not automatically translated into constants in the
9210 source code by this macro.
9212 @defmac AC_LANG_PROGRAM (@var{prologue}, @var{body})
9213 @acindex{LANG_PROGRAM}
9214 Expands into a source file which consists of the @var{prologue}, and
9215 then @var{body} as body of the main function (e.g., @code{main} in
9216 C).  Since it uses @code{AC_LANG_SOURCE}, the features of the latter are
9217 available.
9218 @end defmac
9220 For instance:
9222 @example
9223 @c If you change this example, adjust tests/compile.at:AC_LANG_PROGRAM example.
9224 AC_INIT([Hello], [1.0], [bug-hello@@example.org], [],
9225         [https://www.example.org/])
9226 AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
9227   [Greetings string.])
9228 AC_LANG_CONFTEST(
9229 [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
9230                  [[fputs (hw, stdout);]])])
9231 gcc -E -dD conftest.c
9232 @end example
9234 @noindent
9235 on a system with @command{gcc} installed, results in:
9237 @example
9238 @c If you change this example, adjust tests/compile.at:AC_LANG_PROGRAM example.
9239 @dots{}
9240 @asis{#} 1 "conftest.c"
9242 #define PACKAGE_NAME "Hello"
9243 #define PACKAGE_TARNAME "hello"
9244 #define PACKAGE_VERSION "1.0"
9245 #define PACKAGE_STRING "Hello 1.0"
9246 #define PACKAGE_BUGREPORT "bug-hello@@example.org"
9247 #define PACKAGE_URL "https://www.example.org/"
9248 #define HELLO_WORLD "Hello, World\n"
9250 const char hw[] = "Hello, World\n";
9252 main (void)
9254 fputs (hw, stdout);
9255   ;
9256   return 0;
9258 @end example
9260 In Erlang tests, the created source file is that of an Erlang module called
9261 @code{conftest} (@file{conftest.erl}).  This module defines and exports
9262 at least
9263 one @code{start/0} function, which is called to perform the test.  The
9264 @var{prologue} is optional code that is inserted between the module header and
9265 the @code{start/0} function definition.  @var{body} is the body of the
9266 @code{start/0} function without the final period (@pxref{Runtime}, about
9267 constraints on this function's behavior).
9269 For instance:
9271 @example
9272 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
9273 AC_LANG(Erlang)
9274 AC_LANG_CONFTEST(
9275 [AC_LANG_PROGRAM([[-define(HELLO_WORLD, "Hello, world!").]],
9276                  [[io:format("~s~n", [?HELLO_WORLD])]])])
9277 cat conftest.erl
9278 @end example
9280 @noindent
9281 results in:
9283 @example
9284 -module(conftest).
9285 -export([start/0]).
9286 -define(HELLO_WORLD, "Hello, world!").
9287 start() ->
9288 io:format("~s~n", [?HELLO_WORLD])
9290 @end example
9292 @defmac AC_LANG_CALL (@var{prologue}, @var{function})
9293 @acindex{LANG_CALL}
9294 Expands into a source file which consists of the @var{prologue}, and
9295 then a call to the @var{function} as body of the main function (e.g.,
9296 @code{main} in C).  Since it uses @code{AC_LANG_PROGRAM}, the feature
9297 of the latter are available.
9299 This function will probably be replaced in the future by a version
9300 which would enable specifying the arguments.  The use of this macro is
9301 not encouraged, as it violates strongly the typing system.
9303 This macro cannot be used for Erlang tests.
9304 @end defmac
9306 @defmac AC_LANG_FUNC_LINK_TRY (@var{function})
9307 @acindex{LANG_FUNC_LINK_TRY}
9308 Expands into a source file which uses the @var{function} in the body of
9309 the main function (e.g., @code{main} in C).  Since it uses
9310 @code{AC_LANG_PROGRAM}, the features of the latter are available.
9312 As @code{AC_LANG_CALL}, this macro is documented only for completeness.
9313 It is considered to be severely broken, and in the future will be
9314 removed in favor of actual function calls (with properly typed
9315 arguments).
9317 This macro cannot be used for Erlang tests.
9318 @end defmac
9320 @node Running the Preprocessor
9321 @section Running the Preprocessor
9323 Sometimes one might need to run the preprocessor on some source file.
9324 @emph{Usually it is a bad idea}, as you typically need to @emph{compile}
9325 your project, not merely run the preprocessor on it; therefore you
9326 certainly want to run the compiler, not the preprocessor.  Resist the
9327 temptation of following the easiest path.
9329 Nevertheless, if you need to run the preprocessor, then use
9330 @code{AC_PREPROC_IFELSE}.
9332 The macros described in this section cannot be used for tests in Erlang,
9333 Fortran, or Go, since those languages require no preprocessor.
9335 @anchor{AC_PREPROC_IFELSE}
9336 @defmac AC_PREPROC_IFELSE (@var{input}, @ovar{action-if-true}, @
9337   @ovar{action-if-false})
9338 @acindex{PREPROC_IFELSE}
9339 Run the preprocessor of the current language (@pxref{Language Choice})
9340 on the @var{input}, run the shell commands @var{action-if-true} on
9341 success, @var{action-if-false} otherwise.  The @var{input} can be made
9342 by @code{AC_LANG_PROGRAM} and friends.
9344 This macro uses @code{CPPFLAGS}, but not @code{CFLAGS}, because
9345 @option{-g}, @option{-O}, etc.@: are not valid options to many C
9346 preprocessors.
9348 It is customary to report unexpected failures with
9349 @code{AC_MSG_FAILURE}.  If needed, @var{action-if-true} can further access
9350 the preprocessed output in the file @file{conftest.i}.
9351 @end defmac
9353 For instance:
9355 @example
9356 AC_INIT([Hello], [1.0], [bug-hello@@example.org])
9357 AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
9358   [Greetings string.])
9359 AC_PREPROC_IFELSE(
9360    [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
9361                     [[fputs (hw, stdout);]])],
9362    [AC_MSG_RESULT([OK])],
9363    [AC_MSG_FAILURE([unexpected preprocessor failure])])
9364 @end example
9366 @noindent
9367 might result in:
9369 @example
9370 checking for gcc... gcc
9371 checking whether the C compiler works... yes
9372 checking for C compiler default output file name... a.out
9373 checking for suffix of executables...
9374 checking whether we are cross compiling... no
9375 checking for suffix of object files... o
9376 checking whether the compiler supports GNU C... yes
9377 checking whether gcc accepts -g... yes
9378 checking for gcc option to enable C11 features... -std=gnu11
9379 checking how to run the C preprocessor... gcc -std=gnu11 -E
9381 @end example
9383 @sp 1
9385 The macro @code{AC_TRY_CPP} (@pxref{Obsolete Macros}) used to play the
9386 role of @code{AC_PREPROC_IFELSE}, but double quotes its argument, making
9387 it impossible to use it to elaborate sources.  You are encouraged to
9388 get rid of your old use of the macro @code{AC_TRY_CPP} in favor of
9389 @code{AC_PREPROC_IFELSE}, but, in the first place, are you sure you need
9390 to run the @emph{preprocessor} and not the compiler?
9392 @anchor{AC_EGREP_HEADER}
9393 @defmac AC_EGREP_HEADER (@var{pattern}, @var{header-file}, @
9394   @var{action-if-found}, @ovar{action-if-not-found})
9395 @acindex{EGREP_HEADER}
9396 If the output of running the preprocessor on the system header file
9397 @var{header-file} matches the extended regular expression
9398 @var{pattern}, execute shell commands @var{action-if-found}, otherwise
9399 execute @var{action-if-not-found}.
9401 See below for some problems involving this macro.
9402 @end defmac
9404 @anchor{AC_EGREP_CPP}
9405 @defmac AC_EGREP_CPP (@var{pattern}, @var{program}, @
9406   @ovar{action-if-found}, @ovar{action-if-not-found})
9407 @acindex{EGREP_CPP}
9408 @var{program} is the text of a C or C++ program, on which shell
9409 variable, back quote, and backslash substitutions are performed.  If the
9410 output of running the preprocessor on @var{program} matches the
9411 extended regular expression @var{pattern}, execute shell commands
9412 @var{action-if-found}, otherwise execute @var{action-if-not-found}.
9414 See below for some problems involving this macro.
9415 @end defmac
9417 @code{AC_EGREP_CPP} and @code{AC_EGREP_HEADER} should be used with care,
9418 as preprocessors can insert line breaks between output tokens.  For
9419 example, the preprocessor might transform this:
9421 @example
9422 #define MAJOR 2
9423 #define MINOR 23
9424 Version MAJOR . MINOR
9425 @end example
9427 @noindent
9428 into this:
9430 @example
9431 Version
9432        2
9433                  .
9434                    23
9435 @end example
9437 @noindent
9438 Because preprocessors are allowed to insert white space, change escapes
9439 in string contants, insert backlash-newline pairs, or do any of a number
9440 of things that do not change the meaning of the preprocessed program, it
9441 is better to rely on @code{AC_PREPROC_IFELSE} than to resort to
9442 @code{AC_EGREP_CPP} or @code{AC_EGREP_HEADER}.
9445 @node Running the Compiler
9446 @section Running the Compiler
9448 To check for a syntax feature of the current language's (@pxref{Language
9449 Choice}) compiler, such as whether it recognizes a certain keyword, or
9450 simply to try some library feature, use @code{AC_COMPILE_IFELSE} to try
9451 to compile a small program that uses that feature.
9453 @defmac AC_COMPILE_IFELSE (@var{input}, @ovar{action-if-true}, @
9454   @ovar{action-if-false})
9455 @acindex{COMPILE_IFELSE}
9456 Run the compiler and compilation flags of the current language
9457 (@pxref{Language Choice}) on the @var{input}, run the shell commands
9458 @var{action-if-true} on success, @var{action-if-false} otherwise.  The
9459 @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
9461 It is customary to report unexpected failures with
9462 @code{AC_MSG_FAILURE}.  This macro does not try to link; use
9463 @code{AC_LINK_IFELSE} if you need to do that (@pxref{Running the
9464 Linker}).  If needed, @var{action-if-true} can further access the
9465 just-compiled object file @file{conftest.$OBJEXT}.
9467 This macro uses @code{AC_REQUIRE} for the compiler associated with the
9468 current language, which means that if the compiler has not yet been
9469 determined, the compiler determination will be made prior to the body of
9470 the outermost @code{AC_DEFUN} macro that triggered this macro to
9471 expand (@pxref{Expanded Before Required}).
9472 @end defmac
9474 @ovindex ERL
9475 For tests in Erlang, the @var{input} must be the source code of a module named
9476 @code{conftest}.  @code{AC_COMPILE_IFELSE} generates a @file{conftest.beam}
9477 file that can be interpreted by the Erlang virtual machine (@code{ERL}).  It is
9478 recommended to use @code{AC_LANG_PROGRAM} to specify the test program,
9479 to ensure that the Erlang module has the right name.
9481 @node Running the Linker
9482 @section Running the Linker
9484 To check for a library, a function, or a global variable, Autoconf
9485 @command{configure} scripts try to compile and link a small program that
9486 uses it.  This is unlike Metaconfig, which by default uses @code{nm} or
9487 @code{ar} on the C library to try to figure out which functions are
9488 available.  Trying to link with the function is usually a more reliable
9489 approach because it avoids dealing with the variations in the options
9490 and output formats of @code{nm} and @code{ar} and in the location of the
9491 standard libraries.  It also allows configuring for cross-compilation or
9492 checking a function's runtime behavior if needed.  On the other hand,
9493 it can be slower than scanning the libraries once, but accuracy is more
9494 important than speed.
9496 @code{AC_LINK_IFELSE} is used to compile test programs to test for
9497 functions and global variables.  It is also used by @code{AC_CHECK_LIB}
9498 to check for libraries (@pxref{Libraries}), by adding the library being
9499 checked for to @code{LIBS} temporarily and trying to link a small
9500 program.
9502 @anchor{AC_LINK_IFELSE}
9503 @defmac AC_LINK_IFELSE (@var{input}, @ovar{action-if-true}, @
9504   @ovar{action-if-false})
9505 @acindex{LINK_IFELSE}
9506 Run the compiler (and compilation flags) and the linker of the current
9507 language (@pxref{Language Choice}) on the @var{input}, run the shell
9508 commands @var{action-if-true} on success, @var{action-if-false}
9509 otherwise.  The @var{input} can be made by @code{AC_LANG_PROGRAM} and
9510 friends.  If needed, @var{action-if-true} can further access the
9511 just-linked program file @file{conftest$EXEEXT}.
9513 @code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
9514 current compilation flags.
9516 It is customary to report unexpected failures with
9517 @code{AC_MSG_FAILURE}.  This macro does not try to execute the program;
9518 use @code{AC_RUN_IFELSE} if you need to do that (@pxref{Runtime}).
9519 @end defmac
9521 The @code{AC_LINK_IFELSE} macro cannot be used for Erlang tests, since Erlang
9522 programs are interpreted and do not require linking.
9526 @node Runtime
9527 @section Checking Runtime Behavior
9529 Sometimes you need to find out how a system performs at runtime, such
9530 as whether a given function has a certain capability or bug.  If you
9531 can, make such checks when your program runs instead of when it is
9532 configured.  You can check for things like the machine's endianness when
9533 your program initializes itself.
9535 If you really need to test for a runtime behavior while configuring,
9536 you can write a test program to determine the result, and compile and
9537 run it using @code{AC_RUN_IFELSE}.  Avoid running test programs if
9538 possible, because this prevents people from configuring your package for
9539 cross-compiling.
9541 @anchor{AC_RUN_IFELSE}
9542 @defmac AC_RUN_IFELSE (@var{input}, @ovar{action-if-true}, @
9543   @ovar{action-if-false}, @dvar{action-if-cross-compiling, AC_MSG_FAILURE})
9544 @acindex{RUN_IFELSE}
9545 Run the compiler (and compilation flags) and the linker of the current
9546 language (@pxref{Language Choice}) on the @var{input}, then execute the
9547 resulting program.  If the program returns an exit
9548 status of 0 when executed, run shell commands @var{action-if-true}.
9549 Otherwise, run shell commands @var{action-if-false}.
9551 The @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
9552 @code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
9553 compilation flags of the current language (@pxref{Language Choice}).
9554 Additionally, @var{action-if-true} can run @command{./conftest$EXEEXT}
9555 for further testing.
9557 In the @var{action-if-false} section, the failing exit status is
9558 available in the shell variable @samp{$?}.  This exit status might be
9559 that of a failed compilation, or it might be that of a failed program
9560 execution.
9562 If cross-compilation mode is enabled (this is the case if either the
9563 compiler being used does not produce executables that run on the system
9564 where @command{configure} is being run, or if the options @code{--build}
9565 and @code{--host} were both specified and their values are different),
9566 then the test program is
9567 not run.  If the optional shell commands @var{action-if-cross-compiling}
9568 are given, those commands are run instead; typically these commands
9569 provide pessimistic defaults that allow cross-compilation to work even
9570 if the guess was wrong.  If the fourth argument is empty or omitted, but
9571 cross-compilation is detected, then @command{configure} prints an error
9572 message and exits.  If you want your package to be useful in a
9573 cross-compilation scenario, you @emph{should} provide a non-empty
9574 @var{action-if-cross-compiling} clause, as well as wrap the
9575 @code{AC_RUN_IFELSE} compilation inside an @code{AC_CACHE_CHECK}
9576 (@pxref{Caching Results}) which allows the user to override the
9577 pessimistic default if needed.
9579 It is customary to report unexpected failures with
9580 @code{AC_MSG_FAILURE}.
9581 @end defmac
9583 @command{autoconf} prints a warning message when creating
9584 @command{configure} each time it encounters a call to
9585 @code{AC_RUN_IFELSE} with no @var{action-if-cross-compiling} argument
9586 given.  If you are not concerned about users configuring your package
9587 for cross-compilation, you may ignore the warning.  A few of the macros
9588 distributed with Autoconf produce this warning message; but if this is a
9589 problem for you, please report it as a bug, along with an appropriate
9590 pessimistic guess to use instead.
9592 To configure for cross-compiling you can also choose a value for those
9593 parameters based on the canonical system name (@pxref{Manual
9594 Configuration}).  Alternatively, set up a test results cache file with
9595 the correct values for the host system (@pxref{Caching Results}).
9597 @ovindex cross_compiling
9598 To provide a default for calls of @code{AC_RUN_IFELSE} that are embedded
9599 in other macros, including a few of the ones that come with Autoconf,
9600 you can test whether the shell variable @code{cross_compiling} is set to
9601 @samp{yes}, and then use an alternate method to get the results instead
9602 of calling the macros.
9604 It is also permissible to temporarily assign to @code{cross_compiling}
9605 in order to force tests to behave as though they are in a
9606 cross-compilation environment, particularly since this provides a way to
9607 test your @var{action-if-cross-compiling} even when you are not using a
9608 cross-compiler.
9610 @example
9611 # We temporarily set cross-compile mode to force AC_COMPUTE_INT
9612 # to use the slow link-only method
9613 save_cross_compiling=$cross_compiling
9614 cross_compiling=yes
9615 AC_COMPUTE_INT([@dots{}])
9616 cross_compiling=$save_cross_compiling
9617 @end example
9619 A C or C++ runtime test should be portable.
9620 @xref{Portable C and C++}.
9622 Erlang tests must exit themselves the Erlang VM by calling the @code{halt/1}
9623 function: the given status code is used to determine the success of the test
9624 (status is @code{0}) or its failure (status is different than @code{0}), as
9625 explained above.  It must be noted that data output through the standard output
9626 (e.g., using @code{io:format/2}) may be truncated when halting the VM.
9627 Therefore, if a test must output configuration information, it is recommended
9628 to create and to output data into the temporary file named @file{conftest.out},
9629 using the functions of module @code{file}.  The @code{conftest.out} file is
9630 automatically deleted by the @code{AC_RUN_IFELSE} macro.  For instance, a
9631 simplified implementation of Autoconf's @code{AC_ERLANG_SUBST_LIB_DIR}
9632 macro is:
9634 @example
9635 AC_INIT([LibdirTest], [1.0], [bug-libdirtest@@example.org])
9636 AC_ERLANG_NEED_ERL
9637 AC_LANG(Erlang)
9638 AC_RUN_IFELSE(
9639   [AC_LANG_PROGRAM([], [dnl
9640     file:write_file("conftest.out", code:lib_dir()),
9641     halt(0)])],
9642   [echo "code:lib_dir() returned: `cat conftest.out`"],
9643   [AC_MSG_FAILURE([test Erlang program execution failed])])
9644 @end example
9647 @node Systemology
9648 @section Systemology
9649 @cindex Systemology
9651 This section aims at presenting some systems and pointers to
9652 documentation.  It may help you addressing particular problems reported
9653 by users.
9655 @uref{https://@/en.wikipedia.org/@/wiki/@/POSIX, Posix-conforming
9656 systems} are derived from the
9657 @uref{https://@/en.wikipedia.org/@/wiki/@/Unix, Unix operating system}.
9659 The @uref{http://@/bhami.com/@/rosetta.html, Rosetta Stone for Unix}
9660 contains a table correlating the features of various Posix-conforming
9661 systems.  @uref{https://@/www.levenez.com/@/unix/, Unix History} is a
9662 simplified diagram of how many Unix systems were derived from each
9663 other.
9665 @uref{http://@/heirloom.sourceforge.net/, The Heirloom Project}
9666 provides some variants of traditional implementations of Unix utilities.
9668 @table @asis
9669 @item Darwin
9670 @cindex Darwin
9671 Darwin is also known as Mac OS X@.  Beware that the file system @emph{can} be
9672 case-preserving, but case insensitive.  This can cause nasty problems,
9673 since for instance the installation attempt for a package having an
9674 @file{INSTALL} file can result in @samp{make install} report that
9675 nothing was to be done!
9677 That's all dependent on whether the file system is a UFS (case
9678 sensitive) or HFS+ (case preserving).  By default Apple wants you to
9679 install the OS on HFS+.  Unfortunately, there are some pieces of
9680 software which really need to be built on UFS@.  We may want to rebuild
9681 Darwin to have both UFS and HFS+ available (and put the /local/build
9682 tree on the UFS).
9684 @item QNX 4.25
9685 @cindex QNX 4.25
9686 @c FIXME: Please, if you feel like writing something more precise,
9687 @c it'd be great.  In particular, I can't understand the difference with
9688 @c QNX Neutrino.
9689 QNX is a realtime operating system running on Intel architecture
9690 meant to be scalable from the small embedded systems to the hundred
9691 processor super-computer.  It claims to be Posix certified.  More
9692 information is available on the
9693 @uref{https://@/blackberry.qnx.com/@/en, QNX home page}.
9695 @item Unix version 7
9696 @cindex Unix version 7
9697 @cindex V7
9698 Officially this was called the ``Seventh Edition'' of ``the UNIX
9699 time-sharing system'' but we use the more-common name ``Unix version 7''.
9700 Documentation is available in the
9701 @uref{https://@/s3.amazonaws.com/@/plan9-bell-labs/@/7thEdMan/@/index.html,
9702 Unix Seventh Edition Manual}.
9703 Previous versions of Unix are called ``Unix version 6'', etc., but
9704 they were not as widely used.
9705 @end table
9708 @node Multiple Cases
9709 @section Multiple Cases
9711 Some operations are accomplished in several possible ways, depending on
9712 the OS variant.  Checking for them essentially requires a ``case
9713 statement''.  Autoconf does not directly provide one; however, it is
9714 easy to simulate by using a shell variable to keep track of whether a
9715 way to perform the operation has been found yet.
9717 Here is an example that uses the shell variable @code{fstype} to keep
9718 track of whether the remaining cases need to be checked.  Note that
9719 since the value of @code{fstype} is under our control, we don't have to
9720 use the longer @samp{test "x$fstype" = xno}.
9722 @example
9723 @group
9724 AC_MSG_CHECKING([how to get file system type])
9725 fstype=no
9726 # The order of these tests is important.
9727 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statvfs.h>
9728 #include <sys/fstyp.h>]])],
9729                   [AC_DEFINE([FSTYPE_STATVFS], [1],
9730                      [Define if statvfs exists.])
9731                    fstype=SVR4])
9732 if test $fstype = no; then
9733   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
9734 #include <sys/fstyp.h>]])],
9735                   [AC_DEFINE([FSTYPE_USG_STATFS], [1],
9736                      [Define if USG statfs.])
9737                    fstype=SVR3])
9739 if test $fstype = no; then
9740   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
9741 #include <sys/vmount.h>]])]),
9742                   [AC_DEFINE([FSTYPE_AIX_STATFS], [1],
9743                      [Define if AIX statfs.])
9744                    fstype=AIX])
9746 # (more cases omitted here)
9747 AC_MSG_RESULT([$fstype])
9748 @end group
9749 @end example
9751 @c ====================================================== Results of Tests.
9753 @node Results
9754 @chapter Results of Tests
9756 Once @command{configure} has determined whether a feature exists, what can
9757 it do to record that information?  There are four sorts of things it can
9758 do: define a C preprocessor symbol, set a variable in the output files,
9759 save the result in a cache file for future @command{configure} runs, and
9760 print a message letting the user know the result of the test.
9762 @menu
9763 * Defining Symbols::            Defining C preprocessor symbols
9764 * Setting Output Variables::    Replacing variables in output files
9765 * Special Chars in Variables::  Characters to beware of in variables
9766 * Caching Results::             Speeding up subsequent @command{configure} runs
9767 * Printing Messages::           Notifying @command{configure} users
9768 @end menu
9770 @node Defining Symbols
9771 @section Defining C Preprocessor Symbols
9773 A common action to take in response to a feature test is to define a C
9774 preprocessor symbol indicating the results of the test.  That is done by
9775 calling @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}.
9777 By default, @code{AC_OUTPUT} places the symbols defined by these macros
9778 into the output variable @code{DEFS}, which contains an option
9779 @option{-D@var{symbol}=@var{value}} for each symbol defined.  Unlike in
9780 Autoconf version 1, there is no variable @code{DEFS} defined while
9781 @command{configure} is running.  To check whether Autoconf macros have
9782 already defined a certain C preprocessor symbol, test the value of the
9783 appropriate cache variable, as in this example:
9785 @example
9786 AC_CHECK_FUNC([vprintf], [AC_DEFINE([HAVE_VPRINTF], [1],
9787                           [Define if vprintf exists.])])
9788 if test "x$ac_cv_func_vprintf" != xyes; then
9789   AC_CHECK_FUNC([_doprnt], [AC_DEFINE([HAVE_DOPRNT], [1],
9790                             [Define if _doprnt exists.])])
9792 @end example
9794 If @code{AC_CONFIG_HEADERS} has been called, then instead of creating
9795 @code{DEFS}, @code{AC_OUTPUT} creates a header file by substituting the
9796 correct values into @code{#define} statements in a template file.
9797 @xref{Configuration Headers}, for more information about this kind of
9798 output.
9800 @defmac AC_DEFINE (@var{variable}, @var{value}, @ovar{description})
9801 @defmacx AC_DEFINE (@var{variable})
9802 @cvindex @var{variable}
9803 @acindex{DEFINE}
9804 Define @var{variable} to @var{value} (verbatim), by defining a C
9805 preprocessor macro for @var{variable}.  @var{variable} should be a C
9806 identifier, optionally suffixed by a parenthesized argument list to
9807 define a C preprocessor macro with arguments.  The macro argument list,
9808 if present, should be a comma-separated list of C identifiers, possibly
9809 terminated by an ellipsis @samp{...} if C99-or-later syntax is employed.
9810 @var{variable} should not contain comments, white space, trigraphs,
9811 backslash-newlines, universal character names, or non-ASCII
9812 characters.
9814 @var{value} may contain backslash-escaped newlines, which will be
9815 preserved if you use @code{AC_CONFIG_HEADERS} but flattened if passed
9816 via @code{@@DEFS@@} (with no effect on the compilation, since the
9817 preprocessor sees only one line in the first place).  @var{value} should
9818 not contain raw newlines.  If you are not using
9819 @code{AC_CONFIG_HEADERS}, @var{value} should not contain any @samp{#}
9820 characters, as @command{make} tends to eat them.  To use a shell
9821 variable, use @code{AC_DEFINE_UNQUOTED} instead.
9823 @var{description} is only useful if you are using
9824 @code{AC_CONFIG_HEADERS}.  In this case, @var{description} is put into
9825 the generated @file{config.h.in} as the comment before the macro define.
9826 The following example defines the C preprocessor variable
9827 @code{EQUATION} to be the string constant @samp{"$a > $b"}:
9829 @example
9830 AC_DEFINE([EQUATION], ["$a > $b"],
9831   [Equation string.])
9832 @end example
9834 If neither @var{value} nor @var{description} are given, then
9835 @var{value} defaults to 1 instead of to the empty string.  This is for
9836 backwards compatibility with older versions of Autoconf, but this usage
9837 is obsolescent and may be withdrawn in future versions of Autoconf.
9839 If the @var{variable} is a literal string, it is passed to
9840 @code{m4_pattern_allow} (@pxref{Forbidden Patterns}).
9842 If multiple @code{AC_DEFINE} statements are executed for the same
9843 @var{variable} name (not counting any parenthesized argument list),
9844 the last one wins.
9845 @end defmac
9847 @defmac AC_DEFINE_UNQUOTED (@var{variable}, @var{value}, @ovar{description})
9848 @defmacx AC_DEFINE_UNQUOTED (@var{variable})
9849 @acindex{DEFINE_UNQUOTED}
9850 @cvindex @var{variable}
9851 Like @code{AC_DEFINE}, but three shell expansions are
9852 performed---once---on @var{variable} and @var{value}: variable expansion
9853 (@samp{$}), command substitution (@samp{`}), and backslash escaping
9854 (@samp{\}), as if in an unquoted here-document.  Single and double quote
9855 characters in the value have no
9856 special meaning.  Use this macro instead of @code{AC_DEFINE} when
9857 @var{variable} or @var{value} is a shell variable.  Examples:
9859 @example
9860 AC_DEFINE_UNQUOTED([config_machfile], ["$machfile"],
9861   [Configuration machine file.])
9862 AC_DEFINE_UNQUOTED([GETGROUPS_T], [$ac_cv_type_getgroups],
9863   [getgroups return type.])
9864 AC_DEFINE_UNQUOTED([$ac_tr_hdr], [1],
9865   [Translated header name.])
9866 @end example
9867 @end defmac
9869 Due to a syntactical oddity of the Bourne shell, do not use
9870 semicolons to separate @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}
9871 calls from other macro calls or shell code; that can cause syntax errors
9872 in the resulting @command{configure} script.  Use either blanks or
9873 newlines.  That is, do this:
9875 @example
9876 AC_CHECK_HEADER([elf.h],
9877   [AC_DEFINE([SVR4], [1], [System V Release 4]) LIBS="-lelf $LIBS"])
9878 @end example
9880 @noindent
9881 or this:
9883 @example
9884 AC_CHECK_HEADER([elf.h],
9885   [AC_DEFINE([SVR4], [1], [System V Release 4])
9886    LIBS="-lelf $LIBS"])
9887 @end example
9889 @noindent
9890 instead of this:
9892 @example
9893 AC_CHECK_HEADER([elf.h],
9894   [AC_DEFINE([SVR4], [1], [System V Release 4]); LIBS="-lelf $LIBS"])
9895 @end example
9897 @node Setting Output Variables
9898 @section Setting Output Variables
9899 @cindex Output variables
9901 Another way to record the results of tests is to set @dfn{output
9902 variables}, which are shell variables whose values are substituted into
9903 files that @command{configure} outputs.  The two macros below create new
9904 output variables.  @xref{Preset Output Variables}, for a list of output
9905 variables that are always available.
9907 @defmac AC_SUBST (@var{variable}, @ovar{value})
9908 @acindex{SUBST}
9909 Create an output variable from a shell variable.  Make @code{AC_OUTPUT}
9910 substitute the variable @var{variable} into output files (typically one
9911 or more makefiles).  This means that @code{AC_OUTPUT}
9912 replaces instances of @samp{@@@var{variable}@@} in input files with the
9913 value that the shell variable @var{variable} has when @code{AC_OUTPUT}
9914 is called.  The value can contain any non-@code{NUL} character, including
9915 newline.  If you are using Automake 1.11 or newer, for newlines in values
9916 you might want to consider using @code{AM_SUBST_NOTMAKE} to prevent
9917 @command{automake} from adding a line @code{@var{variable} =
9918 @@@var{variable}@@} to the @file{Makefile.in} files (@pxref{Optional, ,
9919 Automake, automake, Other things Automake recognizes}).
9921 Variable occurrences should not overlap: e.g., an input file should
9922 not contain @samp{@@@var{var1}@@@var{var2}@@} if @var{var1} and @var{var2}
9923 are variable names.
9924 The substituted value is not rescanned for more output variables;
9925 occurrences of @samp{@@@var{variable}@@} in the value are inserted
9926 literally into the output file.  (The algorithm uses the special marker
9927 @code{|#_!!_#|} internally, so neither the substituted value nor the
9928 output file may contain @code{|#_!!_#|}.)
9930 If @var{value} is given, in addition assign it to @var{variable}.
9932 The string @var{variable} is passed to @code{m4_pattern_allow}
9933 (@pxref{Forbidden Patterns}).  @var{variable} is not further expanded,
9934 even if there is another macro by the same name.
9935 @end defmac
9937 @defmac AC_SUBST_FILE (@var{variable})
9938 @acindex{SUBST_FILE}
9939 Another way to create an output variable from a shell variable.  Make
9940 @code{AC_OUTPUT} insert (without substitutions) the contents of the file
9941 named by shell variable @var{variable} into output files.  This means
9942 that @code{AC_OUTPUT} replaces instances of
9943 @samp{@@@var{variable}@@} in output files (such as @file{Makefile.in})
9944 with the contents of the file that the shell variable @var{variable}
9945 names when @code{AC_OUTPUT} is called.  Set the variable to
9946 @file{/dev/null} for cases that do not have a file to insert.
9947 This substitution occurs only when the @samp{@@@var{variable}@@} is on a
9948 line by itself, optionally surrounded by spaces and tabs.  The
9949 substitution replaces the whole line, including the spaces, tabs, and
9950 the terminating newline.
9952 This macro is useful for inserting makefile fragments containing
9953 special dependencies or other @command{make} directives for particular host
9954 or target types into makefiles.  For example, @file{configure.ac}
9955 could contain:
9957 @example
9958 AC_SUBST_FILE([host_frag])
9959 host_frag=$srcdir/conf/sun4.mh
9960 @end example
9962 @noindent
9963 and then a @file{Makefile.in} could contain:
9965 @example
9966 @@host_frag@@
9967 @end example
9969 The string @var{variable} is passed to @code{m4_pattern_allow}
9970 (@pxref{Forbidden Patterns}).
9971 @end defmac
9973 @cindex Precious Variable
9974 @cindex Variable, Precious
9975 Running @command{configure} in varying environments can be extremely
9976 dangerous.  If for instance the user runs @samp{CC=bizarre-cc
9977 ./configure}, then the cache, @file{config.h}, and many other output
9978 files depend upon @command{bizarre-cc} being the C compiler.  If
9979 for some reason the user runs @command{./configure} again, or if it is
9980 run via @samp{./config.status --recheck}, (@xref{Automatic Remaking},
9981 and @pxref{config.status Invocation}), then the configuration can be
9982 inconsistent, composed of results depending upon two different
9983 compilers.
9985 Environment variables that affect this situation, such as @samp{CC}
9986 above, are called @dfn{precious variables}, and can be declared as such
9987 by @code{AC_ARG_VAR}.
9989 @defmac AC_ARG_VAR (@var{variable}, @var{description})
9990 @acindex{ARG_VAR}
9991 Declare @var{variable} is a precious variable, and include its
9992 @var{description} in the variable section of @samp{./configure --help}.
9994 Being precious means that
9995 @itemize @minus
9996 @item
9997 @var{variable} is substituted via @code{AC_SUBST}.
9999 @item
10000 The value of @var{variable} when @command{configure} was launched is
10001 saved in the cache, including if it was not specified on the command
10002 line but via the environment.  Indeed, while @command{configure} can
10003 notice the definition of @code{CC} in @samp{./configure CC=bizarre-cc},
10004 it is impossible to notice it in @samp{CC=bizarre-cc ./configure},
10005 which, unfortunately, is what most users do.
10007 We emphasize that it is the @emph{initial} value of @var{variable} which
10008 is saved, not that found during the execution of @command{configure}.
10009 Indeed, specifying @samp{./configure FOO=foo} and letting
10010 @samp{./configure} guess that @code{FOO} is @code{foo} can be two
10011 different things.
10013 @item
10014 @var{variable} is checked for consistency between two
10015 @command{configure} runs.  For instance:
10017 @example
10018 $ @kbd{./configure --silent --config-cache}
10019 $ @kbd{CC=cc ./configure --silent --config-cache}
10020 configure: error: 'CC' was not set in the previous run
10021 configure: error: changes in the environment can compromise \
10022 the build
10023 configure: error: run 'make distclean' and/or \
10024 'rm config.cache' and start over
10025 @end example
10027 @noindent
10028 and similarly if the variable is unset, or if its content is changed.
10029 If the content has white space changes only, then the error is degraded
10030 to a warning only, but the old value is reused.
10032 @item
10033 @var{variable} is kept during automatic reconfiguration
10034 (@pxref{config.status Invocation}) as if it had been passed as a command
10035 line argument, including when no cache is used:
10037 @example
10038 $ @kbd{CC=/usr/bin/cc ./configure var=raboof --silent}
10039 $ @kbd{./config.status --recheck}
10040 running CONFIG_SHELL=/bin/sh /bin/sh ./configure var=raboof \
10041   CC=/usr/bin/cc  --no-create --no-recursion
10042 @end example
10043 @end itemize
10044 @end defmac
10046 @node Special Chars in Variables
10047 @section Special Characters in Output Variables
10048 @cindex Output variables, special characters in
10050 Many output variables are intended to be evaluated both by
10051 @command{make} and by the shell.  Some characters are expanded
10052 differently in these two contexts, so to avoid confusion these
10053 variables' values should not contain any of the following characters:
10055 @example
10056 " # $ & ' ( ) * ; < > ? [ \ ^ ` |
10057 @end example
10059 Also, these variables' values should neither contain newlines, nor start
10060 with @samp{~}, nor contain white space or @samp{:} immediately followed
10061 by @samp{~}.  The values can contain nonempty sequences of white space
10062 characters like tabs and spaces, but each such sequence might
10063 arbitrarily be replaced by a single space during substitution.
10065 These restrictions apply both to the values that @command{configure}
10066 computes, and to the values set directly by the user.  For example, the
10067 following invocations of @command{configure} are problematic, since they
10068 attempt to use special characters within @code{CPPFLAGS} and white space
10069 within @code{$(srcdir)}:
10071 @example
10072 CPPFLAGS='-DOUCH="&\"#$*?"' '../My Source/ouch-1.0/configure'
10074 '../My Source/ouch-1.0/configure' CPPFLAGS='-DOUCH="&\"#$*?"'
10075 @end example
10077 @node Caching Results
10078 @section Caching Results
10079 @cindex Cache
10081 To avoid checking for the same features repeatedly in various
10082 @command{configure} scripts (or in repeated runs of one script),
10083 @command{configure} can optionally save the results of many checks in a
10084 @dfn{cache file} (@pxref{Cache Files}).  If a @command{configure} script
10085 runs with caching enabled and finds a cache file, it reads the results
10086 of previous runs from the cache and avoids rerunning those checks.  As a
10087 result, @command{configure} can then run much faster than if it had to
10088 perform all of the checks every time.
10090 @defmac AC_CACHE_VAL (@var{cache-id}, @var{commands-to-set-it})
10091 @acindex{CACHE_VAL}
10092 Ensure that the results of the check identified by @var{cache-id} are
10093 available.  If the results of the check were in the cache file that was
10094 read, and @command{configure} was not given the @option{--quiet} or
10095 @option{--silent} option, print a message saying that the result was
10096 cached; otherwise, run the shell commands @var{commands-to-set-it}.  If
10097 the shell commands are run to determine the value, the value is
10098 saved in the cache file just before @command{configure} creates its output
10099 files.  @xref{Cache Variable Names}, for how to choose the name of the
10100 @var{cache-id} variable.
10102 The @var{commands-to-set-it} @emph{must have no side effects} except for
10103 setting the variable @var{cache-id}, see below.
10104 @end defmac
10106 @defmac AC_CACHE_CHECK (@var{message}, @var{cache-id}, @
10107   @var{commands-to-set-it})
10108 @acindex{CACHE_CHECK}
10109 A wrapper for @code{AC_CACHE_VAL} that takes care of printing the
10110 messages.  This macro provides a convenient shorthand for the most
10111 common way to use these macros.  It calls @code{AC_MSG_CHECKING} for
10112 @var{message}, then @code{AC_CACHE_VAL} with the @var{cache-id} and
10113 @var{commands} arguments, and @code{AC_MSG_RESULT} with @var{cache-id}.
10115 The @var{commands-to-set-it} @emph{must have no side effects} except for
10116 setting the variable @var{cache-id}, see below.
10117 @end defmac
10119 It is common to find buggy macros using @code{AC_CACHE_VAL} or
10120 @code{AC_CACHE_CHECK}, because people are tempted to call
10121 @code{AC_DEFINE} in the @var{commands-to-set-it}.  Instead, the code that
10122 @emph{follows} the call to @code{AC_CACHE_VAL} should call
10123 @code{AC_DEFINE}, by examining the value of the cache variable.  For
10124 instance, the following macro is broken:
10126 @example
10127 @c If you change this example, adjust tests/base.at:AC_CACHE_CHECK.
10128 @group
10129 AC_DEFUN([AC_SHELL_TRUE],
10130 [AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
10131                 [my_cv_shell_true_works=no
10132                  (true) 2>/dev/null && my_cv_shell_true_works=yes
10133                  if test "x$my_cv_shell_true_works" = xyes; then
10134                    AC_DEFINE([TRUE_WORKS], [1],
10135                              [Define if 'true(1)' works properly.])
10136                  fi])
10138 @end group
10139 @end example
10141 @noindent
10142 This fails if the cache is enabled: the second time this macro is run,
10143 @code{TRUE_WORKS} @emph{will not be defined}.  The proper implementation
10146 @example
10147 @c If you change this example, adjust tests/base.at:AC_CACHE_CHECK.
10148 @group
10149 AC_DEFUN([AC_SHELL_TRUE],
10150 [AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
10151                 [my_cv_shell_true_works=no
10152                  (true) 2>/dev/null && my_cv_shell_true_works=yes])
10153  if test "x$my_cv_shell_true_works" = xyes; then
10154    AC_DEFINE([TRUE_WORKS], [1],
10155              [Define if 'true(1)' works properly.])
10156  fi
10158 @end group
10159 @end example
10161 Also, @var{commands-to-set-it} should not print any messages, for
10162 example with @code{AC_MSG_CHECKING}; do that before calling
10163 @code{AC_CACHE_VAL}, so the messages are printed regardless of whether
10164 the results of the check are retrieved from the cache or determined by
10165 running the shell commands.
10167 @menu
10168 * Cache Variable Names::        Shell variables used in caches
10169 * Cache Files::                 Files @command{configure} uses for caching
10170 * Cache Checkpointing::         Loading and saving the cache file
10171 @end menu
10173 @node Cache Variable Names
10174 @subsection Cache Variable Names
10175 @cindex Cache variable
10177 The names of cache variables should have the following format:
10179 @example
10180 @var{package-prefix}_cv_@var{value-type}_@var{specific-value}_@ovar{additional-options}
10181 @end example
10183 @noindent
10184 for example, @samp{ac_cv_header_stat_broken} or
10185 @samp{ac_cv_prog_gcc_traditional}.  The parts of the variable name are:
10187 @table @asis
10188 @item @var{package-prefix}
10189 An abbreviation for your package or organization; the same prefix you
10190 begin local Autoconf macros with, except lowercase by convention.
10191 For cache values used by the distributed Autoconf macros, this value is
10192 @samp{ac}.
10194 @item @code{_cv_}
10195 Indicates that this shell variable is a cache value.  This string
10196 @emph{must} be present in the variable name, including the leading
10197 underscore.
10199 @item @var{value-type}
10200 A convention for classifying cache values, to produce a rational naming
10201 system.  The values used in Autoconf are listed in @ref{Macro Names}.
10203 @item @var{specific-value}
10204 Which member of the class of cache values this test applies to.
10205 For example, which function (@samp{alloca}), program (@samp{gcc}), or
10206 output variable (@samp{INSTALL}).
10208 @item @var{additional-options}
10209 Any particular behavior of the specific member that this test applies to.
10210 For example, @samp{broken} or @samp{set}.  This part of the name may
10211 be omitted if it does not apply.
10212 @end table
10214 The values assigned to cache variables may not contain newlines.
10215 Usually, their values are Boolean (@samp{yes} or @samp{no}) or the
10216 names of files or functions; so this is not an important restriction.
10217 @ref{Cache Variable Index} for an index of cache variables with
10218 documented semantics.
10221 @node Cache Files
10222 @subsection Cache Files
10224 A cache file is a shell script that caches the results of configure
10225 tests run on one system so they can be shared between configure scripts
10226 and configure runs.  It is not useful on other systems.  If its contents
10227 are invalid for some reason, the user may delete or edit it, or override
10228 documented cache variables on the @command{configure} command line.
10230 By default, @command{configure} uses no cache file,
10231 to avoid problems caused by accidental
10232 use of stale cache files.
10234 To enable caching, @command{configure} accepts @option{--config-cache} (or
10235 @option{-C}) to cache results in the file @file{config.cache}.
10236 Alternatively, @option{--cache-file=@var{file}} specifies that
10237 @var{file} be the cache file.  The cache file is created if it does not
10238 exist already.  When @command{configure} calls @command{configure} scripts in
10239 subdirectories, it uses the @option{--cache-file} argument so that they
10240 share the same cache.  @xref{Subdirectories}, for information on
10241 configuring subdirectories with the @code{AC_CONFIG_SUBDIRS} macro.
10243 @file{config.status} only pays attention to the cache file if it is
10244 given the @option{--recheck} option, which makes it rerun
10245 @command{configure}.
10247 It is wrong to try to distribute cache files for particular system types.
10248 There is too much room for error in doing that, and too much
10249 administrative overhead in maintaining them.  For any features that
10250 can't be guessed automatically, use the standard method of the canonical
10251 system type and linking files (@pxref{Manual Configuration}).
10253 The site initialization script can specify a site-wide cache file to
10254 use, instead of the usual per-program cache.  In this case, the cache
10255 file gradually accumulates information whenever someone runs a new
10256 @command{configure} script.  (Running @command{configure} merges the new cache
10257 results with the existing cache file.)  This may cause problems,
10258 however, if the system configuration (e.g., the installed libraries or
10259 compilers) changes and the stale cache file is not deleted.
10261 If @command{configure} is interrupted at the right time when it updates
10262 a cache file outside of the build directory where the @command{configure}
10263 script is run, it may leave behind a temporary file named after the
10264 cache file with digits following it.  You may safely delete such a file.
10267 @node Cache Checkpointing
10268 @subsection Cache Checkpointing
10270 If your configure script, or a macro called from @file{configure.ac}, happens
10271 to abort the configure process, it may be useful to checkpoint the cache
10272 a few times at key points using @code{AC_CACHE_SAVE}.  Doing so
10273 reduces the amount of time it takes to rerun the configure script with
10274 (hopefully) the error that caused the previous abort corrected.
10276 @c FIXME: Do we really want to document this guy?
10277 @defmac AC_CACHE_LOAD
10278 @acindex{CACHE_LOAD}
10279 Loads values from existing cache file, or creates a new cache file if a
10280 cache file is not found.  Called automatically from @code{AC_INIT}.
10281 @end defmac
10283 @defmac AC_CACHE_SAVE
10284 @acindex{CACHE_SAVE}
10285 Flushes all cached values to the cache file.  Called automatically from
10286 @code{AC_OUTPUT}, but it can be quite useful to call
10287 @code{AC_CACHE_SAVE} at key points in @file{configure.ac}.
10288 @end defmac
10290 For instance:
10292 @example
10293 @r{ @dots{} AC_INIT, etc. @dots{}}
10294 @group
10295 # Checks for programs.
10296 AC_PROG_CC
10297 AC_PROG_AWK
10298 @r{ @dots{} more program checks @dots{}}
10299 AC_CACHE_SAVE
10300 @end group
10302 @group
10303 # Checks for libraries.
10304 AC_CHECK_LIB([nsl], [gethostbyname])
10305 AC_CHECK_LIB([socket], [connect])
10306 @r{ @dots{} more lib checks @dots{}}
10307 AC_CACHE_SAVE
10308 @end group
10310 @group
10311 # Might abort@dots{}
10312 AM_PATH_GTK([1.0.2], [], [AC_MSG_ERROR([GTK not in path])])
10313 AM_PATH_GTKMM([0.9.5], [], [AC_MSG_ERROR([GTK not in path])])
10314 @end group
10315 @r{ @dots{} AC_OUTPUT, etc. @dots{}}
10316 @end example
10318 @node Printing Messages
10319 @section Printing Messages
10320 @cindex Messages, from @command{configure}
10322 @command{configure} scripts need to give users running them several kinds
10323 of information.  The following macros print messages in ways appropriate
10324 for each kind.  The arguments to all of them get enclosed in shell
10325 double quotes, so the shell performs variable and back-quote
10326 substitution on them.
10328 These macros are all wrappers around the @command{echo} shell command.
10329 They direct output to the appropriate file descriptor (@pxref{File
10330 Descriptor Macros}).
10331 @command{configure} scripts should rarely need to run @command{echo} directly
10332 to print messages for the user.  Using these macros makes it easy to
10333 change how and when each kind of message is printed; such changes need
10334 only be made to the macro definitions and all the callers change
10335 automatically.
10337 To diagnose static issues, i.e., when @command{autoconf} is run, see
10338 @ref{Diagnostic Macros}.
10340 @defmac AC_MSG_CHECKING (@var{feature-description})
10341 @acindex{MSG_CHECKING}
10342 Notify the user that @command{configure} is checking for a particular
10343 feature.  This macro prints a message that starts with @samp{checking }
10344 and ends with @samp{...} and no newline.  It must be followed by a call
10345 to @code{AC_MSG_RESULT} to print the result of the check and the
10346 newline.  The @var{feature-description} should be something like
10347 @samp{whether the Fortran compiler accepts C++ comments} or @samp{for
10348 _Alignof}.
10350 This macro prints nothing if @command{configure} is run with the
10351 @option{--quiet} or @option{--silent} option.
10352 @end defmac
10354 @anchor{AC_MSG_RESULT}
10355 @defmac AC_MSG_RESULT (@var{result-description})
10356 @acindex{MSG_RESULT}
10357 Notify the user of the results of a check.  @var{result-description} is
10358 almost always the value of the cache variable for the check, typically
10359 @samp{yes}, @samp{no}, or a file name.  This macro should follow a call
10360 to @code{AC_MSG_CHECKING}, and the @var{result-description} should be
10361 the completion of the message printed by the call to
10362 @code{AC_MSG_CHECKING}.
10364 This macro prints nothing if @command{configure} is run with the
10365 @option{--quiet} or @option{--silent} option.
10366 @end defmac
10368 @anchor{AC_MSG_NOTICE}
10369 @defmac AC_MSG_NOTICE (@var{message})
10370 @acindex{MSG_NOTICE}
10371 Deliver the @var{message} to the user.  It is useful mainly to print a
10372 general description of the overall purpose of a group of feature checks,
10373 e.g.,
10375 @example
10376 AC_MSG_NOTICE([checking if stack overflow is detectable])
10377 @end example
10379 This macro prints nothing if @command{configure} is run with the
10380 @option{--quiet} or @option{--silent} option.
10381 @end defmac
10383 @anchor{AC_MSG_ERROR}
10384 @defmac AC_MSG_ERROR (@var{error-description}, @dvar{exit-status, $?/1})
10385 @acindex{MSG_ERROR}
10386 Notify the user of an error that prevents @command{configure} from
10387 completing.  This macro prints an error message to the standard error
10388 output and exits @command{configure} with @var{exit-status} (@samp{$?}
10389 by default, except that @samp{0} is converted to @samp{1}).
10390 @var{error-description} should be something like @samp{invalid value
10391 $HOME for \$HOME}.
10393 The @var{error-description} should start with a lower-case letter, and
10394 ``cannot'' is preferred to ``can't''.
10395 @end defmac
10397 @defmac AC_MSG_FAILURE (@var{error-description}, @ovar{exit-status})
10398 @acindex{MSG_FAILURE}
10399 This @code{AC_MSG_ERROR} wrapper notifies the user of an error that
10400 prevents @command{configure} from completing @emph{and} that additional
10401 details are provided in @file{config.log}.  This is typically used when
10402 abnormal results are found during a compilation.
10403 @end defmac
10405 @anchor{AC_MSG_WARN}
10406 @defmac AC_MSG_WARN (@var{problem-description})
10407 @acindex{MSG_WARN}
10408 Notify the @command{configure} user of a possible problem.  This macro
10409 prints the message to the standard error output; @command{configure}
10410 continues running afterward, so macros that call @code{AC_MSG_WARN} should
10411 provide a default (back-up) behavior for the situations they warn about.
10412 @var{problem-description} should be something like @samp{ln -s seems to
10413 make hard links}.
10414 @end defmac
10418 @c ====================================================== Programming in M4.
10420 @node Programming in M4
10421 @chapter Programming in M4
10422 @cindex M4
10424 Autoconf is written on top of two layers: @dfn{M4sugar}, which provides
10425 convenient macros for pure M4 programming, and @dfn{M4sh}, which
10426 provides macros dedicated to shell script generation.
10428 As of this version of Autoconf, these two layers still contain
10429 experimental macros, whose interface might change in the future.  As a
10430 matter of fact, @emph{anything that is not documented must not be used}.
10432 @menu
10433 * M4 Quotation::                Protecting macros from unwanted expansion
10434 * Using autom4te::              The Autoconf executables backbone
10435 * Programming in M4sugar::      Convenient pure M4 macros
10436 * Debugging via autom4te::      Figuring out what M4 was doing
10437 @end menu
10439 @node M4 Quotation
10440 @section M4 Quotation
10441 @cindex M4 quotation
10442 @cindex quotation
10444 The most common problem with existing macros is an improper quotation.
10445 This section, which users of Autoconf can skip, but which macro writers
10446 @emph{must} read, first justifies the quotation scheme that was chosen
10447 for Autoconf and then ends with a rule of thumb.  Understanding the
10448 former helps one to follow the latter.
10450 @menu
10451 * Active Characters::           Characters that change the behavior of M4
10452 * One Macro Call::              Quotation and one macro call
10453 * Quoting and Parameters::      M4 vs. shell parameters
10454 * Quotation and Nested Macros::  Macros calling macros
10455 * Changequote is Evil::         Worse than INTERCAL: M4 + changequote
10456 * Quadrigraphs::                Another way to escape special characters
10457 * Balancing Parentheses::       Dealing with unbalanced parentheses
10458 * Quotation Rule Of Thumb::     One parenthesis, one quote
10459 @end menu
10461 @node Active Characters
10462 @subsection Active Characters
10464 To fully understand where proper quotation is important, you first need
10465 to know what the special characters are in Autoconf: @samp{#} introduces
10466 a comment inside which no macro expansion is performed, @samp{,}
10467 separates arguments, @samp{[} and @samp{]} are the quotes
10468 themselves@footnote{By itself, M4 uses @samp{`} and @samp{'}; it is the
10469 M4sugar layer that sets up the preferred quotes of @samp{[} and @samp{]}.},
10470 @samp{(} and @samp{)} (which M4 tries to match by pairs), and finally
10471 @samp{$} inside a macro definition.
10473 In order to understand the delicate case of macro calls, we first have
10474 to present some obvious failures.  Below they are ``obvious-ified'',
10475 but when you find them in real life, they are usually in disguise.
10477 Comments, introduced by a hash and running up to the newline, are opaque
10478 tokens to the top level: active characters are turned off, and there is
10479 no macro expansion:
10481 @example
10482 # define([def], ine)
10483 @result{}# define([def], ine)
10484 @end example
10486 Each time there can be a macro expansion, there is a quotation
10487 expansion, i.e., one level of quotes is stripped:
10489 @example
10490 int tab[10];
10491 @result{}int tab10;
10492 [int tab[10];]
10493 @result{}int tab[10];
10494 @end example
10496 Without this in mind, the reader might try hopelessly to use her macro
10497 @code{array}:
10499 @example
10500 define([array], [int tab[10];])
10501 array
10502 @result{}int tab10;
10503 [array]
10504 @result{}array
10505 @end example
10507 @noindent
10508 How can you correctly output the intended results@footnote{Using
10509 @code{defn}.}?
10512 @node One Macro Call
10513 @subsection One Macro Call
10515 Let's proceed on the interaction between active characters and macros
10516 with this small macro, which just returns its first argument:
10518 @example
10519 define([car], [$1])
10520 @end example
10522 @noindent
10523 The two pairs of quotes above are not part of the arguments of
10524 @code{define}; rather, they are understood by the top level when it
10525 tries to find the arguments of @code{define}.  Therefore, assuming
10526 @code{car} is not already defined, it is equivalent to write:
10528 @example
10529 define(car, $1)
10530 @end example
10532 @noindent
10533 But, while it is acceptable for a @file{configure.ac} to avoid unnecessary
10534 quotes, it is bad practice for Autoconf macros which must both be more
10535 robust and also advocate perfect style.
10537 At the top level, there are only two possibilities: either you
10538 quote or you don't:
10540 @example
10541 car(foo, bar, baz)
10542 @result{}foo
10543 [car(foo, bar, baz)]
10544 @result{}car(foo, bar, baz)
10545 @end example
10547 Let's pay attention to the special characters:
10549 @example
10550 car(#)
10551 @error{}EOF in argument list
10552 @end example
10554 The closing parenthesis is hidden in the comment; with a hypothetical
10555 quoting, the top level understood it this way:
10557 @example
10558 car([#)]
10559 @end example
10561 @noindent
10562 Proper quotation, of course, fixes the problem:
10564 @example
10565 car([#])
10566 @result{}#
10567 @end example
10569 Here are more examples:
10571 @example
10572 car(foo, bar)
10573 @result{}foo
10574 car([foo, bar])
10575 @result{}foo, bar
10576 car((foo, bar))
10577 @result{}(foo, bar)
10578 car([(foo], [bar)])
10579 @result{}(foo
10580 define([a], [b])
10581 @result{}
10582 car(a)
10583 @result{}b
10584 car([a])
10585 @result{}b
10586 car([[a]])
10587 @result{}a
10588 car([[[a]]])
10589 @result{}[a]
10590 @end example
10592 @node Quoting and Parameters
10593 @subsection Quoting and Parameters
10595 When M4 encounters @samp{$} within a macro definition, followed
10596 immediately by a character it recognizes (@samp{0}@dots{}@samp{9},
10597 @samp{#}, @samp{@@}, or @samp{*}), it will perform M4 parameter
10598 expansion.  This happens regardless of how many layers of quotes the
10599 parameter expansion is nested within, or even if it occurs in text that
10600 will be rescanned as a comment.
10602 @example
10603 define([none], [$1])
10604 @result{}
10605 define([one], [[$1]])
10606 @result{}
10607 define([two], [[[$1]]])
10608 @result{}
10609 define([comment], [# $1])
10610 @result{}
10611 define([active], [ACTIVE])
10612 @result{}
10613 none([active])
10614 @result{}ACTIVE
10615 one([active])
10616 @result{}active
10617 two([active])
10618 @result{}[active]
10619 comment([active])
10620 @result{}# active
10621 @end example
10623 On the other hand, since autoconf generates shell code, you often want
10624 to output shell variable expansion, rather than performing M4 parameter
10625 expansion.  To do this, you must use M4 quoting to separate the @samp{$}
10626 from the next character in the definition of your macro.  If the macro
10627 definition occurs in single-quoted text, then insert another level of
10628 quoting; if the usage is already inside a double-quoted string, then
10629 split it into concatenated strings.
10631 @example
10632 define([foo], [a single-quoted $[]1 definition])
10633 @result{}
10634 define([bar], [[a double-quoted $][1 definition]])
10635 @result{}
10637 @result{}a single-quoted $1 definition
10639 @result{}a double-quoted $1 definition
10640 @end example
10642 Posix states that M4 implementations are free to provide implementation
10643 extensions when @samp{$@{} is encountered in a macro definition.
10644 Autoconf reserves the longer sequence @samp{$@{@{} for use with planned
10645 extensions that will be available in the future GNU M4 2.0,
10646 but guarantees that all other instances of @samp{$@{} will be output
10647 literally.  Therefore, this idiom can also be used to output shell code
10648 parameter references:
10650 @example
10651 define([first], [$@{1@}])first
10652 @result{}$@{1@}
10653 @end example
10655 Posix also states that @samp{$11} should expand to the first parameter
10656 concatenated with a literal @samp{1}, although some versions of
10657 GNU M4 expand the eleventh parameter instead.  For
10658 portability, you should only use single-digit M4 parameter expansion.
10660 With this in mind, we can explore the cases where macros invoke
10661 macros@enddots{}
10663 @node Quotation and Nested Macros
10664 @subsection Quotation and Nested Macros
10666 The examples below use the following macros:
10668 @example
10669 define([car], [$1])
10670 define([active], [ACT, IVE])
10671 define([array], [int tab[10]])
10672 @end example
10674 Each additional embedded macro call introduces other possible
10675 interesting quotations:
10677 @example
10678 car(active)
10679 @result{}ACT
10680 car([active])
10681 @result{}ACT, IVE
10682 car([[active]])
10683 @result{}active
10684 @end example
10686 In the first case, the top level looks for the arguments of @code{car},
10687 and finds @samp{active}.  Because M4 evaluates its arguments
10688 before applying the macro, @samp{active} is expanded, which results in:
10690 @example
10691 car(ACT, IVE)
10692 @result{}ACT
10693 @end example
10695 @noindent
10696 In the second case, the top level gives @samp{active} as first and only
10697 argument of @code{car}, which results in:
10699 @example
10700 active
10701 @result{}ACT, IVE
10702 @end example
10704 @noindent
10705 i.e., the argument is evaluated @emph{after} the macro that invokes it.
10706 In the third case, @code{car} receives @samp{[active]}, which results in:
10708 @example
10709 [active]
10710 @result{}active
10711 @end example
10713 @noindent
10714 exactly as we already saw above.
10716 The example above, applied to a more realistic example, gives:
10718 @example
10719 car(int tab[10];)
10720 @result{}int tab10;
10721 car([int tab[10];])
10722 @result{}int tab10;
10723 car([[int tab[10];]])
10724 @result{}int tab[10];
10725 @end example
10727 @noindent
10728 Huh?  The first case is easily understood, but why is the second wrong,
10729 and the third right?  To understand that, you must know that after
10730 M4 expands a macro, the resulting text is immediately subjected
10731 to macro expansion and quote removal.  This means that the quote removal
10732 occurs twice---first before the argument is passed to the @code{car}
10733 macro, and second after the @code{car} macro expands to the first
10734 argument.
10736 As the author of the Autoconf macro @code{car}, you then consider it to
10737 be incorrect that your users have to double-quote the arguments of
10738 @code{car}, so you ``fix'' your macro.  Let's call it @code{qar} for
10739 quoted car:
10741 @example
10742 define([qar], [[$1]])
10743 @end example
10745 @noindent
10746 and check that @code{qar} is properly fixed:
10748 @example
10749 qar([int tab[10];])
10750 @result{}int tab[10];
10751 @end example
10753 @noindent
10754 Ahhh!  That's much better.
10756 But note what you've done: now that the result of @code{qar} is always
10757 a literal string, the only time a user can use nested macros is if she
10758 relies on an @emph{unquoted} macro call:
10760 @example
10761 qar(active)
10762 @result{}ACT
10763 qar([active])
10764 @result{}active
10765 @end example
10767 @noindent
10768 leaving no way for her to reproduce what she used to do with @code{car}:
10770 @example
10771 car([active])
10772 @result{}ACT, IVE
10773 @end example
10775 @noindent
10776 Worse yet: she wants to use a macro that produces a set of @code{cpp}
10777 macros:
10779 @example
10780 define([my_includes], [#include <stdio.h>])
10781 car([my_includes])
10782 @result{}#include <stdio.h>
10783 qar(my_includes)
10784 @error{}EOF in argument list
10785 @end example
10787 This macro, @code{qar}, because it double quotes its arguments, forces
10788 its users to leave their macro calls unquoted, which is dangerous.
10789 Commas and other active symbols are interpreted by M4 before
10790 they are given to the macro, often not in the way the users expect.
10791 Also, because @code{qar} behaves differently from the other macros,
10792 it's an exception that should be avoided in Autoconf.
10794 @node Changequote is Evil
10795 @subsection @code{changequote} is Evil
10796 @cindex @code{changequote}
10798 The temptation is often high to bypass proper quotation, in particular
10799 when it's late at night.  Then, many experienced Autoconf hackers
10800 finally surrender to the dark side of the force and use the ultimate
10801 weapon: @code{changequote}.
10803 The M4 builtin @code{changequote} belongs to a set of primitives that
10804 allow one to adjust the syntax of the language to adjust it to one's
10805 needs.  For instance, by default M4 uses @samp{`} and @samp{'} as
10806 quotes, but in the context of shell programming (and actually of most
10807 programming languages), that's about the worst choice one can make:
10808 because of strings and back-quoted expressions in shell code (such as
10809 @samp{'this'} and @samp{`that`}), and because of literal characters in usual
10810 programming languages (as in @samp{'0'}), there are many unbalanced
10811 @samp{`} and @samp{'}.  Proper M4 quotation then becomes a nightmare, if
10812 not impossible.  In order to make M4 useful in such a context, its
10813 designers have equipped it with @code{changequote}, which makes it
10814 possible to choose another pair of quotes.  M4sugar, M4sh, Autoconf, and
10815 Autotest all have chosen to use @samp{[} and @samp{]}.  Not especially
10816 because they are unlikely characters, but @emph{because they are
10817 characters unlikely to be unbalanced}.
10819 There are other magic primitives, such as @code{changecom} to specify
10820 what syntactic forms are comments (it is common to see
10821 @samp{changecom(<!--, -->)} when M4 is used to produce HTML pages),
10822 @code{changeword} and @code{changesyntax} to change other syntactic
10823 details (such as the character to denote the @var{n}th argument, @samp{$} by
10824 default, the parentheses around arguments, etc.).
10826 These primitives are really meant to make M4 more useful for specific
10827 domains: they should be considered like command line options:
10828 @option{--quotes}, @option{--comments}, @option{--words}, and
10829 @option{--syntax}.  Nevertheless, they are implemented as M4 builtins, as
10830 it makes M4 libraries self contained (no need for additional options).
10832 There lies the problem@enddots{}
10834 @sp 1
10836 The problem is that it is then tempting to use them in the middle of an
10837 M4 script, as opposed to its initialization.  This, if not carefully
10838 thought out, can lead to disastrous effects: @emph{you are changing the
10839 language in the middle of the execution}.  Changing and restoring the
10840 syntax is often not enough: if you happened to invoke macros in between,
10841 these macros are lost, as the current syntax is probably not
10842 the one they were implemented with.
10844 @c FIXME: I've been looking for a short, real case example, but I
10845 @c lost them all :(
10848 @node Quadrigraphs
10849 @subsection Quadrigraphs
10850 @cindex quadrigraphs
10851 @cindex @samp{@@S|@@}
10852 @cindex @samp{@@&t@@}
10853 @c Info cannot handle ':' in index entries.
10854 @ifnotinfo
10855 @cindex @samp{@@<:@@}
10856 @cindex @samp{@@:>@@}
10857 @cindex @samp{@@%:@@}
10858 @cindex @samp{@@@{:@@}
10859 @cindex @samp{@@:@}@@}
10860 @end ifnotinfo
10862 When writing an Autoconf macro you may occasionally need to generate
10863 special characters that are difficult to express with the standard
10864 Autoconf quoting rules.  For example, you may need to output the regular
10865 expression @samp{[^[]}, which matches any character other than @samp{[}.
10866 This expression contains unbalanced brackets so it cannot be put easily
10867 into an M4 macro.
10869 Additionally, there are a few m4sugar macros (such as @code{m4_split}
10870 and @code{m4_expand}) which internally use special markers in addition
10871 to the regular quoting characters.  If the arguments to these macros
10872 contain the literal strings @samp{-=<@{(} or @samp{)@}>=-}, the macros
10873 might behave incorrectly.
10875 You can work around these problems by using one of the following
10876 @dfn{quadrigraphs}:
10878 @table @samp
10879 @item @@<:@@
10880 @samp{[}
10881 @item @@:>@@
10882 @samp{]}
10883 @item @@S|@@
10884 @samp{$}
10885 @item @@%:@@
10886 @samp{#}
10887 @item @@@{:@@
10888 @samp{(}
10889 @item @@:@}@@
10890 @samp{)}
10891 @item @@&t@@
10892 Expands to nothing.
10893 @end table
10895 Quadrigraphs are replaced at a late stage of the translation process,
10896 after @command{m4} is run, so they do not get in the way of M4 quoting.
10897 For example, the string @samp{^@@<:@@}, independently of its quotation,
10898 appears as @samp{^[} in the output.
10900 The empty quadrigraph can be used:
10902 @itemize @minus
10903 @item to mark trailing spaces explicitly
10905 Trailing spaces are smashed by @command{autom4te}.  This is a feature.
10907 @item to produce quadrigraphs and other strings reserved by m4sugar
10909 For instance @samp{@@<@@&t@@:@@} produces @samp{@@<:@@}.  For a more
10910 contrived example:
10912 @example
10913 m4_define([a], [A])m4_define([b], [B])m4_define([c], [C])dnl
10914 m4_split([a )@}>=- b -=<@{( c])
10915 @result{}[a], [], [B], [], [c]
10916 m4_split([a )@}@@&t@@>=- b -=<@@&t@@@{( c])
10917 @result{}[a], [)@}>=-], [b], [-=<@{(], [c]
10918 @end example
10920 @item to escape @emph{occurrences} of forbidden patterns
10922 For instance you might want to mention @code{AC_FOO} in a comment, while
10923 still being sure that @command{autom4te} still catches unexpanded
10924 @samp{AC_*}.  Then write @samp{AC@@&t@@_FOO}.
10925 @end itemize
10927 The name @samp{@@&t@@} was suggested by Paul Eggert:
10929 @quotation
10930 I should give some credit to the @samp{@@&t@@} pun.  The @samp{&} is my
10931 own invention, but the @samp{t} came from the source code of the
10932 ALGOL68C compiler, written by Steve Bourne (of Bourne shell fame),
10933 and which used @samp{mt} to denote the empty string.  In C, it would
10934 have looked like something like:
10936 @example
10937 char const mt[] = "";
10938 @end example
10940 @noindent
10941 but of course the source code was written in Algol 68.
10943 I don't know where he got @samp{mt} from: it could have been his own
10944 invention, and I suppose it could have been a common pun around the
10945 Cambridge University computer lab at the time.
10946 @end quotation
10949 @node Balancing Parentheses
10950 @subsection Dealing with unbalanced parentheses
10951 @cindex balancing parentheses
10952 @cindex parentheses, balancing
10953 @cindex unbalanced parentheses, managing
10955 One of the pitfalls of portable shell programming is that @command{case}
10956 statements require unbalanced parentheses (@pxref{case, , Limitations of
10957 Shell Builtins}).  With syntax highlighting
10958 editors, the presence of unbalanced @samp{)} can interfere with editors
10959 that perform syntax highlighting of macro contents based on finding the
10960 matching @samp{(}.  Another concern is how much editing must be done
10961 when transferring code snippets between shell scripts and macro
10962 definitions.  But most importantly, the presence of unbalanced
10963 parentheses can introduce expansion bugs.
10965 For an example, here is an underquoted attempt to use the macro
10966 @code{my_case}, which happens to expand to a portable @command{case}
10967 statement:
10969 @example
10970 AC_DEFUN([my_case],
10971 [case $file_name in
10972   *.c) echo "C source code";;
10973 esac])
10974 AS_IF(:, my_case)
10975 @end example
10977 @noindent
10978 In the above example, the @code{AS_IF} call under-quotes its arguments.
10979 As a result, the unbalanced @samp{)} generated by the premature
10980 expansion of @code{my_case} results in expanding @code{AS_IF} with a
10981 truncated parameter, and the expansion is syntactically invalid:
10983 @example
10984 if :; then
10985   case $file_name in
10986   *.c
10987 fi echo "C source code";;
10988 esac)
10989 @end example
10991 If nothing else, this should emphasize the importance of the quoting
10992 arguments to macro calls.  On the other hand, there are several
10993 variations for defining @code{my_case} to be more robust, even when used
10994 without proper quoting, each with some benefits and some drawbacks.
10996 @itemize @w{}
10997 @item Creative literal shell comment
10998 @example
10999 AC_DEFUN([my_case],
11000 [case $file_name in #(
11001   *.c) echo "C source code";;
11002 esac])
11003 @end example
11004 @noindent
11005 This version provides balanced parentheses to several editors, and can
11006 be copied and pasted into a terminal as is.  Unfortunately, it is still
11007 unbalanced as an Autoconf argument, since @samp{#(} is an M4 comment
11008 that masks the normal properties of @samp{(}.
11010 @item Quadrigraph shell comment
11011 @example
11012 AC_DEFUN([my_case],
11013 [case $file_name in @@%:@@(
11014   *.c) echo "C source code";;
11015 esac])
11016 @end example
11017 @noindent
11018 This version provides balanced parentheses to even more editors, and can
11019 be used as a balanced Autoconf argument.  Unfortunately, it requires
11020 some editing before it can be copied and pasted into a terminal, and the
11021 use of the quadrigraph @samp{@@%:@@} for @samp{#} reduces readability.
11023 @item Quoting just the parenthesis
11024 @example
11025 AC_DEFUN([my_case],
11026 [case $file_name in
11027   *.c[)] echo "C source code";;
11028 esac])
11029 @end example
11030 @noindent
11031 This version quotes the @samp{)}, so that it can be used as a balanced
11032 Autoconf argument.  As written, this is not balanced to an editor, but
11033 it can be coupled with @samp{[#(]} to meet that need, too.  However, it
11034 still requires some edits before it can be copied and pasted into a
11035 terminal.
11037 @item Double-quoting the entire statement
11038 @example
11039 AC_DEFUN([my_case],
11040 [[case $file_name in #(
11041   *.c) echo "C source code";;
11042 esac]])
11043 @end example
11044 @noindent
11045 Since the entire macro is double-quoted, there is no problem with using
11046 this as an Autoconf argument; and since the double-quoting is over the
11047 entire statement, this code can be easily copied and pasted into a
11048 terminal.  However, the double quoting prevents the expansion of any
11049 macros inside the case statement, which may cause its own set of
11050 problems.
11052 @item Using @code{AS_CASE}
11053 @example
11054 AC_DEFUN([my_case],
11055 [AS_CASE([$file_name],
11056   [*.c], [echo "C source code"])])
11057 @end example
11058 @noindent
11059 This version avoids the balancing issue altogether, by relying on
11060 @code{AS_CASE} (@pxref{Common Shell Constructs}); it also allows for the
11061 expansion of @code{AC_REQUIRE} to occur prior to the entire case
11062 statement, rather than within a branch of the case statement that might
11063 not be taken.  However, the abstraction comes with a penalty that it is
11064 no longer a quick copy, paste, and edit to get back to shell code.
11065 @end itemize
11068 @node Quotation Rule Of Thumb
11069 @subsection Quotation Rule Of Thumb
11071 To conclude, the quotation rule of thumb is:
11073 @center @emph{One pair of quotes per pair of parentheses.}
11075 Never over-quote, never under-quote, in particular in the definition of
11076 macros.  In the few places where the macros need to use brackets
11077 (usually in C program text or regular expressions), properly quote
11078 @emph{the arguments}!
11080 It is common to read Autoconf programs with snippets like:
11082 @example
11083 AC_TRY_LINK(
11084 changequote(<<, >>)dnl
11085 <<#include <time.h>
11086 #ifndef tzname /* For SGI.  */
11087 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
11088 #endif>>,
11089 changequote([, ])dnl
11090 [atoi (*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
11091 @end example
11093 @noindent
11094 which is incredibly useless since @code{AC_TRY_LINK} is @emph{already}
11095 double quoting, so you just need:
11097 @example
11098 AC_TRY_LINK(
11099 [#include <time.h>
11100 #ifndef tzname /* For SGI.  */
11101 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
11102 #endif],
11103             [atoi (*tzname);],
11104             [ac_cv_var_tzname=yes],
11105             [ac_cv_var_tzname=no])
11106 @end example
11108 @noindent
11109 The M4-fluent reader might note that these two examples are rigorously
11110 equivalent, since M4 swallows both the @samp{changequote(<<, >>)}
11111 and @samp{<<} @samp{>>} when it @dfn{collects} the arguments: these
11112 quotes are not part of the arguments!
11114 Simplified, the example above is just doing this:
11116 @example
11117 changequote(<<, >>)dnl
11118 <<[]>>
11119 changequote([, ])dnl
11120 @end example
11122 @noindent
11123 instead of simply:
11125 @example
11126 [[]]
11127 @end example
11129 With macros that do not double quote their arguments (which is the
11130 rule), double-quote the (risky) literals:
11132 @example
11133 AC_LINK_IFELSE([AC_LANG_PROGRAM(
11134 [[#include <time.h>
11135 #ifndef tzname /* For SGI.  */
11136 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
11137 #endif]],
11138                                 [atoi (*tzname);])],
11139                [ac_cv_var_tzname=yes],
11140                [ac_cv_var_tzname=no])
11141 @end example
11143 Please note that the macro @code{AC_TRY_LINK} is obsolete, so you really
11144 should be using @code{AC_LINK_IFELSE} instead.
11146 @xref{Quadrigraphs}, for what to do if you run into a hopeless case
11147 where quoting does not suffice.
11149 When you create a @command{configure} script using newly written macros,
11150 examine it carefully to check whether you need to add more quotes in
11151 your macros.  If one or more words have disappeared in the M4
11152 output, you need more quotes.  When in doubt, quote.
11154 However, it's also possible to put on too many layers of quotes.  If
11155 this happens, the resulting @command{configure} script may contain
11156 unexpanded macros.  The @command{autoconf} program checks for this problem
11157 by looking for the string @samp{AC_} in @file{configure}.  However, this
11158 heuristic does not work in general: for example, it does not catch
11159 overquoting in @code{AC_DEFINE} descriptions.
11162 @c ---------------------------------------- Using autom4te
11164 @node Using autom4te
11165 @section Using @command{autom4te}
11167 The Autoconf suite, including M4sugar, M4sh, and Autotest, in addition
11168 to Autoconf per se, heavily rely on M4.  All these different uses
11169 revealed common needs factored into a layer over M4:
11170 @command{autom4te}@footnote{
11172 Yet another great name from Lars J. Aas.
11176 @command{autom4te} is a preprocessor that is like @command{m4}.
11177 It supports M4 extensions designed for use in tools like Autoconf.
11179 @menu
11180 * autom4te Invocation::         A GNU M4 wrapper
11181 * Customizing autom4te::        Customizing the Autoconf package
11182 @end menu
11184 @node autom4te Invocation
11185 @subsection Invoking @command{autom4te}
11187 The command line arguments are modeled after M4's:
11189 @example
11190 autom4te @var{options} @var{files}
11191 @end example
11193 @noindent
11194 @evindex M4
11195 where the @var{files} are directly passed to @command{m4}.  By default,
11196 GNU M4 is found during configuration, but the environment
11197 variable
11198 @env{M4} can be set to tell @command{autom4te} where to look.  In addition
11199 to the regular expansion, it handles the replacement of the quadrigraphs
11200 (@pxref{Quadrigraphs}), and of @samp{__oline__}, the current line in the
11201 output.  It supports an extended syntax for the @var{files}:
11203 @table @file
11204 @item @var{file}.m4f
11205 This file is an M4 frozen file.  Note that @emph{all the previous files
11206 are ignored}.  See the @option{--melt} option for the rationale.
11208 @item @var{file}?
11209 If found in the library path, the @var{file} is included for expansion,
11210 otherwise it is ignored instead of triggering a failure.
11211 @end table
11213 @sp 1
11215 Of course, it supports the Autoconf common subset of options:
11217 @table @option
11218 @item --help
11219 @itemx -h
11220 Print a summary of the command line options and exit.
11222 @item --version
11223 @itemx -V
11224 Print the version number of Autoconf and exit.
11226 @item --verbose
11227 @itemx -v
11228 Report processing steps.
11230 @item --debug
11231 @itemx -d
11232 Don't remove the temporary files and be even more verbose.
11234 @item --include=@var{dir}
11235 @itemx -I @var{dir}
11236 Also look for input files in @var{dir}.  Multiple invocations
11237 accumulate.
11239 @item --output=@var{file}
11240 @itemx -o @var{file}
11241 Save output (script or trace) to @var{file}.  The file @option{-} stands
11242 for the standard output.
11243 @end table
11245 @sp 1
11247 As an extension of @command{m4}, it includes the following options:
11249 @table @option
11250 @item --warnings=@var{category}
11251 @itemx -W @var{category}
11252 @evindex WARNINGS
11253 @c FIXME: Point to the M4sugar macros, not Autoconf's.
11254 Report the warnings related to @var{category} (which can actually be a
11255 comma separated list).  @xref{Reporting Messages}, macro
11256 @code{AC_DIAGNOSE}, for a comprehensive list of categories.  Special
11257 values include:
11259 @table @samp
11260 @item all
11261 report all the warnings
11263 @item none
11264 report none
11266 @item error
11267 treats warnings as errors
11269 @item no-@var{category}
11270 disable warnings falling into @var{category}
11271 @end table
11273 Warnings about @samp{syntax} are enabled by default, and the environment
11274 variable @env{WARNINGS}, a comma separated list of categories, is
11275 honored.  @samp{autom4te -W @var{category}} actually
11276 behaves as if you had run:
11278 @example
11279 autom4te --warnings=syntax,$WARNINGS,@var{category}
11280 @end example
11282 @noindent
11283 For example, if you want to disable defaults and @env{WARNINGS}
11284 of @command{autom4te}, but enable the warnings about obsolete
11285 constructs, you would use @option{-W none,obsolete}.
11287 @cindex Back trace
11288 @cindex Macro invocation stack
11289 @command{autom4te} displays a back trace for errors, but not for
11290 warnings; if you want them, just pass @option{-W error}.
11292 @item --melt
11293 @itemx -M
11294 Do not use frozen files.  Any argument @code{@var{file}.m4f} is
11295 replaced by @code{@var{file}.m4}.  This helps tracing the macros which
11296 are executed only when the files are frozen, typically
11297 @code{m4_define}.  For instance, running:
11299 @example
11300 autom4te --melt 1.m4 2.m4f 3.m4 4.m4f input.m4
11301 @end example
11303 @noindent
11304 is roughly equivalent to running:
11306 @example
11307 m4 1.m4 2.m4 3.m4 4.m4 input.m4
11308 @end example
11310 @noindent
11311 while
11313 @example
11314 autom4te 1.m4 2.m4f 3.m4 4.m4f input.m4
11315 @end example
11317 @noindent
11318 is equivalent to:
11320 @example
11321 m4 --reload-state=4.m4f input.m4
11322 @end example
11324 @item --freeze
11325 @itemx -F
11326 Produce a frozen state file.  @command{autom4te} freezing is stricter
11327 than M4's: it must produce no warnings, and no output other than empty
11328 lines (a line with white space is @emph{not} empty) and comments
11329 (starting with @samp{#}).  Unlike @command{m4}'s similarly-named option,
11330 this option takes no argument:
11332 @example
11333 autom4te 1.m4 2.m4 3.m4 --freeze --output=3.m4f
11334 @end example
11336 @noindent
11337 corresponds to
11339 @example
11340 m4 1.m4 2.m4 3.m4 --freeze-state=3.m4f
11341 @end example
11343 @item --mode=@var{octal-mode}
11344 @itemx -m @var{octal-mode}
11345 Set the mode of the non-traces output to @var{octal-mode}; by default
11346 @samp{0666}.
11347 @end table
11349 @sp 1
11351 @cindex @file{autom4te.cache}
11352 As another additional feature over @command{m4}, @command{autom4te}
11353 caches its results.  GNU M4 is able to produce a regular
11354 output and traces at the same time.  Traces are heavily used in the
11355 GNU Build System: @command{autoheader} uses them to build
11356 @file{config.h.in}, @command{autoreconf} to determine what
11357 GNU Build System components are used, @command{automake} to
11358 ``parse'' @file{configure.ac} etc.  To avoid recomputation,
11359 traces are cached while performing regular expansion,
11360 and conversely.  This cache is (actually, the caches are) stored in
11361 the directory @file{autom4te.cache}.  @emph{It can safely be removed}
11362 at any moment (especially if for some reason @command{autom4te}
11363 considers it trashed).
11365 @table @option
11366 @item --cache=@var{directory}
11367 @itemx -C @var{directory}
11368 Specify the name of the directory where the result should be cached.
11369 Passing an empty value disables caching.  Be sure to pass a relative
11370 file name, as for the time being, global caches are not supported.
11372 @item --no-cache
11373 Don't cache the results.
11375 @item --force
11376 @itemx -f
11377 If a cache is used, consider it obsolete (but update it anyway).
11378 @end table
11380 @sp 1
11382 Because traces are so important to the GNU Build System,
11383 @command{autom4te} provides high level tracing features as compared to
11384 M4, and helps exploiting the cache:
11386 @table @option
11387 @item --trace=@var{macro}[:@var{format}]
11388 @itemx -t @var{macro}[:@var{format}]
11389 Trace the invocations of @var{macro} according to the @var{format}.
11390 Multiple @option{--trace} arguments can be used to list several macros.
11391 Multiple @option{--trace} arguments for a single macro are not
11392 cumulative; instead, you should just make @var{format} as long as
11393 needed.
11395 The @var{format} is a regular string, with newlines if desired, and
11396 several special escape codes.  It defaults to @samp{$f:$l:$n:$%}.  It can
11397 use the following special escapes:
11399 @table @samp
11400 @item $$
11401 @c $$ restore font-lock
11402 The character @samp{$}.
11404 @item $f
11405 The file name from which @var{macro} is called.
11407 @item $l
11408 The line number from which @var{macro} is called.
11410 @item $d
11411 The depth of the @var{macro} call.  This is an M4 technical detail that
11412 you probably don't want to know about.
11414 @item $n
11415 The name of the @var{macro}.
11417 @item $@var{num}
11418 The @var{num}th argument of the call to @var{macro}.
11420 @item $@@
11421 @itemx $@var{sep}@@
11422 @itemx $@{@var{separator}@}@@
11423 All the arguments passed to @var{macro}, separated by the character
11424 @var{sep} or the string @var{separator} (@samp{,} by default).  Each
11425 argument is quoted, i.e., enclosed in a pair of square brackets.
11427 @item $*
11428 @itemx $@var{sep}*
11429 @itemx $@{@var{separator}@}*
11430 As above, but the arguments are not quoted.
11432 @item $%
11433 @itemx $@var{sep}%
11434 @itemx $@{@var{separator}@}%
11435 As above, but the arguments are not quoted, all new line characters in
11436 the arguments are smashed, and the default separator is @samp{:}.
11438 The escape @samp{$%} produces single-line trace outputs (unless you put
11439 newlines in the @samp{separator}), while @samp{$@@} and @samp{$*} do
11440 not.
11441 @end table
11443 @xref{autoconf Invocation}, for examples of trace uses.
11445 @item --preselect=@var{macro}
11446 @itemx -p @var{macro}
11447 Cache the traces of @var{macro}, but do not enable traces.  This is
11448 especially important to save CPU cycles in the future.  For instance,
11449 when invoked, @command{autoconf} pre-selects all the macros that
11450 @command{autoheader}, @command{automake}, @command{autoreconf}, etc.,
11451 trace, so that running @command{m4} is not needed to trace them: the
11452 cache suffices.  This results in a huge speed-up.
11453 @end table
11455 @sp 1
11457 @cindex Autom4te Library
11458 Finally, @command{autom4te} introduces the concept of @dfn{Autom4te
11459 libraries}.  They consists in a powerful yet extremely simple feature:
11460 sets of combined command line arguments:
11462 @table @option
11463 @item --language=@var{language}
11464 @itemx -l @var{language}
11465 Use the @var{language} Autom4te library.  Current languages include:
11467 @table @code
11468 @item M4sugar
11469 create M4sugar output.
11471 @item M4sh
11472 create M4sh executable shell scripts.
11474 @item Autotest
11475 create Autotest executable test suites.
11477 @item Autoconf-without-aclocal-m4
11478 create Autoconf executable configure scripts without
11479 reading @file{aclocal.m4}.
11481 @item Autoconf
11482 create Autoconf executable configure scripts.  This language inherits
11483 all the characteristics of @code{Autoconf-without-aclocal-m4} and
11484 additionally reads @file{aclocal.m4}.
11485 @end table
11487 @item --prepend-include=@var{dir}
11488 @itemx -B @var{dir}
11489 Prepend directory @var{dir} to the search path.  This is used to include
11490 the language-specific files before any third-party macros.
11492 @end table
11494 @cindex @file{autom4te.cfg}
11495 As an example, if Autoconf is installed in its default location,
11496 @file{/usr/local}, the command @samp{autom4te -l m4sugar foo.m4} is
11497 strictly equivalent to the command:
11499 @example
11500 autom4te --prepend-include /usr/local/share/autoconf \
11501   m4sugar/m4sugar.m4f --warnings syntax foo.m4
11502 @end example
11504 @noindent
11505 Recursive expansion applies here: the command @samp{autom4te -l m4sh foo.m4}
11506 is the same as @samp{autom4te --language M4sugar m4sugar/m4sh.m4f
11507 foo.m4}, i.e.:
11509 @example
11510 autom4te --prepend-include /usr/local/share/autoconf \
11511   m4sugar/m4sugar.m4f m4sugar/m4sh.m4f --mode 777 foo.m4
11512 @end example
11514 @noindent
11515 The definition of the languages is stored in @file{autom4te.cfg}.
11517 @node Customizing autom4te
11518 @subsection Customizing @command{autom4te}
11520 One can customize @command{autom4te} via @file{~/.autom4te.cfg} (i.e.,
11521 as found in the user home directory), and @file{./.autom4te.cfg} (i.e.,
11522 as found in the directory from which @command{autom4te} is run).  The
11523 order is first reading @file{autom4te.cfg}, then @file{~/.autom4te.cfg},
11524 then @file{./.autom4te.cfg}, and finally the command line arguments.
11526 In these text files, comments are introduced with @code{#}, and empty
11527 lines are ignored.  Customization is performed on a per-language basis,
11528 wrapped in between a @samp{begin-language: "@var{language}"},
11529 @samp{end-language: "@var{language}"} pair.
11531 Customizing a language stands for appending options (@pxref{autom4te
11532 Invocation}) to the current definition of the language.  Options, and
11533 more generally arguments, are introduced by @samp{args:
11534 @var{arguments}}.  You may use the traditional shell syntax to quote the
11535 @var{arguments}.
11537 As an example, to disable Autoconf caches (@file{autom4te.cache})
11538 globally, include the following lines in @file{~/.autom4te.cfg}:
11540 @verbatim
11541 ## ------------------ ##
11542 ## User Preferences.  ##
11543 ## ------------------ ##
11545 begin-language: "Autoconf-without-aclocal-m4"
11546 args: --no-cache
11547 end-language: "Autoconf-without-aclocal-m4"
11548 @end verbatim
11551 @node Programming in M4sugar
11552 @section Programming in M4sugar
11554 @cindex M4sugar
11555 M4 by itself provides only a small, but sufficient, set of all-purpose
11556 macros.  M4sugar introduces additional generic macros.  Its name was
11557 coined by Lars J. Aas: ``Readability And Greater Understanding Stands 4
11558 M4sugar''.
11560 M4sugar reserves the macro namespace @samp{^_m4_} for internal use, and
11561 the macro namespace @samp{^m4_} for M4sugar macros.  You should not
11562 define your own macros into these namespaces.
11564 @menu
11565 * Redefined M4 Macros::         M4 builtins changed in M4sugar
11566 * Diagnostic Macros::           Diagnostic messages from M4sugar
11567 * Diversion support::           Diversions in M4sugar
11568 * Conditional constructs::      Conditions in M4
11569 * Looping constructs::          Iteration in M4
11570 * Evaluation Macros::           More quotation and evaluation control
11571 * Text processing Macros::      String manipulation in M4
11572 * Number processing Macros::    Arithmetic computation in M4
11573 * Set manipulation Macros::     Set manipulation in M4
11574 * Forbidden Patterns::          Catching unexpanded macros
11575 @end menu
11577 @node Redefined M4 Macros
11578 @subsection Redefined M4 Macros
11580 @msindex{builtin}
11581 @msindex{changecom}
11582 @msindex{changequote}
11583 @msindex{debugfile}
11584 @msindex{debugmode}
11585 @msindex{decr}
11586 @msindex{define}
11587 @msindex{divnum}
11588 @msindex{errprint}
11589 @msindex{esyscmd}
11590 @msindex{eval}
11591 @msindex{format}
11592 @msindex{ifdef}
11593 @msindex{incr}
11594 @msindex{index}
11595 @msindex{indir}
11596 @msindex{len}
11597 @msindex{pushdef}
11598 @msindex{shift}
11599 @msindex{substr}
11600 @msindex{syscmd}
11601 @msindex{sysval}
11602 @msindex{traceoff}
11603 @msindex{traceon}
11604 @msindex{translit}
11605 With a few exceptions, all the M4 native macros are moved in the
11606 @samp{m4_} pseudo-namespace, e.g., M4sugar renames @code{define} as
11607 @code{m4_define} etc.
11609 The list of macros unchanged from M4, except for their name, is:
11610 @itemize @minus
11611 @item m4_builtin
11612 @item m4_changecom
11613 @item m4_changequote
11614 @item m4_debugfile
11615 @item m4_debugmode
11616 @item m4_decr
11617 @item m4_define
11618 @item m4_divnum
11619 @item m4_errprint
11620 @item m4_esyscmd
11621 @item m4_eval
11622 @item m4_format
11623 @item m4_ifdef
11624 @item m4_incr
11625 @item m4_index
11626 @item m4_indir
11627 @item m4_len
11628 @item m4_pushdef
11629 @item m4_shift
11630 @item m4_substr
11631 @item m4_syscmd
11632 @item m4_sysval
11633 @item m4_traceoff
11634 @item m4_traceon
11635 @item m4_translit
11636 @end itemize
11638 Some M4 macros are redefined, and are slightly incompatible with their
11639 native equivalent.
11641 @defmac __file__
11642 @defmacx __line__
11643 @MSindex __file__
11644 @MSindex __line__
11645 All M4 macros starting with @samp{__} retain their original name: for
11646 example, no @code{m4__file__} is defined.
11647 @end defmac
11649 @defmac __oline__
11650 @MSindex __oline__
11651 This is not technically a macro, but a feature of Autom4te.  The
11652 sequence @code{__oline__} can be used similarly to the other m4sugar
11653 location macros, but rather than expanding to the location of the input
11654 file, it is translated to the line number where it appears in the output
11655 file after all other M4 expansions.
11656 @end defmac
11658 @defmac dnl
11659 @MSindex dnl
11660 This macro kept its original name: no @code{m4_dnl} is defined.
11661 @end defmac
11663 @defmac m4_bpatsubst (@var{string}, @var{regexp}, @ovar{replacement})
11664 @msindex{bpatsubst}
11665 This macro corresponds to @code{patsubst}.  The name @code{m4_patsubst}
11666 is kept for future versions of M4sugar, once GNU M4 2.0 is
11667 released and supports extended regular expression syntax.
11668 @end defmac
11670 @defmac m4_bregexp (@var{string}, @var{regexp}, @ovar{replacement})
11671 @msindex{bregexp}
11672 This macro corresponds to @code{regexp}.  The name @code{m4_regexp}
11673 is kept for future versions of M4sugar, once GNU M4 2.0 is
11674 released and supports extended regular expression syntax.
11675 @end defmac
11677 @defmac m4_copy (@var{source}, @var{dest})
11678 @defmacx m4_copy_force (@var{source}, @var{dest})
11679 @defmacx m4_rename (@var{source}, @var{dest})
11680 @defmacx m4_rename_force (@var{source}, @var{dest})
11681 @msindex{copy}
11682 @msindex{copy_force}
11683 @msindex{rename}
11684 @msindex{rename_force}
11685 These macros aren't directly builtins, but are closely related to
11686 @code{m4_pushdef} and @code{m4_defn}.  @code{m4_copy} and
11687 @code{m4_rename} ensure that @var{dest} is undefined, while
11688 @code{m4_copy_force} and @code{m4_rename_force} overwrite any existing
11689 definition.  All four macros then proceed to copy the entire pushdef
11690 stack of definitions of @var{source} over to @var{dest}.  @code{m4_copy}
11691 and @code{m4_copy_force} preserve the source (including in the special
11692 case where @var{source} is undefined), while @code{m4_rename} and
11693 @code{m4_rename_force} undefine the original macro name (making it an
11694 error to rename an undefined @var{source}).
11696 Note that attempting to invoke a renamed macro might not work, since the
11697 macro may have a dependence on helper macros accessed via composition of
11698 @samp{$0} but that were not also renamed; likewise, other macros may
11699 have a hard-coded dependence on @var{source} and could break if
11700 @var{source} has been deleted.  On the other hand, it is always safe to
11701 rename a macro to temporarily move it out of the way, then rename it
11702 back later to restore original semantics.
11703 @end defmac
11705 @defmac m4_defn (@var{macro}@dots{})
11706 @msindex{defn}
11707 This macro fails if @var{macro} is not defined, even when using older
11708 versions of M4 that did not warn.  See @code{m4_undefine}.
11709 Unfortunately, in order to support these older versions of M4, there are
11710 some situations involving unbalanced quotes where concatenating multiple
11711 macros together will work in newer M4 but not in m4sugar; use
11712 quadrigraphs to work around this.
11713 @end defmac
11715 @defmac m4_divert (@var{diversion})
11716 @msindex{divert}
11717 M4sugar relies heavily on diversions, so rather than behaving as a
11718 primitive, @code{m4_divert} behaves like:
11719 @example
11720 m4_divert_pop()m4_divert_push([@var{diversion}])
11721 @end example
11722 @noindent
11723 @xref{Diversion support}, for more details about the use of the
11724 diversion stack.  In particular, this implies that @var{diversion}
11725 should be a named diversion rather than a raw number.  But be aware that
11726 it is seldom necessary to explicitly change the diversion stack, and
11727 that when done incorrectly, it can lead to syntactically invalid
11728 scripts.
11729 @end defmac
11731 @defmac m4_dumpdef (@var{name}@dots{})
11732 @defmacx m4_dumpdefs (@var{name}@dots{})
11733 @msindex{dumpdef}
11734 @msindex{dumpdefs}
11735 @code{m4_dumpdef} is like the M4 builtin, except that this version
11736 requires at least one argument, output always goes to standard error
11737 rather than the current debug file, no sorting is done on multiple
11738 arguments, and an error is issued if any
11739 @var{name} is undefined.  @code{m4_dumpdefs} is a convenience macro that
11740 calls @code{m4_dumpdef} for all of the
11741 @code{m4_pushdef} stack of definitions, starting with the current, and
11742 silently does nothing if @var{name} is undefined.
11744 Unfortunately, due to a limitation in M4 1.4.x, any macro defined as a
11745 builtin is output as the empty string.  This behavior is rectified by
11746 using M4 1.6 or newer.  However, this behavior difference means that
11747 @code{m4_dumpdef} should only be used while developing m4sugar macros,
11748 and never in the final published form of a macro.
11749 @end defmac
11751 @defmac m4_esyscmd_s (@var{command})
11752 @msindex{esyscmd_s}
11753 Like @code{m4_esyscmd}, this macro expands to the result of running
11754 @var{command} in a shell.  The difference is that any trailing newlines
11755 are removed, so that the output behaves more like shell command
11756 substitution.
11757 @end defmac
11759 @defmac m4_exit (@var{exit-status})
11760 @msindex{exit}
11761 This macro corresponds to @code{m4exit}.
11762 @end defmac
11764 @defmac m4_if (@var{comment})
11765 @defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @ovar{not-equal})
11766 @defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal-1}, @
11767   @var{string-3}, @var{string-4}, @var{equal-2}, @dots{}, @ovar{not-equal})
11768 @msindex{if}
11769 This macro corresponds to @code{ifelse}.  @var{string-1} and
11770 @var{string-2} are compared literally, so usually one of the two
11771 arguments is passed unquoted.  @xref{Conditional constructs}, for more
11772 conditional idioms.
11773 @end defmac
11775 @defmac m4_include (@var{file})
11776 @defmacx m4_sinclude (@var{file})
11777 @msindex{include}
11778 @msindex{sinclude}
11779 Like the M4 builtins, but warn against multiple inclusions of @var{file}.
11780 @end defmac
11782 @defmac m4_mkstemp (@var{template})
11783 @defmacx m4_maketemp (@var{template})
11784 @msindex{maketemp}
11785 @msindex{mkstemp}
11786 Posix requires @code{maketemp} to replace the trailing @samp{X}
11787 characters in @var{template} with the process id, without regards to the
11788 existence of a file by that name, but this a security hole.  When this
11789 was pointed out to the Posix folks, they agreed to invent a new macro
11790 @code{mkstemp} that always creates a uniquely named file, but not all
11791 versions of GNU M4 support the new macro.  In M4sugar,
11792 @code{m4_maketemp} and @code{m4_mkstemp} are synonyms for each other,
11793 and both have the secure semantics regardless of which macro the
11794 underlying M4 provides.
11795 @end defmac
11797 @defmac m4_popdef (@var{macro}@dots{})
11798 @msindex{popdef}
11799 This macro fails if @var{macro} is not defined, even when using older
11800 versions of M4 that did not warn.  See @code{m4_undefine}.
11801 @end defmac
11803 @defmac m4_undefine (@var{macro}@dots{})
11804 @msindex{undefine}
11805 This macro fails if @var{macro} is not defined, even when using older
11806 versions of M4 that did not warn.  Use
11808 @example
11809 m4_ifdef([@var{macro}], [m4_undefine([@var{macro}])])
11810 @end example
11812 @noindent
11813 if you are not sure whether @var{macro} is defined.
11814 @end defmac
11816 @defmac m4_undivert (@var{diversion}@dots{})
11817 @msindex{undivert}
11818 Unlike the M4 builtin, at least one @var{diversion} must be specified.
11819 Also, since the M4sugar diversion stack prefers named
11820 diversions, the use of @code{m4_undivert} to include files is risky.
11821 @xref{Diversion support}, for more details about the use of the
11822 diversion stack.  But be aware that it is seldom necessary to explicitly
11823 change the diversion stack, and that when done incorrectly, it can lead
11824 to syntactically invalid scripts.
11825 @end defmac
11827 @defmac m4_wrap (@var{text})
11828 @defmacx m4_wrap_lifo (@var{text})
11829 @msindex{wrap}
11830 @msindex{wrap_lifo}
11831 These macros correspond to @code{m4wrap}.  Posix requires arguments of
11832 multiple wrap calls to be reprocessed at EOF in the same order
11833 as the original calls (first-in, first-out).  GNU M4 versions
11834 through 1.4.10, however, reprocess them in reverse order (last-in,
11835 first-out).  Both orders are useful, therefore, you can rely on
11836 @code{m4_wrap} to provide FIFO semantics and @code{m4_wrap_lifo} for
11837 LIFO semantics, regardless of the underlying GNU M4 version.
11839 Unlike the GNU M4 builtin, these macros only recognize one
11840 argument, and avoid token pasting between consecutive invocations.  On
11841 the other hand, nested calls to @code{m4_wrap} from within wrapped text
11842 work just as in the builtin.
11843 @end defmac
11846 @node Diagnostic Macros
11847 @subsection Diagnostic messages from M4sugar
11848 @cindex Messages, from @command{M4sugar}
11850 When macros statically diagnose abnormal situations, benign or fatal,
11851 they should report them using these macros.  For issuing dynamic issues,
11852 i.e., when @command{configure} is run, see @ref{Printing Messages}.
11854 @defmac m4_assert (@var{expression}, @dvar{exit-status, 1})
11855 @msindex{assert}
11856 Assert that the arithmetic @var{expression} evaluates to non-zero.
11857 Otherwise, issue a fatal error, and exit @command{autom4te} with
11858 @var{exit-status}.
11859 @end defmac
11861 @defmac m4_errprintn (@var{message})
11862 @msindex{errprintn}
11863 Similar to the builtin @code{m4_errprint}, except that a newline is
11864 guaranteed after @var{message}.
11865 @end defmac
11867 @anchor{m4_fatal}
11868 @defmac m4_fatal (@var{message})
11869 @msindex{fatal}
11870 Report a severe error @var{message} prefixed with the current location,
11871 and have @command{autom4te} die.
11872 @end defmac
11874 @defmac m4_location
11875 @msindex{location}
11876 Useful as a prefix in a message line.  Short for:
11877 @example
11878 __file__:__line__
11879 @end example
11880 @end defmac
11882 @anchor{m4_warn}
11883 @defmac m4_warn (@var{category}, @var{message})
11884 @msindex{warn}
11885 Report @var{message} as a warning (or as an error if requested by the
11886 user) if warnings of the @var{category} are turned on.  If the message
11887 is emitted, it is prefixed with the current location, and followed by a
11888 call trace of all macros defined via @code{AC_DEFUN} used to get to the
11889 current expansion.  You are encouraged to use standard categories, which
11890 currently include:
11892 @table @samp
11893 @item all
11894 messages that don't fall into one of the following categories.  Use of an
11895 empty @var{category} is equivalent.
11897 @item cross
11898 related to cross compilation issues.
11900 @item obsolete
11901 use of an obsolete construct.
11903 @item syntax
11904 dubious syntactic constructs, incorrectly ordered macro calls.
11905 @end table
11906 @end defmac
11909 @node Diversion support
11910 @subsection Diversion support
11912 M4sugar makes heavy use of diversions under the hood, because it is
11913 often the case that
11914 text that must appear early in the output is not discovered until late
11915 in the input.  Additionally, some of the topological sorting algorithms
11916 used in resolving macro dependencies use diversions.  However, most
11917 macros should not need to change diversions directly, but rather rely on
11918 higher-level M4sugar macros to manage diversions transparently.  If you
11919 change diversions improperly, you risk generating a syntactically
11920 invalid script, because an incorrect diversion will violate assumptions
11921 made by many macros about whether prerequisite text has been previously
11922 output.  In short, if you manually change the diversion, you should not
11923 expect any macros provided by the Autoconf package to work until you
11924 have restored the diversion stack back to its original state.
11926 In the rare case that it is necessary to write a macro that explicitly
11927 outputs text to a different diversion, it is important to be aware of an
11928 M4 limitation regarding diversions: text only goes to a diversion if it
11929 is not part of argument collection.  Therefore, any macro that changes
11930 the current diversion cannot be used as an unquoted argument to another
11931 macro, but must be expanded at the top level.  The macro
11932 @code{m4_expand} will diagnose any attempt to change diversions, since
11933 it is generally useful only as an argument to another macro.  The
11934 following example shows what happens when diversion manipulation is
11935 attempted within macro arguments:
11937 @example
11938 m4_do([normal text]
11939 m4_divert_push([KILL])unwanted[]m4_divert_pop([KILL])
11940 [m4_divert_push([KILL])discarded[]m4_divert_pop([KILL])])dnl
11941 @result{}normal text
11942 @result{}unwanted
11943 @end example
11945 @noindent
11946 Notice that the unquoted text @code{unwanted} is output, even though it
11947 was processed while the current diversion was @code{KILL}, because it
11948 was collected as part of the argument to @code{m4_do}.  However, the
11949 text @code{discarded} disappeared as desired, because the diversion
11950 changes were single-quoted, and were not expanded until the top-level
11951 rescan of the output of @code{m4_do}.
11953 To make diversion management easier, M4sugar uses the concept of named
11954 diversions.  Rather than using diversion numbers directly, it is nicer
11955 to associate a name with each diversion.  The diversion number associated
11956 with a particular diversion name is an implementation detail, and a
11957 syntax warning is issued if a diversion number is used instead of a
11958 name.  In general, you should not output text
11959 to a named diversion until after calling the appropriate initialization
11960 routine for your language (@code{m4_init}, @code{AS_INIT},
11961 @code{AT_INIT}, @dots{}), although there are some exceptions documented
11962 below.
11964 M4sugar defines two named diversions.
11965 @table @code
11966 @item KILL
11967 Text written to this diversion is discarded.  This is the default
11968 diversion once M4sugar is initialized.
11969 @item GROW
11970 This diversion is used behind the scenes by topological sorting macros,
11971 such as @code{AC_REQUIRE}.
11972 @end table
11974 M4sh adds several more named diversions.
11975 @table @code
11976 @item BINSH
11977 This diversion is reserved for the @samp{#!} interpreter line.
11978 @item HEADER-REVISION
11979 This diversion holds text from @code{AC_REVISION}.
11980 @item HEADER-COMMENT
11981 This diversion holds comments about the purpose of a file.
11982 @item HEADER-COPYRIGHT
11983 This diversion is managed by @code{AC_COPYRIGHT}.
11984 @item M4SH-SANITIZE
11985 This diversion contains M4sh sanitization code, used to ensure M4sh is
11986 executing in a reasonable shell environment.
11987 @item M4SH-INIT
11988 This diversion contains M4sh initialization code, initializing variables
11989 that are required by other M4sh macros.
11990 @item BODY
11991 This diversion contains the body of the shell code, and is the default
11992 diversion once M4sh is initialized.
11993 @end table
11995 Autotest inherits diversions from M4sh, and changes the default
11996 diversion from @code{BODY} back to @code{KILL}.  It also adds several
11997 more named diversions, with the following subset designed for developer
11998 use.
11999 @table @code
12000 @item PREPARE_TESTS
12001 This diversion contains initialization sequences which are executed
12002 after @file{atconfig} and @file{atlocal}, and after all command line
12003 arguments have been parsed, but prior to running any tests.  It can be
12004 used to set up state that is required across all tests.  This diversion
12005 will work even before @code{AT_INIT}.
12006 @end table
12008 Autoconf inherits diversions from M4sh, and adds the following named
12009 diversions which developers can utilize.
12010 @table @code
12011 @item DEFAULTS
12012 This diversion contains shell variable assignments to set defaults that
12013 must be in place before arguments are parsed.  This diversion is placed
12014 early enough in @file{configure} that it is unsafe to expand any
12015 autoconf macros into this diversion.
12016 @item HELP_ENABLE
12017 If @code{AC_PRESERVE_HELP_ORDER} was used, then text placed in this
12018 diversion will be included as part of a quoted here-doc providing all of
12019 the @option{--help} output of @file{configure} related to options
12020 created by @code{AC_ARG_WITH} and @code{AC_ARG_ENABLE}.
12021 @item INIT_PREPARE
12022 This diversion occurs after all command line options have been parsed,
12023 but prior to the main body of the @file{configure} script.  This
12024 diversion is the last chance to insert shell code such as variable
12025 assignments or shell function declarations that will used by the
12026 expansion of other macros.
12027 @end table
12029 For now, the remaining named diversions of Autoconf, Autoheader, and
12030 Autotest are not documented.  In other words,
12031 intentionally outputting text into an undocumented diversion is subject
12032 to breakage in a future release of Autoconf.
12034 @defmac m4_cleardivert (@var{diversion}@dots{})
12035 @msindex{cleardivert}
12036 Permanently discard any text that has been diverted into
12037 @var{diversion}.
12038 @end defmac
12040 @defmac m4_divert_once (@var{diversion}, @ovar{content})
12041 @msindex{divert_once}
12042 Similar to @code{m4_divert_text}, except that @var{content} is only
12043 output to @var{diversion} if this is the first time that
12044 @code{m4_divert_once} has been called with its particular arguments.
12045 @end defmac
12047 @defmac m4_divert_pop (@ovar{diversion})
12048 @msindex{divert_pop}
12049 If provided, check that the current diversion is indeed @var{diversion}.
12050 Then change to the diversion located earlier on the stack, giving an
12051 error if an attempt is made to pop beyond the initial m4sugar diversion
12052 of @code{KILL}.
12053 @end defmac
12055 @defmac m4_divert_push (@var{diversion})
12056 @msindex{divert_push}
12057 Remember the former diversion on the diversion stack, and output
12058 subsequent text into @var{diversion}.  M4sugar maintains a diversion
12059 stack, and issues an error if there is not a matching pop for every
12060 push.
12061 @end defmac
12063 @anchor{m4_divert_text}
12064 @defmac m4_divert_text (@var{diversion}, @ovar{content})
12065 @msindex{divert_text}
12066 Output @var{content} and a newline into @var{diversion}, without
12067 affecting the current diversion.  Shorthand for:
12068 @example
12069 m4_divert_push([@var{diversion}])@var{content}
12070 m4_divert_pop([@var{diversion}])dnl
12071 @end example
12073 One use of @code{m4_divert_text} is to develop two related macros, where
12074 macro @samp{MY_A} does the work, but adjusts what work is performed
12075 based on whether the optional macro @samp{MY_B} has also been expanded.
12076 Of course, it is possible to use @code{AC_BEFORE} within @code{MY_A} to
12077 require that @samp{MY_B} occurs first, if it occurs at all.  But this
12078 imposes an ordering restriction on the user; it would be nicer if macros
12079 @samp{MY_A} and @samp{MY_B} can be invoked in either order.  The trick
12080 is to let @samp{MY_B} leave a breadcrumb in an early diversion, which
12081 @samp{MY_A} can then use to determine whether @samp{MY_B} has been
12082 expanded.
12084 @example
12085 AC_DEFUN([MY_A],
12086 [# various actions
12087 if test -n "$b_was_used"; then
12088   # extra action
12089 fi])
12090 AC_DEFUN([MY_B],
12091 [AC_REQUIRE([MY_A])dnl
12092 m4_divert_text([INIT_PREPARE], [b_was_used=true])])
12093 @end example
12095 @end defmac
12097 @defmac m4_init
12098 @msindex{init}
12099 Initialize the M4sugar environment, setting up the default named
12100 diversion to be @code{KILL}.
12101 @end defmac
12103 @node Conditional constructs
12104 @subsection Conditional constructs
12106 The following macros provide additional conditional constructs as
12107 convenience wrappers around @code{m4_if}.
12109 @defmac m4_bmatch (@var{string}, @var{regex-1}, @var{value-1}, @
12110   @ovar{regex-2}, @ovar{value-2}, @dots{}, @ovar{default})
12111 @msindex{bmatch}
12112 The string @var{string} is repeatedly compared against a series of
12113 @var{regex} arguments; if a match is found, the expansion is the
12114 corresponding @var{value}, otherwise, the macro moves on to the next
12115 @var{regex}.  If no @var{regex} match, then the result is the optional
12116 @var{default}, or nothing.
12117 @end defmac
12119 @defmac m4_bpatsubsts (@var{string}, @var{regex-1}, @var{subst-1}, @
12120   @ovar{regex-2}, @ovar{subst-2}, @dots{})
12121 @msindex{bpatsubsts}
12122 The string @var{string} is altered by @var{regex-1} and @var{subst-1},
12123 as if by:
12124 @example
12125 m4_bpatsubst([[@var{string}]], [@var{regex}], [@var{subst}])
12126 @end example
12128 @noindent
12129 The result of the substitution is then passed through the next set of
12130 @var{regex} and @var{subst}, and so forth.  An empty @var{subst} implies
12131 deletion of any matched portions in the current string.  Note that this
12132 macro over-quotes @var{string}; this behavior is intentional, so that
12133 the result of each step of the recursion remains as a quoted string.
12134 However, it means that anchors (@samp{^} and @samp{$} in the @var{regex}
12135 will line up with the extra quotations, and not the characters of the
12136 original string.  The overquoting is removed after the final
12137 substitution.
12138 @end defmac
12140 @defmac m4_case (@var{string}, @var{value-1}, @var{if-value-1}, @
12141   @ovar{value-2}, @ovar{if-value-2}, @dots{}, @ovar{default})
12142 @msindex{case}
12143 Test @var{string} against multiple @var{value} possibilities, resulting
12144 in the first @var{if-value} for a match, or in the optional
12145 @var{default}.  This is shorthand for:
12146 @example
12147 m4_if([@var{string}], [@var{value-1}], [@var{if-value-1}],
12148       [@var{string}], [@var{value-2}], [@var{if-value-2}], @dots{},
12149       [@var{default}])
12150 @end example
12151 @end defmac
12153 @defmac m4_cond (@var{test-1}, @var{value-1}, @var{if-value-1}, @
12154   @ovar{test-2}, @ovar{value-2}, @ovar{if-value-2}, @dots{}, @ovar{default})
12155 @msindex{cond}
12156 This macro was introduced in Autoconf 2.62.  Similar to @code{m4_if},
12157 except that each @var{test} is expanded only when it is encountered.
12158 This is useful for short-circuiting expensive tests; while @code{m4_if}
12159 requires all its strings to be expanded up front before doing
12160 comparisons, @code{m4_cond} only expands a @var{test} when all earlier
12161 tests have failed.
12163 For an example, these two sequences give the same result, but in the
12164 case where @samp{$1} does not contain a backslash, the @code{m4_cond}
12165 version only expands @code{m4_index} once, instead of five times, for
12166 faster computation if this is a common case for @samp{$1}.  Notice that
12167 every third argument is unquoted for @code{m4_if}, and quoted for
12168 @code{m4_cond}:
12170 @example
12171 m4_if(m4_index([$1], [\]), [-1], [$2],
12172       m4_eval(m4_index([$1], [\\]) >= 0), [1], [$2],
12173       m4_eval(m4_index([$1], [\$]) >= 0), [1], [$2],
12174       m4_eval(m4_index([$1], [\`]) >= 0), [1], [$3],
12175       m4_eval(m4_index([$1], [\"]) >= 0), [1], [$3],
12176       [$2])
12177 m4_cond([m4_index([$1], [\])], [-1], [$2],
12178         [m4_eval(m4_index([$1], [\\]) >= 0)], [1], [$2],
12179         [m4_eval(m4_index([$1], [\$]) >= 0)], [1], [$2],
12180         [m4_eval(m4_index([$1], [\`]) >= 0)], [1], [$3],
12181         [m4_eval(m4_index([$1], [\"]) >= 0)], [1], [$3],
12182         [$2])
12183 @end example
12184 @end defmac
12186 @defmac m4_default (@var{expr-1}, @var{expr-2})
12187 @defmacx m4_default_quoted (@var{expr-1}, @var{expr-2})
12188 @defmacx m4_default_nblank (@var{expr-1}, @ovar{expr-2})
12189 @defmacx m4_default_nblank_quoted (@var{expr-1}, @ovar{expr-2})
12190 @msindex{default}
12191 @msindex{default_quoted}
12192 @msindex{default_nblank}
12193 @msindex{default_nblank_quoted}
12194 If @var{expr-1} contains text, use it.  Otherwise, select @var{expr-2}.
12195 @code{m4_default} expands the result, while @code{m4_default_quoted}
12196 does not.  Useful for providing a fixed default if the expression that
12197 results in @var{expr-1} would otherwise be empty.  The difference
12198 between @code{m4_default} and @code{m4_default_nblank} is whether an
12199 argument consisting of just blanks (space, tab, newline) is
12200 significant.  When using the expanding versions, note that an argument
12201 may contain text but still expand to an empty string.
12203 @example
12204 m4_define([active], [ACTIVE])dnl
12205 m4_define([empty], [])dnl
12206 m4_define([demo1], [m4_default([$1], [$2])])dnl
12207 m4_define([demo2], [m4_default_quoted([$1], [$2])])dnl
12208 m4_define([demo3], [m4_default_nblank([$1], [$2])])dnl
12209 m4_define([demo4], [m4_default_nblank_quoted([$1], [$2])])dnl
12210 demo1([active], [default])
12211 @result{}ACTIVE
12212 demo1([], [active])
12213 @result{}ACTIVE
12214 demo1([empty], [text])
12215 @result{}
12216 -demo1([ ], [active])-
12217 @result{}- -
12218 demo2([active], [default])
12219 @result{}active
12220 demo2([], [active])
12221 @result{}active
12222 demo2([empty], [text])
12223 @result{}empty
12224 -demo2([ ], [active])-
12225 @result{}- -
12226 demo3([active], [default])
12227 @result{}ACTIVE
12228 demo3([], [active])
12229 @result{}ACTIVE
12230 demo3([empty], [text])
12231 @result{}
12232 -demo3([ ], [active])-
12233 @result{}-ACTIVE-
12234 demo4([active], [default])
12235 @result{}active
12236 demo4([], [active])
12237 @result{}active
12238 demo4([empty], [text])
12239 @result{}empty
12240 -demo4([ ], [active])-
12241 @result{}-active-
12242 @end example
12243 @end defmac
12245 @defmac m4_define_default (@var{macro}, @ovar{default-definition})
12246 @msindex{define_default}
12247 If @var{macro} does not already have a definition, then define it to
12248 @var{default-definition}.
12249 @end defmac
12251 @defmac m4_ifblank (@var{cond}, @ovar{if-blank}, @ovar{if-text})
12252 @defmacx m4_ifnblank (@var{cond}, @ovar{if-text}, @ovar{if-blank})
12253 @msindex{ifblank}
12254 @msindex{ifnblank}
12255 If @var{cond} is empty or consists only of blanks (space, tab, newline),
12256 then expand @var{if-blank}; otherwise, expand @var{if-text}.  Two
12257 variants exist, in order to make it easier to select the correct logical
12258 sense when using only two parameters.  Note that this is more efficient
12259 than the equivalent behavior of:
12260 @example
12261 m4_ifval(m4_normalize([@var{cond}]), @var{if-text}, @var{if-blank})
12262 @end example
12263 @end defmac
12265 @defmac m4_ifndef (@var{macro}, @var{if-not-defined}, @ovar{if-defined})
12266 @msindex{ifndef}
12267 This is shorthand for:
12268 @example
12269 m4_ifdef([@var{macro}], [@var{if-defined}], [@var{if-not-defined}])
12270 @end example
12271 @end defmac
12273 @defmac m4_ifset (@var{macro}, @ovar{if-true}, @ovar{if-false})
12274 @msindex{ifset}
12275 If @var{macro} is undefined, or is defined as the empty string, expand
12276 to @var{if-false}.  Otherwise, expands to @var{if-true}.  Similar to:
12277 @example
12278 m4_ifval(m4_defn([@var{macro}]), [@var{if-true}], [@var{if-false}])
12279 @end example
12280 @noindent
12281 except that it is not an error if @var{macro} is undefined.
12282 @end defmac
12284 @defmac m4_ifval (@var{cond}, @ovar{if-true}, @ovar{if-false})
12285 @msindex{ifval}
12286 Expands to @var{if-true} if @var{cond} is not empty, otherwise to
12287 @var{if-false}.  This is shorthand for:
12288 @example
12289 m4_if([@var{cond}], [], [@var{if-false}], [@var{if-true}])
12290 @end example
12291 @end defmac
12293 @defmac m4_ifvaln (@var{cond}, @ovar{if-true}, @ovar{if-false})
12294 @msindex{ifvaln}
12295 Similar to @code{m4_ifval}, except guarantee that a newline is present
12296 after any non-empty expansion.  Often followed by @code{dnl}.
12297 @end defmac
12299 @defmac m4_n (@var{text})
12300 @msindex{n}
12301 Expand to @var{text}, and add a newline if @var{text} is not empty.
12302 Often followed by @code{dnl}.
12303 @end defmac
12306 @node Looping constructs
12307 @subsection Looping constructs
12309 The following macros are useful in implementing recursive algorithms in
12310 M4, including loop operations.  An M4 list is formed by quoting a list
12311 of quoted elements; generally the lists are comma-separated, although
12312 @code{m4_foreach_w} is whitespace-separated.  For example, the list
12313 @samp{[[a], [b,c]]} contains two elements: @samp{[a]} and @samp{[b,c]}.
12314 It is common to see lists with unquoted elements when those elements are
12315 not likely to be macro names, as in @samp{[fputc_unlocked,
12316 fgetc_unlocked]}.
12318 Although not generally recommended, it is possible for quoted lists to
12319 have side effects; all side effects are expanded only once, and prior to
12320 visiting any list element.  On the other hand, the fact that unquoted
12321 macros are expanded exactly once means that macros without side effects
12322 can be used to generate lists.  For example,
12324 @example
12325 m4_foreach([i], [[1], [2], [3]m4_errprintn([hi])], [i])
12326 @error{}hi
12327 @result{}123
12328 m4_define([list], [[1], [2], [3]])
12329 @result{}
12330 m4_foreach([i], [list], [i])
12331 @result{}123
12332 @end example
12334 @defmac m4_argn (@var{n}, @ovar{arg}@dots{})
12335 @msindex{argn}
12336 Extracts argument @var{n} (larger than 0) from the remaining arguments.
12337 If there are too few arguments, the empty string is used.  For any
12338 @var{n} besides 1, this is more efficient than the similar
12339 @samp{m4_car(m4_shiftn([@var{n}], [], [@var{arg}@dots{}]))}.
12340 @end defmac
12342 @defmac m4_car (@var{arg}@dots{})
12343 @msindex{car}
12344 Expands to the quoted first @var{arg}.  Can be used with @code{m4_cdr}
12345 to recursively iterate
12346 through a list.  Generally, when using quoted lists of quoted elements,
12347 @code{m4_car} should be called without any extra quotes.
12348 @end defmac
12350 @defmac m4_cdr (@var{arg}@dots{})
12351 @msindex{cdr}
12352 Expands to a quoted list of all but the first @var{arg}, or the empty
12353 string if there was only one argument.  Generally, when using quoted
12354 lists of quoted elements, @code{m4_cdr} should be called without any
12355 extra quotes.
12357 For example, this is a simple implementation of @code{m4_map}; note how
12358 each iteration checks for the end of recursion, then merely applies the
12359 first argument to the first element of the list, then repeats with the
12360 rest of the list.  (The actual implementation in M4sugar is a bit more
12361 involved, to gain some speed and share code with @code{m4_map_sep}, and
12362 also to avoid expanding side effects in @samp{$2} twice).
12363 @example
12364 m4_define([m4_map], [m4_ifval([$2],
12365   [m4_apply([$1], m4_car($2))[]$0([$1], m4_cdr($2))])])dnl
12366 m4_map([ m4_eval], [[[1]], [[1+1]], [[10],[16]]])
12367 @result{} 1 2 a
12368 @end example
12369 @end defmac
12371 @defmac m4_for (@var{var}, @var{first}, @var{last}, @ovar{step}, @
12372   @var{expression})
12373 @msindex{for}
12374 Loop over the numeric values between @var{first} and @var{last}
12375 including bounds by increments of @var{step}.  For each iteration,
12376 expand @var{expression} with the numeric value assigned to @var{var}.
12377 If @var{step} is omitted, it defaults to @samp{1} or @samp{-1} depending
12378 on the order of the limits.  If given, @var{step} has to match this
12379 order.  The number of iterations is determined independently from
12380 definition of @var{var}; iteration cannot be short-circuited or
12381 lengthened by modifying @var{var} from within @var{expression}.
12382 @end defmac
12384 @defmac m4_foreach (@var{var}, @var{list}, @var{expression})
12385 @msindex{foreach}
12386 Loop over the comma-separated M4 list @var{list}, assigning each value
12387 to @var{var}, and expand @var{expression}.  The following example
12388 outputs two lines:
12390 @example
12391 m4_foreach([myvar], [[foo], [bar, baz]],
12392            [echo myvar
12393 ])dnl
12394 @result{}echo foo
12395 @result{}echo bar, baz
12396 @end example
12398 Note that for some forms of @var{expression}, it may be faster to use
12399 @code{m4_map_args}.
12400 @end defmac
12402 @anchor{m4_foreach_w}
12403 @defmac m4_foreach_w (@var{var}, @var{list}, @var{expression})
12404 @msindex{foreach_w}
12405 Loop over the white-space-separated list @var{list}, assigning each value
12406 to @var{var}, and expand @var{expression}.  If @var{var} is only
12407 referenced once in @var{expression}, it is more efficient to use
12408 @code{m4_map_args_w}.
12410 The deprecated macro @code{AC_FOREACH} is an alias of
12411 @code{m4_foreach_w}.
12412 @end defmac
12414 @defmac m4_map (@var{macro}, @var{list})
12415 @defmacx m4_mapall (@var{macro}, @var{list})
12416 @defmacx m4_map_sep (@var{macro}, @var{separator}, @var{list})
12417 @defmacx m4_mapall_sep (@var{macro}, @var{separator}, @var{list})
12418 @msindex{map}
12419 @msindex{mapall}
12420 @msindex{map_sep}
12421 @msindex{mapall_sep}
12422 Loop over the comma separated quoted list of argument descriptions in
12423 @var{list}, and invoke @var{macro} with the arguments.  An argument
12424 description is in turn a comma-separated quoted list of quoted elements,
12425 suitable for @code{m4_apply}.  The macros @code{m4_map} and
12426 @code{m4_map_sep} ignore empty argument descriptions, while
12427 @code{m4_mapall} and @code{m4_mapall_sep} invoke @var{macro} with no
12428 arguments.  The macros @code{m4_map_sep} and @code{m4_mapall_sep}
12429 additionally expand @var{separator} between invocations of @var{macro}.
12431 Note that @var{separator} is expanded, unlike in @code{m4_join}.  When
12432 separating output with commas, this means that the map result can be
12433 used as a series of arguments, by using a single-quoted comma as
12434 @var{separator}, or as a single string, by using a double-quoted comma.
12436 @example
12437 m4_map([m4_count], [])
12438 @result{}
12439 m4_map([ m4_count], [[],
12440                      [[1]],
12441                      [[1], [2]]])
12442 @result{} 1 2
12443 m4_mapall([ m4_count], [[],
12444                         [[1]],
12445                         [[1], [2]]])
12446 @result{} 0 1 2
12447 m4_map_sep([m4_eval], [,], [[[1+2]],
12448                             [[10], [16]]])
12449 @result{}3,a
12450 m4_map_sep([m4_echo], [,], [[[a]], [[b]]])
12451 @result{}a,b
12452 m4_count(m4_map_sep([m4_echo], [,], [[[a]], [[b]]]))
12453 @result{}2
12454 m4_map_sep([m4_echo], [[,]], [[[a]], [[b]]])
12455 @result{}a,b
12456 m4_count(m4_map_sep([m4_echo], [[,]], [[[a]], [[b]]]))
12457 @result{}1
12458 @end example
12459 @end defmac
12461 @defmac m4_map_args (@var{macro}, @var{arg}@dots{})
12462 @msindex{map_args}
12463 Repeatedly invoke @var{macro} with each successive @var{arg} as its only
12464 argument.  In the following example, three solutions are presented with
12465 the same expansion; the solution using @code{m4_map_args} is the most
12466 efficient.
12467 @example
12468 m4_define([active], [ACTIVE])dnl
12469 m4_foreach([var], [[plain], [active]], [ m4_echo(m4_defn([var]))])
12470 @result{} plain active
12471 m4_map([ m4_echo], [[[plain]], [[active]]])
12472 @result{} plain active
12473 m4_map_args([ m4_echo], [plain], [active])
12474 @result{} plain active
12475 @end example
12477 In cases where it is useful to operate on additional parameters besides
12478 the list elements, the macro @code{m4_curry} can be used in @var{macro}
12479 to supply the argument currying necessary to generate the desired
12480 argument list.  In the following example, @code{list_add_n} is more
12481 efficient than @code{list_add_x}.  On the other hand, using
12482 @code{m4_map_args_sep} can be even more efficient.
12484 @example
12485 m4_define([list], [[1], [2], [3]])dnl
12486 m4_define([add], [m4_eval(([$1]) + ([$2]))])dnl
12487 dnl list_add_n(N, ARG...)
12488 dnl Output a list consisting of each ARG added to N
12489 m4_define([list_add_n],
12490 [m4_shift(m4_map_args([,m4_curry([add], [$1])], m4_shift($@@)))])dnl
12491 list_add_n([1], list)
12492 @result{}2,3,4
12493 list_add_n([2], list)
12494 @result{}3,4,5
12495 m4_define([list_add_x],
12496 [m4_shift(m4_foreach([var], m4_dquote(m4_shift($@@)),
12497   [,add([$1],m4_defn([var]))]))])dnl
12498 list_add_x([1], list)
12499 @result{}2,3,4
12500 @end example
12501 @end defmac
12503 @defmac m4_map_args_pair (@var{macro}, @dvarv{macro-end, macro}, @
12504   @var{arg}@dots{})
12505 @msindex{map_args_pair}
12506 For every pair of arguments @var{arg}, invoke @var{macro} with two
12507 arguments.  If there is an odd number of arguments, invoke
12508 @var{macro-end}, which defaults to @var{macro}, with the remaining
12509 argument.
12511 @example
12512 m4_map_args_pair([, m4_reverse], [], [1], [2], [3])
12513 @result{}, 2, 1, 3
12514 m4_map_args_pair([, m4_reverse], [, m4_dquote], [1], [2], [3])
12515 @result{}, 2, 1, [3]
12516 m4_map_args_pair([, m4_reverse], [, m4_dquote], [1], [2], [3], [4])
12517 @result{}, 2, 1, 4, 3
12518 @end example
12519 @end defmac
12521 @defmac m4_map_args_sep (@ovar{pre}, @ovar{post}, @ovar{sep}, @var{arg}@dots{})
12522 @msindex{map_args_sep}
12523 Expand the sequence @code{@var{pre}[@var{arg}]@var{post}} for each
12524 argument, additionally expanding @var{sep} between arguments.  One
12525 common use of this macro is constructing a macro call, where the opening
12526 and closing parentheses are split between @var{pre} and @var{post}; in
12527 particular, @code{m4_map_args([@var{macro}], [@var{arg}])} is equivalent
12528 to @code{m4_map_args_sep([@var{macro}(], [)], [], [@var{arg}])}.  This
12529 macro provides the most efficient means for iterating over an arbitrary
12530 list of arguments, particularly when repeatedly constructing a macro
12531 call with more arguments than @var{arg}.
12532 @end defmac
12534 @defmac m4_map_args_w (@var{string}, @ovar{pre}, @ovar{post}, @ovar{sep})
12535 @msindex{map_args_w}
12536 Expand the sequence @code{@var{pre}[word]@var{post}} for each word in
12537 the whitespace-separated @var{string}, additionally expanding @var{sep}
12538 between words.  This macro provides the most efficient means for
12539 iterating over a whitespace-separated string.  In particular,
12540 @code{m4_map_args_w([@var{string}], [@var{action}(], [)])} is more
12541 efficient than @code{m4_foreach_w([var], [@var{string}],
12542 [@var{action}(m4_defn([var]))])}.
12543 @end defmac
12545 @defmac m4_shiftn (@var{count}, @dots{})
12546 @defmacx m4_shift2 (@dots{})
12547 @defmacx m4_shift3 (@dots{})
12548 @msindex{shift2}
12549 @msindex{shift3}
12550 @msindex{shiftn}
12551 @code{m4_shiftn} performs @var{count} iterations of @code{m4_shift},
12552 along with validation that enough arguments were passed in to match the
12553 shift count, and that the count is positive.  @code{m4_shift2} and
12554 @code{m4_shift3} are specializations
12555 of @code{m4_shiftn}, introduced in Autoconf 2.62, and are more efficient
12556 for two and three shifts, respectively.
12557 @end defmac
12559 @defmac m4_stack_foreach (@var{macro}, @var{action})
12560 @defmacx m4_stack_foreach_lifo (@var{macro}, @var{action})
12561 @msindex{stack_foreach}
12562 @msindex{stack_foreach_lifo}
12563 For each of the @code{m4_pushdef} definitions of @var{macro}, expand
12564 @var{action} with the single argument of a definition of @var{macro}.
12565 @code{m4_stack_foreach} starts with the oldest definition, while
12566 @code{m4_stack_foreach_lifo} starts with the current definition.
12567 @var{action} should not push or pop definitions of @var{macro}, nor is
12568 there any guarantee that the current definition of @var{macro} matches
12569 the argument that was passed to @var{action}.  The macro @code{m4_curry}
12570 can be used if @var{action} needs more than one argument, although in
12571 that case it is more efficient to use @var{m4_stack_foreach_sep}.
12573 Due to technical limitations, there are a few low-level m4sugar
12574 functions, such as @code{m4_pushdef}, that cannot be used as the
12575 @var{macro} argument.
12577 @example
12578 m4_pushdef([a], [1])m4_pushdef([a], [2])dnl
12579 m4_stack_foreach([a], [ m4_incr])
12580 @result{} 2 3
12581 m4_stack_foreach_lifo([a], [ m4_curry([m4_substr], [abcd])])
12582 @result{} cd bcd
12583 @end example
12584 @end defmac
12586 @defmac m4_stack_foreach_sep (@var{macro}, @ovar{pre}, @ovar{post}, @ovar{sep})
12587 @defmacx m4_stack_foreach_sep_lifo (@var{macro}, @ovar{pre}, @ovar{post}, @
12588   @ovar{sep})
12589 @msindex{stack_foreach_sep}
12590 @msindex{stack_foreach_sep_lifo}
12591 Expand the sequence @code{@var{pre}[definition]@var{post}} for each
12592 @code{m4_pushdef} definition of @var{macro}, additionally expanding
12593 @var{sep} between definitions.  @code{m4_stack_foreach_sep} visits the
12594 oldest definition first, while @code{m4_stack_foreach_sep_lifo} visits
12595 the current definition first.  This macro provides the most efficient
12596 means for iterating over a pushdef stack.  In particular,
12597 @code{m4_stack_foreach([@var{macro}], [@var{action}])} is short for
12598 @code{m4_stack_foreach_sep([@var{macro}], [@var{action}(], [)])}.
12599 @end defmac
12601 @node Evaluation Macros
12602 @subsection Evaluation Macros
12604 The following macros give some control over the order of the evaluation
12605 by adding or removing levels of quotes.
12607 @defmac m4_apply (@var{macro}, @var{list})
12608 @msindex{apply}
12609 Apply the elements of the quoted, comma-separated @var{list} as the
12610 arguments to @var{macro}.  If @var{list} is empty, invoke @var{macro}
12611 without arguments.  Note the difference between @code{m4_indir}, which
12612 expects its first argument to be a macro name but can use names that are
12613 otherwise invalid, and @code{m4_apply}, where @var{macro} can contain
12614 other text, but must end in a valid macro name.
12615 @example
12616 m4_apply([m4_count], [])
12617 @result{}0
12618 m4_apply([m4_count], [[]])
12619 @result{}1
12620 m4_apply([m4_count], [[1], [2]])
12621 @result{}2
12622 m4_apply([m4_join], [[|], [1], [2]])
12623 @result{}1|2
12624 @end example
12625 @end defmac
12627 @defmac m4_count (@var{arg}, @dots{})
12628 @msindex{count}
12629 This macro returns the decimal count of the number of arguments it was
12630 passed.
12631 @end defmac
12633 @defmac m4_curry (@var{macro}, @var{arg}@dots{})
12634 @msindex{curry}
12635 This macro performs argument currying.  The expansion of this macro is
12636 another macro name that expects exactly one argument; that argument is
12637 then appended to the @var{arg} list, and then @var{macro} is expanded
12638 with the resulting argument list.
12640 @example
12641 m4_curry([m4_curry], [m4_reverse], [1])([2])([3])
12642 @result{}3, 2, 1
12643 @end example
12645 Unfortunately, due to a limitation in M4 1.4.x, it is not possible to
12646 pass the definition of a builtin macro as the argument to the output of
12647 @code{m4_curry}; the empty string is used instead of the builtin token.
12648 This behavior is rectified by using M4 1.6 or newer.
12649 @end defmac
12651 @defmac m4_do (@var{arg}, @dots{})
12652 @msindex{do}
12653 This macro loops over its arguments and expands each @var{arg} in
12654 sequence.  Its main use is for readability; it allows the use of
12655 indentation and fewer @code{dnl} to result in the same expansion.  This
12656 macro guarantees that no expansion will be concatenated with subsequent
12657 text; to achieve full concatenation, use @code{m4_unquote(m4_join([],
12658 @var{arg@dots{}}))}.
12660 @example
12661 m4_define([ab],[1])m4_define([bc],[2])m4_define([abc],[3])dnl
12662 m4_do([a],[b])c
12663 @result{}abc
12664 m4_unquote(m4_join([],[a],[b]))c
12665 @result{}3
12666 m4_define([a],[A])m4_define([b],[B])m4_define([c],[C])dnl
12667 m4_define([AB],[4])m4_define([BC],[5])m4_define([ABC],[6])dnl
12668 m4_do([a],[b])c
12669 @result{}ABC
12670 m4_unquote(m4_join([],[a],[b]))c
12671 @result{}3
12672 @end example
12673 @end defmac
12675 @defmac m4_dquote (@var{arg}, @dots{})
12676 @msindex{dquote}
12677 Return the arguments as a quoted list of quoted arguments.
12678 Conveniently, if there is just one @var{arg}, this effectively adds a
12679 level of quoting.
12680 @end defmac
12682 @defmac m4_dquote_elt (@var{arg}, @dots{})
12683 @msindex{dquote_elt}
12684 Return the arguments as a series of double-quoted arguments.  Whereas
12685 @code{m4_dquote} returns a single argument, @code{m4_dquote_elt} returns
12686 as many arguments as it was passed.
12687 @end defmac
12689 @defmac m4_echo (@var{arg}, @dots{})
12690 @msindex{echo}
12691 Return the arguments, with the same level of quoting.  Other than
12692 discarding whitespace after unquoted commas, this macro is a no-op.
12693 @end defmac
12695 @defmac m4_expand (@var{arg})
12696 @msindex{expand}
12697 Return the expansion of @var{arg} as a quoted string.  Whereas
12698 @code{m4_quote} is designed to collect expanded text into a single
12699 argument, @code{m4_expand} is designed to perform one level of expansion
12700 on quoted text.  One distinction is in the treatment of whitespace
12701 following a comma in the original @var{arg}.  Any time multiple
12702 arguments are collected into one with @code{m4_quote}, the M4 argument
12703 collection rules discard the whitespace.  However, with @code{m4_expand},
12704 whitespace is preserved, even after the expansion of macros contained in
12705 @var{arg}.  Additionally, @code{m4_expand} is able to expand text that
12706 would involve an unterminated comment, whereas expanding that same text
12707 as the argument to @code{m4_quote} runs into difficulty in finding the
12708 end of the argument.  Since manipulating diversions during argument
12709 collection is inherently unsafe, @code{m4_expand} issues an error if
12710 @var{arg} attempts to change the current diversion (@pxref{Diversion
12711 support}).
12713 @example
12714 m4_define([active], [ACT, IVE])dnl
12715 m4_define([active2], [[ACT, IVE]])dnl
12716 m4_quote(active, active)
12717 @result{}ACT,IVE,ACT,IVE
12718 m4_expand([active, active])
12719 @result{}ACT, IVE, ACT, IVE
12720 m4_quote(active2, active2)
12721 @result{}ACT, IVE,ACT, IVE
12722 m4_expand([active2, active2])
12723 @result{}ACT, IVE, ACT, IVE
12724 m4_expand([# m4_echo])
12725 @result{}# m4_echo
12726 m4_quote(# m4_echo)
12728 @result{}# m4_echo)
12729 @result{}
12730 @end example
12732 Note that @code{m4_expand} cannot handle an @var{arg} that expands to
12733 literal unbalanced quotes, but that quadrigraphs can be used when
12734 unbalanced output is necessary.  Likewise, unbalanced parentheses should
12735 be supplied with double quoting or a quadrigraph.
12737 @example
12738 m4_define([pattern], [[!@@<:@@]])dnl
12739 m4_define([bar], [BAR])dnl
12740 m4_expand([case $foo in
12741   m4_defn([pattern])@@:@}@@ bar ;;
12742   *[)] blah ;;
12743 esac])
12744 @result{}case $foo in
12745 @result{}  [![]) BAR ;;
12746 @result{}  *) blah ;;
12747 @result{}esac
12748 @end example
12749 @end defmac
12751 @defmac m4_ignore (@dots{})
12752 @msindex{ignore}
12753 This macro was introduced in Autoconf 2.62.  Expands to nothing,
12754 ignoring all of its arguments.  By itself, this isn't very useful.
12755 However, it can be used to conditionally ignore an arbitrary number of
12756 arguments, by deciding which macro name to apply to a list of arguments.
12757 @example
12758 dnl foo outputs a message only if [debug] is defined.
12759 m4_define([foo],
12760 [m4_ifdef([debug],[AC_MSG_NOTICE],[m4_ignore])([debug message])])
12761 @end example
12763 Note that for earlier versions of Autoconf, the macro @code{__gnu__} can
12764 serve the same purpose, although it is less readable.
12765 @end defmac
12767 @defmac m4_make_list (@var{arg}, @dots{})
12768 @msindex{make_list}
12769 This macro exists to aid debugging of M4sugar algorithms.  Its net
12770 effect is similar to @code{m4_dquote}---it produces a quoted list of
12771 quoted arguments, for each @var{arg}.  The difference is that this
12772 version uses a comma-newline separator instead of just comma, to improve
12773 readability of the list; with the result that it is less efficient than
12774 @code{m4_dquote}.
12775 @example
12776 m4_define([zero],[0])m4_define([one],[1])m4_define([two],[2])dnl
12777 m4_dquote(zero, [one], [[two]])
12778 @result{}[0],[one],[[two]]
12779 m4_make_list(zero, [one], [[two]])
12780 @result{}[0],
12781 @result{}[one],
12782 @result{}[[two]]
12783 m4_foreach([number], m4_dquote(zero, [one], [[two]]), [ number])
12784 @result{} 0 1 two
12785 m4_foreach([number], m4_make_list(zero, [one], [[two]]), [ number])
12786 @result{} 0 1 two
12787 @end example
12788 @end defmac
12790 @c m4_noquote is too dangerous to document - it invokes macros that
12791 @c probably rely on @samp{[]} nested quoting for proper operation.  The
12792 @c user should generally prefer m4_unquote instead.
12794 @defmac m4_quote (@var{arg}, @dots{})
12795 @msindex{quote}
12796 Return the arguments as a single entity, i.e., wrap them into a pair of
12797 quotes.  This effectively collapses multiple arguments into one,
12798 although it loses whitespace after unquoted commas in the process.
12799 @end defmac
12801 @defmac m4_reverse (@var{arg}, @dots{})
12802 @msindex{reverse}
12803 Outputs each argument with the same level of quoting, but in reverse
12804 order, and with space following each comma for readability.
12806 @example
12807 m4_define([active], [ACT,IVE])
12808 @result{}
12809 m4_reverse(active, [active])
12810 @result{}active, IVE, ACT
12811 @end example
12812 @end defmac
12814 @defmac m4_unquote (@var{arg}, @dots{})
12815 @msindex{unquote}
12816 This macro was introduced in Autoconf 2.62.  Expand each argument,
12817 separated by commas.  For a single @var{arg}, this effectively removes a
12818 layer of quoting, and @code{m4_unquote([@var{arg}])} is more efficient
12819 than the equivalent @code{m4_do([@var{arg}])}.  For multiple arguments,
12820 this results in an unquoted list of expansions.  This is commonly used
12821 with @code{m4_split}, in order to convert a single quoted list into a
12822 series of quoted elements.
12823 @end defmac
12825 The following example aims at emphasizing the difference between several
12826 scenarios: not using these macros, using @code{m4_defn}, using
12827 @code{m4_quote}, using @code{m4_dquote}, and using @code{m4_expand}.
12829 @example
12830 $ @kbd{cat example.m4}
12831 dnl Overquote, so that quotes are visible.
12832 m4_define([show], [$[]1 = [$1], $[]@@ = [$@@]])
12833 m4_define([a], [A])
12834 m4_define([mkargs], [1, 2[,] 3])
12835 m4_define([arg1], [[$1]])
12836 m4_divert([0])dnl
12837 show(a, b)
12838 show([a, b])
12839 show(m4_quote(a, b))
12840 show(m4_dquote(a, b))
12841 show(m4_expand([a, b]))
12843 arg1(mkargs)
12844 arg1([mkargs])
12845 arg1(m4_defn([mkargs]))
12846 arg1(m4_quote(mkargs))
12847 arg1(m4_dquote(mkargs))
12848 arg1(m4_expand([mkargs]))
12849 $ @kbd{autom4te -l m4sugar example.m4}
12850 $1 = A, $@@ = [A],[b]
12851 $1 = a, b, $@@ = [a, b]
12852 $1 = A,b, $@@ = [A,b]
12853 $1 = [A],[b], $@@ = [[A],[b]]
12854 $1 = A, b, $@@ = [A, b]
12857 mkargs
12858 1, 2[,] 3
12859 1,2, 3
12860 [1],[2, 3]
12861 1, 2, 3
12862 @end example
12865 @node Text processing Macros
12866 @subsection String manipulation in M4
12868 The following macros may be used to manipulate strings in M4.  Many of
12869 the macros in this section intentionally result in quoted strings as
12870 output, rather than subjecting the arguments to further expansions.  As
12871 a result, if you are manipulating text that contains active M4
12872 characters, the arguments are passed with single quoting rather than
12873 double.
12875 @defmac m4_append (@var{macro-name}, @var{string}, @ovar{separator})
12876 @defmacx m4_append_uniq (@var{macro-name}, @var{string}, @ovar{separator} @
12877   @ovar{if-uniq}, @ovar{if-duplicate})
12878 @msindex{append}
12879 @msindex{append_uniq}
12880 Redefine @var{macro-name} to its former contents with @var{separator}
12881 and @var{string} added at the end.  If @var{macro-name} was undefined
12882 before (but not if it was defined but empty), then no @var{separator} is
12883 added.  As of Autoconf 2.62, neither @var{string} nor @var{separator}
12884 are expanded during this macro; instead, they are expanded when
12885 @var{macro-name} is invoked.
12887 @code{m4_append} can be used to grow strings, and @code{m4_append_uniq}
12888 to grow strings without duplicating substrings.  Additionally,
12889 @code{m4_append_uniq} takes two optional parameters as of Autoconf 2.62;
12890 @var{if-uniq} is expanded if @var{string} was appended, and
12891 @var{if-duplicate} is expanded if @var{string} was already present.
12892 Also, @code{m4_append_uniq} warns if @var{separator} is not empty, but
12893 occurs within @var{string}, since that can lead to duplicates.
12895 Note that @code{m4_append} can scale linearly in the length of the final
12896 string, depending on the quality of the underlying M4 implementation,
12897 while @code{m4_append_uniq} has an inherent quadratic scaling factor.
12898 If an algorithm can tolerate duplicates in the final string, use the
12899 former for speed.  If duplicates must be avoided, consider using
12900 @code{m4_set_add} instead (@pxref{Set manipulation Macros}).
12902 @example
12903 m4_define([active], [ACTIVE])dnl
12904 m4_append([sentence], [This is an])dnl
12905 m4_append([sentence], [ active ])dnl
12906 m4_append([sentence], [symbol.])dnl
12907 sentence
12908 @result{}This is an ACTIVE symbol.
12909 m4_undefine([active])dnl
12910 @result{}This is an active symbol.
12911 m4_append_uniq([list], [one], [, ], [new], [existing])
12912 @result{}new
12913 m4_append_uniq([list], [one], [, ], [new], [existing])
12914 @result{}existing
12915 m4_append_uniq([list], [two], [, ], [new], [existing])
12916 @result{}new
12917 m4_append_uniq([list], [three], [, ], [new], [existing])
12918 @result{}new
12919 m4_append_uniq([list], [two], [, ], [new], [existing])
12920 @result{}existing
12921 list
12922 @result{}one, two, three
12923 m4_dquote(list)
12924 @result{}[one],[two],[three]
12925 m4_append([list2], [one], [[, ]])dnl
12926 m4_append_uniq([list2], [two], [[, ]])dnl
12927 m4_append([list2], [three], [[, ]])dnl
12928 list2
12929 @result{}one, two, three
12930 m4_dquote(list2)
12931 @result{}[one, two, three]
12932 @end example
12933 @end defmac
12935 @defmac m4_append_uniq_w (@var{macro-name}, @var{strings})
12936 @msindex{append_uniq_w}
12937 This macro was introduced in Autoconf 2.62.  It is similar to
12938 @code{m4_append_uniq}, but treats @var{strings} as a whitespace
12939 separated list of words to append, and only appends unique words.
12940 @var{macro-name} is updated with a single space between new words.
12941 @example
12942 m4_append_uniq_w([numbers], [1 1 2])dnl
12943 m4_append_uniq_w([numbers], [ 2 3 ])dnl
12944 numbers
12945 @result{}1 2 3
12946 @end example
12947 @end defmac
12949 @defmac m4_chomp (@var{string})
12950 @defmacx m4_chomp_all (@var{string})
12951 @msindex{chomp}
12952 @msindex{chomp_all}
12953 Output @var{string} in quotes, but without a trailing newline.  The
12954 macro @code{m4_chomp} is slightly faster, and removes at most one
12955 newline; the macro @code{m4_chomp_all} removes all consecutive trailing
12956 newlines.  Unlike @code{m4_flatten}, embedded newlines are left intact,
12957 and backslash does not influence the result.
12958 @end defmac
12960 @defmac m4_combine (@ovar{separator}, @var{prefix-list}, @ovar{infix}, @
12961   @var{suffix-1}, @ovar{suffix-2}, @dots{})
12962 @msindex{combine}
12963 This macro produces a quoted string containing the pairwise combination
12964 of every element of the quoted, comma-separated @var{prefix-list}, and
12965 every element from the @var{suffix} arguments.  Each pairwise
12966 combination is joined with @var{infix} in the middle, and successive
12967 pairs are joined by @var{separator}.  No expansion occurs on any of the
12968 arguments.  No output occurs if either the @var{prefix} or @var{suffix}
12969 list is empty, but the lists can contain empty elements.
12970 @example
12971 m4_define([a], [oops])dnl
12972 m4_combine([, ], [[a], [b], [c]], [-], [1], [2], [3])
12973 @result{}a-1, a-2, a-3, b-1, b-2, b-3, c-1, c-2, c-3
12974 m4_combine([, ], [[a], [b]], [-])
12975 @result{}
12976 m4_combine([, ], [[a], [b]], [-], [])
12977 @result{}a-, b-
12978 m4_combine([, ], [], [-], [1], [2])
12979 @result{}
12980 m4_combine([, ], [[]], [-], [1], [2])
12981 @result{}-1, -2
12982 @end example
12983 @end defmac
12985 @defmac m4_escape (@var{string})
12986 @msindex{escape}
12987 Convert all instances of @samp{[}, @samp{]}, @samp{#}, and @samp{$}
12988 within @var{string} into their respective quadrigraphs.  The result is
12989 still a quoted string.
12990 @end defmac
12992 @defmac m4_flatten (@var{string})
12993 @msindex{flatten}
12994 Flatten @var{string} into a single line.  Delete all backslash-newline
12995 pairs, and replace all remaining newlines with a space.  The result is
12996 still a quoted string.
12997 @end defmac
12999 @defmac m4_join (@ovar{separator}, @var{args}@dots{})
13000 @defmacx m4_joinall (@ovar{separator}, @var{args}@dots{})
13001 @msindex{join}
13002 @msindex{joinall}
13003 Concatenate each @var{arg}, separated by @var{separator}.
13004 @code{joinall} uses every argument, while @code{join} omits empty
13005 arguments so that there are no back-to-back separators in the output.
13006 The result is a quoted string.
13007 @example
13008 m4_define([active], [ACTIVE])dnl
13009 m4_join([|], [one], [], [active], [two])
13010 @result{}one|active|two
13011 m4_joinall([|], [one], [], [active], [two])
13012 @result{}one||active|two
13013 @end example
13015 Note that if all you intend to do is join @var{args} with commas between
13016 them, to form a quoted list suitable for @code{m4_foreach}, it is more
13017 efficient to use @code{m4_dquote}.
13018 @end defmac
13020 @defmac m4_newline (@ovar{text})
13021 @msindex{newline}
13022 This macro was introduced in Autoconf 2.62, and expands to a newline,
13023 followed by any @var{text}.
13024 It is primarily useful for maintaining macro formatting, and ensuring
13025 that M4 does not discard leading whitespace during argument collection.
13026 @end defmac
13028 @defmac m4_normalize (@var{string})
13029 @msindex{normalize}
13030 Remove leading and trailing spaces and tabs, sequences of
13031 backslash-then-newline, and replace multiple spaces, tabs, and newlines
13032 with a single space.  This is a combination of @code{m4_flatten} and
13033 @code{m4_strip}.  To determine if @var{string} consists only of bytes
13034 that would be removed by @code{m4_normalize}, you can use
13035 @code{m4_ifblank}.
13036 @end defmac
13038 @defmac m4_re_escape (@var{string})
13039 @msindex{re_escape}
13040 Backslash-escape all characters in @var{string} that are active in
13041 regexps.
13042 @end defmac
13044 @c We cannot use @dvar because the macro expansion mistreats backslashes.
13045 @defmac m4_split (@var{string}, @r{[}@var{regexp} = @samp{[\t ]+}@r{]})
13046 @msindex{split}
13047 Split @var{string} into an M4 list of elements quoted by @samp{[} and
13048 @samp{]}, while keeping white space at the beginning and at the end.
13049 If @var{regexp} is given, use it instead of @samp{[\t ]+} for splitting.
13050 If @var{string} is empty, the result is an empty list.
13051 @end defmac
13053 @defmac m4_strip (@var{string})
13054 @msindex{strip}
13055 Strip whitespace from @var{string}.  Sequences of spaces and tabs are
13056 reduced to a single space, then leading and trailing spaces are removed.
13057 The result is still a quoted string.  Note that this does not interfere
13058 with newlines; if you want newlines stripped as well, consider
13059 @code{m4_flatten}, or do it all at once with @code{m4_normalize}.  To
13060 quickly test if @var{string} has only whitespace, use @code{m4_ifblank}.
13061 @end defmac
13063 @defmac m4_text_box (@var{message}, @dvar{frame, -})
13064 @msindex{text_box}
13065 Add a text box around @var{message}, using @var{frame} as the border
13066 character above and below the message.  The @var{frame} argument must be
13067 a single byte, and does not support quadrigraphs.
13068 The frame correctly accounts for
13069 the subsequent expansion of @var{message}.  For example:
13070 @example
13071 m4_define([macro], [abc])dnl
13072 m4_text_box([macro])
13073 @result{}## --- ##
13074 @result{}## abc ##
13075 @result{}## --- ##
13076 @end example
13078 The @var{message} must contain balanced quotes and parentheses, although
13079 quadrigraphs can be used to work around this.
13080 @end defmac
13082 @defmac m4_text_wrap (@var{string}, @ovar{prefix}, @
13083   @dvarv{prefix1, prefix}, @dvar{width, 79})
13084 @msindex{text_wrap}
13085 Break @var{string} into a series of whitespace-separated words, then
13086 output those words separated by spaces, and wrapping lines any time the
13087 output would exceed @var{width} columns.  If given, @var{prefix1} begins
13088 the first line, and @var{prefix} begins all wrapped lines.  If
13089 @var{prefix1} is longer than @var{prefix}, then the first line consists
13090 of just @var{prefix1}.  If @var{prefix} is longer than @var{prefix1},
13091 padding is inserted so that the first word of @var{string} begins at the
13092 same indentation as all wrapped lines.  Note that using literal tab
13093 characters in any of the arguments will interfere with the calculation
13094 of width.  No expansions occur on @var{prefix}, @var{prefix1}, or the
13095 words of @var{string}, although quadrigraphs are recognized.
13097 For some examples:
13098 @example
13099 m4_text_wrap([Short string */], [   ], [/* ], [20])
13100 @result{}/* Short string */
13101 m4_text_wrap([Much longer string */], [   ], [/* ], [20])
13102 @result{}/* Much longer
13103 @result{}   string */
13104 m4_text_wrap([Short doc.], [          ], [  --short ], [30])
13105 @result{}  --short Short doc.
13106 m4_text_wrap([Short doc.], [          ], [  --too-wide ], [30])
13107 @result{}  --too-wide
13108 @result{}          Short doc.
13109 m4_text_wrap([Super long documentation.], [     ],
13110              [  --too-wide ], 30)
13111 @result{}  --too-wide
13112 @result{}     Super long
13113 @result{}     documentation.
13114 @end example
13115 @end defmac
13117 @defmac m4_tolower (@var{string})
13118 @defmacx m4_toupper (@var{string})
13119 @msindex{tolower}
13120 @msindex{toupper}
13121 Return @var{string} with letters converted to upper or lower case,
13122 respectively.
13123 @end defmac
13125 @node Number processing Macros
13126 @subsection Arithmetic computation in M4
13128 The following macros facilitate integer arithmetic operations.
13129 Where a parameter is documented as taking an arithmetic expression, you
13130 can use anything that can be parsed by @code{m4_eval}.
13132 @defmac m4_cmp (@var{expr-1}, @var{expr-2})
13133 @msindex{cmp}
13134 Compare the arithmetic expressions @var{expr-1} and @var{expr-2}, and
13135 expand to @samp{-1} if @var{expr-1} is smaller, @samp{0} if they are
13136 equal, and @samp{1} if @var{expr-1} is larger.
13137 @end defmac
13139 @defmac m4_list_cmp (@var{list-1}, @var{list-2})
13140 @msindex{list_cmp}
13141 Compare the two M4 lists consisting of comma-separated arithmetic
13142 expressions, left to right.  Expand to @samp{-1} for the first element
13143 pairing where the value from @var{list-1} is smaller, @samp{1} where the
13144 value from @var{list-2} is smaller, or @samp{0} if both lists have the
13145 same values.  If one list is shorter than the other, the remaining
13146 elements of the longer list are compared against zero.
13147 @example
13148 m4_list_cmp([1, 0],       [1])
13149 @result{}0
13150 m4_list_cmp([1, [1 * 0]], [1, 0])
13151 @result{}0
13152 m4_list_cmp([1, 2],       [1, 0])
13153 @result{}1
13154 m4_list_cmp([1, [1+1], 3],[1, 2])
13155 @result{}1
13156 m4_list_cmp([1, 2, -3],   [1, 2])
13157 @result{}-1
13158 m4_list_cmp([1, 0],       [1, 2])
13159 @result{}-1
13160 m4_list_cmp([1],          [1, 2])
13161 @result{}-1
13162 @end example
13163 @end defmac
13165 @defmac m4_max (@var{arg}, @dots{})
13166 @msindex{max}
13167 This macro was introduced in Autoconf 2.62.  Expand to the decimal value
13168 of the maximum arithmetic expression among all the arguments.
13169 @end defmac
13171 @defmac m4_min (@var{arg}, @dots{})
13172 @msindex{min}
13173 This macro was introduced in Autoconf 2.62.  Expand to the decimal value
13174 of the minimum arithmetic expression among all the arguments.
13175 @end defmac
13177 @defmac m4_sign (@var{expr})
13178 @msindex{sign}
13179 Expand to @samp{-1} if the arithmetic expression @var{expr} is negative,
13180 @samp{1} if it is positive, and @samp{0} if it is zero.
13181 @end defmac
13183 @anchor{m4_version_compare}
13184 @defmac m4_version_compare (@var{version-1}, @var{version-2})
13185 @msindex{version_compare}
13186 This macro was introduced in Autoconf 2.53, but had a number of
13187 usability limitations that were not lifted until Autoconf 2.62.  Compare
13188 the version strings @var{version-1} and @var{version-2}, and expand to
13189 @samp{-1} if @var{version-1} is smaller, @samp{0} if they are the same,
13190 or @samp{1} @var{version-2} is smaller.  Version strings must be a list
13191 of elements separated by @samp{.}, @samp{,} or @samp{-}, where each
13192 element is a number along with optional case-insensitive letters
13193 designating beta releases.  The comparison stops at the leftmost element
13194 that contains a difference, although a 0 element compares equal to a
13195 missing element.
13197 It is permissible to include commit identifiers in @var{version}, such
13198 as an abbreviated SHA1 of the commit, provided there is still a
13199 monotonically increasing prefix to allow for accurate version-based
13200 comparisons.  For example, this paragraph was written when the
13201 development snapshot of autoconf claimed to be at version
13202 @samp{2.61a-248-dc51}, or 248 commits after the 2.61a release, with an
13203 abbreviated commit identification of @samp{dc51}.
13205 @example
13206 m4_version_compare([1.1], [2.0])
13207 @result{}-1
13208 m4_version_compare([2.0b], [2.0a])
13209 @result{}1
13210 m4_version_compare([1.1.1], [1.1.1a])
13211 @result{}-1
13212 m4_version_compare([1.2], [1.1.1a])
13213 @result{}1
13214 m4_version_compare([1.0], [1])
13215 @result{}0
13216 m4_version_compare([1.1pre], [1.1PRE])
13217 @result{}0
13218 m4_version_compare([1.1a], [1,10])
13219 @result{}-1
13220 m4_version_compare([2.61a], [2.61a-248-dc51])
13221 @result{}-1
13222 m4_version_compare([2.61b], [2.61a-248-dc51])
13223 @result{}1
13224 @end example
13225 @end defmac
13227 @defmac m4_version_prereq (@var{version}, @ovar{if-new-enough}, @
13228   @dvar{if-old, m4_fatal})
13229 @msindex{version_prereq}
13230 Compares @var{version} against the version of Autoconf currently
13231 running.  If the running version is at @var{version} or newer, expand
13232 @var{if-new-enough}, but if @var{version} is larger than the version
13233 currently executing, expand @var{if-old}, which defaults to printing an
13234 error message and exiting m4sugar with status 63.  When given only one
13235 argument, this behaves like @code{AC_PREREQ} (@pxref{Versioning}).
13236 Remember that the autoconf philosophy favors feature checks over version
13237 checks.
13238 @end defmac
13240 @node Set manipulation Macros
13241 @subsection Set manipulation in M4
13242 @cindex Set manipulation
13243 @cindex Data structure, set
13244 @cindex Unordered set manipulation
13246 Sometimes, it is necessary to track a set of data, where the order does
13247 not matter and where there are no duplicates in the set.  The following
13248 macros facilitate set manipulations.  Each set is an opaque object,
13249 which can only be accessed via these basic operations.  The underlying
13250 implementation guarantees linear scaling for set creation, which is more
13251 efficient than using the quadratic @code{m4_append_uniq}.  Both set
13252 names and values can be arbitrary strings, except for unbalanced quotes.
13253 This implementation ties up memory for removed elements until the next
13254 operation that must traverse all the elements of a set; and although
13255 that may slow down some operations until the memory for removed elements
13256 is pruned, it still guarantees linear performance.
13258 @defmac m4_set_add (@var{set}, @var{value}, @ovar{if-uniq}, @ovar{if-dup})
13259 @msindex{set_add}
13260 Adds the string @var{value} as a member of set @var{set}.  Expand
13261 @var{if-uniq} if the element was added, or @var{if-dup} if it was
13262 previously in the set.  Operates in amortized constant time, so that set
13263 creation scales linearly.
13264 @end defmac
13266 @defmac m4_set_add_all (@var{set}, @var{value}@dots{})
13267 @msindex{set_add_all}
13268 Adds each @var{value} to the set @var{set}.  This is slightly more
13269 efficient than repeatedly invoking @code{m4_set_add}.
13270 @end defmac
13272 @defmac m4_set_contains (@var{set}, @var{value}, @ovar{if-present}, @
13273  @ovar{if-absent})
13274 @msindex{set_contains}
13275 Expands @var{if-present} if the string @var{value} is a member of
13276 @var{set}, otherwise @var{if-absent}.
13278 @example
13279 m4_set_contains([a], [1], [yes], [no])
13280 @result{}no
13281 m4_set_add([a], [1], [added], [dup])
13282 @result{}added
13283 m4_set_add([a], [1], [added], [dup])
13284 @result{}dup
13285 m4_set_contains([a], [1], [yes], [no])
13286 @result{}yes
13287 m4_set_remove([a], [1], [removed], [missing])
13288 @result{}removed
13289 m4_set_contains([a], [1], [yes], [no])
13290 @result{}no
13291 m4_set_remove([a], [1], [removed], [missing])
13292 @result{}missing
13293 @end example
13294 @end defmac
13296 @defmac m4_set_contents (@var{set}, @ovar{sep})
13297 @defmacx m4_set_dump (@var{set}, @ovar{sep})
13298 @msindex{set_contents}
13299 @msindex{set_dump}
13300 Expands to a single string consisting of all the members of the set
13301 @var{set}, each separated by @var{sep}, which is not expanded.
13302 @code{m4_set_contents} leaves the elements in @var{set} but reclaims any
13303 memory occupied by removed elements, while @code{m4_set_dump} is a
13304 faster one-shot action that also deletes the set.  No provision is made
13305 for disambiguating members that contain a non-empty @var{sep} as a
13306 substring; use @code{m4_set_empty} to distinguish between an empty set
13307 and the set containing only the empty string.  The order of the output
13308 is unspecified; in the current implementation, part of the speed of
13309 @code{m4_set_dump} results from using a different output order than
13310 @code{m4_set_contents}.  These macros scale linearly in the size of the
13311 set before memory pruning, and @code{m4_set_contents([@var{set}],
13312 [@var{sep}])} is faster than
13313 @code{m4_joinall([@var{sep}]m4_set_listc([@var{set}]))}.
13315 @example
13316 m4_set_add_all([a], [1], [2], [3])
13317 @result{}
13318 m4_set_contents([a], [-])
13319 @result{}1-2-3
13320 m4_joinall([-]m4_set_listc([a]))
13321 @result{}1-2-3
13322 m4_set_dump([a], [-])
13323 @result{}3-2-1
13324 m4_set_contents([a])
13325 @result{}
13326 m4_set_add([a], [])
13327 @result{}
13328 m4_set_contents([a], [-])
13329 @result{}
13330 @end example
13331 @end defmac
13333 @defmac m4_set_delete (@var{set})
13334 @msindex{set_delete}
13335 Delete all elements and memory associated with @var{set}.  This is
13336 linear in the set size, and faster than removing one element at a time.
13337 @end defmac
13339 @defmac m4_set_difference (@var{seta}, @var{setb})
13340 @defmacx m4_set_intersection (@var{seta}, @var{setb})
13341 @defmacx m4_set_union (@var{seta}, @var{setb})
13342 @msindex{set_difference}
13343 @msindex{set_intersection}
13344 @msindex{set_union}
13345 Compute the relation between @var{seta} and @var{setb}, and output the
13346 result as a list of quoted arguments without duplicates and with a
13347 leading comma.  Set difference selects the elements in @var{seta} but
13348 not @var{setb}, intersection selects only elements in both sets, and
13349 union selects elements in either set.  These actions are linear in the
13350 sum of the set sizes.  The leading comma is necessary to distinguish
13351 between no elements and the empty string as the only element.
13353 @example
13354 m4_set_add_all([a], [1], [2], [3])
13355 @result{}
13356 m4_set_add_all([b], [3], [], [4])
13357 @result{}
13358 m4_set_difference([a], [b])
13359 @result{},1,2
13360 m4_set_difference([b], [a])
13361 @result{},,4
13362 m4_set_intersection([a], [b])
13363 @result{},3
13364 m4_set_union([a], [b])
13365 @result{},1,2,3,,4
13366 @end example
13367 @end defmac
13369 @defmac m4_set_empty (@var{set}, @ovar{if-empty}, @ovar{if-elements})
13370 @msindex{set_empty}
13371 Expand @var{if-empty} if the set @var{set} has no elements, otherwise
13372 expand @var{if-elements}.  This macro operates in constant time.  Using
13373 this macro can help disambiguate output from @code{m4_set_contents} or
13374 @code{m4_set_list}.
13375 @end defmac
13377 @defmac m4_set_foreach (@var{set}, @var{variable}, @var{action})
13378 @msindex{set_foreach}
13379 For each element in the set @var{set}, expand @var{action} with the
13380 macro @var{variable} defined as the set element.  Behavior is
13381 unspecified if @var{action} recursively lists the contents of @var{set}
13382 (although listing other sets is acceptable), or if it modifies the set
13383 in any way other than removing the element currently contained in
13384 @var{variable}.  This macro is faster than the corresponding
13385 @code{m4_foreach([@var{variable}],
13386 m4_indir([m4_dquote]m4_set_listc([@var{set}])), [@var{action}])},
13387 although @code{m4_set_map} might be faster still.
13389 @example
13390 m4_set_add_all([a]m4_for([i], [1], [5], [], [,i]))
13391 @result{}
13392 m4_set_contents([a])
13393 @result{}12345
13394 m4_set_foreach([a], [i],
13395   [m4_if(m4_eval(i&1), [0], [m4_set_remove([a], i, [i])])])
13396 @result{}24
13397 m4_set_contents([a])
13398 @result{}135
13399 @end example
13400 @end defmac
13402 @defmac m4_set_list (@var{set})
13403 @defmacx m4_set_listc (@var{set})
13404 @msindex{set_list}
13405 @msindex{set_listc}
13406 Produce a list of arguments, where each argument is a quoted element
13407 from the set @var{set}.  The variant @code{m4_set_listc} is unambiguous,
13408 by adding a leading comma if there are any set elements, whereas the
13409 variant @code{m4_set_list} cannot distinguish between an empty set and a
13410 set containing only the empty string.  These can be directly used in
13411 macros that take multiple arguments, such as @code{m4_join} or
13412 @code{m4_set_add_all}, or wrapped by @code{m4_dquote} for macros that
13413 take a quoted list, such as @code{m4_map} or @code{m4_foreach}.  Any
13414 memory occupied by removed elements is reclaimed during these macros.
13416 @example
13417 m4_set_add_all([a], [1], [2], [3])
13418 @result{}
13419 m4_set_list([a])
13420 @result{}1,2,3
13421 m4_set_list([b])
13422 @result{}
13423 m4_set_listc([b])
13424 @result{}
13425 m4_count(m4_set_list([b]))
13426 @result{}1
13427 m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
13428 @result{}0
13429 m4_set_add([b], [])
13430 @result{}
13431 m4_set_list([b])
13432 @result{}
13433 m4_set_listc([b])
13434 @result{},
13435 m4_count(m4_set_list([b]))
13436 @result{}1
13437 m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
13438 @result{}1
13439 @end example
13440 @end defmac
13442 @defmac m4_set_map (@var{set}, @var{action})
13443 @msindex{set_map}
13444 For each element in the set @var{set}, expand @var{action} with a single
13445 argument of the set element.  Behavior is unspecified if @var{action}
13446 recursively lists the contents of @var{set} (although listing other sets
13447 is acceptable), or if it modifies the set in any way other than removing
13448 the element passed as an argument.  This macro is faster than either
13449 corresponding counterpart of
13450 @code{m4_map_args([@var{action}]m4_set_listc([@var{set}]))} or
13451 @code{m4_set_foreach([@var{set}], [var],
13452 [@var{action}(m4_defn([var]))])}.  It is possible to use @code{m4_curry}
13453 if more than one argument is needed for @var{action}, although it is
13454 more efficient to use @code{m4_set_map_sep} in that case.
13455 @end defmac
13457 @defmac m4_set_map_sep (@var{set}, @ovar{pre}, @ovar{post}, @ovar{sep})
13458 @msindex{set_map_sep}
13459 For each element in the set @var{set}, expand
13460 @code{@var{pre}[element]@var{post}}, additionally expanding @var{sep}
13461 between elements.  Behavior is unspecified if the expansion recursively
13462 lists the contents of @var{set} (although listing other sets
13463 is acceptable), or if it modifies the set in any way other than removing
13464 the element visited by the expansion.  This macro provides the most
13465 efficient means for non-destructively visiting the elements of a set; in
13466 particular, @code{m4_set_map([@var{set}], [@var{action}])} is equivalent
13467 to @code{m4_set_map_sep([@var{set}], [@var{action}(], [)])}.
13468 @end defmac
13470 @defmac m4_set_remove (@var{set}, @var{value}, @ovar{if-present}, @
13471  @ovar{if-absent})
13472 @msindex{set_remove}
13473 If @var{value} is an element in the set @var{set}, then remove it and
13474 expand @var{if-present}.  Otherwise expand @var{if-absent}.  This macro
13475 operates in constant time so that multiple removals will scale linearly
13476 rather than quadratically; but when used outside of
13477 @code{m4_set_foreach} or @code{m4_set_map}, it leaves memory occupied
13478 until the set is later
13479 compacted by @code{m4_set_contents} or @code{m4_set_list}.  Several
13480 other set operations are then less efficient between the time of element
13481 removal and subsequent memory compaction, but still maintain their
13482 guaranteed scaling performance.
13483 @end defmac
13485 @defmac m4_set_size (@var{set})
13486 @msindex{set_size}
13487 Expand to the size of the set @var{set}.  This implementation operates
13488 in constant time, and is thus more efficient than
13489 @code{m4_eval(m4_count(m4_set_listc([set])) - 1)}.
13490 @end defmac
13493 @node Forbidden Patterns
13494 @subsection Forbidden Patterns
13495 @cindex Forbidden patterns
13496 @cindex Patterns, forbidden
13498 M4sugar provides a means to define suspicious patterns, patterns
13499 describing tokens which should not be found in the output.  For
13500 instance, if an Autoconf @file{configure} script includes tokens such as
13501 @samp{AC_DEFINE}, or @samp{dnl}, then most probably something went
13502 wrong (typically a macro was not evaluated because of overquotation).
13504 M4sugar forbids all the tokens matching @samp{^_?m4_} and @samp{^dnl$}.
13505 Additional layers, such as M4sh and Autoconf, add additional forbidden
13506 patterns to the list.
13508 @defmac m4_pattern_forbid (@var{pattern})
13509 @msindex{pattern_forbid}
13510 Declare that no token matching @var{pattern} must be found in the
13511 output.  The output file is (temporarily) split into one word per line
13512 as part of the @command{autom4te} post-processing, with each line (and
13513 therefore word) then being checked against the Perl regular expression
13514 @var{pattern}.  If the regular expression matches, and
13515 @code{m4_pattern_allow} does not also match, then an error is raised.
13517 Comments are not checked; this can be a problem if, for instance, you
13518 have some macro left unexpanded after an @samp{#include}.  No consensus
13519 is currently found in the Autoconf community, as some people consider it
13520 should be valid to name macros in comments (which doesn't make sense to
13521 the authors of this documentation: input, such as macros, should be
13522 documented by @samp{dnl} comments; reserving @samp{#}-comments to
13523 document the output).
13525 As an example, if you define your own macros that begin with @samp{M_}
13526 and are composed from capital letters and underscores, the specification
13527 of @code{m4_pattern_forbid([^M_[A-Z_]+])} will ensure all your macros
13528 are expanded when not used in comments.
13530 As an example of a common use of this macro, consider what happens in
13531 packages that want to use the @command{pkg-config} script via the
13532 third-party @code{PKG_CHECK_MODULES} macro.  By default, if a developer
13533 checks out the development tree but has not yet installed the pkg-config
13534 macros locally, they can manage to successfully run @command{autoconf}
13535 on the package, but the resulting @file{configure} file will likely
13536 result in a confusing shell message about a syntax error on the line
13537 mentioning the unexpanded @code{PKG_CHECK_MODULES} macro.  On the other hand,
13538 if @file{configure.ac} includes @code{m4_pattern_forbid([^PKG_])}, the
13539 missing pkg-config macros will be detected immediately without allowing
13540 @command{autoconf} to succeed.
13541 @end defmac
13543 Of course, you might encounter exceptions to these generic rules, for
13544 instance you might have to refer to @samp{$m4_flags}.
13546 @defmac m4_pattern_allow (@var{pattern})
13547 @msindex{pattern_allow}
13548 Any token matching @var{pattern} is allowed, including if it matches an
13549 @code{m4_pattern_forbid} pattern.
13551 For example, gnulib uses @code{m4_pattern_forbid([^gl_])} to reserve the
13552 @code{gl_} namespace for itself, but also uses
13553 @code{m4_pattern_allow([^gl_ES$])} to avoid a false negative on the
13554 valid locale name.
13555 @end defmac
13557 @node Debugging via autom4te
13558 @section Debugging via autom4te
13559 @cindex debugging tips
13560 @cindex autom4te debugging tips
13561 @cindex m4sugar debugging tips
13562 At times, it is desirable to see what was happening inside m4, to see
13563 why output was not matching expectations.  However, post-processing done
13564 by @command{autom4te} means that directly using the m4 builtin
13565 @code{m4_traceon} is likely to interfere with operation.  Also, frequent
13566 diversion changes and the concept of forbidden tokens make it difficult
13567 to use @code{m4_defn} to generate inline comments in the final output.
13569 There are a couple of tools to help with this.  One is the use of the
13570 @option{--trace} option provided by @command{autom4te} (as well as each
13571 of the programs that wrap @command{autom4te}, such as
13572 @command{autoconf}), in order to inspect when a macro is called and with
13573 which arguments.  For example, when this paragraph was written, the
13574 autoconf version could be found by:
13576 @example
13577 $ @kbd{autoconf --trace=AC_INIT}
13578 configure.ac:23:AC_INIT:GNU Autoconf:2.63b.95-3963:bug-autoconf@@gnu.org
13579 $ @kbd{autoconf --trace='AC_INIT:version is $2'}
13580 version is 2.63b.95-3963
13581 @end example
13583 Another trick is to print out the expansion of various m4 expressions to
13584 standard error or to an independent file, with no further m4 expansion,
13585 and without interfering with diversion changes or the post-processing
13586 done to standard output.  @code{m4_errprintn} shows a given expression
13587 on standard error.  For example, if you want to see the expansion of an
13588 autoconf primitive or of one of your autoconf macros, you can do it like
13589 this:
13591 @example
13592 $ @kbd{cat <<\EOF > configure.ac}
13593 AC_INIT
13594 m4_errprintn([The definition of AC_DEFINE_UNQUOTED:])
13595 m4_errprintn(m4_defn([AC_DEFINE_UNQUOTED]))
13596 AC_OUTPUT
13598 $ @kbd{autoconf}
13599 @error{}The definition of AC_DEFINE_UNQUOTED:
13600 @error{}_AC_DEFINE_Q([], $@@)
13601 @end example
13603 @node Programming in M4sh
13604 @chapter Programming in M4sh
13606 M4sh, pronounced ``mash'', is aiming at producing portable Bourne shell
13607 scripts.  This name was coined by Lars J. Aas, who notes that,
13608 according to the Webster's Revised Unabridged Dictionary (1913):
13610 @quotation
13611 Mash \Mash\, n.  [Akin to G. meisch, maisch, meische, maische, mash,
13612 wash, and prob.@: to AS. miscian to mix.  See ``Mix''.]
13614 @enumerate 1
13615 @item
13616 A mass of mixed ingredients reduced to a soft pulpy state by beating or
13617 pressure@enddots{}
13619 @item
13620 A mixture of meal or bran and water fed to animals.
13622 @item
13623 A mess; trouble.  [Obs.] --Beau.@: & Fl.
13624 @end enumerate
13625 @end quotation
13627 M4sh reserves the M4 macro namespace @samp{^_AS_} for internal use, and
13628 the namespace @samp{^AS_} for M4sh macros.  It also reserves the shell
13629 and environment variable namespace @samp{^as_}, and the here-document
13630 delimiter namespace @samp{^_AS[A-Z]} in the output file.  You should not
13631 define your own macros or output shell code that conflicts with these
13632 namespaces.
13634 @menu
13635 * Common Shell Constructs::     Portability layer for common shell constructs
13636 * Polymorphic Variables::       Support for indirect variable names
13637 * Initialization Macros::       Macros to establish a sane shell environment
13638 * File Descriptor Macros::      File descriptor macros for input and output
13639 @end menu
13641 @node Common Shell Constructs
13642 @section Common Shell Constructs
13644 M4sh provides portable alternatives for some common shell constructs
13645 that unfortunately are not portable in practice.
13647 @c Deprecated, to be replaced by a better API
13648 @ignore
13649 @defmac AS_BASENAME (@var{file-name})
13650 @asindex{BASENAME}
13651 Output the non-directory portion of @var{file-name}.  For example,
13652 if @code{$file} is @samp{/one/two/three}, the command
13653 @code{base=`AS_BASENAME(["$file"])`} sets @code{base} to @samp{three}.
13654 @end defmac
13655 @end ignore
13657 @defmac AS_BOX (@var{text}, @dvar{char, -})
13658 @asindex{BOX}
13659 Expand into shell code that will output @var{text} surrounded by a box
13660 with @var{char} in the top and bottom border.  @var{text} should not
13661 contain a newline, but may contain shell expansions valid for unquoted
13662 here-documents.  @var{char} defaults to @samp{-}, but can be any
13663 character except @samp{/}, @samp{'}, @samp{"}, @samp{\},
13664 @samp{&}, or @samp{`}.  This is useful for outputting a comment box into
13665 log files to separate distinct phases of script operation.
13666 @end defmac
13668 @defmac AS_CASE (@var{word}, @ovar{pattern1}, @ovar{if-matched1}, @
13669   @dots{}, @ovar{default})
13670 @asindex{CASE}
13671 Expand into a shell @samp{case} statement, where @var{word} is matched
13672 against one or more patterns.  @var{if-matched} is run if the
13673 corresponding pattern matched @var{word}, else @var{default} is run.
13674 Avoids several portability issues (@pxref{case, , Limitations of Shell
13675 Builtins}).
13676 @end defmac
13678 @c Deprecated, to be replaced by a better API
13679 @defmac AS_DIRNAME (@var{file-name})
13680 @asindex{DIRNAME}
13681 Output the directory portion of @var{file-name}.  For example,
13682 if @code{$file} is @samp{/one/two/three}, the command
13683 @code{dir=`AS_DIRNAME(["$file"])`} sets @code{dir} to @samp{/one/two}.
13685 This interface may be improved in the future to avoid forks and losing
13686 trailing newlines.
13687 @end defmac
13689 @defmac AS_ECHO (@var{word})
13690 @asindex{ECHO}
13691 Emits @var{word} to the standard output, followed by a newline.  @var{word}
13692 must be a single shell word (typically a quoted string).  The bytes of
13693 @var{word} are output as-is, even if it starts with "-" or contains "\".
13694 Redirections can be placed outside the macro invocation.  This is much
13695 more portable than using @command{echo} (@pxref{echo, , Limitations of
13696 Shell Builtins}).
13697 @end defmac
13699 @defmac AS_ECHO_N (@var{word})
13700 @asindex{ECHO_N}
13701 Emits @var{word} to the standard output, without a following newline.
13702 @var{word} must be a single shell word (typically a quoted string) and,
13703 for portability, should not include more than one newline.  The bytes of
13704 @var{word} are output as-is, even if it starts with "-" or contains "\".
13705 Redirections can be placed outside the macro invocation.
13706 @end defmac
13708 @c We cannot use @dvar because the macro expansion mistreats backslashes.
13709 @defmac AS_ESCAPE (@var{string}, @r{[}@var{chars} = @samp{`\"$}@r{]})
13710 @asindex{ESCAPE}
13711 Expands to @var{string}, with any characters in @var{chars} escaped with
13712 a backslash (@samp{\}).  @var{chars} should be at most four bytes long,
13713 and only contain characters from the set @samp{`\"$}; however,
13714 characters may be safely listed more than once in @var{chars} for the
13715 sake of syntax highlighting editors.  The current implementation expands
13716 @var{string} after adding escapes; if @var{string} contains macro calls
13717 that in turn expand to text needing shell quoting, you can use
13718 @code{AS_ESCAPE(m4_dquote(m4_expand([string])))}.
13720 The default for @var{chars} (@samp{\"$`}) is the set of characters
13721 needing escapes when @var{string} will be used literally within double
13722 quotes.  One common variant is the set of characters to protect when
13723 @var{string} will be used literally within back-ticks or an unquoted
13724 here-document (@samp{\$`}).  Another common variant is @samp{""}, which can
13725 be used to form a double-quoted string containing the same expansions
13726 that would have occurred if @var{string} were expanded in an unquoted
13727 here-document; however, when using this variant, care must be taken that
13728 @var{string} does not use double quotes within complex variable
13729 expansions (such as @samp{$@{foo-`echo "hi"`@}}) that would be broken
13730 with improper escapes.
13732 This macro is often used with @code{AS_ECHO}.  For an example, observe
13733 the output generated by the shell code generated from this snippet:
13735 @example
13736 foo=bar
13737 AS_ECHO(["AS_ESCAPE(["$foo" = ])AS_ESCAPE(["$foo"], [""])"])
13738 @result{}"$foo" = "bar"
13739 m4_define([macro], [a, [\b]])
13740 AS_ECHO(["AS_ESCAPE([[macro]])"])
13741 @result{}macro
13742 AS_ECHO(["AS_ESCAPE([macro])"])
13743 @result{}a, b
13744 AS_ECHO(["AS_ESCAPE(m4_dquote(m4_expand([macro])))"])
13745 @result{}a, \b
13746 @end example
13748 @comment Should we add AS_ESCAPE_SINGLE? If we do, we can optimize in
13749 @comment the case of @var{string} that does not contain '.
13750 To escape a string that will be placed within single quotes, use:
13752 @example
13753 m4_bpatsubst([[@var{string}]], ['], ['\\''])
13754 @end example
13755 @end defmac
13757 @defmac AS_EXECUTABLE_P (@var{file})
13758 @asindex{EXECUTABLE_P}
13759 Emit code to probe whether @var{file} is a regular file with executable
13760 permissions (and not a directory with search permissions).  The caller
13761 is responsible for quoting @var{file}.
13762 @end defmac
13764 @defmac AS_EXIT (@dvar{status, $?})
13765 @asindex{EXIT}
13766 Emit code to exit the shell with @var{status}, defaulting to @samp{$?}.
13767 This macro
13768 works around shells that see the exit status of the command prior to
13769 @code{exit} inside a @samp{trap 0} handler (@pxref{trap, , Limitations
13770 of Shell Builtins}).
13771 @end defmac
13773 @defmac AS_IF (@var{test1}, @ovar{run-if-true1}, @dots{}, @ovar{run-if-false})
13774 @asindex{IF}
13775 Run shell code @var{test1}.  If @var{test1} exits with a zero status then
13776 run shell code @var{run-if-true1}, else examine further tests.  If no test
13777 exits with a zero status, run shell code @var{run-if-false}, with
13778 simplifications if either @var{run-if-true1} or @var{run-if-false}
13779 is empty.  For example,
13781 @example
13782 AS_IF([test "x$foo" = xyes], [HANDLE_FOO([yes])],
13783       [test "x$foo" != xno], [HANDLE_FOO([maybe])],
13784       [echo foo not specified])
13785 @end example
13787 @noindent
13788 ensures any required macros of @code{HANDLE_FOO}
13789 are expanded before the first test.
13791 The @var{run-if-false} argument should either consist entirely of
13792 blanks, or expand to a nonempty shell command.  For example,
13793 @code{AS_IF([:], [:], [[]])} is invalid because its @var{run-if-false}
13794 argument contains the nonblank characters @code{[]} which expand to
13795 nothing.  This restriction on @var{run-if-false} also applies to other
13796 macros with ``if-false'' arguments denoting shell commands.
13797 @end defmac
13799 @defmac AS_MKDIR_P (@var{file-name})
13800 @asindex{MKDIR_P}
13801 Make the directory @var{file-name}, including intervening directories
13802 as necessary.  This is equivalent to @samp{mkdir -p -- @var{file-name}},
13803 except that it is portable to older versions of @command{mkdir} that
13804 lack support for the @option{-p} option or for the @option{--}
13805 delimiter (@pxref{mkdir, , Limitations of Usual Tools}).  Also,
13806 @code{AS_MKDIR_P}
13807 succeeds if @var{file-name} is a symbolic link to an existing directory,
13808 even though Posix is unclear whether @samp{mkdir -p} should
13809 succeed in that case.  If creation of @var{file-name} fails, exit the
13810 script.
13812 Also see the @code{AC_PROG_MKDIR_P} macro (@pxref{Particular Programs}).
13813 @end defmac
13815 @defmac AS_SET_STATUS (@var{status})
13816 @asindex{SET_STATUS}
13817 Emit shell code to set the value of @samp{$?} to @var{status}, as
13818 efficiently as possible.  However, this is not guaranteed to abort a
13819 shell running with @code{set -e} (@pxref{set, , Limitations of Shell
13820 Builtins}).  This should also be used at the end of a complex shell
13821 function instead of @samp{return} (@pxref{Shell Functions}) to avoid
13822 a DJGPP shell bug.
13823 @end defmac
13825 @defmac AS_TR_CPP (@var{expression})
13826 @asindex{TR_CPP}
13827 Transform @var{expression} into a valid right-hand side for a C @code{#define}.
13828 For example:
13830 @example
13831 # This outputs "#define HAVE_CHAR_P 1".
13832 # Notice the m4 quoting around #, to prevent an m4 comment
13833 type="char *"
13834 echo "[#]define AS_TR_CPP([HAVE_$type]) 1"
13835 @end example
13836 @end defmac
13838 @defmac AS_TR_SH (@var{expression})
13839 @asindex{TR_SH}
13840 Transform @var{expression} into shell code that generates a valid shell
13841 variable name.  The result is literal when possible at m4 time, but must
13842 be used with @code{eval} if @var{expression} causes shell indirections.
13843 For example:
13845 @example
13846 # This outputs "Have it!".
13847 header="sys/some file.h"
13848 eval AS_TR_SH([HAVE_$header])=yes
13849 if test "x$HAVE_sys_some_file_h" = xyes; then echo "Have it!"; fi
13850 @end example
13851 @end defmac
13853 @defmac AS_SET_CATFILE (@var{var}, @var{dir}, @var{file})
13854 @asindex{SET_CATFILE}
13855 Set the polymorphic shell variable @var{var} to @var{dir}/@var{file},
13856 but optimizing the common cases (@var{dir} or @var{file} is @samp{.},
13857 @var{file} is absolute, etc.).
13858 @end defmac
13860 @defmac AS_UNSET (@var{var})
13861 @asindex{UNSET}
13862 Unsets the shell variable @var{var}, working around bugs in older
13863 shells (@pxref{unset, , Limitations of Shell
13864 Builtins}).  @var{var} can be a literal or indirect variable name.
13865 @end defmac
13867 @defmac AS_VERSION_COMPARE (@var{version-1}, @var{version-2}, @
13868   @ovar{action-if-less}, @ovar{action-if-equal}, @ovar{action-if-greater})
13869 @asindex{VERSION_COMPARE}
13870 Compare two strings @var{version-1} and @var{version-2}, possibly
13871 containing shell variables, as version strings, and expand
13872 @var{action-if-less}, @var{action-if-equal}, or @var{action-if-greater}
13873 depending upon the result.
13874 The algorithm to compare is similar to the one used by strverscmp in
13875 glibc (@pxref{String/Array Comparison, , String/Array Comparison, libc,
13876 The GNU C Library}).
13877 @end defmac
13879 @node Polymorphic Variables
13880 @section Support for indirect variable names
13881 @cindex variable name indirection
13882 @cindex polymorphic variable name
13883 @cindex indirection, variable name
13885 Often, it is convenient to write a macro that will emit shell code
13886 operating on a shell variable.  The simplest case is when the variable
13887 name is known.  But a more powerful idiom is writing shell code that can
13888 work through an indirection, where another variable or command
13889 substitution produces the name of the variable to actually manipulate.
13890 M4sh supports the notion of polymorphic shell variables, making it easy
13891 to write a macro that can deal with either literal or indirect variable
13892 names and output shell code appropriate for both use cases.  Behavior is
13893 undefined if expansion of an indirect variable does not result in a
13894 literal variable name.
13896 @defmac AS_LITERAL_IF (@var{expression}, @ovar{if-literal}, @ovar{if-not}, @
13897   @dvarv{if-simple-ref, if-not})
13898 @defmacx AS_LITERAL_WORD_IF (@var{expression}, @ovar{if-literal}, @
13899   @ovar{if-not}, @dvarv{if-simple-ref, if-not})
13900 @asindex{LITERAL_IF}
13901 @asindex{LITERAL_WORD_IF}
13902 If the expansion of @var{expression} is definitely a shell literal,
13903 expand @var{if-literal}.  If the expansion of @var{expression} looks
13904 like it might contain shell indirections (such as @code{$var} or
13905 @code{`expr`}), then @var{if-not} is expanded.  Sometimes, it is
13906 possible to output optimized code if @var{expression} consists only of
13907 shell variable expansions (such as @code{$@{var@}}), in which case
13908 @var{if-simple-ref} can be provided; but defaulting to @var{if-not}
13909 should always be safe.  @code{AS_LITERAL_WORD_IF} only expands
13910 @var{if-literal} if @var{expression} looks like a single shell word,
13911 containing no whitespace; while @code{AS_LITERAL_IF} allows whitespace
13912 in @var{expression}.
13914 In order to reduce the time spent recognizing whether an
13915 @var{expression} qualifies as a literal or a simple indirection, the
13916 implementation is somewhat conservative: @var{expression} must be a
13917 single shell word (possibly after stripping whitespace), consisting only
13918 of bytes that would have the same meaning whether unquoted or enclosed
13919 in double quotes (for example, @samp{a.b} results in @var{if-literal},
13920 even though it is not a valid shell variable name; while both @samp{'a'}
13921 and @samp{[$]} result in @var{if-not}, because they behave differently
13922 than @samp{"'a'"} and @samp{"[$]"}).  This macro can be used in contexts
13923 for recognizing portable file names (such as in the implementation of
13924 @code{AC_LIBSOURCE}), or coupled with some transliterations for forming
13925 valid variable names (such as in the implementation of @code{AS_TR_SH},
13926 which uses an additional @code{m4_translit} to convert @samp{.} to
13927 @samp{_}).
13929 This example shows how to read the contents of the shell variable
13930 @code{bar}, exercising all three arguments to @code{AS_LITERAL_IF}.  It
13931 results in a script that will output the line @samp{hello} three times.
13933 @example
13934 AC_DEFUN([MY_ACTION],
13935 [AS_LITERAL_IF([$1],
13936   [echo "$$1"],
13937 @c $$
13938   [AS_VAR_COPY([var], [$1])
13939    echo "$var"],
13940   [eval 'echo "$'"$1"\"])])
13941 foo=bar bar=hello
13942 MY_ACTION([bar])
13943 MY_ACTION([`echo bar`])
13944 MY_ACTION([$foo])
13945 @end example
13946 @end defmac
13948 @defmac AS_VAR_APPEND (@var{var}, @var{text})
13949 @asindex{VAR_APPEND}
13950 Emit shell code to append the shell expansion of @var{text} to the end
13951 of the current contents of the polymorphic shell variable @var{var},
13952 taking advantage of shells that provide the @samp{+=} extension for more
13953 efficient scaling.
13955 For situations where the final contents of @var{var} are relatively
13956 short (less than 256 bytes), it is more efficient to use the simpler
13957 code sequence of @code{@var{var}=$@{@var{var}@}@var{text}} (or its
13958 polymorphic equivalent of @code{AS_VAR_COPY([t], [@var{var}])} and
13959 @code{AS_VAR_SET([@var{var}], ["$t"@var{text}])}).  But in the case
13960 when the script will be repeatedly appending text into @code{var},
13961 issues of scaling start to become apparent.  A naive implementation
13962 requires execution time linear to the length of the current contents of
13963 @var{var} as well as the length of @var{text} for a single append, for
13964 an overall quadratic scaling with multiple appends.  This macro takes
13965 advantage of shells which provide the extension
13966 @code{@var{var}+=@var{text}}, which can provide amortized constant time
13967 for a single append, for an overall linear scaling with multiple
13968 appends.  Note that unlike @code{AS_VAR_SET}, this macro requires that
13969 @var{text} be quoted properly to avoid field splitting and file name
13970 expansion.
13971 @end defmac
13973 @defmac AS_VAR_ARITH (@var{var}, @var{expression})
13974 @asindex{VAR_ARITH}
13975 Emit shell code to compute the arithmetic expansion of @var{expression},
13976 assigning the result as the contents of the polymorphic shell variable
13977 @var{var}.  The code takes advantage of shells that provide @samp{$(())}
13978 for fewer forks, but uses @command{expr} as a fallback.  Therefore, the
13979 syntax for a valid @var{expression} is rather limited: all operators
13980 must occur as separate shell arguments and with proper quoting, there is
13981 no portable equality operator, all variables containing numeric values
13982 must be expanded prior to the computation, all numeric values must be
13983 provided in decimal without leading zeroes, and the first shell argument
13984 should not be a negative number.  In the following example, this snippet
13985 will print @samp{(2+3)*4 == 20}.
13987 @example
13988 bar=3
13989 AS_VAR_ARITH([foo], [\( 2 + $bar \) \* 4])
13990 echo "(2+$bar)*4 == $foo"
13991 @end example
13992 @end defmac
13994 @defmac AS_VAR_COPY (@var{dest}, @var{source})
13995 @asindex{VAR_COPY}
13996 Emit shell code to assign the contents of the polymorphic shell variable
13997 @var{source} to the polymorphic shell variable @var{dest}.  For example,
13998 executing this M4sh snippet will output @samp{bar hi}:
14000 @example
14001 foo=bar bar=hi
14002 AS_VAR_COPY([a], [foo])
14003 AS_VAR_COPY([b], [$foo])
14004 echo "$a $b"
14005 @end example
14007 When it is necessary to access the contents of an indirect variable
14008 inside a shell double-quoted context, the recommended idiom is to first
14009 copy the contents into a temporary literal shell variable.
14011 @smallexample
14012 for header in stdint_h inttypes_h ; do
14013   AS_VAR_COPY([var], [ac_cv_header_$header])
14014   echo "$header detected: $var"
14015 done
14016 @end smallexample
14017 @end defmac
14019 @comment AS_VAR_GET is intentionally undocumented; it can't handle
14020 @comment trailing newlines uniformly, and forks too much.
14022 @defmac AS_VAR_IF (@var{var}, @ovar{word}, @ovar{if-equal}, @
14023   @ovar{if-not-equal})
14024 @asindex{VAR_IF}
14025 Output a shell conditional statement.  If the contents of the
14026 polymorphic shell variable @var{var} match the string @var{word},
14027 execute @var{if-equal}; otherwise execute @var{if-not-equal}.  @var{word}
14028 must be a single shell word (typically a quoted string).  Avoids
14029 shell bugs if an interrupt signal arrives while a command substitution
14030 in @var{var} is being expanded.
14031 @end defmac
14033 @defmac AS_VAR_PUSHDEF (@var{m4-name}, @var{value})
14034 @defmacx AS_VAR_POPDEF (@var{m4-name})
14035 @asindex{VAR_PUSHDEF}
14036 @asindex{VAR_POPDEF}
14037 @cindex composing variable names
14038 @cindex variable names, composing
14039 A common M4sh idiom involves composing shell variable names from an m4
14040 argument (for example, writing a macro that uses a cache variable).
14041 @var{value} can be an arbitrary string, which will be transliterated
14042 into a valid shell name by @code{AS_TR_SH}.  In order to access the
14043 composed variable name based on @var{value}, it is easier to declare a
14044 temporary m4 macro @var{m4-name} with @code{AS_VAR_PUSHDEF}, then use
14045 that macro as the argument to subsequent @code{AS_VAR} macros as a
14046 polymorphic variable name, and finally free the temporary macro with
14047 @code{AS_VAR_POPDEF}.  These macros are often followed with @code{dnl},
14048 to avoid excess newlines in the output.
14050 Here is an involved example, that shows the power of writing macros that
14051 can handle composed shell variable names:
14053 @example
14054 m4_define([MY_CHECK_HEADER],
14055 [AS_VAR_PUSHDEF([my_Header], [ac_cv_header_$1])dnl
14056 AS_VAR_IF([my_Header], [yes], [echo "header $1 detected"])dnl
14057 AS_VAR_POPDEF([my_Header])dnl
14059 MY_CHECK_HEADER([stdint.h])
14060 for header in inttypes.h stdlib.h ; do
14061   MY_CHECK_HEADER([$header])
14062 done
14063 @end example
14065 @noindent
14066 In the above example, @code{MY_CHECK_HEADER} can operate on polymorphic
14067 variable names.  In the first invocation, the m4 argument is
14068 @code{stdint.h}, which transliterates into a literal @code{stdint_h}.
14069 As a result, the temporary macro @code{my_Header} expands to the literal
14070 shell name @samp{ac_cv_header_stdint_h}.  In the second invocation, the
14071 m4 argument to @code{MY_CHECK_HEADER} is @code{$header}, and the
14072 temporary macro @code{my_Header} expands to the indirect shell name
14073 @samp{$as_my_Header}.  During the shell execution of the for loop, when
14074 @samp{$header} contains @samp{inttypes.h}, then @samp{$as_my_Header}
14075 contains @samp{ac_cv_header_inttypes_h}.  If this script is then run on a
14076 platform where all three headers have been previously detected, the
14077 output of the script will include:
14079 @smallexample
14080 header stdint.h detected
14081 header inttypes.h detected
14082 header stdlib.h detected
14083 @end smallexample
14084 @end defmac
14086 @defmac AS_VAR_SET (@var{var}, @ovar{value})
14087 @asindex{VAR_SET}
14088 Emit shell code to assign the contents of the polymorphic shell variable
14089 @var{var} to the shell expansion of @var{value}.  @var{value} is not
14090 subject to field splitting or file name expansion, so if command
14091 substitution is used, it may be done with @samp{`""`} rather than using
14092 an intermediate variable (@pxref{Shell Substitutions}).  However,
14093 @var{value} does undergo rescanning for additional macro names; behavior
14094 is unspecified if late expansion results in any shell meta-characters.
14095 @end defmac
14097 @defmac AS_VAR_SET_IF (@var{var}, @ovar{if-set}, @ovar{if-undef})
14098 @asindex{VAR_SET_IF}
14099 Emit a shell conditional statement, which executes @var{if-set} if the
14100 polymorphic shell variable @code{var} is set to any value, and
14101 @var{if-undef} otherwise.
14102 @end defmac
14104 @defmac AS_VAR_TEST_SET (@var{var})
14105 @asindex{VAR_TEST_SET}
14106 Emit a shell statement that results in a successful exit status only if
14107 the polymorphic shell variable @code{var} is set.
14108 @end defmac
14110 @node Initialization Macros
14111 @section Initialization Macros
14113 @defmac AS_BOURNE_COMPATIBLE
14114 @asindex{BOURNE_COMPATIBLE}
14115 Set up the shell to be more compatible with the Bourne shell as
14116 standardized by Posix, if possible.  This may involve setting
14117 environment variables, or setting options, or similar
14118 implementation-specific actions.  This macro is deprecated, since
14119 @code{AS_INIT} already invokes it.
14120 @end defmac
14122 @defmac AS_INIT
14123 @asindex{INIT}
14124 @evindex LC_ALL
14125 @evindex SHELL
14126 Initialize the M4sh environment.  This macro calls @code{m4_init}, then
14127 outputs the @code{#! /bin/sh} line, a notice about where the output was
14128 generated from, and code to sanitize the environment for the rest of the
14129 script.  Among other initializations, this sets @env{SHELL} to the shell
14130 chosen to run the script (@pxref{CONFIG_SHELL}), and @env{LC_ALL} to
14131 ensure the C locale.  Finally, it changes the current diversion to
14132 @code{BODY}.  @code{AS_INIT} is called automatically by @code{AC_INIT}
14133 and @code{AT_INIT}, so shell code in @file{configure},
14134 @file{config.status}, and @file{testsuite} all benefit from a sanitized
14135 shell environment.
14136 @end defmac
14138 @defmac AS_INIT_GENERATED (@var{file}, @ovar{comment})
14139 @asindex{INIT_GENERATED}
14140 Emit shell code to start the creation of a subsidiary shell script in
14141 @var{file}, including changing @var{file} to be executable.  This macro
14142 populates the child script with information learned from the parent
14143 (thus, the emitted code is equivalent in effect, but more efficient,
14144 than the code output by @code{AS_INIT}, @code{AS_BOURNE_COMPATIBLE}, and
14145 @code{AS_SHELL_SANITIZE}).  If present, @var{comment} is output near the
14146 beginning of the child, prior to the shell initialization code, and is
14147 subject to parameter expansion, command substitution, and backslash
14148 quote removal.  The
14149 parent script should check the exit status after this macro, in case
14150 @var{file} could not be properly created (for example, if the disk was
14151 full).  If successfully created, the parent script can then proceed to
14152 append additional M4sh constructs into the child script.
14154 Note that the child script starts life without a log file open, so if
14155 the parent script uses logging (@pxref{AS_MESSAGE_LOG_FD}), you
14156 must temporarily disable any attempts to use the log file until after
14157 emitting code to open a log within the child.  On the other hand, if the
14158 parent script has @code{AS_MESSAGE_FD} redirected somewhere besides
14159 @samp{1}, then the child script already has code that copies stdout to
14160 that descriptor.  Currently, the suggested
14161 idiom for writing a M4sh shell script from within another script is:
14163 @example
14164 AS_INIT_GENERATED([@var{file}], [[# My child script.
14165 ]]) || @{ AS_ECHO(["Failed to create child script"]); AS_EXIT; @}
14166 m4_pushdef([AS_MESSAGE_LOG_FD])dnl
14167 cat >> "@var{file}" <<\__EOF__
14168 # Code to initialize AS_MESSAGE_LOG_FD
14169 m4_popdef([AS_MESSAGE_LOG_FD])dnl
14170 # Additional code
14171 __EOF__
14172 @end example
14174 This, however, may change in the future as the M4sh interface is
14175 stabilized further.
14177 Also, be aware that use of @env{LINENO} within the child script may
14178 report line numbers relative to their location in the parent script,
14179 even when using @code{AS_LINENO_PREPARE}, if the parent script was
14180 unable to locate a shell with working @env{LINENO} support.
14181 @end defmac
14183 @defmac AS_LINENO_PREPARE
14184 @asindex{LINENO_PREPARE}
14185 @evindex LINENO
14186 Find a shell that supports the special variable @env{LINENO}, which
14187 contains the number of the currently executing line.  This macro is
14188 automatically invoked by @code{AC_INIT} in configure scripts.
14189 @end defmac
14191 @defmac AS_ME_PREPARE
14192 @asindex{ME_PREPARE}
14193 Set up variable @env{as_me} to be the basename of the currently executing
14194 script.  This macro is automatically invoked by @code{AC_INIT} in
14195 configure scripts.
14196 @end defmac
14198 @defmac AS_TMPDIR (@var{prefix}, @dvar{dir, $@{TMPDIR:=/tmp@}})
14199 @asindex{TMPDIR}
14200 @evindex TMPDIR
14201 @ovindex tmp
14202 Create, as safely as possible, a temporary sub-directory within
14203 @var{dir} with a name starting with @var{prefix}.  @var{prefix} should
14204 be 2--4 characters, to make it slightly easier to identify the owner of
14205 the directory.  If @var{dir} is omitted, then the value of @env{TMPDIR}
14206 will be used (defaulting to @samp{/tmp}).  On success, the name of the
14207 newly created directory is stored in the shell variable @code{tmp}.  On
14208 error, the script is aborted.
14210 Typically, this macro is coupled with some exit traps to delete the created
14211 directory and its contents on exit or interrupt.  However, there is a
14212 slight window between when the directory is created and when the name is
14213 actually known to the shell, so an interrupt at the right moment might
14214 leave the temporary directory behind.  Hence it is important to use a
14215 @var{prefix} that makes it easier to determine if a leftover temporary
14216 directory from an interrupted script is safe to delete.
14218 The use of the output variable @samp{$tmp} rather than something in the
14219 @samp{as_} namespace is historical; it has the unfortunate consequence
14220 that reusing this otherwise common name for any other purpose inside
14221 your script has the potential to break any cleanup traps designed to
14222 remove the temporary directory.
14223 @end defmac
14225 @defmac AS_SHELL_SANITIZE
14226 @asindex{SHELL_SANITIZE}
14227 Initialize the shell suitably for @command{configure} scripts.  This has
14228 the effect of @code{AS_BOURNE_COMPATIBLE}, and sets some other
14229 environment variables for predictable results from configuration tests.
14230 For example, it sets @env{LC_ALL} to change to the default C locale.
14231 @xref{Special Shell Variables}.  This macro is deprecated, since
14232 @code{AS_INIT} already invokes it.
14233 @end defmac
14236 @node File Descriptor Macros
14237 @section File Descriptor Macros
14238 @cindex input
14239 @cindex standard input
14240 @cindex file descriptors
14241 @cindex descriptors
14242 @cindex low-level output
14243 @cindex output, low-level
14245 The following macros define file descriptors used to output messages
14246 (or input values) from @file{configure} scripts.
14247 For example:
14249 @example
14250 echo "$wombats found" >&AS_MESSAGE_LOG_FD
14251 echo 'Enter desired kangaroo count:' >&AS_MESSAGE_FD
14252 read kangaroos <&AS_ORIGINAL_STDIN_FD`
14253 @end example
14255 @noindent
14256 However doing so is seldom needed, because Autoconf provides higher
14257 level macros as described below.
14259 @defmac AS_MESSAGE_FD
14260 @asindex{MESSAGE_FD}
14261 The file descriptor for @samp{checking for...}  messages and results.
14262 By default, @code{AS_INIT} sets this to @samp{1} for standalone M4sh
14263 clients.  However, @code{AC_INIT} shuffles things around to another file
14264 descriptor, in order to allow the @option{-q} option of
14265 @command{configure} to choose whether messages should go to the script's
14266 standard output or be discarded.
14268 If you want to display some messages, consider using one of the printing
14269 macros (@pxref{Printing Messages}) instead.  Copies of messages output
14270 via these macros are also recorded in @file{config.log}.
14271 @end defmac
14273 @anchor{AS_MESSAGE_LOG_FD}
14274 @defmac AS_MESSAGE_LOG_FD
14275 @asindex{MESSAGE_LOG_FD}
14276 This must either be empty, or expand to a file descriptor for log
14277 messages.  By default, @code{AS_INIT} sets this macro to the empty
14278 string for standalone M4sh clients, thus disabling logging.  However,
14279 @code{AC_INIT} shuffles things around so that both @command{configure}
14280 and @command{config.status} use @file{config.log} for log messages.
14281 Macros that run tools, like @code{AC_COMPILE_IFELSE} (@pxref{Running the
14282 Compiler}), redirect all output to this descriptor.  You may want to do
14283 so if you develop such a low-level macro.
14284 @end defmac
14286 @defmac AS_ORIGINAL_STDIN_FD
14287 @asindex{ORIGINAL_STDIN_FD}
14288 This must expand to a file descriptor for the original standard input.
14289 By default, @code{AS_INIT} sets this macro to @samp{0} for standalone
14290 M4sh clients.  However, @code{AC_INIT} shuffles things around for
14291 safety.
14293 When @command{configure} runs, it may accidentally execute an
14294 interactive command that has the same name as the non-interactive meant
14295 to be used or checked.  If the standard input was the terminal, such
14296 interactive programs would cause @command{configure} to stop, pending
14297 some user input.  Therefore @command{configure} redirects its standard
14298 input from @file{/dev/null} during its initialization.  This is not
14299 normally a problem, since @command{configure} normally does not need
14300 user input.
14302 In the extreme case where your @file{configure} script really needs to
14303 obtain some values from the original standard input, you can read them
14304 explicitly from @code{AS_ORIGINAL_STDIN_FD}.
14305 @end defmac
14308 @c =================================================== Writing Autoconf Macros.
14310 @node Writing Autoconf Macros
14311 @chapter Writing Autoconf Macros
14313 When you write a feature test that could be applicable to more than one
14314 software package, the best thing to do is encapsulate it in a new macro.
14315 Here are some instructions and guidelines for writing Autoconf macros.
14317 @menu
14318 * Macro Definitions::           Basic format of an Autoconf macro
14319 * Macro Names::                 What to call your new macros
14320 * Reporting Messages::          Notifying @command{autoconf} users
14321 * Dependencies Between Macros::  What to do when macros depend on other macros
14322 * Obsoleting Macros::           Warning about old ways of doing things
14323 * Coding Style::                Writing Autoconf macros @`a la Autoconf
14324 @end menu
14326 @node Macro Definitions
14327 @section Macro Definitions
14329 @defmac AC_DEFUN (@var{name}, @ovar{body})
14330 @acindex{DEFUN}
14331 Autoconf macros are defined using the @code{AC_DEFUN} macro, which is
14332 similar to the M4 builtin @code{m4_define} macro; this creates a macro
14333 named @var{name} and with @var{body} as its expansion.  In addition to
14334 defining a macro, @code{AC_DEFUN} adds to it some code that is used to
14335 constrain the order in which macros are called, while avoiding redundant
14336 output (@pxref{Prerequisite Macros}).
14337 @end defmac
14339 An Autoconf macro definition looks like this:
14341 @example
14342 AC_DEFUN(@var{macro-name}, @var{macro-body})
14343 @end example
14345 You can refer to any arguments passed to the macro as @samp{$1},
14346 @samp{$2}, etc.  @xref{Definitions, , How to define new macros, m4,
14347 GNU M4}, for more complete information on writing M4 macros.
14349 Most macros fall in one of two general categories.  The first category
14350 includes macros which take arguments, in order to generate output
14351 parameterized by those arguments.  Macros in this category are designed
14352 to be directly expanded, often multiple times, and should not be used as
14353 the argument to @code{AC_REQUIRE}.  The other category includes macros
14354 which are shorthand for a fixed block of text, and therefore do not take
14355 arguments.  For this category of macros, directly expanding the macro
14356 multiple times results in redundant output, so it is more common to use
14357 the macro as the argument to @code{AC_REQUIRE}, or to declare the macro
14358 with @code{AC_DEFUN_ONCE} (@pxref{One-Shot Macros}).
14360 Be sure to properly quote both the @var{macro-body} @emph{and} the
14361 @var{macro-name} to avoid any problems if the macro happens to have
14362 been previously defined.
14364 Each macro should have a header comment that gives its prototype, and a
14365 brief description.  When arguments have default values, display them in
14366 the prototype.  For example:
14368 @example
14369 # AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
14370 # --------------------------------------
14371 m4_define([AC_MSG_ERROR],
14372   [@{ AS_MESSAGE([error: $1], [2])
14373      exit m4_default([$2], [1]); @}])
14374 @end example
14376 Comments about the macro should be left in the header comment.  Most
14377 other comments make their way into @file{configure}, so just keep
14378 using @samp{#} to introduce comments.
14380 @cindex @code{dnl}
14381 If you have some special comments about pure M4 code, comments
14382 that make no sense in @file{configure} and in the header comment, then
14383 use the builtin @code{dnl}: it causes M4 to discard the text
14384 through the next newline.
14386 Keep in mind that @code{dnl} is rarely needed to introduce comments;
14387 @code{dnl} is more useful to get rid of the newlines following macros
14388 that produce no output, such as @code{AC_REQUIRE}.
14390 Public third-party macros need to use @code{AC_DEFUN}, and not
14391 @code{m4_define}, in order to be found by @command{aclocal}
14392 (@pxref{Extending aclocal,,, automake, GNU Automake}).
14393 Additionally, if it is ever determined that a macro should be made
14394 obsolete, it is easy to convert from @code{AC_DEFUN} to @code{AU_DEFUN}
14395 in order to have @command{autoupdate} assist the user in choosing a
14396 better alternative, but there is no corresponding way to make
14397 @code{m4_define} issue an upgrade notice (@pxref{AU_DEFUN}).
14399 There is another subtle, but important, difference between using
14400 @code{m4_define} and @code{AC_DEFUN}: only the former is unaffected by
14401 @code{AC_REQUIRE}.  When writing a file, it is always safe to replace a
14402 block of text with a @code{m4_define} macro that will expand to the same
14403 text.  But replacing a block of text with an @code{AC_DEFUN} macro with
14404 the same content does not necessarily give the same results, because it
14405 changes the location where any embedded but unsatisfied
14406 @code{AC_REQUIRE} invocations within the block will be expanded.  For an
14407 example of this, see @ref{Expanded Before Required}.
14409 @node Macro Names
14410 @section Macro Names
14412 All of the public Autoconf macros have all-uppercase names in the
14413 namespace @samp{^AC_} to prevent them from accidentally conflicting with
14414 other text; Autoconf also reserves the namespace @samp{^_AC_} for
14415 internal macros.  All shell variables that they use for internal
14416 purposes have mostly-lowercase names starting with @samp{ac_}.  Autoconf
14417 also uses here-document delimiters in the namespace @samp{^_AC[A-Z]}.  During
14418 @command{configure}, files produced by Autoconf make heavy use of the
14419 file system namespace @samp{^conf}.
14421 Since Autoconf is built on top of M4sugar (@pxref{Programming in
14422 M4sugar}) and M4sh (@pxref{Programming in M4sh}), you must also be aware
14423 of those namespaces (@samp{^_?\(m4\|AS\)_}).  And since
14424 @file{configure.ac} is also designed to be scanned by Autoheader,
14425 Autoscan, Autoupdate, and Automake, you should be aware of the
14426 @samp{^_?A[HNUM]_} namespaces.  In general, you @emph{should not use}
14427 the namespace of a package that does not own the macro or shell code you
14428 are writing.
14430 To ensure that your macros don't conflict with present or future
14431 Autoconf macros, you should prefix your own macro names and any shell
14432 variables they use with some other sequence.  Possibilities include your
14433 initials, or an abbreviation for the name of your organization or
14434 software package.  Historically, people have not always followed the
14435 rule of using a namespace appropriate for their package, and this has
14436 made it difficult for determining the origin of a macro (and where to
14437 report bugs about that macro), as well as difficult for the true
14438 namespace owner to add new macros without interference from pre-existing
14439 uses of third-party macros.  Perhaps the best example of this confusion
14440 is the @code{AM_GNU_GETTEXT} macro, which belongs, not to Automake, but
14441 to Gettext.
14443 Most of the Autoconf macros' names follow a structured naming convention
14444 that indicates the kind of feature check by the name.  The macro names
14445 consist of several words, separated by underscores, going from most
14446 general to most specific.  The names of their cache variables use the
14447 same convention (@pxref{Cache Variable Names}, for more information on
14448 them).
14450 The first word of the name after the namespace initials (such as
14451 @samp{AC_}) usually tells the category
14452 of the feature being tested.  Here are the categories used in Autoconf for
14453 specific test macros, the kind of macro that you are more likely to
14454 write.  They are also used for cache variables, in all-lowercase.  Use
14455 them where applicable; where they're not, invent your own categories.
14457 @table @code
14458 @item C
14459 C language builtin features.
14460 @item DECL
14461 Declarations of C variables in header files.
14462 @item FUNC
14463 Functions in libraries.
14464 @item GROUP
14465 Posix group owners of files.
14466 @item HEADER
14467 Header files.
14468 @item LIB
14469 C libraries.
14470 @item PROG
14471 The base names of programs.
14472 @item MEMBER
14473 Members of aggregates.
14474 @item SYS
14475 Operating system features.
14476 @item TYPE
14477 C builtin or declared types.
14478 @item VAR
14479 C variables in libraries.
14480 @end table
14482 After the category comes the name of the particular feature being
14483 tested.  Any further words in the macro name indicate particular aspects
14484 of the feature.  For example, @code{AC_PROG_MAKE_SET} checks whether
14485 @command{make} sets a variable to its own name.
14487 An internal macro should have a name that starts with an underscore;
14488 Autoconf internals should therefore start with @samp{_AC_}.
14489 Additionally, a macro that is an internal subroutine of another macro
14490 should have a name that starts with an underscore and the name of that
14491 other macro, followed by one or more words saying what the internal
14492 macro does.  For example, @code{AC_PATH_X} has internal macros
14493 @code{_AC_PATH_X_XMKMF} and @code{_AC_PATH_X_DIRECT}.
14495 @node Reporting Messages
14496 @section Reporting Messages
14497 @cindex Messages, from @command{autoconf}
14499 When macros statically diagnose abnormal situations, benign or fatal, it
14500 is possible to make @command{autoconf} detect the problem, and refuse to
14501 create @file{configure} in the case of an error.  The macros in this
14502 section are considered obsolescent, and new code should use M4sugar
14503 macros for this purpose, see @ref{Diagnostic Macros}.
14505 On the other hand, it is possible to want to detect errors when
14506 @command{configure} is run, which are dependent on the environment of
14507 the user rather than the maintainer.  For dynamic diagnostics, see
14508 @ref{Printing Messages}.
14510 @defmac AC_DIAGNOSE (@var{category}, @var{message})
14511 @acindex{DIAGNOSE}
14512 Report @var{message} as a warning (or as an error if requested by the
14513 user) if warnings of the @var{category} are turned on.  This macro is
14514 obsolescent; you are encouraged to use:
14515 @example
14516 m4_warn([@var{category}], [@var{message}])
14517 @end example
14518 @noindent
14519 instead.  @xref{m4_warn}, for more details, including valid
14520 @var{category} names.
14521 @end defmac
14523 @defmac AC_WARNING (@var{message})
14524 @acindex{WARNING}
14525 Report @var{message} as a syntax warning.  This macro is obsolescent;
14526 you are encouraged to use:
14527 @example
14528 m4_warn([syntax], [@var{message}])
14529 @end example
14530 @noindent
14531 instead.  @xref{m4_warn}, for more details, as well as better
14532 finer-grained categories of warnings (not all problems have to do with
14533 syntax).
14534 @end defmac
14536 @defmac AC_FATAL (@var{message})
14537 @acindex{FATAL}
14538 Report a severe error @var{message}, and have @command{autoconf} die.
14539 This macro is obsolescent; you are encouraged to use:
14540 @example
14541 m4_fatal([@var{message}])
14542 @end example
14543 @noindent
14544 instead.  @xref{m4_fatal}, for more details.
14545 @end defmac
14547 When the user runs @samp{autoconf -W error}, warnings from
14548 @code{m4_warn} (including those issued through @code{AC_DIAGNOSE} and
14549 @code{AC_WARNING}) are reported as errors, see @ref{autoconf Invocation}.
14551 @node Dependencies Between Macros
14552 @section Dependencies Between Macros
14553 @cindex Dependencies between macros
14555 Some Autoconf macros depend on other macros having been called first in
14556 order to work correctly.  Autoconf provides a way to ensure that certain
14557 macros are called if needed and a way to warn the user if macros are
14558 called in an order that might cause incorrect operation.
14560 @menu
14561 * Prerequisite Macros::         Ensuring required information
14562 * Suggested Ordering::          Warning about possible ordering problems
14563 * One-Shot Macros::             Ensuring a macro is called only once
14564 @end menu
14566 @node Prerequisite Macros
14567 @subsection Prerequisite Macros
14568 @cindex Prerequisite macros
14569 @cindex Macros, prerequisites
14571 A macro that you write might need to use values that have previously
14572 been computed by other macros.  For example, @code{AC_DECL_YYTEXT}
14573 examines the output of @code{flex} or @code{lex}, so it depends on
14574 @code{AC_PROG_LEX} having been called first to set the shell variable
14575 @code{LEX}.
14577 Rather than forcing the user of the macros to keep track of the
14578 dependencies between them, you can use the @code{AC_REQUIRE} macro to do
14579 it automatically.  @code{AC_REQUIRE} can ensure that a macro is only
14580 called if it is needed, and only called once.
14582 @defmac AC_REQUIRE (@var{macro-name})
14583 @acindex{REQUIRE}
14584 If the M4 macro @var{macro-name} has not already been called, call it
14585 (without any arguments).  Make sure to quote @var{macro-name} with
14586 square brackets.  @var{macro-name} must have been defined using
14587 @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
14588 that it has been called.
14590 @code{AC_REQUIRE} must be used inside a macro defined by @code{AC_DEFUN}; it
14591 must not be called from the top level.  Also, it does not make sense to
14592 require a macro that takes parameters.
14593 @end defmac
14595 @code{AC_REQUIRE} is often misunderstood.  It really implements
14596 dependencies between macros in the sense that if one macro depends upon
14597 another, the latter is expanded @emph{before} the body of the
14598 former.  To be more precise, the required macro is expanded before
14599 the outermost defined macro in the current expansion stack.
14600 In particular, @samp{AC_REQUIRE([FOO])} is not replaced with the body of
14601 @code{FOO}.  For instance, this definition of macros:
14603 @example
14604 @group
14605 AC_DEFUN([TRAVOLTA],
14606 [test "$body_temperature_in_celsius" -gt "38" &&
14607   dance_floor=occupied])
14608 AC_DEFUN([NEWTON_JOHN],
14609 [test "x$hair_style" = xcurly &&
14610   dance_floor=occupied])
14611 @end group
14613 @group
14614 AC_DEFUN([RESERVE_DANCE_FLOOR],
14615 [if date | grep '^Sat.*pm' >/dev/null 2>&1; then
14616   AC_REQUIRE([TRAVOLTA])
14617   AC_REQUIRE([NEWTON_JOHN])
14618 fi])
14619 @end group
14620 @end example
14622 @noindent
14623 with this @file{configure.ac}
14625 @example
14626 AC_INIT([Dance Manager], [1.0], [bug-dance@@example.org])
14627 RESERVE_DANCE_FLOOR
14628 if test "x$dance_floor" = xoccupied; then
14629   AC_MSG_ERROR([cannot pick up here, let's move])
14631 @end example
14633 @noindent
14634 does not leave you with a better chance to meet a kindred soul at
14635 other times than Saturday night since it expands into:
14637 @example
14638 @group
14639 test "$body_temperature_in_Celsius" -gt "38" &&
14640   dance_floor=occupied
14641 test "x$hair_style" = xcurly &&
14642   dance_floor=occupied
14644 if date | grep '^Sat.*pm' >/dev/null 2>&1; then
14648 @end group
14649 @end example
14651 This behavior was chosen on purpose: (i) it prevents messages in
14652 required macros from interrupting the messages in the requiring macros;
14653 (ii) it avoids bad surprises when shell conditionals are used, as in:
14655 @example
14656 @group
14657 if @dots{}; then
14658   AC_REQUIRE([SOME_CHECK])
14660 @dots{}
14661 SOME_CHECK
14662 @end group
14663 @end example
14665 However, this implementation can lead to another class of problems.
14666 Consider the case where an outer macro first expands, then indirectly
14667 requires, an inner macro:
14669 @example
14670 AC_DEFUN([TESTA], [[echo in A
14671 if test -n "$SEEN_A" ; then echo duplicate ; fi
14672 SEEN_A=:]])
14673 AC_DEFUN([TESTB], [AC_REQUIRE([TESTA])[echo in B
14674 if test -z "$SEEN_A" ; then echo bug ; fi]])
14675 AC_DEFUN([TESTC], [AC_REQUIRE([TESTB])[echo in C]])
14676 AC_DEFUN([OUTER], [[echo in OUTER]
14677 TESTA
14678 TESTC])
14679 OUTER
14680 @end example
14682 @noindent
14683 Prior to Autoconf 2.64, the implementation of @code{AC_REQUIRE}
14684 recognized that @code{TESTB} needed to be hoisted prior to the expansion
14685 of @code{OUTER}, but because @code{TESTA} had already been directly
14686 expanded, it failed to hoist @code{TESTA}.  Therefore, the expansion of
14687 @code{TESTB} occurs prior to its prerequisites, leading to the following
14688 output:
14690 @example
14691 in B
14693 in OUTER
14694 in A
14695 in C
14696 @end example
14698 @noindent
14699 Newer Autoconf is smart enough to recognize this situation, and hoists
14700 @code{TESTA} even though it has already been expanded, but issues a
14701 syntax warning in the process.  This is because the hoisted expansion of
14702 @code{TESTA} defeats the purpose of using @code{AC_REQUIRE} to avoid
14703 redundant code, and causes its own set of problems if the hoisted macro
14704 is not idempotent:
14706 @example
14707 in A
14708 in B
14709 in OUTER
14710 in A
14711 duplicate
14712 in C
14713 @end example
14715 The bug is not in Autoconf, but in the macro definitions.  If you ever
14716 pass a particular macro name to @code{AC_REQUIRE}, then you are implying
14717 that the macro only needs to be expanded once.  But to enforce this,
14718 either the macro must be declared with @code{AC_DEFUN_ONCE} (although
14719 this only helps in Autoconf 2.64 or newer), or all
14720 uses of that macro should be through @code{AC_REQUIRE}; directly
14721 expanding the macro defeats the point of using @code{AC_REQUIRE} to
14722 eliminate redundant expansion.  In the example, this rule of thumb was
14723 violated because @code{TESTB} requires @code{TESTA} while @code{OUTER}
14724 directly expands it.  One way of fixing the bug is to factor
14725 @code{TESTA} into two macros, the portion designed for direct and
14726 repeated use (here, named @code{TESTA}), and the portion designed for
14727 one-shot output and used only inside @code{AC_REQUIRE} (here, named
14728 @code{TESTA_PREREQ}).  Then, by fixing all clients to use the correct
14729 calling convention according to their needs:
14731 @example
14732 AC_DEFUN([TESTA], [AC_REQUIRE([TESTA_PREREQ])[echo in A]])
14733 AC_DEFUN([TESTA_PREREQ], [[echo in A_PREREQ
14734 if test -n "$SEEN_A" ; then echo duplicate ; fi
14735 SEEN_A=:]])
14736 AC_DEFUN([TESTB], [AC_REQUIRE([TESTA_PREREQ])[echo in B
14737 if test -z "$SEEN_A" ; then echo bug ; fi]])
14738 AC_DEFUN([TESTC], [AC_REQUIRE([TESTB])[echo in C]])
14739 AC_DEFUN([OUTER], [[echo in OUTER]
14740 TESTA
14741 TESTC])
14742 OUTER
14743 @end example
14745 @noindent
14746 the resulting output will then obey all dependency rules and avoid any
14747 syntax warnings, whether the script is built with old or new Autoconf
14748 versions:
14750 @example
14751 in A_PREREQ
14752 in B
14753 in OUTER
14754 in A
14755 in C
14756 @end example
14758 The helper macros @code{AS_IF} and @code{AS_CASE} may be used to
14759 enforce expansion of required macros outside of shell conditional
14760 constructs.  You are furthermore encouraged, although not required, to
14761 put all @code{AC_REQUIRE} calls
14762 at the beginning of a macro.  You can use @code{dnl} to avoid the empty
14763 lines they leave.
14765 Autoconf will normally warn if an @code{AC_REQUIRE} call refers to a
14766 macro that has not been defined.  However, the @command{aclocal} tool
14767 relies on parsing an incomplete set of input files to trace which macros
14768 have been required, in order to then pull in additional files that
14769 provide those macros; for this particular use case, pre-defining the
14770 macro @code{m4_require_silent_probe} will avoid the warnings.
14772 @node Suggested Ordering
14773 @subsection Suggested Ordering
14774 @cindex Macros, ordering
14775 @cindex Ordering macros
14777 Some macros should be run before another macro if both are called, but
14778 neither @emph{requires} that the other be called.  For example, a macro
14779 that changes the behavior of the C compiler should be called before any
14780 macros that run the C compiler.  Many of these dependencies are noted in
14781 the documentation.
14783 Autoconf provides the @code{AC_BEFORE} macro to warn users when macros
14784 with this kind of dependency appear out of order in a
14785 @file{configure.ac} file.  The warning occurs when creating
14786 @command{configure} from @file{configure.ac}, not when running
14787 @command{configure}.
14789 For example, @code{AC_PROG_CPP} checks whether the C compiler
14790 can run the C preprocessor when given the @option{-E} option.  It should
14791 therefore be called after any macros that change which C compiler is
14792 being used, such as @code{AC_PROG_CC}.  So @code{AC_PROG_CC} contains:
14794 @example
14795 AC_BEFORE([$0], [AC_PROG_CPP])dnl
14796 @end example
14798 @noindent
14799 This warns the user if a call to @code{AC_PROG_CPP} has already occurred
14800 when @code{AC_PROG_CC} is called.
14802 @defmac AC_BEFORE (@var{this-macro-name}, @var{called-macro-name})
14803 @acindex{BEFORE}
14804 Make M4 print a warning message to the standard error output if
14805 @var{called-macro-name} has already been called.  @var{this-macro-name}
14806 should be the name of the macro that is calling @code{AC_BEFORE}.  The
14807 macro @var{called-macro-name} must have been defined using
14808 @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
14809 that it has been called.
14810 @end defmac
14812 @node One-Shot Macros
14813 @subsection One-Shot Macros
14814 @cindex One-shot macros
14815 @cindex Macros, called once
14817 Some macros should be called only once, either because calling them
14818 multiple time is unsafe, or because it is bad style.  For instance
14819 Autoconf ensures that @code{AC_CANONICAL_BUILD} and cousins
14820 (@pxref{Canonicalizing}) are evaluated only once, because it makes no
14821 sense to run these expensive checks more than once.  Such one-shot
14822 macros can be defined using @code{AC_DEFUN_ONCE}.
14824 @defmac AC_DEFUN_ONCE (@var{macro-name}, @var{macro-body})
14825 @acindex{DEFUN_ONCE}
14826 Declare macro @var{macro-name} like @code{AC_DEFUN} would (@pxref{Macro
14827 Definitions}), but add additional logic that guarantees that only the
14828 first use of the macro (whether by direct expansion or
14829 @code{AC_REQUIRE}) causes an expansion of @var{macro-body}; the
14830 expansion will occur before the start of any enclosing macro defined by
14831 @code{AC_DEFUN}.  Subsequent expansions are silently ignored.
14832 Generally, it does not make sense for @var{macro-body} to use parameters
14833 such as @code{$1}.
14834 @end defmac
14836 Prior to Autoconf 2.64, a macro defined by @code{AC_DEFUN_ONCE} would
14837 emit a warning if it was directly expanded a second time, so for
14838 portability, it is better to use @code{AC_REQUIRE} than direct
14839 invocation of @var{macro-name} inside a macro defined by @code{AC_DEFUN}
14840 (@pxref{Prerequisite Macros}).
14842 @node Obsoleting Macros
14843 @section Obsoleting Macros
14844 @cindex Obsoleting macros
14845 @cindex Macros, obsoleting
14847 Configuration and portability technology has evolved over the years.
14848 Often better ways of solving a particular problem are developed, or
14849 ad-hoc approaches are systematized.  This process has occurred in many
14850 parts of Autoconf.  One result is that some of the macros are now
14851 considered @dfn{obsolete}; they still work, but are no longer considered
14852 the best thing to do, hence they should be replaced with more modern
14853 macros.  Ideally, @command{autoupdate} should replace the old macro calls
14854 with their modern implementation.
14856 Autoconf provides a simple means to obsolete a macro.
14858 @anchor{AU_DEFUN}
14859 @defmac AU_DEFUN (@var{old-macro}, @var{implementation}, @ovar{message})
14860 @auindex{DEFUN}
14861 Define @var{old-macro} as @var{implementation}.  The only difference
14862 with @code{AC_DEFUN} is that the user is warned that
14863 @var{old-macro} is now obsolete.
14865 If she then uses @command{autoupdate}, the call to @var{old-macro} is
14866 replaced by the modern @var{implementation}.  @var{message} should
14867 include information on what to do after running @command{autoupdate};
14868 @command{autoupdate} prints it as a warning, and includes it
14869 in the updated @file{configure.ac} file.
14871 The details of this macro are hairy: if @command{autoconf} encounters an
14872 @code{AU_DEFUN}ed macro, all macros inside its second argument are expanded
14873 as usual.  However, when @command{autoupdate} is run, only M4 and M4sugar
14874 macros are expanded here, while all other macros are disabled and
14875 appear literally in the updated @file{configure.ac}.
14876 @end defmac
14878 @defmac AU_ALIAS (@var{old-name}, @var{new-name})
14879 @auindex{ALIAS}
14880 Used if the @var{old-name} is to be replaced by a call to @var{new-macro}
14881 with the same parameters.  This happens for example if the macro was renamed.
14882 @end defmac
14884 @node Coding Style
14885 @section Coding Style
14886 @cindex Coding style
14888 The Autoconf macros follow a strict coding style.  You are encouraged to
14889 follow this style, especially if you intend to distribute your macro,
14890 either by contributing it to Autoconf itself or the
14891 @uref{https://@/www.gnu.org/@/software/@/autoconf-archive/, Autoconf Macro
14892 Archive}, or by other means.
14894 The first requirement is to pay great attention to the quotation.  For
14895 more details, see @ref{Autoconf Language}, and @ref{M4 Quotation}.
14897 Do not try to invent new interfaces.  It is likely that there is a macro
14898 in Autoconf that resembles the macro you are defining: try to stick to
14899 this existing interface (order of arguments, default values, etc.).  We
14900 @emph{are} conscious that some of these interfaces are not perfect;
14901 nevertheless, when harmless, homogeneity should be preferred over
14902 creativity.
14904 Be careful about clashes both between M4 symbols and between shell
14905 variables.
14907 If you stick to the suggested M4 naming scheme (@pxref{Macro Names}),
14908 you are unlikely to generate conflicts.  Nevertheless, when you need to
14909 set a special value, @emph{avoid using a regular macro name}; rather,
14910 use an ``impossible'' name.  For instance, up to version 2.13, the macro
14911 @code{AC_SUBST} used to remember what @var{symbol} macros were already defined
14912 by setting @code{AC_SUBST_@var{symbol}}, which is a regular macro name.
14913 But since there is a macro named @code{AC_SUBST_FILE}, it was just
14914 impossible to @samp{AC_SUBST(FILE)}!  In this case,
14915 @code{AC_SUBST(@var{symbol})} or @code{_AC_SUBST(@var{symbol})} should
14916 have been used (yes, with the parentheses).
14917 @c or better yet, high-level macros such as @code{m4_expand_once}
14919 No Autoconf macro should ever enter the user-variable name space; i.e.,
14920 except for the variables that are the actual result of running the
14921 macro, all shell variables should start with @code{ac_}.  In
14922 addition, small macros or any macro that is likely to be embedded in
14923 other macros should be careful not to use obvious names.
14925 @cindex @code{dnl}
14926 Do not use @code{dnl} to introduce comments: most of the comments you
14927 are likely to write are either header comments which are not output
14928 anyway, or comments that should make their way into @file{configure}.
14929 There are exceptional cases where you do want to comment special M4
14930 constructs, in which case @code{dnl} is right, but keep in mind that it
14931 is unlikely.
14933 M4 ignores the leading blanks and newlines before each argument.
14934 Use this feature to
14935 indent in such a way that arguments are (more or less) aligned with the
14936 opening parenthesis of the macro being called.  For instance, instead of
14938 @example
14939 AC_CACHE_CHECK(for EMX OS/2 environment,
14940 ac_cv_emxos2,
14941 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
14942 [ac_cv_emxos2=yes], [ac_cv_emxos2=no])])
14943 @end example
14945 @noindent
14946 write
14948 @example
14949 AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
14950 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
14951                    [ac_cv_emxos2=yes],
14952                    [ac_cv_emxos2=no])])
14953 @end example
14955 @noindent
14956 or even
14958 @example
14959 AC_CACHE_CHECK([for EMX OS/2 environment],
14960                [ac_cv_emxos2],
14961                [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
14962                                                    [return __EMX__;])],
14963                                   [ac_cv_emxos2=yes],
14964                                   [ac_cv_emxos2=no])])
14965 @end example
14967 When using @code{AC_RUN_IFELSE} or any macro that cannot work when
14968 cross-compiling, provide a pessimistic value (typically @samp{no}).
14970 Feel free to use various tricks to prevent auxiliary tools, such as
14971 syntax-highlighting editors, from behaving improperly.  For instance,
14972 instead of:
14974 @example
14975 m4_bpatsubst([$1], [$"])
14976 @end example
14978 @noindent
14981 @example
14982 m4_bpatsubst([$1], [$""])
14983 @end example
14985 @noindent
14986 so that Emacsen do not open an endless ``string'' at the first quote.
14987 For the same reasons, avoid:
14989 @example
14990 test $[#] != 0
14991 @end example
14993 @noindent
14994 and use:
14996 @example
14997 test $[@@%:@@] != 0
14998 @end example
15000 @noindent
15001 Otherwise, the closing bracket would be hidden inside a @samp{#}-comment,
15002 breaking the bracket-matching highlighting from Emacsen.  Note the
15003 preferred style to escape from M4: @samp{$[1]}, @samp{$[@@]}, etc.  Do
15004 not escape when it is unnecessary.  Common examples of useless quotation
15005 are @samp{[$]$1} (write @samp{$$1}), @samp{[$]var} (use @samp{$var}),
15006 etc.  If you add portability issues to the picture, you'll prefer
15007 @samp{$@{1+"$[@@]"@}} to @samp{"[$]@@"}, and you'll prefer do something
15008 better than hacking Autoconf @code{:-)}.
15010 When using @command{sed}, don't use @option{-e} except for indenting
15011 purposes.  With the @code{s} and @code{y} commands, the preferred
15012 separator is @samp{/} unless @samp{/} itself might appear in the pattern
15013 or replacement, in which case you should use @samp{|}, or optionally
15014 @samp{,} if you know the pattern and replacement cannot contain a file
15015 name.  If none of these characters will do, choose a printable character
15016 that cannot appear in the pattern or replacement.  Characters from the
15017 set @samp{"#$&'()*;<=>?`|~} are good choices if the pattern or
15018 replacement might contain a file name, since they have special meaning
15019 to the shell and are less likely to occur in file names.
15021 @xref{Macro Definitions}, for details on how to define a macro.  If a
15022 macro doesn't use @code{AC_REQUIRE}, is expected to never be the object
15023 of an @code{AC_REQUIRE} directive, and macros required by other macros
15024 inside arguments do not need to be expanded before this macro, then
15025 use @code{m4_define}.  In case of doubt, use @code{AC_DEFUN}.
15026 Also take into account that public third-party macros need to use
15027 @code{AC_DEFUN} in order to be found by @command{aclocal}
15028 (@pxref{Extending aclocal,,, automake, GNU Automake}).
15029 All the @code{AC_REQUIRE} statements should be at the beginning of the
15030 macro, and each statement should be followed by @code{dnl}.
15032 You should not rely on the number of arguments: instead of checking
15033 whether an argument is missing, test that it is not empty.  It provides
15034 both a simpler and a more predictable interface to the user, and saves
15035 room for further arguments.
15037 Unless the macro is short, try to leave the closing @samp{])} at the
15038 beginning of a line, followed by a comment that repeats the name of the
15039 macro being defined.  This introduces an additional newline in
15040 @command{configure}; normally, that is not a problem, but if you want to
15041 remove it you can use @samp{[]dnl} on the last line.  You can similarly
15042 use @samp{[]dnl} after a macro call to remove its newline.  @samp{[]dnl}
15043 is recommended instead of @samp{dnl} to ensure that M4 does not
15044 interpret the @samp{dnl} as being attached to the preceding text or
15045 macro output.  For example, instead of:
15047 @example
15048 AC_DEFUN([AC_PATH_X],
15049 [AC_MSG_CHECKING([for X])
15050 AC_REQUIRE_CPP()
15051 @r{# @dots{}omitted@dots{}}
15052   AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
15053 fi])
15054 @end example
15056 @noindent
15057 you would write:
15059 @example
15060 AC_DEFUN([AC_PATH_X],
15061 [AC_REQUIRE_CPP()[]dnl
15062 AC_MSG_CHECKING([for X])
15063 @r{# @dots{}omitted@dots{}}
15064   AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
15065 fi[]dnl
15066 ])# AC_PATH_X
15067 @end example
15069 If the macro is long, try to split it into logical chunks.  Typically,
15070 macros that check for a bug in a function and prepare its
15071 @code{AC_LIBOBJ} replacement should have an auxiliary macro to perform
15072 this setup.  Do not hesitate to introduce auxiliary macros to factor
15073 your code.
15075 In order to highlight the recommended coding style, here is a macro
15076 written the old way:
15078 @example
15079 dnl Check for EMX on OS/2.
15080 dnl _AC_EMXOS2
15081 AC_DEFUN(_AC_EMXOS2,
15082 [AC_CACHE_CHECK(for EMX OS/2 environment, ac_cv_emxos2,
15083 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return __EMX__;)],
15084 ac_cv_emxos2=yes, ac_cv_emxos2=no)])
15085 test "x$ac_cv_emxos2" = xyes && EMXOS2=yes])
15086 @end example
15088 @noindent
15089 and the new way:
15091 @example
15092 # _AC_EMXOS2
15093 # ----------
15094 # Check for EMX on OS/2.
15095 m4_define([_AC_EMXOS2],
15096 [AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
15097 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
15098                    [ac_cv_emxos2=yes],
15099                    [ac_cv_emxos2=no])])
15100 test "x$ac_cv_emxos2" = xyes && EMXOS2=yes[]dnl
15101 ])# _AC_EMXOS2
15102 @end example
15107 @c ============================================= Portable Shell Programming
15109 @node Portable Shell
15110 @chapter Portable Shell Programming
15111 @cindex Portable shell programming
15113 When writing your own checks, there are some shell-script programming
15114 techniques you should avoid in order to make your code portable.  The
15115 Bourne shell and upward-compatible shells like the Korn shell and Bash
15116 have evolved over the years, and many features added to the original
15117 System7 shell are now supported on all interesting porting targets.
15118 However, the following discussion between Russ Allbery and Robert Lipe
15119 is worth reading:
15121 @noindent
15122 Russ Allbery:
15124 @quotation
15125 The GNU assumption that @command{/bin/sh} is the one and only shell
15126 leads to a permanent deadlock.  Vendors don't want to break users'
15127 existing shell scripts, and there are some corner cases in the Bourne
15128 shell that are not completely compatible with a Posix shell.  Thus,
15129 vendors who have taken this route will @emph{never} (OK@dots{}``never say
15130 never'') replace the Bourne shell (as @command{/bin/sh}) with a
15131 Posix shell.
15132 @end quotation
15134 @noindent
15135 Robert Lipe:
15137 @quotation
15138 This is exactly the problem.  While most (at least most System V's) do
15139 have a Bourne shell that accepts shell functions most vendor
15140 @command{/bin/sh} programs are not the Posix shell.
15142 So while most modern systems do have a shell @emph{somewhere} that meets the
15143 Posix standard, the challenge is to find it.
15144 @end quotation
15146 For this reason, part of the job of M4sh (@pxref{Programming in M4sh})
15147 is to find such a shell.  But to prevent trouble, if you're not using
15148 M4sh you should not take advantage of features that were added after Unix
15149 version 7, circa 1977 (@pxref{Systemology}); you should not use aliases,
15150 negated character classes, or even @command{unset}.  @code{#} comments,
15151 while not in Unix version 7, were retrofitted in the original Bourne
15152 shell and can be assumed to be part of the least common denominator.
15154 On the other hand, if you're using M4sh you can assume that the shell
15155 has the features that were added in SVR2 (circa 1984), including shell
15156 functions,
15157 @command{return}, @command{unset}, and I/O redirection for builtins.  For
15158 more information, refer to @uref{https://@/www.in-ulm.de/@/~mascheck/@/bourne/}.
15159 However, some pitfalls have to be avoided for portable use of these
15160 constructs; these will be documented in the rest of this chapter.
15161 See in particular @ref{Shell Functions} and @ref{Limitations of
15162 Builtins, , Limitations of Shell Builtins}.
15164 Some ancient systems have quite
15165 small limits on the length of the @samp{#!} line; for instance, 32
15166 bytes (not including the newline) on SunOS 4.
15167 However, these ancient systems are no longer of practical concern.
15169 The set of external programs you should run in a @command{configure} script
15170 is fairly small.  @xref{Utilities in Makefiles, , Utilities in
15171 Makefiles, standards, The GNU Coding Standards}, for the list.  This
15172 restriction allows users to start out with a fairly small set of
15173 programs and build the rest, avoiding too many interdependencies between
15174 packages.
15176 Some of these external utilities have a portable subset of features; see
15177 @ref{Limitations of Usual Tools}.
15179 There are other sources of documentation about shells.  The
15180 specification for the Posix
15181 @uref{https://@/pubs.opengroup.org/@/onlinepubs/@/9699919799/@/utilities/@/V3_chap02.html,
15182 Shell Command Language}, though more generous than the restrictive shell
15183 subset described above, is fairly portable nowadays.  Also please see
15184 @uref{http://@/www.faqs.org/@/faqs/@/unix-faq/@/shell/, the Shell FAQs}.
15186 @menu
15187 * Shellology::                  A zoology of shells
15188 * Invoking the Shell::          Invoking the shell as a command
15189 * Here-Documents::              Quirks and tricks
15190 * File Descriptors::            FDs and redirections
15191 * Signal Handling::             Shells, signals, and headaches
15192 * File System Conventions::     File names
15193 * Shell Pattern Matching::      Pattern matching
15194 * Shell Substitutions::         Variable and command expansions
15195 * Assignments::                 Varying side effects of assignments
15196 * Parentheses::                 Parentheses in shell scripts
15197 * Slashes::                     Slashes in shell scripts
15198 * Special Shell Variables::     Variables you should not change
15199 * Shell Functions::             What to look out for if you use them
15200 * Limitations of Builtins::     Portable use of not so portable /bin/sh
15201 * Limitations of Usual Tools::  Portable use of portable tools
15202 @end menu
15204 @node Shellology
15205 @section Shellology
15206 @cindex Shellology
15208 There are several families of shells, most prominently the Bourne family
15209 and the C shell family which are deeply incompatible.  If you want to
15210 write portable shell scripts, avoid members of the C shell family.  The
15211 @uref{http://@/www.faqs.org/@/faqs/@/unix-faq/@/shell/@/shell-differences/, the
15212 Shell difference FAQ} includes a small history of Posix shells, and a
15213 comparison between several of them.
15215 Below we describe some of the members of the Bourne shell family.
15217 @table @asis
15218 @item Ash
15219 @cindex Ash
15220 Ash is often used on GNU/Linux and BSD
15221 systems as a light-weight Bourne-compatible shell.  Ash 0.2 has some
15222 bugs that are fixed in the 0.3.x series, but portable shell scripts
15223 should work around them, since version 0.2 is still shipped with many
15224 GNU/Linux distributions.
15226 To be compatible with Ash 0.2:
15228 @itemize @minus
15229 @item
15230 don't use @samp{$?} after expanding empty or unset variables,
15231 or at the start of an @command{eval}:
15233 @example
15234 foo=
15235 false
15236 $foo
15237 echo "Do not use it: $?"
15238 false
15239 eval 'echo "Do not use it: $?"'
15240 @end example
15242 @item
15243 don't use command substitution within variable expansion:
15245 @example
15246 cat $@{FOO=`bar`@}
15247 @end example
15249 @item
15250 beware that single builtin substitutions are not performed by a
15251 subshell, hence their effect applies to the current shell!  @xref{Shell
15252 Substitutions}, item ``Command Substitution''.
15253 @end itemize
15255 @item Bash
15256 @cindex Bash
15257 To detect whether you are running Bash, test whether
15258 @code{BASH_VERSION} is set.  To require
15259 Posix compatibility, run @samp{set -o posix}.  @xref{Bash POSIX
15260 Mode, , Bash Posix Mode, bash, The GNU Bash Reference
15261 Manual}, for details.
15263 @item Bash 2.05 and later
15264 @cindex Bash 2.05 and later
15265 Versions 2.05 and later of Bash use a different format for the
15266 output of the @command{set} builtin, designed to make evaluating its
15267 output easier.  However, this output is not compatible with earlier
15268 versions of Bash (or with many other shells, probably).  So if
15269 you use Bash 2.05 or higher to execute @command{configure},
15270 you'll need to use Bash 2.05 for all other build tasks as well.
15272 @item Ksh
15273 @cindex Ksh
15274 @cindex Korn shell
15275 @prindex @samp{ksh}
15276 @prindex @samp{ksh88}
15277 @prindex @samp{ksh93}
15278 The Korn shell is compatible with the Bourne family and it mostly
15279 conforms to Posix.  It has two major variants commonly
15280 called @samp{ksh88} and @samp{ksh93}, named after the years of initial
15281 release.  It is usually called @command{ksh}, but is called @command{sh}
15282 on some hosts if you set your path appropriately.
15284 Solaris systems have three variants:
15285 @prindex @command{/usr/bin/ksh} on Solaris
15286 @command{/usr/bin/ksh} is @samp{ksh88}; it is
15287 standard on Solaris 2.0 and later.
15288 @prindex @command{/usr/xpg4/bin/sh} on Solaris
15289 @command{/usr/xpg4/bin/sh} is a Posix-compliant variant of
15290 @samp{ksh88}; it is standard on Solaris 9 and later.
15291 @prindex @command{/usr/dt/bin/dtksh} on Solaris
15292 @command{/usr/dt/bin/dtksh} is @samp{ksh93}.
15293 Variants that are not standard may be parts of optional
15294 packages.  There is no extra charge for these packages, but they are
15295 not part of a minimal OS install and therefore some installations may
15296 not have it.
15298 Starting with Tru64 Version 4.0, the Korn shell @command{/usr/bin/ksh}
15299 is also available as @command{/usr/bin/posix/sh}.  If the environment
15300 variable @env{BIN_SH} is set to @code{xpg4}, subsidiary invocations of
15301 the standard shell conform to Posix.
15303 @item Pdksh
15304 @prindex @samp{pdksh}
15305 A public-domain clone of the Korn shell called @command{pdksh} is widely
15306 available: it has most of the @samp{ksh88} features along with a few of
15307 its own.  It usually sets @code{KSH_VERSION}, except if invoked as
15308 @command{/bin/sh} on OpenBSD, and similarly to Bash you can require
15309 Posix compatibility by running @samp{set -o posix}.  Unfortunately, with
15310 @command{pdksh} 5.2.14 (the latest stable version as of January 2007)
15311 Posix mode is buggy and causes @command{pdksh} to depart from Posix in
15312 at least one respect, see @ref{Shell Substitutions}.
15314 @item Zsh
15315 @cindex Zsh
15316 To detect whether you are running @command{zsh}, test whether
15317 @code{ZSH_VERSION} is set.  By default @command{zsh} is @emph{not}
15318 compatible with the Bourne shell: you must execute @samp{emulate sh},
15319 and for @command{zsh} versions before 3.1.6-dev-18 you must also
15320 set @code{NULLCMD} to @samp{:}.  @xref{Compatibility, , Compatibility,
15321 zsh, The Z Shell Manual}, for details.
15323 The default Mac OS X @command{sh} was originally Zsh; it was changed to
15324 Bash in Mac OS X 10.2.
15325 @end table
15327 @node Invoking the Shell
15328 @section Invoking the Shell
15329 @cindex invoking the shell
15330 @cindex shell invocation
15332 The Korn shell (up to at least version M-12/28/93d) has a bug when
15333 invoked on a file whose name does not contain a slash.  It first
15334 searches for the file's name in @env{PATH}, and if found it executes
15335 that rather than the original file.  For example, assuming there is a
15336 binary executable @file{/usr/bin/script} in your @env{PATH}, the last
15337 command in the following example fails because the Korn shell finds
15338 @file{/usr/bin/script} and refuses to execute it as a shell script:
15340 @example
15341 $ @kbd{touch xxyzzyz script}
15342 $ @kbd{ksh xxyzzyz}
15343 $ @kbd{ksh ./script}
15344 $ @kbd{ksh script}
15345 ksh: script: cannot execute
15346 @end example
15348 Bash 2.03 has a bug when invoked with the @option{-c} option: if the
15349 option-argument ends in backslash-newline, Bash incorrectly reports a
15350 syntax error.  The problem does not occur if a character follows the
15351 backslash:
15353 @example
15354 $ @kbd{$ bash -c 'echo foo \}
15355 > @kbd{'}
15356 bash: -c: line 2: syntax error: unexpected end of file
15357 $ @kbd{bash -c 'echo foo \}
15358 > @kbd{ '}
15360 @end example
15362 @noindent
15363 @xref{Backslash-Newline-Empty}, for how this can cause problems in makefiles.
15365 @node Here-Documents
15366 @section Here-Documents
15367 @cindex Here-documents
15368 @cindex Shell here-documents
15370 Don't rely on @samp{\} being preserved just because it has no special
15371 meaning together with the next symbol.  In the native @command{sh}
15372 on OpenBSD 2.7 @samp{\"} expands to @samp{"} in here-documents with
15373 unquoted delimiter.  As a general rule, if @samp{\\} expands to @samp{\}
15374 use @samp{\\} to get @samp{\}.
15376 With OpenBSD 2.7's @command{sh}
15378 @example
15379 @group
15380 $ @kbd{cat <<EOF
15381 > \" \\
15382 > EOF}
15383 " \
15384 @end group
15385 @end example
15387 @noindent
15388 and with Bash:
15390 @example
15391 @group
15392 bash-2.04$ @kbd{cat <<EOF
15393 > \" \\
15394 > EOF}
15395 \" \
15396 @end group
15397 @end example
15399 Using command substitutions in a here-document that is fed to a shell
15400 function is not portable.  For example, with Solaris 10 @command{/bin/sh}:
15402 @example
15403 $ @kbd{kitty () @{ cat; @}}
15404 $ @kbd{kitty <<EOF
15405 > `echo ok`
15406 > EOF}
15407 /tmp/sh199886: cannot open
15408 $ @kbd{echo $?}
15410 @end example
15412 Some shells mishandle large here-documents: for example,
15413 Solaris 10 @command{dtksh} and the UnixWare 7.1.1 Posix shell, which are
15414 derived from Korn shell version M-12/28/93d, mishandle braced variable
15415 expansion that crosses a 1024- or 4096-byte buffer boundary
15416 within a here-document.  Only the part of the variable name after the boundary
15417 is used.  For example, @code{$@{variable@}} could be replaced by the expansion
15418 of @code{$@{ble@}}.  If the end of the variable name is aligned with the block
15419 boundary, the shell reports an error, as if you used @code{$@{@}}.
15420 Instead of @code{$@{variable-default@}}, the shell may expand
15421 @code{$@{riable-default@}}, or even @code{$@{fault@}}.  This bug can often
15422 be worked around by omitting the braces: @code{$variable}.  The bug was
15423 fixed in
15424 @samp{ksh93g} (1998-04-30) but as of 2006 many operating systems were
15425 still shipping older versions with the bug.
15427 Empty here-documents are not portable either; with the following code,
15428 @command{zsh} up to at least version 4.3.10 creates a file with a single
15429 newline, whereas other shells create an empty file:
15431 @example
15432 cat >file <<EOF
15434 @end example
15436 Many shells (including the Bourne shell) implement here-documents
15437 inefficiently.  In particular, some shells can be extremely inefficient when
15438 a single statement contains many here-documents.  For instance if your
15439 @file{configure.ac} includes something like:
15441 @example
15442 @group
15443 if <cross_compiling>; then
15444   assume this and that
15445 else
15446   check this
15447   check that
15448   check something else
15449   @dots{}
15450   on and on forever
15451   @dots{}
15453 @end group
15454 @end example
15456 A shell parses the whole @code{if}/@code{fi} construct, creating
15457 temporary files for each here-document in it.  Some shells create links
15458 for such here-documents on every @code{fork}, so that the clean-up code
15459 they had installed correctly removes them.  It is creating the links
15460 that can take the shell forever.
15462 Moving the tests out of the @code{if}/@code{fi}, or creating multiple
15463 @code{if}/@code{fi} constructs, would improve the performance
15464 significantly.  Anyway, this kind of construct is not exactly the
15465 typical use of Autoconf.  In fact, it's even not recommended, because M4
15466 macros can't look into shell conditionals, so we may fail to expand a
15467 macro when it was expanded before in a conditional path, and the
15468 condition turned out to be false at runtime, and we end up not
15469 executing the macro at all.
15471 Be careful with the use of @samp{<<-} to unindent here-documents.  The
15472 behavior is only portable for stripping leading @key{TAB}s, and things
15473 can silently break if an overzealous editor converts to using leading
15474 spaces (not all shells are nice enough to warn about unterminated
15475 here-documents).
15477 @example
15478 $ @kbd{printf 'cat <<-x\n\t1\n\t 2\n\tx\n' | bash && echo done}
15481 done
15482 $ @kbd{printf 'cat <<-x\n 1\n  2\n x\n' | bash-3.2 && echo done}
15484   2
15486 done
15487 @end example
15489 @node File Descriptors
15490 @section File Descriptors
15491 @cindex Descriptors
15492 @cindex File descriptors
15493 @cindex Shell file descriptors
15495 Most shells, if not all (including Bash, Zsh, Ash), output traces on
15496 stderr, even for subshells.  This might result in undesirable content
15497 if you meant to capture the standard-error output of the inner command:
15499 @example
15500 $ @kbd{ash -x -c '(eval "echo foo >&2") 2>stderr'}
15501 $ @kbd{cat stderr}
15502 + eval echo foo >&2
15503 + echo foo
15505 $ @kbd{bash -x -c '(eval "echo foo >&2") 2>stderr'}
15506 $ @kbd{cat stderr}
15507 + eval 'echo foo >&2'
15508 ++ echo foo
15510 $ @kbd{zsh -x -c '(eval "echo foo >&2") 2>stderr'}
15511 @i{# Traces on startup files deleted here.}
15512 $ @kbd{cat stderr}
15513 +zsh:1> eval echo foo >&2
15514 +zsh:1> echo foo
15516 @end example
15518 @noindent
15519 One workaround is to grep out uninteresting lines, hoping not to remove
15520 good ones.
15522 If you intend to redirect both standard error and standard output,
15523 redirect standard output first.  This works better with HP-UX,
15524 since its shell mishandles tracing if standard error is redirected
15525 first:
15527 @example
15528 $ @kbd{sh -x -c ': 2>err >out'}
15529 + :
15530 + 2> err $ @kbd{cat err}
15531 1> out
15532 @end example
15534 Don't try to redirect the standard error of a command substitution.  It
15535 must be done @emph{inside} the command substitution.  When running
15536 @samp{: `cd /zorglub` 2>/dev/null} expect the error message to
15537 escape, while @samp{: `cd /zorglub 2>/dev/null`} works properly.
15539 On the other hand, some shells, such as Solaris or FreeBSD
15540 @command{/bin/sh}, warn about missing programs before performing
15541 redirections.  Therefore, to silently check whether a program exists, it
15542 is necessary to perform redirections on a subshell or brace group:
15543 @example
15544 $ @kbd{/bin/sh -c 'nosuch 2>/dev/null'}
15545 nosuch: not found
15546 $ @kbd{/bin/sh -c '(nosuch) 2>/dev/null'}
15547 $ @kbd{/bin/sh -c '@{ nosuch; @} 2>/dev/null'}
15548 $ @kbd{bash -c 'nosuch 2>/dev/null'}
15549 @end example
15551 FreeBSD 6.2 sh may mix the trace output lines from the statements in a
15552 shell pipeline.
15554 It is worth noting that Zsh (but not Ash nor Bash) makes it possible
15555 in assignments though: @samp{foo=`cd /zorglub` 2>/dev/null}.
15557 Some shells, like @command{ash}, don't recognize bi-directional
15558 redirection (@samp{<>}).  And even on shells that recognize it, it is
15559 not portable to use on fifos: Posix does not require read-write support
15560 for named pipes, and Cygwin does not support it:
15562 @example
15563 $ @kbd{mkfifo fifo}
15564 $ @kbd{exec 5<>fifo}
15565 $ @kbd{echo hi >&5}
15566 bash: echo: write error: Communication error on send
15567 @end example
15569 @noindent
15570 Furthermore, versions of @command{dash} before 0.5.6 mistakenly truncate
15571 regular files when using @samp{<>}:
15573 @example
15574 $ @kbd{echo a > file}
15575 $ @kbd{bash -c ': 1<>file'; cat file}
15577 $ @kbd{dash -c ': 1<>file'; cat file}
15578 $ rm a
15579 @end example
15581 When catering to old systems, don't redirect the same file descriptor
15582 several times, as you are doomed to failure under Ultrix.
15584 @example
15585 ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
15586 UWS V4.4 (Rev. 11)
15587 $ @kbd{eval 'echo matter >fullness' >void}
15588 illegal io
15589 $ @kbd{eval '(echo matter >fullness)' >void}
15590 illegal io
15591 $ @kbd{(eval '(echo matter >fullness)') >void}
15592 Ambiguous output redirect.
15593 @end example
15595 @noindent
15596 In each case the expected result is of course @file{fullness} containing
15597 @samp{matter} and @file{void} being empty.  However, this bug is
15598 probably not of practical concern to modern platforms.
15600 Solaris 10 @command{sh} will try to optimize away a @command{:} command
15601 (even if it is redirected) in a loop after the first iteration, or in a
15602 shell function after the first call:
15604 @example
15605 $ @kbd{for i in 1 2 3 ; do : >x$i; done}
15606 $ @kbd{ls x*}
15608 $ @kbd{f () @{ : >$1; @}; f y1; f y2; f y3;}
15609 $ @kbd{ls y*}
15611 @end example
15613 @noindent
15614 As a workaround, @command{echo} or @command{eval} can be used.
15616 Don't rely on file descriptors 0, 1, and 2 remaining closed in a
15617 subsidiary program.  If any of these descriptors is closed, the
15618 operating system may open an unspecified file for the descriptor in the
15619 new process image.  Posix 2008 says this may be done only if the
15620 subsidiary program is set-user-ID or set-group-ID, but HP-UX 11.23 does
15621 it even for ordinary programs, and the next version of Posix will allow
15622 HP-UX behavior.
15624 If you want a file descriptor above 2 to be inherited into a child
15625 process, then you must use redirections specific to that command or a
15626 containing subshell or command group, rather than relying on
15627 @command{exec} in the shell. In @command{ksh} as well as HP-UX
15628 @command{sh}, file descriptors above 2 which are opened using
15629 @samp{exec @var{n}>file} are closed by a subsequent @samp{exec} (such as
15630 that involved in the fork-and-exec which runs a program or script):
15632 @example
15633 $ @kbd{echo 'echo hello >&5' >k}
15634 $ @kbd{/bin/sh -c 'exec 5>t; ksh ./k; exec 5>&-; cat t}
15635 hello
15636 $ @kbd{bash -c 'exec 5>t; ksh ./k; exec 5>&-; cat t}
15637 hello
15638 $ @kbd{ksh -c 'exec 5>t; ksh ./k; exec 5>&-; cat t}
15639 ./k[1]: 5: cannot open [Bad file number]
15640 $ @kbd{ksh -c '(ksh ./k) 5>t; cat t'}
15641 hello
15642 $ @kbd{ksh -c '@{ ksh ./k; @} 5>t; cat t'}
15643 hello
15644 $ @kbd{ksh -c '5>t ksh ./k; cat t}
15645 hello
15646 @end example
15648 Don't rely on duplicating a closed file descriptor to cause an
15649 error.  With Solaris @command{/bin/sh}, failed duplication is silently
15650 ignored, which can cause unintended leaks to the original file
15651 descriptor.  In this example, observe the leak to standard output:
15653 @example
15654 $ @kbd{bash -c 'echo hi >&3' 3>&-; echo $?}
15655 bash: 3: Bad file descriptor
15657 $ @kbd{/bin/sh -c 'echo hi >&3' 3>&-; echo $?}
15660 @end example
15662 Fortunately, an attempt to close an already closed file descriptor will
15663 portably succeed.  Likewise, it is safe to use either style of
15664 @samp{@var{n}<&-} or @samp{@var{n}>&-} for closing a file descriptor,
15665 even if it doesn't match the read/write mode that the file descriptor
15666 was opened with.
15668 DOS variants cannot rename or remove open files, such as in
15669 @samp{mv foo bar >foo} or @samp{rm foo >foo}, even though this is
15670 perfectly portable among Posix hosts.
15672 A few ancient systems reserved some file descriptors.  By convention,
15673 file descriptor 3 was opened to @file{/dev/tty} when you logged into
15674 Eighth Edition (1985) through Tenth Edition Unix (1989).  File
15675 descriptor 4 had a special use on the Stardent/Kubota Titan (circa
15676 1990), though we don't now remember what it was.  Both these systems are
15677 obsolete, so it's now safe to treat file descriptors 3 and 4 like any
15678 other file descriptors.
15680 On the other hand, you can't portably use multi-digit file descriptors.
15681 Solaris @command{ksh} doesn't understand any file descriptor larger than
15682 @samp{9}:
15684 @example
15685 $ @kbd{bash -c 'exec 10>&-'; echo $?}
15687 $ @kbd{ksh -c 'exec 9>&-'; echo $?}
15689 $ @kbd{ksh -c 'exec 10>&-'; echo $?}
15690 ksh[1]: exec: 10: not found
15692 @end example
15694 @c <https://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
15695 @node Signal Handling
15696 @section Signal Handling
15697 @cindex Signal handling in the shell
15698 @cindex Signals, shells and
15700 Portable handling of signals within the shell is another major source of
15701 headaches.  This is worsened by the fact that various different, mutually
15702 incompatible approaches are possible in this area, each with its
15703 distinctive merits and demerits.  A detailed description of these possible
15704 approaches, as well as of their pros and cons, can be found in
15705 @uref{https://www.cons.org/cracauer/sigint.html, this article}.
15707 Solaris 10 @command{/bin/sh} automatically traps most signals by default;
15708 the shell still exits with error upon termination by one of those signals,
15709 but in such a case the exit status might be somewhat unexpected (even if
15710 allowed by POSIX, strictly speaking):
15711 @c FIXME: We had a reference for this behavior but the website no longer
15712 @c exists and the page is not in the Internet Archive. --zw 2020-07-10.
15714 @example
15715 $ @kbd{bash -c 'kill -1 $$'; echo $?} # Will exit 128 + (signal number).
15716 Hangup
15718 $ @kbd{/bin/ksh -c 'kill -15 $$'; echo $?} # Likewise.
15719 Terminated
15721 $ @kbd{for sig in 1 2 3 15; do}
15722 > @kbd{  echo $sig:}
15723 > @kbd{  /bin/sh -c "kill -$s \$\$"; echo $?}
15724 > @kbd{done}
15725 signal 1:
15726 Hangup
15728 signal 2:
15730 signal 3:
15732 signal 15:
15734 @end example
15736 This gets even worse if one is using the POSIX ``wait'' interface to get
15737 details about the shell process terminations: it will result in the shell
15738 having exited normally, rather than by receiving a signal.
15740 @example
15741 $ @kbd{cat > foo.c <<'END'}
15742 #include <stdio.h>    /* for printf */
15743 #include <stdlib.h>   /* for system */
15744 #include <sys/wait.h> /* for WIF* macros */
15745 int main(void)
15747   int status = system ("kill -15 $$");
15748   printf ("Terminated by signal: %s\n",
15749           WIFSIGNALED (status) ? "yes" : "no");
15750   printf ("Exited normally: %s\n",
15751           WIFEXITED (status) ? "yes" : "no");
15752   return 0;
15755 @c $$ font-lock
15756 $ @kbd{cc -o foo foo.c}
15757 $ @kbd{./a.out} # On GNU/Linux
15758 Terminated by signal: no
15759 Exited normally: yes
15760 $ @kbd{./a.out} # On Solaris 10
15761 Terminated by signal: yes
15762 Exited normally: no
15763 @end example
15765 Various shells seem to handle @code{SIGQUIT} specially: they ignore it even
15766 if it is not blocked, and even if the shell is not running interactively
15767 (in fact, even if the shell has no attached tty); among these shells
15768 are at least Bash (from version 2 onward), Zsh 4.3.12, Solaris 10
15769 @code{/bin/ksh} and @code{/usr/xpg4/bin/sh}, and AT&T @code{ksh93} (2011).
15770 Still, @code{SIGQUIT} seems to be trappable quite portably within all
15771 these shells.  OTOH, some other shells doesn't special-case the handling
15772 of @code{SIGQUIT}; among these shells are at least @code{pdksh} 5.2.14,
15773 Solaris 10 and NetBSD 5.1 @code{/bin/sh}, and the Almquist Shell 0.5.5.1.
15775 Some shells (especially Korn shells and derivatives) might try to
15776 propagate to themselves a signal that has killed a child process; this is
15777 not a bug, but a conscious design choice (although its overall value might
15778 be debatable).  The exact details of how this is attained vary from shell
15779 to shell.  For example, upon running @code{perl -e 'kill 2, $$'}, after
15780 the perl process has been interrupted, AT&T @code{ksh93} (2011) will
15781 proceed to send itself a @code{SIGINT}, while Solaris 10 @code{/bin/ksh}
15782 and @code{/usr/xpg4/bin/sh} will proceed to exit with status 130 (i.e.,
15783 128 + 2). In any case, if there is an active trap associated with
15784 @code{SIGINT}, those shells will correctly execute it.
15786 @c See: <https://www.austingroupbugs.net/view.php?id=51>
15787 Some Korn shells, when a child process die due receiving a signal with
15788 signal number @var{n}, can leave in @samp{$?} an exit status of
15789 256+@var{n} instead of the more common 128+@var{n}.  Observe the
15790 difference between AT&T @code{ksh93} (2011) and @code{bash} 4.1.5 on
15791 Debian:
15793 @example
15794 $ @kbd{/bin/ksh -c 'sh -c "kill -1 \$\$"; echo $?'}
15795 /bin/ksh: line 1: 7837: Hangup
15797 $ @kbd{/bin/bash -c 'sh -c "kill -1 \$\$"; echo $?'}
15798 /bin/bash: line 1:  7861 Hangup        (sh -c "kill -1 \$\$")
15800 @end example
15802 @noindent
15803 This @command{ksh} behavior is allowed by POSIX, if implemented with
15804 due care; see this @uref{https://www.austingroupbugs.net/view.php?id=51,
15805 Austin Group discussion} for more background.  However, if it is not
15806 implemented with proper care, such a behavior might cause problems
15807 in some corner cases.  To see why, assume we have a ``wrapper'' script
15808 like this:
15810 @example
15811 #!/bin/sh
15812 # Ignore some signals in the shell only, not in its child processes.
15813 trap : 1 2 13 15
15814 wrapped_command "$@@"
15815 ret=$?
15816 other_command
15817 exit $ret
15818 @end example
15820 @noindent
15821 If @command{wrapped_command} is interrupted by a @code{SIGHUP} (which
15822 has signal number 1), @code{ret} will be set to 257.  Unless the
15823 @command{exit} shell builtin is smart enough to understand that such
15824 a value can only have originated from a signal, and adjust the final
15825 wait status of the shell appropriately, the value 257 will just get
15826 truncated to 1 by the closing @code{exit} call, so that a caller of
15827 the script will have no way to determine that termination by a signal
15828 was involved.  Observe the different behavior of AT&T @code{ksh93}
15829 (2011) and @code{bash} 4.1.5 on Debian:
15831 @example
15832 $ @kbd{cat foo.sh}
15833 #!/bin/sh
15834 sh -c 'kill -1 $$'
15835 ret=$?
15836 echo $ret
15837 exit $ret
15838 $ @kbd{/bin/ksh foo.sh; echo $?}
15839 foo.sh: line 2: 12479: Hangup
15842 $ @kbd{/bin/bash foo.sh; echo $?}
15843 foo.sh: line 2: 12487 Hangup        (sh -c 'kill -1 $$')
15846 @end example
15848 @node File System Conventions
15849 @section File System Conventions
15850 @cindex File system conventions
15852 Autoconf uses shell-script processing extensively, so the file names
15853 that it processes should not contain characters that are special to the
15854 shell.  Special characters include space, tab, newline, NUL, and
15855 the following:
15857 @example
15858 " # $ & ' ( ) * ; < = > ? [ \ ` |
15859 @end example
15861 Also, file names should not begin with @samp{~} or @samp{-}, and should
15862 contain neither @samp{-} immediately after @samp{/} nor @samp{~}
15863 immediately after @samp{:}.  On Posix-like platforms, directory names
15864 should not contain @samp{:}, as this runs afoul of @samp{:} used as the
15865 path separator.
15867 These restrictions apply not only to the files that you distribute, but
15868 also to the absolute file names of your source, build, and destination
15869 directories.
15871 On some Posix-like platforms, @samp{!} and @samp{^} are special too, so
15872 they should be avoided.
15874 Posix lets implementations treat leading @file{//} specially, but
15875 requires leading @file{///} and beyond to be equivalent to @file{/}.
15876 Most Unix variants treat @file{//} like @file{/}.  However, some treat
15877 @file{//} as a ``super-root'' that can provide access to files that are
15878 not otherwise reachable from @file{/}.  The super-root tradition began
15879 with Apollo Domain/OS, which died out long ago, but unfortunately Cygwin
15880 has revived it.
15882 While @command{autoconf} and friends are usually run on some Posix
15883 variety, they can be used on other systems, most notably DOS
15884 variants.  This impacts several assumptions regarding file names.
15886 @noindent
15887 For example, the following code:
15889 @example
15890 case $foo_dir in
15891   /*) # Absolute
15892      ;;
15893   *)
15894      foo_dir=$dots$foo_dir ;;
15895 esac
15896 @end example
15898 @noindent
15899 fails to properly detect absolute file names on those systems, because
15900 they can use a drivespec, and usually use a backslash as directory
15901 separator.  If you want to be portable to DOS variants (at the
15902 price of rejecting valid but oddball Posix file names like @file{a:\b}),
15903 you can check for absolute file names like this:
15905 @cindex absolute file names, detect
15906 @example
15907 case $foo_dir in
15908   [\\/]* | ?:[\\/]* ) # Absolute
15909      ;;
15910   *)
15911      foo_dir=$dots$foo_dir ;;
15912 esac
15913 @end example
15915 @noindent
15916 Make sure you quote the brackets if appropriate and keep the backslash as
15917 first character (@pxref{case, , Limitations of Shell Builtins}).
15919 Also, because the colon is used as part of a drivespec, these systems don't
15920 use it as path separator.  When creating or accessing paths, you can use the
15921 @code{PATH_SEPARATOR} output variable instead.  @command{configure} sets this
15922 to the appropriate value for the build system (@samp{:} or @samp{;}) when it
15923 starts up.
15925 File names need extra care as well.  While DOS variants
15926 that are Posixy enough to run @command{autoconf} (such as DJGPP)
15927 are usually able to handle long file names properly, there are still
15928 limitations that can seriously break packages.  Several of these issues
15929 can be easily detected by the
15930 @uref{https://@/ftp.gnu.org/@/gnu/@/non-gnu/@/doschk/@/doschk-1.1.tar.gz, doschk}
15931 package.
15933 A short overview follows; problems are marked with SFN/LFN to
15934 indicate where they apply: SFN means the issues are only relevant to
15935 plain DOS, not to DOS under Microsoft Windows
15936 variants, while LFN identifies problems that exist even under
15937 Microsoft Windows variants.
15939 @table @asis
15940 @item No multiple dots (SFN)
15941 DOS cannot handle multiple dots in file names.  This is an especially
15942 important thing to remember when building a portable configure script,
15943 as @command{autoconf} uses a .in suffix for template files.
15945 This is perfectly OK on Posix variants:
15947 @example
15948 AC_CONFIG_HEADERS([config.h])
15949 AC_CONFIG_FILES([source.c foo.bar])
15950 AC_OUTPUT
15951 @end example
15953 @noindent
15954 but it causes problems on DOS, as it requires @samp{config.h.in},
15955 @samp{source.c.in} and @samp{foo.bar.in}.  To make your package more portable
15956 to DOS-based environments, you should use this instead:
15958 @example
15959 AC_CONFIG_HEADERS([config.h:config.hin])
15960 AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])
15961 AC_OUTPUT
15962 @end example
15964 @item No leading dot (SFN)
15965 DOS cannot handle file names that start with a dot.  This is usually
15966 not important for @command{autoconf}.
15968 @item Case insensitivity (LFN)
15969 DOS is case insensitive, so you cannot, for example, have both a
15970 file called @samp{INSTALL} and a directory called @samp{install}.  This
15971 also affects @command{make}; if there's a file called @samp{INSTALL} in
15972 the directory, @samp{make install} does nothing (unless the
15973 @samp{install} target is marked as PHONY).
15975 @item The 8+3 limit (SFN)
15976 Because the DOS file system only stores the first 8 characters of
15977 the file name and the first 3 of the extension, those must be unique.
15978 That means that @file{foobar-part1.c}, @file{foobar-part2.c} and
15979 @file{foobar-prettybird.c} all resolve to the same file name
15980 (@file{FOOBAR-P.C}).  The same goes for @file{foo.bar} and
15981 @file{foo.bartender}.
15983 The 8+3 limit is not usually a problem under Microsoft Windows, as it
15984 uses numeric
15985 tails in the short version of file names to make them unique.  However, a
15986 registry setting can turn this behavior off.  While this makes it
15987 possible to share file trees containing long file names between SFN
15988 and LFN environments, it also means the above problem applies there
15989 as well.
15991 @item Invalid characters (LFN)
15992 Some characters are invalid in DOS file names, and should therefore
15993 be avoided.  In a LFN environment, these are @samp{/}, @samp{\},
15994 @samp{?}, @samp{*}, @samp{:}, @samp{<}, @samp{>}, @samp{|} and @samp{"}.
15995 In a SFN environment, other characters are also invalid.  These
15996 include @samp{+}, @samp{,}, @samp{[} and @samp{]}.
15998 @item Invalid names (LFN)
15999 Some DOS file names are reserved, and cause problems if you
16000 try to use files with those names.  These names include @file{CON},
16001 @file{AUX}, @file{COM1}, @file{COM2}, @file{COM3}, @file{COM4},
16002 @file{LPT1}, @file{LPT2}, @file{LPT3}, @file{NUL}, and @file{PRN}.
16003 File names are case insensitive, so even names like
16004 @file{aux/config.guess} are disallowed.
16006 @end table
16008 @node Shell Pattern Matching
16009 @section Shell Pattern Matching
16010 @cindex Shell pattern matching
16012 Nowadays portable patterns can use negated character classes like
16013 @samp{[!-aeiou]}.  The older syntax @samp{[^-aeiou]} is supported by
16014 some shells but not others; hence portable scripts should never use
16015 @samp{^} as the first character of a bracket pattern.
16017 Outside the C locale, patterns like @samp{[a-z]} are problematic since
16018 they may match characters that are not lower-case letters.
16020 @node Shell Substitutions
16021 @section Shell Substitutions
16022 @cindex Shell substitutions
16024 Contrary to a persistent urban legend, the Bourne shell does not
16025 systematically split variables and back-quoted expressions, in particular
16026 on the right-hand side of assignments and in the argument of @code{case}.
16027 For instance, the following code:
16029 @example
16030 case "$given_srcdir" in
16031 .)  top_srcdir="`echo "$dots" | sed 's|/$||'`" ;;
16032 *)  top_srcdir="$dots$given_srcdir" ;;
16033 esac
16034 @end example
16036 @noindent
16037 is more readable when written as:
16039 @example
16040 case $given_srcdir in
16041 .)  top_srcdir=`echo "$dots" | sed 's|/$||'` ;;
16042 *)  top_srcdir=$dots$given_srcdir ;;
16043 esac
16044 @end example
16046 @noindent
16047 and in fact it is even @emph{more} portable: in the first case of the
16048 first attempt, the computation of @code{top_srcdir} is not portable,
16049 since not all shells properly understand @code{"`@dots{}"@dots{}"@dots{}`"},
16050 for example Solaris 10 ksh:
16052 @example
16053 $ @kbd{foo="`echo " bar" | sed 's, ,,'`"}
16054 ksh: : cannot execute
16055 ksh: bar | sed 's, ,,': cannot execute
16056 @end example
16058 @noindent
16059 Posix does not specify behavior for this sequence.  On the other hand,
16060 behavior for @code{"`@dots{}\"@dots{}\"@dots{}`"} is specified by Posix,
16061 but in practice, not all shells understand it the same way: pdksh 5.2.14
16062 prints spurious quotes when in Posix mode:
16064 @example
16065 $ @kbd{echo "`echo \"hello\"`"}
16066 hello
16067 $ @kbd{set -o posix}
16068 $ @kbd{echo "`echo \"hello\"`"}
16069 "hello"
16070 @end example
16072 @noindent
16073 There is just no portable way to use double-quoted strings inside
16074 double-quoted back-quoted expressions (pfew!).
16076 Bash 4.1 has a bug where quoted empty strings adjacent to unquoted
16077 parameter expansions are elided during word splitting.  Meanwhile, zsh
16078 does not perform word splitting except when in Bourne compatibility
16079 mode.  In the example below, the correct behavior is to have five
16080 arguments to the function, and exactly two spaces on either side of the
16081 middle @samp{-}, since word splitting collapses multiple spaces in
16082 @samp{$f} but leaves empty arguments intact.
16084 @example
16085 $ @kbd{bash -c 'n() @{ echo "$#$@@"; @}; f="  -  "; n - ""$f"" -'}
16086 3- - -
16087 $ @kbd{ksh -c 'n() @{ echo "$#$@@"; @}; f="  -  "; n - ""$f"" -'}
16088 5-  -  -
16089 $ @kbd{zsh -c 'n() @{ echo "$#$@@"; @}; f="  -  "; n - ""$f"" -'}
16090 3-   -   -
16091 $ @kbd{zsh -c 'emulate sh;}
16092 > @kbd{n() @{ echo "$#$@@"; @}; f="  -  "; n - ""$f"" -'}
16093 5-  -  -
16094 @end example
16096 @noindent
16097 You can work around this by doing manual word splitting, such as using
16098 @samp{"$str" $list} rather than @samp{"$str"$list}.
16100 There are also portability pitfalls with particular expansions:
16102 @table @code
16103 @item $@@
16104 @cindex @code{"$@@"}
16105 One of the most famous shell-portability issues is related to
16106 @samp{"$@@"}.  When there are no positional arguments, Posix says
16107 that @samp{"$@@"} is supposed to be equivalent to nothing, but the
16108 original Unix version 7 Bourne shell treated it as equivalent to
16109 @samp{""} instead, and this behavior survives in later implementations
16110 like Digital Unix 5.0.
16112 The traditional way to work around this portability problem is to use
16113 @samp{$@{1+"$@@"@}}.  Unfortunately this method does not work with
16114 Zsh (3.x and 4.x), which is used on Mac OS X@.  When emulating
16115 the Bourne shell, Zsh performs word splitting on @samp{$@{1+"$@@"@}}:
16117 @example
16118 zsh $ @kbd{emulate sh}
16119 zsh $ @kbd{for i in "$@@"; do echo $i; done}
16120 Hello World
16122 zsh $ @kbd{for i in $@{1+"$@@"@}; do echo $i; done}
16123 Hello
16124 World
16126 @end example
16128 @noindent
16129 Zsh handles plain @samp{"$@@"} properly, but we can't use plain
16130 @samp{"$@@"} because of the portability problems mentioned above.
16131 One workaround relies on Zsh's ``global aliases'' to convert
16132 @samp{$@{1+"$@@"@}} into @samp{"$@@"} by itself:
16134 @example
16135 test $@{ZSH_VERSION+y@} && alias -g '$@{1+"$@@"@}'='"$@@"'
16136 @end example
16138 Zsh only recognizes this alias when a shell word matches it exactly;
16139 @samp{"foo"$@{1+"$@@"@}} remains subject to word splitting.  Since this
16140 case always yields at least one shell word, use plain @samp{"$@@"}.
16142 A more conservative workaround is to avoid @samp{"$@@"} if it is
16143 possible that there may be no positional arguments.  For example,
16144 instead of:
16146 @example
16147 cat conftest.c "$@@"
16148 @end example
16150 you can use this instead:
16152 @example
16153 case $# in
16154 0) cat conftest.c;;
16155 *) cat conftest.c "$@@";;
16156 esac
16157 @end example
16159 Autoconf macros often use the @command{set} command to update
16160 @samp{$@@}, so if you are writing shell code intended for
16161 @command{configure} you should not assume that the value of @samp{$@@}
16162 persists for any length of time.
16165 @item $@{10@}
16166 @cindex positional parameters
16167 The 10th, 11th, @dots{} positional parameters can be accessed only after
16168 a @code{shift}.  The 7th Edition shell reported an error if given
16169 @code{$@{10@}}, and
16170 Solaris 10 @command{/bin/sh} still acts that way:
16172 @example
16173 $ @kbd{set 1 2 3 4 5 6 7 8 9 10}
16174 $ @kbd{echo $@{10@}}
16175 bad substitution
16176 @end example
16178 Conversely, not all shells obey the Posix rule that when braces are
16179 omitted, multiple digits beyond a @samp{$} imply the single-digit
16180 positional parameter expansion concatenated with the remaining literal
16181 digits.  To work around the issue, you must use braces.
16183 @example
16184 $ @kbd{bash -c 'set a b c d e f g h i j; echo $10 $@{1@}0'}
16185 a0 a0
16186 $ @kbd{dash -c 'set a b c d e f g h i j; echo $10 $@{1@}0'}
16187 j a0
16188 @end example
16190 @item $@{@var{var}:-@var{value}@}
16191 @c Info cannot handle ':' in index entries.
16192 @ifnotinfo
16193 @cindex @code{$@{@var{var}:-@var{value}@}}
16194 @end ifnotinfo
16195 @cindex @code{$@{@var{var}-@var{value}@}}
16196 Old BSD shells, including the Ultrix @code{sh}, don't accept the
16197 colon for any shell substitution, and complain and die.
16198 Similarly for @code{$@{@var{var}:=@var{value}@}},
16199 @code{$@{@var{var}:?@var{value}@}}, etc.
16200 However, all shells that support functions allow the use of colon in
16201 shell substitution, and since m4sh requires functions, you can portably
16202 use null variable substitution patterns in configure scripts.
16204 @item $@{@var{var}+@var{value}@}
16205 @cindex @code{$@{@var{var}+@var{value}@}}
16206 When using @samp{$@{@var{var}-@var{value}@}} or
16207 @samp{$@{@var{var}-@var{value}@}} for providing alternate substitutions,
16208 @var{value} must either be a single shell word, quoted, or in the
16209 context of an unquoted here-document.  Solaris
16210 @command{/bin/sh} complains otherwise.
16212 @example
16213 $ @kbd{/bin/sh -c 'echo $@{a-b c@}'}
16214 /bin/sh: bad substitution
16215 $ @kbd{/bin/sh -c 'echo $@{a-'\''b c'\''@}'}
16216 b c
16217 $ @kbd{/bin/sh -c 'echo "$@{a-b c@}"'}
16218 b c
16219 $ @kbd{/bin/sh -c 'cat <<EOF
16220 $@{a-b c@}
16221 EOF}
16222 b c
16223 @end example
16225 Most shells treat the special parameters @code{*} and @code{@@} as being
16226 unset if there are no positional parameters.  However, some shells treat
16227 them as being set to the empty string.  Posix does not clearly specify
16228 either behavior.
16230 @example
16231 $ @kbd{bash -c 'echo "* is $@{*-unset@}."'}
16232 * is unset.
16233 $ @kbd{dash -c 'echo "* is $@{*-unset@}."'}
16234 * is .
16235 @end example
16237 According to Posix, if an expansion occurs inside double quotes, then
16238 the use of unquoted double quotes within @var{value} is unspecified, and
16239 any single quotes become literal characters; in that case, escaping must
16240 be done with backslash.  Likewise, the use of unquoted here-documents is
16241 a case where double quotes have unspecified results:
16243 @example
16244 $ @kbd{/bin/sh -c 'echo "$@{a-"b  c"@}"'}
16245 /bin/sh: bad substitution
16246 $ @kbd{ksh -c 'echo "$@{a-"b  c"@}"'}
16247 b c
16248 $ @kbd{bash -c 'echo "$@{a-"b  c"@}"'}
16249 b  c
16250 $ @kbd{/bin/sh -c 'a=; echo $@{a+'\''b  c'\''@}'}
16251 b  c
16252 $ @kbd{/bin/sh -c 'a=; echo "$@{a+'\''b  c'\''@}"'}
16253 'b  c'
16254 $ @kbd{/bin/sh -c 'a=; echo "$@{a+\"b  c\"@}"'}
16255 "b  c"
16256 $ @kbd{/bin/sh -c 'a=; echo "$@{a+b  c@}"'}
16257 b  c
16258 $ @kbd{/bin/sh -c 'cat <<EOF
16259 $@{a-"b  c"@}
16260 EOF'}
16261 "b  c"
16262 $ @kbd{/bin/sh -c 'cat <<EOF
16263 $@{a-'b  c'@}
16264 EOF'}
16265 'b  c'
16266 $ @kbd{bash -c 'cat <<EOF
16267 $@{a-"b  c"@}
16268 EOF'}
16269 b  c
16270 $ @kbd{bash -c 'cat <<EOF
16271 $@{a-'b  c'@}
16272 EOF'}
16273 'b  c'
16274 @end example
16276 Perhaps the easiest way to work around quoting issues in a manner
16277 portable to all shells is to place the results in a temporary variable,
16278 then use @samp{$t} as the @var{value}, rather than trying to inline
16279 the expression needing quoting.
16281 @example
16282 $ @kbd{/bin/sh -c 't="b  c\"'\''@}\\"; echo "$@{a-$t@}"'}
16283 b  c"'@}\
16284 $ @kbd{ksh -c 't="b  c\"'\''@}\\"; echo "$@{a-$t@}"'}
16285 b  c"'@}\
16286 $ @kbd{bash -c 't="b  c\"'\''@}\\"; echo "$@{a-$t@}"'}
16287 b  c"'@}\
16288 @end example
16290 @item $@{@var{var}=@var{value}@}
16291 @cindex @code{$@{@var{var}=@var{value}@}}
16292 When using @samp{$@{@var{var}=@var{value}@}} to assign a default value
16293 to @var{var}, remember that even though the assignment to @var{var} does
16294 not undergo file name expansion, the result of the variable expansion
16295 does unless the expansion occurred within double quotes.  In particular,
16296 when using @command{:} followed by unquoted variable expansion for the
16297 side effect of setting a default value, if the final value of
16298 @samp{$var} contains any globbing characters (either from @var{value} or
16299 from prior contents), the shell has to spend time performing file name
16300 expansion and field splitting even though those results will not be
16301 used.  Therefore, it is a good idea to consider double quotes when performing
16302 default initialization; while remembering how this impacts any quoting
16303 characters appearing in @var{value}.
16305 @example
16306 $ @kbd{time bash -c ': "$@{a=/usr/bin/*@}"; echo "$a"'}
16307 /usr/bin/*
16309 real    0m0.005s
16310 user    0m0.002s
16311 sys     0m0.003s
16312 $ @kbd{time bash -c ': $@{a=/usr/bin/*@}; echo "$a"'}
16313 /usr/bin/*
16315 real    0m0.039s
16316 user    0m0.026s
16317 sys     0m0.009s
16318 $ @kbd{time bash -c 'a=/usr/bin/*; : $@{a=noglob@}; echo "$a"'}
16319 /usr/bin/*
16321 real    0m0.031s
16322 user    0m0.020s
16323 sys     0m0.010s
16325 $ @kbd{time bash -c 'a=/usr/bin/*; : "$@{a=noglob@}"; echo "$a"'}
16326 /usr/bin/*
16328 real    0m0.006s
16329 user    0m0.002s
16330 sys     0m0.003s
16331 @end example
16333 As with @samp{+} and @samp{-}, you must use quotes when using @samp{=}
16334 if the @var{value} contains more than one shell word; either single
16335 quotes for just the @var{value}, or double quotes around the entire
16336 expansion:
16338 @example
16339 $ @kbd{: $@{var1='Some words'@}}
16340 $ @kbd{: "$@{var2=like this@}"}
16341 $ @kbd{echo $var1 $var2}
16342 Some words like this
16343 @end example
16345 @noindent
16346 otherwise some shells, such as Solaris @command{/bin/sh} or on Digital
16347 Unix V 5.0, die because of a ``bad substitution''.  Meanwhile, Posix
16348 requires that with @samp{=}, quote removal happens prior to the
16349 assignment, and the expansion be the final contents of @var{var} without
16350 quoting (and thus subject to field splitting), in contrast to the
16351 behavior with @samp{-} passing the quoting through to the final
16352 expansion.  However, @command{bash} 4.1 does not obey this rule.
16354 @example
16355 $ @kbd{ksh -c 'echo $@{var-a\ \ b@}'}
16356 a  b
16357 $ @kbd{ksh -c 'echo $@{var=a\ \ b@}'}
16358 a b
16359 $ @kbd{bash -c 'echo $@{var=a\ \ b@}'}
16360 a  b
16361 @end example
16363 Finally, Posix states that when mixing @samp{$@{a=b@}} with regular
16364 commands, it is unspecified whether the assignments affect the parent
16365 shell environment.  It is best to perform assignments independently from
16366 commands, to avoid the problems demonstrated in this example:
16368 @example
16369 $ @kbd{bash -c 'x= y=$@{x:=b@} sh -c "echo +\$x+\$y+";echo -$x-'}
16370 +b+b+
16372 $ @kbd{/bin/sh -c 'x= y=$@{x:=b@} sh -c "echo +\$x+\$y+";echo -$x-'}
16373 ++b+
16375 $ @kbd{ksh -c 'x= y=$@{x:=b@} sh -c "echo +\$x+\$y+";echo -$x-'}
16376 +b+b+
16378 @end example
16380 @item $@{@var{var}=@var{value}@}
16381 @cindex @code{$@{@var{var}=@var{literal}@}}
16382 Solaris @command{/bin/sh} has a frightening bug in its handling of
16383 literal assignments.  Imagine you need set a variable to a string containing
16384 @samp{@}}.  This @samp{@}} character confuses Solaris @command{/bin/sh}
16385 when the affected variable was already set.  This bug can be exercised
16386 by running:
16388 @example
16389 $ @kbd{unset foo}
16390 $ @kbd{foo=$@{foo='@}'@}}
16391 $ @kbd{echo $foo}
16393 $ @kbd{foo=$@{foo='@}'   # no error; this hints to what the bug is}
16394 $ @kbd{echo $foo}
16396 $ @kbd{foo=$@{foo='@}'@}}
16397 $ @kbd{echo $foo}
16398 @}@}
16399  ^ ugh!
16400 @end example
16402 It seems that @samp{@}} is interpreted as matching @samp{$@{}, even
16403 though it is enclosed in single quotes.  The problem doesn't happen
16404 using double quotes, or when using a temporary variable holding the
16405 problematic string.
16407 @item $@{@var{var}=@var{expanded-value}@}
16408 @cindex @code{$@{@var{var}=@var{expanded-value}@}}
16409 On Ultrix,
16410 running
16412 @example
16413 default="yu,yaa"
16414 : $@{var="$default"@}
16415 @end example
16417 @noindent
16418 sets @var{var} to @samp{M-yM-uM-,M-yM-aM-a}, i.e., the 8th bit of
16419 each char is set.  You don't observe the phenomenon using a simple
16420 @samp{echo $var} since apparently the shell resets the 8th bit when it
16421 expands $var.  Here are two means to make this shell confess its sins:
16423 @example
16424 $ @kbd{cat -v <<EOF
16425 $var
16426 EOF}
16427 @end example
16429 @noindent
16432 @example
16433 $ @kbd{set | grep '^var=' | cat -v}
16434 @end example
16436 One classic incarnation of this bug is:
16438 @example
16439 default="a b c"
16440 : $@{list="$default"@}
16441 for c in $list; do
16442   echo $c
16443 done
16444 @end example
16446 @noindent
16447 You'll get @samp{a b c} on a single line.  Why?  Because there are no
16448 spaces in @samp{$list}: there are @samp{M- }, i.e., spaces with the 8th
16449 bit set, hence no IFS splitting is performed!!!
16451 One piece of good news is that Ultrix works fine with @samp{:
16452 $@{list=$default@}}; i.e., if you @emph{don't} quote.  The bad news is
16453 then that QNX 4.25 then sets @var{list} to the @emph{last} item of
16454 @var{default}!
16456 The portable way out consists in using a double assignment, to switch
16457 the 8th bit twice on Ultrix:
16459 @example
16460 list=$@{list="$default"@}
16461 @end example
16463 @noindent
16464 @dots{}but beware of the @samp{@}} bug from Solaris (see above).  For safety,
16465 use:
16467 @example
16468 test $@{var+y@} || var=@var{@{value@}}
16469 @end example
16471 @item $@{#@var{var}@}
16472 @itemx $@{@var{var}%@var{word}@}
16473 @itemx $@{@var{var}%%@var{word}@}
16474 @itemx $@{@var{var}#@var{word}@}
16475 @itemx $@{@var{var}##@var{word}@}
16476 @cindex @code{$@{#@var{var}@}}
16477 @cindex @code{$@{@var{var}%@var{word}@}}
16478 @cindex @code{$@{@var{var}%%@var{word}@}}
16479 @cindex @code{$@{@var{var}#@var{word}@}}
16480 @cindex @code{$@{@var{var}##@var{word}@}}
16481 Posix requires support for these usages, but they do not work with many
16482 traditional shells, e.g., Solaris 10 @command{/bin/sh}.
16484 Also, @command{pdksh} 5.2.14 mishandles some @var{word} forms.  For
16485 example if @samp{$1} is @samp{a/b} and @samp{$2} is @samp{a}, then
16486 @samp{$@{1#$2@}} should yield @samp{/b}, but with @command{pdksh} it
16487 yields the empty string.
16490 @item `@var{commands}`
16491 @cindex @code{`@var{commands}`}
16492 @cindex Command Substitution
16493 Posix requires shells to trim all trailing newlines from command
16494 output before substituting it, so assignments like
16495 @samp{dir=`echo "$file" | tr a A`} do not work as expected if
16496 @samp{$file} ends in a newline.
16498 While in general it makes no sense, do not substitute a single builtin
16499 with side effects, because Ash 0.2, trying to optimize, does not fork a
16500 subshell to perform the command.
16502 For instance, if you wanted to check that @command{cd} is silent, do not
16503 use @samp{test -z "`cd /`"} because the following can happen:
16505 @example
16506 $ @kbd{pwd}
16507 /tmp
16508 $ @kbd{test -z "`cd /`" && pwd}
16510 @end example
16512 @noindent
16513 The result of @samp{foo=`exit 1`} is left as an exercise to the reader.
16515 The MSYS shell leaves a stray byte in the expansion of a double-quoted
16516 command substitution of a native program, if the end of the substitution
16517 is not aligned with the end of the double quote.  This may be worked
16518 around by inserting another pair of quotes:
16520 @example
16521 $ @kbd{echo "`printf 'foo\r\n'` bar" > broken}
16522 $ @kbd{echo "`printf 'foo\r\n'`"" bar" | cmp - broken}
16523 - broken differ: char 4, line 1
16524 @end example
16526 Upon interrupt or SIGTERM, some shells may abort a command substitution,
16527 replace it with a null string, and wrongly evaluate the enclosing
16528 command before entering the trap or ending the script.  This can lead to
16529 spurious errors:
16531 @example
16532 $ @kbd{sh -c 'if test `sleep 5; echo hi` = hi; then echo yes; fi'}
16533 $ @kbd{^C}
16534 sh: test: hi: unexpected operator/operand
16535 @end example
16537 @noindent
16538 You can avoid this by assigning the command substitution to a temporary
16539 variable:
16541 @example
16542 $ @kbd{sh -c 'res=`sleep 5; echo hi`
16543          if test "x$res" = xhi; then echo yes; fi'}
16544 $ @kbd{^C}
16545 @end example
16547 @item $(@var{commands})
16548 @cindex @code{$(@var{commands})}
16549 This construct is meant to replace @samp{`@var{commands}`},
16550 and it has most of the problems listed under @code{`@var{commands}`}.
16552 This construct can be
16553 nested while this is impossible to do portably with back quotes.
16554 Although it is almost universally supported, unfortunately Solaris 10
16555 and earlier releases lack it:
16557 @example
16558 $ @kbd{showrev -c /bin/sh | grep version}
16559 Command version: SunOS 5.10 Generic 142251-02 Sep 2010
16560 $ @kbd{echo $(echo blah)}
16561 syntax error: `(' unexpected
16562 @end example
16564 @noindent
16565 nor does IRIX 6.5's Bourne shell:
16566 @example
16567 $ @kbd{uname -a}
16568 IRIX firebird-image 6.5 07151432 IP22
16569 $ @kbd{echo $(echo blah)}
16570 $(echo blah)
16571 @end example
16573 If you do use @samp{$(@var{commands})}, make sure that the commands
16574 do not start with a parenthesis, as that would cause confusion with
16575 a different notation @samp{$((@var{expression}))} that in modern
16576 shells is an arithmetic expression not a command.  To avoid the
16577 confusion, insert a space between the two opening parentheses.
16579 Avoid @var{commands} that contain unbalanced parentheses in
16580 here-documents, comments, or case statement patterns, as many shells
16581 mishandle them.  For example, Bash 3.1, @samp{ksh88}, @command{pdksh}
16582 5.2.14, and Zsh 4.2.6 all mishandle the following valid command:
16584 @example
16585 echo $(case x in x) echo hello;; esac)
16586 @end example
16589 @item $((@var{expression}))
16590 @cindex @code{$((@var{expression}))}
16591 Arithmetic expansion is not portable as some shells (most
16592 notably Solaris 10 @command{/bin/sh}) don't support it.
16594 Among shells that do support @samp{$(( ))}, not all of them obey the
16595 Posix rule that octal and hexadecimal constants must be recognized:
16597 @example
16598 $ @kbd{bash -c 'echo $(( 010 + 0x10 ))'}
16600 $ @kbd{zsh -c 'echo $(( 010 + 0x10 ))'}
16602 $ @kbd{zsh -c 'emulate sh; echo $(( 010 + 0x10 ))'}
16604 $ @kbd{pdksh -c 'echo $(( 010 + 0x10 ))'}
16605 pdksh:  010 + 0x10 : bad number `0x10'
16606 $ @kbd{pdksh -c 'echo $(( 010 ))'}
16608 @end example
16610 When it is available, using arithmetic expansion provides a noticeable
16611 speedup in script execution; but testing for support requires
16612 @command{eval} to avoid syntax errors.  The following construct is used
16613 by @code{AS_VAR_ARITH} to provide arithmetic computation when all
16614 arguments are provided in decimal and without a leading zero, and all
16615 operators are properly quoted and appear as distinct arguments:
16617 @example
16618 if ( eval 'test $(( 1 + 1 )) = 2' ) 2>/dev/null; then
16619   eval 'func_arith ()
16620   @{
16621     func_arith_result=$(( $* ))
16622   @}'
16623 else
16624   func_arith ()
16625   @{
16626     func_arith_result=`expr "$@@"`
16627   @}
16629 func_arith 1 + 1
16630 foo=$func_arith_result
16631 @end example
16634 @item ^
16635 @cindex @code{^} quoting
16636 Always quote @samp{^}, otherwise traditional shells such as
16637 @command{/bin/sh} on Solaris 10 treat this like @samp{|}.
16639 @end table
16642 @node Assignments
16643 @section Assignments
16644 @cindex Shell assignments
16646 When setting several variables in a row, be aware that the order of the
16647 evaluation is undefined.  For instance @samp{foo=1 foo=2; echo $foo}
16648 gives @samp{1} with Solaris @command{/bin/sh}, but @samp{2} with Bash.
16649 You must use
16650 @samp{;} to enforce the order: @samp{foo=1; foo=2; echo $foo}.
16652 Don't rely on the following to find @file{subdir/program}:
16654 @example
16655 PATH=subdir$PATH_SEPARATOR$PATH program
16656 @end example
16658 @noindent
16659 as this does not work with Zsh 3.0.6.  Use something like this
16660 instead:
16662 @example
16663 (PATH=subdir$PATH_SEPARATOR$PATH; export PATH; exec program)
16664 @end example
16666 Don't rely on the exit status of an assignment: Ash 0.2 does not change
16667 the status and propagates that of the last statement:
16669 @example
16670 $ @kbd{false || foo=bar; echo $?}
16672 $ @kbd{false || foo=`:`; echo $?}
16674 @end example
16676 @noindent
16677 and to make things even worse, QNX 4.25 just sets the exit status
16678 to 0 in any case:
16680 @example
16681 $ @kbd{foo=`exit 1`; echo $?}
16683 @end example
16685 To assign default values, follow this algorithm:
16687 @enumerate
16688 @item
16689 If the default value is a literal and does not contain any closing
16690 brace, use:
16692 @example
16693 : "$@{var='my literal'@}"
16694 @end example
16696 @item
16697 If the default value contains no closing brace, has to be expanded, and
16698 the variable being initialized is not intended to be IFS-split
16699 (i.e., it's not a list), then use:
16701 @example
16702 : $@{var="$default"@}
16703 @end example
16705 @item
16706 If the default value contains no closing brace, has to be expanded, and
16707 the variable being initialized is intended to be IFS-split (i.e., it's a list),
16708 then use:
16710 @example
16711 var=$@{var="$default"@}
16712 @end example
16714 @item
16715 If the default value contains a closing brace, then use:
16717 @example
16718 test $@{var+y@} || var="has a '@}'"
16719 @end example
16720 @end enumerate
16722 In most cases @samp{var=$@{var="$default"@}} is fine, but in case of
16723 doubt, just use the last form.  @xref{Shell Substitutions}, items
16724 @samp{$@{@var{var}:-@var{value}@}} and @samp{$@{@var{var}=@var{value}@}}
16725 for the rationale.
16727 @node Parentheses
16728 @section Parentheses in Shell Scripts
16729 @cindex Shell parentheses
16731 Beware of two opening parentheses in a row, as many shell
16732 implementations treat them specially, and Posix says that a portable
16733 script cannot use @samp{((} outside the @samp{$((} form used for shell
16734 arithmetic.  In traditional shells, @samp{((cat))} behaves like
16735 @samp{(cat)}; but many shells, including
16736 Bash and the Korn shell, treat @samp{((cat))} as an arithmetic
16737 expression equivalent to @samp{let "cat"}, and may or may not report an
16738 error when they detect that @samp{cat} is not a number.  As another
16739 example, @samp{pdksh} 5.2.14 does not treat the following code
16740 as a traditional shell would:
16742 @example
16743 if ((true) || false); then
16744   echo ok
16746 @end example
16748 @noindent
16749 To work around this problem, insert a space between the two opening
16750 parentheses.  There is a similar problem and workaround with
16751 @samp{$((}; see @ref{Shell Substitutions}.
16753 @node Slashes
16754 @section Slashes in Shell Scripts
16755 @cindex Shell slashes
16757 Unpatched Tru64 5.1 @command{sh} omits the last slash of command-line
16758 arguments that contain two trailing slashes:
16760 @example
16761 $ @kbd{echo / // /// //// .// //.}
16762 / / // /// ./ //.
16763 $ @kbd{x=//}
16764 $ @kbd{eval "echo \$x"}
16766 $ @kbd{set -x}
16767 $ @kbd{echo abc | tr -t ab //}
16768 + echo abc
16769 + tr -t ab /
16771 @end example
16773 Unpatched Tru64 4.0 @command{sh} adds a slash after @samp{"$var"} if the
16774 variable is empty and the second double-quote is followed by a word that
16775 begins and ends with slash:
16777 @example
16778 $ @kbd{sh -xc 'p=; echo "$p"/ouch/'}
16780 + echo //ouch/
16781 //ouch/
16782 @end example
16784 However, our understanding is that patches are available, so perhaps
16785 it's not worth worrying about working around these horrendous bugs.
16787 @node Special Shell Variables
16788 @section Special Shell Variables
16789 @cindex Shell variables
16790 @cindex Special shell variables
16792 Some shell variables should not be used, since they can have a deep
16793 influence on the behavior of the shell.  In order to recover a sane
16794 behavior from the shell, some variables should be unset; M4sh takes
16795 care of this and provides fallback values, whenever needed, to cater
16796 for a very old @file{/bin/sh} that does not support @command{unset}.
16797 (@pxref{Portable Shell, , Portable Shell Programming}).
16799 As a general rule, shell variable names containing a lower-case letter
16800 are safe; you can define and use these variables without worrying about
16801 their effect on the underlying system, and without worrying about
16802 whether the shell changes them unexpectedly.  (The exception is the
16803 shell variable @code{status}, as described below.)
16805 Here is a list of names that are known to cause trouble.  This list is
16806 not exhaustive, but you should be safe if you avoid the name
16807 @code{status} and names containing only upper-case letters and
16808 underscores.
16810 @c Alphabetical order, case insensitive, `A' before `a'.
16811 @table @code
16812 @item ?
16813 Not all shells correctly reset @samp{$?} after conditionals (@pxref{if,
16814 , Limitations of Shell Builtins}).  Not all shells manage @samp{$?}
16815 correctly in shell functions (@pxref{Shell Functions}) or in traps
16816 (@pxref{trap, , Limitations of Shell Builtins}).  Not all shells reset
16817 @samp{$?} to zero after an empty command.
16819 @example
16820 $ @kbd{bash -c 'false; $empty; echo $?'}
16822 $ @kbd{zsh -c 'false; $empty; echo $?'}
16824 @end example
16826 @item _
16827 @evindex _
16828 Many shells reserve @samp{$_} for various purposes, e.g., the name of
16829 the last command executed.
16831 @item BIN_SH
16832 @evindex BIN_SH
16833 In Tru64, if @env{BIN_SH} is set to @code{xpg4}, subsidiary invocations of
16834 the standard shell conform to Posix.
16836 @item CDPATH
16837 @evindex CDPATH
16838 When this variable is set it specifies a list of directories to search
16839 when invoking @code{cd} with a relative file name that did not start
16840 with @samp{./} or @samp{../}.  Posix
16841 1003.1-2001 says that if a nonempty directory name from @env{CDPATH}
16842 is used successfully, @code{cd} prints the resulting absolute
16843 file name.  Unfortunately this output can break idioms like
16844 @samp{abs=`cd src && pwd`} because @code{abs} receives the name twice.
16845 Also, many shells do not conform to this part of Posix; for
16846 example, @command{zsh} prints the result only if a directory name
16847 other than @file{.} was chosen from @env{CDPATH}.
16849 In practice the shells that have this problem also support
16850 @command{unset}, so you can work around the problem as follows:
16852 @example
16853 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
16854 @end example
16856 You can also avoid output by ensuring that your directory name is
16857 absolute or anchored at @samp{./}, as in @samp{abs=`cd ./src && pwd`}.
16859 Configure scripts use M4sh, which automatically unsets @env{CDPATH} if
16860 possible, so you need not worry about this problem in those scripts.
16862 @item CLICOLOR_FORCE
16863 @evindex CLICOLOR_FORCE
16864 When this variable is set, some implementations of tools like
16865 @command{ls} attempt to add color to their output via terminal escape
16866 sequences, even when the output is not directed to a terminal, and can
16867 thus cause spurious failures in scripts.  Configure scripts use M4sh,
16868 which automatically unsets this variable.
16870 @item DUALCASE
16871 @evindex DUALCASE
16872 In the MKS shell, case statements and file name generation are
16873 case-insensitive unless @env{DUALCASE} is nonzero.
16874 Autoconf-generated scripts export this variable when they start up.
16876 @item ENV
16877 @itemx MAIL
16878 @itemx MAILPATH
16879 @itemx PS1
16880 @itemx PS2
16881 @itemx PS4
16882 @evindex ENV
16883 @evindex MAIL
16884 @evindex MAILPATH
16885 @evindex PS1
16886 @evindex PS2
16887 @evindex PS4
16888 These variables should not matter for shell scripts, since they are
16889 supposed to affect only interactive shells.  However, at least one
16890 shell (the pre-3.0 UWIN Korn shell) gets confused about
16891 whether it is interactive, which means that (for example) a @env{PS1}
16892 with a side effect can unexpectedly modify @samp{$?}.  To work around
16893 this bug, M4sh scripts (including @file{configure} scripts) do something
16894 like this:
16896 @example
16897 (unset ENV) >/dev/null 2>&1 && unset ENV MAIL MAILPATH
16898 PS1='$ '
16899 PS2='> '
16900 PS4='+ '
16901 @end example
16903 @noindent
16904 (actually, there is some complication due to bugs in @command{unset};
16905 @pxref{unset, , Limitations of Shell Builtins}).
16907 @item FPATH
16908 @evindex FPATH
16909 The Korn shell uses @env{FPATH} to find shell functions, so avoid
16910 @env{FPATH} in portable scripts.  @env{FPATH} is consulted after
16911 @env{PATH}, but you still need to be wary of tests that use @env{PATH}
16912 to find whether a command exists, since they might report the wrong
16913 result if @env{FPATH} is also set.
16915 @item GREP_OPTIONS
16916 @evindex GREP_OPTIONS
16917 When this variable is set, some implementations of @command{grep} honor
16918 these options, even if the options include direction to enable colored
16919 output via terminal escape sequences, and the result can cause spurious
16920 failures when the output is not directed to a terminal.  Configure
16921 scripts use M4sh, which automatically unsets this variable.
16923 @item IFS
16924 @evindex IFS
16925 Long ago, shell scripts inherited @env{IFS} from the environment,
16926 but this caused many problems so modern shells ignore any environment
16927 settings for @env{IFS}.
16929 Don't set the first character of @env{IFS} to backslash.  Indeed,
16930 Bourne shells use the first character (backslash) when joining the
16931 components in @samp{"$@@"} and some shells then reinterpret (!)@: the
16932 backslash escapes, so you can end up with backspace and other strange
16933 characters.
16935 The proper value for @env{IFS} (in regular code, not when performing
16936 splits) is @samp{@key{SPC}@key{TAB}@key{RET}}.  The first character is
16937 especially important, as it is used to join the arguments in @samp{$*};
16938 however, note that traditional shells, but also bash-2.04, fail to adhere
16939 to this and join with a space anyway.
16941 M4sh guarantees that @env{IFS} will have the default value at the
16942 beginning of a script, and many macros within autoconf rely on this
16943 setting.  It is okay to use blocks of shell code that temporarily change
16944 the value of @env{IFS} in order to split on another character, but
16945 remember to restore it before expanding further macros.
16947 Unsetting @code{IFS} instead of resetting it to the default sequence
16948 is not suggested, since code that tries to save and restore the
16949 variable's value will incorrectly reset it to an empty value, thus
16950 disabling field splitting:
16952 @example
16953 unset IFS
16954 # default separators used for field splitting
16956 save_IFS=$IFS
16957 IFS=:
16958 # ...
16959 IFS=$save_IFS
16960 # no field splitting performed
16961 @end example
16963 @item LANG
16964 @itemx LC_ALL
16965 @itemx LC_COLLATE
16966 @itemx LC_CTYPE
16967 @itemx LC_MESSAGES
16968 @itemx LC_MONETARY
16969 @itemx LC_NUMERIC
16970 @itemx LC_TIME
16971 @evindex LANG
16972 @evindex LC_ALL
16973 @evindex LC_COLLATE
16974 @evindex LC_CTYPE
16975 @evindex LC_MESSAGES
16976 @evindex LC_MONETARY
16977 @evindex LC_NUMERIC
16978 @evindex LC_TIME
16980 You should set all these variables to @samp{C} because so much
16981 configuration code assumes the C locale and Posix requires that locale
16982 environment variables be set to @samp{C} if the C locale is desired;
16983 @file{configure} scripts and M4sh do that for you.
16984 Export these variables after setting them.
16986 @c  However, some older, nonstandard
16987 @c  systems (notably SCO) break if locale environment variables
16988 @c  are set to @samp{C}, so when running on these systems
16989 @c  Autoconf-generated scripts unset the variables instead.
16991 @item LANGUAGE
16992 @evindex LANGUAGE
16994 @env{LANGUAGE} is not specified by Posix, but it is a GNU
16995 extension that overrides @env{LC_ALL} in some cases, so you (or M4sh)
16996 should set it too.
16998 @item LC_ADDRESS
16999 @itemx LC_IDENTIFICATION
17000 @itemx LC_MEASUREMENT
17001 @itemx LC_NAME
17002 @itemx LC_PAPER
17003 @itemx LC_TELEPHONE
17004 @evindex LC_ADDRESS
17005 @evindex LC_IDENTIFICATION
17006 @evindex LC_MEASUREMENT
17007 @evindex LC_NAME
17008 @evindex LC_PAPER
17009 @evindex LC_TELEPHONE
17011 These locale environment variables are GNU extensions.  They
17012 are treated like their Posix brethren (@env{LC_COLLATE},
17013 etc.)@: as described above.
17015 @item LINENO
17016 @evindex LINENO
17017 Most modern shells provide the current line number in @code{LINENO}.
17018 Its value is the line number of the beginning of the current command.
17019 M4sh, and hence Autoconf, attempts to execute @command{configure} with
17020 a shell that supports @code{LINENO}.  If no such shell is available, it
17021 attempts to implement @code{LINENO} with a Sed prepass that replaces each
17022 instance of the string @code{$LINENO} (not followed by an alphanumeric
17023 character) with the line's number.  In M4sh scripts you should execute
17024 @code{AS_LINENO_PREPARE} so that these workarounds are included in
17025 your script; configure scripts do this automatically in @code{AC_INIT}.
17027 You should not rely on @code{LINENO} within @command{eval} or shell
17028 functions, as the behavior differs in practice.  The presence of a
17029 quoted newline within simple commands can alter which line number is
17030 used as the starting point for @code{$LINENO} substitutions within that
17031 command.  Also, the possibility of the Sed prepass means that you should
17032 not rely on @code{$LINENO} when quoted, when in here-documents, or when
17033 line continuations are used.  Subshells should be OK, though.  In the
17034 following example, lines 1, 9, and 14 are portable, but the other
17035 instances of @code{$LINENO} do not have deterministic values:
17037 @example
17038 @group
17039 $ @kbd{cat lineno}
17040 echo 1. $LINENO
17041 echo "2. $LINENO
17042 3. $LINENO"
17043 cat <<EOF
17044 5. $LINENO
17045 6. $LINENO
17046 7. \$LINENO
17048 ( echo 9. $LINENO )
17049 eval 'echo 10. $LINENO'
17050 eval 'echo 11. $LINENO
17051 echo 12. $LINENO'
17052 echo 13. '$LINENO'
17053 echo 14. $LINENO '
17054 15.' $LINENO
17055 f () @{ echo $1 $LINENO;
17056 echo $1 $LINENO @}
17057 f 18.
17058 echo 19. \
17059 $LINENO
17060 @end group
17061 @group
17062 $ @kbd{bash-3.2 ./lineno}
17063 1. 1
17064 2. 3
17065 3. 3
17066 5. 4
17067 6. 4
17068 7. $LINENO
17069 9. 9
17070 10. 10
17071 11. 12
17072 12. 13
17073 13. $LINENO
17074 14. 14
17075 15. 14
17076 18. 16
17077 18. 17
17078 19. 19
17079 @end group
17080 @group
17081 $ @kbd{zsh-4.3.4 ./lineno}
17082 1. 1
17083 2. 2
17084 3. 2
17085 5. 4
17086 6. 4
17087 7. $LINENO
17088 9. 9
17089 10. 1
17090 11. 1
17091 12. 2
17092 13. $LINENO
17093 14. 14
17094 15. 14
17095 18. 0
17096 18. 1
17097 19. 19
17098 @end group
17099 @group
17100 $ @kbd{pdksh-5.2.14 ./lineno}
17101 1. 1
17102 2. 2
17103 3. 2
17104 5. 4
17105 6. 4
17106 7. $LINENO
17107 9. 9
17108 10. 0
17109 11. 0
17110 12. 0
17111 13. $LINENO
17112 14. 14
17113 15. 14
17114 18. 16
17115 18. 17
17116 19. 19
17117 @end group
17118 @group
17119 $ @kbd{sed '=' <lineno |}
17120 > @kbd{  sed '}
17121 > @kbd{    N}
17122 > @kbd{    s,$,-,}
17123 > @kbd{    t loop}
17124 > @kbd{    :loop}
17125 > @kbd{    s,^\([0-9]*\)\(.*\)[$]LINENO\([^a-zA-Z0-9_]\),\1\2\1\3,}
17126 > @kbd{    t loop}
17127 > @kbd{    s,-$,,}
17128 > @kbd{    s,^[0-9]*\n,,}
17129 > @kbd{  ' |}
17130 > @kbd{  sh}
17131 1. 1
17132 2. 2
17133 3. 3
17134 5. 5
17135 6. 6
17136 7. \7
17137 9. 9
17138 10. 10
17139 11. 11
17140 12. 12
17141 13. 13
17142 14. 14
17143 15. 15
17144 18. 16
17145 18. 17
17146 19. 20
17147 @end group
17148 @end example
17150 In particular, note that @file{config.status} (and any other subsidiary
17151 script created by @code{AS_INIT_GENERATED}) might report line numbers
17152 relative to the parent script as a result of the potential Sed pass.
17154 @item NULLCMD
17155 @evindex NULLCMD
17156 When executing the command @samp{>foo}, @command{zsh} executes
17157 @samp{$NULLCMD >foo} unless it is operating in Bourne shell
17158 compatibility mode and the @command{zsh} version is newer
17159 than 3.1.6-dev-18.  If you are using an older @command{zsh}
17160 and forget to set @env{NULLCMD},
17161 your script might be suspended waiting for data on its standard input.
17163 @item options
17164 @evindex options
17165 For @command{zsh} 4.3.10, @env{options} is treated as an associative
17166 array even after @code{emulate sh}, so it should not be used.
17168 @item PATH_SEPARATOR
17169 @evindex PATH_SEPARATOR
17170 On DJGPP systems, the @env{PATH_SEPARATOR} environment
17171 variable can be set to either @samp{:} or @samp{;} to control the path
17172 separator Bash uses to set up certain environment variables (such as
17173 @env{PATH}).  You can set this variable to @samp{;} if you want
17174 @command{configure} to use @samp{;} as a separator; this might be useful
17175 if you plan to use non-Posix shells to execute files.  @xref{File System
17176 Conventions}, for more information about @code{PATH_SEPARATOR}.
17178 @item POSIXLY_CORRECT
17179 @evindex POSIXLY_CORRECT
17180 In the GNU environment, exporting @env{POSIXLY_CORRECT} with any value
17181 (even empty) causes programs to try harder to conform to Posix.
17182 Autoconf does not directly manipulate this variable, but @command{bash}
17183 ties the shell variable @env{POSIXLY_CORRECT} to whether the script is
17184 running in Posix mode.  Therefore, take care when exporting or unsetting
17185 this variable, so as not to change whether @command{bash} is in Posix
17186 mode.
17188 @example
17189 $ @kbd{bash --posix -c 'set -o | grep posix}
17190 > @kbd{unset POSIXLY_CORRECT}
17191 > @kbd{set -o | grep posix'}
17192 posix           on
17193 posix           off
17194 @end example
17196 @item PWD
17197 @evindex PWD
17198 Posix 1003.1-2001 requires that @command{cd} and
17199 @command{pwd} must update the @env{PWD} environment variable to point
17200 to the logical name of the current directory, but traditional shells
17201 do not support this.  This can cause confusion if one shell instance
17202 maintains @env{PWD} but a subsidiary and different shell does not know
17203 about @env{PWD} and executes @command{cd}; in this case @env{PWD}
17204 points to the wrong directory.  Use @samp{`pwd`} rather than
17205 @samp{$PWD}.
17207 @item RANDOM
17208 @evindex RANDOM
17209 Many shells provide @code{RANDOM}, a variable that returns a different
17210 integer each time it is used.  Most of the time, its value does not
17211 change when it is not used, but on IRIX 6.5 the value changes all
17212 the time.  This can be observed by using @command{set}.  It is common
17213 practice to use @code{$RANDOM} as part of a file name, but code
17214 shouldn't rely on @code{$RANDOM} expanding to a nonempty string.
17216 @item status
17217 @evindex status
17218 This variable is an alias to @samp{$?} for @code{zsh} (at least 3.1.6),
17219 hence read-only.  Do not use it.
17220 @end table
17222 @node Shell Functions
17223 @section Shell Functions
17224 @cindex Shell Functions
17226 Nowadays, it is difficult to find a shell that does not support
17227 shell functions at all.  However, some differences should be expected.
17229 When declaring a shell function, you must include whitespace between the
17230 @samp{)} after the function name and the start of the compound
17231 expression, to avoid upsetting @command{ksh}.  While it is possible to
17232 use any compound command, most scripts use @samp{@{@dots{}@}}.
17234 @example
17235 $ @kbd{/bin/sh -c 'a()@{ echo hi;@}; a'}
17237 $ @kbd{ksh -c 'a()@{ echo hi;@}; a'}
17238 ksh: syntax error at line 1: `@}' unexpected
17239 $ @kbd{ksh -c 'a() @{ echo hi;@}; a'}
17241 @end example
17243 Inside a shell function, you should not rely on the error status of a
17244 subshell if the last command of that subshell was @code{exit} or
17245 @code{trap}, as this triggers bugs in zsh 4.x; while Autoconf tries to
17246 find a shell that does not exhibit the bug, zsh might be the only shell
17247 present on the user's machine.
17249 Likewise, the state of @samp{$?} is not reliable when entering a shell
17250 function.  This has the effect that using a function as the first
17251 command in a @command{trap} handler can cause problems.
17253 @example
17254 $ @kbd{bash -c 'foo() @{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
17257 $ @kbd{ash -c 'foo() @{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
17260 @end example
17262 DJGPP bash 2.04 has a bug in that @command{return} from a
17263 shell function which also used a command substitution causes a
17264 segmentation fault.  To work around the issue, you can use
17265 @command{return} from a subshell, or @samp{AS_SET_STATUS} as last command
17266 in the execution flow of the function (@pxref{Common Shell Constructs}).
17268 Not all shells treat shell functions as simple commands impacted by
17269 @samp{set -e}, for example with Solaris 10 @command{/bin/sh}:
17271 @example
17272 $ @kbd{bash -c 'f() @{ return 1; @}; set -e; f; echo oops'}
17273 $ @kbd{/bin/sh -c 'f() @{ return 1; @}; set -e; f; echo oops'}
17274 oops
17275 @end example
17277 Shell variables and functions may share the same namespace, for example
17278 with Solaris 10 @command{/bin/sh}:
17280 @example
17281 $ @kbd{f () @{ :; @}; f=; f}
17282 f: not found
17283 @end example
17285 @noindent
17286 For this reason, Autoconf (actually M4sh, @pxref{Programming in M4sh})
17287 uses the prefix @samp{as_fn_} for its functions.
17289 Handling of positional parameters and shell options varies among shells.
17290 For example, Korn shells reset and restore trace output (@samp{set -x})
17291 and other options upon function entry and exit.  Inside a function,
17292 IRIX sh sets @samp{$0} to the function name.
17294 It is not portable to pass temporary environment variables to shell
17295 functions.  Solaris @command{/bin/sh} does not see the variable.
17296 Meanwhile, not all shells follow the Posix rule that the assignment must
17297 affect the current environment in the same manner as special built-ins.
17299 @example
17300 $ @kbd{/bin/sh -c 'func() @{ echo $a;@}; a=1 func; echo $a'}
17301 @result{}
17302 @result{}
17303 $ @kbd{ash -c 'func() @{ echo $a;@}; a=1 func; echo $a'}
17304 @result{}1
17305 @result{}
17306 $ @kbd{bash -c 'set -o posix; func() @{ echo $a;@}; a=1 func; echo $a'}
17307 @result{}1
17308 @result{}1
17309 @end example
17311 Some ancient Bourne shell variants with function support did not reset
17312 @samp{$@var{i}, @var{i} >= 0}, upon function exit, so effectively the
17313 arguments of the script were lost after the first function invocation.
17314 It is probably not worth worrying about these shells any more.
17316 With AIX sh, a @command{trap} on 0 installed in a shell function
17317 triggers at function exit rather than at script exit.  @xref{trap, ,
17318 Limitations of Shell Builtins}.
17320 @node Limitations of Builtins
17321 @section Limitations of Shell Builtins
17322 @cindex Shell builtins
17323 @cindex Limitations of shell builtins
17325 No, no, we are serious: some shells do have limitations!  :)
17327 You should always keep in mind that any builtin or command may support
17328 options, and therefore differ in behavior with arguments
17329 starting with a dash.  For instance, even the innocent @samp{echo "$word"}
17330 can give unexpected results when @code{word} starts with a dash.  It is
17331 often possible to avoid this problem using @samp{echo "x$word"}, taking
17332 the @samp{x} into account later in the pipe.  Many of these limitations
17333 can be worked around using M4sh (@pxref{Programming in M4sh}).
17335 @c This table includes things like `@command{test} (files)', so we can't
17336 @c use @table @command.
17337 @table @asis
17338 @item @command{.}
17339 @c --------------
17340 @prindex @command{.}
17341 Use @command{.} only with regular files (use @samp{test -f}).  Bash
17342 2.03, for instance, chokes on @samp{. /dev/null}.  Remember that
17343 @command{.} uses @env{PATH} if its argument contains no slashes.  Also,
17344 some shells, including bash 3.2, implicitly append the current directory
17345 to this @env{PATH} search, even though Posix forbids it.  So if you want
17346 to use @command{.} on a file @file{foo} in the current directory, you
17347 must use @samp{. ./foo}.
17349 Not all shells gracefully handle syntax errors within a sourced file.
17350 On one extreme, some non-interactive shells abort the entire script.  On
17351 the other, @command{zsh} 4.3.10 has a bug where it fails to react to the
17352 syntax error.
17354 @example
17355 $ @kbd{echo 'fi' > syntax}
17356 $ @kbd{bash -c '. ./syntax; echo $?'}
17357 ./syntax: line 1: syntax error near unexpected token `fi'
17358 ./syntax: line 1: `fi'
17360 $ @kbd{ash -c '. ./syntax; echo $?'}
17361 ./syntax: 1: Syntax error: "fi" unexpected
17362 $ @kbd{zsh -c '. ./syntax; echo $?'}
17363 ./syntax:1: parse error near `fi'
17365 @end example
17367 @item @command{!}
17368 @c --------------
17369 @prindex @command{!}
17370 The Unix version 7 shell did not support
17371 negating the exit status of commands with @command{!}, and this feature
17372 is still absent from some shells (e.g., Solaris @command{/bin/sh}).
17373 Other shells, such as FreeBSD @command{/bin/sh} or @command{ash}, have
17374 bugs when using @command{!}:
17376 @example
17377 $ @kbd{sh -c '! : | :'; echo $?}
17379 $ @kbd{ash -c '! : | :'; echo $?}
17381 $ @kbd{sh -c '! @{ :; @}'; echo $?}
17383 $ @kbd{ash -c '! @{ :; @}'; echo $?}
17384 @{: not found
17385 Syntax error: "@}" unexpected
17387 @end example
17389 Shell code like this:
17391 @example
17392 if ! cmp file1 file2 >/dev/null 2>&1; then
17393   echo files differ or trouble
17395 @end example
17397 is therefore not portable in practice.  Typically it is easy to rewrite
17398 such code, e.g.:
17400 @example
17401 cmp file1 file2 >/dev/null 2>&1 ||
17402   echo files differ or trouble
17403 @end example
17405 More generally, one can always rewrite @samp{! @var{command}} as:
17407 @example
17408 if @var{command}; then (exit 1); else :; fi
17409 @end example
17412 @item @command{@{...@}}
17413 @c --------------------
17414 @prindex @command{@{...@}}
17415 Bash 3.2 (and earlier versions) sometimes does not properly set
17416 @samp{$?} when failing to write redirected output of a compound command.
17417 This problem is most commonly observed with @samp{@{@dots{}@}}; it does
17418 not occur with @samp{(@dots{})}.  For example:
17420 @example
17421 $ @kbd{bash -c '@{ echo foo; @} >/bad; echo $?'}
17422 bash: line 1: /bad: Permission denied
17424 $ @kbd{bash -c 'while :; do echo; done >/bad; echo $?'}
17425 bash: line 1: /bad: Permission denied
17427 @end example
17429 To work around the bug, prepend @samp{:;}:
17431 @example
17432 $ @kbd{bash -c ':;@{ echo foo; @} >/bad; echo $?'}
17433 bash: line 1: /bad: Permission denied
17435 @end example
17437 Posix requires a syntax error if a brace list has no contents.  However,
17438 not all shells obey this rule; and on shells where empty lists are
17439 permitted, the effect on @samp{$?} is inconsistent.  To avoid problems,
17440 ensure that a brace list is never empty.
17442 @example
17443 $ @kbd{bash -c 'false; @{ @}; echo $?' || echo $?}
17444 bash: line 1: syntax error near unexpected token `@}'
17445 bash: line 1: `false; @{ @}; echo $?'
17447 $ @kbd{zsh -c 'false; @{ @}; echo $?' || echo $?}
17449 $ @kbd{pdksh -c 'false; @{ @}; echo $?' || echo $?}
17451 @end example
17454 @item @command{break}
17455 @c ------------------
17456 @prindex @command{break}
17457 The use of @samp{break 2} etc.@: is safe.
17460 @anchor{case}
17461 @item @command{case}
17462 @c -----------------
17463 @prindex @command{case}
17464 You don't need to quote the argument; no splitting is performed.
17466 You don't need the final @samp{;;}, but you should use it.
17468 Posix requires support for @code{case} patterns with opening
17469 parentheses like this:
17471 @example
17472 case $file_name in
17473   (*.c) echo "C source code";;
17474 esac
17475 @end example
17477 @noindent
17478 but the @code{(} in this example is not portable to many Bourne
17479 shell implementations, which is a pity for those of us using tools that
17480 rely on balanced parentheses.  For instance, with Solaris
17481 @command{/bin/sh}:
17483 @example
17484 $ @kbd{case foo in (foo) echo foo;; esac}
17485 @error{}syntax error: `(' unexpected
17486 @end example
17488 @noindent
17489 The leading @samp{(} can be omitted safely.  Unfortunately, there are
17490 contexts where unbalanced parentheses cause other problems, such as when
17491 using a syntax-highlighting editor that searches for the balancing
17492 counterpart, or more importantly, when using a case statement as an
17493 underquoted argument to an Autoconf macro.  @xref{Balancing
17494 Parentheses}, for trade-offs involved in various styles of dealing with
17495 unbalanced @samp{)}.
17497 Zsh handles pattern fragments derived from parameter expansions or
17498 command substitutions as though quoted:
17500 @example
17501 $ pat=\?; case aa in ?$pat) echo match;; esac
17502 $ pat=\?; case a? in ?$pat) echo match;; esac
17503 match
17504 @end example
17506 @noindent
17507 Because of a bug in its @code{fnmatch}, Bash fails to properly
17508 handle backslashes in character classes:
17510 @example
17511 bash-2.02$ @kbd{case /tmp in [/\\]*) echo OK;; esac}
17512 bash-2.02$
17513 @end example
17515 @noindent
17516 This is extremely unfortunate, since you are likely to use this code to
17517 handle Posix or MS-DOS absolute file names.  To work around this
17518 bug, always put the backslash first:
17520 @example
17521 bash-2.02$ @kbd{case '\TMP' in [\\/]*) echo OK;; esac}
17523 bash-2.02$ @kbd{case /tmp in [\\/]*) echo OK;; esac}
17525 @end example
17527 Many Bourne shells cannot handle closing brackets in character classes
17528 correctly.
17530 Some shells also have problems with backslash escaping in case you do not want
17531 to match the backslash: both a backslash and the escaped character match this
17532 pattern.  To work around this, specify the character class in a variable, so
17533 that quote removal does not apply afterwards, and the special characters don't
17534 have to be backslash-escaped:
17536 @example
17537 $ @kbd{case '\' in [\<]) echo OK;; esac}
17539 $ @kbd{scanset='[<]'; case '\' in $scanset) echo OK;; esac}
17541 @end example
17543 Even with this, Solaris @command{ksh} matches a backslash if the set
17544 contains any
17545 of the characters @samp{|}, @samp{&}, @samp{(}, or @samp{)}.
17547 Conversely, Tru64 @command{ksh} (circa 2003) erroneously always matches
17548 a closing parenthesis if not specified in a character class:
17550 @example
17551 $ @kbd{case foo in *\)*) echo fail ;; esac}
17552 fail
17553 $ @kbd{case foo in *')'*) echo fail ;; esac}
17554 fail
17555 @end example
17557 Some shells, such as Ash 0.3.8, are confused by an empty
17558 @code{case}/@code{esac}:
17560 @example
17561 ash-0.3.8 $ @kbd{case foo in esac;}
17562 @error{}Syntax error: ";" unexpected (expecting ")")
17563 @end example
17565 Posix requires @command{case} to give an exit status of 0 if no cases
17566 match.  However, @command{/bin/sh} in Solaris 10 does not obey this
17567 rule.  Meanwhile, it is unclear whether a case that matches, but
17568 contains no statements, must also change the exit status to 0.  The M4sh
17569 macro @code{AS_CASE} works around these inconsistencies.
17571 @example
17572 $ @kbd{bash -c 'case `false` in ?) ;; esac; echo $?'}
17574 $ @kbd{/bin/sh -c 'case `false` in ?) ;; esac; echo $?'}
17576 @end example
17579 @item @command{cd}
17580 @c ---------------
17581 @prindex @command{cd}
17582 Posix 1003.1-2001 requires that @command{cd} must support
17583 the @option{-L} (``logical'') and @option{-P} (``physical'') options,
17584 with @option{-L} being the default.  However, traditional shells do
17585 not support these options, and their @command{cd} command has the
17586 @option{-P} behavior.
17588 Portable scripts should assume neither option is supported, and should
17589 assume neither behavior is the default.  This can be a bit tricky,
17590 since the Posix default behavior means that, for example,
17591 @samp{ls ..} and @samp{cd ..} may refer to different directories if
17592 the current logical directory is a symbolic link.  It is safe to use
17593 @code{cd @var{dir}} if @var{dir} contains no @file{..} components.
17594 Also, Autoconf-generated scripts check for this problem when computing
17595 variables like @code{ac_top_srcdir} (@pxref{Configuration Actions}),
17596 so it is safe to @command{cd} to these variables.
17598 Posix states that behavior is undefined if @command{cd} is given an
17599 explicit empty argument.  Some shells do nothing, some change to the
17600 first entry in @env{CDPATH}, some change to @env{HOME}, and some exit
17601 the shell rather than returning an error.  Unfortunately, this means
17602 that if @samp{$var} is empty, then @samp{cd "$var"} is less predictable
17603 than @samp{cd $var} (at least the latter is well-behaved in all shells
17604 at changing to @env{HOME}, although this is probably not what you wanted
17605 in a script).  You should check that a directory name was supplied
17606 before trying to change locations.
17608 @xref{Special Shell Variables}, for portability problems involving
17609 @command{cd} and the @env{CDPATH} environment variable.
17610 Also please see the discussion of the @command{pwd} command.
17613 @anchor{echo}
17614 @item @command{echo}
17615 @c -----------------
17616 @prindex @command{echo}
17617 The simple @command{echo} is probably the most surprising source of
17618 portability troubles.  It is not possible to use @samp{echo} portably
17619 unless both options and escape sequences are omitted.  Don't expect any
17620 option.
17622 Do not use backslashes in the arguments, as there is no consensus on
17623 their handling.  For @samp{echo '\n' | wc -l}, the @command{sh} of
17624 Solaris outputs 2, but Bash and Zsh (in @command{sh} emulation mode) output 1.
17625 The problem is truly @command{echo}: all the shells
17626 understand @samp{'\n'} as the string composed of a backslash and an
17627 @samp{n}.  Within a command substitution, @samp{echo 'string\c'} will
17628 mess up the internal state of ksh88 on AIX 6.1 so that it will print
17629 the first character @samp{s} only, followed by a newline, and then
17630 entirely drop the output of the next echo in a command substitution.
17632 Because of these problems, do not pass a string containing arbitrary
17633 characters to @command{echo}.  For example, @samp{echo "$foo"} is safe
17634 only if you know that @var{foo}'s value cannot contain backslashes and
17635 cannot start with @samp{-}.
17637 Normally, @command{printf} is safer and easier to use than @command{echo}
17638 and @command{echo -n}.  Thus, you should use @command{printf "%s\n"}
17639 instead of @command{echo}, and similarly use @command{printf %s} instead
17640 of @command{echo -n}.
17642 Older scripts, written before @command{printf} was portable,
17643 sometimes used a here-document as a safer alternative to @command{echo},
17644 like this:
17646 @example
17647 cat <<EOF
17648 $foo
17650 @end example
17653 @item @command{eval}
17654 @c -----------------
17655 @prindex @command{eval}
17656 The @command{eval} command is useful in limited circumstances, e.g.,
17657 using commands like @samp{eval table_$key=\$value} and @samp{eval
17658 value=table_$key} to simulate a hash table when the key is known to be
17659 alphanumeric.
17661 You should also be wary of common bugs in @command{eval} implementations.
17662 In some shell implementations (e.g., older @command{ash}, OpenBSD 3.8
17663 @command{sh}, @command{pdksh} v5.2.14 99/07/13.2, and @command{zsh}
17664 4.2.5), the arguments of @samp{eval} are evaluated in a context where
17665 @samp{$?} is 0, so they exhibit behavior like this:
17667 @example
17668 $ @kbd{false; eval 'echo $?'}
17670 @end example
17672 The correct behavior here is to output a nonzero value,
17673 but portable scripts should not rely on this.
17675 You should not rely on @code{LINENO} within @command{eval}.
17676 @xref{Special Shell Variables}.
17678 Note that, even though these bugs are easily avoided,
17679 @command{eval} is tricky to use on arbitrary arguments.
17680 It is obviously unwise to use @samp{eval $cmd} if the string value of
17681 @samp{cmd} was derived from an untrustworthy source.  But even if the
17682 string value is valid, @samp{eval $cmd} might not work as intended,
17683 since it causes field splitting and file name expansion to occur twice,
17684 once for the @command{eval} and once for the command itself.  It is
17685 therefore safer to use @samp{eval "$cmd"}.  For example, if @var{cmd}
17686 has the value @samp{cat test?.c}, @samp{eval $cmd} might expand to the
17687 equivalent of @samp{cat test;.c} if there happens to be a file named
17688 @file{test;.c} in the current directory; and this in turn
17689 mistakenly attempts to invoke @command{cat} on the file @file{test} and
17690 then execute the command @command{.c}.  To avoid this problem, use
17691 @samp{eval "$cmd"} rather than @samp{eval $cmd}.
17693 However, suppose that you want to output the text of the evaluated
17694 command just before executing it.  Assuming the previous example,
17695 @samp{echo "Executing: $cmd"} outputs @samp{Executing: cat test?.c}, but
17696 this output doesn't show the user that @samp{test;.c} is the actual name
17697 of the copied file.  Conversely, @samp{eval "echo Executing: $cmd"}
17698 works on this example, but it fails with @samp{cmd='cat foo >bar'},
17699 since it mistakenly replaces the contents of @file{bar} by the
17700 string @samp{cat foo}.  No simple, general, and portable solution to
17701 this problem is known.
17703 @item @command{exec}
17704 @c -----------------
17705 @prindex @command{exec}
17706 Posix describes several categories of shell built-ins.  Special
17707 built-ins (such as @command{exit}) must impact the environment of the
17708 current shell, and need not be available through @command{exec}.  All
17709 other built-ins are regular, and must not propagate variable assignments
17710 to the environment of the current shell.  However, the group of regular
17711 built-ins is further distinguished by commands that do not require a
17712 @env{PATH} search (such as @command{cd}), in contrast to built-ins that
17713 are offered as a more efficient version of something that must still be
17714 found in a @env{PATH} search (such as @command{echo}).  Posix is not
17715 clear on whether @command{exec} must work with the list of 17 utilities
17716 that are invoked without a @env{PATH} search, and many platforms lack an
17717 executable for some of those built-ins:
17719 @example
17720 $ @kbd{sh -c 'exec cd /tmp'}
17721 sh: line 0: exec: cd: not found
17722 @end example
17724 All other built-ins that provide utilities specified by Posix must have
17725 a counterpart executable that exists on @env{PATH}, although Posix
17726 allows @command{exec} to use the built-in instead of the executable.
17727 For example, contrast @command{bash} 3.2 and @command{pdksh} 5.2.14:
17729 @example
17730 $ @kbd{bash -c 'pwd --version' | head -n1}
17731 bash: line 0: pwd: --: invalid option
17732 pwd: usage: pwd [-LP]
17733 $ @kbd{bash -c 'exec pwd --version' | head -n1}
17734 pwd (GNU coreutils) 6.10
17735 $ @kbd{pdksh -c 'exec pwd --version' | head -n1}
17736 pdksh: pwd: --: unknown option
17737 @end example
17739 When it is desired to avoid a regular shell built-in, the workaround is
17740 to use some other forwarding command, such as @command{env} or
17741 @command{nice}, that will ensure a path search:
17743 @example
17744 $ @kbd{pdksh -c 'exec true --version' | head -n1}
17745 $ @kbd{pdksh -c 'nice true --version' | head -n1}
17746 true (GNU coreutils) 6.10
17747 $ @kbd{pdksh -c 'env true --version' | head -n1}
17748 true (GNU coreutils) 6.10
17749 @end example
17751 @item @command{exit}
17752 @c -----------------
17753 @prindex @command{exit}
17754 The default value of @command{exit} is supposed to be @code{$?};
17755 unfortunately, some shells, such as the DJGPP port of Bash 2.04, just
17756 perform @samp{exit 0}.
17758 @example
17759 bash-2.04$ @kbd{foo=`exit 1` || echo fail}
17760 fail
17761 bash-2.04$ @kbd{foo=`(exit 1)` || echo fail}
17762 fail
17763 bash-2.04$ @kbd{foo=`(exit 1); exit` || echo fail}
17764 bash-2.04$
17765 @end example
17767 Using @samp{exit $?} restores the expected behavior.
17769 Some shell scripts, such as those generated by @command{autoconf}, use a
17770 trap to clean up before exiting.  If the last shell command exited with
17771 nonzero status, the trap also exits with nonzero status so that the
17772 invoker can tell that an error occurred.
17774 Unfortunately, in some shells, such as Solaris @command{/bin/sh}, an exit
17775 trap ignores the @code{exit} command's argument.  In these shells, a trap
17776 cannot determine whether it was invoked by plain @code{exit} or by
17777 @code{exit 1}.  Instead of calling @code{exit} directly, use the
17778 @code{AC_MSG_ERROR} macro that has a workaround for this problem.
17781 @anchor{export}
17782 @item @command{export}
17783 @c -------------------
17784 @prindex @command{export}
17785 The builtin @command{export} dubs a shell variable @dfn{environment
17786 variable}.  Each update of exported variables corresponds to an update
17787 of the environment variables.  Conversely, each environment variable
17788 received by the shell when it is launched should be imported as a shell
17789 variable marked as exported.
17791 Alas, many shells, such as Solaris @command{/bin/sh},
17792 IRIX 6.3, IRIX 5.2,
17793 AIX 4.1.5, and Digital Unix 4.0, forget to
17794 @command{export} the environment variables they receive.  As a result,
17795 two variables coexist: the environment variable and the shell
17796 variable.  The following code demonstrates this failure:
17798 @example
17799 #!/bin/sh
17800 echo $FOO
17801 FOO=bar
17802 echo $FOO
17803 exec /bin/sh $0
17804 @end example
17806 @noindent
17807 when run with @samp{FOO=foo} in the environment, these shells print
17808 alternately @samp{foo} and @samp{bar}, although they should print only
17809 @samp{foo} and then a sequence of @samp{bar}s.
17811 Therefore you should @command{export} again each environment variable
17812 that you update; the export can occur before or after the assignment.
17814 Posix is not clear on whether the @command{export} of an undefined
17815 variable causes the variable to be defined with the value of an empty
17816 string, or merely marks any future definition of a variable by that name
17817 for export.  Various shells behave differently in this regard:
17819 @example
17820 $ @kbd{sh -c 'export foo; env | grep foo'}
17821 $ @kbd{ash -c 'export foo; env | grep foo'}
17822 foo=
17823 @end example
17825 Posix requires @command{export} to honor assignments made as arguments,
17826 but older shells do not support this, including @command{/bin/sh} in
17827 Solaris 10.  Portable scripts should separate assignments and exports
17828 into different statements.
17830 @example
17831 $ @kbd{bash -c 'export foo=bar; echo $foo'}
17833 $ @kbd{/bin/sh -c 'export foo=bar; echo $foo'}
17834 /bin/sh: foo=bar: is not an identifier
17835 $ @kbd{/bin/sh -c 'export foo; foo=bar; echo $foo'}
17837 @end example
17839 Posix requires @command{export} to work with any arbitrary value for the
17840 contents of the variable being exported, as long as the total size of
17841 the environment combined with arguments doesn't exceed @code{ARG_MAX}
17842 when executing a child process.  However, some shells have extensions
17843 that involve interpreting some environment values specially, regardless
17844 of the variable name.  We currently know of one case: all versions of
17845 Bash released prior to 27 September 2014 interpret an environment
17846 variable with an initial content substring of @code{() @{} as an
17847 exported function definition (this is the ``Shellshock'' remote
17848 execution bug, CVE-2014-6271 and friends, where it was possible to
17849 exploit the function parser to cause remote code execution on child bash
17850 startup; newer versions of Bash use special environment variable
17851 @emph{names} instead of values to implement the same feature).
17853 There may be entries inherited into the environment that are not valid
17854 as shell variable names; Posix states that processes should be tolerant
17855 of these names.  Some shells such as @command{dash} do this by removing
17856 those names from the environment at startup, while others such as
17857 @command{bash} hide the entry from shell access but still pass it on to
17858 child processes.  While you can set such names using @command{env} for a
17859 direct child process, you cannot rely on them being preserved through an
17860 intermediate pass through the shell.
17862 @item @command{false}
17863 @c ------------------
17864 @prindex @command{false}
17865 Don't expect @command{false} to exit with status 1: in native
17866 Solaris @file{/bin/false} exits with status 255.
17869 @item @command{for}
17870 @c ----------------
17871 @prindex @command{for}
17872 To loop over positional arguments, use:
17874 @example
17875 for arg
17877   echo "$arg"
17878 done
17879 @end example
17881 @noindent
17882 You may @emph{not} leave the @code{do} on the same line as @code{for},
17883 since some shells improperly grok:
17885 @example
17886 for arg; do
17887   echo "$arg"
17888 done
17889 @end example
17891 If you want to explicitly refer to the positional arguments, given the
17892 @samp{$@@} bug (@pxref{Shell Substitutions}), use:
17894 @example
17895 for arg in $@{1+"$@@"@}; do
17896   echo "$arg"
17897 done
17898 @end example
17900 @noindent
17901 But keep in mind that Zsh, even in Bourne shell emulation mode, performs
17902 word splitting on @samp{$@{1+"$@@"@}}; see @ref{Shell Substitutions},
17903 item @samp{$@@}, for more.
17905 Posix requires support for a @command{for} loop with no list after
17906 @code{in}.  However, Solaris @command{/bin/sh} treats that as a syntax
17907 error.  It is possible to work around this by providing any shell word
17908 that expands to nothing, or by ignoring an obvious sentinel.
17910 @example
17911 $ @kbd{/bin/sh -c 'for a in $empty; do echo hi; done'}
17912 $ @kbd{/bin/sh -c 'for a in ; do echo hi; done'}
17913 /bin/sh: syntax error at line 1: `;' unexpected
17914 @end example
17916 This syntax problem is most frequently encountered in code that goes
17917 through several layers of expansion, such as an m4 macro or makefile
17918 variable used as a list body, where the first layer of expansion (m4 or
17919 make) can end up expanding to nothing in the version handed to the
17920 shell.  In the makefile context, one common workaround is to use a shell
17921 variable rather than a make variable as the source of the list.
17923 @example
17924 $ @kbd{cat Makefile}
17925 list =
17926 bad:
17927         @@for arg in $(list); do echo $$arg; done
17928 good:
17929         @@list='$(list)'; for arg in $$list; do echo $$arg; done
17930 $ @kbd{make bad 2&>1 | head -n1}
17931 sh: syntax error at line 1: `;' unexpected
17932 $ @kbd{make bad list='a b'}
17935 $ @kbd{make good}
17936 $ @kbd{make good list='a b'}
17939 @end example
17941 In Solaris @command{/bin/sh}, when the list of arguments of a
17942 @command{for} loop starts with @emph{unquoted} tokens looking like
17943 variable assignments, the loop is not executed on those tokens:
17945 @example
17946 $ @kbd{/bin/sh -c 'for v in a=b c=d x e=f; do echo $v; done'}
17949 @end example
17951 @noindent
17952 Thankfully, quoting the assignment-like tokens, or starting the list
17953 with other tokens (including unquoted variable expansion that results in
17954 an assignment-like result), avoids the problem, so it is easy to work
17955 around:
17957 @example
17958 $ @kbd{/bin/sh -c 'for v in "a=b"; do echo $v; done'}
17960 $ @kbd{/bin/sh -c 'x=a=b; for v in $x c=d; do echo $v; done'}
17963 @end example
17965 @anchor{if}
17966 @item @command{if}
17967 @c ---------------
17968 @prindex @command{if}
17969 Using @samp{!} is not portable.  Instead of:
17971 @example
17972 if ! cmp -s file file.new; then
17973   mv file.new file
17975 @end example
17977 @noindent
17978 use:
17980 @example
17981 if cmp -s file file.new; then :; else
17982   mv file.new file
17984 @end example
17986 @noindent
17987 Or, especially if the @dfn{else} branch is short, you can use @code{||}.
17988 In M4sh, the @code{AS_IF} macro provides an easy way to write these kinds
17989 of conditionals:
17991 @example
17992 AS_IF([cmp -s file file.new], [], [mv file.new file])
17993 @end example
17995 This is especially useful in other M4 macros, where the @dfn{then} and
17996 @dfn{else} branches might be macro arguments.
17998 Some very old shells did not reset the exit status from an @command{if}
17999 with no @command{else}:
18001 @example
18002 $ @kbd{if (exit 42); then true; fi; echo $?}
18004 @end example
18006 @noindent
18007 whereas a proper shell should have printed @samp{0}.  But this is no
18008 longer a portability problem; any shell that supports functions gets it
18009 correct.  However, it explains why some makefiles have lengthy
18010 constructs:
18012 @example
18013 if test -f "$file"; then
18014   install "$file" "$dest"
18015 else
18016   :
18018 @end example
18021 @item @command{printf}
18022 @c ------------------
18023 @prindex @command{printf}
18024 A format string starting with a @samp{-} can cause problems.
18025 Bash interprets it as an option and
18026 gives an error.  And @samp{--} to mark the end of options is not good
18027 in the NetBSD Almquist shell (e.g., 0.4.6) which takes that
18028 literally as the format string.  Putting the @samp{-} in a @samp{%c}
18029 or @samp{%s} is probably easiest:
18031 @example
18032 printf %s -foo
18033 @end example
18035 AIX 7.2 @command{sh} mishandles octal escapes in multi-byte locales by
18036 treating them as characters instead of bytes.  For example, in a locale
18037 using the UTF-8 encoding, @samp{printf '\351'} outputs the two bytes C3,
18038 A9 (the UTF-8 encoding for U+00E9) instead of the desired single byte E9.
18039 To work around the bug, use the C locale.
18041 Bash 2.03 mishandles an escape sequence that happens to evaluate to @samp{%}:
18043 @example
18044 $ @kbd{printf '\045'}
18045 bash: printf: `%': missing format character
18046 @end example
18048 Large outputs may cause trouble.  On Solaris 2.5.1 through 10, for
18049 example, @file{/usr/bin/printf} is buggy, so when using
18050 @command{/bin/sh} the command @samp{printf %010000x 123} normally dumps
18051 core.
18053 Since @command{printf} is not always a shell builtin, there is a
18054 potential speed penalty for using @code{printf '%s\n'} as a replacement
18055 for an @command{echo} that does not interpret @samp{\} or leading
18056 @samp{-}. With Solaris @command{ksh}, it is possible to use @code{print
18057 -r --} for this role instead.
18059 @xref{echo, , Limitations of Shell Builtins}, for a discussion of
18060 portable alternatives to both @command{printf} and @command{echo}.
18063 @item @command{pwd}
18064 @c ----------------
18065 @prindex @command{pwd}
18066 With modern shells, plain @command{pwd} outputs a ``logical''
18067 directory name, some of whose components may be symbolic links.  These
18068 directory names are in contrast to ``physical'' directory names, whose
18069 components are all directories.
18071 Posix 1003.1-2001 requires that @command{pwd} must support
18072 the @option{-L} (``logical'') and @option{-P} (``physical'') options,
18073 with @option{-L} being the default.  However, traditional shells do
18074 not support these options, and their @command{pwd} command has the
18075 @option{-P} behavior.
18077 Portable scripts should assume neither option is supported, and should
18078 assume neither behavior is the default.  Also, on many hosts
18079 @samp{/bin/pwd} is equivalent to @samp{pwd -P}, but Posix
18080 does not require this behavior and portable scripts should not rely on
18083 Typically it's best to use plain @command{pwd}.  On modern hosts this
18084 outputs logical directory names, which have the following advantages:
18086 @itemize @bullet
18087 @item
18088 Logical names are what the user specified.
18089 @item
18090 Physical names may not be portable from one installation
18091 host to another due to network file system gymnastics.
18092 @item
18093 On modern hosts @samp{pwd -P} may fail due to lack of permissions to
18094 some parent directory, but plain @command{pwd} cannot fail for this
18095 reason.
18096 @end itemize
18098 Also please see the discussion of the @command{cd} command.
18101 @item @command{read}
18102 @c -----------------
18103 @prindex @command{read}
18104 No options are portable, not even support @option{-r} (Solaris
18105 @command{/bin/sh} for example).  Tru64/OSF 5.1 @command{sh} treats
18106 @command{read} as a special built-in, so it may exit if input is
18107 redirected from a non-existent or unreadable file.
18110 @anchor{set}
18111 @item @command{set}
18112 @c ----------------
18113 @prindex @command{set}
18114 With the FreeBSD 6.0 shell, the @command{set} command (without
18115 any options) does not sort its output.
18117 The @command{set} builtin faces the usual problem with arguments
18118 starting with a
18119 dash.  Modern shells such as Bash or Zsh understand @option{--} to specify
18120 the end of the options (any argument after @option{--} is a parameter,
18121 even @samp{-x} for instance), but many traditional shells (e.g., Solaris
18122 10 @command{/bin/sh}) simply stop option
18123 processing as soon as a non-option argument is found.  Therefore, use
18124 @samp{dummy} or simply @samp{x} to end the option processing, and use
18125 @command{shift} to pop it out:
18127 @example
18128 set x $my_list; shift
18129 @end example
18131 Avoid @samp{set -}, e.g., @samp{set - $my_list}.  Posix no
18132 longer requires support for this command, and in traditional shells
18133 @samp{set - $my_list} resets the @option{-v} and @option{-x} options, which
18134 makes scripts harder to debug.
18136 Some nonstandard shells do not recognize more than one option
18137 (e.g., @samp{set -e -x} assigns @samp{-x} to the command line).  It is
18138 better to combine them:
18140 @example
18141 set -ex
18142 @end example
18144 @cindex @command{set -e}
18145 The @option{-e} option has historically been under-specified, with enough
18146 ambiguities to cause numerous differences across various shell
18147 implementations; see for example
18148 @uref{https://www.in-ulm.de/@/~mascheck/@/various/@/set-e/, this overview},
18149 or @uref{https://www.austingroupbugs.net/@/view.php?id=52, this link},
18150 documenting a change to Posix 2008 to match @command{ksh88} behavior.
18151 Note that mixing @code{set -e} and shell functions is asking for surprises:
18153 @example
18154 set -e
18155 doit()
18157   rm file
18158   echo one
18160 doit || echo two
18161 @end example
18163 @noindent
18164 According to the recommendation, @samp{one} should always be output
18165 regardless of whether the @command{rm} failed, because it occurs within
18166 the body of the shell function @samp{doit} invoked on the left side of
18167 @samp{||}, where the effects of @samp{set -e} are not enforced.
18168 Likewise, @samp{two} should never be printed, since the failure of
18169 @command{rm} does not abort the function, such that the status of
18170 @samp{doit} is 0.
18172 The BSD shell has had several problems with the @option{-e}
18173 option.  Older versions of the BSD
18174 shell (circa 1990) mishandled @samp{&&}, @samp{||}, @samp{if}, and
18175 @samp{case} when @option{-e} was in effect, causing the shell to exit
18176 unexpectedly in some cases.  This was particularly a problem with
18177 makefiles, and led to circumlocutions like @samp{sh -c 'test -f file ||
18178 touch file'}, where the seemingly-unnecessary @samp{sh -c '@dots{}'}
18179 wrapper works around the bug (@pxref{Failure in Make Rules}).
18181 Even relatively-recent versions of the BSD shell (e.g., OpenBSD 3.4)
18182 wrongly exit with @option{-e} if the last command within a compound
18183 statement fails and is guarded by an @samp{&&} only.  For example:
18185 @example
18186 #! /bin/sh
18187 set -e
18188 foo=''
18189 test -n "$foo" && exit 1
18190 echo one
18191 if :; then
18192   test -n "$foo" && exit 1
18193   echo two
18194   test -n "$foo" && exit 1
18196 echo three
18197 @end example
18199 @noindent
18200 does not print @samp{three}.  One workaround is to change the last
18201 instance of @samp{test -n "$foo" && exit 1} to be @samp{if test -n
18202 "$foo"; then exit 1; fi} instead.  Another possibility is to warn BSD
18203 users not to use @samp{sh -e}.
18205 When @samp{set -e} is in effect, a failed command substitution in
18206 Solaris @command{/bin/sh} cannot be ignored, even with @samp{||}.
18208 @example
18209 $ @kbd{/bin/sh -c 'set -e; foo=`false` || echo foo; echo bar'}
18210 $ @kbd{bash -c 'set -e; foo=`false` || echo foo; echo bar'}
18213 @end example
18215 @noindent
18216 Moreover, a command substitution, successful or not, causes this shell to
18217 exit from a failing outer command even in presence of an @samp{&&} list:
18219 @example
18220 $ @kbd{bash -c 'set -e; false `true` && echo notreached; echo ok'}
18222 $ @kbd{sh -c 'set -e; false `true` && echo notreached; echo ok'}
18224 @end example
18226 Portable scripts should not use @samp{set -e} if @command{trap} is used
18227 to install an exit handler.  This is because Tru64/OSF 5.1 @command{sh}
18228 sometimes enters the trap handler with the exit status of the command
18229 prior to the one that triggered the errexit handler:
18231 @example
18232 $ @kbd{sh -ec 'trap '\''echo $?'\'' 0; false'}
18234 $ @kbd{sh -c 'set -e; trap '\''echo $?'\'' 0; false'}
18236 @end example
18238 @noindent
18239 Thus, when writing a script in M4sh, rather than trying to rely on
18240 @samp{set -e}, it is better to append @samp{|| AS_EXIT} to any
18241 statement where it is desirable to abort on failure.
18243 @cindex @command{set -b}
18244 @cindex @command{set -m}
18245 Job control is not provided by all shells, so the use of @samp{set -m}
18246 or @samp{set -b} must be done with care.  When using @command{zsh} in
18247 native mode, asynchronous notification (@samp{set -b}) is enabled by
18248 default, and using @samp{emulate sh} to switch to Posix mode does not
18249 clear this setting (although asynchronous notification has no impact
18250 unless job monitoring is also enabled).  Also, @command{zsh} 4.3.10 and
18251 earlier have a bug where job control can be manipulated in interactive
18252 shells, but not in subshells or scripts.  Furthermore, some shells, like
18253 @command{pdksh}, fail to treat subshells as interactive, even though the
18254 parent shell was.
18256 @example
18257 $ @kbd{echo $ZSH_VERSION}
18258 4.3.10
18259 $ @kbd{set -m; echo $?}
18261 $ @kbd{zsh -c 'set -m; echo $?'}
18262 set: can't change option: -m
18263 $ @kbd{(set -m); echo $?}
18264 set: can't change option: -m
18266 $ @kbd{pdksh -ci 'echo $-; (echo $-)'}
18269 @end example
18271 @cindex @command{set -n}
18272 Use of @command{set -n} (typically via @command{sh -n script}) to
18273 validate a script is not foolproof.  Modern @command{ksh93} tries to be
18274 helpful by informing you about better syntax, but switching the script
18275 to use the suggested syntax in order to silence the warnings would
18276 render the script no longer portable to older shells:
18278 @example
18279 $ @kbd{ksh -nc '``'}
18280 ksh: warning: line 1: `...` obsolete, use $(...)
18282 @end example
18284 Furthermore, on ancient hosts, such as SunOS 4, @command{sh -n} could go
18285 into an infinite loop; even with that bug fixed, Solaris 8
18286 @command{/bin/sh} takes extremely long to parse large scripts.  Autoconf
18287 itself uses @command{sh -n} within its testsuite to check that correct
18288 scripts were generated, but only after first probing for other shell
18289 features (such as @code{test $@{BASH_VERSION+y@}}) that indicate
18290 a reasonably fast and working implementation.
18292 @item @command{shift}
18293 @c ------------------
18294 @prindex @command{shift}
18295 Not only is @command{shift}ing a bad idea when there is nothing left to
18296 shift, but in addition it is not portable: the shell of MIPS
18297 RISC/OS 4.52 refuses to do it.
18299 Don't use @samp{shift 2} etc.; while it in the SVR1 shell (1983),
18300 it is also absent in many pre-Posix shells.
18303 @item @command{source}
18304 @c -------------------
18305 @prindex @command{source}
18306 This command is not portable, as Posix does not require it; use
18307 @command{.} instead.
18310 @item @command{test}
18311 @c -----------------
18312 @prindex @command{test}
18313 The @code{test} program is the way to perform many file and string
18314 tests.  It is often invoked by the alternate name @samp{[}, but using
18315 that name in Autoconf code is asking for trouble since it is an M4 quote
18316 character.
18318 The @option{-a}, @option{-o}, @samp{(}, and @samp{)} operands are not
18319 present in all implementations, and have been marked obsolete by Posix
18320 2008.  This is because there are inherent ambiguities in using them.
18321 For example, @samp{test "$1" -a "$2"} looks like a binary operator to
18322 check whether two strings are both non-empty, but if @samp{$1} is the
18323 literal @samp{!}, then some implementations of @command{test} treat it
18324 as a negation of the unary operator @option{-a}.
18326 Thus, portable uses of @command{test} should never have more than four
18327 arguments, and scripts should use shell constructs like @samp{&&} and
18328 @samp{||} instead.  If you combine @samp{&&} and @samp{||} in the same
18329 statement, keep in mind that they have equal precedence, so it is often
18330 better to parenthesize even when this is redundant.  For example:
18332 @smallexample
18333 # Not portable:
18334 test "X$a" = "X$b" -a \
18335   '(' "X$c" != "X$d" -o "X$e" = "X$f" ')'
18337 # Portable:
18338 test "X$a" = "X$b" &&
18339   @{ test "X$c" != "X$d" || test "X$e" = "X$f"; @}
18340 @end smallexample
18342 @command{test} does not process options like most other commands do; for
18343 example, it does not recognize the @option{--} argument as marking the
18344 end of options.
18346 It is safe to use @samp{!} as a @command{test} operator.  For example,
18347 @samp{if test ! -d foo; @dots{}} is portable even though @samp{if ! test
18348 -d foo; @dots{}} is not.
18351 @item @command{test} (files)
18352 @c -------------------------
18353 To enable @command{configure} scripts to support cross-compilation, they
18354 shouldn't do anything that tests features of the build system instead of
18355 the host system.  But occasionally you may find it necessary to check
18356 whether some arbitrary file exists.  To do so, use @samp{test -f},
18357 @samp{test -r}, or @samp{test -x}.  Do not use @samp{test -e}, because
18358 Solaris 10 @command{/bin/sh}
18359 lacks it.  To test for symbolic links on systems that have them, use
18360 @samp{test -h} rather than @samp{test -L}; either form conforms to
18361 Posix 1003.1-2001, but older shells like Solaris 8
18362 @code{/bin/sh} support only @option{-h}.
18364 For historical reasons, Posix reluctantly allows implementations of
18365 @samp{test -x} that will succeed for the root user, even if no execute
18366 permissions are present.  Furthermore, shells do not all agree on
18367 whether Access Control Lists should affect @samp{test -r}, @samp{test
18368 -w}, and @samp{test -x}; some shells base test results strictly on the
18369 current user id compared to file owner and mode, as if by
18370 @code{stat(2)}; while other shells base test results on whether the
18371 current user has the given right, even if that right is only granted by
18372 an ACL, as if by @code{faccessat(2)}.  Furthermore, there is a classic
18373 time of check to time of use race between any use of @command{test}
18374 followed by operating on the just-checked file.  Therefore, it is a good
18375 idea to write scripts that actually attempt an operation, and are
18376 prepared for the resulting failure if permission is denied, rather than
18377 trying to avoid an operation based solely on whether @command{test}
18378 guessed that it might not be permitted.
18380 @item @command{test} (strings)
18381 @c ---------------------------
18382 Posix says that @samp{test "@var{string}"} succeeds if @var{string} is
18383 not null, but this usage is not portable to traditional platforms like
18384 Solaris 10 @command{/bin/sh}, which mishandle strings like @samp{!} and
18385 @samp{-n}.  However, it @emph{is} portable to test if a variable is set
18386 to a non-empty value, by using @samp{test $@{var+y@}}, since all known
18387 implementations properly distinguish between no arguments and a
18388 known-safe string of @samp{y}.
18390 Posix also says that @samp{test ! "@var{string}"},
18391 @samp{test -n "@var{string}"} and
18392 @samp{test -z "@var{string}"} work with any string, but many
18393 shells (such as Solaris, AIX 3.2, UNICOS 10.0.0.6,
18394 Digital Unix 4, etc.)@: get confused if
18395 @var{string} looks like an operator:
18397 @example
18398 $ @kbd{test -n =}
18399 test: argument expected
18400 $ @kbd{test ! -n}
18401 test: argument expected
18402 $ @kbd{test -z ")"; echo $?}
18404 @end example
18406 Similarly, Posix says that both @samp{test "@var{string1}" = "@var{string2"}}
18407 and @samp{test "@var{string1}" != "@var{string2"}} work for any pairs of
18408 strings, but in practice this is not true for troublesome strings that
18409 look like operators or parentheses, or that begin with @samp{-}.
18411 It is best to protect such strings with a leading @samp{X}, e.g.,
18412 @samp{test "X@var{string}" != X} rather than @samp{test -n
18413 "@var{string}"} or @samp{test ! "@var{string}"}.
18415 It is common to find variations of the following idiom:
18417 @example
18418 test -n "`echo $ac_feature | sed 's/[-a-zA-Z0-9_]//g'`" &&
18419   @var{action}
18420 @end example
18422 @noindent
18423 to take an action when a token matches a given pattern.  Such constructs
18424 should be avoided by using:
18426 @example
18427 case $ac_feature in
18428   *[!-a-zA-Z0-9_]*) @var{action};;
18429 esac
18430 @end example
18432 If the pattern is a complicated regular expression that cannot be
18433 expressed as a shell pattern, use something like this instead:
18435 @example
18436 expr "X$ac_feature" : 'X.*[^-a-zA-Z0-9_]' >/dev/null &&
18437   @var{action}
18438 @end example
18440 @samp{expr "X@var{foo}" : "X@var{bar}"} is more robust than @samp{echo
18441 "X@var{foo}" | grep "^X@var{bar}"}, because it avoids problems when
18442 @samp{@var{foo}} contains backslashes.
18445 @anchor{trap}
18446 @item @command{trap}
18447 @c -----------------
18448 @prindex @command{trap}
18449 It is safe to trap at least the signals 1, 2, 13, and 15.  You can also
18450 trap 0, i.e., have the @command{trap} run when the script ends (either via an
18451 explicit @command{exit}, or the end of the script).  The trap for 0 should be
18452 installed outside of a shell function, or AIX 5.3 @command{/bin/sh}
18453 will invoke the trap at the end of this function.
18455 Posix says that @samp{trap - 1 2 13 15} resets the traps for the
18456 specified signals to their default values, but many common shells (e.g.,
18457 Solaris @command{/bin/sh}) misinterpret this and attempt to execute a
18458 ``command'' named @command{-} when the specified conditions arise.
18459 Posix 2008 also added a requirement to support @samp{trap 1 2 13 15} to
18460 reset traps, as this is supported by a larger set of shells, but there
18461 are still shells like @command{dash} that mistakenly try to execute
18462 @command{1} instead of resetting the traps.  Therefore, there is no
18463 portable workaround, except for @samp{trap - 0}, for which
18464 @samp{trap '' 0} is a portable substitute.
18466 Although Posix is not absolutely clear on this point, it is widely
18467 admitted that when entering the trap @samp{$?} should be set to the exit
18468 status of the last command run before the trap.  The ambiguity can be
18469 summarized as: ``when the trap is launched by an @command{exit}, what is
18470 the @emph{last} command run: that before @command{exit}, or
18471 @command{exit} itself?''
18473 Bash considers @command{exit} to be the last command, while Zsh and
18474 Solaris @command{/bin/sh} consider that when the trap is run it is
18475 @emph{still} in the @command{exit}, hence it is the previous exit status
18476 that the trap receives:
18478 @example
18479 $ @kbd{cat trap.sh}
18480 trap 'echo $?' 0
18481 (exit 42); exit 0
18482 $ @kbd{zsh trap.sh}
18484 $ @kbd{bash trap.sh}
18486 @end example
18488 The portable solution is then simple: when you want to @samp{exit 42},
18489 run @samp{(exit 42); exit 42}, the first @command{exit} being used to
18490 set the exit status to 42 for Zsh, and the second to trigger the trap
18491 and pass 42 as exit status for Bash.  In M4sh, this is covered by using
18492 @code{AS_EXIT}.
18494 The shell in FreeBSD 4.0 has the following bug: @samp{$?} is
18495 reset to 0 by empty lines if the code is inside @command{trap}.
18497 @example
18498 $ @kbd{trap 'false}
18500 echo $?' 0
18501 $ @kbd{exit}
18503 @end example
18505 @noindent
18506 Fortunately, this bug only affects @command{trap}.
18508 Several shells fail to execute an exit trap that is defined inside a
18509 subshell, when the last command of that subshell is not a builtin.  A
18510 workaround is to use @samp{exit $?} as the shell builtin.
18512 @example
18513 $ @kbd{bash -c '(trap "echo hi" 0; /bin/true)'}
18515 $ @kbd{/bin/sh -c '(trap "echo hi" 0; /bin/true)'}
18516 $ @kbd{/bin/sh -c '(trap "echo hi" 0; /bin/true; exit $?)'}
18518 @end example
18520 @noindent
18521 Likewise, older implementations of @command{bash} failed to preserve
18522 @samp{$?} across an exit trap consisting of a single cleanup command.
18524 @example
18525 $ @kbd{bash -c 'trap "/bin/true" 0; exit 2'; echo $?}
18527 $ @kbd{bash-2.05b -c 'trap "/bin/true" 0; exit 2'; echo $?}
18529 $ @kbd{bash-2.05b -c 'trap ":; /bin/true" 0; exit 2'; echo $?}
18531 @end example
18533 Be aware that a trap can be called from any number of places in your
18534 script, and therefore the trap handler should not make assumptions about
18535 shell state.  For some examples, if your script temporarily modifies
18536 @env{IFS}, then the trap should include an initialization back to its
18537 typical value of space-tab-newline (autoconf does this for generated
18538 @file{configure} files).  Likewise, if your script changes the current
18539 working directory at some point after the trap is installed, then your
18540 trap cannot assume which directory it is in, and should begin by
18541 changing directories to an absolute path if that is important to the
18542 cleanup efforts (autotest does this for generated @file{testsuite}
18543 files).
18545 @item @command{true}
18546 @c -----------------
18547 @prindex @command{true}
18548 @c Info cannot handle `:' in index entries.
18549 @c @prindex @command{:}
18550 Don't worry: as far as we know @command{true} is portable.
18551 Nevertheless, it's not always a builtin (e.g., Bash 1.x), and the
18552 portable shell community tends to prefer using @command{:}.  This has a
18553 funny side effect: when asked whether @command{false} is more portable
18554 than @command{true} Alexandre Oliva answered:
18556 @quotation
18557 In a sense, yes, because if it doesn't exist, the shell will produce an
18558 exit status of failure, which is correct for @command{false}, but not
18559 for @command{true}.
18560 @end quotation
18562 Remember that even though @samp{:} ignores its arguments, it still takes
18563 time to compute those arguments.  It is a good idea to use double quotes
18564 around any arguments to @samp{:} to avoid time spent in field splitting
18565 and file name expansion.
18568 @anchor{unset}
18569 @item @command{unset}
18570 @c ------------------
18571 @prindex @command{unset}
18572 In some nonconforming shells (e.g., Solaris 10 @command{/bin/ksh} and
18573 @command{/usr/xpg4/bin/sh}, NetBSD 5.99.43 sh, or Bash 2.05a),
18574 @code{unset FOO} fails when @code{FOO} is not set.  This can interfere
18575 with @code{set -e} operation.  You can use
18577 @smallexample
18578 FOO=; unset FOO
18579 @end smallexample
18581 @noindent
18582 if you are not sure that @code{FOO} is set.
18584 A few ancient shells lack @command{unset} entirely.  For some variables
18585 such as @code{PS1}, you can use a neutralizing value instead:
18587 @smallexample
18588 PS1='$ '
18589 @end smallexample
18591 Usually, shells that do not support @command{unset} need less effort to
18592 make the environment sane, so for example is not a problem if you cannot
18593 unset @command{CDPATH} on those shells.  However, Bash 2.01 mishandles
18594 @code{unset MAIL} and @code{unset MAILPATH} in some cases and dumps core.
18595 So, you should do something like
18597 @smallexample
18598 ( (unset MAIL) || exit 1) >/dev/null 2>&1 && unset MAIL || :
18599 @end smallexample
18601 @noindent
18602 @xref{Special Shell Variables}, for some neutralizing values.  Also, see
18603 @ref{export, , Limitations of Builtins}, for
18604 the case of environment variables.
18606 @item @command{wait}
18607 @c -----------------
18608 @prindex @command{wait}
18609 The exit status of @command{wait} is not always reliable.
18610 @end table
18612 @node Limitations of Usual Tools
18613 @section Limitations of Usual Tools
18614 @cindex Limitations of usual tools
18616 The small set of tools you can expect to find on any machine can still
18617 include some limitations you should be aware of.
18619 @comment Between this list and the list of builtins above, we should
18620 @comment mention all the tools in GNU Coding Standards ``Utilities in
18621 @comment Makefiles''.
18623 @c This table includes things like `@command{expr} (|)', so we can't
18624 @c use @table @command.
18625 @table @asis
18626 @anchor{awk}
18627 @item @command{awk}
18628 @c ----------------
18629 @prindex @command{awk}
18630 Don't leave white space before the opening parenthesis in a user function call.
18631 Posix does not allow this and GNU Awk rejects it:
18633 @example
18634 $ @kbd{gawk 'function die () @{ print "Aaaaarg!"  @}
18635         BEGIN @{ die () @}'}
18636 gawk: cmd. line:2:         BEGIN @{ die () @}
18637 gawk: cmd. line:2:                      ^ parse error
18638 $ @kbd{gawk 'function die () @{ print "Aaaaarg!"  @}
18639         BEGIN @{ die() @}'}
18640 Aaaaarg!
18641 @end example
18643 Posix says that if a program contains only @samp{BEGIN} actions, and
18644 contains no instances of @code{getline}, then the program merely
18645 executes the actions without reading input.  However, traditional Awk
18646 implementations (such as Solaris 10 @command{awk}) read and discard
18647 input in this case.  Portable scripts can redirect input from
18648 @file{/dev/null} to work around the problem.  For example:
18650 @example
18651 awk 'BEGIN @{print "hello world"@}' </dev/null
18652 @end example
18654 Posix says that in an @samp{END} action, @samp{$NF} (and presumably,
18655 @samp{$1}) retain their value from the last record read, if no
18656 intervening @samp{getline} occurred.  However, some implementations
18657 (such as Solaris 10 @samp{/usr/bin/awk}, @samp{nawk}, or Darwin
18658 @samp{awk}) reset these variables.  A workaround is to use an
18659 intermediate variable prior to the @samp{END} block.  For example:
18661 @example
18662 $ @kbd{cat end.awk}
18663 @{ tmp = $1 @}
18664 END @{ print "a", $1, $NF, "b", tmp @}
18665 $ @kbd{echo 1 | awk -f end.awk}
18666 a   b 1
18667 $ @kbd{echo 1 | gawk -f end.awk}
18668 a 1 1 b 1
18669 @end example
18671 If you want your program to be deterministic, don't depend on @code{for}
18672 on arrays:
18674 @example
18675 $ @kbd{cat for.awk}
18676 END @{
18677   arr["foo"] = 1
18678   arr["bar"] = 1
18679   for (i in arr)
18680     print i
18682 $ @kbd{gawk -f for.awk </dev/null}
18685 $ @kbd{nawk -f for.awk </dev/null}
18688 @end example
18690 Some Awk implementations, such as HP-UX 11.0's native one,
18691 mishandle anchors:
18693 @example
18694 $ @kbd{echo xfoo | $AWK '/foo|^bar/ @{ print @}'}
18695 $ @kbd{echo bar | $AWK '/foo|^bar/ @{ print @}'}
18697 $ @kbd{echo xfoo | $AWK '/^bar|foo/ @{ print @}'}
18698 xfoo
18699 $ @kbd{echo bar | $AWK '/^bar|foo/ @{ print @}'}
18701 @end example
18703 @noindent
18704 Either do not depend on such patterns (i.e., use @samp{/^(.*foo|bar)/},
18705 or use a simple test to reject such implementations.
18707 On @samp{ia64-hp-hpux11.23}, Awk mishandles @code{printf} conversions
18708 after @code{%u}:
18710 @example
18711 $ @kbd{awk 'BEGIN @{ printf "%u %d\n", 0, -1 @}'}
18712 0 0
18713 @end example
18715 AIX version 5.2 has an arbitrary limit of 399 on the
18716 length of regular expressions and literal strings in an Awk program.
18718 Traditional Awk implementations derived from Unix version 7, such as
18719 Solaris @command{/bin/awk}, have many limitations and do not
18720 conform to Posix.  Nowadays @code{AC_PROG_AWK} (@pxref{Particular
18721 Programs}) finds you an Awk that doesn't have these problems, but if
18722 for some reason you prefer not to use @code{AC_PROG_AWK} you may need to
18723 address them.  For more detailed descriptions, see @ref{Language
18724 History, , @command{awk} language history, gawk, GNU Awk User's Guide}.
18726 Traditional Awk does not support multidimensional arrays or user-defined
18727 functions.
18729 Traditional Awk does not support the @option{-v} option.  You can use
18730 assignments after the program instead, e.g., @code{$AWK '@{print v
18731 $1@}' v=x}; however, don't forget that such assignments are not
18732 evaluated until they are encountered (e.g., after any @code{BEGIN}
18733 action).
18735 Traditional Awk does not support the keywords @code{delete} or @code{do}.
18737 Traditional Awk does not support the expressions
18738 @code{@var{a}?@var{b}:@var{c}}, @code{!@var{a}}, @code{@var{a}^@var{b}},
18739 or @code{@var{a}^=@var{b}}.
18741 Traditional Awk does not support the predefined @code{CONVFMT} or
18742 @code{ENVIRON} variables.
18744 Traditional Awk supports only the predefined functions @code{exp}, @code{index},
18745 @code{int}, @code{length}, @code{log}, @code{split}, @code{sprintf},
18746 @code{sqrt}, and @code{substr}.
18748 Traditional Awk @code{getline} is not at all compatible with Posix;
18749 avoid it.
18751 Traditional Awk has @code{for (i in a) @dots{}} but no other uses of the
18752 @code{in} keyword.  For example, it lacks @code{if (i in a) @dots{}}.
18754 In code portable to both traditional and modern Awk, @code{FS} must be a
18755 string containing just one ordinary character, and similarly for the
18756 field-separator argument to @code{split}.
18758 Traditional Awk has a limit of 99 fields in a record.  Since some Awk
18759 implementations, like Tru64's, split the input even if you don't refer
18760 to any field in the script, to circumvent this problem, set @samp{FS}
18761 to an unusual character and use @code{split}.
18763 Traditional Awk has a limit of at most 99 bytes in a number formatted by
18764 @code{OFMT}; for example, @code{OFMT="%.300e"; print 0.1;} typically
18765 dumps core.
18767 The original version of Awk had a limit of at most 99 bytes per
18768 @code{split} field, 99 bytes per @code{substr} substring, and 99 bytes
18769 per run of non-special characters in a @code{printf} format, but these
18770 bugs have been fixed on all practical hosts that we know of.
18772 HP-UX 11.00 and IRIX 6.5 Awk require that input files have a line length
18773 of at most 3070 bytes.
18775 @item @command{basename}
18776 @c ---------------------
18777 @prindex @command{basename}
18778 Not all hosts have a working @command{basename}.
18779 You can use @command{expr} instead.
18781 @c AS_BASENAME is to be replaced by a better API.
18782 @ignore
18783 Not all hosts have a working @command{basename}, and you should instead
18784 use @code{AS_BASENAME} (@pxref{Programming in M4sh}), followed by
18785 @command{expr} if you need to strip a suffix.  For example:
18787 @example
18788 a=`basename "$aname"`       # This is not portable.
18789 a=`AS_BASENAME(["$aname"])` # This is more portable.
18791 # This is not portable.
18792 c=`basename "$cname" .c`
18794 # This is more portable.
18795 c=`AS_BASENAME(["$cname"])`
18796 case $c in
18797 ?*.c) c=`expr "X$c" : 'X\(.*\)\.c'`;;
18798 esac
18799 @end example
18800 @end ignore
18803 @item @command{cat}
18804 @c ----------------
18805 @prindex @command{cat}
18806 Don't rely on any option.
18809 @item @command{cc}
18810 @c ---------------
18811 @prindex @command{cc}
18812 The command @samp{cc -c foo.c} traditionally produces an object file
18813 named @file{foo.o}.  Most compilers allow @option{-c} to be combined
18814 with @option{-o} to specify a different object file name, but
18815 Posix does not require this combination and a few compilers
18816 lack support for it.  @xref{C Compiler}, for how GNU Make
18817 tests for this feature with @code{AC_PROG_CC_C_O}.
18819 When a compilation such as @samp{cc -o foo foo.c} fails, some compilers
18820 (such as CDS on Reliant Unix) leave a @file{foo.o}.
18822 HP-UX @command{cc} doesn't accept @file{.S} files to preprocess and
18823 assemble.  @samp{cc -c foo.S} appears to succeed, but in fact does
18824 nothing.
18826 The default executable, produced by @samp{cc foo.c}, can be
18828 @itemize
18829 @item @file{a.out} -- usual Posix convention.
18830 @item @file{b.out} -- i960 compilers (including @command{gcc}).
18831 @item @file{a.exe} -- DJGPP port of @command{gcc}.
18832 @item @file{a_out.exe} -- GNV @command{cc} wrapper for DEC C on OpenVMS.
18833 @item @file{foo.exe} -- various MS-DOS compilers.
18834 @end itemize
18836 The C compiler's traditional name is @command{cc}, but other names like
18837 @command{gcc} are common.  Posix 1003.1-2001 and 1003.1-2008 specify the
18838 name @command{c99}, but older Posix editions specified
18839 @command{c89}, future POSIX standards will likely specify
18840 @command{c11}, and anyway these standard names are rarely used in
18841 practice.  Typically the C compiler is invoked from makefiles that use
18842 @samp{$(CC)}, so the value of the @samp{CC} make variable selects the
18843 compiler name.
18845 @item @command{chgrp}
18846 @itemx @command{chown}
18847 @c -------------------
18848 @prindex @command{chgrp}
18849 @prindex @command{chown}
18850 It is not portable to change a file's group to a group that the owner
18851 does not belong to.
18853 @item @command{chmod}
18854 @c ------------------
18855 @prindex @command{chmod}
18856 Avoid usages like @samp{chmod -w file}; use @samp{chmod a-w file}
18857 instead, for two reasons.  First, plain @option{-w} does not necessarily
18858 make the file unwritable, since it does not affect mode bits that
18859 correspond to bits in the file mode creation mask.  Second,
18860 Posix says that the @option{-w} might be interpreted as an
18861 implementation-specific option, not as a mode; Posix suggests
18862 using @samp{chmod -- -w file} to avoid this confusion, but unfortunately
18863 @samp{--} does not work on some older hosts.
18866 @item @command{cmp}
18867 @c ----------------
18868 @prindex @command{cmp}
18869 @command{cmp} performs a raw data comparison of two files, while
18870 @command{diff} compares two text files.  Therefore, if you might compare
18871 DOS files, even if only checking whether two files are different, use
18872 @command{diff} to avoid spurious differences due to differences of
18873 newline encoding.
18876 @item @command{cp}
18877 @c ---------------
18878 @prindex @command{cp}
18879 Avoid the @option{-r} option, since Posix 1003.1-2004 marks it as
18880 obsolescent and its behavior on special files is implementation-defined.
18881 Use @option{-R} instead.  On GNU hosts the two options
18882 are equivalent, but on Solaris hosts (for example) @code{cp -r}
18883 reads from pipes instead of replicating them.  AIX 5.3 @code{cp -R} may
18884 corrupt its own memory with some directory hierarchies and error out or
18885 dump core:
18887 @example
18888 @kbd{mkdir -p 12345678/12345678/12345678/12345678}
18889 @kbd{touch 12345678/12345678/x}
18890 @kbd{cp -R 12345678 t}
18891 cp: 0653-440 12345678/12345678/: name too long.
18892 @end example
18894 Some @command{cp} implementations (e.g., BSD/OS 4.2) do not allow
18895 trailing slashes at the end of nonexistent destination directories.  To
18896 avoid this problem, omit the trailing slashes.  For example, use
18897 @samp{cp -R source /tmp/newdir} rather than @samp{cp -R source
18898 /tmp/newdir/} if @file{/tmp/newdir} does not exist.
18900 The @option{-f} option is portable nowadays.
18902 @cindex timestamp resolution
18903 Traditionally, file timestamps had 1-second resolution, and @samp{cp
18904 -p} copied the timestamps exactly.  However, many modern file systems
18905 have timestamps with 1-nanosecond resolution.  Unfortunately, some older
18906 @samp{cp -p} implementations truncate timestamps when copying files,
18907 which can cause the destination file to appear to be older than the
18908 source.  The exact amount of truncation depends on the resolution of
18909 the system calls that @command{cp} uses.  Traditionally this was
18910 @code{utime}, which has 1-second resolution.  Less-ancient @command{cp}
18911 implementations such as GNU Core Utilities 5.0.91 (2003) use
18912 @code{utimes}, which has 1-microsecond resolution.  Modern
18913 implementations such as GNU Core Utilities 6.12 (2008) can set timestamps to
18914 the full nanosecond resolution, using the modern system calls
18915 @code{futimens} and @code{utimensat} when they are available.  As of
18916 2011, though, many platforms do not yet fully support these new system
18917 calls.
18919 Bob Proulx notes that @samp{cp -p} always @emph{tries} to copy
18920 ownerships.  But whether it actually does copy ownerships or not is a
18921 system dependent policy decision implemented by the kernel.  If the
18922 kernel allows it then it happens.  If the kernel does not allow it then
18923 it does not happen.  It is not something @command{cp} itself has control
18924 over.
18926 In Unix System V any user can chown files to any other user, and System
18927 V also has a non-sticky @file{/tmp}.  That probably derives from the
18928 heritage of System V in a business environment without hostile users.
18929 BSD changed this
18930 to be a more secure model where only root can @command{chown} files and
18931 a sticky @file{/tmp} is used.  That undoubtedly derives from the heritage
18932 of BSD in a campus environment.
18934 GNU/Linux and Solaris by default follow BSD, but
18935 can be configured to allow a System V style @command{chown}.  On the
18936 other hand, HP-UX follows System V, but can
18937 be configured to use the modern security model and disallow
18938 @command{chown}.  Since it is an administrator-configurable parameter
18939 you can't use the name of the kernel as an indicator of the behavior.
18943 @item @command{date}
18944 @c -----------------
18945 @prindex @command{date}
18946 Some versions of @command{date} do not recognize special @samp{%} directives,
18947 and unfortunately, instead of complaining, they just pass them through,
18948 and exit with success:
18950 @example
18951 $ @kbd{uname -a}
18952 OSF1 medusa.sis.pasteur.fr V5.1 732 alpha
18953 $ @kbd{date "+%s"}
18955 @end example
18958 @item @command{diff}
18959 @c -----------------
18960 @prindex @command{diff}
18961 Option @option{-u} is nonportable.
18963 Some implementations, such as Tru64's, fail when comparing to
18964 @file{/dev/null}.  Use an empty file instead.
18967 @item @command{dirname}
18968 @c --------------------
18969 @prindex @command{dirname}
18970 Not all hosts have a working @command{dirname}, and you should instead
18971 use @code{AS_DIRNAME} (@pxref{Programming in M4sh}).  For example:
18973 @example
18974 dir=`dirname "$file"`       # This is not portable.
18975 dir=`AS_DIRNAME(["$file"])` # This is more portable.
18976 @end example
18979 @item @command{egrep}
18980 @c ------------------
18981 @prindex @command{egrep}
18982 Posix 1003.1-2001 no longer requires @command{egrep},
18983 but many hosts do not yet support the Posix
18984 replacement @code{grep -E}.  Also, some traditional implementations do
18985 not work on long input lines.  To work around these problems, invoke
18986 @code{AC_PROG_EGREP} and then use @code{$EGREP}.
18988 Portable extended regular expressions should use @samp{\} only to escape
18989 characters in the string @samp{$()*+.?[\^@{|}.  For example, @samp{\@}}
18990 is not portable, even though it typically matches @samp{@}}.
18992 The empty alternative is not portable.  Use @samp{?} instead.  For
18993 instance with Digital Unix v5.0:
18995 @example
18996 > printf "foo\n|foo\n" | $EGREP '^(|foo|bar)$'
18997 |foo
18998 > printf "bar\nbar|\n" | $EGREP '^(foo|bar|)$'
18999 bar|
19000 > printf "foo\nfoo|\n|bar\nbar\n" | $EGREP '^(foo||bar)$'
19002 |bar
19003 @end example
19005 @command{$EGREP} also suffers the limitations of @command{grep}
19006 (@pxref{grep, , Limitations of Usual Tools}).
19008 @item @command{expr}
19009 @c -----------------
19010 @prindex @command{expr}
19011 Not all implementations obey the Posix rule that @samp{--} separates
19012 options from arguments; likewise, not all implementations provide the
19013 extension to Posix that the first argument can be treated as part of a
19014 valid expression rather than an invalid option if it begins with
19015 @samp{-}.  When performing arithmetic, use @samp{expr 0 + $var} if
19016 @samp{$var} might be a negative number, to keep @command{expr} from
19017 interpreting it as an option.
19019 No @command{expr} keyword starts with @samp{X}, so use @samp{expr
19020 X"@var{word}" : 'X@var{regex}'} to keep @command{expr} from
19021 misinterpreting @var{word}.
19023 Don't use @code{length}, @code{substr}, @code{match} and @code{index}.
19025 @item @command{expr} (@samp{|})
19026 @prindex @command{expr} (@samp{|})
19027 You can use @samp{|}.  Although Posix does require that @samp{expr
19028 ''} return the empty string, it does not specify the result when you
19029 @samp{|} together the empty string (or zero) with the empty string.  For
19030 example:
19032 @example
19033 expr '' \| ''
19034 @end example
19036 Posix 1003.2-1992 returns the empty string
19037 for this case, but traditional Unix returns @samp{0} (Solaris is
19038 one such example).  In Posix 1003.1-2001, the specification was
19039 changed to match traditional Unix's behavior (which is
19040 bizarre, but it's too late to fix this).  Please note that the same
19041 problem does arise when the empty string results from a computation,
19042 as in:
19044 @example
19045 expr bar : foo \| foo : bar
19046 @end example
19048 @noindent
19049 Avoid this portability problem by avoiding the empty string.
19052 @item @command{expr} (@samp{:})
19053 @c ----------------------------
19054 @prindex @command{expr}
19055 Portable @command{expr} regular expressions should use @samp{\} to
19056 escape only characters in the string @samp{$()*.0123456789[\^n@{@}}.
19057 For example, alternation, @samp{\|}, is common but Posix does not
19058 require its support, so it should be avoided in portable scripts.
19059 Similarly, @samp{\+} and @samp{\?} should be avoided.
19061 Portable @command{expr} regular expressions should not begin with
19062 @samp{^}.  Patterns are automatically anchored so leading @samp{^} is
19063 not needed anyway.
19065 On the other hand, the behavior of the @samp{$} anchor is not portable
19066 on multi-line strings.  Posix is ambiguous whether the anchor applies to
19067 each line, as was done in older versions of the GNU Core Utilities, or
19068 whether it applies only to the end of the overall string, as in
19069 Coreutils 6.0 and most other implementations.
19071 @example
19072 $ @kbd{baz='foo}
19073 > @kbd{bar'}
19074 $ @kbd{expr "X$baz" : 'X\(foo\)$'}
19076 $ @kbd{expr-5.97 "X$baz" : 'X\(foo\)$'}
19078 @end example
19080 The Posix standard is ambiguous as to whether
19081 @samp{expr 'a' : '\(b\)'} outputs @samp{0} or the empty string.
19082 In practice, it outputs the empty string on most platforms, but portable
19083 scripts should not assume this.  For instance, the QNX 4.25 native
19084 @command{expr} returns @samp{0}.
19086 One might think that a way to get a uniform behavior would be to use
19087 the empty string as a default value:
19089 @example
19090 expr a : '\(b\)' \| ''
19091 @end example
19093 @noindent
19094 Unfortunately this behaves exactly as the original expression; see the
19095 @command{expr} (@samp{|}) entry for more information.
19097 Some ancient @command{expr} implementations (e.g., SunOS 4 @command{expr} and
19098 Solaris 8 @command{/usr/ucb/expr}) have a silly length limit that causes
19099 @command{expr} to fail if the matched substring is longer than 120
19100 bytes.  In this case, you might want to fall back on @samp{echo|sed} if
19101 @command{expr} fails.  Nowadays this is of practical importance only for
19102 the rare installer who mistakenly puts @file{/usr/ucb} before
19103 @file{/usr/bin} in @env{PATH}.
19105 On Mac OS X 10.4, @command{expr} mishandles the pattern @samp{[^-]} in
19106 some cases.  For example, the command
19107 @example
19108 expr Xpowerpc-apple-darwin8.1.0 : 'X[^-]*-[^-]*-\(.*\)'
19109 @end example
19111 @noindent
19112 outputs @samp{apple-darwin8.1.0} rather than the correct @samp{darwin8.1.0}.
19113 This particular case can be worked around by substituting @samp{[^--]}
19114 for @samp{[^-]}.
19116 Don't leave, there is some more!
19118 The QNX 4.25 @command{expr}, in addition of preferring @samp{0} to
19119 the empty string, has a funny behavior in its exit status: it's always 1
19120 when parentheses are used!
19122 @example
19123 $ @kbd{val=`expr 'a' : 'a'`; echo "$?: $val"}
19124 0: 1
19125 $ @kbd{val=`expr 'a' : 'b'`; echo "$?: $val"}
19126 1: 0
19128 $ @kbd{val=`expr 'a' : '\(a\)'`; echo "?: $val"}
19129 1: a
19130 $ @kbd{val=`expr 'a' : '\(b\)'`; echo "?: $val"}
19131 1: 0
19132 @end example
19134 @noindent
19135 In practice this can be a big problem if you are ready to catch failures
19136 of @command{expr} programs with some other method (such as using
19137 @command{sed}), since you may get twice the result.  For instance
19139 @example
19140 $ @kbd{expr 'a' : '\(a\)' || echo 'a' | sed 's/^\(a\)$/\1/'}
19141 @end example
19143 @noindent
19144 outputs @samp{a} on most hosts, but @samp{aa} on QNX 4.25.  A
19145 simple workaround consists of testing @command{expr} and using a variable
19146 set to @command{expr} or to @command{false} according to the result.
19148 Tru64 @command{expr} incorrectly treats the result as a number, if it
19149 can be interpreted that way:
19151 @example
19152 $ @kbd{expr 00001 : '.*\(...\)'}
19154 @end example
19156 On HP-UX 11, @command{expr} only supports a single
19157 sub-expression.
19159 @example
19160 $ @kbd{expr 'Xfoo' : 'X\(f\(oo\)*\)$'}
19161 expr: More than one '\(' was used.
19162 @end example
19165 @item @command{fgrep}
19166 @c ------------------
19167 @prindex @command{fgrep}
19168 Posix 1003.1-2001 no longer requires @command{fgrep},
19169 but many hosts do not yet support the Posix
19170 replacement @code{grep -F}.  Also, some traditional implementations do
19171 not work on long input lines.  To work around these problems, invoke
19172 @code{AC_PROG_FGREP} and then use @code{$FGREP}.
19174 Tru64/OSF 5.1 @command{fgrep} does not match an empty pattern.
19177 @item @command{find}
19178 @c -----------------
19179 @prindex @command{find}
19180 The @option{-maxdepth} option seems to be GNU specific.
19181 Tru64 v5.1, NetBSD 1.5 and Solaris @command{find}
19182 commands do not understand it.
19184 The replacement of @samp{@{@}} is guaranteed only if the argument is
19185 exactly @emph{@{@}}, not if it's only a part of an argument.  For
19186 instance on DU, and HP-UX 10.20 and HP-UX 11:
19188 @example
19189 $ @kbd{touch foo}
19190 $ @kbd{find . -name foo -exec echo "@{@}-@{@}" \;}
19191 @{@}-@{@}
19192 @end example
19194 @noindent
19195 while GNU @command{find} reports @samp{./foo-./foo}.
19198 @anchor{grep}
19199 @item @command{grep}
19200 @c -----------------
19201 @prindex @command{grep}
19202 Portable scripts can rely on the @command{grep} options @option{-c},
19203 @option{-l}, @option{-n}, and @option{-v}, but should avoid other
19204 options.  For example, don't use @option{-w}, as Posix does not require
19205 it and Irix 6.5.16m's @command{grep} does not support it.  Also,
19206 portable scripts should not combine @option{-c} with @option{-l},
19207 as Posix does not allow this.
19209 Some of the options required by Posix are not portable in practice.
19210 Don't use @samp{grep -q} to suppress output, because many @command{grep}
19211 implementations (e.g., Solaris) do not support @option{-q}.
19212 Don't use @samp{grep -s} to suppress output either, because Posix
19213 says @option{-s} does not suppress output, only some error messages;
19214 also, the @option{-s} option of traditional @command{grep} behaved
19215 like @option{-q} does in most modern implementations.  Instead,
19216 redirect the standard output and standard error (in case the file
19217 doesn't exist) of @code{grep} to @file{/dev/null}.  Check the exit
19218 status of @code{grep} to determine whether it found a match.
19220 The QNX4 implementation fails to count lines with @code{grep -c '$'},
19221 but works with @code{grep -c '^'}.  Other alternatives for counting
19222 lines are to use @code{sed -n '$='} or @code{wc -l}.
19224 Some traditional @command{grep} implementations do not work on long
19225 input lines.  On AIX the default @code{grep} silently truncates long
19226 lines on the input before matching.
19228 Also, many implementations do not support multiple regexps
19229 with @option{-e}: they either reject @option{-e} entirely (e.g., Solaris)
19230 or honor only the last pattern (e.g., IRIX 6.5 and NeXT).  To
19231 work around these problems, invoke @code{AC_PROG_GREP} and then use
19232 @code{$GREP}.
19234 Another possible workaround for the multiple @option{-e} problem is to
19235 separate the patterns by newlines, for example:
19237 @example
19238 grep 'foo
19239 bar' in.txt
19240 @end example
19242 @noindent
19243 except that this fails with traditional @command{grep}
19244 implementations and with OpenBSD 3.8 @command{grep}.
19246 Traditional @command{grep} implementations (e.g., Solaris) do not
19247 support the @option{-E} or @option{-F} options.  To work around these
19248 problems, invoke @code{AC_PROG_EGREP} and then use @code{$EGREP}, and
19249 similarly for @code{AC_PROG_FGREP} and @code{$FGREP}.  Even if you are
19250 willing to require support for Posix @command{grep}, your script should
19251 not use both @option{-E} and @option{-F}, since Posix does not allow
19252 this combination.
19254 Portable @command{grep} regular expressions should use @samp{\} only to
19255 escape characters in the string @samp{$()*.0123456789[\^@{@}}.  For example,
19256 alternation, @samp{\|}, is common but Posix does not require its
19257 support in basic regular expressions, so it should be avoided in
19258 portable scripts.  Solaris and HP-UX @command{grep} do not support it.
19259 Similarly, the following escape sequences should also be avoided:
19260 @samp{\<}, @samp{\>}, @samp{\+}, @samp{\?}, @samp{\`}, @samp{\'},
19261 @samp{\B}, @samp{\b}, @samp{\S}, @samp{\s}, @samp{\W}, and @samp{\w}.
19263 Posix does not specify the behavior of @command{grep} on binary files.
19264 An example where this matters is using BSD @command{grep} to
19265 search text that includes embedded ANSI escape sequences for
19266 colored output to terminals (@samp{\033[m} is the sequence to restore
19267 normal output); the behavior depends on whether input is seekable:
19269 @example
19270 $ @kbd{printf 'esc\033[mape\n' > sample}
19271 $ @kbd{grep . sample}
19272 Binary file sample matches
19273 $ @kbd{cat sample | grep .}
19274 escape
19275 @end example
19278 @item @command{join}
19279 @c -----------------
19280 @prindex @command{join}
19281 Solaris 8 @command{join} has bugs when the second operand is standard
19282 input, and when standard input is a pipe.  For example, the following
19283 shell script causes Solaris 8 @command{join} to loop forever:
19285 @example
19286 cat >file <<'EOF'
19287 1 x
19288 2 y
19290 cat file | join file -
19291 @end example
19293 Use @samp{join - file} instead.
19295 On NetBSD, @command{join -a 1 file1 file2} mistakenly behaves like
19296 @command{join -a 1 -a 2 1 file1 file2}, resulting in a usage warning;
19297 the workaround is to use @command{join -a1 file1 file2} instead.
19299 @item @command{ln}
19300 @c ---------------
19301 @prindex @command{ln}
19302 The @option{-f} option is portable nowadays.
19304 @cindex Symbolic links
19305 Symbolic links are not available on some systems; use @samp{$(LN_S)} as
19306 a portable substitute.
19308 For versions of the DJGPP before 2.04,
19309 @command{ln} emulates symbolic links
19310 to executables by generating a stub that in turn calls the real
19311 program.  This feature also works with nonexistent files like in the
19312 Posix spec.  So @samp{ln -s file link} generates @file{link.exe},
19313 which attempts to call @file{file.exe} if run.  But this feature only
19314 works for executables, so @samp{cp -p} is used instead for these
19315 systems.  DJGPP versions 2.04 and later have full support
19316 for symbolic links.
19319 @item @command{ls}
19320 @c ---------------
19321 @prindex @command{ls}
19322 @cindex Listing directories
19323 The portable options are @option{-acdilrtu}.  Current practice is for
19324 @option{-l} to output both owner and group, even though ancient versions
19325 of @command{ls} omitted the group.
19327 On ancient hosts, @samp{ls foo} sent the diagnostic @samp{foo not found}
19328 to standard output if @file{foo} did not exist.  Hence a shell command
19329 like @samp{sources=`ls *.c 2>/dev/null`} did not always work, since it
19330 was equivalent to @samp{sources='*.c not found'} in the absence of
19331 @samp{.c} files.  This is no longer a practical problem, since current
19332 @command{ls} implementations send diagnostics to standard error.
19334 The behavior of @command{ls} on a directory that is being concurrently
19335 modified is not always predictable, because of a data race where cached
19336 information returned by @code{readdir} does not match the current
19337 directory state.  In fact, MacOS 10.5 has an intermittent bug where
19338 @code{readdir}, and thus @command{ls}, sometimes lists a file more than
19339 once if other files were added or removed from the directory immediately
19340 prior to the @command{ls} call.  Since @command{ls} already sorts its
19341 output, the duplicate entries can be avoided by piping the results
19342 through @code{uniq}.
19344 @anchor{mkdir}
19345 @item @command{mkdir}
19346 @c ------------------
19347 @prindex @command{mkdir}
19348 @cindex Making directories
19349 No @command{mkdir} option is portable to older systems.  Instead of
19350 @samp{mkdir -p @var{file-name}}, you should use
19351 @code{AS_MKDIR_P(@var{file-name})} (@pxref{Programming in M4sh})
19352 or @code{AC_PROG_MKDIR_P} (@pxref{Particular Programs}).
19354 Combining the @option{-m} and @option{-p} options, as in @samp{mkdir -m
19355 go-w -p @var{dir}}, often leads to trouble.  FreeBSD
19356 @command{mkdir} incorrectly attempts to change the permissions of
19357 @var{dir} even if it already exists.  HP-UX 11.23 and
19358 IRIX 6.5 @command{mkdir} often assign the wrong permissions to
19359 any newly-created parents of @var{dir}.
19361 Posix does not clearly specify whether @samp{mkdir -p foo}
19362 should succeed when @file{foo} is a symbolic link to an already-existing
19363 directory.  The GNU Core Utilities 5.1.0 @command{mkdir}
19364 succeeds, but Solaris @command{mkdir} fails.
19366 Traditional @code{mkdir -p} implementations suffer from race conditions.
19367 For example, if you invoke @code{mkdir -p a/b} and @code{mkdir -p a/c}
19368 at the same time, both processes might detect that @file{a} is missing,
19369 one might create @file{a}, then the other might try to create @file{a}
19370 and fail with a @code{File exists} diagnostic.  The GNU Core
19371 Utilities (@samp{fileutils} version 4.1), FreeBSD 5.0,
19372 NetBSD 2.0.2, and OpenBSD 2.4 are known to be
19373 race-free when two processes invoke @code{mkdir -p} simultaneously, but
19374 earlier versions are vulnerable.  Solaris @command{mkdir} is still
19375 vulnerable as of Solaris 10, and other traditional Unix systems are
19376 probably vulnerable too.  This possible race is harmful in parallel
19377 builds when several Make rules call @code{mkdir -p} to
19378 construct directories.  You may use
19379 @code{install-sh -d} as a safe replacement, provided this script is
19380 recent enough; the copy shipped with Autoconf 2.60 and Automake 1.10 is
19381 OK, but copies from older versions are vulnerable.
19384 @item @command{mkfifo}
19385 @itemx @command{mknod}
19386 @c -------------------
19387 @prindex @command{mkfifo}
19388 @prindex @command{mknod}
19389 The GNU Coding Standards state that @command{mknod} is safe to use on
19390 platforms where it has been tested to exist; but it is generally portable
19391 only for creating named FIFOs, since device numbers are
19392 platform-specific.  Autotest uses @command{mkfifo} to implement parallel
19393 testsuites.  Posix states that behavior is unspecified when opening a
19394 named FIFO for both reading and writing; on at least Cygwin, this
19395 results in failure on any attempt to read or write to that file
19396 descriptor.
19398 @item @command{mktemp}
19399 @c -------------------
19400 @prindex @command{mktemp}
19401 @cindex Creating temporary files
19402 Shell scripts can use temporary files safely with @command{mktemp}, but
19403 it does not exist on all systems.  A portable way to create a safe
19404 temporary file name is to create a temporary directory with mode 700 and
19405 use a file inside this directory.  Both methods prevent attackers from
19406 gaining control, though @command{mktemp} is far less likely to fail
19407 gratuitously under attack.
19409 Here is sample code to create a new temporary directory @samp{$dir} safely:
19411 @example
19412 # Create a temporary directory $dir in $TMPDIR (default /tmp).
19413 # Use mktemp if possible; otherwise fall back on mkdir,
19414 # with $RANDOM to make collisions less likely.
19415 : "$@{TMPDIR:=/tmp@}"
19417   dir=`
19418     (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
19419   ` &&
19420   test -d "$dir"
19421 @} || @{
19422   dir=$TMPDIR/foo$$-$RANDOM
19423 @c $$ restore font-lock
19424   (umask 077 && mkdir "$dir")
19425 @} || exit $?
19426 @end example
19429 @item @command{mv}
19430 @c ---------------
19431 @prindex @command{mv}
19432 @cindex Moving open files
19433 The only portable options are @option{-f} and @option{-i}.
19435 Moving individual files between file systems is portable (it was in Unix
19436 version 6),
19437 but it is not always atomic: when doing @samp{mv new existing}, there's
19438 a critical section where neither the old nor the new version of
19439 @file{existing} actually exists.
19441 On some systems moving files from @file{/tmp} can sometimes cause
19442 undesirable (but perfectly valid) warnings, even if you created these
19443 files.  This is because @file{/tmp} belongs to a group that ordinary
19444 users are not members of, and files created in @file{/tmp} inherit
19445 the group of @file{/tmp}.  When the file is copied, @command{mv} issues
19446 a diagnostic without failing:
19448 @smallexample
19449 $ @kbd{touch /tmp/foo}
19450 $ @kbd{mv /tmp/foo .}
19451 @error{}mv: ./foo: set owner/group (was: 100/0): Operation not permitted
19452 $ @kbd{echo $?}
19454 $ @kbd{ls foo}
19456 @end smallexample
19458 @noindent
19459 This annoying behavior conforms to Posix, unfortunately.
19461 Moving directories across mount points is not portable, use @command{cp}
19462 and @command{rm}.
19464 DOS variants cannot rename or remove open files, and do not
19465 support commands like @samp{mv foo bar >foo}, even though this is
19466 perfectly portable among Posix hosts.
19469 @item @command{od}
19470 @c ---------------
19471 @prindex @command{od}
19473 In Mac OS X 10.3, @command{od} does not support the
19474 standard Posix options @option{-A}, @option{-j}, @option{-N}, or
19475 @option{-t}, or the XSI option, @option{-s}.  The only
19476 supported Posix option is @option{-v}, and the only supported
19477 XSI options are those in @option{-bcdox}.  The BSD
19478 @command{hexdump} program can be used instead.
19480 This problem no longer exists in Mac OS X 10.4.3.
19483 @item @command{rm}
19484 @c ---------------
19485 @prindex @command{rm}
19486 The @option{-f} and @option{-r} options are portable.
19488 It is not portable to invoke @command{rm} without options or operands.
19489 On the other hand, Posix now requires @command{rm -f} to silently
19490 succeed when there are no operands (useful for constructs like
19491 @command{rm -rf $filelist} without first checking if @samp{$filelist}
19492 was empty).  But this was not always portable; at least NetBSD
19493 @command{rm} built before 2008 would fail with a diagnostic.
19495 A file might not be removed even if its parent directory is writable
19496 and searchable.  Many Posix hosts cannot remove a mount point, a named
19497 stream, a working directory, or a last link to a file that is being
19498 executed.
19500 DOS variants cannot rename or remove open files, and do not
19501 support commands like @samp{rm foo >foo}, even though this is
19502 perfectly portable among Posix hosts.
19504 @item @command{rmdir}
19505 @c ------------------
19506 @prindex @command{rmdir}
19507 Just as with @command{rm}, some platforms refuse to remove a working
19508 directory.
19510 @anchor{sed}
19511 @item @command{sed}
19512 @c ----------------
19513 @prindex @command{sed}
19514 Patterns should not include the separator (unless escaped), even as part
19515 of a character class.  In conformance with Posix, the Cray
19516 @command{sed} rejects @samp{s/[^/]*$//}: use @samp{s%[^/]*$%%}.
19517 Even when escaped, patterns should not include separators that are also
19518 used as @command{sed} metacharacters.  For example, GNU sed 4.0.9 rejects
19519 @samp{s,x\@{1\,\@},,}, while sed 4.1 strips the backslash before the comma
19520 before evaluating the basic regular expression.
19522 Avoid empty patterns within parentheses (i.e., @samp{\(\)}).  Posix does
19523 not require support for empty patterns, and Unicos 9 @command{sed} rejects
19524 them.
19526 Unicos 9 @command{sed} loops endlessly on patterns like @samp{.*\n.*}.
19528 Sed scripts should not use branch labels longer than 7 characters and
19529 should not contain comments; AIX 5.3 @command{sed} rejects indented comments.
19530 HP-UX sed has a limit of 99 commands (not counting @samp{:} commands) and
19531 48 labels, which cannot be circumvented by using more than one script
19532 file.  It can execute up to 19 reads with the @samp{r} command per cycle.
19533 Solaris @command{/usr/ucb/sed} rejects usages that exceed a limit of
19534 about 6000 bytes for the internal representation of commands.
19536 Avoid redundant @samp{;}, as some @command{sed} implementations, such as
19537 NetBSD 1.4.2's, incorrectly try to interpret the second
19538 @samp{;} as a command:
19540 @example
19541 $ @kbd{echo a | sed 's/x/x/;;s/x/x/'}
19542 sed: 1: "s/x/x/;;s/x/x/": invalid command code ;
19543 @end example
19545 Some @command{sed} implementations have a buffer limited to 4000 bytes,
19546 and this limits the size of input lines, output lines, and internal
19547 buffers that can be processed portably.  Likewise,
19548 not all @command{sed} implementations can handle embedded @code{NUL} or
19549 a missing trailing newline.
19551 Remember that ranges within a bracket expression of a regular expression
19552 are only well-defined in the @samp{C} (or @samp{POSIX}) locale.
19553 Meanwhile, support for character classes like @samp{[[:upper:]]} is not
19554 yet universal, so if you cannot guarantee the setting of @env{LC_ALL},
19555 it is better to spell out a range @samp{[ABCDEFGHIJKLMNOPQRSTUVWXYZ]}
19556 than to rely on @samp{[A-Z]}.
19558 Additionally, Posix states that regular expressions are only
19559 well-defined on characters.  Unfortunately, there exist platforms such
19560 as MacOS X 10.5 where not all 8-bit byte values are valid characters,
19561 even though that platform has a single-byte @samp{C} locale.  And Posix
19562 allows the existence of a multi-byte @samp{C} locale, although that does
19563 not yet appear to be a common implementation.  At any rate, it means
19564 that not all bytes will be matched by the regular expression @samp{.}:
19566 @example
19567 $ @kbd{printf '\200\n' | LC_ALL=C sed -n /./p | wc -l}
19569 $ @kbd{printf '\200\n' | LC_ALL=en_US.ISO8859-1 sed -n /./p | wc -l}
19571 @end example
19573 Portable @command{sed} regular expressions should use @samp{\} only to escape
19574 characters in the string @samp{$()*.0123456789[\^n@{@}}.  For example,
19575 alternation, @samp{\|}, is common but Posix does not require its
19576 support, so it should be avoided in portable scripts.  Solaris
19577 @command{sed} does not support alternation; e.g., @samp{sed '/a\|b/d'}
19578 deletes only lines that contain the literal string @samp{a|b}.
19579 Similarly, @samp{\+} and @samp{\?} should be avoided.
19581 Anchors (@samp{^} and @samp{$}) inside groups are not portable.
19583 Nested parentheses in patterns (e.g., @samp{\(\(a*\)b*)\)}) are
19584 quite portable to current hosts, but was not supported by some ancient
19585 @command{sed} implementations like SVR3.
19587 Some @command{sed} implementations, e.g., Solaris, restrict the special
19588 role of the asterisk @samp{*} to one-character regular expressions and
19589 back-references, and the special role of interval expressions
19590 @samp{\@{@var{m}\@}}, @samp{\@{@var{m},\@}}, or @samp{\@{@var{m},@var{n}\@}}
19591 to one-character regular expressions.  This may lead to unexpected behavior:
19593 @example
19594 $ @kbd{echo '1*23*4' | /usr/bin/sed 's/\(.\)*/x/g'}
19595 x2x4
19596 $ @kbd{echo '1*23*4' | /usr/xpg4/bin/sed 's/\(.\)*/x/g'}
19598 @end example
19600 The @option{-e} option is mostly portable.
19601 However, its argument
19602 cannot start with @samp{a}, @samp{c}, or @samp{i},
19603 as this runs afoul of a Tru64 5.1 bug.
19604 Also, its argument cannot be empty, as this fails on AIX 5.3.
19605 Some people prefer to use @samp{-e}:
19607 @example
19608 sed -e '@var{command-1}' \
19609     -e '@var{command-2}'
19610 @end example
19612 @noindent
19613 as opposed to the equivalent:
19615 @example
19616 sed '
19617   @var{command-1}
19618   @var{command-2}
19620 @end example
19622 @noindent
19623 The following usage is sometimes equivalent:
19625 @example
19626 sed '@var{command-1};@var{command-2}'
19627 @end example
19629 but Posix says that this use of a semicolon has undefined effect if
19630 @var{command-1}'s verb is @samp{@{}, @samp{a}, @samp{b}, @samp{c},
19631 @samp{i}, @samp{r}, @samp{t}, @samp{w}, @samp{:}, or @samp{#}, so you
19632 should use semicolon only with simple scripts that do not use these
19633 verbs.
19635 Posix up to the 2008 revision requires the argument of the @option{-e}
19636 option to be a syntactically complete script.  GNU @command{sed} allows
19637 to pass multiple script fragments, each as argument of a separate
19638 @option{-e} option, that are then combined, with newlines between the
19639 fragments, and a future Posix revision may allow this as well.  This
19640 approach is not portable with script fragments ending in backslash; for
19641 example, the @command{sed} programs on Solaris 10, HP-UX 11, and AIX
19642 don't allow splitting in this case:
19644 @example
19645 $ @kbd{echo a | sed -n -e 'i\}
19646 @kbd{0'}
19648 $ @kbd{echo a | sed -n -e 'i\' -e 0}
19649 Unrecognized command: 0
19650 @end example
19652 @noindent
19653 In practice, however, this technique of joining fragments
19654 through @option{-e} works for multiple @command{sed} functions within
19655 @samp{@{} and @samp{@}}, even if that is not specified by Posix:
19657 @example
19658 @c The quote around the closing brace silences interactive zsh.
19659 $ @kbd{echo a | sed -n -e '/a/@{' -e s/a/b/ -e p -e '@}'}
19661 @end example
19663 Commands inside @{ @} brackets are further restricted.  Posix 2008 says that
19664 they cannot be preceded by addresses, @samp{!}, or @samp{;}, and that
19665 each command must be followed immediately by a newline, without any
19666 intervening blanks or semicolons.  The closing bracket must be alone on
19667 a line, other than white space preceding or following it.  However, a
19668 future version of Posix may standardize the use of addresses within brackets.
19670 Contrary to yet another urban legend, you may portably use @samp{&} in
19671 the replacement part of the @code{s} command to mean ``what was
19672 matched''.  All descendants of Unix version 7 @command{sed}
19673 (at least; we
19674 don't have first hand experience with older @command{sed} implementations) have
19675 supported it.
19677 Posix requires that you must not have any white space between
19678 @samp{!} and the following command.  It is OK to have blanks between
19679 the address and the @samp{!}.  For instance, on Solaris:
19681 @example
19682 $ @kbd{echo "foo" | sed -n '/bar/ ! p'}
19683 @error{}Unrecognized command: /bar/ ! p
19684 $ @kbd{echo "foo" | sed -n '/bar/! p'}
19685 @error{}Unrecognized command: /bar/! p
19686 $ @kbd{echo "foo" | sed -n '/bar/ !p'}
19688 @end example
19690 Posix also says that you should not combine @samp{!} and @samp{;}.  If
19691 you use @samp{!}, it is best to put it on a command that is delimited by
19692 newlines rather than @samp{;}.
19694 Also note that Posix requires that the @samp{b}, @samp{t}, @samp{r}, and
19695 @samp{w} commands be followed by exactly one space before their argument.
19696 On the other hand, no white space is allowed between @samp{:} and the
19697 subsequent label name.
19699 If a sed script is specified on the command line and ends in an
19700 @samp{a}, @samp{c}, or @samp{i} command, the last line of inserted text
19701 should be followed by a newline.  Otherwise some @command{sed}
19702 implementations (e.g., OpenBSD 3.9) do not append a newline to the
19703 inserted text.
19705 Many @command{sed} implementations (e.g., MacOS X 10.4,
19706 OpenBSD 3.9, Solaris 10
19707 @command{/usr/ucb/sed}) strip leading white space from the text of
19708 @samp{a}, @samp{c}, and @samp{i} commands.  Prepend a backslash to
19709 work around this incompatibility with Posix:
19711 @example
19712 $ @kbd{echo flushleft | sed 'a\}
19713 > @kbd{   indented}
19714 > @kbd{'}
19715 flushleft
19716 indented
19717 $ @kbd{echo foo | sed 'a\}
19718 > @kbd{\   indented}
19719 > @kbd{'}
19720 flushleft
19721    indented
19722 @end example
19724 Posix requires that with an empty regular expression, the last non-empty
19725 regular expression from either an address specification or substitution
19726 command is applied.  However, busybox 1.6.1 complains when using a
19727 substitution command with a replacement containing a back-reference to
19728 an empty regular expression; the workaround is repeating the regular
19729 expression.
19731 @example
19732 $ @kbd{echo abc | busybox sed '/a\(b\)c/ s//\1/'}
19733 sed: No previous regexp.
19734 $ @kbd{echo abc | busybox sed '/a\(b\)c/ s/a\(b\)c/\1/'}
19736 @end example
19738 Portable scripts should be aware of the inconsistencies and options for
19739 handling word boundaries, as these are not specified by POSIX.
19741 @example
19742                 \<      \b      [[:<:]]
19743 Solaris 10      yes     no      no
19744 Solaris XPG4    yes     no      error
19745 NetBSD 5.1      no      no      yes
19746 FreeBSD 9.1     no      no      yes
19747 GNU             yes     yes     error
19748 busybox         yes     yes     error
19749 @end example
19751 @item @command{sed} (@samp{t})
19752 @c ---------------------------
19753 @prindex @command{sed} (@samp{t})
19754 Some old systems have @command{sed} that ``forget'' to reset their
19755 @samp{t} flag when starting a new cycle.  For instance on MIPS
19756 RISC/OS, and on IRIX 5.3, if you run the following @command{sed}
19757 script (the line numbers are not actual part of the texts):
19759 @example
19760 s/keep me/kept/g  # a
19761 t end             # b
19762 s/.*/deleted/g    # c
19763 :end              # d
19764 @end example
19766 @noindent
19769 @example
19770 delete me         # 1
19771 delete me         # 2
19772 keep me           # 3
19773 delete me         # 4
19774 @end example
19776 @noindent
19777 you get
19779 @example
19780 deleted
19781 delete me
19782 kept
19783 deleted
19784 @end example
19786 @noindent
19787 instead of
19789 @example
19790 deleted
19791 deleted
19792 kept
19793 deleted
19794 @end example
19796 Why?  When processing line 1, (c) matches, therefore sets the @samp{t}
19797 flag, and the output is produced.  When processing
19798 line 2, the @samp{t} flag is still set (this is the bug).  Command (a)
19799 fails to match, but @command{sed} is not supposed to clear the @samp{t}
19800 flag when a substitution fails.  Command (b) sees that the flag is set,
19801 therefore it clears it, and jumps to (d), hence you get @samp{delete me}
19802 instead of @samp{deleted}.  When processing line (3), @samp{t} is clear,
19803 (a) matches, so the flag is set, hence (b) clears the flags and jumps.
19804 Finally, since the flag is clear, line 4 is processed properly.
19806 There are two things one should remember about @samp{t} in @command{sed}.
19807 Firstly, always remember that @samp{t} jumps if @emph{some} substitution
19808 succeeded, not only the immediately preceding substitution.  Therefore,
19809 always use a fake @samp{t clear} followed by a @samp{:clear} on the next
19810 line, to reset the @samp{t} flag where needed.
19812 Secondly, you cannot rely on @command{sed} to clear the flag at each new
19813 cycle.
19815 One portable implementation of the script above is:
19817 @example
19818 t clear
19819 :clear
19820 s/keep me/kept/g
19821 t end
19822 s/.*/deleted/g
19823 :end
19824 @end example
19826 @item @command{sleep}
19827 @c ------------------
19828 @prindex @command{sleep}
19829 Using @command{sleep} is generally portable.  However, remember that
19830 adding a @command{sleep} to work around timestamp issues, with a minimum
19831 granularity of one second, doesn't scale well for parallel builds on
19832 modern machines with sub-second process completion.
19834 @item @command{sort}
19835 @c -----------------
19836 @prindex @command{sort}
19837 Remember that sort order is influenced by the current locale.  Inside
19838 @file{configure}, the C locale is in effect, but in Makefile snippets,
19839 you may need to specify @code{LC_ALL=C sort}.
19841 @item @command{tar}
19842 @c ----------------
19843 @prindex @command{tar}
19844 There are multiple file formats for @command{tar}; if you use Automake,
19845 the macro @code{AM_INIT_AUTOMAKE} has some options controlling which
19846 level of portability to use.
19848 @anchor{touch}
19849 @item @command{touch}
19850 @c ------------------
19851 @prindex @command{touch}
19852 @cindex timestamp resolution
19853 If you specify the desired timestamp (e.g., with the @option{-r}
19854 option), older @command{touch} implementations use the @code{utime} or
19855 @code{utimes} system call, which can result in the same kind of
19856 timestamp truncation problems that @samp{cp -p} has.
19858 On ancient BSD systems, @command{touch} or any command that
19859 results in an empty file does not update the timestamps, so use a
19860 command like @command{echo} as a workaround.
19861 Also,
19862 GNU @command{touch} 3.16r (and presumably all before that)
19863 fails to work on SunOS 4.1.3 when the empty file is on an
19864 NFS-mounted 4.2 volume.
19865 However, these problems are no longer of practical concern.
19867 @item @command{tr}
19868 @c ---------------
19869 @prindex @command{tr}
19870 @cindex carriage return, deleting
19871 @cindex newline, deleting
19872 @cindex deleting carriage return
19873 Not all versions of @command{tr} handle all backslash character escapes.
19874 For example, Solaris 10 @command{/usr/ucb/tr} falls over, even though
19875 Solaris contains more modern @command{tr} in other locations.
19876 Using octal escapes is more portable for carriage returns, since
19877 @samp{\015} is the same for both ASCII and EBCDIC, and since use of
19878 literal carriage returns in scripts causes a number of other problems.
19879 But for other characters, like newline, using octal escapes ties the
19880 operation to ASCII, so it is better to use literal characters.
19882 @example
19883 $ @kbd{@{ echo moon; echo light; @} | /usr/ucb/tr -d '\n' ; echo}
19885 light
19886 $ @kbd{@{ echo moon; echo light; @} | /usr/bin/tr -d '\n' ; echo}
19887 moonlight
19888 $ @kbd{@{ echo moon; echo light; @} | /usr/ucb/tr -d '\012' ; echo}
19889 moonlight
19890 $ @kbd{nl='}
19891 @kbd{'; @{ echo moon; echo light; @} | /usr/ucb/tr -d "$nl" ; echo}
19892 moonlight
19893 @end example
19895 Not all versions of @command{tr} recognize direct ranges of characters: at
19896 least Solaris @command{/usr/bin/tr} still fails to do so.  But you can
19897 use @command{/usr/xpg4/bin/tr} instead, or add brackets (which in Posix
19898 transliterate to themselves).
19900 @example
19901 $ @kbd{echo "Hazy Fantazy" | LC_ALL=C /usr/bin/tr a-z A-Z}
19902 HAZy FAntAZy
19903 $ @kbd{echo "Hazy Fantazy" | LC_ALL=C /usr/bin/tr '[a-z]' '[A-Z]'}
19904 HAZY FANTAZY
19905 $ @kbd{echo "Hazy Fantazy" | LC_ALL=C /usr/xpg4/bin/tr a-z A-Z}
19906 HAZY FANTAZY
19907 @end example
19909 When providing two arguments, be sure the second string is at least as
19910 long as the first.
19912 @example
19913 $ @kbd{echo abc | /usr/xpg4/bin/tr bc d}
19915 $ @kbd{echo abc | coreutils/tr bc d}
19917 @end example
19919 Posix requires @command{tr} to operate on binary files.  But at least
19920 Solaris @command{/usr/ucb/tr} and @command{/usr/bin/tr} silently discard
19921 @code{NUL} in the input prior to doing any translation.  When using
19922 @command{tr} to process a binary file that may contain @code{NUL} bytes,
19923 it is necessary to use @command{/usr/xpg4/bin/tr} instead, or
19924 @command{/usr/xpg6/bin/tr} if that is available.
19926 @example
19927 $ @kbd{printf 'a\0b' | /usr/ucb/tr x x | od -An -tx1}
19928  61 62
19929 $ @kbd{printf 'a\0b' | /usr/bin/tr x x | od -An -tx1}
19930  61 62
19931 $ @kbd{printf 'a\0b' | /usr/xpg4/bin/tr x x | od -An -tx1}
19932  61 00 62
19933 @end example
19935 Solaris @command{/usr/ucb/tr} additionally fails to handle @samp{\0} as the
19936 octal escape for @code{NUL}.
19938 @example
19939 $ @kbd{printf 'abc' | /usr/ucb/tr 'bc' '\0d' | od -An -tx1}
19940  61 62 63
19941 $ @kbd{printf 'abc' | /usr/bin/tr 'bc' '\0d' | od -An -tx1}
19942  61 00 64
19943 $ @kbd{printf 'abc' | /usr/xpg4/bin/tr 'bc' '\0d' | od -An -tx1}
19944  61 00 64
19945 @end example
19947 @end table
19950 @node Portable Make
19951 @chapter Portable Make Programming
19952 @prindex @command{make}
19953 @cindex Limitations of @command{make}
19955 Writing portable makefiles is an art.  Since a makefile's commands are
19956 executed by the shell, you must consider the shell portability issues
19957 already mentioned.  However, other issues are specific to @command{make}
19958 itself.
19960 @menu
19961 * $< in Ordinary Make Rules::   $< in ordinary rules
19962 * Failure in Make Rules::       Failing portably in rules
19963 * Special Chars in Names::      Special Characters in Macro Names
19964 * Backslash-Newline-Empty::     Empty lines after backslash-newline
19965 * Backslash-Newline Comments::  Spanning comments across line boundaries
19966 * Long Lines in Makefiles::     Line length limitations
19967 * Macros and Submakes::         @code{make macro=value} and submakes
19968 * The Make Macro MAKEFLAGS::    @code{$(MAKEFLAGS)} portability issues
19969 * The Make Macro SHELL::        @code{$(SHELL)} portability issues
19970 * Parallel Make::               Parallel @command{make} quirks
19971 * Comments in Make Rules::      Other problems with Make comments
19972 * Newlines in Make Rules::      Using literal newlines in rules
19973 * Comments in Make Macros::     Other problems with Make comments in macros
19974 * Trailing whitespace in Make Macros::  Macro substitution problems
19975 * Command-line Macros and whitespace::  Whitespace trimming of values
19976 * obj/ and Make::               Don't name a subdirectory @file{obj}
19977 * make -k Status::              Exit status of @samp{make -k}
19978 * VPATH and Make::              @code{VPATH} woes
19979 * Single Suffix Rules::         Single suffix rules and separated dependencies
19980 * Timestamps and Make::         Sub-second timestamp resolution
19981 @end menu
19983 @node $< in Ordinary Make Rules
19984 @section @code{$<} in Ordinary Make Rules
19986 Posix says that the @samp{$<} construct in makefiles can be
19987 used only in inference rules and in the @samp{.DEFAULT} rule; its
19988 meaning in ordinary rules is unspecified.  Solaris @command{make}
19989 for instance replaces it with the empty string.  OpenBSD (3.0 and
19990 later) @command{make} diagnoses these uses and errors out.
19992 @node Failure in Make Rules
19993 @section Failure in Make Rules
19995 Posix 2008 requires that @command{make} must invoke each command with
19996 the equivalent of a @samp{sh -e -c} subshell, which causes the
19997 subshell to exit immediately if a subsidiary simple-command fails,
19998 although not all @command{make} implementations have historically
19999 followed this rule.  For
20000 example, the command @samp{touch T; rm -f U} may attempt to
20001 remove @file{U} even if the @command{touch} fails, although this is not
20002 permitted with Posix make.  One way to work around failures in simple
20003 commands is to reword them so that they always succeed, e.g., @samp{touch
20004 T || :; rm -f U}.
20005 However, even this approach can run into common bugs in BSD
20006 implementations of the @option{-e} option of @command{sh} and
20007 @command{set} (@pxref{set, , Limitations of Shell Builtins}), so if you
20008 are worried
20009 about porting to buggy BSD shells it may be simpler to migrate
20010 complicated @command{make} actions into separate scripts.
20012 @node Special Chars in Names
20013 @section Special Characters in Make Macro Names
20015 Posix limits macro names to nonempty strings containing only
20016 ASCII letters and digits, @samp{.}, and @samp{_}.  Many
20017 @command{make} implementations allow a wider variety of characters, but
20018 portable makefiles should avoid them.  It is portable to start a name
20019 with a special character, e.g., @samp{$(.FOO)}.
20021 Some ancient @command{make} implementations don't support leading
20022 underscores in macro names.  An example is NEWS-OS 4.2R.
20024 @example
20025 $ @kbd{cat Makefile}
20026 _am_include = #
20027 _am_quote =
20028 all:; @@echo this is test
20029 $ @kbd{make}
20030 Make: Must be a separator on rules line 2.  Stop.
20031 $ @kbd{cat Makefile2}
20032 am_include = #
20033 am_quote =
20034 all:; @@echo this is test
20035 $ @kbd{make -f Makefile2}
20036 this is test
20037 @end example
20039 @noindent
20040 However, this problem is no longer of practical concern.
20042 @node Backslash-Newline-Empty
20043 @section Backslash-Newline Before Empty Lines
20045 A bug in Bash 2.03 can cause problems if a Make rule contains a
20046 backslash-newline followed by line that expands to nothing.
20047 For example, on Solaris 8:
20049 @example
20050 SHELL = /bin/bash
20051 EMPTY =
20052 foo:
20053         touch foo \
20054         $(EMPTY)
20055 @end example
20057 @noindent
20058 executes
20060 @example
20061 /bin/bash -c 'touch foo \
20063 @end example
20065 @noindent
20066 which fails with a syntax error, due to the Bash bug.  To avoid this
20067 problem, avoid nullable macros in the last line of a multi-line command.
20069 @c  This has been seen on ia64 hpux 11.20, and on one hppa hpux 10.20,
20070 @c  but another hppa hpux 10.20 didn't have it.  Bob Proulx
20071 @c  <bob@proulx.com> thinks it was in hpux 8.0 too.
20072 On some versions of HP-UX, @command{make} reads multiple newlines
20073 following a backslash, continuing to the next non-empty line.  For
20074 example,
20076 @example
20077 FOO = one \
20079 BAR = two
20081 test:
20082         : FOO is "$(FOO)"
20083         : BAR is "$(BAR)"
20084 @end example
20086 @noindent
20087 shows @code{FOO} equal to @code{one BAR = two}.  Other implementations
20088 sensibly let a backslash continue only to the immediately following
20089 line.
20091 @node Backslash-Newline Comments
20092 @section Backslash-Newline in Make Comments
20094 According to Posix, Make comments start with @code{#}
20095 and continue until an unescaped newline is reached.
20097 @example
20098 $ @kbd{cat Makefile}
20099 # A = foo \
20100       bar \
20101       baz
20103 all:
20104         @@echo ok
20105 $ @kbd{make}   # GNU make
20107 @end example
20109 @noindent
20110 However this is not always the case.  Some implementations
20111 discard everything from @code{#} through the end of the line, ignoring any
20112 trailing backslash.
20114 @example
20115 $ @kbd{pmake}  # BSD make
20116 "Makefile", line 3: Need an operator
20117 Fatal errors encountered -- cannot continue
20118 @end example
20120 @noindent
20121 Therefore, if you want to comment out a multi-line definition, prefix each
20122 line with @code{#}, not only the first.
20124 @example
20125 # A = foo \
20126 #     bar \
20127 #     baz
20128 @end example
20130 @node Long Lines in Makefiles
20131 @section Long Lines in Makefiles
20133 Tru64 5.1's @command{make} has been reported to crash when given a
20134 makefile with lines longer than around 20 kB.  Earlier versions are
20135 reported to exit with @code{Line too long} diagnostics.
20137 @node Macros and Submakes
20138 @section @code{make macro=value} and Submakes
20140 A command-line variable definition such as @code{foo=bar} overrides any
20141 definition of @code{foo} in a makefile.  Some @command{make}
20142 implementations (such as GNU @command{make}) propagate this
20143 override to subsidiary invocations of @command{make}.  Some other
20144 implementations do not pass the substitution along to submakes.
20146 @example
20147 $ @kbd{cat Makefile}
20148 foo = foo
20149 one:
20150         @@echo $(foo)
20151         $(MAKE) two
20152 two:
20153         @@echo $(foo)
20154 $ @kbd{make foo=bar}            # GNU make 3.79.1
20156 make two
20157 make[1]: Entering directory `/home/adl'
20159 make[1]: Leaving directory `/home/adl'
20160 $ @kbd{pmake foo=bar}           # BSD make
20162 pmake two
20164 @end example
20166 You have a few possibilities if you do want the @code{foo=bar} override
20167 to propagate to submakes.  One is to use the @option{-e}
20168 option, which causes all environment variables to have precedence over
20169 the makefile macro definitions, and declare foo as an environment
20170 variable:
20172 @example
20173 $ @kbd{env foo=bar make -e}
20174 @end example
20176 The @option{-e} option is propagated to submakes automatically,
20177 and since the environment is inherited between @command{make}
20178 invocations, the @code{foo} macro is overridden in
20179 submakes as expected.
20181 This syntax (@code{foo=bar make -e}) is portable only when used
20182 outside of a makefile, for instance from a script or from the
20183 command line.  When run inside a @command{make} rule, GNU
20184 @command{make} 3.80 and prior versions forget to propagate the
20185 @option{-e} option to submakes.
20187 Moreover, using @option{-e} could have unexpected side effects if your
20188 environment contains some other macros usually defined by the
20189 makefile.  (See also the note about @code{make -e} and @code{SHELL}
20190 below.)
20192 If you can foresee all macros that a user might want to override, then
20193 you can propagate them to submakes manually, from your makefile:
20195 @example
20196 foo = foo
20197 one:
20198         @@echo $(foo)
20199         $(MAKE) foo=$(foo) two
20200 two:
20201         @@echo $(foo)
20202 @end example
20204 Another way to propagate a variable to submakes in a portable way is to
20205 expand an extra variable in every invocation of @samp{$(MAKE)} within
20206 your makefile:
20208 @example
20209 foo = foo
20210 one:
20211         @@echo $(foo)
20212         $(MAKE) $(SUBMAKEFLAGS) two
20213 two:
20214         @@echo $(foo)
20215 @end example
20217 Users must be aware that this technique is in use to take advantage of
20218 it, e.g.@: with @code{make foo=bar SUBMAKEFLAGS='foo=bar'}, but it
20219 allows any macro to be overridden.  Makefiles generated by
20220 @command{automake} use this technique, expanding @code{$(AM_MAKEFLAGS)}
20221 on the command lines of submakes (@pxref{Subdirectories, , Automake,
20222 automake, GNU Automake}).
20224 @node The Make Macro MAKEFLAGS
20225 @section The Make Macro MAKEFLAGS
20226 @cindex @code{MAKEFLAGS} and @command{make}
20227 @cindex @command{make} and @code{MAKEFLAGS}
20229 Posix requires @command{make} to use @code{MAKEFLAGS} to affect the
20230 current and recursive invocations of make, but allows implementations
20231 several formats for the variable.  It is tricky to parse
20232 @code{$MAKEFLAGS} to determine whether @option{-s} for silent execution
20233 or @option{-k} for continued execution are in effect.  For example, you
20234 cannot assume that the first space-separated word in @code{$MAKEFLAGS}
20235 contains single-letter options, since in the Cygwin version of
20236 GNU @command{make} it is either @option{--unix} or
20237 @option{--win32} with the second word containing single-letter options.
20239 @example
20240 $ @kbd{cat Makefile}
20241 all:
20242         @@echo MAKEFLAGS = $(MAKEFLAGS)
20243 $ @kbd{make}
20244 MAKEFLAGS = --unix
20245 $ @kbd{make -k}
20246 MAKEFLAGS = --unix -k
20247 @end example
20249 @node The Make Macro SHELL
20250 @section The Make Macro @code{SHELL}
20251 @cindex @code{SHELL} and @command{make}
20252 @cindex @command{make} and @code{SHELL}
20254 Posix-compliant @command{make} internally uses the @code{$(SHELL)}
20255 macro to spawn shell processes and execute Make rules.  This
20256 is a builtin macro supplied by @command{make}, but it can be modified
20257 by a makefile or by a command-line argument.
20259 Not all @command{make} implementations define this @code{SHELL} macro.
20260 Tru64
20261 @command{make} is an example; this implementation always uses
20262 @code{/bin/sh}.  So it's a good idea to always define @code{SHELL} in
20263 your makefiles.  If you use Autoconf, do
20265 @example
20266 SHELL = @@SHELL@@
20267 @end example
20269 @noindent
20270 If you use Automake, this is done for you.
20272 Do not force @code{SHELL = /bin/sh} because that is not correct
20273 everywhere.  Remember, @file{/bin/sh} is not Posix compliant on many
20274 systems, such as FreeBSD 4, NetBSD 3, AIX 3, Solaris 10, or Tru64.
20275 Additionally, DJGPP lacks @code{/bin/sh}, and when its
20276 GNU @command{make} port sees such a setting it enters a
20277 special emulation mode where features like pipes and redirections are
20278 emulated on top of DOS's @command{command.com}.  Unfortunately this
20279 emulation is incomplete; for instance it does not handle command
20280 substitutions.  Using @code{@@SHELL@@} means that your makefile will
20281 benefit from the same improved shell, such as @command{bash} or
20282 @command{ksh}, that was discovered during @command{configure}, so that
20283 you aren't fighting two different sets of shell bugs between the two
20284 contexts.
20286 Posix-compliant @command{make} should never acquire the value of
20287 $(SHELL) from the environment, even when @code{make -e} is used
20288 (otherwise, think about what would happen to your rules if
20289 @code{SHELL=/bin/tcsh}).
20291 However not all @command{make} implementations have this exception.
20292 For instance it's not surprising that Tru64 @command{make} doesn't
20293 protect @code{SHELL}, since it doesn't use it.
20295 @example
20296 $ @kbd{cat Makefile}
20297 SHELL = /bin/sh
20298 FOO = foo
20299 all:
20300         @@echo $(SHELL)
20301         @@echo $(FOO)
20302 $ @kbd{env SHELL=/bin/tcsh FOO=bar make -e}   # Tru64 Make
20303 /bin/tcsh
20305 $ @kbd{env SHELL=/bin/tcsh FOO=bar gmake -e}  # GNU make
20306 /bin/sh
20308 @end example
20310 Conversely, @command{make} is not supposed to export any changes to the
20311 macro @code{SHELL} to child processes.  Again, many implementations
20312 break this rule:
20314 @example
20315 $ @kbd{cat Makefile}
20316 all:
20317         @@echo $(SHELL)
20318         @@printenv SHELL
20319 $ @kbd{env SHELL=sh make -e SHELL=/bin/ksh}   # BSD Make, GNU make 3.80
20320 /bin/ksh
20321 /bin/ksh
20322 $ @kbd{env SHELL=sh gmake -e SHELL=/bin/ksh}  # GNU make 3.81
20323 /bin/ksh
20325 @end example
20327 @node Parallel Make
20328 @section Parallel Make
20329 @cindex Parallel @command{make}
20331 Support for parallel execution in @command{make} implementation varies.
20332 Generally, using GNU make is your best bet.
20334 When NetBSD or FreeBSD @command{make} are run in parallel mode, they will
20335 reuse the same shell for multiple commands within one recipe.  This can
20336 have various unexpected consequences.  For example, changes of directories
20337 or variables persist between recipes, so that:
20339 @example
20340 all:
20341         @@var=value; cd /; pwd; echo $$var; echo $$$$
20342         @@pwd; echo $$var; echo $$$$
20343 @end example
20345 @noindent
20346 may output the following with @code{make -j1}, at least on NetBSD up to
20347 5.1 and FreeBSD up to 8.2:
20349 @example
20351 value
20352 32235
20354 value
20355 32235
20356 @end example
20358 @noindent
20359 while without @option{-j1}, or with @option{-B}, the output looks less
20360 surprising:
20362 @example
20364 value
20365 32238
20366 /tmp
20368 32239
20369 @end example
20371 @noindent
20372 Another consequence is that, if one command in a recipe uses @code{exit 0}
20373 to indicate a successful exit, the shell will be gone and the remaining
20374 commands of this recipe will not be executed.
20376 The BSD @command{make} implementations, when run in parallel mode,
20377 will also pass the @command{Makefile} recipes to the shell through
20378 its standard input, thus making it unusable from the recipes:
20380 @example
20381 $ @kbd{cat Makefile}
20382 read:
20383         @@read line; echo LINE: $$line
20384 @c $$ @c restore font-lock
20385 $ @kbd{echo foo | make read}
20386 LINE: foo
20387 $ @kbd{echo foo | make -j1 read} # NetBSD 5.1 and FreeBSD 8.2
20388 LINE:
20389 @end example
20391 @noindent
20392 Moreover, when FreeBSD @command{make} (up at least to 8.2) is run in
20393 parallel mode, it implements the @code{@@} and @code{-} ``recipe
20394 modifiers'' by dynamically modifying the active shell flags.  This
20395 behavior has the effects of potentially clobbering the exit status
20396 of recipes silenced with the @code{@@} modifier if they also unset
20397 the @option{errexit} shell flag, and of mangling the output in
20398 unexpected ways:
20400 @example
20401 $ @kbd{cat Makefile}
20403         @@echo $$-; set +e; false
20405         -echo $$-; false; echo set -
20406 $ @kbd{make a; echo status: $?}
20407 ehBc
20408 *** Error code 1
20409 status: 1
20410 $ @kbd{make -j1 a; echo status: $?}
20412 status: 0
20413 $ @kbd{make b}
20414 echo $-; echo set -
20416 set -
20417 $ @kbd{make -j1 b}
20418 echo $-; echo hvB
20419 @end example
20421 @noindent
20422 You can avoid all these issues by using the @option{-B} option to enable
20423 compatibility semantics.  However, that will effectively also disable
20424 all parallelism as that will cause prerequisites to be updated in the
20425 order they are listed in a rule.
20427 Some make implementations (among them, FreeBSD @command{make}, NetBSD
20428 @command{make}, and Solaris @command{dmake}), when invoked with a
20429 @option{-j@var{N}} option, connect the standard output and standard
20430 error of all their child processes to pipes or temporary regular
20431 files.  This can lead to subtly different semantics in the behavior
20432 of the spawned processes.  For example, even if the @command{make}
20433 standard output is connected to a tty, the recipe command will not be:
20435 @example
20436 $ @kbd{cat Makefile}
20437 all:
20438         @@test -t 1 && echo "Is a tty" || echo "Is not a tty"
20439 $ @kbd{make -j 2} # FreeBSD 8.2 make
20440 Is not a tty
20441 $ @kbd{make -j 2} # NetBSD 5.1 make
20442 --- all ---
20443 Is not a tty
20444 $ @kbd{dmake -j 2} # Solaris 10 dmake
20445 @var{hostname} --> 1 job
20446 @var{hostname} --> Job output
20447 Is not a tty
20448 @end example
20450 @noindent
20451 On the other hand:
20453 @example
20454 $ @kbd{make -j 2} # GNU make, Heirloom make
20455 Is a tty
20456 @end example
20458 @noindent
20459 The above examples also show additional status output produced in parallel
20460 mode for targets being updated by Solaris @command{dmake} and NetBSD
20461 @command{make} (but @emph{not} by FreeBSD @command{make}).
20463 Furthermore, parallel runs of those @command{make} implementations will
20464 route standard error from commands that they spawn into their own
20465 standard output, and may remove leading whitespace from output lines.
20468 @node Comments in Make Rules
20469 @section Comments in Make Rules
20470 @cindex Comments in @file{Makefile} rules
20471 @cindex @file{Makefile} rules and comments
20473 Never put comments in a rule.
20475 Some @command{make} treat anything starting with a tab as a command for
20476 the current rule, even if the tab is immediately followed by a @code{#}.
20477 The @command{make} from Tru64 Unix V5.1 is one of them.  The following
20478 makefile runs @code{# foo} through the shell.
20480 @example
20481 all:
20482         # foo
20483 @end example
20485 As a workaround, you can use the @command{:} no-op command with a string
20486 argument that gets ignored:
20488 @example
20489 all:
20490         : "foo"
20491 @end example
20493 Conversely, if you want to use the @samp{#} character in some command,
20494 you can only do so by expanding it inside a rule (@pxref{Comments in
20495 Make Macros}).  So for example, if @samp{COMMENT_CHAR} is substituted by
20496 @command{config.status} as @samp{#}, then the following substitutes
20497 @samp{@@COMMENT_CHAR@@} in a generated header:
20499 @example
20500 foo.h: foo.h.in
20501         sed -e 's|@@''COMMENT_CHAR''@@|@@COMMENT_CHAR@@|g' \
20502             $(srcdir)/foo.h.in > $@@
20503 @end example
20505 The funny shell quoting avoids a substitution at @command{config.status}
20506 run time of the left-hand side of the @command{sed} @samp{s} command.
20508 @node Newlines in Make Rules
20509 @section Newlines in Make Rules
20510 @cindex Newlines in @file{Makefile} rules
20511 @cindex @file{Makefile} rules and newlines
20513 In shell scripts, newlines can be used inside string literals.  But in
20514 the shell statements of @file{Makefile} rules, this is not possible:
20515 A newline not preceded by a backslash is a separator between shell
20516 statements.  Whereas a newline that is preceded by a backslash becomes
20517 part of the shell statement according to POSIX, but gets replaced,
20518 together with the backslash that precedes it, by a space in GNU
20519 @command{make} 3.80 and older.  So, how can a newline be used in a string
20520 literal?
20522 The trick is to set up a shell variable that contains a newline:
20524 @example
20525 nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"
20526 @end example
20528 For example, in order to create a multi-line @samp{sed} expression that
20529 inserts a blank line after every line of a file, this code can be used:
20531 @example
20532 nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"; \
20533 sed -e "s/\$$/\\$$@{nl@}/" < input > output
20534 @end example
20536 @node Comments in Make Macros
20537 @section Comments in Make Macros
20538 @cindex Comments in @file{Makefile} macros
20539 @cindex @file{Makefile} macros and comments
20541 Avoid putting comments in macro values as far as possible.  Posix
20542 specifies that the text starting from the @samp{#} sign until the end of
20543 the line is to be ignored, which has the unfortunate effect of
20544 disallowing them even within quotes.  Thus, the following might lead to
20545 a syntax error at compile time:
20547 @example
20548 CPPFLAGS = "-DCOMMENT_CHAR='#'"
20549 @end example
20551 @noindent
20552 as @samp{CPPFLAGS} may be expanded to @samp{"-DCOMMENT_CHAR='}.
20554 Most @command{make} implementations disregard this and treat single and
20555 double quotes specially here.  Also, GNU @command{make} lets you put
20556 @samp{#} into a macro value by escaping it with a backslash, i.e.,
20557 @samp{\#}.  However, neither of these usages are portable.
20558 @xref{Comments in Make Rules}, for a portable alternative.
20560 Even without quoting involved, comments can have surprising effects,
20561 because the whitespace before them is part of the variable value:
20563 @example
20564 foo = bar # trailing comment
20565 print: ; @@echo "$(foo)."
20566 @end example
20568 @noindent
20569 prints @samp{bar .}, which is usually not intended, and can expose
20570 @command{make} bugs as described below.
20572 @node Trailing whitespace in Make Macros
20573 @section Trailing whitespace in Make Macros
20574 @cindex whitespace in @file{Makefile} macros
20575 @cindex @file{Makefile} macros and whitespace
20577 GNU @command{make} 3.80 mistreats trailing whitespace in macro
20578 substitutions and appends another spurious suffix:
20580 @example
20581 empty =
20582 foo = bar $(empty)
20583 print: ; @@echo $(foo:=.test)
20584 @end example
20586 @noindent
20587 prints @samp{bar.test .test}.
20589 BSD and Solaris @command{make} implementations do not honor trailing
20590 whitespace in macro definitions as Posix requires:
20592 @example
20593 foo = bar # Note the space after "bar".
20594 print: ; @@echo $(foo)t
20595 @end example
20597 @noindent
20598 prints @samp{bart} instead of @samp{bar t}.  To work around this, you
20599 can use a helper macro as in the previous example.
20602 @node Command-line Macros and whitespace
20603 @section Command-line Macros and whitespace
20604 @cindex whitespace in command-line macros
20605 @cindex command-line, macros set on
20606 @cindex environment, macros set from
20608 Some @command{make} implementations may strip trailing whitespace off
20609 of macros set on the command line in addition to leading whitespace.
20610 Further, some may strip leading whitespace off of macros set from
20611 environment variables:
20613 @example
20614 $ @kbd{echo 'print: ; @@echo "x$(foo)x$(bar)x"' |
20615   foo=' f f ' make -f - bar=' b b '}
20616 x f f xb b x  # AIX, BSD, GNU make
20617 xf f xb b x   # HP-UX, IRIX, Tru64/OSF make
20618 x f f xb bx   # Solaris make
20619 @end example
20622 @node obj/ and Make
20623 @section The @file{obj/} Subdirectory and Make
20624 @cindex @file{obj/}, subdirectory
20625 @cindex BSD @command{make} and @file{obj/}
20627 Never name one of your subdirectories @file{obj/} if you don't like
20628 surprises.
20630 If an @file{obj/} directory exists, BSD @command{make} enters it
20631 before reading the makefile.  Hence the makefile in the
20632 current directory is not read.
20634 @example
20635 $ @kbd{cat Makefile}
20636 all:
20637         echo Hello
20638 $ @kbd{cat obj/Makefile}
20639 all:
20640         echo World
20641 $ @kbd{make}      # GNU make
20642 echo Hello
20643 Hello
20644 $ @kbd{pmake}     # BSD make
20645 echo World
20646 World
20647 @end example
20649 @node make -k Status
20650 @section Exit Status of @code{make -k}
20651 @cindex @code{make -k}
20653 Do not rely on the exit status of @code{make -k}.  Some implementations
20654 reflect whether they encountered an error in their exit status; other
20655 implementations always succeed.
20657 @example
20658 $ @kbd{cat Makefile}
20659 all:
20660         false
20661 $ @kbd{make -k; echo exit status: $?}    # GNU make
20662 false
20663 make: *** [all] Error 1
20664 exit status: 2
20665 $ @kbd{pmake -k; echo exit status: $?}   # BSD make
20666 false
20667 *** Error code 1 (continuing)
20668 exit status: 0
20669 @end example
20671 @node VPATH and Make
20672 @section @code{VPATH} and Make
20673 @cindex @code{VPATH}
20675 Posix does not specify the semantics of @code{VPATH}.  Typically,
20676 @command{make} supports @code{VPATH}, but its implementation is not
20677 consistent.
20679 Autoconf and Automake support makefiles whose usages of @code{VPATH} are
20680 portable to recent-enough popular implementations of @command{make}, but
20681 to keep the resulting makefiles portable, a package's makefile
20682 prototypes must take the following issues into account.  These issues
20683 are complicated and are often poorly understood, and installers who use
20684 @code{VPATH} should expect to find many bugs in this area.  If you use
20685 @code{VPATH}, the simplest way to avoid these portability bugs is to
20686 stick with GNU @command{make}, since it is the most
20687 commonly-used @command{make} among Autoconf users.
20689 Here are some known issues with some @code{VPATH}
20690 implementations.
20692 @menu
20693 * Variables listed in VPATH::   @code{VPATH} must be literal on ancient hosts
20694 * VPATH and Double-colon::      Problems with @samp{::} on ancient hosts
20695 * $< in Explicit Rules::        @code{$<} does not work in ordinary rules
20696 * Automatic Rule Rewriting::    @code{VPATH} goes wild on Solaris
20697 * Tru64 Directory Magic::       @command{mkdir} goes wild on Tru64
20698 * Make Target Lookup::          More details about @code{VPATH} lookup
20699 @end menu
20701 @node Variables listed in VPATH
20702 @subsection Variables listed in @code{VPATH}
20703 @cindex @code{VPATH} and variables
20704 @cindex variables and @code{VPATH}
20706 Do not set @code{VPATH} to the value of another variable, for example
20707 @samp{VPATH = $(srcdir)}, because some ancient versions of
20708 @command{make} do not do variable substitutions on the value of
20709 @code{VPATH}.  For example, use this
20711 @example
20712 srcdir = @@srcdir@@
20713 VPATH = @@srcdir@@
20714 @end example
20716 @noindent
20717 rather than @samp{VPATH = $(srcdir)}.  Note that with GNU
20718 Automake, there is no need to set this yourself.
20720 @node VPATH and Double-colon
20721 @subsection @code{VPATH} and Double-colon Rules
20722 @cindex @code{VPATH} and double-colon rules
20723 @cindex double-colon rules and @code{VPATH}
20725 With ancient versions of Sun @command{make},
20726 any assignment to @code{VPATH} causes @command{make} to execute only
20727 the first set of double-colon rules.
20728 However, this problem is no longer of practical concern.
20730 @node $< in Explicit Rules
20731 @subsection @code{$<} Not Supported in Explicit Rules
20732 @cindex explicit rules, @code{$<}, and @code{VPATH}
20733 @cindex @code{$<}, explicit rules, and @code{VPATH}
20734 @cindex @code{VPATH}, explicit rules, and @code{$<}
20736 Using @code{$<} in explicit rules is not portable.
20737 The prerequisite file must be named explicitly in the rule.  If you want
20738 to find the prerequisite via a @code{VPATH} search, you have to code the
20739 whole thing manually.  @xref{Build Directories}.
20741 @node Automatic Rule Rewriting
20742 @subsection Automatic Rule Rewriting
20743 @cindex @code{VPATH} and automatic rule rewriting
20744 @cindex automatic rule rewriting and @code{VPATH}
20746 Some @command{make} implementations, such as Solaris and Tru64,
20747 search for prerequisites in @code{VPATH} and
20748 then rewrite each occurrence as a plain word in the rule.
20749 For instance:
20751 @example
20752 # This isn't portable to GNU make.
20753 VPATH = ../pkg/src
20754 f.c: if.c
20755         cp if.c f.c
20756 @end example
20758 @noindent
20759 executes @code{cp ../pkg/src/if.c f.c} if @file{if.c} is
20760 found in @file{../pkg/src}.
20762 However, this rule leads to real problems in practice.  For example, if
20763 the source directory contains an ordinary file named @file{test} that is
20764 used in a dependency, Solaris @command{make} rewrites commands like
20765 @samp{if test -r foo; @dots{}} to @samp{if ../pkg/src/test -r foo;
20766 @dots{}}, which is typically undesirable.  In fact, @command{make} is
20767 completely unaware of shell syntax used in the rules, so the VPATH
20768 rewrite can potentially apply to @emph{any} whitespace-separated word
20769 in a rule, including shell variables, functions, and keywords.
20771 @example
20772 $ @kbd{mkdir build}
20773 $ @kbd{cd build}
20774 $ @kbd{cat > Makefile <<'END'}
20775 VPATH = ..
20776 all: arg func for echo
20777         func () @{ for arg in "$$@@"; do echo $$arg; done; @}; \
20778         func "hello world"
20780 $ @kbd{touch ../arg ../func ../for ../echo}
20781 $ @kbd{make}
20782 ../func () @{ ../for ../arg in "$@@"; do ../echo $arg; done; @}; \
20783 ../func "hello world"
20784 sh: syntax error at line 1: `do' unexpected
20785 *** Error code 2
20786 @end example
20788 @noindent
20789 To avoid this problem, portable makefiles should never mention a source
20790 file or dependency whose name is that of a shell keyword like @file{for}
20791 or @file{until}, a shell command like @command{cat} or @command{gcc} or
20792 @command{test}, or a shell function or variable used in the corresponding
20793 @command{Makefile} recipe.
20795 Because of these problems GNU @command{make} and many other @command{make}
20796 implementations do not rewrite commands, so portable makefiles should
20797 search @code{VPATH} manually.  It is tempting to write this:
20799 @smallexample
20800 # This isn't portable to Solaris make.
20801 VPATH = ../pkg/src
20802 f.c: if.c
20803         cp `test -f if.c || echo $(VPATH)/`if.c f.c
20804 @end smallexample
20806 @noindent
20807 However, the ``prerequisite rewriting'' still applies here.  So if
20808 @file{if.c} is in @file{../pkg/src}, Solaris and Tru64 @command{make}
20809 execute
20811 @smallexample
20812 cp `test -f ../pkg/src/if.c || echo ../pkg/src/`if.c f.c
20813 @end smallexample
20815 @noindent
20816 which reduces to
20818 @example
20819 cp if.c f.c
20820 @end example
20822 @noindent
20823 and thus fails.  Oops.
20825 A simple workaround, and good practice anyway, is to use @samp{$?} and
20826 @samp{$@@} when possible:
20828 @smallexample
20829 VPATH = ../pkg/src
20830 f.c: if.c
20831         cp $? $@@
20832 @end smallexample
20834 @noindent
20835 but this does not generalize well to commands with multiple
20836 prerequisites.  A more general workaround is to rewrite the rule so that
20837 the prerequisite @file{if.c} never appears as a plain word.  For
20838 example, these three rules would be safe, assuming @file{if.c} is in
20839 @file{../pkg/src} and the other files are in the working directory:
20841 @smallexample
20842 VPATH = ../pkg/src
20843 f.c: if.c f1.c
20844         cat `test -f ./if.c || echo $(VPATH)/`if.c f1.c >$@@
20845 g.c: if.c g1.c
20846         cat `test -f 'if.c' || echo $(VPATH)/`if.c g1.c >$@@
20847 h.c: if.c h1.c
20848         cat `test -f "if.c" || echo $(VPATH)/`if.c h1.c >$@@
20849 @end smallexample
20851 Things get worse when your prerequisites are in a macro.
20853 @example
20854 VPATH = ../pkg/src
20855 HEADERS = f.h g.h h.h
20856 install-HEADERS: $(HEADERS)
20857         for i in $(HEADERS); do \
20858           $(INSTALL) -m 644 \
20859             `test -f $$i || echo $(VPATH)/`$$i \
20860             $(DESTDIR)$(includedir)/$$i; \
20861 @c $$ restore font-lock
20862         done
20863 @end example
20865 The above @code{install-HEADERS} rule is not Solaris-proof because @code{for
20866 i in $(HEADERS);} is expanded to @code{for i in f.h g.h h.h;}
20867 where @code{f.h} and @code{g.h} are plain words and are hence
20868 subject to @code{VPATH} adjustments.
20870 If the three files are in @file{../pkg/src}, the rule is run as:
20872 @example
20873 for i in ../pkg/src/f.h ../pkg/src/g.h h.h; do \
20874   install -m 644 \
20875      `test -f $i || echo ../pkg/src/`$i \
20876      /usr/local/include/$i; \
20877 done
20878 @end example
20880 where the two first @command{install} calls fail.  For instance,
20881 consider the @code{f.h} installation:
20883 @example
20884 install -m 644 \
20885   `test -f ../pkg/src/f.h || \
20886     echo ../pkg/src/ \
20887   `../pkg/src/f.h \
20888   /usr/local/include/../pkg/src/f.h;
20889 @end example
20891 @noindent
20892 It reduces to:
20894 @example
20895 install -m 644 \
20896   ../pkg/src/f.h \
20897   /usr/local/include/../pkg/src/f.h;
20898 @end example
20900 Note that the manual @code{VPATH} search did not cause any problems here;
20901 however this command installs @file{f.h} in an incorrect directory.
20903 Trying to quote @code{$(HEADERS)} in some way, as we did for
20904 @code{foo.c} a few makefiles ago, does not help:
20906 @example
20907 install-HEADERS: $(HEADERS)
20908         headers='$(HEADERS)'; \
20909         for i in $$headers; do \
20910           $(INSTALL) -m 644 \
20911             `test -f $$i || echo $(VPATH)/`$$i \
20912             $(DESTDIR)$(includedir)/$$i; \
20913         done
20914 @end example
20916 Now, @code{headers='$(HEADERS)'} macro-expands to:
20918 @example
20919 headers='f.h g.h h.h'
20920 @end example
20922 @noindent
20923 but @code{g.h} is still a plain word.  (As an aside, the idiom
20924 @code{headers='$(HEADERS)'; for i in $$headers;} is a good
20925 idea if @code{$(HEADERS)} can be empty, because some shells diagnose a
20926 syntax error on @code{for i in;}.)
20928 One workaround is to strip this unwanted @file{../pkg/src/} prefix manually:
20930 @example
20931 VPATH = ../pkg/src
20932 HEADERS = f.h g.h h.h
20933 install-HEADERS: $(HEADERS)
20934         headers='$(HEADERS)'; \
20935         for i in $$headers; do \
20936           i=`expr "$$i" : '$(VPATH)/\(.*\)'`;
20937           $(INSTALL) -m 644 \
20938             `test -f $$i || echo $(VPATH)/`$$i \
20939             $(DESTDIR)$(includedir)/$$i; \
20940 @c $$ restore font-lock
20941         done
20942 @end example
20944 Automake does something similar.  However the above hack works only if
20945 the files listed in @code{HEADERS} are in the current directory or a
20946 subdirectory; they should not be in an enclosing directory.  If we had
20947 @code{HEADERS = ../f.h}, the above fragment would fail in a VPATH
20948 build with Tru64 @command{make}.  The reason is that not only does
20949 Tru64 @command{make} rewrite dependencies, but it also simplifies
20950 them.  Hence @code{../f.h} becomes @code{../pkg/f.h} instead of
20951 @code{../pkg/src/../f.h}.  This obviously defeats any attempt to strip
20952 a leading @file{../pkg/src/} component.
20954 The following example makes the behavior of Tru64 @command{make}
20955 more apparent.
20957 @example
20958 $ @kbd{cat Makefile}
20959 VPATH = sub
20960 all: ../foo
20961         echo ../foo
20962 $ @kbd{ls}
20963 Makefile foo
20964 $ @kbd{make}
20965 echo foo
20967 @end example
20969 @noindent
20970 Dependency @file{../foo} was found in @file{sub/../foo}, but Tru64
20971 @command{make} simplified it as @file{foo}.  (Note that the @file{sub/}
20972 directory does not even exist, this just means that the simplification
20973 occurred before the file was checked for.)
20975 For the record here is how SunOS 4 @command{make} behaves on this
20976 example.
20978 @smallexample
20979 $ @kbd{make}
20980 make: Fatal error: Don't know how to make target `../foo'
20981 $ @kbd{mkdir sub}
20982 $ @kbd{make}
20983 echo sub/../foo
20984 sub/../foo
20985 @end smallexample
20988 @node Tru64 Directory Magic
20989 @subsection Tru64 @command{make} Creates Prerequisite Directories Magically
20990 @cindex @code{VPATH} and prerequisite directories
20991 @cindex prerequisite directories and @code{VPATH}
20993 When a prerequisite is a subdirectory of @code{VPATH}, Tru64
20994 @command{make} creates it in the current directory.
20996 @example
20997 $ @kbd{mkdir -p foo/bar build}
20998 $ @kbd{cd build}
20999 $ @kbd{cat >Makefile <<END
21000 VPATH = ..
21001 all: foo/bar
21002 END}
21003 $ @kbd{make}
21004 mkdir foo
21005 mkdir foo/bar
21006 @end example
21008 This can yield unexpected results if a rule uses a manual @code{VPATH}
21009 search as presented before.
21011 @example
21012 VPATH = ..
21013 all : foo/bar
21014         command `test -d foo/bar || echo ../`foo/bar
21015 @end example
21017 The above @command{command} is run on the empty @file{foo/bar}
21018 directory that was created in the current directory.
21020 @node Make Target Lookup
21021 @subsection Make Target Lookup
21022 @cindex @code{VPATH}, resolving target pathnames
21024 GNU @command{make} uses a complex algorithm to decide when it
21025 should use files found via a @code{VPATH} search.  @xref{Search
21026 Algorithm, , How Directory Searches are Performed, make, The GNU Make
21027 Manual}.
21029 If a target needs to be rebuilt, GNU @command{make} discards the
21030 file name found during the @code{VPATH} search for this target, and
21031 builds the file locally using the file name given in the makefile.
21032 If a target does not need to be rebuilt, GNU @command{make} uses the
21033 file name found during the @code{VPATH} search.
21035 Other @command{make} implementations, like NetBSD @command{make}, are
21036 easier to describe: the file name found during the @code{VPATH} search
21037 is used whether the target needs to be rebuilt or not.  Therefore
21038 new files are created locally, but existing files are updated at their
21039 @code{VPATH} location.
21041 OpenBSD and FreeBSD @command{make}, however,
21042 never perform a
21043 @code{VPATH} search for a dependency that has an explicit rule.
21044 This is extremely annoying.
21046 When attempting a @code{VPATH} build for an autoconfiscated package
21047 (e.g., @code{mkdir build && cd build && ../configure}), this means
21049 @command{make} builds everything locally in the @file{build}
21050 directory, while BSD @command{make} builds new files locally and
21051 updates existing files in the source directory.
21053 @example
21054 $ @kbd{cat Makefile}
21055 VPATH = ..
21056 all: foo.x bar.x
21057 foo.x bar.x: newer.x
21058         @@echo Building $@@
21059 $ @kbd{touch ../bar.x}
21060 $ @kbd{touch ../newer.x}
21061 $ @kbd{make}        # GNU make
21062 Building foo.x
21063 Building bar.x
21064 $ @kbd{pmake}       # NetBSD make
21065 Building foo.x
21066 Building ../bar.x
21067 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
21068 Building foo.x
21069 Building bar.x
21070 $ @kbd{tmake}       # Tru64 make
21071 Building foo.x
21072 Building bar.x
21073 $ @kbd{touch ../bar.x}
21074 $ @kbd{make}        # GNU make
21075 Building foo.x
21076 $ @kbd{pmake}       # NetBSD make
21077 Building foo.x
21078 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
21079 Building foo.x
21080 Building bar.x
21081 $ @kbd{tmake}       # Tru64 make
21082 Building foo.x
21083 Building bar.x
21084 @end example
21086 Note how NetBSD @command{make} updates @file{../bar.x} in its
21087 VPATH location, and how FreeBSD, OpenBSD, and Tru64
21088 @command{make} always
21089 update @file{bar.x}, even when @file{../bar.x} is up to date.
21091 Another point worth mentioning is that once GNU @command{make} has
21092 decided to ignore a @code{VPATH} file name (e.g., it ignored
21093 @file{../bar.x} in the above example) it continues to ignore it when
21094 the target occurs as a prerequisite of another rule.
21096 The following example shows that GNU @command{make} does not look up
21097 @file{bar.x} in @code{VPATH} before performing the @code{.x.y} rule,
21098 because it ignored the @code{VPATH} result of @file{bar.x} while running
21099 the @code{bar.x: newer.x} rule.
21101 @example
21102 $ @kbd{cat Makefile}
21103 VPATH = ..
21104 all: bar.y
21105 bar.x: newer.x
21106         @@echo Building $@@
21107 .SUFFIXES: .x .y
21108 .x.y:
21109         cp $< $@@
21110 $ @kbd{touch ../bar.x}
21111 $ @kbd{touch ../newer.x}
21112 $ @kbd{make}        # GNU make
21113 Building bar.x
21114 cp bar.x bar.y
21115 cp: cannot stat `bar.x': No such file or directory
21116 make: *** [bar.y] Error 1
21117 $ @kbd{pmake}       # NetBSD make
21118 Building ../bar.x
21119 cp ../bar.x bar.y
21120 $ @kbd{rm bar.y}
21121 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
21122 echo Building bar.x
21123 cp bar.x bar.y
21124 cp: cannot stat `bar.x': No such file or directory
21125 *** Error code 1
21126 $ @kbd{tmake}       # Tru64 make
21127 Building bar.x
21128 cp: bar.x: No such file or directory
21129 *** Exit 1
21130 @end example
21132 Note that if you drop away the command from the @code{bar.x: newer.x}
21133 rule, GNU @command{make} magically starts to work: it
21134 knows that @code{bar.x} hasn't been updated, therefore it doesn't
21135 discard the result from @code{VPATH} (@file{../bar.x}) in succeeding
21136 uses.  Tru64 also works, but FreeBSD and OpenBSD
21137 still don't.
21139 @example
21140 $ @kbd{cat Makefile}
21141 VPATH = ..
21142 all: bar.y
21143 bar.x: newer.x
21144 .SUFFIXES: .x .y
21145 .x.y:
21146         cp $< $@@
21147 $ @kbd{touch ../bar.x}
21148 $ @kbd{touch ../newer.x}
21149 $ @kbd{make}        # GNU make
21150 cp ../bar.x bar.y
21151 $ @kbd{rm bar.y}
21152 $ @kbd{pmake}       # NetBSD make
21153 cp ../bar.x bar.y
21154 $ @kbd{rm bar.y}
21155 $ @kbd{fmake}       # FreeBSD make, OpenBSD make
21156 cp bar.x bar.y
21157 cp: cannot stat `bar.x': No such file or directory
21158 *** Error code 1
21159 $ @kbd{tmake}       # Tru64 make
21160 cp ../bar.x bar.y
21161 @end example
21163 It seems the sole solution that would please every @command{make}
21164 implementation is to never rely on @code{VPATH} searches for targets.
21165 In other words, @code{VPATH} should be reserved to sources that are not built.
21168 @node Single Suffix Rules
21169 @section Single Suffix Rules and Separated Dependencies
21170 @cindex Single Suffix Inference Rule
21171 @cindex Rule, Single Suffix Inference
21172 A @dfn{Single Suffix Rule} is basically a usual suffix (inference) rule
21173 (@samp{.from.to:}), but which @emph{destination} suffix is empty
21174 (@samp{.from:}).
21176 @cindex Separated Dependencies
21177 @dfn{Separated dependencies} simply refers to listing the prerequisite
21178 of a target, without defining a rule.  Usually one can list on the one
21179 hand side, the rules, and on the other hand side, the dependencies.
21181 Solaris @command{make} does not support separated dependencies for
21182 targets defined by single suffix rules:
21184 @example
21185 $ @kbd{cat Makefile}
21186 .SUFFIXES: .in
21187 foo: foo.in
21188 .in:
21189         cp $< $@@
21190 $ @kbd{touch foo.in}
21191 $ @kbd{make}
21192 $ @kbd{ls}
21193 Makefile  foo.in
21194 @end example
21196 @noindent
21197 while GNU Make does:
21199 @example
21200 $ @kbd{gmake}
21201 cp foo.in foo
21202 $ @kbd{ls}
21203 Makefile  foo       foo.in
21204 @end example
21206 Note it works without the @samp{foo: foo.in} dependency.
21208 @example
21209 $ @kbd{cat Makefile}
21210 .SUFFIXES: .in
21211 .in:
21212         cp $< $@@
21213 $ @kbd{make foo}
21214 cp foo.in foo
21215 @end example
21217 @noindent
21218 and it works with double suffix inference rules:
21220 @example
21221 $ @kbd{cat Makefile}
21222 foo.out: foo.in
21223 .SUFFIXES: .in .out
21224 .in.out:
21225         cp $< $@@
21226 $ @kbd{make}
21227 cp foo.in foo.out
21228 @end example
21230 As a result, in such a case, you have to write target rules.
21232 @node Timestamps and Make
21233 @section Timestamp Resolution and Make
21234 @cindex timestamp resolution
21235 Traditionally, file timestamps had 1-second resolution, and
21236 @command{make} used those timestamps to determine whether one file was
21237 newer than the other.  However, many modern file systems have
21238 timestamps with 1-nanosecond resolution.  Some @command{make}
21239 implementations look at the entire timestamp; others ignore the
21240 fractional part, which can lead to incorrect results.  Normally this
21241 is not a problem, but in some extreme cases you may need to use tricks
21242 like @samp{sleep 1} to work around timestamp truncation bugs.
21244 Commands like @samp{cp -p} and @samp{touch -r} typically do not copy
21245 file timestamps to their full resolutions (@pxref{touch, , Limitations of Usual
21246 Tools}).  Hence you should be wary of rules like this:
21248 @example
21249 dest: src
21250         cp -p src dest
21251 @end example
21253 as @file{dest} often appears to be older than @file{src} after the
21254 timestamp is truncated, and this can cause @command{make} to do
21255 needless rework the next time it is invoked.  To work around this
21256 problem, you can use a timestamp file, e.g.:
21258 @example
21259 dest-stamp: src
21260         cp -p src dest
21261         date >dest-stamp
21262 @end example
21264 Apart from timestamp resolution, there are also differences in handling
21265 equal timestamps.  HP-UX @command{make} updates targets if it has the
21266 same timestamp as one of its prerequisites, in violation of Posix rules.
21268 This can cause spurious rebuilds for repeated runs of @command{make}.
21269 This in turn can cause @command{make} to fail if it tries to rebuild
21270 generated files in a possibly read-only source tree with tools not
21271 present on the end-user machine.  Use GNU @command{make} instead.
21275 @c ======================================== Portable C and C++ Programming
21277 @node Portable C and C++
21278 @chapter Portable C and C++ Programming
21279 @cindex Portable C and C++ programming
21281 C and C++ programs often use low-level features of the underlying
21282 system, and therefore are often more difficult to make portable to other
21283 platforms.
21285 Several standards have been developed to help make your programs more
21286 portable.  If you write programs with these standards in mind, you can
21287 have greater confidence that your programs work on a wide variety
21288 of systems.
21289 @ifhtml
21290 @uref{https://@/gcc.gnu.org/@/onlinedocs/@/gcc/@/Standards.html, Language
21291 Standards Supported by GCC}
21292 @end ifhtml
21293 @ifnothtml
21294 @xref{Standards, , Language Standards Supported by
21295 GCC, gcc, Using the GNU Compiler Collection
21296 (GCC)},
21297 @end ifnothtml
21298 for a list of C-related standards.  Many programs also assume the
21299 @uref{https://@/en.wikipedia.org/@/wiki/@/POSIX, Posix standard}.
21301 Some old code is written to be portable to K&R C, which predates any C
21302 standard.  K&R C compilers are no longer of practical interest, though,
21303 and the rest of section assumes at least C89, the first C standard.
21305 Program portability is a huge topic, and this section can only briefly
21306 introduce common pitfalls.  @xref{System Portability, , Portability
21307 between System Types, standards, The GNU Coding Standards}, for
21308 more information.
21310 @menu
21311 * Varieties of Unportability::  How to make your programs unportable
21312 * Integer Overflow::            When integers get too large
21313 * Preprocessor Arithmetic::     @code{#if} expression problems
21314 * Null Pointers::               Properties of null pointers
21315 * Buffer Overruns::             Subscript errors and the like
21316 * Volatile Objects::            @code{volatile} and signals
21317 * Floating Point Portability::  Portable floating-point arithmetic
21318 * Exiting Portably::            Exiting and the exit status
21319 @end menu
21321 @node Varieties of Unportability
21322 @section Varieties of Unportability
21323 @cindex portability
21325 Autoconf tests and ordinary programs often need to test what is allowed
21326 on a system, and therefore they may need to deliberately exceed the
21327 boundaries of what the standards allow, if only to see whether an
21328 optional feature is present.  When you write such a program, you should
21329 keep in mind the difference between constraints, unspecified behavior,
21330 and undefined behavior.
21332 In C, a @dfn{constraint} is a rule that the compiler must enforce.  An
21333 example constraint is that C programs must not declare a bit-field with
21334 negative width.  Tests can therefore reliably assume that programs with
21335 negative-width bit-fields are rejected by a compiler that conforms
21336 to the standard.
21338 @dfn{Unspecified behavior} is valid behavior, where the standard allows
21339 multiple possibilities.  For example, the order of evaluation of
21340 function arguments is unspecified.  Some unspecified behavior is
21341 @dfn{implementation-defined}, i.e., documented by the implementation,
21342 but since Autoconf tests cannot read the documentation they cannot
21343 distinguish between implementation-defined and other unspecified
21344 behavior.  It is common for Autoconf tests to probe implementations to
21345 determine otherwise-unspecified behavior.
21347 @dfn{Undefined behavior} is invalid behavior, where the standard allows
21348 the implementation to do anything it pleases.  For example,
21349 dereferencing a null pointer leads to undefined behavior.  If possible,
21350 test programs should avoid undefined behavior, since a program with
21351 undefined behavior might succeed on a test that should fail.
21353 The above rules apply to programs that are intended to conform to the
21354 standard.  However, strictly-conforming programs are quite rare, since
21355 the standards are so limiting.  A major goal of Autoconf is to support
21356 programs that use implementation features not described by the standard,
21357 and it is fairly common for test programs to violate the above rules, if
21358 the programs work well enough in practice.
21360 @node Integer Overflow
21361 @section Integer Overflow
21362 @cindex integer overflow
21363 @cindex overflow, signed integer
21364 @cindex signed integer overflow
21365 @cindex wraparound arithmetic
21367 In practice many portable C programs assume that signed integer overflow wraps
21368 around reliably using two's complement arithmetic.  Yet the C standard
21369 says that program behavior is undefined on overflow, and in a few cases
21370 C programs do not work on some modern implementations because their
21371 overflows do not wrap around as their authors expected.  Conversely, in
21372 signed integer remainder, the C standard requires overflow
21373 behavior that is commonly not implemented.
21375 @menu
21376 * Integer Overflow Basics::     Why integer overflow is a problem
21377 * Signed Overflow Examples::    Examples of code assuming wraparound
21378 * Optimization and Wraparound::  Optimizations that break uses of wraparound
21379 * Signed Overflow Advice::      Practical advice for signed overflow issues
21380 * Signed Integer Division::     @code{INT_MIN / -1} and @code{INT_MIN % -1}
21381 @end menu
21383 @node Integer Overflow Basics
21384 @subsection Basics of Integer Overflow
21385 @cindex integer overflow
21386 @cindex overflow, signed integer
21387 @cindex signed integer overflow
21388 @cindex wraparound arithmetic
21390 In languages like C, unsigned integer overflow reliably wraps around;
21391 e.g., @code{UINT_MAX + 1} yields zero.
21392 This is guaranteed by the C standard and is
21393 portable in practice, unless you specify aggressive,
21394 nonstandard optimization options
21395 suitable only for special applications.
21397 In contrast, the C standard says that signed integer overflow leads to
21398 undefined behavior where a program can do anything, including dumping
21399 core or overrunning a buffer.  The misbehavior can even precede the
21400 overflow.  Such an overflow can occur during addition, subtraction,
21401 multiplication, division, and left shift.
21403 Despite this requirement of the standard, many C programs and Autoconf
21404 tests assume that signed integer overflow silently wraps around modulo a
21405 power of two, using two's complement arithmetic, so long as you cast the
21406 resulting value to a signed integer type or store it into a signed
21407 integer variable.  If you use conservative optimization flags, such
21408 programs are generally portable to the vast majority of modern
21409 platforms, with a few exceptions discussed later.
21411 For historical reasons the C standard also allows implementations with
21412 ones' complement or signed magnitude arithmetic, but it is safe to
21413 assume two's complement nowadays.
21415 Also, overflow can occur when converting an out-of-range value to a
21416 signed integer type.  Here a standard implementation must define what
21417 happens, but this might include raising an exception.  In practice all
21418 known implementations support silent wraparound in this case, so you need
21419 not worry about other possibilities.
21421 @node Signed Overflow Examples
21422 @subsection Examples of Code Assuming Wraparound Overflow
21423 @cindex integer overflow
21424 @cindex overflow, signed integer
21425 @cindex signed integer overflow
21426 @cindex wraparound arithmetic
21428 There has long been a tension between what the C standard requires for
21429 signed integer overflow, and what C programs commonly assume.  The
21430 standard allows aggressive optimizations based on assumptions that
21431 overflow never occurs, but many practical C programs rely on overflow
21432 wrapping around.  These programs do not conform to the standard, but
21433 they commonly work in practice because compiler writers are
21434 understandably reluctant to implement optimizations that would break
21435 many programs, unless perhaps a user specifies aggressive optimization.
21437 The C Standard says that if a program has signed integer overflow its
21438 behavior is undefined, and the undefined behavior can even precede the
21439 overflow.  To take an extreme example:
21441 @c Inspired by Robert Dewar's example in
21442 @c <https://gcc.gnu.org/ml/gcc/2007-01/msg00038.html> (2007-01-01).
21443 @example
21444 if (password == expected_password)
21445   allow_superuser_privileges ();
21446 else if (counter++ == INT_MAX)
21447   abort ();
21448 else
21449   printf ("%d password mismatches\n", counter);
21450 @end example
21452 @noindent
21453 If the @code{int} variable @code{counter} equals @code{INT_MAX},
21454 @code{counter++} must overflow and the behavior is undefined, so the C
21455 standard allows the compiler to optimize away the test against
21456 @code{INT_MAX} and the @code{abort} call.
21457 Worse, if an earlier bug in the program lets the compiler deduce that
21458 @code{counter == INT_MAX} or that @code{counter} previously overflowed,
21459 the C standard allows the compiler to optimize away the password test
21460 and generate code that allows superuser privileges unconditionally.
21462 Despite this requirement by the standard, it has long been common for C
21463 code to assume wraparound arithmetic after signed overflow, and all
21464 known practical C implementations support some C idioms that assume
21465 wraparound signed arithmetic, even if the idioms do not conform
21466 strictly to the standard.  If your code looks like the following
21467 examples it will almost surely work with real-world compilers.
21469 Here is an example derived from the 7th Edition Unix implementation of
21470 @code{atoi} (1979-01-10):
21472 @example
21473 char *p;
21474 int f, n;
21475 @dots{}
21476 while (*p >= '0' && *p <= '9')
21477   n = n * 10 + *p++ - '0';
21478 return (f ? -n : n);
21479 @end example
21481 @noindent
21482 Even if the input string is in range, on most modern machines this has
21483 signed overflow when computing the most negative integer (the @code{-n}
21484 overflows) or a value near an extreme integer (the first @code{+}
21485 overflows).
21487 Here is another example, derived from the 7th Edition implementation of
21488 @code{rand} (1979-01-10).  Here the programmer expects both
21489 multiplication and addition to wrap on overflow:
21491 @example
21492 static long int randx = 1;
21493 @dots{}
21494 randx = randx * 1103515245 + 12345;
21495 return (randx >> 16) & 077777;
21496 @end example
21498 In the following example, derived from the GNU C Library 2.5
21499 implementation of @code{mktime} (2006-09-09), the code assumes
21500 wraparound arithmetic in @code{+} to detect signed overflow:
21502 @example
21503 time_t t, t1, t2;
21504 int sec_requested, sec_adjustment;
21505 @dots{}
21506 t1 = t + sec_requested;
21507 t2 = t1 + sec_adjustment;
21508 if (((t1 < t) != (sec_requested < 0))
21509     | ((t2 < t1) != (sec_adjustment < 0)))
21510   return -1;
21511 @end example
21513 If your code looks like these examples, it is probably safe even though
21514 it does not strictly conform to the C standard.  This might lead one to
21515 believe that one can generally assume wraparound on overflow, but that
21516 is not always true, as can be seen in the next section.
21518 @node Optimization and Wraparound
21519 @subsection Optimizations That Break Wraparound Arithmetic
21520 @cindex loop induction
21522 Compilers sometimes generate code that is incompatible with wraparound
21523 integer arithmetic.  A simple example is an algebraic simplification: a
21524 compiler might translate @code{(i * 2000) / 1000} to @code{i * 2}
21525 because it assumes that @code{i * 2000} does not overflow.  The
21526 translation is not equivalent to the original when overflow occurs:
21527 e.g., in the typical case of 32-bit signed two's complement wraparound
21528 @code{int}, if @code{i} has type @code{int} and value @code{1073742},
21529 the original expression returns @minus{}2147483 but the optimized
21530 version returns the mathematically correct value 2147484.
21532 More subtly, loop induction optimizations often exploit the undefined
21533 behavior of signed overflow.  Consider the following contrived function
21534 @code{sumc}:
21536 @example
21538 sumc (int lo, int hi)
21540   int sum = 0;
21541   int i;
21542   for (i = lo; i <= hi; i++)
21543     sum ^= i * 53;
21544   return sum;
21546 @end example
21548 @noindent
21549 To avoid multiplying by 53 each time through the loop, an optimizing
21550 compiler might internally transform @code{sumc} to the equivalent of the
21551 following:
21553 @example
21555 transformed_sumc (int lo, int hi)
21557   int sum = 0;
21558   int hic = hi * 53;
21559   int ic;
21560   for (ic = lo * 53; ic <= hic; ic += 53)
21561     sum ^= ic;
21562   return sum;
21564 @end example
21566 @noindent
21567 This transformation is allowed by the C standard, but it is invalid for
21568 wraparound arithmetic when @code{INT_MAX / 53 < hi}, because then the
21569 overflow in computing expressions like @code{hi * 53} can cause the
21570 expression @code{i <= hi} to yield a different value from the
21571 transformed expression @code{ic <= hic}.
21573 For this reason, compilers that use loop induction and similar
21574 techniques often do not support reliable wraparound arithmetic when a
21575 loop induction variable like @code{ic} is involved.  Since loop
21576 induction variables are generated by the compiler, and are not visible
21577 in the source code, it is not always trivial to say whether the problem
21578 affects your code.
21580 Hardly any code actually depends on wraparound arithmetic in cases like
21581 these, so in practice these loop induction optimizations are almost
21582 always useful.  However, edge cases in this area can cause problems.
21583 For example:
21585 @example
21586 int j;
21587 for (j = 1; 0 < j; j *= 2)
21588   test (j);
21589 @end example
21591 @noindent
21592 Here, the loop attempts to iterate through all powers of 2 that
21593 @code{int} can represent, but the C standard allows a compiler to
21594 optimize away the comparison and generate an infinite loop,
21595 under the argument that behavior is undefined on overflow.  As of this
21596 writing this optimization is not done by any production version of
21597 GCC with @option{-O2}, but it might be performed by other
21598 compilers, or by more aggressive GCC optimization options,
21599 and the GCC developers have not decided whether it will
21600 continue to work with GCC and @option{-O2}.
21602 @node Signed Overflow Advice
21603 @subsection Practical Advice for Signed Overflow Issues
21604 @cindex integer overflow
21605 @cindex overflow, signed integer
21606 @cindex signed integer overflow
21607 @cindex wraparound arithmetic
21609 Ideally the safest approach is to avoid signed integer overflow
21610 entirely.  For example, instead of multiplying two signed integers, you
21611 can convert them to unsigned integers, multiply the unsigned values,
21612 then test whether the result is in signed range.
21614 Rewriting code in this way will be inconvenient, though, particularly if
21615 the signed values might be negative.  Also, it may hurt
21616 performance.  Using unsigned arithmetic to check for overflow is
21617 particularly painful to do portably and efficiently when dealing with an
21618 integer type like @code{uid_t} whose width and signedness vary from
21619 platform to platform.
21621 Furthermore, many C applications pervasively assume wraparound behavior
21622 and typically it is not easy to find and remove all these assumptions.
21623 Hence it is often useful to maintain nonstandard code that assumes
21624 wraparound on overflow, instead of rewriting the code.  The rest of this
21625 section attempts to give practical advice for this situation.
21627 If your code wants to detect signed integer overflow in @code{sum = a +
21628 b}, it is generally safe to use an expression like @code{(sum < a) != (b
21629 < 0)}.
21631 If your code uses a signed loop index, make sure that the index cannot
21632 overflow, along with all signed expressions derived from the index.
21633 Here is a contrived example of problematic code with two instances of
21634 overflow.
21636 @example
21637 for (i = INT_MAX - 10; i <= INT_MAX; i++)
21638   if (i + 1 < 0)
21639     @{
21640       report_overflow ();
21641       break;
21642     @}
21643 @end example
21645 @noindent
21646 Because of the two overflows, a compiler might optimize away or
21647 transform the two comparisons in a way that is incompatible with the
21648 wraparound assumption.
21650 If your code uses an expression like @code{(i * 2000) / 1000} and you
21651 actually want the multiplication to wrap around on overflow, use
21652 unsigned arithmetic
21653 to do it, e.g., @code{((int) (i * 2000u)) / 1000}.
21655 If your code assumes wraparound behavior and you want to insulate it
21656 against any GCC optimizations that would fail to support that
21657 behavior, you should use GCC's @option{-fwrapv} option, which
21658 causes signed overflow to wrap around reliably (except for division and
21659 remainder, as discussed in the next section).
21661 If you need to port to platforms where signed integer overflow does not
21662 reliably wrap around (e.g., due to hardware overflow checking, or to
21663 highly aggressive optimizations), you should consider debugging with
21664 GCC's @option{-ftrapv} option, which causes signed overflow to
21665 raise an exception.
21667 @node Signed Integer Division
21668 @subsection Signed Integer Division and Integer Overflow
21669 @cindex division, integer
21671 Overflow in signed
21672 integer division is not always harmless: for example, on CPUs of the
21673 i386 family, dividing @code{INT_MIN} by @code{-1} yields a SIGFPE signal
21674 which by default terminates the program.  Worse, taking the remainder
21675 of these two values typically yields the same signal on these CPUs,
21676 even though the C standard requires @code{INT_MIN % -1} to yield zero
21677 because the expression does not overflow.
21679 @node Preprocessor Arithmetic
21680 @section Preprocessor Arithmetic
21681 @cindex preprocessor arithmetic
21683 In C99 and later, preprocessor arithmetic, used for @code{#if}
21684 expressions, must
21685 be evaluated as if all signed values are of type @code{intmax_t} and all
21686 unsigned values of type @code{uintmax_t}.  Many compilers are buggy in
21687 this area, though.  For example, as of 2007, Sun C mishandles @code{#if
21688 LLONG_MIN < 0} on a platform with 32-bit @code{long int} and 64-bit
21689 @code{long long int}.  Also, some older preprocessors mishandle
21690 constants ending in @code{LL}.  To work around these problems, you can
21691 compute the value of expressions like @code{LONG_MAX < LLONG_MAX} at
21692 @code{configure}-time rather than at @code{#if}-time.
21694 @node Null Pointers
21695 @section Properties of Null Pointers
21696 @cindex null pointers
21698 Most modern hosts reliably fail when you attempt to dereference a null
21699 pointer.
21701 On almost all modern hosts, null pointers use an all-bits-zero internal
21702 representation, so you can reliably use @code{memset} with 0 to set all
21703 the pointers in an array to null values.
21705 If @code{p} is a null pointer to an object type, the C expression
21706 @code{p + 0} always evaluates to @code{p} on modern hosts, even though
21707 the standard says that it has undefined behavior.
21709 @node Buffer Overruns
21710 @section Buffer Overruns and Subscript Errors
21711 @cindex buffer overruns
21713 Buffer overruns and subscript errors are the most common dangerous
21714 errors in C programs.  They result in undefined behavior because storing
21715 outside an array typically modifies storage that is used by some other
21716 object, and most modern systems lack runtime checks to catch these
21717 errors.  Programs should not rely on buffer overruns being caught.
21719 There is one exception to the usual rule that a portable program cannot
21720 address outside an array.  In C, it is valid to compute the address just
21721 past an object, e.g., @code{&a[N]} where @code{a} has @code{N} elements,
21722 so long as you do not dereference the resulting pointer.  But it is not
21723 valid to compute the address just before an object, e.g., @code{&a[-1]};
21724 nor is it valid to compute two past the end, e.g., @code{&a[N+1]}.  On
21725 most platforms @code{&a[-1] < &a[0] && &a[N] < &a[N+1]}, but this is not
21726 reliable in general, and it is usually easy enough to avoid the
21727 potential portability problem, e.g., by allocating an extra unused array
21728 element at the start or end.
21730 @uref{https://@/www.valgrind.org/, Valgrind} can catch many overruns.
21731 GCC users might also consider using the @option{-fsanitize=} options
21732 to catch overruns.
21733 @xref{Instrumentation Options, , Program Instrumentation Options,
21734       gcc, Using the GNU Compiler Collection (GCC)}.
21736 Buffer overruns are usually caused by off-by-one errors, but there are
21737 more subtle ways to get them.
21739 Using @code{int} values to index into an array or compute array sizes
21740 causes problems on typical 64-bit hosts where an array index might
21741 be @math{2^{31}} or larger.  Index values of type @code{size_t} avoid this
21742 problem, but cannot be negative.  Index values of type @code{ptrdiff_t}
21743 are signed, and are wide enough in practice.
21745 If you add or multiply two numbers to calculate an array size, e.g.,
21746 @code{malloc (x * sizeof y + z)}, havoc ensues if the addition or
21747 multiplication overflows.
21749 Many implementations of the @code{alloca} function silently misbehave
21750 and can generate buffer overflows if given sizes that are too large.
21751 The size limits are implementation dependent, but are at least 4000
21752 bytes on all platforms that we know about.
21754 The standard functions @code{asctime}, @code{asctime_r}, @code{ctime},
21755 @code{ctime_r}, and @code{gets} are prone to buffer overflows, and
21756 portable code should not use them unless the inputs are known to be
21757 within certain limits.  The time-related functions can overflow their
21758 buffers if given timestamps out of range (e.g., a year less than -999
21759 or greater than 9999).  Time-related buffer overflows cannot happen with
21760 recent-enough versions of the GNU C library, but are possible
21761 with other
21762 implementations.  The @code{gets} function is the worst, since it almost
21763 invariably overflows its buffer when presented with an input line larger
21764 than the buffer.
21766 @node Volatile Objects
21767 @section Volatile Objects
21768 @cindex volatile objects
21770 The keyword @code{volatile} is often misunderstood in portable code.
21771 Its use inhibits some memory-access optimizations, but programmers often
21772 wish that it had a different meaning than it actually does.
21774 @code{volatile} was designed for code that accesses special objects like
21775 memory-mapped device registers whose contents spontaneously change.
21776 Such code is inherently low-level, and it is difficult to specify
21777 portably what @code{volatile} means in these cases.  The C standard
21778 says, ``What constitutes an access to an object that has
21779 volatile-qualified type is implementation-defined,'' so in theory each
21780 implementation is supposed to fill in the gap by documenting what
21781 @code{volatile} means for that implementation.  In practice, though,
21782 this documentation is usually absent or incomplete.
21784 One area of confusion is the distinction between objects defined with
21785 volatile types, and volatile lvalues.  From the C standard's point of
21786 view, an object defined with a volatile type has externally visible
21787 behavior.  You can think of such objects as having little oscilloscope
21788 probes attached to them, so that the user can observe some properties of
21789 accesses to them, just as the user can observe data written to output
21790 files.  However, the standard does not make it clear whether users can
21791 observe accesses by volatile lvalues to ordinary objects.  For example:
21793 @example
21794 /* Declare and access a volatile object.
21795    Accesses to X are "visible" to users.  */
21796 static int volatile x;
21797 x = 1;
21799 /* Access two ordinary objects via a volatile lvalue.
21800    It's not clear whether accesses to *P are "visible".  */
21801 int y;
21802 int *z = malloc (sizeof (int));
21803 int volatile *p;
21804 p = &y;
21805 *p = 1;
21806 p = z;
21807 *p = 1;
21808 @end example
21810 Programmers often wish that @code{volatile} meant ``Perform the memory
21811 access here and now, without merging several memory accesses, without
21812 changing the memory word size, and without reordering.''  But the C
21813 standard does not require this.  For objects defined with a volatile
21814 type, accesses must be done before the next sequence point; but
21815 otherwise merging, reordering, and word-size change is allowed.  Worse,
21816 it is not clear from the standard whether volatile lvalues provide more
21817 guarantees in general than nonvolatile lvalues, if the underlying
21818 objects are ordinary.
21820 Even when accessing objects defined with a volatile type,
21821 the C standard allows only
21822 extremely limited signal handlers: in C99 the behavior is undefined if a signal
21823 handler reads any non-local object, or writes to any non-local object
21824 whose type is not @code{sig_atomic_t volatile}, or calls any standard
21825 library function other than @code{abort}, @code{signal}, and
21826 @code{_Exit}.  Hence C compilers need not worry about a signal handler
21827 disturbing ordinary computation.  C11 and Posix allow some additional
21828 behavior in a portable signal handler, but are still quite restrictive.
21830 Some C implementations allow memory-access optimizations within each
21831 translation unit, such that actual behavior agrees with the behavior
21832 required by the standard only when calling a function in some other
21833 translation unit, and a signal handler acts like it was called from a
21834 different translation unit.  The C99 standard hints that in these
21835 implementations, objects referred to by signal handlers ``would require
21836 explicit specification of @code{volatile} storage, as well as other
21837 implementation-defined restrictions.''  But unfortunately even for this
21838 special case these other restrictions are often not documented well.
21839 This area was significantly changed in C11, and eventually implementations
21840 will probably head in the C11 direction, but this will take some time.
21841 @xref{Volatiles, , When is a Volatile Object Accessed?, gcc, Using the
21842 GNU Compiler Collection (GCC)}, for some
21843 restrictions imposed by GCC.  @xref{Defining Handlers, ,
21844 Defining Signal Handlers, libc, The GNU C Library}, for some
21845 restrictions imposed by the GNU C library.  Restrictions
21846 differ on other platforms.
21848 If possible, it is best to use a signal handler that fits within the
21849 limits imposed by the C and Posix standards.
21851 If this is not practical, you can try the following rules of thumb.  A
21852 signal handler should access only volatile lvalues, preferably lvalues
21853 that refer to objects defined with a volatile type, and should not
21854 assume that the accessed objects have an internally consistent state
21855 if they are larger than a machine word.  Furthermore, installers
21856 should employ compilers and compiler options that are commonly used
21857 for building operating system kernels, because kernels often need more
21858 from @code{volatile} than the C Standard requires, and installers who
21859 compile an application in a similar environment can sometimes benefit
21860 from the extra constraints imposed by kernels on compilers.
21861 Admittedly we are hand-waving somewhat here, as there are few
21862 guarantees in this area; the rules of thumb may help to fix some bugs
21863 but there is a good chance that they will not fix them all.
21865 For @code{volatile}, C++ has the same problems that C does.
21866 Multithreaded applications have even more problems with @code{volatile},
21867 but they are beyond the scope of this section.
21869 The bottom line is that using @code{volatile} typically hurts
21870 performance but should not hurt correctness.  In some cases its use
21871 does help correctness, but these cases are often so poorly understood
21872 that all too often adding @code{volatile} to a data structure merely
21873 alleviates some symptoms of a bug while not fixing the bug in general.
21875 @node Floating Point Portability
21876 @section Floating Point Portability
21877 @cindex floating point
21879 Almost all modern systems use IEEE-754 floating point, and it is safe to
21880 assume IEEE-754 in most portable code these days.  For more information,
21881 please see David Goldberg's classic paper
21882 @uref{http://@/www.validlab.com/@/goldberg/@/paper.pdf, What Every Computer
21883 Scientist Should Know About Floating-Point Arithmetic}.
21885 @node Exiting Portably
21886 @section Exiting Portably
21887 @cindex exiting portably
21889 A C or C++ program can exit with status @var{N} by returning
21890 @var{N} from the @code{main} function.  Portable programs are supposed
21891 to exit either with status 0 or @code{EXIT_SUCCESS} to succeed, or with
21892 status @code{EXIT_FAILURE} to fail, but in practice it is portable to
21893 fail by exiting with status 1, and test programs that assume Posix can
21894 fail by exiting with status values from 1 through 255.  Programs on
21895 SunOS 2.0 (1985) through 3.5.2 (1988) incorrectly exited with zero
21896 status when @code{main} returned nonzero, but ancient systems like these
21897 are no longer of practical concern.
21899 A program can also exit with status @var{N} by passing @var{N} to the
21900 @code{exit} function, and a program can fail by calling the @code{abort}
21901 function.  If a program is specialized to just some platforms, it can fail
21902 by calling functions specific to those platforms, e.g., @code{_exit}
21903 (Posix).  However, like other functions, an exit
21904 function should be declared, typically by including a header.  For
21905 example, if a C program calls @code{exit}, it should include @file{stdlib.h}
21906 either directly or via the default includes (@pxref{Default Includes}).
21908 A program can fail due to undefined behavior such as dereferencing a null
21909 pointer, but this is not recommended as undefined behavior allows an
21910 implementation to do whatever it pleases and this includes exiting
21911 successfully.
21914 @c ================================================== Manual Configuration
21916 @node Manual Configuration
21917 @chapter Manual Configuration
21919 A few kinds of features can't be guessed automatically by running test
21920 programs.  For example, the details of the object-file format, or
21921 special options that need to be passed to the compiler or linker.  You
21922 can check for such features using ad-hoc means, such as having
21923 @command{configure} check the output of the @code{uname} program, or
21924 looking for libraries that are unique to particular systems.  However,
21925 Autoconf provides a uniform method for handling unguessable features.
21927 @menu
21928 * Specifying Target Triplets::  Specifying target triplets
21929 * Canonicalizing::              Getting the canonical system type
21930 * Using System Type::           What to do with the system type
21931 @end menu
21933 @node Specifying Target Triplets
21934 @section Specifying target triplets
21935 @cindex System type
21936 @cindex Target triplet
21937 @c This node used to be named Specifying Names.  The @anchor allows old
21938 @c links to still work.
21939 @anchor{Specifying Names}
21941 Autoconf-generated
21942 @command{configure} scripts can make decisions based on a canonical name
21943 for the system type, or @dfn{target triplet}, which has the form:
21944 @samp{@var{cpu}-@var{vendor}-@var{os}}, where @var{os} can be
21945 @samp{@var{system}} or @samp{@var{kernel}-@var{system}}
21947 @command{configure} can usually guess the canonical name for the type of
21948 system it's running on.  To do so it runs a script called
21949 @command{config.guess}, which infers the name using the @code{uname}
21950 command or symbols predefined by the C preprocessor.
21952 Alternately, the user can specify the system type with command line
21953 arguments to @command{configure} (@pxref{System Type}.  Doing so is
21954 necessary when
21955 cross-compiling.  In the most complex case of cross-compiling, three
21956 system types are involved.  The options to specify them are:
21958 @table @option
21959 @item --build=@var{build-type}
21960 the type of system on which the package is being configured and
21961 compiled.  It defaults to the result of running @command{config.guess}.
21962 Specifying a @var{build-type} that differs from @var{host-type} enables
21963 cross-compilation mode.
21965 @item --host=@var{host-type}
21966 the type of system on which the package runs.  By default it is the
21967 same as the build machine.  The tools that get used to build and
21968 manipulate binaries will, by default, all be prefixed with
21969 @code{@var{host-type}-}, such as @code{@var{host-type}-gcc},
21970 @code{@var{host-type}-g++}, @code{@var{host-type}-ar}, and
21971 @code{@var{host-type}-nm}.  If the binaries produced by these tools can
21972 be executed by the build system, the configure script will make use of
21973 it in @code{AC_RUN_IFELSE} invocations; otherwise, cross-compilation
21974 mode is enabled.  Specifying a @var{host-type} that differs
21975 from @var{build-type}, when @var{build-type} was also explicitly
21976 specified, equally enables cross-compilation mode.
21978 @item --target=@var{target-type}
21979 the type of system for which any compiler tools in the package
21980 produce code (rarely needed).  By default, it is the same as host.
21981 @end table
21983 If you mean to override the result of @command{config.guess} but
21984 still produce binaries for the build machine, use @option{--build},
21985 not @option{--host}.
21987 So, for example, to produce binaries for 64-bit MinGW, use a command
21988 like this:
21990 @example
21991 ./configure --host=x86_64-w64-mingw64
21992 @end example
21994 If your system has the ability to execute MinGW binaries but you don't
21995 want to make use of this feature and instead prefer cross-compilation
21996 guesses, use a command like this:
21998 @example
21999 ./configure --build=x86_64-pc-linux-gnu --host=x86_64-w64-mingw64
22000 @end example
22002 @noindent
22003 Note that if you do not specify @option{--host}, @command{configure}
22004 fails if it can't run the code generated by the specified compiler.  For
22005 example, configuring as follows fails:
22007 @example
22008 ./configure CC=x86_64-w64-mingw64-gcc
22009 @end example
22011 When cross-compiling, @command{configure} will warn about any tools
22012 (compilers, linkers, assemblers) whose name is not prefixed with the
22013 host type.  This is an aid to users performing cross-compilation.
22014 Continuing the example above, if a cross-compiler named @command{cc} is
22015 used with a native @command{pkg-config}, then libraries found by
22016 @command{pkg-config} will likely cause subtle build failures; but using
22017 the names @command{x86_64-w64-mingw64-gcc} and
22018 @command{x86_64-w64-mingw64-pkg-config}
22019 avoids any confusion.  Avoiding the warning is as simple as creating the
22020 correct symlinks naming the cross tools.
22022 @cindex @command{config.sub}
22023 @command{configure} recognizes short aliases for many system types; for
22024 example, @samp{decstation} can be used instead of
22025 @samp{mips-dec-ultrix4.2}.  @command{configure} runs a script called
22026 @command{config.sub} to canonicalize system type aliases.
22028 This section deliberately omits the description of the obsolete
22029 interface; see @ref{Hosts and Cross-Compilation}.
22032 @node Canonicalizing
22033 @section Getting the Canonical System Type
22034 @cindex System type
22035 @cindex Canonical system type
22037 The following macros make the system type available to @command{configure}
22038 scripts.
22040 @ovindex build_alias
22041 @ovindex host_alias
22042 @ovindex target_alias
22044 The variables @samp{build_alias}, @samp{host_alias}, and
22045 @samp{target_alias} are always exactly the arguments of @option{--build},
22046 @option{--host}, and @option{--target}; in particular, they are left empty
22047 if the user did not use them, even if the corresponding
22048 @code{AC_CANONICAL} macro was run.  Any configure script may use these
22049 variables anywhere.  These are the variables that should be used when in
22050 interaction with the user.
22052 If you need to recognize some special environments based on their system
22053 type, run the following macros to get canonical system names.  These
22054 variables are not set before the macro call.
22056 If you use these macros, you must distribute @command{config.guess} and
22057 @command{config.sub} along with your source code.  @xref{Output}, for
22058 information about the @code{AC_CONFIG_AUX_DIR} macro which you can use
22059 to control in which directory @command{configure} looks for those scripts.
22062 @defmac AC_CANONICAL_BUILD
22063 @acindex{CANONICAL_BUILD}
22064 @ovindex build
22065 @ovindex build_cpu
22066 @ovindex build_vendor
22067 @ovindex build_os
22068 Compute the canonical build-system type variable, @code{build}, and its
22069 three individual parts @code{build_cpu}, @code{build_vendor}, and
22070 @code{build_os}.
22072 If @option{--build} was specified, then @code{build} is the
22073 canonicalization of @code{build_alias} by @command{config.sub},
22074 otherwise it is determined by the shell script @command{config.guess}.
22075 @end defmac
22077 @defmac AC_CANONICAL_HOST
22078 @acindex{CANONICAL_HOST}
22079 @ovindex host
22080 @ovindex host_cpu
22081 @ovindex host_vendor
22082 @ovindex host_os
22083 Compute the canonical host-system type variable, @code{host}, and its
22084 three individual parts @code{host_cpu}, @code{host_vendor}, and
22085 @code{host_os}.
22087 If @option{--host} was specified, then @code{host} is the
22088 canonicalization of @code{host_alias} by @command{config.sub},
22089 otherwise it defaults to @code{build}.
22090 @end defmac
22092 @defmac AC_CANONICAL_TARGET
22093 @acindex{CANONICAL_TARGET}
22094 @ovindex target
22095 @ovindex target_cpu
22096 @ovindex target_vendor
22097 @ovindex target_os
22098 Compute the canonical target-system type variable, @code{target}, and its
22099 three individual parts @code{target_cpu}, @code{target_vendor}, and
22100 @code{target_os}.
22102 If @option{--target} was specified, then @code{target} is the
22103 canonicalization of @code{target_alias} by @command{config.sub},
22104 otherwise it defaults to @code{host}.
22105 @end defmac
22107 Note that there can be artifacts due to the backward compatibility
22108 code.  @xref{Hosts and Cross-Compilation}, for more.
22110 @node Using System Type
22111 @section Using the System Type
22113 In @file{configure.ac} the system type is generally used by one or more
22114 @code{case} statements to select system-specifics.  Shell wildcards can
22115 be used to match a group of system types.
22117 For example, an extra assembler code object file could be chosen, giving
22118 access to a CPU cycle counter register.  @code{$(CYCLE_OBJ)} in the
22119 following would be used in a makefile to add the object to a
22120 program or library.
22122 @example
22123 AS_CASE([$host],
22124   [alpha*-*-*], [CYCLE_OBJ=rpcc.o],
22125   [i?86-*-*],   [CYCLE_OBJ=rdtsc.o],
22126   [CYCLE_OBJ=""]
22128 AC_SUBST([CYCLE_OBJ])
22129 @end example
22131 @code{AC_CONFIG_LINKS} (@pxref{Configuration Links}) is another good way
22132 to select variant source files, for example optimized code for some
22133 CPUs.  The configured CPU type doesn't always indicate exact CPU types,
22134 so some runtime capability checks may be necessary too.
22136 @example
22137 case $host in
22138   alpha*-*-*)   AC_CONFIG_LINKS([dither.c:alpha/dither.c]) ;;
22139   powerpc*-*-*) AC_CONFIG_LINKS([dither.c:powerpc/dither.c]) ;;
22140   *-*-*)        AC_CONFIG_LINKS([dither.c:generic/dither.c]) ;;
22141 esac
22142 @end example
22144 The host system type can also be used to find cross-compilation tools
22145 with @code{AC_CHECK_TOOL} (@pxref{Generic Programs}).
22147 The above examples all show @samp{$host}, since this is where the code
22148 is going to run.  Only rarely is it necessary to test @samp{$build}
22149 (which is where the build is being done).
22151 Whenever you're tempted to use @samp{$host} it's worth considering
22152 whether some sort of probe would be better.  New system types come along
22153 periodically or previously missing features are added.  Well-written
22154 probes can adapt themselves to such things, but hard-coded lists of
22155 names can't.  Here are some guidelines,
22157 @itemize @bullet
22158 @item
22159 Availability of libraries and library functions should always be checked
22160 by probing.
22161 @item
22162 Variant behavior of system calls is best identified with runtime tests
22163 if possible, but bug workarounds or obscure difficulties might have to
22164 be driven from @samp{$host}.
22165 @item
22166 Assembler code is inevitably highly CPU-specific and is best selected
22167 according to @samp{$host_cpu}.
22168 @item
22169 Assembler variations like underscore prefix on globals or ELF versus
22170 COFF type directives are however best determined by probing, perhaps
22171 even examining the compiler output.
22172 @end itemize
22174 @samp{$target} is for use by a package creating a compiler or similar.
22175 For ordinary packages it's meaningless and should not be used.  It
22176 indicates what the created compiler should generate code for, if it can
22177 cross-compile.  @samp{$target} generally selects various hard-coded CPU
22178 and system conventions, since usually the compiler or tools under
22179 construction themselves determine how the target works.
22182 @c ===================================================== Site Configuration.
22184 @node Site Configuration
22185 @chapter Site Configuration
22187 @command{configure} scripts support several kinds of local configuration
22188 decisions.  There are ways for users to specify where external software
22189 packages are, include or exclude optional features, install programs
22190 under modified names, and set default values for @command{configure}
22191 options.
22193 @menu
22194 * Help Formatting::             Customizing @samp{configure --help}
22195 * External Software::           Working with other optional software
22196 * Package Options::             Selecting optional features
22197 * Pretty Help Strings::         Formatting help string
22198 * Option Checking::             Controlling checking of @command{configure} options
22199 * Site Details::                Configuring site details
22200 * Transforming Names::          Changing program names when installing
22201 * Site Defaults::               Giving @command{configure} local defaults
22202 @end menu
22204 @node Help Formatting
22205 @section Controlling Help Output
22207 Users consult @samp{configure --help} to learn of configuration
22208 decisions specific to your package.  By default, @command{configure}
22209 breaks this output into sections for each type of option; within each
22210 section, help strings appear in the order @file{configure.ac} defines
22211 them:
22213 @example
22214 Optional Features:
22215   @dots{}
22216   --enable-bar            include bar
22218 Optional Packages:
22219   @dots{}
22220   --with-foo              use foo
22221 @end example
22223 @defmac AC_PRESERVE_HELP_ORDER
22224 @acindex{PRESERVE_HELP_ORDER}
22226 Request an alternate @option{--help} format, in which options of all
22227 types appear together, in the order defined.  Call this macro before any
22228 @code{AC_ARG_ENABLE} or @code{AC_ARG_WITH}.
22230 @example
22231 Optional Features and Packages:
22232   @dots{}
22233   --enable-bar            include bar
22234   --with-foo              use foo
22235 @end example
22237 @end defmac
22239 @node External Software
22240 @section Working With External Software
22241 @cindex External software
22243 Some packages require, or can optionally use, other software packages
22244 that are already installed.  The user can give @command{configure}
22245 command line options to specify which such external software to use.
22246 The options have one of these forms:
22248 @c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
22249 @c awful.
22250 @example
22251 --with-@var{package}@r{[}=@var{arg}@r{]}
22252 --without-@var{package}
22253 @end example
22255 For example, @option{--with-gnu-ld} means work with the GNU linker
22256 instead of some other linker.  @option{--with-x} means work with The X
22257 Window System.
22259 The user can give an argument by following the package name with
22260 @samp{=} and the argument.  Giving an argument of @samp{no} is for
22261 packages that are used by default; it says to @emph{not} use the
22262 package.  An argument that is neither @samp{yes} nor @samp{no} could
22263 include a name or number of a version of the other package, to specify
22264 more precisely which other package this program is supposed to work
22265 with.  If no argument is given, it defaults to @samp{yes}.
22266 @option{--without-@var{package}} is equivalent to
22267 @option{--with-@var{package}=no}.
22269 Normally @command{configure} scripts complain about
22270 @option{--with-@var{package}} options that they do not support.
22271 @xref{Option Checking}, for details, and for how to override the
22272 defaults.
22274 For each external software package that may be used, @file{configure.ac}
22275 should call @code{AC_ARG_WITH} to detect whether the @command{configure}
22276 user asked to use it.  Whether each package is used or not by default,
22277 and which arguments are valid, is up to you.
22279 @anchor{AC_ARG_WITH}
22280 @defmac AC_ARG_WITH (@var{package}, @var{help-string}, @
22281   @ovar{action-if-given}, @ovar{action-if-not-given})
22282 @acindex{ARG_WITH}
22283 If the user gave @command{configure} the option @option{--with-@var{package}}
22284 or @option{--without-@var{package}}, run shell commands
22285 @var{action-if-given}.  If neither option was given, run shell commands
22286 @var{action-if-not-given}.  The name @var{package} indicates another
22287 software package that this program should work with.  It should consist
22288 only of alphanumeric characters, dashes, plus signs, and dots.
22290 The option's argument is available to the shell commands
22291 @var{action-if-given} in the shell variable @code{withval}, which is
22292 actually just the value of the shell variable named
22293 @code{with_@var{package}}, with any non-alphanumeric characters in
22294 @var{package} changed into @samp{_}.  You may use that variable instead,
22295 if you wish.
22297 Note that @var{action-if-not-given} is not expanded until the point that
22298 @code{AC_ARG_WITH} was expanded.  If you need the value of
22299 @code{with_@var{package}} set to a default value by the time argument
22300 parsing is completed, use @code{m4_divert_text} to the @code{DEFAULTS}
22301 diversion (@pxref{m4_divert_text}) (if done as an argument to
22302 @code{AC_ARG_WITH}, also provide non-diverted text to avoid a shell
22303 syntax error).
22305 The argument @var{help-string} is a description of the option that
22306 looks like this:
22307 @example
22308   --with-readline         support fancy command line editing
22309 @end example
22311 @noindent
22312 @var{help-string} may be more than one line long, if more detail is
22313 needed.  Just make sure the columns line up in @samp{configure
22314 --help}.  Avoid tabs in the help string.  The easiest way to provide the
22315 proper leading whitespace is to format your @var{help-string} with the macro
22316 @code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
22318 The following example shows how to use the @code{AC_ARG_WITH} macro in
22319 a common situation.  You want to let the user decide whether to enable
22320 support for an external library (e.g., the readline library); if the user
22321 specified neither @option{--with-readline} nor @option{--without-readline},
22322 you want to enable support for readline only if the library is available
22323 on the system.
22325 @c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
22326 @example
22327 AC_ARG_WITH([readline],
22328   [AS_HELP_STRING([--with-readline],
22329     [support fancy command line editing @@<:@@default=check@@:>@@])],
22330   [],
22331   [: m4_divert_text([DEFAULTS], [with_readline=check])])
22333 LIBREADLINE=
22334 AS_IF([test "x$with_readline" != xno],
22335   [AC_CHECK_LIB([readline], [main],
22336     [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
22337      AC_DEFINE([HAVE_LIBREADLINE], [1],
22338                [Define if you have libreadline])
22339     ],
22340     [if test "x$with_readline" != xcheck; then
22341        AC_MSG_FAILURE(
22342          [--with-readline was given, but test for readline failed])
22343      fi
22344     ], -lncurses)])
22345 @end example
22347 The next example shows how to use @code{AC_ARG_WITH} to give the user the
22348 possibility to enable support for the readline library, in case it is still
22349 experimental and not well tested, and is therefore disabled by default.
22351 @c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
22352 @example
22353 AC_ARG_WITH([readline],
22354   [AS_HELP_STRING([--with-readline],
22355     [enable experimental support for readline])],
22356   [],
22357   [with_readline=no])
22359 LIBREADLINE=
22360 AS_IF([test "x$with_readline" != xno],
22361   [AC_CHECK_LIB([readline], [main],
22362     [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
22363      AC_DEFINE([HAVE_LIBREADLINE], [1],
22364                [Define if you have libreadline])
22365     ],
22366     [AC_MSG_FAILURE(
22367        [--with-readline was given, but test for readline failed])],
22368     [-lncurses])])
22369 @end example
22371 The last example shows how to use @code{AC_ARG_WITH} to give the user the
22372 possibility to disable support for the readline library, given that it is
22373 an important feature and that it should be enabled by default.
22375 @c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
22376 @example
22377 AC_ARG_WITH([readline],
22378   [AS_HELP_STRING([--without-readline],
22379     [disable support for readline])],
22380   [],
22381   [with_readline=yes])
22383 LIBREADLINE=
22384 AS_IF([test "x$with_readline" != xno],
22385   [AC_CHECK_LIB([readline], [main],
22386     [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
22387      AC_DEFINE([HAVE_LIBREADLINE], [1],
22388                [Define if you have libreadline])
22389     ],
22390     [AC_MSG_FAILURE(
22391        [readline test failed (--without-readline to disable)])],
22392     [-lncurses])])
22393 @end example
22395 These three examples can be easily adapted to the case where
22396 @code{AC_ARG_ENABLE} should be preferred to @code{AC_ARG_WITH} (see
22397 @ref{Package Options}).
22398 @end defmac
22400 @node Package Options
22401 @section Choosing Package Options
22402 @cindex Package options
22403 @cindex Options, package
22405 If a software package has optional compile-time features, the user can
22406 give @command{configure} command line options to specify whether to
22407 compile them.  The options have one of these forms:
22409 @c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
22410 @c awful.
22411 @example
22412 --enable-@var{feature}@r{[}=@var{arg}@r{]}
22413 --disable-@var{feature}
22414 @end example
22416 These options allow users to choose which optional features to build and
22417 install.  @option{--enable-@var{feature}} options should never make a
22418 feature behave differently or cause one feature to replace another.
22419 They should only cause parts of the program to be built rather than left
22420 out.
22422 The user can give an argument by following the feature name with
22423 @samp{=} and the argument.  Giving an argument of @samp{no} requests
22424 that the feature @emph{not} be made available.  A feature with an
22425 argument looks like @option{--enable-debug=stabs}.  If no argument is
22426 given, it defaults to @samp{yes}.  @option{--disable-@var{feature}} is
22427 equivalent to @option{--enable-@var{feature}=no}.
22429 Normally @command{configure} scripts complain about
22430 @option{--enable-@var{package}} options that they do not support.
22431 @xref{Option Checking}, for details, and for how to override the
22432 defaults.
22434 For each optional feature, @file{configure.ac} should call
22435 @code{AC_ARG_ENABLE} to detect whether the @command{configure} user asked
22436 to include it.  Whether each feature is included or not by default, and
22437 which arguments are valid, is up to you.
22439 @anchor{AC_ARG_ENABLE}
22440 @defmac AC_ARG_ENABLE (@var{feature}, @var{help-string}, @
22441   @ovar{action-if-given}, @ovar{action-if-not-given})
22442 @acindex{ARG_ENABLE}
22443 If the user gave @command{configure} the option
22444 @option{--enable-@var{feature}} or @option{--disable-@var{feature}}, run
22445 shell commands @var{action-if-given}.  If neither option was given, run
22446 shell commands @var{action-if-not-given}.  The name @var{feature}
22447 indicates an optional user-level facility.  It should consist only of
22448 alphanumeric characters, dashes, plus signs, and dots.
22450 The option's argument is available to the shell commands
22451 @var{action-if-given} in the shell variable @code{enableval}, which is
22452 actually just the value of the shell variable named
22453 @code{enable_@var{feature}}, with any non-alphanumeric characters in
22454 @var{feature} changed into @samp{_}.  You may use that variable instead,
22455 if you wish.  The @var{help-string} argument is like that of
22456 @code{AC_ARG_WITH} (@pxref{External Software}).
22458 Note that @var{action-if-not-given} is not expanded until the point that
22459 @code{AC_ARG_ENABLE} was expanded.  If you need the value of
22460 @code{enable_@var{feature}} set to a default value by the time argument
22461 parsing is completed, use @code{m4_divert_text} to the @code{DEFAULTS}
22462 diversion (@pxref{m4_divert_text}) (if done as an argument to
22463 @code{AC_ARG_ENABLE}, also provide non-diverted text to avoid a shell
22464 syntax error).
22466 You should format your @var{help-string} with the macro
22467 @code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
22469 See the examples suggested with the definition of @code{AC_ARG_WITH}
22470 (@pxref{External Software}) to get an idea of possible applications of
22471 @code{AC_ARG_ENABLE}.
22472 @end defmac
22474 @node Pretty Help Strings
22475 @section Making Your Help Strings Look Pretty
22476 @cindex Help strings
22478 Properly formatting the @samp{help strings} which are used in
22479 @code{AC_ARG_WITH} (@pxref{External Software}) and @code{AC_ARG_ENABLE}
22480 (@pxref{Package Options}) can be challenging.  Specifically, you want
22481 your own @samp{help strings} to line up in the appropriate columns of
22482 @samp{configure --help} just like the standard Autoconf @samp{help
22483 strings} do.  This is the purpose of the @code{AS_HELP_STRING} macro.
22485 @anchor{AS_HELP_STRING}
22486 @defmac AS_HELP_STRING (@var{left-hand-side}, @var{right-hand-side} @
22487   @dvar{indent-column, 26}, @dvar{wrap-column, 79})
22488 @asindex{HELP_STRING}
22490 Expands into a help string that looks pretty when the user executes
22491 @samp{configure --help}.  It is typically used in @code{AC_ARG_WITH}
22492 (@pxref{External Software}) or @code{AC_ARG_ENABLE} (@pxref{Package
22493 Options}).  The following example makes this clearer.
22495 @example
22496 AC_ARG_WITH([foo],
22497   [AS_HELP_STRING([--with-foo],
22498      [use foo (default is no)])],
22499   [use_foo=$withval],
22500   [use_foo=no])
22501 @end example
22503 Then the last few lines of @samp{configure --help} appear like
22504 this:
22506 @example
22507 --enable and --with options recognized:
22508   --with-foo              use foo (default is no)
22509 @end example
22511 Macro expansion is performed on the first argument.  However, the second
22512 argument of @code{AS_HELP_STRING} is treated as a whitespace separated
22513 list of text to be reformatted, and is not subject to macro expansion.
22514 Since it is not expanded, it should not be double quoted.
22515 @xref{Autoconf Language}, for a more detailed explanation.
22517 The @code{AS_HELP_STRING} macro is particularly helpful when the
22518 @var{left-hand-side} and/or @var{right-hand-side} are composed of macro
22519 arguments, as shown in the following example.  Be aware that
22520 @var{left-hand-side} may not expand to unbalanced quotes,
22521 although quadrigraphs can be used.
22523 @example
22524 AC_DEFUN([MY_ARG_WITH],
22525   [AC_ARG_WITH(m4_translit([[$1]], [_], [-]),
22526      [AS_HELP_STRING([--with-m4_translit([$1], [_], [-])],
22527                      [use $1 (default is $2)])],
22528      [use_[]$1=$withval],
22529      [use_[]$1=$2])])
22530 MY_ARG_WITH([a_b], [no])
22531 @end example
22532 @noindent
22533 Here, the last few lines of @samp{configure --help} will include:
22535 @example
22536 --enable and --with options recognized:
22537   --with-a-b              use a_b (default is no)
22538 @end example
22540 The parameters @var{indent-column} and @var{wrap-column} were introduced
22541 in Autoconf 2.62.  Generally, they should not be specified; they exist
22542 for fine-tuning of the wrapping.
22543 @example
22544 AS_HELP_STRING([--option], [description of option])
22545 @result{}  --option                description of option
22546 AS_HELP_STRING([--option], [description of option], [15], [30])
22547 @result{}  --option     description of
22548 @result{}               option
22549 @end example
22550 @end defmac
22553 @node Option Checking
22554 @section Controlling Checking of @command{configure} Options
22555 @cindex Options, Package
22557 The @command{configure} script checks its command-line options against a
22558 list of known options, like @option{--help} or @option{--config-cache}.
22559 An unknown option ordinarily indicates a mistake by the user and
22560 @command{configure} halts with an error.  However, by default unknown
22561 @option{--with-@var{package}} and @option{--enable-@var{feature}}
22562 options elicit only a warning, to support configuring entire source
22563 trees.
22565 Source trees often contain multiple packages with a top-level
22566 @command{configure} script that uses the @code{AC_CONFIG_SUBDIRS} macro
22567 (@pxref{Subdirectories}).  Because the packages generally support
22568 different @option{--with-@var{package}} and
22569 @option{--enable-@var{feature}} options, the GNU Coding
22570 Standards say they must accept unrecognized options without halting.
22571 Even a warning message is undesirable here, so @code{AC_CONFIG_SUBDIRS}
22572 automatically disables the warnings.
22574 This default behavior may be modified in two ways.  First, the installer
22575 can invoke @code{configure --disable-option-checking} to disable
22576 these warnings, or invoke @code{configure --enable-option-checking=fatal}
22577 options to turn them into fatal errors, respectively.  Second, the
22578 maintainer can use @code{AC_DISABLE_OPTION_CHECKING}.
22580 @defmac AC_DISABLE_OPTION_CHECKING
22581 @acindex{DISABLE_OPTION_CHECKING}
22583 By default, disable warnings related to any unrecognized
22584 @option{--with-@var{package}} or @option{--enable-@var{feature}}
22585 options.  This is implied by @code{AC_CONFIG_SUBDIRS}.
22587 The installer can override this behavior by passing
22588 @option{--enable-option-checking} (enable warnings) or
22589 @option{--enable-option-checking=fatal} (enable errors) to
22590 @command{configure}.
22591 @end defmac
22594 @node Site Details
22595 @section Configuring Site Details
22596 @cindex Site details
22598 Some software packages require complex site-specific information.  Some
22599 examples are host names to use for certain services, company names, and
22600 email addresses to contact.  Since some configuration scripts generated
22601 by Metaconfig ask for such information interactively, people sometimes
22602 wonder how to get that information in Autoconf-generated configuration
22603 scripts, which aren't interactive.
22605 Such site configuration information should be put in a file that is
22606 edited @emph{only by users}, not by programs.  The location of the file
22607 can either be based on the @code{prefix} variable, or be a standard
22608 location such as the user's home directory.  It could even be specified
22609 by an environment variable.  The programs should examine that file at
22610 runtime, rather than at compile time.  Runtime configuration is more
22611 convenient for users and makes the configuration process simpler than
22612 getting the information while configuring.  @xref{Directory Variables, ,
22613 Variables for Installation Directories, standards, The GNU Coding
22614 Standards}, for more information on where to put data files.
22616 @node Transforming Names
22617 @section Transforming Program Names When Installing
22618 @cindex Transforming program names
22619 @cindex Program names, transforming
22621 Autoconf supports changing the names of programs when installing them.
22622 In order to use these transformations, @file{configure.ac} must call the
22623 macro @code{AC_ARG_PROGRAM}.
22625 @defmac AC_ARG_PROGRAM
22626 @acindex{ARG_PROGRAM}
22627 @ovindex program_transform_name
22628 Place in output variable @code{program_transform_name} a sequence of
22629 @code{sed} commands for changing the names of installed programs.
22631 If any of the options described below are given to @command{configure},
22632 program names are transformed accordingly.  Otherwise, if
22633 @code{AC_CANONICAL_TARGET} has been called and a @option{--target} value
22634 is given, the target type followed by a dash is used as a prefix.
22635 Otherwise, no program name transformation is done.
22636 @end defmac
22638 @menu
22639 * Transformation Options::      @command{configure} options to transform names
22640 * Transformation Examples::     Sample uses of transforming names
22641 * Transformation Rules::        Makefile uses of transforming names
22642 @end menu
22644 @node Transformation Options
22645 @subsection Transformation Options
22647 You can specify name transformations by giving @command{configure} these
22648 command line options:
22650 @table @option
22651 @item --program-prefix=@var{prefix}
22652 prepend @var{prefix} to the names;
22654 @item --program-suffix=@var{suffix}
22655 append @var{suffix} to the names;
22657 @item --program-transform-name=@var{expression}
22658 perform @code{sed} substitution @var{expression} on the names.
22659 @end table
22661 @node Transformation Examples
22662 @subsection Transformation Examples
22664 These transformations are useful with programs that can be part of a
22665 cross-compilation development environment.  For example, a
22666 cross-assembler running on x86-64 configured with
22667 @option{--target=aarch64-linux-gnu} is normally installed as
22668 @file{aarch64-linux-gnu-as}, rather than @file{as}, which could be confused
22669 with a native x86-64 assembler.
22671 You can force a program name to begin with @file{g}, if you don't want
22672 GNU programs installed on your system to shadow other programs with
22673 the same name.  For example, if you configure GNU @code{diff} with
22674 @option{--program-prefix=g}, then when you run @samp{make install} it is
22675 installed as @file{/usr/local/bin/gdiff}.
22677 As a more sophisticated example, you could use
22679 @example
22680 --program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
22681 @end example
22682 @noindent
22684 to prepend @samp{g} to most of the program names in a source tree,
22685 excepting those like @code{gdb} that already have one and those like
22686 @code{less} and @code{lesskey} that aren't GNU programs.  (That is
22687 assuming that you have a source tree containing those programs that is
22688 set up to use this feature.)
22690 One way to install multiple versions of some programs simultaneously is
22691 to append a version number to the name of one or both.  For example, if
22692 you want to keep Autoconf version 1 around for awhile, you can configure
22693 Autoconf version 2 using @option{--program-suffix=2} to install the
22694 programs as @file{/usr/local/bin/autoconf2},
22695 @file{/usr/local/bin/autoheader2}, etc.  Nevertheless, pay attention
22696 that only the binaries are renamed, therefore you'd have problems with
22697 the library files which might overlap.
22699 @node Transformation Rules
22700 @subsection Transformation Rules
22702 Here is how to use the variable @code{program_transform_name} in a
22703 @file{Makefile.in}:
22705 @example
22706 PROGRAMS = cp ls rm
22707 transform = @@program_transform_name@@
22708 install:
22709         for p in $(PROGRAMS); do \
22710           $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | \
22711                                               sed '$(transform)'`; \
22712         done
22714 uninstall:
22715         for p in $(PROGRAMS); do \
22716           rm -f $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; \
22717 @c $$ restore font-lock
22718         done
22719 @end example
22721 It is guaranteed that @code{program_transform_name} is never empty, and
22722 that there are no useless separators.  Therefore you may safely embed
22723 @code{program_transform_name} within a sed program using @samp{;}:
22725 @example
22726 transform = @@program_transform_name@@
22727 transform_exe = s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/
22728 @end example
22730 Whether to do the transformations on documentation files (Texinfo or
22731 @code{man}) is a tricky question; there seems to be no perfect answer,
22732 due to the several reasons for name transforming.  Documentation is not
22733 usually particular to a specific architecture, and Texinfo files do not
22734 conflict with system documentation.  But they might conflict with
22735 earlier versions of the same files, and @code{man} pages sometimes do
22736 conflict with system documentation.  As a compromise, it is probably
22737 best to do name transformations on @code{man} pages but not on Texinfo
22738 manuals.
22740 @node Site Defaults
22741 @section Setting Site Defaults
22742 @cindex Site defaults
22743 @cindex config.site
22745 Autoconf-generated @command{configure} scripts allow your site to provide
22746 default values for some configuration values.  You do this by creating
22747 site- and system-wide initialization files.
22749 @evindex CONFIG_SITE
22750 If the environment variable @code{CONFIG_SITE} is set, @command{configure}
22751 uses its value as the name of a shell script to read; it is recommended
22752 that this be an absolute file name.  Otherwise, it
22753 reads the shell script @file{@var{prefix}/share/config.site} if it exists,
22754 then @file{@var{prefix}/etc/config.site} if it exists.  Thus,
22755 settings in machine-specific files override those in machine-independent
22756 ones in case of conflict.
22758 Site files can be arbitrary shell scripts, but only certain kinds of
22759 code are really appropriate to be in them.  Because @command{configure}
22760 reads any cache file after it has read any site files, a site file can
22761 define a default cache file to be shared between all Autoconf-generated
22762 @command{configure} scripts run on that system (@pxref{Cache Files}).  If
22763 you set a default cache file in a site file, it is a good idea to also
22764 set the output variable @code{CC} in that site file, because the cache
22765 file is only valid for a particular compiler, but many systems have
22766 several available.
22768 You can examine or override the value set by a command line option to
22769 @command{configure} in a site file; options set shell variables that have
22770 the same names as the options, with any dashes turned into underscores.
22771 The exceptions are that @option{--without-} and @option{--disable-} options
22772 are like giving the corresponding @option{--with-} or @option{--enable-}
22773 option and the value @samp{no}.  Thus, @option{--cache-file=localcache}
22774 sets the variable @code{cache_file} to the value @samp{localcache};
22775 @option{--enable-warnings=no} or @option{--disable-warnings} sets the variable
22776 @code{enable_warnings} to the value @samp{no}; @option{--prefix=/usr} sets the
22777 variable @code{prefix} to the value @samp{/usr}; etc.
22779 Site files are also good places to set default values for other output
22780 variables, such as @code{CFLAGS}, if you need to give them non-default
22781 values: anything you would normally do, repetitively, on the command
22782 line.  If you use non-default values for @var{prefix} or
22783 @var{exec_prefix} (wherever you locate the site file), you can set them
22784 in the site file if you specify it with the @code{CONFIG_SITE}
22785 environment variable.
22787 You can set some cache values in the site file itself.  Doing this is
22788 useful if you are cross-compiling, where it is impossible to check features
22789 that require running a test program.  You could ``prime the cache'' by
22790 setting those values correctly for that system in
22791 @file{@var{prefix}/etc/config.site}.  To find out the names of the cache
22792 variables you need to set, see the documentation of the respective
22793 Autoconf macro.  If the variables or their semantics are undocumented,
22794 you may need to look for shell variables with @samp{_cv_} in their names
22795 in the affected @command{configure} scripts, or in the Autoconf M4
22796 source code for those macros; but in that case, their name or semantics
22797 may change in a future Autoconf version.
22799 The cache file is careful to not override any variables set in the site
22800 files.  Similarly, you should not override command-line options in the
22801 site files.  Your code should check that variables such as @code{prefix}
22802 and @code{cache_file} have their default values (as set near the top of
22803 @command{configure}) before changing them.
22805 Here is a sample file @file{/usr/share/local/@/gnu/share/@/config.site}.  The
22806 command @samp{configure --prefix=/usr/share/local/gnu} would read this
22807 file (if @code{CONFIG_SITE} is not set to a different file).
22809 @example
22810 # /usr/share/local/gnu/share/config.site for configure
22812 # Change some defaults.
22813 test "$prefix" = NONE && prefix=/usr/share/local/gnu
22814 test "$exec_prefix" = NONE && exec_prefix=/usr/local/gnu
22815 test "$sharedstatedir" = '$@{prefix@}/com' && sharedstatedir=/var
22816 test "$localstatedir" = '$@{prefix@}/var' && localstatedir=/var
22817 test "$runstatedir" = '$@{localstatedir@}/run' && runstatedir=/run
22819 # Give Autoconf 2.x generated configure scripts a shared default
22820 # cache file for feature test results, architecture-specific.
22821 if test "$cache_file" = /dev/null; then
22822   cache_file="$prefix/var/config.cache"
22823   # A cache file is only valid for one C compiler.
22824   CC=gcc
22826 @end example
22828 @c Leave this use of "File system" rendered as one word, but
22829 @c slightly obfuscated so as not to trigger the syntax-check prohibition.
22830 @cindex File@/system Hierarchy Standard
22831 @cindex FHS
22833 Another use of @file{config.site} is for priming the directory variables
22834 @c "File system", but slightly obfuscated, as above.
22835 in a manner consistent with the File@/system Hierarchy Standard
22836 (FHS).  Once the following file is installed at
22837 @file{/usr/share/config.site}, a user can execute simply
22838 @code{./configure --prefix=/usr} to get all the directories chosen in
22839 the locations recommended by FHS.
22841 @example
22842 # /usr/share/config.site for FHS defaults when installing below /usr,
22843 # and the respective settings were not changed on the command line.
22844 if test "$prefix" = /usr; then
22845   test "$sysconfdir" = '$@{prefix@}/etc' && sysconfdir=/etc
22846   test "$sharedstatedir" = '$@{prefix@}/com' && sharedstatedir=/var
22847   test "$localstatedir" = '$@{prefix@}/var' && localstatedir=/var
22849 @end example
22851 @cindex @file{lib64}
22852 @cindex 64-bit libraries
22853 Likewise, on platforms where 64-bit libraries are built by default, then
22854 installed in @file{/usr/local/@/lib64} instead of @file{/usr/local/@/lib},
22855 it is appropriate to install @file{/usr/local/@/share/config.site}:
22857 @example
22858 # /usr/local/share/config.site for platforms that prefer
22859 # the directory /usr/local/lib64 over /usr/local/lib.
22860 test "$libdir" = '$@{exec_prefix@}/lib' && libdir='$@{exec_prefix@}/lib64'
22861 @end example
22864 @c ============================================== Running configure Scripts.
22866 @node Running configure Scripts
22867 @chapter Running @command{configure} Scripts
22868 @cindex @command{configure}
22870 Below are instructions on how to configure a package that uses a
22871 @command{configure} script, suitable for inclusion as an @file{INSTALL}
22872 file in the package.  A plain-text version of @file{INSTALL} which you
22873 may use comes with Autoconf.
22875 @menu
22876 * Basic Installation::          Instructions for typical cases
22877 * Compilers and Options::       Selecting compilers and optimization
22878 * Multiple Architectures::      Compiling for multiple architectures at once
22879 * Installation Names::          Installing in different directories
22880 * Optional Features::           Selecting optional features
22881 * Particular Systems::          Particular systems
22882 * System Type::                 Specifying the system type
22883 * Sharing Defaults::            Setting site-wide defaults for @command{configure}
22884 * Defining Variables::          Specifying the compiler etc.
22885 * configure Invocation::        Changing how @command{configure} runs
22886 @end menu
22888 @set autoconf
22889 @include install.texi
22892 @c ============================================== config.status Invocation
22894 @node config.status Invocation
22895 @chapter config.status Invocation
22896 @cindex @command{config.status}
22898 The @command{configure} script creates a file named @file{config.status},
22899 which actually configures, @dfn{instantiates}, the template files.  It
22900 also records the configuration options that were specified when the
22901 package was last configured in case reconfiguring is needed.
22903 Synopsis:
22904 @example
22905 ./config.status @ovar{option}@dots{} @ovar{tag}@dots{}
22906 @end example
22908 It configures each @var{tag}; if none are specified, all the templates
22909 are instantiated.  A @var{tag} refers to a file or other tag associated
22910 with a configuration action, as specified by an @code{AC_CONFIG_@var{ITEMS}}
22911 macro (@pxref{Configuration Actions}).  The files must be specified
22912 without their dependencies, as in
22914 @example
22915 ./config.status foobar
22916 @end example
22918 @noindent
22921 @example
22922 ./config.status foobar:foo.in:bar.in
22923 @end example
22925 The supported options are:
22927 @table @option
22928 @item --help
22929 @itemx -h
22930 Print a summary of the command line options, the list of the template
22931 files, and exit.
22933 @item --version
22934 @itemx -V
22935 Print the version number of Autoconf and the configuration settings,
22936 and exit.
22938 @item --config
22939 Print the configuration settings in reusable way, quoted for the shell,
22940 and exit.  For example, for a debugging build that otherwise reuses the
22941 configuration from a different build directory @var{build-dir} of a
22942 package in @var{src-dir}, you could use the following:
22944 @example
22945 args=`@var{build-dir}/config.status --config`
22946 eval @var{src-dir}/configure "$args" CFLAGS=-g --srcdir=@var{src-dir}
22947 @end example
22949 @noindent
22950 Note that it may be necessary to override a @option{--srcdir} setting
22951 that was saved in the configuration, if the arguments are used in a
22952 different build directory.
22954 @item --silent
22955 @itemx --quiet
22956 @itemx -q
22957 Do not print progress messages.
22959 @item --debug
22960 @itemx -d
22961 Don't remove the temporary files.
22963 @item --file=@var{file}[:@var{template}]
22964 Require that @var{file} be instantiated as if
22965 @samp{AC_CONFIG_FILES(@var{file}:@var{template})} was used.  Both
22966 @var{file} and @var{template} may be @samp{-} in which case the standard
22967 output and/or standard input, respectively, is used.  If a
22968 @var{template} file name is relative, it is first looked for in the build
22969 tree, and then in the source tree.  @xref{Configuration Actions}, for
22970 more details.
22972 This option and the following ones provide one way for separately
22973 distributed packages to share the values computed by @command{configure}.
22974 Doing so can be useful if some of the packages need a superset of the
22975 features that one of them, perhaps a common library, does.  These
22976 options allow a @file{config.status} file to create files other than the
22977 ones that its @file{configure.ac} specifies, so it can be used for a
22978 different package, or for extracting a subset of values.  For example,
22980 @example
22981 echo '@@CC@@' | ./config.status --file=-
22982 @end example
22984 @noindent
22985 provides the value of @code{@@CC@@} on standard output.
22987 @item --header=@var{file}[:@var{template}]
22988 Same as @option{--file} above, but with @samp{AC_CONFIG_HEADERS}.
22990 @item --recheck
22991 Ask @file{config.status} to update itself and exit (no instantiation).
22992 This option is useful if you change @command{configure}, so that the
22993 results of some tests might be different from the previous run.  The
22994 @option{--recheck} option reruns @command{configure} with the same arguments
22995 you used before, plus the @option{--no-create} option, which prevents
22996 @command{configure} from running @file{config.status} and creating
22997 @file{Makefile} and other files, and the @option{--no-recursion} option,
22998 which prevents @command{configure} from running other @command{configure}
22999 scripts in subdirectories.  (This is so other Make rules can
23000 run @file{config.status} when it changes; @pxref{Automatic Remaking},
23001 for an example).
23002 @end table
23004 @file{config.status} checks several optional environment variables that
23005 can alter its behavior:
23007 @anchor{CONFIG_SHELL}
23008 @defvar CONFIG_SHELL
23009 @evindex CONFIG_SHELL
23010 The shell with which to run @command{configure}.  It must be
23011 Bourne-compatible, and the absolute name of the shell should be passed.
23012 The default is a shell that supports @code{LINENO} if available, and
23013 @file{/bin/sh} otherwise.
23014 @end defvar
23016 @defvar CONFIG_STATUS
23017 @evindex CONFIG_STATUS
23018 The file name to use for the shell script that records the
23019 configuration.  The default is @file{./config.status}.  This variable is
23020 useful when one package uses parts of another and the @command{configure}
23021 scripts shouldn't be merged because they are maintained separately.
23022 @end defvar
23024 You can use @file{./config.status} in your makefiles.  For example, in
23025 the dependencies given above (@pxref{Automatic Remaking}),
23026 @file{config.status} is run twice when @file{configure.ac} has changed.
23027 If that bothers you, you can make each run only regenerate the files for
23028 that rule:
23029 @example
23030 @group
23031 config.h: stamp-h
23032 stamp-h: config.h.in config.status
23033         ./config.status config.h
23034         echo > stamp-h
23036 Makefile: Makefile.in config.status
23037         ./config.status Makefile
23038 @end group
23039 @end example
23041 The calling convention of @file{config.status} has changed; see
23042 @ref{Obsolete config.status Use}, for details.
23045 @c =================================================== Obsolete Constructs
23047 @node Obsolete Constructs
23048 @chapter Obsolete Constructs
23049 @cindex Obsolete constructs
23051 Autoconf changes, and throughout the years some constructs have been
23052 obsoleted.  Most of the changes involve the macros, but in some cases
23053 the tools themselves, or even some concepts, are now considered
23054 obsolete.
23056 You may completely skip this chapter if you are new to Autoconf.  Its
23057 intention is mainly to help maintainers updating their packages by
23058 understanding how to move to more modern constructs.
23060 @menu
23061 * Obsolete config.status Use::  Obsolete convention for @command{config.status}
23062 * acconfig Header::             Additional entries in @file{config.h.in}
23063 * autoupdate Invocation::       Automatic update of @file{configure.ac}
23064 * Obsolete Macros::             Backward compatibility macros
23065 * Autoconf 1::                  Tips for upgrading your files
23066 * Autoconf 2.13::               Some fresher tips
23067 @end menu
23069 @node Obsolete config.status Use
23070 @section Obsolete @file{config.status} Invocation
23072 @file{config.status} now supports arguments to specify the files to
23073 instantiate; see @ref{config.status Invocation}, for more details.
23074 Before, environment variables had to be used.
23076 @defvar CONFIG_COMMANDS
23077 @evindex CONFIG_COMMANDS
23078 The tags of the commands to execute.  The default is the arguments given
23079 to @code{AC_OUTPUT} and @code{AC_CONFIG_COMMANDS} in
23080 @file{configure.ac}.
23081 @end defvar
23083 @defvar CONFIG_FILES
23084 @evindex CONFIG_FILES
23085 The files in which to perform @samp{@@@var{variable}@@} substitutions.
23086 The default is the arguments given to @code{AC_OUTPUT} and
23087 @code{AC_CONFIG_FILES} in @file{configure.ac}.
23088 @end defvar
23090 @defvar CONFIG_HEADERS
23091 @evindex CONFIG_HEADERS
23092 The files in which to substitute C @code{#define} statements.  The
23093 default is the arguments given to @code{AC_CONFIG_HEADERS}; if that
23094 macro was not called, @file{config.status} ignores this variable.
23095 @end defvar
23097 @defvar CONFIG_LINKS
23098 @evindex CONFIG_LINKS
23099 The symbolic links to establish.  The default is the arguments given to
23100 @code{AC_CONFIG_LINKS}; if that macro was not called,
23101 @file{config.status} ignores this variable.
23102 @end defvar
23104 In @ref{config.status Invocation}, using this old interface, the example
23105 would be:
23107 @example
23108 @group
23109 config.h: stamp-h
23110 stamp-h: config.h.in config.status
23111         CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_FILES= \
23112           CONFIG_HEADERS=config.h ./config.status
23113         echo > stamp-h
23115 Makefile: Makefile.in config.status
23116         CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_HEADERS= \
23117           CONFIG_FILES=Makefile ./config.status
23118 @end group
23119 @end example
23121 @noindent
23122 (If @file{configure.ac} does not call @code{AC_CONFIG_HEADERS}, there is
23123 no need to set @code{CONFIG_HEADERS} in the @command{make} rules.  Equally
23124 for @code{CONFIG_COMMANDS}, etc.)
23127 @node acconfig Header
23128 @section @file{acconfig.h}
23130 @cindex @file{acconfig.h}
23131 @cindex @file{config.h.top}
23132 @cindex @file{config.h.bot}
23134 In order to produce @file{config.h.in}, @command{autoheader} needs to
23135 build or to find templates for each symbol.  Modern releases of Autoconf
23136 use @code{AH_VERBATIM} and @code{AH_TEMPLATE} (@pxref{Autoheader
23137 Macros}), but in older releases a file, @file{acconfig.h}, contained the
23138 list of needed templates.  @command{autoheader} copied comments and
23139 @code{#define} and @code{#undef} statements from @file{acconfig.h} in
23140 the current directory, if present.  This file used to be mandatory if
23141 you @code{AC_DEFINE} any additional symbols.
23143 Modern releases of Autoconf also provide @code{AH_TOP} and
23144 @code{AH_BOTTOM} if you need to prepend/append some information to
23145 @file{config.h.in}.  Ancient versions of Autoconf had a similar feature:
23146 if @file{./acconfig.h} contains the string @samp{@@TOP@@},
23147 @command{autoheader} copies the lines before the line containing
23148 @samp{@@TOP@@} into the top of the file that it generates.  Similarly,
23149 if @file{./acconfig.h} contains the string @samp{@@BOTTOM@@},
23150 @command{autoheader} copies the lines after that line to the end of the
23151 file it generates.  Either or both of those strings may be omitted.  An
23152 even older alternate way to produce the same effect in ancient versions
23153 of Autoconf is to create the files @file{@var{file}.top} (typically
23154 @file{config.h.top}) and/or @file{@var{file}.bot} in the current
23155 directory.  If they exist, @command{autoheader} copies them to the
23156 beginning and end, respectively, of its output.
23158 In former versions of Autoconf, the files used in preparing a software
23159 package for distribution were:
23160 @example
23161 @group
23162 configure.ac --.   .------> autoconf* -----> configure
23163                +---+
23164 [aclocal.m4] --+   `---.
23165 [acsite.m4] ---'       |
23166                        +--> [autoheader*] -> [config.h.in]
23167 [acconfig.h] ----.     |
23168                  +-----'
23169 [config.h.top] --+
23170 [config.h.bot] --'
23171 @end group
23172 @end example
23174 Using only the @code{AH_} macros, @file{configure.ac} should be
23175 self-contained, and should not depend upon @file{acconfig.h} etc.
23178 @node autoupdate Invocation
23179 @section Using @command{autoupdate} to Modernize @file{configure.ac}
23180 @cindex @command{autoupdate}
23182 The @command{autoupdate} program updates a @file{configure.ac} file that
23183 calls Autoconf macros by their old names to use the current macro names.
23184 In version 2 of Autoconf, most of the macros were renamed to use a more
23185 uniform and descriptive naming scheme.  @xref{Macro Names}, for a
23186 description of the new scheme.  Although the old names still work
23187 (@pxref{Obsolete Macros}, for a list of the old macros and the corresponding
23188 new names), you can make your @file{configure.ac} files more readable
23189 and make it easier to use the current Autoconf documentation if you
23190 update them to use the new macro names.
23192 @evindex SIMPLE_BACKUP_SUFFIX
23193 If given no arguments, @command{autoupdate} updates @file{configure.ac},
23194 backing up the original version with the suffix @file{~} (or the value
23195 of the environment variable @code{SIMPLE_BACKUP_SUFFIX}, if that is
23196 set).  If you give @command{autoupdate} an argument, it reads that file
23197 instead of @file{configure.ac} and writes the updated file to the
23198 standard output.
23200 @noindent
23201 @command{autoupdate} accepts the following options:
23203 @table @option
23204 @item --help
23205 @itemx -h
23206 Print a summary of the command line options and exit.
23208 @item --version
23209 @itemx -V
23210 Print the version number of Autoconf and exit.
23212 @item --verbose
23213 @itemx -v
23214 Report processing steps.
23216 @item --debug
23217 @itemx -d
23218 Don't remove the temporary files.
23220 @item --force
23221 @itemx -f
23222 Force the update even if the file has not changed.  Disregard the cache.
23224 @item --include=@var{dir}
23225 @itemx -I @var{dir}
23226 Also look for input files in @var{dir}.  Multiple invocations accumulate.
23227 Directories are browsed from last to first.
23229 @item --prepend-include=@var{dir}
23230 @itemx -B @var{dir}
23231 Prepend directory @var{dir} to the search path.  This is used to include
23232 the language-specific files before any third-party macros.
23233 @end table
23235 @node Obsolete Macros
23236 @section Obsolete Macros
23238 Several macros are obsoleted in Autoconf, for various reasons (typically
23239 they failed to quote properly, couldn't be extended for more recent
23240 issues, etc.).  They are still supported, but deprecated: their use
23241 should be avoided.
23243 During the jump from Autoconf version 1 to version 2, most of the
23244 macros were renamed to use a more uniform and descriptive naming scheme,
23245 but their signature did not change.  @xref{Macro Names}, for a
23246 description of the new naming scheme.  Below, if there is just the mapping
23247 from old names to new names for these macros, the reader is invited to
23248 refer to the definition of the new macro for the signature and the
23249 description.
23251 @defmac AC_AIX
23252 @acindex{AIX}
23253 @cvindex _ALL_SOURCE
23254 This macro is a platform-specific subset of
23255 @code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
23256 @end defmac
23258 @defmac AC_ALLOCA
23259 @acindex{ALLOCA}
23260 Replaced by @code{AC_FUNC_ALLOCA} (@pxref{AC_FUNC_ALLOCA}).
23261 @end defmac
23263 @defmac AC_ARG_ARRAY
23264 @acindex{ARG_ARRAY}
23265 Removed because of limited usefulness.
23266 @end defmac
23268 @defmac AC_C_CROSS
23269 @acindex{C_CROSS}
23270 This macro is obsolete; it does nothing.
23271 @end defmac
23273 @defmac AC_C_LONG_DOUBLE
23274 @acindex{C_LONG_DOUBLE}
23275 @cvindex HAVE_LONG_DOUBLE
23276 If the C compiler supports a working @code{long double} type with more
23277 range or precision than the @code{double} type, define
23278 @code{HAVE_LONG_DOUBLE}.
23280 You should use @code{AC_TYPE_LONG_DOUBLE} or
23281 @code{AC_TYPE_LONG_DOUBLE_WIDER} instead.  @xref{Particular Types}.
23282 @end defmac
23284 @defmac AC_CANONICAL_SYSTEM
23285 @acindex{CANONICAL_SYSTEM}
23286 Determine the system type and set output variables to the names of the
23287 canonical system types.  @xref{Canonicalizing}, for details about the
23288 variables this macro sets.
23290 The user is encouraged to use either @code{AC_CANONICAL_BUILD}, or
23291 @code{AC_CANONICAL_HOST}, or @code{AC_CANONICAL_TARGET}, depending on
23292 the needs.  Using @code{AC_CANONICAL_TARGET} is enough to run the two
23293 other macros (@pxref{Canonicalizing}).
23294 @end defmac
23296 @defmac AC_CHAR_UNSIGNED
23297 @acindex{CHAR_UNSIGNED}
23298 Replaced by @code{AC_C_CHAR_UNSIGNED} (@pxref{AC_C_CHAR_UNSIGNED}).
23299 @end defmac
23301 @defmac AC_CHECK_TYPE (@var{type}, @var{default})
23302 @acindex{CHECK_TYPE}
23303 Autoconf, up to 2.13, used to provide this version of
23304 @code{AC_CHECK_TYPE}, deprecated because of its flaws.  First, although
23305 it is a member of the @code{CHECK} clan, it does
23306 more than just checking.  Secondly, missing types are defined
23307 using @code{#define}, not @code{typedef}, and this can lead to
23308 problems in the case of pointer types.
23310 This use of @code{AC_CHECK_TYPE} is obsolete and discouraged; see
23311 @ref{Generic Types}, for the description of the current macro.
23313 If the type @var{type} is not defined, define it to be the C (or C++)
23314 builtin type @var{default}, e.g., @samp{short int} or @samp{unsigned int}.
23316 This macro is equivalent to:
23318 @example
23319 AC_CHECK_TYPE([@var{type}], [],
23320   [AC_DEFINE_UNQUOTED([@var{type}], [@var{default}],
23321      [Define to `@var{default}'
23322       if <sys/types.h> does not define.])])
23323 @end example
23325 In order to keep backward compatibility, the two versions of
23326 @code{AC_CHECK_TYPE} are implemented, selected using these heuristics:
23328 @enumerate
23329 @item
23330 If there are three or four arguments, the modern version is used.
23332 @item
23333 If the second argument appears to be a C or C++ type, then the
23334 obsolete version is used.  This happens if the argument is a C or C++
23335 @emph{builtin} type or a C identifier ending in @samp{_t}, optionally
23336 followed by one of @samp{[(* } and then by a string of zero or more
23337 characters taken from the set @samp{[]()* _a-zA-Z0-9}.
23339 @item
23340 If the second argument is spelled with the alphabet of valid C and C++
23341 types, the user is warned and the modern version is used.
23343 @item
23344 Otherwise, the modern version is used.
23345 @end enumerate
23347 @noindent
23348 You are encouraged either to use a valid builtin type, or to use the
23349 equivalent modern code (see above), or better yet, to use
23350 @code{AC_CHECK_TYPES} together with
23352 @example
23353 #ifndef HAVE_LOFF_T
23354 typedef loff_t off_t;
23355 #endif
23356 @end example
23357 @end defmac
23358 @c end of AC_CHECK_TYPE
23360 @defmac AC_CHECKING (@var{feature-description})
23361 @acindex{CHECKING}
23362 Same as
23364 @example
23365 AC_MSG_NOTICE([checking @var{feature-description}@dots{}]
23366 @end example
23368 @noindent
23369 @xref{AC_MSG_NOTICE}.
23370 @end defmac
23372 @defmac AC_COMPILE_CHECK (@var{echo-text}, @var{includes}, @
23373   @var{function-body}, @var{action-if-true}, @ovar{action-if-false})
23374 @acindex{COMPILE_CHECK}
23375 This is an obsolete version of @code{AC_TRY_COMPILE} itself replaced by
23376 @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}), with the
23377 addition that it prints @samp{checking for @var{echo-text}} to the
23378 standard output first, if @var{echo-text} is non-empty.  Use
23379 @code{AC_MSG_CHECKING} and @code{AC_MSG_RESULT} instead to print
23380 messages (@pxref{Printing Messages}).
23381 @end defmac
23383 @defmac AC_CONST
23384 @acindex{CONST}
23385 Replaced by @code{AC_C_CONST} (@pxref{AC_C_CONST}).
23386 @end defmac
23388 @defmac AC_CROSS_CHECK
23389 @acindex{CROSS_CHECK}
23390 Same as @code{AC_C_CROSS}, which is obsolete too, and does nothing
23391 @code{:-)}.
23392 @end defmac
23394 @defmac AC_CYGWIN
23395 @acindex{CYGWIN}
23396 @evindex CYGWIN
23397 Check for the Cygwin environment in which case the shell variable
23398 @code{CYGWIN} is set to @samp{yes}.  Don't use this macro, the dignified
23399 means to check the nature of the host is using @code{AC_CANONICAL_HOST}
23400 (@pxref{Canonicalizing}).  As a matter of fact this macro is defined as:
23402 @example
23403 AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
23404 case $host_os in
23405   *cygwin* ) CYGWIN=yes;;
23406          * ) CYGWIN=no;;
23407 esac
23408 @end example
23410 Beware that the variable @env{CYGWIN} has a special meaning when
23411 running Cygwin, and should not be changed.  That's yet another reason
23412 not to use this macro.
23413 @end defmac
23415 @defmac AC_DECL_SYS_SIGLIST
23416 @acindex{DECL_SYS_SIGLIST}
23417 @cvindex SYS_SIGLIST_DECLARED
23418 Same as:
23420 @example
23421 AC_CHECK_DECLS([sys_siglist], [], [],
23422 [#include <signal.h>
23423 /* NetBSD declares sys_siglist in unistd.h.  */
23424 #ifdef HAVE_UNISTD_H
23425 # include <unistd.h>
23426 #endif
23428 @end example
23430 @noindent
23431 @xref{AC_CHECK_DECLS}.
23432 @end defmac
23434 @defmac AC_DECL_YYTEXT
23435 @acindex{DECL_YYTEXT}
23436 Does nothing, now integrated in @code{AC_PROG_LEX} (@pxref{AC_PROG_LEX}).
23437 @end defmac
23439 @defmac AC_DIR_HEADER
23440 @acindex{DIR_HEADER}
23441 @cvindex DIRENT
23442 @cvindex SYSNDIR
23443 @cvindex SYSDIR
23444 @cvindex NDIR
23445 Like calling @code{AC_FUNC_CLOSEDIR_VOID}
23446 (@pxref{AC_FUNC_CLOSEDIR_VOID}) and @code{AC_HEADER_DIRENT}
23447 (@pxref{AC_HEADER_DIRENT}),
23448 but defines a different set of C preprocessor macros to indicate which
23449 header file is found:
23451 @multitable {@file{sys/ndir.h}} {Old Symbol} {@code{HAVE_SYS_NDIR_H}}
23452 @item Header            @tab Old Symbol     @tab New Symbol
23453 @item @file{dirent.h}   @tab @code{DIRENT}  @tab @code{HAVE_DIRENT_H}
23454 @item @file{sys/ndir.h} @tab @code{SYSNDIR} @tab @code{HAVE_SYS_NDIR_H}
23455 @item @file{sys/dir.h}  @tab @code{SYSDIR}  @tab @code{HAVE_SYS_DIR_H}
23456 @item @file{ndir.h}     @tab @code{NDIR}    @tab @code{HAVE_NDIR_H}
23457 @end multitable
23458 @end defmac
23460 @defmac AC_DYNIX_SEQ
23461 @acindex{DYNIX_SEQ}
23462 If on DYNIX/ptx, add @option{-lseq} to output variable
23463 @code{LIBS}.  This macro used to be defined as
23465 @example
23466 AC_CHECK_LIB([seq], [getmntent], [LIBS="-lseq $LIBS"])
23467 @end example
23469 @noindent
23470 now it is just @code{AC_FUNC_GETMNTENT} (@pxref{AC_FUNC_GETMNTENT}).
23471 @end defmac
23473 @defmac AC_EXEEXT
23474 @acindex{EXEEXT}
23475 @ovindex EXEEXT
23476 Defined the output variable @code{EXEEXT} based on the output of the
23477 compiler, which is now done automatically.  Typically set to empty
23478 string if Posix and @samp{.exe} if a DOS variant.
23479 @end defmac
23481 @defmac AC_EMXOS2
23482 @acindex{EMXOS2}
23483 Similar to @code{AC_CYGWIN} but checks for the EMX environment on OS/2
23484 and sets @code{EMXOS2}.  Don't use this macro, the dignified means to
23485 check the nature of the host is using @code{AC_CANONICAL_HOST}
23486 (@pxref{Canonicalizing}).
23487 @end defmac
23489 @defmac AC_ENABLE (@var{feature}, @var{action-if-given}, @
23490   @ovar{action-if-not-given})
23491 @acindex{ENABLE}
23492 This is an obsolete version of @code{AC_ARG_ENABLE} that does not
23493 support providing a help string (@pxref{AC_ARG_ENABLE}).
23494 @end defmac
23496 @defmac AC_ERROR
23497 @acindex{ERROR}
23498 Replaced by @code{AC_MSG_ERROR} (@pxref{AC_MSG_ERROR}).
23499 @end defmac
23501 @defmac AC_FIND_X
23502 @acindex{FIND_X}
23503 Replaced by @code{AC_PATH_X} (@pxref{AC_PATH_X}).
23504 @end defmac
23506 @defmac AC_FIND_XTRA
23507 @acindex{FIND_XTRA}
23508 Replaced by @code{AC_PATH_XTRA} (@pxref{AC_PATH_XTRA}).
23509 @end defmac
23511 @defmac AC_FOREACH
23512 @acindex{FOREACH}
23513 Replaced by @code{m4_foreach_w} (@pxref{m4_foreach_w}).
23514 @end defmac
23516 @defmac AC_FUNC_CHECK
23517 @acindex{FUNC_CHECK}
23518 Replaced by @code{AC_CHECK_FUNC} (@pxref{AC_CHECK_FUNC}).
23519 @end defmac
23521 @anchor{AC_FUNC_SETVBUF_REVERSED}
23522 @defmac AC_FUNC_SETVBUF_REVERSED
23523 @acindex{FUNC_SETVBUF_REVERSED}
23524 @cvindex SETVBUF_REVERSED
23525 @c @fuindex setvbuf
23526 @prindex @code{setvbuf}
23527 Do nothing.  Formerly, this macro checked whether @code{setvbuf} takes
23528 the buffering type as its second argument and the buffer pointer as the
23529 third, instead of the other way around, and defined
23530 @code{SETVBUF_REVERSED}.  However, the last systems to have the problem
23531 were those based on SVR2, which became obsolete in 1987, and the macro
23532 is no longer needed.
23533 @end defmac
23535 @defmac AC_FUNC_WAIT3
23536 @acindex{FUNC_WAIT3}
23537 @cvindex HAVE_WAIT3
23538 @c @fuindex wait3
23539 @prindex @code{wait3}
23540 If @code{wait3} is found and fills in the contents of its third argument
23541 (a @samp{struct rusage *}), which HP-UX does not do, define
23542 @code{HAVE_WAIT3}.
23544 These days portable programs should use @code{waitpid}, not
23545 @code{wait3}, as @code{wait3} has been removed from Posix.
23546 @end defmac
23548 @defmac AC_GCC_TRADITIONAL
23549 @acindex{GCC_TRADITIONAL}
23550 Replaced by @code{AC_PROG_GCC_TRADITIONAL} (@pxref{AC_PROG_GCC_TRADITIONAL}).
23551 @end defmac
23553 @defmac AC_GETGROUPS_T
23554 @acindex{GETGROUPS_T}
23555 Replaced by @code{AC_TYPE_GETGROUPS} (@pxref{AC_TYPE_GETGROUPS}).
23556 @end defmac
23558 @defmac AC_GETLOADAVG
23559 @acindex{GETLOADAVG}
23560 Replaced by @code{AC_FUNC_GETLOADAVG} (@pxref{AC_FUNC_GETLOADAVG}).
23561 @end defmac
23563 @defmac AC_GNU_SOURCE
23564 @acindex{GNU_SOURCE}
23565 @cvindex _GNU_SOURCE
23566 This macro is a platform-specific subset of
23567 @code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
23568 @end defmac
23570 @defmac AC_HAVE_FUNCS
23571 @acindex{HAVE_FUNCS}
23572 Replaced by @code{AC_CHECK_FUNCS} (@pxref{AC_CHECK_FUNCS}).
23573 @end defmac
23575 @defmac AC_HAVE_HEADERS
23576 @acindex{HAVE_HEADERS}
23577 Replaced by @code{AC_CHECK_HEADERS} (@pxref{AC_CHECK_HEADERS}).
23578 @end defmac
23580 @defmac AC_HAVE_LIBRARY (@var{library}, @ovar{action-if-found}, @
23581   @ovar{action-if-not-found}, @ovar{other-libraries})
23582 @acindex{HAVE_LIBRARY}
23583 This macro is equivalent to calling @code{AC_CHECK_LIB} with a
23584 @var{function} argument of @code{main}.  In addition, @var{library} can
23585 be written as any of @samp{foo}, @option{-lfoo}, or @samp{libfoo.a}.  In
23586 all of those cases, the compiler is passed @option{-lfoo}.  However,
23587 @var{library} cannot be a shell variable; it must be a literal name.
23588 @xref{AC_CHECK_LIB}.
23589 @end defmac
23591 @defmac AC_HAVE_POUNDBANG
23592 @acindex{HAVE_POUNDBANG}
23593 Replaced by @code{AC_SYS_INTERPRETER} (@pxref{AC_SYS_INTERPRETER}).
23594 @end defmac
23596 @defmac AC_HEADER_CHECK
23597 @acindex{HEADER_CHECK}
23598 Replaced by @code{AC_CHECK_HEADER} (@pxref{AC_CHECK_HEADER}).
23599 @end defmac
23601 @defmac AC_HEADER_EGREP
23602 @acindex{HEADER_EGREP}
23603 Replaced by @code{AC_EGREP_HEADER} (@pxref{AC_EGREP_HEADER}).
23604 @end defmac
23606 @anchor{AC_HEADER_TIME}
23607 @defmac AC_HEADER_TIME
23608 @acindex{HEADER_TIME}
23609 @cvindex TIME_WITH_SYS_TIME
23610 @hdrindex{time.h}
23611 @hdrindex{sys/time.h}
23612 @caindex header_time
23613 This macro used to check whether it was possible to include
23614 @file{time.h} and @file{sys/time.h} in the same source file,
23615 defining @code{TIME_WITH_SYS_TIME} if so.
23617 Nowadays, it is equivalent to @samp{AC_CHECK_HEADERS([sys/time.h])},
23618 although it does still define @code{TIME_WITH_SYS_TIME} for
23619 compatibility's sake.  @file{time.h} is universally present, and the
23620 systems on which @file{sys/time.h} conflicted with @file{time.h} are
23621 obsolete.
23622 @end defmac
23624 @defmac AC_HELP_STRING
23625 @acindex{HELP_STRING}
23626 Replaced by @code{AS_HELP_STRING} (@pxref{AS_HELP_STRING}).
23627 @end defmac
23629 @defmac AC_INIT (@var{unique-file-in-source-dir})
23630 @acindex{INIT}
23631 Formerly @code{AC_INIT} used to have a single argument, and was
23632 equivalent to:
23634 @example
23635 AC_INIT
23636 AC_CONFIG_SRCDIR(@var{unique-file-in-source-dir})
23637 @end example
23638 See @ref{AC_INIT} and @ref{AC_CONFIG_SRCDIR}.
23639 @end defmac
23641 @defmac AC_INLINE
23642 @acindex{INLINE}
23643 Replaced by @code{AC_C_INLINE} (@pxref{AC_C_INLINE}).
23644 @end defmac
23646 @defmac AC_INT_16_BITS
23647 @acindex{INT_16_BITS}
23648 @cvindex INT_16_BITS
23649 If the C type @code{int} is 16 bits wide, define @code{INT_16_BITS}.
23650 Use @samp{AC_CHECK_SIZEOF(int)} instead (@pxref{AC_CHECK_SIZEOF}).
23651 @end defmac
23653 @defmac AC_IRIX_SUN
23654 @acindex{IRIX_SUN}
23655 If on IRIX (Silicon Graphics Unix), add @option{-lsun} to output
23656 @code{LIBS}.  If you were using it to get @code{getmntent}, use
23657 @code{AC_FUNC_GETMNTENT} instead.  If you used it for the NIS versions
23658 of the password and group functions, use @samp{AC_CHECK_LIB(sun,
23659 getpwnam)}.  Up to Autoconf 2.13, it used to be
23661 @example
23662 AC_CHECK_LIB([sun], [getmntent], [LIBS="-lsun $LIBS"])
23663 @end example
23665 @noindent
23666 now it is defined as
23668 @example
23669 AC_FUNC_GETMNTENT
23670 AC_CHECK_LIB([sun], [getpwnam])
23671 @end example
23673 @noindent
23674 See @ref{AC_FUNC_GETMNTENT} and @ref{AC_CHECK_LIB}.
23675 @end defmac
23677 @defmac AC_ISC_POSIX
23678 @acindex{ISC_POSIX}
23679 @ovindex LIBS
23680 This macro adds @option{-lcposix} to output variable @code{LIBS} if
23681 necessary for Posix facilities.  Sun dropped support for the obsolete
23682 INTERACTIVE Systems Corporation Unix on 2006-07-23.  New programs
23683 need not use this macro.  It is implemented as
23684 @code{AC_SEARCH_LIBS([strerror], [cposix])} (@pxref{AC_SEARCH_LIBS}).
23685 @end defmac
23687 @defmac AC_LANG_C
23688 @acindex{LANG_C}
23689 Same as @samp{AC_LANG([C])} (@pxref{AC_LANG}).
23690 @end defmac
23692 @defmac AC_LANG_CPLUSPLUS
23693 @acindex{LANG_CPLUSPLUS}
23694 Same as @samp{AC_LANG([C++])} (@pxref{AC_LANG}).
23695 @end defmac
23697 @defmac AC_LANG_FORTRAN77
23698 @acindex{LANG_FORTRAN77}
23699 Same as @samp{AC_LANG([Fortran 77])} (@pxref{AC_LANG}).
23700 @end defmac
23702 @defmac AC_LANG_RESTORE
23703 @acindex{LANG_RESTORE}
23704 Select the @var{language} that is saved on the top of the stack, as set
23705 by @code{AC_LANG_SAVE}, remove it from the stack, and call
23706 @code{AC_LANG(@var{language})}.  @xref{Language Choice}, for the
23707 preferred way to change languages.
23708 @end defmac
23710 @defmac AC_LANG_SAVE
23711 @acindex{LANG_SAVE}
23712 Remember the current language (as set by @code{AC_LANG}) on a stack.
23713 The current language does not change.  @code{AC_LANG_PUSH} is preferred
23714 (@pxref{AC_LANG_PUSH}).
23715 @end defmac
23717 @defmac AC_LINK_FILES (@var{source}@dots{}, @var{dest}@dots{})
23718 @acindex{LINK_FILES}
23719 This is an obsolete version of @code{AC_CONFIG_LINKS}
23720 (@pxref{AC_CONFIG_LINKS}.  An updated version of:
23722 @example
23723 AC_LINK_FILES(config/$machine.h config/$obj_format.h,
23724               host.h            object.h)
23725 @end example
23727 @noindent
23730 @example
23731 AC_CONFIG_LINKS([host.h:config/$machine.h
23732                 object.h:config/$obj_format.h])
23733 @end example
23734 @end defmac
23736 @defmac AC_LN_S
23737 @acindex{LN_S}
23738 Replaced by @code{AC_PROG_LN_S} (@pxref{AC_PROG_LN_S}).
23739 @end defmac
23741 @defmac AC_LONG_64_BITS
23742 @acindex{LONG_64_BITS}
23743 @cvindex LONG_64_BITS
23744 Define @code{LONG_64_BITS} if the C type @code{long int} is 64 bits wide.
23745 Use the generic macro @samp{AC_CHECK_SIZEOF([long int])} instead
23746 (@pxref{AC_CHECK_SIZEOF}).
23747 @end defmac
23749 @defmac AC_LONG_DOUBLE
23750 @acindex{LONG_DOUBLE}
23751 If the C compiler supports a working @code{long double} type with more
23752 range or precision than the @code{double} type, define
23753 @code{HAVE_LONG_DOUBLE}.
23755 You should use @code{AC_TYPE_LONG_DOUBLE} or
23756 @code{AC_TYPE_LONG_DOUBLE_WIDER} instead.  @xref{Particular Types}.
23757 @end defmac
23759 @defmac AC_LONG_FILE_NAMES
23760 @acindex{LONG_FILE_NAMES}
23761 Replaced by
23762 @example
23763 AC_SYS_LONG_FILE_NAMES
23764 @end example
23765 @noindent
23766 @xref{AC_SYS_LONG_FILE_NAMES}.
23767 @end defmac
23769 @defmac AC_MAJOR_HEADER
23770 @acindex{MAJOR_HEADER}
23771 Replaced by @code{AC_HEADER_MAJOR} (@pxref{AC_HEADER_MAJOR}).
23772 @end defmac
23774 @defmac AC_MEMORY_H
23775 @acindex{MEMORY_H}
23776 @cvindex NEED_MEMORY_H
23777 Used to define @code{NEED_MEMORY_H} if the @code{mem} functions were
23778 defined in @file{memory.h}.  Today it is equivalent to
23779 @samp{AC_CHECK_HEADERS([memory.h])} (@pxref{AC_CHECK_HEADERS}).  Adjust
23780 your code to get the @code{mem} functions from @file{string.h} instead.
23781 @end defmac
23783 @defmac AC_MINGW32
23784 @acindex{MINGW32}
23785 Similar to @code{AC_CYGWIN} but checks for the MinGW compiler
23786 environment and sets @code{MINGW32}.  Don't use this macro, the
23787 dignified means to check the nature of the host is using
23788 @code{AC_CANONICAL_HOST} (@pxref{Canonicalizing}).
23789 @end defmac
23791 @defmac AC_MINIX
23792 @acindex{MINIX}
23793 @cvindex _MINIX
23794 @cvindex _POSIX_SOURCE
23795 @cvindex _POSIX_1_SOURCE
23796 This macro is a platform-specific subset of
23797 @code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
23798 @end defmac
23800 @defmac AC_MINUS_C_MINUS_O
23801 @acindex{MINUS_C_MINUS_O}
23802 Replaced by @code{AC_PROG_CC_C_O} (@pxref{AC_PROG_CC_C_O}).
23803 @end defmac
23805 @defmac AC_MMAP
23806 @acindex{MMAP}
23807 Replaced by @code{AC_FUNC_MMAP} (@pxref{AC_FUNC_MMAP}).
23808 @end defmac
23810 @defmac AC_MODE_T
23811 @acindex{MODE_T}
23812 Replaced by @code{AC_TYPE_MODE_T} (@pxref{AC_TYPE_MODE_T}).
23813 @end defmac
23815 @defmac AC_OBJEXT
23816 @acindex{OBJEXT}
23817 @ovindex OBJEXT
23818 Defined the output variable @code{OBJEXT} based on the output of the
23819 compiler, after .c files have been excluded.  Typically set to @samp{o}
23820 if Posix, @samp{obj} if a DOS variant.
23821 Now the compiler checking macros handle
23822 this automatically.
23823 @end defmac
23825 @defmac AC_OBSOLETE (@var{this-macro-name}, @ovar{suggestion})
23826 @acindex{OBSOLETE}
23827 Make M4 print a message to the standard error output warning that
23828 @var{this-macro-name} is obsolete, and giving the file and line number
23829 where it was called.  @var{this-macro-name} should be the name of the
23830 macro that is calling @code{AC_OBSOLETE}.  If @var{suggestion} is given,
23831 it is printed at the end of the warning message; for example, it can be
23832 a suggestion for what to use instead of @var{this-macro-name}.
23834 For instance
23836 @example
23837 AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
23838 @end example
23840 @noindent
23841 You are encouraged to use @code{AU_DEFUN} instead, since it gives better
23842 services to the user (@pxref{AU_DEFUN}).
23843 @end defmac
23845 @defmac AC_OFF_T
23846 @acindex{OFF_T}
23847 Replaced by @code{AC_TYPE_OFF_T} (@pxref{AC_TYPE_OFF_T}).
23848 @end defmac
23850 @defmac AC_OUTPUT (@ovar{file}@dots{}, @ovar{extra-cmds}, @ovar{init-cmds})
23851 @acindex{OUTPUT}
23852 The use of @code{AC_OUTPUT} with arguments is deprecated.  This obsoleted
23853 interface is equivalent to:
23855 @example
23856 @group
23857 AC_CONFIG_FILES(@var{file}@dots{})
23858 AC_CONFIG_COMMANDS([default],
23859                    @var{extra-cmds}, @var{init-cmds})
23860 AC_OUTPUT
23861 @end group
23862 @end example
23864 @noindent
23865 See @ref{AC_CONFIG_FILES}, @ref{AC_CONFIG_COMMANDS}, and @ref{AC_OUTPUT}.
23866 @end defmac
23868 @defmac AC_OUTPUT_COMMANDS (@var{extra-cmds}, @ovar{init-cmds})
23869 @acindex{OUTPUT_COMMANDS}
23870 Specify additional shell commands to run at the end of
23871 @file{config.status}, and shell commands to initialize any variables
23872 from @command{configure}.  This macro may be called multiple times.  It is
23873 obsolete, replaced by @code{AC_CONFIG_COMMANDS} (@pxref{AC_CONFIG_COMMANDS}).
23875 Here is an unrealistic example:
23877 @example
23878 fubar=27
23879 AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.],
23880                    [fubar=$fubar])
23881 AC_OUTPUT_COMMANDS([echo this is another, extra, bit],
23882                    [echo init bit])
23883 @end example
23885 Aside from the fact that @code{AC_CONFIG_COMMANDS} requires an
23886 additional key, an important difference is that
23887 @code{AC_OUTPUT_COMMANDS} is quoting its arguments twice, unlike
23888 @code{AC_CONFIG_COMMANDS}.  This means that @code{AC_CONFIG_COMMANDS}
23889 can safely be given macro calls as arguments:
23891 @example
23892 AC_CONFIG_COMMANDS(foo, [my_FOO()])
23893 @end example
23895 @noindent
23896 Conversely, where one level of quoting was enough for literal strings
23897 with @code{AC_OUTPUT_COMMANDS}, you need two with
23898 @code{AC_CONFIG_COMMANDS}.  The following lines are equivalent:
23900 @example
23901 @group
23902 AC_OUTPUT_COMMANDS([echo "Square brackets: []"])
23903 AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
23904 @end group
23905 @end example
23906 @end defmac
23908 @defmac AC_PID_T
23909 @acindex{PID_T}
23910 Replaced by @code{AC_TYPE_PID_T} (@pxref{AC_TYPE_PID_T}).
23911 @end defmac
23913 @defmac AC_PREFIX
23914 @acindex{PREFIX}
23915 Replaced by @code{AC_PREFIX_PROGRAM} (@pxref{AC_PREFIX_PROGRAM}).
23916 @end defmac
23918 @defmac AC_PROG_CC_C89
23919 @acindex{PROG_CC_C89}
23920 Now done by @code{AC_PROG_CC} (@pxref{AC_PROG_CC}).
23921 @end defmac
23923 @defmac AC_PROG_CC_C99
23924 @acindex{PROG_CC_C99}
23925 Now done by @code{AC_PROG_CC} (@pxref{AC_PROG_CC}).
23926 @end defmac
23928 @defmac AC_PROG_CC_STDC
23929 @acindex{PROG_CC_STDC}
23930 Now done by @code{AC_PROG_CC} (@pxref{AC_PROG_CC}).
23931 @end defmac
23933 @defmac AC_PROGRAMS_CHECK
23934 @acindex{PROGRAMS_CHECK}
23935 Replaced by @code{AC_CHECK_PROGS} (@pxref{AC_CHECK_PROGS}).
23936 @end defmac
23938 @defmac AC_PROGRAMS_PATH
23939 @acindex{PROGRAMS_PATH}
23940 Replaced by @code{AC_PATH_PROGS} (@pxref{AC_PATH_PROGS}).
23941 @end defmac
23943 @defmac AC_PROGRAM_CHECK
23944 @acindex{PROGRAM_CHECK}
23945 Replaced by @code{AC_CHECK_PROG} (@pxref{AC_CHECK_PROG}).
23946 @end defmac
23948 @defmac AC_PROGRAM_EGREP
23949 @acindex{PROGRAM_EGREP}
23950 Replaced by @code{AC_EGREP_CPP} (@pxref{AC_EGREP_CPP}).
23951 @end defmac
23953 @defmac AC_PROGRAM_PATH
23954 @acindex{PROGRAM_PATH}
23955 Replaced by @code{AC_PATH_PROG} (@pxref{AC_PATH_PROG}).
23956 @end defmac
23958 @defmac AC_REMOTE_TAPE
23959 @acindex{REMOTE_TAPE}
23960 Removed because of limited usefulness.
23961 @end defmac
23963 @defmac AC_RESTARTABLE_SYSCALLS
23964 @acindex{RESTARTABLE_SYSCALLS}
23965 This macro was renamed @code{AC_SYS_RESTARTABLE_SYSCALLS}.  However,
23966 these days portable programs should use @code{sigaction} with
23967 @code{SA_RESTART} if they want restartable system calls.  They should
23968 not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
23969 system call is restartable is a dynamic issue, not a configuration-time
23970 issue.
23971 @end defmac
23973 @defmac AC_RETSIGTYPE
23974 @acindex{RETSIGTYPE}
23975 Replaced by @code{AC_TYPE_SIGNAL} (@pxref{AC_TYPE_SIGNAL}), which itself
23976 is obsolete when assuming C89 or better.
23977 @end defmac
23979 @defmac AC_RSH
23980 @acindex{RSH}
23981 Removed because of limited usefulness.
23982 @end defmac
23984 @defmac AC_SCO_INTL
23985 @acindex{SCO_INTL}
23986 @ovindex LIBS
23987 If on SCO Unix, add @option{-lintl} to output variable @code{LIBS}.  This
23988 macro used to do this:
23990 @example
23991 AC_CHECK_LIB([intl], [strftime], [LIBS="-lintl $LIBS"])
23992 @end example
23994 @noindent
23995 Now it just calls @code{AC_FUNC_STRFTIME} instead (@pxref{AC_FUNC_STRFTIME}).
23996 @end defmac
23998 @defmac AC_SETVBUF_REVERSED
23999 @acindex{SETVBUF_REVERSED}
24000 Replaced by
24001 @example
24002 AC_FUNC_SETVBUF_REVERSED
24003 @end example
24004 @noindent
24005 @xref{AC_FUNC_SETVBUF_REVERSED}.
24006 @end defmac
24008 @defmac AC_SET_MAKE
24009 @acindex{SET_MAKE}
24010 Replaced by @code{AC_PROG_MAKE_SET} (@pxref{AC_PROG_MAKE_SET}).
24011 @end defmac
24013 @defmac AC_SIZEOF_TYPE
24014 @acindex{SIZEOF_TYPE}
24015 Replaced by @code{AC_CHECK_SIZEOF} (@pxref{AC_CHECK_SIZEOF}).
24016 @end defmac
24018 @defmac AC_SIZE_T
24019 @acindex{SIZE_T}
24020 Replaced by @code{AC_TYPE_SIZE_T} (@pxref{AC_TYPE_SIZE_T}).
24021 @end defmac
24023 @defmac AC_STAT_MACROS_BROKEN
24024 @acindex{STAT_MACROS_BROKEN}
24025 Replaced by @code{AC_HEADER_STAT} (@pxref{AC_HEADER_STAT}).
24026 @end defmac
24028 @defmac AC_STDC_HEADERS
24029 @acindex{STDC_HEADERS}
24030 Replaced by @code{AC_HEADER_STDC} (@pxref{AC_HEADER_STDC}), which
24031 is itself obsolete.  Nowadays it is safe to assume the facilities of C90
24032 exist.
24033 @end defmac
24035 @defmac AC_STRCOLL
24036 @acindex{STRCOLL}
24037 Replaced by @code{AC_FUNC_STRCOLL} (@pxref{AC_FUNC_STRCOLL}).
24038 @end defmac
24040 @defmac AC_STRUCT_ST_BLKSIZE
24041 @acindex{STRUCT_ST_BLKSIZE}
24042 @cvindex HAVE_STRUCT_STAT_ST_BLKSIZE
24043 @cvindex HAVE_ST_BLKSIZE
24044 If @code{struct stat} contains an @code{st_blksize} member, define
24045 @code{HAVE_STRUCT_STAT_ST_BLKSIZE}.  The former name,
24046 @code{HAVE_ST_BLKSIZE} is to be avoided, as its support will cease in
24047 the future.  This macro is obsoleted, and should be replaced by
24049 @example
24050 AC_CHECK_MEMBERS([struct stat.st_blksize])
24051 @end example
24052 @noindent
24053 @xref{AC_CHECK_MEMBERS}.
24054 @end defmac
24056 @defmac AC_STRUCT_ST_RDEV
24057 @acindex{STRUCT_ST_RDEV}
24058 @cvindex HAVE_ST_RDEV
24059 @cvindex HAVE_STRUCT_STAT_ST_RDEV
24060 If @code{struct stat} contains an @code{st_rdev} member, define
24061 @code{HAVE_STRUCT_STAT_ST_RDEV}.  The former name for this macro,
24062 @code{HAVE_ST_RDEV}, is to be avoided as it will cease to be supported
24063 in the future.  Actually, even the new macro is obsolete and should be
24064 replaced by:
24065 @example
24066 AC_CHECK_MEMBERS([struct stat.st_rdev])
24067 @end example
24068 @noindent
24069 @xref{AC_CHECK_MEMBERS}.
24070 @end defmac
24072 @defmac AC_ST_BLKSIZE
24073 @acindex{ST_BLKSIZE}
24074 Replaced by @code{AC_CHECK_MEMBERS} (@pxref{AC_CHECK_MEMBERS}).
24075 @end defmac
24077 @defmac AC_ST_BLOCKS
24078 @acindex{ST_BLOCKS}
24079 Replaced by @code{AC_STRUCT_ST_BLOCKS} (@pxref{AC_STRUCT_ST_BLOCKS}).
24080 @end defmac
24082 @defmac AC_ST_RDEV
24083 @acindex{ST_RDEV}
24084 Replaced by @code{AC_CHECK_MEMBERS} (@pxref{AC_CHECK_MEMBERS}).
24085 @end defmac
24087 @defmac AC_SYS_RESTARTABLE_SYSCALLS
24088 @acindex{SYS_RESTARTABLE_SYSCALLS}
24089 @cvindex HAVE_RESTARTABLE_SYSCALLS
24090 If the system automatically restarts a system call that is interrupted
24091 by a signal, define @code{HAVE_RESTARTABLE_SYSCALLS}.  This macro does
24092 not check whether system calls are restarted in general---it checks whether a
24093 signal handler installed with @code{signal} (but not @code{sigaction})
24094 causes system calls to be restarted.  It does not check whether system calls
24095 can be restarted when interrupted by signals that have no handler.
24097 These days portable programs should use @code{sigaction} with
24098 @code{SA_RESTART} if they want restartable system calls.  They should
24099 not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
24100 system call is restartable is a dynamic issue, not a configuration-time
24101 issue.
24102 @end defmac
24104 @defmac AC_SYS_SIGLIST_DECLARED
24105 @acindex{SYS_SIGLIST_DECLARED}
24106 This macro was renamed @code{AC_DECL_SYS_SIGLIST}.  However, even that
24107 name is obsolete, as the same functionality is now achieved via
24108 @code{AC_CHECK_DECLS} (@pxref{AC_CHECK_DECLS}).
24109 @end defmac
24111 @defmac AC_TEST_CPP
24112 @acindex{TEST_CPP}
24113 This macro was renamed @code{AC_TRY_CPP}, which in turn was replaced by
24114 @code{AC_PREPROC_IFELSE} (@pxref{AC_PREPROC_IFELSE}).
24115 @end defmac
24117 @defmac AC_TEST_PROGRAM
24118 @acindex{TEST_PROGRAM}
24119 This macro was renamed @code{AC_TRY_RUN}, which in turn was replaced by
24120 @code{AC_RUN_IFELSE} (@pxref{AC_RUN_IFELSE}).
24121 @end defmac
24123 @defmac AC_TIMEZONE
24124 @acindex{TIMEZONE}
24125 Replaced by @code{AC_STRUCT_TIMEZONE} (@pxref{AC_STRUCT_TIMEZONE}).
24126 @end defmac
24128 @defmac AC_TIME_WITH_SYS_TIME
24129 @acindex{TIME_WITH_SYS_TIME}
24130 Replaced by @code{AC_HEADER_TIME} (@pxref{AC_HEADER_TIME}), which is
24131 itself obsolete; nowadays one need only do
24132 @samp{AC_CHECK_HEADERS([sys/time.h])}.
24133 @end defmac
24135 @defmac AC_TRY_COMPILE (@var{includes}, @var{function-body}, @
24136   @ovar{action-if-true}, @ovar{action-if-false})
24137 @acindex{TRY_COMPILE}
24138 Same as:
24140 @example
24141 AC_COMPILE_IFELSE(
24142   [AC_LANG_PROGRAM([[@var{includes}]],
24143      [[@var{function-body}]])],
24144   [@var{action-if-true}],
24145   [@var{action-if-false}])
24146 @end example
24148 @noindent
24149 @xref{Running the Compiler}.
24151 This macro double quotes both @var{includes} and @var{function-body}.
24153 For C and C++, @var{includes} is any @code{#include} statements needed
24154 by the code in @var{function-body} (@var{includes} is ignored if
24155 the currently selected language is Fortran or Fortran 77).  The compiler
24156 and compilation flags are determined by the current language
24157 (@pxref{Language Choice}).
24158 @end defmac
24160 @defmac AC_TRY_CPP (@var{input}, @ovar{action-if-true}, @ovar{action-if-false})
24161 @acindex{TRY_CPP}
24162 Same as:
24164 @example
24165 AC_PREPROC_IFELSE(
24166   [AC_LANG_SOURCE([[@var{input}]])],
24167   [@var{action-if-true}],
24168   [@var{action-if-false}])
24169 @end example
24171 @noindent
24172 @xref{Running the Preprocessor}.
24174 This macro double quotes the @var{input}.
24175 @end defmac
24177 @defmac AC_TRY_LINK (@var{includes}, @var{function-body}, @
24178   @ovar{action-if-true}, @ovar{action-if-false})
24179 @acindex{TRY_LINK}
24180 Same as:
24182 @example
24183 AC_LINK_IFELSE(
24184   [AC_LANG_PROGRAM([[@var{includes}]],
24185      [[@var{function-body}]])],
24186   [@var{action-if-true}],
24187   [@var{action-if-false}])
24188 @end example
24190 @noindent
24191 @xref{Running the Compiler}.
24193 This macro double quotes both @var{includes} and @var{function-body}.
24195 Depending on the current language (@pxref{Language Choice}), create a
24196 test program to see whether a function whose body consists of
24197 @var{function-body} can be compiled and linked.  If the file compiles
24198 and links successfully, run shell commands @var{action-if-found},
24199 otherwise run @var{action-if-not-found}.
24201 This macro double quotes both @var{includes} and @var{function-body}.
24203 For C and C++, @var{includes} is any @code{#include} statements needed
24204 by the code in @var{function-body} (@var{includes} is ignored if
24205 the currently selected language is Fortran or Fortran 77).  The compiler
24206 and compilation flags are determined by the current language
24207 (@pxref{Language Choice}), and in addition @code{LDFLAGS} and
24208 @code{LIBS} are used for linking.
24209 @end defmac
24211 @defmac AC_TRY_LINK_FUNC (@var{function}, @ovar{action-if-found}, @
24212   @ovar{action-if-not-found})
24213 @acindex{TRY_LINK_FUNC}
24214 This macro is equivalent to
24215 @example
24216 AC_LINK_IFELSE([AC_LANG_CALL([], [@var{function}])],
24217   [@var{action-if-found}], [@var{action-if-not-found}])
24218 @end example
24219 @noindent
24220 @xref{AC_LINK_IFELSE}.
24221 @end defmac
24223 @defmac AC_TRY_RUN (@var{program}, @ovar{action-if-true}, @
24224   @ovar{action-if-false}, @dvar{action-if-cross-compiling, AC_MSG_FAILURE})
24225 @acindex{TRY_RUN}
24226 Same as:
24228 @example
24229 AC_RUN_IFELSE(
24230   [AC_LANG_SOURCE([[@var{program}]])],
24231   [@var{action-if-true}],
24232   [@var{action-if-false}],
24233   [@var{action-if-cross-compiling}])
24234 @end example
24236 @noindent
24237 @xref{Runtime}.
24238 @end defmac
24240 @anchor{AC_TYPE_SIGNAL}
24241 @defmac AC_TYPE_SIGNAL
24242 @acindex{TYPE_SIGNAL}
24243 @cvindex RETSIGTYPE
24244 @hdrindex{signal.h}
24245 If @file{signal.h} declares @code{signal} as returning a pointer to a
24246 function returning @code{void}, define @code{RETSIGTYPE} to be
24247 @code{void}; otherwise, define it to be @code{int}.  These days, it is
24248 portable to assume C89, and that signal handlers return @code{void},
24249 without needing to use this macro or @code{RETSIGTYPE}.
24251 When targeting older K&R C, it is possible to define signal handlers as
24252 returning type @code{RETSIGTYPE}, and omit a return statement:
24254 @example
24255 @group
24256 RETSIGTYPE
24257 hup_handler ()
24259 @dots{}
24261 @end group
24262 @end example
24263 @end defmac
24265 @defmac AC_UID_T
24266 @acindex{UID_T}
24267 Replaced by @code{AC_TYPE_UID_T} (@pxref{AC_TYPE_UID_T}).
24268 @end defmac
24270 @defmac AC_UNISTD_H
24271 @acindex{UNISTD_H}
24272 Same as @samp{AC_CHECK_HEADERS([unistd.h])} (@pxref{AC_CHECK_HEADERS}),
24273 which is one of the tests done as a side effect by
24274 @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), so usually
24275 unnecessary to write explicitly.
24276 @end defmac
24278 @defmac AC_USG
24279 @acindex{USG}
24280 @cvindex USG
24281 Define @code{USG} if the BSD string functions (@code{bcopy},
24282 @code{bzero}, @code{index}, @code{rindex}, etc) are @emph{not} defined
24283 in @file{strings.h}.  Modern code should assume @file{string.h} exists
24284 and should use the ISO C string functions (@code{memmove}, @code{memset},
24285 @code{strchr}, @code{strrchr}, etc) unconditionally.
24287 @file{strings.h} may be the only header that declares @code{strcasecmp},
24288 @code{strncasecmp}, and @code{ffs}.  @code{AC_INCLUDES_DEFAULT} checks
24289 for it (@pxref{Default Includes}); test @code{HAVE_STRINGS_H}.
24290 @end defmac
24292 @defmac AC_UTIME_NULL
24293 @acindex{UTIME_NULL}
24294 Replaced by @code{AC_FUNC_UTIME_NULL} (@pxref{AC_FUNC_UTIME_NULL}).
24295 @end defmac
24297 @defmac AC_VALIDATE_CACHED_SYSTEM_TUPLE (@ovar{cmd})
24298 @acindex{VALIDATE_CACHED_SYSTEM_TUPLE}
24299 If the cache file is inconsistent with the current host, target and
24300 build system types, it used to execute @var{cmd} or print a default
24301 error message.  This is now handled by default.
24302 @end defmac
24304 @defmac AC_VERBOSE (@var{result-description})
24305 @acindex{VERBOSE}
24306 Replaced by @code{AC_MSG_RESULT} (@pxref{AC_MSG_RESULT}).
24307 @end defmac
24309 @defmac AC_VFORK
24310 @acindex{VFORK}
24311 Replaced by @code{AC_FUNC_FORK} (@pxref{AC_FUNC_FORK}).
24312 @end defmac
24314 @defmac AC_VPRINTF
24315 @acindex{VPRINTF}
24316 Replaced by @code{AC_FUNC_VPRINTF} (@pxref{AC_FUNC_VPRINTF}).
24317 @end defmac
24319 @defmac AC_WAIT3
24320 @acindex{WAIT3}
24321 This macro was renamed @code{AC_FUNC_WAIT3}.  However, these days
24322 portable programs should use @code{waitpid}, not @code{wait3}, as
24323 @code{wait3} has been removed from Posix.
24324 @end defmac
24326 @defmac AC_WARN
24327 @acindex{WARN}
24328 Replaced by @code{AC_MSG_WARN} (@pxref{AC_MSG_WARN}).
24329 @end defmac
24331 @defmac AC_WITH (@var{package}, @var{action-if-given}, @
24332   @ovar{action-if-not-given})
24333 @acindex{WITH}
24334 This is an obsolete version of @code{AC_ARG_WITH} that does not
24335 support providing a help string (@pxref{AC_ARG_WITH}).
24336 @end defmac
24338 @defmac AC_WORDS_BIGENDIAN
24339 @acindex{WORDS_BIGENDIAN}
24340 Replaced by @code{AC_C_BIGENDIAN} (@pxref{AC_C_BIGENDIAN}).
24341 @end defmac
24343 @defmac AC_XENIX_DIR
24344 @acindex{XENIX_DIR}
24345 @ovindex LIBS
24346 This macro used to add @option{-lx} to output variable @code{LIBS} if on
24347 Xenix.  Also, if @file{dirent.h} is being checked for, added
24348 @option{-ldir} to @code{LIBS}.  Now it is merely an alias of
24349 @code{AC_HEADER_DIRENT} instead, plus some code to detect whether
24350 running XENIX on which you should not depend:
24352 @example
24353 AC_MSG_CHECKING([for Xenix])
24354 AC_EGREP_CPP([yes],
24355 [#if defined M_XENIX && !defined M_UNIX
24356   yes
24357 #endif],
24358              [AC_MSG_RESULT([yes]); XENIX=yes],
24359              [AC_MSG_RESULT([no]); XENIX=])
24360 @end example
24361 @noindent
24362 Don't use this macro, the dignified means to check the nature of the
24363 host is using @code{AC_CANONICAL_HOST} (@pxref{Canonicalizing}).
24364 @end defmac
24366 @defmac AC_YYTEXT_POINTER
24367 @acindex{YYTEXT_POINTER}
24368 This macro was renamed @code{AC_DECL_YYTEXT}, which in turn was
24369 integrated into @code{AC_PROG_LEX} (@pxref{AC_PROG_LEX}).
24370 @end defmac
24372 @node Autoconf 1
24373 @section Upgrading From Version 1
24374 @cindex Upgrading autoconf
24375 @cindex Autoconf upgrading
24377 Autoconf version 2 is mostly backward compatible with version 1.
24378 However, it introduces better ways to do some things, and doesn't
24379 support some of the ugly things in version 1.  So, depending on how
24380 sophisticated your @file{configure.ac} files are, you might have to do
24381 some manual work in order to upgrade to version 2.  This chapter points
24382 out some problems to watch for when upgrading.  Also, perhaps your
24383 @command{configure} scripts could benefit from some of the new features in
24384 version 2; the changes are summarized in the file @file{NEWS} in the
24385 Autoconf distribution.
24387 @menu
24388 * Changed File Names::          Files you might rename
24389 * Changed Makefiles::           New things to put in @file{Makefile.in}
24390 * Changed Macros::              Macro calls you might replace
24391 * Changed Results::             Changes in how to check test results
24392 * Changed Macro Writing::       Better ways to write your own macros
24393 @end menu
24395 @node Changed File Names
24396 @subsection Changed File Names
24398 If you have an @file{aclocal.m4} installed with Autoconf (as opposed to
24399 in a particular package's source directory), you must rename it to
24400 @file{acsite.m4}.  @xref{autoconf Invocation}.
24402 If you distribute @file{install.sh} with your package, rename it to
24403 @file{install-sh} so @command{make} builtin rules don't inadvertently
24404 create a file called @file{install} from it.  @code{AC_PROG_INSTALL}
24405 looks for the script under both names, but it is best to use the new name.
24407 If you were using @file{config.h.top}, @file{config.h.bot}, or
24408 @file{acconfig.h}, you still can, but you have less clutter if you
24409 use the @code{AH_} macros.  @xref{Autoheader Macros}.
24411 @node Changed Makefiles
24412 @subsection Changed Makefiles
24414 Add @samp{@@CFLAGS@@}, @samp{@@CPPFLAGS@@}, and @samp{@@LDFLAGS@@} in
24415 your @file{Makefile.in} files, so they can take advantage of the values
24416 of those variables in the environment when @command{configure} is run.
24417 Doing this isn't necessary, but it's a convenience for users.
24419 Also add @samp{@@configure_input@@} in a comment to each input file for
24420 @code{AC_OUTPUT}, so that the output files contain a comment saying
24421 they were produced by @command{configure}.  Automatically selecting the
24422 right comment syntax for all the kinds of files that people call
24423 @code{AC_OUTPUT} on became too much work.
24425 Add @file{config.log} and @file{config.cache} to the list of files you
24426 remove in @code{distclean} targets.
24428 If you have the following in @file{Makefile.in}:
24430 @example
24431 prefix = /usr/local
24432 exec_prefix = $(prefix)
24433 @end example
24435 @noindent
24436 you must change it to:
24438 @example
24439 prefix = @@prefix@@
24440 exec_prefix = @@exec_prefix@@
24441 @end example
24443 @noindent
24444 The old behavior of replacing those variables without @samp{@@}
24445 characters around them has been removed.
24447 @node Changed Macros
24448 @subsection Changed Macros
24450 Many of the macros were renamed in Autoconf version 2.  You can still
24451 use the old names, but the new ones are clearer, and it's easier to find
24452 the documentation for them.  @xref{Obsolete Macros}, for a table showing the
24453 new names for the old macros.  Use the @command{autoupdate} program to
24454 convert your @file{configure.ac} to using the new macro names.
24455 @xref{autoupdate Invocation}.
24457 Some macros have been superseded by similar ones that do the job better,
24458 but are not call-compatible.  If you get warnings about calling obsolete
24459 macros while running @command{autoconf}, you may safely ignore them, but
24460 your @command{configure} script generally works better if you follow
24461 the advice that is printed about what to replace the obsolete macros with.  In
24462 particular, the mechanism for reporting the results of tests has
24463 changed.  If you were using @command{echo} or @code{AC_VERBOSE} (perhaps
24464 via @code{AC_COMPILE_CHECK}), your @command{configure} script's output
24465 looks better if you switch to @code{AC_MSG_CHECKING} and
24466 @code{AC_MSG_RESULT}.  @xref{Printing Messages}.  Those macros work best
24467 in conjunction with cache variables.  @xref{Caching Results}.
24471 @node Changed Results
24472 @subsection Changed Results
24474 If you were checking the results of previous tests by examining the
24475 shell variable @code{DEFS}, you need to switch to checking the values of
24476 the cache variables for those tests.  @code{DEFS} no longer exists while
24477 @command{configure} is running; it is only created when generating output
24478 files.  This difference from version 1 is because properly quoting the
24479 contents of that variable turned out to be too cumbersome and
24480 inefficient to do every time @code{AC_DEFINE} is called.  @xref{Cache
24481 Variable Names}.
24483 For example, here is a @file{configure.ac} fragment written for Autoconf
24484 version 1:
24486 @example
24487 AC_HAVE_FUNCS(syslog)
24488 case "$DEFS" in
24489 *-DHAVE_SYSLOG*) ;;
24490 *) # syslog is not in the default libraries.  See if it's in some other.
24491   saved_LIBS="$LIBS"
24492   for lib in bsd socket inet; do
24493     AC_CHECKING(for syslog in -l$lib)
24494     LIBS="-l$lib $saved_LIBS"
24495     AC_HAVE_FUNCS(syslog)
24496     case "$DEFS" in
24497     *-DHAVE_SYSLOG*) break ;;
24498     *) ;;
24499     esac
24500     LIBS="$saved_LIBS"
24501   done ;;
24502 esac
24503 @end example
24505 Here is a way to write it for version 2:
24507 @example
24508 AC_CHECK_FUNCS([syslog])
24509 if test "x$ac_cv_func_syslog" = xno; then
24510   # syslog is not in the default libraries.  See if it's in some other.
24511   for lib in bsd socket inet; do
24512     AC_CHECK_LIB([$lib], [syslog], [AC_DEFINE([HAVE_SYSLOG])
24513       LIBS="-l$lib $LIBS"; break])
24514   done
24516 @end example
24518 If you were working around bugs in @code{AC_DEFINE_UNQUOTED} by adding
24519 backslashes before quotes, you need to remove them.  It now works
24520 predictably, and does not treat quotes (except back quotes) specially.
24521 @xref{Setting Output Variables}.
24523 All of the Boolean shell variables set by Autoconf macros now use
24524 @samp{yes} for the true value.  Most of them use @samp{no} for false,
24525 though for backward compatibility some use the empty string instead.  If
24526 you were relying on a shell variable being set to something like 1 or
24527 @samp{t} for true, you need to change your tests.
24529 @node Changed Macro Writing
24530 @subsection Changed Macro Writing
24532 When defining your own macros, you should now use @code{AC_DEFUN}
24533 instead of @code{define}.  @code{AC_DEFUN} automatically calls
24534 @code{AC_PROVIDE} and ensures that macros called via @code{AC_REQUIRE}
24535 do not interrupt other macros, to prevent nested @samp{checking@dots{}}
24536 messages on the screen.  There's no actual harm in continuing to use the
24537 older way, but it's less convenient and attractive.  @xref{Macro
24538 Definitions}.
24540 You probably looked at the macros that came with Autoconf as a guide for
24541 how to do things.  It would be a good idea to take a look at the new
24542 versions of them, as the style is somewhat improved and they take
24543 advantage of some new features.
24545 If you were doing tricky things with undocumented Autoconf internals
24546 (macros, variables, diversions), check whether you need to change
24547 anything to account for changes that have been made.  Perhaps you can
24548 even use an officially supported technique in version 2 instead of
24549 kludging.  Or perhaps not.
24551 To speed up your locally written feature tests, add caching to them.
24552 See whether any of your tests are of general enough usefulness to
24553 encapsulate them into macros that you can share.
24556 @node Autoconf 2.13
24557 @section Upgrading From Version 2.13
24558 @cindex Upgrading autoconf
24559 @cindex Autoconf upgrading
24561 The introduction of the previous section (@pxref{Autoconf 1}) perfectly
24562 suits this section@enddots{}
24564 @quotation
24565 Autoconf version 2.50 is mostly backward compatible with version 2.13.
24566 However, it introduces better ways to do some things, and doesn't
24567 support some of the ugly things in version 2.13.  So, depending on how
24568 sophisticated your @file{configure.ac} files are, you might have to do
24569 some manual work in order to upgrade to version 2.50.  This chapter
24570 points out some problems to watch for when upgrading.  Also, perhaps
24571 your @command{configure} scripts could benefit from some of the new
24572 features in version 2.50; the changes are summarized in the file
24573 @file{NEWS} in the Autoconf distribution.
24574 @end quotation
24576 @menu
24577 * Changed Quotation::           Broken code which used to work
24578 * New Macros::                  Interaction with foreign macros
24579 * Hosts and Cross-Compilation::  Bugward compatibility kludges
24580 * AC_LIBOBJ vs LIBOBJS::        LIBOBJS is a forbidden token
24581 * AC_ACT_IFELSE vs AC_TRY_ACT::  A more generic scheme for testing sources
24582 @end menu
24584 @node Changed Quotation
24585 @subsection Changed Quotation
24587 The most important changes are invisible to you: the implementation of
24588 most macros have completely changed.  This allowed more factorization of
24589 the code, better error messages, a higher uniformity of the user's
24590 interface etc.  Unfortunately, as a side effect, some construct which
24591 used to (miraculously) work might break starting with Autoconf 2.50.
24592 The most common culprit is bad quotation.
24594 For instance, in the following example, the message is not properly
24595 quoted:
24597 @example
24598 AC_INIT
24599 AC_CHECK_HEADERS(foo.h, ,
24600   AC_MSG_ERROR(cannot find foo.h, bailing out))
24601 AC_OUTPUT
24602 @end example
24604 @noindent
24605 Autoconf 2.13 simply ignores it:
24607 @example
24608 $ @kbd{autoconf-2.13; ./configure --silent}
24609 creating cache ./config.cache
24610 configure: error: cannot find foo.h
24612 @end example
24614 @noindent
24615 while Autoconf 2.50 produces a broken @file{configure}:
24617 @example
24618 $ @kbd{autoconf-2.50; ./configure --silent}
24619 configure: error: cannot find foo.h
24620 ./configure: exit: bad non-numeric arg `bailing'
24621 ./configure: exit: bad non-numeric arg `bailing'
24623 @end example
24625 The message needs to be quoted, and the @code{AC_MSG_ERROR} invocation
24626 too!
24628 @example
24629 AC_INIT([Example], [1.0], [bug-example@@example.org])
24630 AC_CHECK_HEADERS([foo.h], [],
24631   [AC_MSG_ERROR([cannot find foo.h, bailing out])])
24632 AC_OUTPUT
24633 @end example
24635 Many many (and many more) Autoconf macros were lacking proper quotation,
24636 including no less than@dots{} @code{AC_DEFUN} itself!
24638 @example
24639 $ @kbd{cat configure.in}
24640 AC_DEFUN([AC_PROG_INSTALL],
24641 [# My own much better version
24643 AC_INIT
24644 AC_PROG_INSTALL
24645 AC_OUTPUT
24646 $ @kbd{autoconf-2.13}
24647 autoconf: Undefined macros:
24648 ***BUG in Autoconf--please report*** AC_FD_MSG
24649 ***BUG in Autoconf--please report*** AC_EPI
24650 configure.in:1:AC_DEFUN([AC_PROG_INSTALL],
24651 configure.in:5:AC_PROG_INSTALL
24652 $ @kbd{autoconf-2.50}
24654 @end example
24657 @node New Macros
24658 @subsection New Macros
24660 @cindex undefined macro
24661 @cindex @code{_m4_divert_diversion}
24663 While Autoconf was relatively dormant in the late 1990s, Automake
24664 provided Autoconf-like macros for a while.  Starting with Autoconf 2.50
24665 in 2001, Autoconf provided
24666 versions of these macros, integrated in the @code{AC_} namespace,
24667 instead of @code{AM_}.  But in order to ease the upgrading via
24668 @command{autoupdate}, bindings to such @code{AM_} macros are provided.
24670 Unfortunately older versions of Automake (e.g., Automake 1.4)
24671 did not quote the names of these macros.
24672 Therefore, when @command{m4} finds something like
24673 @samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, @dots{})} in @file{aclocal.m4},
24674 @code{AM_TYPE_PTRDIFF_T} is
24675 expanded, replaced with its Autoconf definition.
24677 Fortunately Autoconf catches pre-@code{AC_INIT} expansions, and
24678 complains, in its own words:
24680 @example
24681 $ @kbd{cat configure.ac}
24682 AC_INIT([Example], [1.0], [bug-example@@example.org])
24683 AM_TYPE_PTRDIFF_T
24684 $ @kbd{aclocal-1.4}
24685 $ @kbd{autoconf}
24686 aclocal.m4:17: error: m4_defn: undefined macro: _m4_divert_diversion
24687 aclocal.m4:17: the top level
24688 autom4te: m4 failed with exit status: 1
24690 @end example
24692 Modern versions of Automake no longer define most of these
24693 macros, and properly quote the names of the remaining macros.
24694 If you must use an old Automake, do not depend upon macros from Automake
24695 as it is simply not its job
24696 to provide macros (but the one it requires itself):
24698 @example
24699 $ @kbd{cat configure.ac}
24700 AC_INIT([Example], [1.0], [bug-example@@example.org])
24701 AM_TYPE_PTRDIFF_T
24702 $ @kbd{rm aclocal.m4}
24703 $ @kbd{autoupdate}
24704 autoupdate: `configure.ac' is updated
24705 $ @kbd{cat configure.ac}
24706 AC_INIT([Example], [1.0], [bug-example@@example.org])
24707 AC_CHECK_TYPES([ptrdiff_t])
24708 $ @kbd{aclocal-1.4}
24709 $ @kbd{autoconf}
24711 @end example
24714 @node Hosts and Cross-Compilation
24715 @subsection Hosts and Cross-Compilation
24716 @cindex Cross compilation
24718 Based on the experience of compiler writers, and after long public
24719 debates, many aspects of the cross-compilation chain have changed:
24721 @itemize @minus
24722 @item
24723 the relationship between the build, host, and target architecture types,
24725 @item
24726 the command line interface for specifying them to @command{configure},
24728 @item
24729 the variables defined in @command{configure},
24731 @item
24732 the enabling of cross-compilation mode.
24733 @end itemize
24735 @sp 1
24737 The relationship between build, host, and target have been cleaned up:
24738 the chain of default is now simply: target defaults to host, host to
24739 build, and build to the result of @command{config.guess}.  Nevertheless,
24740 in order to ease the transition from 2.13 to 2.50, the following
24741 transition scheme is implemented.  @emph{Do not rely on it}, as it will
24742 be completely disabled in a couple of releases (we cannot keep it, as it
24743 proves to cause more problems than it cures).
24745 They all default to the result of running @command{config.guess}, unless
24746 you specify either @option{--build} or @option{--host}.  In this case,
24747 the default becomes the system type you specified.  If you specify both,
24748 and they're different, @command{configure} enters cross compilation
24749 mode, so it doesn't run any tests that require execution.
24751 Hint: if you mean to override the result of @command{config.guess},
24752 prefer @option{--build} over @option{--host}.
24754 @sp 1
24756 For backward compatibility, @command{configure} accepts a system
24757 type as an option by itself.  Such an option overrides the
24758 defaults for build, host, and target system types.  The following
24759 configure statement configures a cross toolchain that runs on
24760 NetBSD/alpha but generates code for GNU Hurd/sparc,
24761 which is also the build platform.
24763 @example
24764 ./configure --host=alpha-netbsd sparc-gnu
24765 @end example
24767 @sp 1
24769 In Autoconf 2.13 and before, the variables @code{build}, @code{host},
24770 and @code{target} had a different semantics before and after the
24771 invocation of @code{AC_CANONICAL_BUILD} etc.  Now, the argument of
24772 @option{--build} is strictly copied into @code{build_alias}, and is left
24773 empty otherwise.  After the @code{AC_CANONICAL_BUILD}, @code{build} is
24774 set to the canonicalized build type.  To ease the transition, before,
24775 its contents is the same as that of @code{build_alias}.  Do @emph{not}
24776 rely on this broken feature.
24778 For consistency with the backward compatibility scheme exposed above,
24779 when @option{--host} is specified but @option{--build} isn't, the build
24780 system is assumed to be the same as @option{--host}, and
24781 @samp{build_alias} is set to that value.  Eventually, this
24782 historically incorrect behavior will go away.
24784 @sp 1
24786 The former scheme to enable cross-compilation proved to cause more harm
24787 than good, in particular, it used to be triggered too easily, leaving
24788 regular end users puzzled in front of cryptic error messages.
24789 @command{configure} could even enter cross-compilation mode only
24790 because the compiler was not functional.  This is mainly because
24791 @command{configure} used to try to detect cross-compilation, instead of
24792 waiting for an explicit flag from the user.
24794 Now, @command{configure} enters cross-compilation mode if and only if
24795 @option{--host} is passed.
24797 That's the short documentation.  To ease the transition between 2.13 and
24798 its successors, a more complicated scheme is implemented.  @emph{Do not
24799 rely on the following}, as it will be removed in the near future.
24801 If you specify @option{--host}, but not @option{--build}, when
24802 @command{configure} performs the first compiler test it tries to run
24803 an executable produced by the compiler.  If the execution fails, it
24804 enters cross-compilation mode.  This is fragile.  Moreover, by the time
24805 the compiler test is performed, it may be too late to modify the
24806 build-system type: other tests may have already been performed.
24807 Therefore, whenever you specify @option{--host}, be sure to specify
24808 @option{--build} too.
24810 @example
24811 ./configure --build=x86_64-pc-linux-gnu --host=x86_64-w64-mingw64
24812 @end example
24814 @noindent
24815 enters cross-compilation mode.  The former interface, which
24816 consisted in setting the compiler to a cross-compiler without informing
24817 @command{configure} is obsolete.  For instance, @command{configure}
24818 fails if it can't run the code generated by the specified compiler if you
24819 configure as follows:
24821 @example
24822 ./configure CC=x86_64-w64-mingw64-gcc
24823 @end example
24826 @node AC_LIBOBJ vs LIBOBJS
24827 @subsection @code{AC_LIBOBJ} vs.@: @code{LIBOBJS}
24829 Up to Autoconf 2.13, the replacement of functions was triggered via the
24830 variable @code{LIBOBJS}.  Since Autoconf 2.50, the macro
24831 @code{AC_LIBOBJ} should be used instead (@pxref{Generic Functions}).
24832 Starting at Autoconf 2.53, the use of @code{LIBOBJS} is an error.
24834 This change is mandated by the unification of the GNU Build System
24835 components.  In particular, the various fragile techniques used to parse
24836 a @file{configure.ac} are all replaced with the use of traces.  As a
24837 consequence, any action must be traceable, which obsoletes critical
24838 variable assignments.  Fortunately, @code{LIBOBJS} was the only problem,
24839 and it can even be handled gracefully (read, ``without your having to
24840 change something'').
24842 There were two typical uses of @code{LIBOBJS}: asking for a replacement
24843 function, and adjusting @code{LIBOBJS} for Automake and/or Libtool.
24845 @sp 1
24847 As for function replacement, the fix is immediate: use
24848 @code{AC_LIBOBJ}.  For instance:
24850 @example
24851 LIBOBJS="$LIBOBJS fnmatch.o"
24852 LIBOBJS="$LIBOBJS malloc.$ac_objext"
24853 @end example
24855 @noindent
24856 should be replaced with:
24858 @example
24859 AC_LIBOBJ([fnmatch])
24860 AC_LIBOBJ([malloc])
24861 @end example
24863 @sp 1
24865 @ovindex LIBOBJDIR
24866 When used with Automake 1.10 or newer, a suitable value for
24867 @code{LIBOBJDIR} is set so that the @code{LIBOBJS} and @code{LTLIBOBJS}
24868 can be referenced from any @file{Makefile.am}.  Even without Automake,
24869 arranging for @code{LIBOBJDIR} to be set correctly enables
24870 referencing @code{LIBOBJS} and @code{LTLIBOBJS} in another directory.
24871 The @code{LIBOBJDIR} feature is experimental.
24874 @node AC_ACT_IFELSE vs AC_TRY_ACT
24875 @subsection @code{AC_@var{ACT}_IFELSE} vs.@: @code{AC_TRY_@var{ACT}}
24876 @c the anchor keeps the old node name, to try to avoid breaking links
24877 @anchor{AC_FOO_IFELSE vs AC_TRY_FOO}
24879 @acindex{@var{ACT}_IFELSE}
24880 @acindex{TRY_@var{ACT}}
24881 Since Autoconf 2.50, internal codes uses @code{AC_PREPROC_IFELSE},
24882 @code{AC_COMPILE_IFELSE}, @code{AC_LINK_IFELSE}, and
24883 @code{AC_RUN_IFELSE} on one hand and @code{AC_LANG_SOURCE},
24884 and @code{AC_LANG_PROGRAM} on the other hand instead of the deprecated
24885 @code{AC_TRY_CPP}, @code{AC_TRY_COMPILE}, @code{AC_TRY_LINK}, and
24886 @code{AC_TRY_RUN}.  The motivations where:
24887 @itemize @minus
24888 @item
24889 a more consistent interface: @code{AC_TRY_COMPILE} etc.@: were double
24890 quoting their arguments;
24892 @item
24893 the combinatorial explosion is solved by decomposing on the one hand the
24894 generation of sources, and on the other hand executing the program;
24896 @item
24897 this scheme helps supporting more languages than plain C and C++.
24898 @end itemize
24900 In addition to the change of syntax, the philosophy has changed too:
24901 while emphasis was put on speed at the expense of accuracy, today's
24902 Autoconf promotes accuracy of the testing framework at, ahem@dots{}, the
24903 expense of speed.
24906 As a perfect example of what is @emph{not} to be done, here is how to
24907 find out whether a header file contains a particular declaration, such
24908 as a typedef, a structure, a structure member, or a function.  Use
24909 @code{AC_EGREP_HEADER} instead of running @code{grep} directly on the
24910 header file; on some systems the symbol might be defined in another
24911 header file that the file you are checking includes.
24913 As a (bad) example, here is how you should not check for C preprocessor
24914 symbols, either defined by header files or predefined by the C
24915 preprocessor: using @code{AC_EGREP_CPP}:
24917 @example
24918 @group
24919 AC_EGREP_CPP(yes,
24920 [#ifdef _AIX
24921   yes
24922 #endif
24923 ], is_aix=yes, is_aix=no)
24924 @end group
24925 @end example
24927 The above example, properly written would (i) use
24928 @code{AC_LANG_PROGRAM}, and (ii) run the compiler:
24930 @example
24931 @group
24932 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
24933 [[#ifndef _AIX
24934  error: This isn't AIX!
24935 #endif
24936 ]])],
24937                    [is_aix=yes],
24938                    [is_aix=no])
24939 @end group
24940 @end example
24943 @c ============================= Generating Test Suites with Autotest
24945 @node Using Autotest
24946 @chapter Generating Test Suites with Autotest
24948 @cindex Autotest
24950 @display
24951 @strong{N.B.: This section describes a feature which is still
24952 stabilizing.  Although we believe that Autotest is useful as-is, this
24953 documentation describes an interface which might change in the future:
24954 do not depend upon Autotest without subscribing to the Autoconf mailing
24955 lists.}
24956 @end display
24958 It is paradoxical that portable projects depend on nonportable tools
24959 to run their test suite.  Autoconf by itself is the paragon of this
24960 problem: although it aims at perfectly portability, up to 2.13 its
24961 test suite was using DejaGNU, a rich and complex testing
24962 framework, but which is far from being standard on Posix systems.
24963 Worse yet, it was likely to be missing on the most fragile platforms,
24964 the very platforms that are most likely to torture Autoconf and
24965 exhibit deficiencies.
24967 To circumvent this problem, many package maintainers have developed their
24968 own testing framework, based on simple shell scripts whose sole outputs
24969 are exit status values describing whether the test succeeded.  Most of
24970 these tests share common patterns, and this can result in lots of
24971 duplicated code and tedious maintenance.
24973 Following exactly the same reasoning that yielded to the inception of
24974 Autoconf, Autotest provides a test suite generation framework, based on
24975 M4 macros building a portable shell script.  The suite itself is
24976 equipped with automatic logging and tracing facilities which greatly
24977 diminish the interaction with bug reporters, and simple timing reports.
24979 Autoconf itself has been using Autotest for years, and we do attest that
24980 it has considerably improved the strength of the test suite and the
24981 quality of bug reports.  Other projects are known to use some generation
24982 of Autotest, such as Bison, GNU Wdiff, GNU Tar, each of
24983 them with different needs, and this usage has validated Autotest as a general
24984 testing framework.
24986 Nonetheless, compared to DejaGNU, Autotest is inadequate for
24987 interactive tool testing, which is probably its main limitation.
24989 @menu
24990 * Using an Autotest Test Suite::  Autotest and the user
24991 * Writing Testsuites::          Autotest macros
24992 * testsuite Invocation::        Running @command{testsuite} scripts
24993 * Making testsuite Scripts::    Using autom4te to create @command{testsuite}
24994 @end menu
24996 @node Using an Autotest Test Suite
24997 @section Using an Autotest Test Suite
24999 @menu
25000 * testsuite Scripts::           The concepts of Autotest
25001 * Autotest Logs::               Their contents
25002 @end menu
25004 @node testsuite Scripts
25005 @subsection @command{testsuite} Scripts
25007 @cindex @command{testsuite}
25009 Generating testing or validation suites using Autotest is rather easy.
25010 The whole validation suite is held in a file to be processed through
25011 @command{autom4te}, itself using GNU M4 under the hood, to
25012 produce a stand-alone Bourne shell script which then gets distributed.
25013 Neither @command{autom4te} nor GNU M4 are needed at
25014 the installer's end.
25016 @cindex test group
25017 Each test of the validation suite should be part of some test group.  A
25018 @dfn{test group} is a sequence of interwoven tests that ought to be
25019 executed together, usually because one test in the group creates data
25020 files that a later test in the same group needs to read.  Complex test
25021 groups make later debugging more tedious.  It is much better to
25022 keep only a few tests per test group.  Ideally there is only one test
25023 per test group.
25025 For all but the simplest packages, some file such as @file{testsuite.at}
25026 does not fully hold all test sources, as these are often easier to
25027 maintain in separate files.  Each of these separate files holds a single
25028 test group, or a sequence of test groups all addressing some common
25029 functionality in the package.  In such cases, @file{testsuite.at}
25030 merely initializes the validation suite, and sometimes does elementary
25031 health checking, before listing include statements for all other test
25032 files.  The special file @file{package.m4}, containing the
25033 identification of the package, is automatically included if found.
25035 A convenient alternative consists in moving all the global issues
25036 (local Autotest macros, elementary health checking, and @code{AT_INIT}
25037 invocation) into the file @code{local.at}, and making
25038 @file{testsuite.at} be a simple list of @code{m4_include}s of sub test
25039 suites.  In such case, generating the whole test suite or pieces of it
25040 is only a matter of choosing the @command{autom4te} command line
25041 arguments.
25043 The validation scripts that Autotest produces are by convention called
25044 @command{testsuite}.  When run, @command{testsuite} executes each test
25045 group in turn, producing only one summary line per test to say if that
25046 particular test succeeded or failed.  At end of all tests, summarizing
25047 counters get printed.  One debugging directory is left for each test
25048 group which failed, if any: such directories are named
25049 @file{testsuite.dir/@var{nn}}, where @var{nn} is the sequence number of
25050 the test group, and they include:
25052 @itemize @bullet
25053 @item a debugging script named @file{run} which reruns the test in
25054 @dfn{debug mode} (@pxref{testsuite Invocation}).  The automatic generation
25055 of debugging scripts has the purpose of easing the chase for bugs.
25057 @item all the files created with @code{AT_DATA}
25059 @item all the Erlang source code files created with @code{AT_CHECK_EUNIT}
25061 @item a log of the run, named @file{testsuite.log}
25062 @end itemize
25064 In the ideal situation, none of the tests fail, and consequently no
25065 debugging directory is left behind for validation.
25067 It often happens in practice that individual tests in the validation
25068 suite need to get information coming out of the configuration process.
25069 Some of this information, common for all validation suites, is provided
25070 through the file @file{atconfig}, automatically created by
25071 @code{AC_CONFIG_TESTDIR}.  For configuration information which your
25072 testing environment specifically needs, you might prepare an optional
25073 file named @file{atlocal.in}, instantiated by @code{AC_CONFIG_FILES}.
25074 The configuration process produces @file{atconfig} and @file{atlocal}
25075 out of these two input files, and these two produced files are
25076 automatically read by the @file{testsuite} script.
25078 Here is a diagram showing the relationship between files.
25080 @noindent
25081 Files used in preparing a software package for distribution:
25083 @example
25084                 [package.m4] -->.
25085                                  \
25086 subfile-1.at ->.  [local.at] ---->+
25087     ...         \                  \
25088 subfile-i.at ---->-- testsuite.at -->-- autom4te* -->testsuite
25089     ...         /
25090 subfile-n.at ->'
25091 @end example
25093 @noindent
25094 Files used in configuring a software package:
25096 @example
25097                                      .--> atconfig
25098                                     /
25099 [atlocal.in] -->  config.status* --<
25100                                     \
25101                                      `--> [atlocal]
25102 @end example
25104 @noindent
25105 Files created during test suite execution:
25107 @example
25108 atconfig -->.                    .--> testsuite.log
25109              \                  /
25110               >-- testsuite* --<
25111              /                  \
25112 [atlocal] ->'                    `--> [testsuite.dir]
25113 @end example
25116 @node Autotest Logs
25117 @subsection Autotest Logs
25119 When run, the test suite creates a log file named after itself, e.g., a
25120 test suite named @command{testsuite} creates @file{testsuite.log}.  It
25121 contains a lot of information, usually more than maintainers actually
25122 need, but therefore most of the time it contains all that is needed:
25124 @table @asis
25125 @item command line arguments
25126 A bad but unfortunately widespread habit consists of
25127 setting environment variables before the command, such as in
25128 @samp{CC=my-home-grown-cc ./testsuite}.  The test suite does not
25129 know this change, hence (i) it cannot report it to you, and (ii)
25130 it cannot preserve the value of @code{CC} for subsequent runs.
25131 Autoconf faced exactly the same problem, and solved it by asking
25132 users to pass the variable definitions as command line arguments.
25133 Autotest requires this rule, too, but has no means to enforce it; the log
25134 then contains a trace of the variables that were changed by the user.
25136 @item @file{ChangeLog} excerpts
25137 The topmost lines of all the @file{ChangeLog} files found in the source
25138 hierarchy.  This is especially useful when bugs are reported against
25139 development versions of the package, since the version string does not
25140 provide sufficient information to know the exact state of the sources
25141 the user compiled.  Of course, this relies on the use of a
25142 @file{ChangeLog}.
25144 @item build machine
25145 Running a test suite in a cross-compile environment is not an easy task,
25146 since it would mean having the test suite run on a machine @var{build},
25147 while running programs on a machine @var{host}.  It is much simpler to
25148 run both the test suite and the programs on @var{host}, but then, from
25149 the point of view of the test suite, there remains a single environment,
25150 @var{host} = @var{build}.  The log contains relevant information on the
25151 state of the @var{build} machine, including some important environment
25152 variables.
25153 @c FIXME: How about having an M4sh macro to say `hey, log the value
25154 @c of `@dots{}'?  This would help both Autoconf and Autotest.
25156 @item tested programs
25157 The absolute file name and answers to @option{--version} of the tested
25158 programs (see @ref{Writing Testsuites}, @code{AT_TESTED}).
25160 @item configuration log
25161 The contents of @file{config.log}, as created by @command{configure},
25162 are appended.  It contains the configuration flags and a detailed report
25163 on the configuration itself.
25164 @end table
25167 @node Writing Testsuites
25168 @section Writing @file{testsuite.at}
25170 The @file{testsuite.at} is a Bourne shell script making use of special
25171 Autotest M4 macros.  It often contains a call to @code{AT_INIT} near
25172 its beginning followed by one call to @code{m4_include} per source file
25173 for tests.  Each such included file, or the remainder of
25174 @file{testsuite.at} if include files are not used, contain a sequence of
25175 test groups.  Each test group begins with a call to @code{AT_SETUP},
25176 then an arbitrary number of shell commands or calls to @code{AT_CHECK},
25177 and then completes with a call to @code{AT_CLEANUP}.  Multiple test
25178 groups can be categorized by a call to @code{AT_BANNER}.
25180 All of the public Autotest macros have all-uppercase names in the
25181 namespace @samp{^AT_} to prevent them from accidentally conflicting with
25182 other text; Autoconf also reserves the namespace @samp{^_AT_} for
25183 internal macros.  All shell variables used in the testsuite for internal
25184 purposes have mostly-lowercase names starting with @samp{at_}.  Autotest
25185 also uses here-document delimiters in the namespace @samp{^_AT[A-Z]}, and
25186 makes use of the file system namespace @samp{^at-}.
25188 Since Autoconf is built on top of M4sugar (@pxref{Programming in
25189 M4sugar}) and M4sh (@pxref{Programming in M4sh}), you must also be aware
25190 of those namespaces (@samp{^_?\(m4\|AS\)_}).  In general, you
25191 @emph{should not use} the namespace of a package that does not own the
25192 macro or shell code you are writing.
25194 @defmac AT_INIT (@ovar{name})
25195 @atindex{INIT}
25196 @c FIXME: Not clear, plus duplication of the information.
25197 Initialize Autotest.  Giving a @var{name} to the test suite is
25198 encouraged if your package includes several test suites.  Before this
25199 macro is called, @code{AT_PACKAGE_STRING} and
25200 @code{AT_PACKAGE_BUGREPORT} must be defined, which are used to display
25201 information about the testsuite to the user.  Typically, these macros
25202 are provided by a file @file{package.m4} built by @command{make}
25203 (@pxref{Making testsuite Scripts}), in order to inherit the package
25204 name, version, and bug reporting address from @file{configure.ac}.
25205 @end defmac
25207 @defmac AT_COPYRIGHT (@var{copyright-notice})
25208 @atindex{COPYRIGHT}
25209 @cindex Copyright Notice
25210 State that, in addition to the Free Software Foundation's copyright on
25211 the Autotest macros, parts of your test suite are covered by
25212 @var{copyright-notice}.
25214 The @var{copyright-notice} shows up in both the head of
25215 @command{testsuite} and in @samp{testsuite --version}.
25216 @end defmac
25218 @defmac AT_ARG_OPTION (@var{options}, @var{help-text}, @
25219   @ovar{action-if-given}, @ovar{action-if-not-given})
25220 @atindex{ARG_OPTION}
25221 @vrindex at_arg_@var{option}
25222 Accept options from the space-separated list @var{options}, a list that
25223 has leading dashes removed from the options.  Long options will be
25224 prefixed with @samp{--}, single-character options with @samp{-}.  The
25225 first word in this list is the primary @var{option}, any others are
25226 assumed to be short-hand aliases.  The variable associated with it
25227 is @code{at_arg_@var{option}}, with any dashes in @var{option} replaced
25228 with underscores.
25230 If the user passes @option{--@var{option}} to the @command{testsuite},
25231 the variable will be set to @samp{:}.  If the user does not pass the
25232 option, or passes @option{--no-@var{option}}, then the variable will be
25233 set to @samp{false}.
25235 @vrindex at_optarg
25236 @vrindex at_optarg_@var{option}
25237 @var{action-if-given} is run each time the option is encountered; here,
25238 the variable @code{at_optarg} will be set to @samp{:} or @samp{false} as
25239 appropriate.  @code{at_optarg} is actually just a copy of
25240 @code{at_arg_@var{option}}.
25242 @var{action-if-not-given} will be run once after option parsing is
25243 complete and if no option from @var{options} was used.
25245 @var{help-text} is added to the end of the list of options shown in
25246 @command{testsuite --help} (@pxref{AS_HELP_STRING}).
25248 It is recommended that you use a package-specific prefix to @var{options}
25249 names in order to avoid clashes with future Autotest built-in options.
25250 @end defmac
25252 @defmac AT_ARG_OPTION_ARG (@var{options}, @var{help-text}, @
25253   @ovar{action-if-given}, @ovar{action-if-not-given})
25254 @atindex{ARG_OPTION_ARG}
25255 @vrindex at_arg_@var{option}
25256 Accept options with arguments from the space-separated list
25257 @var{options}, a list that has leading dashes removed from the options.
25258 Long options will be prefixed with @samp{--}, single-character options
25259 with @samp{-}.  The first word in this list is the primary @var{option},
25260 any others are assumed to be short-hand aliases.  The variable associated
25261 with it is @code{at_arg_@var{option}}, with any dashes in @var{option}
25262 replaced with underscores.
25264 If the user passes @option{--@var{option}=@var{arg}} or
25265 @option{--@var{option} @var{arg}} to the @command{testsuite}, the
25266 variable will be set to @samp{@var{arg}}.
25268 @vrindex at_optarg
25269 @var{action-if-given} is run each time the option is encountered; here,
25270 the variable @code{at_optarg} will be set to @samp{@var{arg}}.
25271 @code{at_optarg} is actually just a copy of @code{at_arg_@var{option}}.
25273 @var{action-if-not-given} will be run once after option parsing is
25274 complete and if no option from @var{options} was used.
25276 @var{help-text} is added to the end of the list of options shown in
25277 @command{testsuite --help} (@pxref{AS_HELP_STRING}).
25279 It is recommended that you use a package-specific prefix to @var{options}
25280 names in order to avoid clashes with future Autotest built-in options.
25281 @end defmac
25283 @defmac AT_COLOR_TESTS
25284 @atindex{COLOR_TESTS}
25285 Enable colored test results by default when the output is connected to
25286 a terminal.
25287 @end defmac
25289 @defmac AT_TESTED (@var{executables})
25290 @atindex{TESTED}
25291 Log the file name and answer to @option{--version} of each program in
25292 space-separated list @var{executables}.  Several invocations register
25293 new executables, in other words, don't fear registering one program
25294 several times.
25296 Autotest test suites rely on @env{PATH} to find the tested program.
25297 This avoids the need to generate absolute names of the various tools, and
25298 makes it possible to test installed programs.  Therefore, knowing which
25299 programs are being exercised is crucial to understanding problems in
25300 the test suite itself, or its occasional misuses.  It is a good idea to
25301 also subscribe foreign programs you depend upon, to avoid incompatible
25302 diagnostics.
25304 @var{executables} is implicitly wrapped in shell double quotes, but it
25305 will still use shell variable expansion (@samp{$}), command substitution
25306 (@samp{`}), and backslash escaping (@samp{\}).  In particular, the
25307 @env{EXEEXT} variable is available if it is passed to the testsuite
25308 via @file{atlocal} or @file{atconfig}.
25309 @end defmac
25311 @sp 1
25313 @defmac AT_BANNER (@var{test-category-name})
25314 @atindex{BANNER}
25315 This macro identifies the start of a category of related test groups.
25316 When the resulting @file{testsuite} is invoked with more than one test
25317 group to run, its output will include a banner containing
25318 @var{test-category-name} prior to any tests run from that category.  The
25319 banner should be no more than about 40 or 50 characters.  A blank banner
25320 indicates uncategorized tests; an empty line will be inserted after
25321 tests from an earlier category, effectively ending that category.
25322 @end defmac
25324 @defmac AT_SETUP (@var{test-group-name})
25325 @atindex{SETUP}
25326 This macro starts a group of related tests, all to be executed in the
25327 same subshell.  It accepts a single argument, which holds a few words
25328 (no more than about 30 or 40 characters) quickly describing the purpose
25329 of the test group being started.  @var{test-group-name} must not expand
25330 to unbalanced quotes, although quadrigraphs can be used.
25331 @end defmac
25333 @defmac AT_KEYWORDS (@var{keywords})
25334 @atindex{KEYWORDS}
25335 Associate the space-separated list of @var{keywords} to the enclosing
25336 test group.  This makes it possible to run ``slices'' of the test suite.
25337 For instance, if some of your test groups exercise some @samp{foo}
25338 feature, then using @samp{AT_KEYWORDS(foo)} lets you run
25339 @samp{./testsuite -k foo} to run exclusively these test groups.  The
25340 @var{test-group-name} of the test group is automatically recorded to
25341 @code{AT_KEYWORDS}.
25343 Several invocations within a test group accumulate new keywords.  In
25344 other words, don't fear registering the same keyword several times in a
25345 test group.
25346 @end defmac
25348 @defmac AT_CAPTURE_FILE (@var{file})
25349 @atindex{CAPTURE_FILE}
25350 If the current test group fails, log the contents of @var{file}.
25351 Several identical calls within one test group have no additional effect.
25352 @end defmac
25354 @defmac AT_FAIL_IF (@var{shell-condition})
25355 @atindex{FAIL_IF}
25356 Make the test group fail and skip the rest of its execution, if
25357 @var{shell-condition} is true.  @var{shell-condition} is a shell expression
25358 such as a @code{test} command.  Tests before @command{AT_FAIL_IF}
25359 will be executed and may still cause the test group to be skipped.
25360 You can instantiate this macro many times from within the same test group.
25362 You should use this macro only for very simple failure conditions.  If the
25363 @var{shell-condition} could emit any kind of output you should instead
25364 use @command{AT_CHECK} like
25365 @example
25366 AT_CHECK([if @var{shell-condition}; then exit 99; fi])
25367 @end example
25368 @noindent
25369 so that such output is properly recorded in the @file{testsuite.log}
25370 file.
25371 @end defmac
25373 @defmac AT_SKIP_IF (@var{shell-condition})
25374 @atindex{SKIP_IF}
25375 Determine whether the test should be skipped because it requires
25376 features that are unsupported on the machine under test.
25377 @var{shell-condition} is a shell expression such as a @code{test}
25378 command.  Tests before @command{AT_SKIP_IF} will be executed
25379 and may still cause the test group to fail.  You can instantiate this
25380 macro many times from within the same test group.
25382 You should use this macro only for very simple skip conditions.  If the
25383 @var{shell-condition} could emit any kind of output you should instead
25384 use @command{AT_CHECK} like
25385 @example
25386 AT_CHECK([if @var{shell-condition}; then exit 77; fi])
25387 @end example
25388 @noindent
25389 so that such output is properly recorded in the @file{testsuite.log}
25390 file.
25391 @end defmac
25393 @defmac AT_XFAIL_IF (@var{shell-condition})
25394 @atindex{XFAIL_IF}
25395 Determine whether the test is expected to fail because it is a known
25396 bug (for unsupported features, you should skip the test).
25397 @var{shell-condition} is a shell expression such as a @code{test}
25398 command; you can instantiate this macro many times from within the
25399 same test group, and one of the conditions is enough to turn
25400 the test into an expected failure.
25401 @end defmac
25403 @defmac AT_CLEANUP
25404 @atindex{CLEANUP}
25405 End the current test group.
25406 @end defmac
25408 @sp 1
25410 @defmac AT_DATA (@var{file}, @var{contents})
25411 @defmacx AT_DATA_UNQUOTED (@var{file}, @var{contents})
25412 @atindex{DATA}
25413 Initialize an input data @var{file} with given @var{contents}.  Of
25414 course, the @var{contents} have to be properly quoted between square
25415 brackets to protect against included commas or spurious M4
25416 expansion.  @var{contents} must be empty or end with a newline.
25417 @var{file} must
25418 be a single shell word that expands into a single file name.
25420 The difference between @code{AT_DATA} and @code{AT_DATA_UNQUOTED} is
25421 that only the latter performs shell variable expansion (@samp{$}),
25422 command substitution (@samp{`}), and backslash escaping (@samp{\})
25423 on @var{contents}.
25424 @end defmac
25426 @defmac AT_CHECK (@var{commands}, @dvar{status, 0}, @ovar{stdout}, @
25427   @ovar{stderr}, @ovar{run-if-fail}, @ovar{run-if-pass})
25428 @defmacx AT_CHECK_UNQUOTED (@var{commands}, @dvar{status, 0}, @ovar{stdout}, @
25429   @ovar{stderr}, @ovar{run-if-fail}, @ovar{run-if-pass})
25430 @atindex{CHECK}
25431 @atindex{CHECK_UNQUOTED}
25432 @vrindex at_status
25433 Execute a test by performing given shell @var{commands} in a subshell.
25434 @var{commands} is output as-is, so shell expansions are honored.  These
25435 commands should normally exit with @var{status}, while producing expected
25436 @var{stdout} and @var{stderr} contents.  If @var{commands} exit with
25437 unexpected status 77, then the rest of the test group is skipped.  If
25438 @var{commands} exit with unexpected status 99, then the test group is
25439 immediately failed.  Otherwise, if this test fails, run shell commands
25440 @var{run-if-fail} or, if this test passes, run shell commands
25441 @var{run-if-pass}, both inside the current shell execution environment.
25442 At the beginning of @var{run-if-fail} and @var{run-if-pass}, the status of
25443 @var{commands} is available in the @code{at_status} shell variable.
25445 This macro must be invoked in between @code{AT_SETUP} and @code{AT_CLEANUP}.
25447 If @var{status} is the literal @samp{ignore}, then the corresponding
25448 exit status is not checked, except for the special cases of 77 (skip)
25449 and 99 (hard failure).  The existence of hard failures allows one to
25450 mark a test as an expected failure with @code{AT_XFAIL_IF} because a
25451 feature has not yet been implemented, but to still distinguish between
25452 gracefully handling the missing feature and dumping core.  A hard
25453 failure also inhibits post-test actions in @var{run-if-fail}.
25455 If the value of the @var{stdout} or @var{stderr} parameter is one of the
25456 literals in the following table, then the test treats the output
25457 according to the rules of that literal.  Otherwise, the value of the
25458 parameter is treated as text that must exactly match the output given by
25459 @var{commands} on standard output and standard error (including an empty
25460 parameter for no output); any differences are captured in the testsuite
25461 log and the test is failed (unless an unexpected exit status of 77
25462 skipped the test instead).  The difference between @code{AT_CHECK} and
25463 @code{AT_CHECK_UNQUOTED} is that only the latter performs shell variable
25464 expansion (@samp{$}), command substitution (@samp{`}), and backslash
25465 escaping (@samp{\}) on comparison text given in the @var{stdout} and
25466 @var{stderr} arguments; if the text includes a trailing newline, this
25467 would be the same as if it were specified via an unquoted
25468 here-document.  (However, there is no difference in the interpretation
25469 of @var{commands}).
25471 @table @samp
25472 @item ignore
25473 The content of the output is ignored, but still captured in the test
25474 group log (if the testsuite is run with the @option{-v} option, the test
25475 group log is displayed as the test is run; if the test group later
25476 fails, the test group log is also copied into the overall testsuite
25477 log).  This action is valid for both @var{stdout} and @var{stderr}.
25479 @item ignore-nolog
25480 The content of the output is ignored, and nothing is captured in the log
25481 files.  If @var{commands} are likely to produce binary output (including
25482 long lines) or large amounts of output, then logging the output can make
25483 it harder to locate details related to subsequent tests within the
25484 group, and could potentially corrupt terminal display of a user running
25485 @command{testsuite -v}.
25487 @item stdout
25488 For the @var{stdout} parameter, capture the content of standard output
25489 to both the file @file{stdout} and the test group log.  Subsequent
25490 commands in the test group can then post-process the file.  This action
25491 is often used when it is desired to use @command{grep} to look for a
25492 substring in the output, or when the output must be post-processed to
25493 normalize error messages into a common form.
25495 @item stderr
25496 Like @samp{stdout}, except that it only works for the @var{stderr}
25497 parameter, and the standard error capture file will be named
25498 @file{stderr}.
25500 @item stdout-nolog
25501 @itemx stderr-nolog
25502 Like @samp{stdout} or @samp{stderr}, except that the captured output is
25503 not duplicated into the test group log.  This action is particularly
25504 useful for an intermediate check that produces large amounts of data,
25505 which will be followed by another check that filters down to the
25506 relevant data, as it makes it easier to locate details in the log.
25508 @item expout
25509 For the @var{stdout} parameter, compare standard output contents with
25510 the previously created file @file{expout}, and list any differences in
25511 the testsuite log.
25513 @item experr
25514 Like @samp{expout}, except that it only works for the @var{stderr}
25515 parameter, and the standard error contents are compared with
25516 @file{experr}.
25517 @end table
25518 @end defmac
25520 @defmac AT_CHECK_EUNIT (@var{module}, @var{test-spec}, @ovar{erlflags}, @
25521   @ovar{run-if-fail}, @ovar{run-if-pass})
25522 @atindex{CHECK_EUNIT}
25523 Initialize and execute an Erlang module named @var{module} that performs
25524 tests following the @var{test-spec} EUnit test specification.
25525 @var{test-spec} must be a valid EUnit test specification, as defined in
25526 the @uref{https://@/erlang.org/@/doc/@/apps/@/eunit/@/index.html, EUnit
25527 Reference Manual}.  @var{erlflags} are optional command-line options
25528 passed to the Erlang interpreter to execute the test Erlang module.
25529 Typically, @var{erlflags} defines at least the paths to directories
25530 containing the compiled Erlang modules under test, as @samp{-pa path1
25531 path2 ...}.
25533 For example, the unit tests associated with Erlang module @samp{testme},
25534 which compiled code is in subdirectory @file{src}, can be performed
25535 with:
25537 @example
25538 AT_CHECK_EUNIT([testme_testsuite], [@{module, testme@}],
25539                [-pa "$@{abs_top_builddir@}/src"])
25540 @end example
25542 This macro must be invoked in between @code{AT_SETUP} and @code{AT_CLEANUP}.
25544 Variables @code{ERL}, @code{ERLC}, and (optionally) @code{ERLCFLAGS}
25545 must be defined as the path of the Erlang interpreter, the path of the
25546 Erlang compiler, and the command-line flags to pass to the compiler,
25547 respectively.  Those variables should be configured in
25548 @file{configure.ac} using the @command{AC_ERLANG_PATH_ERL} and
25549 @command{AC_ERLANG_PATH_ERLC} macros, and the configured values of those
25550 variables are automatically defined in the testsuite.  If @code{ERL} or
25551 @code{ERLC} is not defined, the test group is skipped.
25553 If the EUnit library cannot be found, i.e. if module @code{eunit} cannot
25554 be loaded, the test group is skipped.  Otherwise, if @var{test-spec} is
25555 an invalid EUnit test specification, the test group fails.  Otherwise,
25556 if the EUnit test passes, shell commands @var{run-if-pass} are executed
25557 or, if the EUnit test fails, shell commands @var{run-if-fail} are
25558 executed and the test group fails.
25560 Only the generated test Erlang module is automatically compiled and
25561 executed.  If @var{test-spec} involves testing other Erlang modules,
25562 e.g. module @samp{testme} in the example above, those modules must be
25563 already compiled.
25565 If the testsuite is run in verbose mode and with the @option{--verbose} option,
25566 EUnit is also run in verbose mode to output more details about
25567 individual unit tests.
25568 @end defmac
25571 @node testsuite Invocation
25572 @section Running @command{testsuite} Scripts
25573 @cindex @command{testsuite}
25575 Autotest test suites support the following options:
25577 @table @option
25578 @item --help
25579 @itemx -h
25580 Display the list of options and exit successfully.
25582 @item --version
25583 @itemx -V
25584 Display the version of the test suite and exit successfully.
25586 @item --directory=@var{dir}
25587 @itemx -C @var{dir}
25588 Change the current directory to @var{dir} before creating any files.
25589 Useful for running the testsuite in a subdirectory from a top-level
25590 Makefile.
25592 @item --jobs@r{[}=@var{n}@r{]}
25593 @itemx -j@ovar{n}
25594 Run @var{n} tests in parallel, if possible.  If @var{n} is not given,
25595 run all given tests in parallel.  Note that there should be no space
25596 before the argument to @option{-j}, as @option{-j @var{number}} denotes
25597 the separate arguments @option{-j} and @option{@var{number}}, see below.
25599 In parallel mode, the standard input device of the testsuite script is
25600 not available to commands inside a test group.  Furthermore, banner
25601 lines are not printed, and the summary line for each test group is
25602 output after the test group completes.  Summary lines may appear
25603 unordered.  If verbose and trace output are enabled (see below), they
25604 may appear intermixed from concurrently running tests.
25606 Parallel mode requires the @command{mkfifo} command to work, and will be
25607 silently disabled otherwise.
25609 @item --clean
25610 @itemx -c
25611 Remove all the files the test suite might have created and exit.  Meant
25612 for @code{clean} Make targets.
25614 @item --list
25615 @itemx -l
25616 List all the tests (or only the selection), including their possible
25617 keywords.
25618 @end table
25620 @sp 1
25622 By default all tests are performed (or described with @option{--list})
25623 silently in the default environment, but the environment, set of tests,
25624 and verbosity level can be tuned:
25626 @table @samp
25627 @item @var{variable}=@var{value}
25628 Set the environment @var{variable} to @var{value}.  Use this rather
25629 than @samp{FOO=foo ./testsuite} as debugging scripts would then run in a
25630 different environment.
25632 @cindex @code{AUTOTEST_PATH}
25633 The variable @code{AUTOTEST_PATH} specifies the testing path to prepend
25634 to @env{PATH}.  Relative directory names (not starting with
25635 @samp{/}) are considered to be relative to the top level of the
25636 package being built.  All directories are made absolute, first
25637 starting from the top level @emph{build} tree, then from the
25638 @emph{source} tree.  For instance @samp{./testsuite
25639 AUTOTEST_PATH=tests:bin} for a @file{/src/foo-1.0} source package built
25640 in @file{/tmp/foo} results in @samp{/tmp/foo/tests:/tmp/foo/bin} and
25641 then @samp{/src/foo-1.0/tests:/src/foo-1.0/bin} being prepended to
25642 @env{PATH}.
25644 @item @var{number}
25645 @itemx @var{number}-@var{number}
25646 @itemx @var{number}-
25647 @itemx -@var{number}
25648 Add the corresponding test groups, with obvious semantics, to the
25649 selection.
25651 @item --keywords=@var{keywords}
25652 @itemx -k @var{keywords}
25653 Add to the selection the test groups with title or keywords (arguments
25654 to @code{AT_SETUP} or @code{AT_KEYWORDS}) that match @emph{all} keywords
25655 of the comma separated list @var{keywords}, case-insensitively.  Use
25656 @samp{!} immediately before the keyword to invert the selection for this
25657 keyword.  By default, the keywords match whole words; enclose them in
25658 @samp{.*} to also match parts of words.
25660 For example, running
25662 @example
25663 @kbd{./testsuite -k 'autoupdate,.*FUNC.*'}
25664 @end example
25666 @noindent
25667 selects all tests tagged @samp{autoupdate} @emph{and} with tags
25668 containing @samp{FUNC} (as in @samp{AC_CHECK_FUNC}, @samp{AC_FUNC_ALLOCA},
25669 etc.), while
25671 @example
25672 @kbd{./testsuite -k '!autoupdate' -k '.*FUNC.*'}
25673 @end example
25675 @noindent
25676 selects all tests not tagged @samp{autoupdate} @emph{or} with tags
25677 containing @samp{FUNC}.
25679 @item --errexit
25680 @itemx -e
25681 If any test fails, immediately abort testing.  This implies
25682 @option{--debug}: post test group clean up, and top-level logging
25683 are inhibited.  This option is meant for the full test
25684 suite, it is not really useful for generated debugging scripts.
25685 If the testsuite is run in parallel mode using @option{--jobs},
25686 then concurrently running tests will finish before exiting.
25688 @item --verbose
25689 @itemx -v
25690 Force more verbosity in the detailed output of what is being done.  This
25691 is the default for debugging scripts.
25693 @item --color
25694 @itemx --color@r{[}=never@r{|}auto@r{|}always@r{]}
25695 Enable colored test results.  Without an argument, or with @samp{always},
25696 test results will be colored.  With @samp{never}, color mode is turned
25697 off.  Otherwise, if either the macro @code{AT_COLOR_TESTS} is used by
25698 the testsuite author, or the argument @samp{auto} is given, then test
25699 results are colored if standard output is connected to a terminal.
25701 @item --debug
25702 @itemx -d
25703 Do not remove the files after a test group was performed---but they are
25704 still removed @emph{before}, therefore using this option is sane when
25705 running several test groups.  Create debugging scripts.  Do not
25706 overwrite the top-level
25707 log (in order to preserve a supposedly existing full log file).  This is
25708 the default for debugging scripts, but it can also be useful to debug
25709 the testsuite itself.
25711 @item --recheck
25712 Add to the selection all test groups that failed or passed unexpectedly
25713 during the last non-debugging test run.
25715 @item --trace
25716 @itemx -x
25717 Trigger shell tracing of the test groups.
25718 @end table
25720 Besides these options accepted by every Autotest testsuite, the
25721 testsuite author might have added package-specific options
25722 via the @code{AT_ARG_OPTION} and @code{AT_ARG_OPTION_ARG} macros
25723 (@pxref{Writing Testsuites}); refer to @command{testsuite --help} and
25724 the package documentation for details.
25727 @node Making testsuite Scripts
25728 @section Making @command{testsuite} Scripts
25730 For putting Autotest into movement, you need some configuration and
25731 makefile machinery.  We recommend, at least if your package uses deep or
25732 shallow hierarchies, that you use @file{tests/} as the name of the
25733 directory holding all your tests and their makefile.  Here is a
25734 check list of things to do, followed by an example, taking into
25735 consideration whether you are also using Automake.
25737 @itemize @minus
25739 @item
25740 @cindex @file{package.m4}
25741 @atindex{PACKAGE_STRING}
25742 @atindex{PACKAGE_BUGREPORT}
25743 @atindex{PACKAGE_NAME}
25744 @atindex{PACKAGE_TARNAME}
25745 @atindex{PACKAGE_VERSION}
25746 @atindex{PACKAGE_URL}
25747 Make sure to create the file @file{package.m4}, which defines the
25748 identity of the package.  It must define @code{AT_PACKAGE_STRING}, the
25749 full signature of the package, and @code{AT_PACKAGE_BUGREPORT}, the
25750 address to which bug reports should be sent.  For sake of completeness,
25751 we suggest that you also define @code{AT_PACKAGE_NAME},
25752 @code{AT_PACKAGE_TARNAME}, @code{AT_PACKAGE_VERSION}, and
25753 @code{AT_PACKAGE_URL}.
25754 @xref{Initializing configure}, for a description of these variables.
25755 Be sure to distribute @file{package.m4} and to put it into the source
25756 hierarchy: the test suite ought to be shipped!  See below for an example.
25758 @item
25759 Invoke @code{AC_CONFIG_TESTDIR} in your @file{configure.ac}.
25761 @defmac AC_CONFIG_TESTDIR (@var{directory}, @dvarv{test-path, directory})
25762 @acindex{CONFIG_TESTDIR}
25763 An Autotest test suite is to be configured in @var{directory}.  This
25764 macro causes @file{@var{directory}/atconfig} to be created by
25765 @command{config.status} and sets the default @code{AUTOTEST_PATH} to
25766 @var{test-path} (@pxref{testsuite Invocation}).
25767 @end defmac
25769 @item
25770 Still within @file{configure.ac}, as appropriate, ensure that some
25771 @code{AC_CONFIG_FILES} command includes substitution for
25772 @file{tests/atlocal}.
25774 @item
25775 Also within your @file{configure.ac}, arrange for the @code{AUTOM4TE}
25776 variable to be set.
25778 @item
25779 The appropriate @file{Makefile} should be modified so the validation in
25780 your package is triggered by @samp{make check}.
25781 @end itemize
25783 The following example demonstrates the above checklist, first by
25784 assuming that you are using Automake (see below for tweaks to make to
25785 get the same results without Automake).  Begin by adding the following
25786 lines to your @file{configure.ac}:
25788 @example
25789 # Initialize the test suite.
25790 AC_CONFIG_TESTDIR([tests])
25791 AC_CONFIG_FILES([tests/Makefile tests/atlocal])
25792 AM_MISSING_PROG([AUTOM4TE], [autom4te])
25793 @end example
25795 Next, add the following lines to your @file{tests/Makefile.am}, in order
25796 to link @samp{make check} with a validation suite.
25798 @example
25799 # The ':;' works around a Bash 3.2 bug when the output is not writable.
25800 $(srcdir)/package.m4: $(top_srcdir)/configure.ac
25801         :;@{ \
25802           echo '# Signature of the current package.' && \
25803           echo 'm4_define([AT_PACKAGE_NAME],' && \
25804           echo '  [$(PACKAGE_NAME)])' && \
25805           echo 'm4_define([AT_PACKAGE_TARNAME],' && \
25806           echo '  [$(PACKAGE_TARNAME)])' && \
25807           echo 'm4_define([AT_PACKAGE_VERSION],' && \
25808           echo '  [$(PACKAGE_VERSION)])' && \
25809           echo 'm4_define([AT_PACKAGE_STRING],' && \
25810           echo '  [$(PACKAGE_STRING)])' && \
25811           echo 'm4_define([AT_PACKAGE_BUGREPORT],' && \
25812           echo '  [$(PACKAGE_BUGREPORT)])'; \
25813           echo 'm4_define([AT_PACKAGE_URL],' && \
25814           echo '  [$(PACKAGE_URL)])'; \
25815         @} >'$(srcdir)/package.m4'
25817 EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) atlocal.in
25818 TESTSUITE = $(srcdir)/testsuite
25820 check-local: atconfig atlocal $(TESTSUITE)
25821         $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
25823 installcheck-local: atconfig atlocal $(TESTSUITE)
25824         $(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' \
25825           $(TESTSUITEFLAGS)
25827 clean-local:
25828         test ! -f '$(TESTSUITE)' || \
25829          $(SHELL) '$(TESTSUITE)' --clean
25831 AUTOTEST = $(AUTOM4TE) --language=autotest
25832 $(TESTSUITE): $(srcdir)/testsuite.at $(srcdir)/package.m4
25833         $(AUTOTEST) -I '$(srcdir)' -o $@@.tmp $@@.at
25834         mv $@@.tmp $@@
25835 @end example
25837 Note that the built testsuite is distributed; this is necessary because
25838 users might not have Autoconf installed, and thus would not be able to
25839 rebuild it.  Likewise, the use of Automake's @code{AM_MISSING_PROG} will
25840 arrange for the definition of @code{$AUTOM4TE} within the Makefile to
25841 provide the user with
25842 a nicer error message if they modify a source file to the testsuite, and
25843 accidentally trigger the rebuild rules.
25845 You might want to list explicitly the dependencies, i.e., the list of
25846 the files @file{testsuite.at} includes.
25848 If you don't use Automake, you should make the following tweaks.  In
25849 your @file{configure.ac}, replace the @code{AM_MISSING_PROG} line above
25850 with @code{AC_PATH_PROG([AUTOM4TE], [autom4te], [false])}.  You are
25851 welcome to also try using the @command{missing} script from the Automake
25852 project instead of @command{false}, to try to get a nicer error message
25853 when the user modifies prerequisites but did not have Autoconf
25854 installed, but at that point you may be better off using Automake.
25855 Then, take the code suggested above for @file{tests/@/Makefile.am} and
25856 place it in your @file{tests/@/Makefile.in} instead.  Add code to your
25857 @file{tests/@/Makefile.in} to ensure that @code{$(EXTRA_DIST)} files are
25858 distributed, as well as adding the following additional lines to prepare
25859 the set of needed Makefile variables:
25861 @example
25862 subdir = tests
25863 PACKAGE_NAME = @@PACKAGE_NAME@@
25864 PACKAGE_TARNAME = @@PACKAGE_TARNAME@@
25865 PACKAGE_VERSION = @@PACKAGE_VERSION@@
25866 PACKAGE_STRING = @@PACKAGE_STRING@@
25867 PACKAGE_BUGREPORT = @@PACKAGE_BUGREPORT@@
25868 PACKAGE_URL = @@PACKAGE_URL@@
25869 AUTOM4TE = @@AUTOM4TE@@
25871 atconfig: $(top_builddir)/config.status
25872         cd $(top_builddir) && \
25873            $(SHELL) ./config.status $(subdir)/$@@
25875 atlocal: $(srcdir)/atlocal.in $(top_builddir)/config.status
25876         cd $(top_builddir) && \
25877            $(SHELL) ./config.status $(subdir)/$@@
25878 @end example
25880 Using the above example (with or without Automake), and assuming you
25881 were careful to not initialize @samp{TESTSUITEFLAGS} within your
25882 makefile, you can now fine-tune test suite execution at runtime by
25883 altering this variable, for example:
25885 @example
25886 make check TESTSUITEFLAGS='-v -d -x 75 -k AC_PROG_CC CFLAGS=-g'
25887 @end example
25891 @c =============================== Frequent Autoconf Questions, with answers
25893 @node FAQ
25894 @chapter Frequent Autoconf Questions, with answers
25896 Several questions about Autoconf come up occasionally.  Here some of them
25897 are addressed.
25899 @menu
25900 * Distributing::                Distributing @command{configure} scripts
25901 * Why GNU M4::                  Why not use the standard M4?
25902 * Bootstrapping::               Autoconf and GNU M4 require each other?
25903 * Why Not Imake::               Why GNU uses @command{configure} instead of Imake
25904 * Defining Directories::        Passing @code{datadir} to program
25905 * Autom4te Cache::              What is it?  Can I remove it?
25906 * Present But Cannot Be Compiled::  Compiler and Preprocessor Disagree
25907 * Expanded Before Required::    Expanded Before Required
25908 * Debugging::                   Debugging @command{configure} scripts
25909 @end menu
25911 @node Distributing
25912 @section Distributing @command{configure} Scripts
25913 @cindex License
25915 @display
25916 What are the restrictions on distributing @command{configure}
25917 scripts that Autoconf generates?  How does that affect my
25918 programs that use them?
25919 @end display
25921 There are no restrictions on how the configuration scripts that Autoconf
25922 produces may be distributed or used.  In Autoconf version 1, they were
25923 covered by the GNU General Public License.  We still encourage
25924 software authors to distribute their work under terms like those of the
25925 GPL, but doing so is not required to use Autoconf.
25927 Of the other files that might be used with @command{configure},
25928 @file{config.h.in} is under whatever copyright you use for your
25929 @file{configure.ac}.  @file{config.sub} and @file{config.guess} have an
25930 exception to the GPL when they are used with an Autoconf-generated
25931 @command{configure} script, which permits you to distribute them under the
25932 same terms as the rest of your package.  @file{install-sh} is from the X
25933 Consortium and is not copyrighted.
25935 @node Why GNU M4
25936 @section Why Require GNU M4?
25938 @display
25939 Why does Autoconf require GNU M4?
25940 @end display
25942 Many M4 implementations have hard-coded limitations on the size and
25943 number of macros that Autoconf exceeds.  They also lack several
25944 builtin macros that it would be difficult to get along without in a
25945 sophisticated application like Autoconf, including:
25947 @example
25948 m4_builtin
25949 m4_indir
25950 m4_bpatsubst
25951 __file__
25952 __line__
25953 @end example
25955 Autoconf requires version 1.4.6 or later of GNU M4.
25957 Since only software maintainers need to use Autoconf, and since GNU
25958 M4 is simple to configure and install, it seems reasonable to require
25959 GNU M4 to be installed also.  Many maintainers of GNU and
25960 other free software already have most of the GNU utilities
25961 installed, since they prefer them.
25963 @node Bootstrapping
25964 @section How Can I Bootstrap?
25965 @cindex Bootstrap
25967 @display
25968 If Autoconf requires GNU M4 and GNU M4 has an Autoconf
25969 @command{configure} script, how do I bootstrap?  It seems like a chicken
25970 and egg problem!
25971 @end display
25973 This is a misunderstanding.  Although GNU M4 does come with a
25974 @command{configure} script produced by Autoconf, Autoconf is not required
25975 in order to run the script and install GNU M4.  Autoconf is only
25976 required if you want to change the M4 @command{configure} script, which few
25977 people have to do (mainly its maintainer).
25979 @node Why Not Imake
25980 @section Why Not Imake?
25981 @cindex Imake
25983 @display
25984 Why not use Imake instead of @command{configure} scripts?
25985 @end display
25987 Several people have written addressing this question, so
25988 adaptations of their explanations are included here.
25990 The following answer is based on one written by Richard Pixley:
25992 @quotation
25993 Autoconf generated scripts frequently work on machines that it has
25994 never been set up to handle before.  That is, it does a good job of
25995 inferring a configuration for a new system.  Imake cannot do this.
25997 Imake uses a common database of host specific data.  For X11, this makes
25998 sense because the distribution is made as a collection of tools, by one
25999 central authority who has control over the database.
26001 GNU tools are not released this way.  Each GNU tool has a
26002 maintainer; these maintainers are scattered across the world.  Using a
26003 common database would be a maintenance nightmare.  Autoconf may appear
26004 to be this kind of database, but in fact it is not.  Instead of listing
26005 host dependencies, it lists program requirements.
26007 If you view the GNU suite as a collection of native tools, then the
26008 problems are similar.  But the GNU development tools can be
26009 configured as cross tools in almost any host+target permutation.  All of
26010 these configurations can be installed concurrently.  They can even be
26011 configured to share host independent files across hosts.  Imake doesn't
26012 address these issues.
26014 Imake templates are a form of standardization.  The GNU coding
26015 standards address the same issues without necessarily imposing the same
26016 restrictions.
26017 @end quotation
26020 Here is some further explanation, written by Per Bothner:
26022 @quotation
26023 One of the advantages of Imake is that it is easy to generate large
26024 makefiles using the @samp{#include} and macro mechanisms of @command{cpp}.
26025 However, @code{cpp} is not programmable: it has limited conditional
26026 facilities, and no looping.  And @code{cpp} cannot inspect its
26027 environment.
26029 All of these problems are solved by using @code{sh} instead of
26030 @code{cpp}.  The shell is fully programmable, has macro substitution,
26031 can execute (or source) other shell scripts, and can inspect its
26032 environment.
26033 @end quotation
26036 Paul Eggert elaborates more:
26038 @quotation
26039 With Autoconf, installers need not assume that Imake itself is already
26040 installed and working well.  This may not seem like much of an advantage
26041 to people who are accustomed to Imake.  But on many hosts Imake is not
26042 installed or the default installation is not working well, and requiring
26043 Imake to install a package hinders the acceptance of that package on
26044 those hosts.  For example, the Imake template and configuration files
26045 might not be installed properly on a host, or the Imake build procedure
26046 might wrongly assume that all source files are in one big directory
26047 tree, or the Imake configuration might assume one compiler whereas the
26048 package or the installer needs to use another, or there might be a
26049 version mismatch between the Imake expected by the package and the Imake
26050 supported by the host.  These problems are much rarer with Autoconf,
26051 where each package comes with its own independent configuration
26052 processor.
26054 Also, Imake often suffers from unexpected interactions between
26055 @command{make} and the installer's C preprocessor.  The fundamental problem
26056 here is that the C preprocessor was designed to preprocess C programs,
26057 not makefiles.  This is much less of a problem with Autoconf,
26058 which uses the general-purpose preprocessor M4, and where the
26059 package's author (rather than the installer) does the preprocessing in a
26060 standard way.
26061 @end quotation
26064 Finally, Mark Eichin notes:
26066 @quotation
26067 Imake isn't all that extensible, either.  In order to add new features to
26068 Imake, you need to provide your own project template, and duplicate most
26069 of the features of the existing one.  This means that for a sophisticated
26070 project, using the vendor-provided Imake templates fails to provide any
26071 leverage---since they don't cover anything that your own project needs
26072 (unless it is an X11 program).
26074 On the other side, though:
26076 The one advantage that Imake has over @command{configure}:
26077 @file{Imakefile} files tend to be much shorter (likewise, less redundant)
26078 than @file{Makefile.in} files.  There is a fix to this, however---at least
26079 for the Kerberos V5 tree, we've modified things to call in common
26080 @file{post.in} and @file{pre.in} makefile fragments for the
26081 entire tree.  This means that a lot of common things don't have to be
26082 duplicated, even though they normally are in @command{configure} setups.
26083 @end quotation
26086 @node Defining Directories
26087 @section How Do I @code{#define} Installation Directories?
26089 @display
26090 My program needs library files, installed in @code{datadir} and
26091 similar.  If I use
26093 @example
26094 AC_DEFINE_UNQUOTED([DATADIR], [$datadir],
26095   [Define to the read-only architecture-independent
26096    data directory.])
26097 @end example
26099 @noindent
26100 I get
26102 @example
26103 #define DATADIR "$@{prefix@}/share"
26104 @end example
26105 @end display
26107 As already explained, this behavior is on purpose, mandated by the
26108 GNU Coding Standards, see @ref{Installation Directory
26109 Variables}.  There are several means to achieve a similar goal:
26111 @itemize @minus
26112 @item
26113 Do not use @code{AC_DEFINE} but use your makefile to pass the
26114 actual value of @code{datadir} via compilation flags.
26115 @xref{Installation Directory Variables}, for the details.
26117 @item
26118 This solution can be simplified when compiling a program: you may either
26119 extend the @code{CPPFLAGS}:
26121 @example
26122 CPPFLAGS = -DDATADIR='"$(datadir)"' @@CPPFLAGS@@
26123 @end example
26125 @noindent
26126 If you are using Automake, you should use @code{AM_CPPFLAGS} instead:
26128 @example
26129 AM_CPPFLAGS = -DDATADIR='"$(datadir)"'
26130 @end example
26132 @noindent
26133 Alternatively, create a dedicated header file:
26135 @example
26136 DISTCLEANFILES = myprog-paths.h
26137 myprog-paths.h: Makefile
26138         echo '#define DATADIR "$(datadir)"' >$@@
26139 @end example
26141 @noindent
26142 The gnulib module @samp{configmake} provides such a header with all the
26143 standard directory variables defined, @pxref{configmake,,, gnulib, GNU
26144 Gnulib}.
26146 @item
26147 Use @code{AC_DEFINE} but have @command{configure} compute the literal
26148 value of @code{datadir} and others.  Many people have wrapped macros to
26149 automate this task; for an example, see the macro @code{AC_DEFINE_DIR} from
26150 the @uref{https://@/www.gnu.org/@/software/@/autoconf-archive/, Autoconf Macro
26151 Archive}.
26153 This solution does not conform to the GNU Coding Standards.
26155 @item
26156 Note that all the previous solutions hard wire the absolute name of
26157 these directories in the executables, which is not a good property.  You
26158 may try to compute the names relative to @code{prefix}, and try to
26159 find @code{prefix} at runtime, this way your package is relocatable.
26160 @end itemize
26163 @node Autom4te Cache
26164 @section What is @file{autom4te.cache}?
26166 @display
26167 What is this directory @file{autom4te.cache}?  Can I safely remove it?
26168 @end display
26170 In the GNU Build System, @file{configure.ac} plays a central
26171 role and is read by many tools: @command{autoconf} to create
26172 @file{configure}, @command{autoheader} to create @file{config.h.in},
26173 @command{automake} to create @file{Makefile.in}, @command{autoscan} to
26174 check the completeness of @file{configure.ac}, @command{autoreconf} to
26175 check the GNU Build System components that are used.  To
26176 ``read @file{configure.ac}'' actually means to compile it with M4,
26177 which can be a long process for complex @file{configure.ac}.
26179 This is why all these tools, instead of running directly M4, invoke
26180 @command{autom4te} (@pxref{autom4te Invocation}) which, while answering to
26181 a specific demand, stores additional information in
26182 @file{autom4te.cache} for future runs.  For instance, if you run
26183 @command{autoconf}, behind the scenes, @command{autom4te} also
26184 stores information for the other tools, so that when you invoke
26185 @command{autoheader} or @command{automake} etc., reprocessing
26186 @file{configure.ac} is not needed.  The speed up is frequently 30%,
26187 and is increasing with the size of @file{configure.ac}.
26189 But it is and remains being simply a cache: you can safely remove it.
26191 @sp 1
26193 @display
26194 Can I permanently get rid of it?
26195 @end display
26197 The creation of this cache can be disabled from
26198 @file{~/.autom4te.cfg}, see @ref{Customizing autom4te}, for more
26199 details.  You should be aware that disabling the cache slows down the
26200 Autoconf test suite by 40%.  The more GNU Build System
26201 components are used, the more the cache is useful; for instance
26202 running @samp{autoreconf -f} on the Core Utilities is twice slower without
26203 the cache @emph{although @option{--force} implies that the cache is
26204 not fully exploited}, and eight times slower than without
26205 @option{--force}.
26208 @node Present But Cannot Be Compiled
26209 @section Header Present But Cannot Be Compiled
26211 The most important guideline to bear in mind when checking for
26212 features is to mimic as much as possible the intended use.
26213 Unfortunately, old versions of @code{AC_CHECK_HEADER} and
26214 @code{AC_CHECK_HEADERS} failed to follow this idea, and called
26215 the preprocessor, instead of the compiler, to check for headers.  As a
26216 result, incompatibilities between headers went unnoticed during
26217 configuration, and maintainers finally had to deal with this issue
26218 elsewhere.
26220 The transition began with Autoconf 2.56.  As of Autoconf 2.64 both
26221 checks are performed, and @command{configure} complains loudly if the
26222 compiler and the preprocessor do not agree.  However, only the compiler
26223 result is considered.  As of Autoconf 2.70, only the compiler check is
26224 performed.
26226 Consider the following example:
26228 @smallexample
26229 $ @kbd{cat number.h}
26230 typedef int number;
26231 $ @kbd{cat pi.h}
26232 const number pi = 3;
26233 $ @kbd{cat configure.ac}
26234 AC_INIT([Example], [1.0], [bug-example@@example.org])
26235 AC_CHECK_HEADERS([pi.h])
26236 $ @kbd{autoconf -Wall}
26237 $ @kbd{./configure CPPFLAGS='-I.'}
26238 checking for gcc... gcc
26239 checking whether the C compiler works... yes
26240 checking for C compiler default output file name... a.out
26241 checking for suffix of executables...
26242 checking whether we are cross compiling... no
26243 checking for suffix of object files... o
26244 checking whether the compiler supports GNU C... yes
26245 checking whether gcc accepts -g... yes
26246 checking for gcc option to enable C11 features... -std=gnu11
26247 checking for sys/types.h... yes
26248 checking for sys/stat.h... yes
26249 checking for strings.h... yes
26250 checking for inttypes.h... yes
26251 checking for stdint.h... yes
26252 checking for unistd.h... yes
26253 checking for pi.h... no
26254 @end smallexample
26256 @noindent
26257 The proper way to handle this case is using the fourth argument
26258 (@pxref{Generic Headers}):
26260 @example
26261 $ @kbd{cat configure.ac}
26262 AC_INIT([Example], [1.0], [bug-example@@example.org])
26263 AC_CHECK_HEADERS([number.h pi.h], [], [],
26264 [[#ifdef HAVE_NUMBER_H
26265 # include <number.h>
26266 #endif
26268 $ @kbd{autoconf -Wall}
26269 $ @kbd{./configure CPPFLAGS='-I.'}
26270 checking for gcc... gcc
26271 checking whether the C compiler works... yes
26272 checking for C compiler default output file name... a.out
26273 checking for suffix of executables...
26274 checking whether we are cross compiling... no
26275 checking for suffix of object files... o
26276 checking whether the compiler supports GNU C... yes
26277 checking whether gcc accepts -g... yes
26278 checking for gcc option to enable C11 features... -std=gnu11
26279 checking for number.h... yes
26280 checking for pi.h... yes
26281 @end example
26283 See @ref{Particular Headers}, for a list of headers with their
26284 prerequisites.
26286 @node Expanded Before Required
26287 @section Expanded Before Required
26289 @cindex expanded before required
26290 Older versions of Autoconf silently built files with incorrect ordering
26291 between dependent macros if an outer macro first expanded, then later
26292 indirectly required, an inner macro.  Starting with Autoconf 2.64, this
26293 situation no longer generates out-of-order code, but results in
26294 duplicate output and a syntax warning:
26296 @example
26297 $ @kbd{cat configure.ac}
26298 @result{}AC_DEFUN([TESTA], [[echo in A
26299 @result{}if test -n "$SEEN_A" ; then echo duplicate ; fi
26300 @result{}SEEN_A=:]])
26301 @result{}AC_DEFUN([TESTB], [AC_REQUIRE([TESTA])[echo in B
26302 @result{}if test -z "$SEEN_A" ; then echo bug ; fi]])
26303 @result{}AC_DEFUN([TESTC], [AC_REQUIRE([TESTB])[echo in C]])
26304 @result{}AC_DEFUN([OUTER], [[echo in OUTER]
26305 @result{}TESTA
26306 @result{}TESTC])
26307 @result{}AC_INIT
26308 @result{}OUTER
26309 @result{}AC_OUTPUT
26310 $ @kbd{autoconf}
26311 @result{}configure.ac:11: warning: AC_REQUIRE:
26312 @result{} `TESTA' was expanded before it was required
26313 @result{}configure.ac:4: TESTB is expanded from...
26314 @result{}configure.ac:6: TESTC is expanded from...
26315 @result{}configure.ac:7: OUTER is expanded from...
26316 @result{}configure.ac:11: the top level
26317 @end example
26319 @noindent
26320 To avoid this warning, decide what purpose the macro in question serves.
26321 If it only needs to be expanded once (for example, if it provides
26322 initialization text used by later macros), then the simplest fix is to
26323 change the macro to be declared with @code{AC_DEFUN_ONCE}
26324 (@pxref{One-Shot Macros}), although this only works in Autoconf 2.64 and
26325 newer.  A more portable fix is to change all
26326 instances of direct calls to instead go through @code{AC_REQUIRE}
26327 (@pxref{Prerequisite Macros}).  If, instead, the macro is parameterized
26328 by arguments or by the current definition of other macros in the m4
26329 environment, then the macro should always be directly expanded instead
26330 of required.
26332 For another case study, consider this example trimmed down from an
26333 actual package.  Originally, the package contained shell code and
26334 multiple macro invocations at the top level of @file{configure.ac}:
26336 @example
26337 AC_DEFUN([FOO], [AC_COMPILE_IFELSE([@dots{}])])
26338 foobar=
26339 AC_PROG_CC
26341 @end example
26343 @noindent
26344 but that was getting complex, so the author wanted to offload some of
26345 the text into a new macro in another file included via
26346 @file{aclocal.m4}.  The na@"ive approach merely wraps the text in a new
26347 macro:
26349 @example
26350 AC_DEFUN([FOO], [AC_COMPILE_IFELSE([@dots{}])])
26351 AC_DEFUN([BAR], [
26352 foobar=
26353 AC_PROG_CC
26357 @end example
26359 @noindent
26360 With older versions of Autoconf, the setting of @samp{foobar=} occurs
26361 before the single compiler check, as the author intended.  But with
26362 Autoconf 2.64, this issues the ``expanded before it was required''
26363 warning for @code{AC_PROG_CC}, and outputs two copies of the compiler
26364 check, one before @samp{foobar=}, and one after.  To understand why this
26365 is happening, remember that the use of @code{AC_COMPILE_IFELSE} includes
26366 a call to @code{AC_REQUIRE([AC_PROG_CC])} under the hood.  According to
26367 the documented semantics of @code{AC_REQUIRE}, this means that
26368 @code{AC_PROG_CC} @emph{must} occur before the body of the outermost
26369 @code{AC_DEFUN}, which in this case is @code{BAR}, thus preceding the
26370 use of @samp{foobar=}.  The older versions of Autoconf were broken with
26371 regards to the rules of @code{AC_REQUIRE}, which explains why the code
26372 changed from one over to two copies of @code{AC_PROG_CC} when upgrading
26373 autoconf.  In other words, the author was unknowingly relying on a bug
26374 exploit to get the desired results, and that exploit broke once the bug
26375 was fixed.
26377 So, what recourse does the author have, to restore their intended
26378 semantics of setting @samp{foobar=} prior to a single compiler check,
26379 regardless of whether Autoconf 2.63 or 2.64 is used?  One idea is to
26380 remember that only @code{AC_DEFUN} is impacted by @code{AC_REQUIRE};
26381 there is always the possibility of using the lower-level
26382 @code{m4_define}:
26384 @example
26385 AC_DEFUN([FOO], [AC_COMPILE_IFELSE([@dots{}])])
26386 m4_define([BAR], [
26387 foobar=
26388 AC_PROG_CC
26392 @end example
26394 @noindent
26395 This works great if everything is in the same file.  However, it does
26396 not help in the case where the author wants to have @command{aclocal}
26397 find the definition of @code{BAR} from its own file, since
26398 @command{aclocal} requires the use of @code{AC_DEFUN}.  In this case, a
26399 better fix is to recognize that if @code{BAR} also uses
26400 @code{AC_REQUIRE}, then there will no longer be direct expansion prior
26401 to a subsequent require.  Then, by creating yet another helper macro,
26402 the author can once again guarantee a single invocation of
26403 @code{AC_PROG_CC}, which will still occur after @code{foobar=}.  The
26404 author can also use @code{AC_BEFORE} to make sure no other macro
26405 appearing before @code{BAR} has triggered an unwanted expansion of
26406 @code{AC_PROG_CC}.
26408 @example
26409 AC_DEFUN([FOO], [AC_COMPILE_IFELSE([@dots{}])])
26410 AC_DEFUN([BEFORE_CC], [
26411 foobar=
26413 AC_DEFUN([BAR], [
26414 AC_BEFORE([$0], [AC_PROG_CC])dnl
26415 AC_REQUIRE([BEFORE_CC])dnl
26416 AC_REQUIRE([AC_PROG_CC])dnl
26420 @end example
26423 @node Debugging
26424 @section Debugging @command{configure} scripts
26426 While in general, @command{configure} scripts generated by Autoconf
26427 strive to be fairly portable to various systems, compilers, shells, and
26428 other tools, it may still be necessary to debug a failing test, broken
26429 script or makefile, or fix or override an incomplete, faulty, or erroneous
26430 test, especially during macro development.  Failures can occur at all levels,
26431 in M4 syntax or semantics, shell script issues, or due to bugs in the
26432 test or the tools invoked by @command{configure}.  Together with the
26433 rather arcane error message that @command{m4} and @command{make} may
26434 produce when their input contains syntax errors, this can make debugging
26435 rather painful.
26437 Nevertheless, here is a list of hints and strategies that may help:
26439 @itemize
26440 @item
26441 When @command{autoconf} fails, common causes for error include:
26443 @itemize
26444 @item
26445 mismatched or unbalanced parentheses or braces (@pxref{Balancing
26446 Parentheses}),
26448 @item under- or over-quoted macro arguments (@pxref{Autoconf
26449 Language}, @pxref{Quoting and Parameters}, @pxref{Quotation and Nested
26450 Macros}),
26452 @item spaces between macro name and opening parenthesis (@pxref{Autoconf
26453 Language}).
26454 @end itemize
26456 Typically, it helps to go back to the last working version of the input
26457 and compare the differences for each of these errors.  Another
26458 possibility is to sprinkle pairs of @code{m4_traceon} and
26459 @code{m4_traceoff} judiciously in the code, either without a parameter
26460 or listing some macro names and watch @command{m4} expand its input
26461 verbosely (@pxref{Debugging via autom4te}).
26463 @item
26464 Sometimes @command{autoconf} succeeds but the generated
26465 @command{configure} script has invalid shell syntax.  You can detect this
26466 case by running @samp{bash -n configure} or @samp{sh -n configure}.
26467 If this command fails, the same tips apply, as if @command{autoconf} had
26468 failed.
26470 @item
26471 Debugging @command{configure} script execution may be done by sprinkling
26472 pairs of @code{set -x} and @code{set +x} into the shell script before
26473 and after the region that contains a bug.  Running the whole script with
26474 @samp{@var{shell} -vx ./configure 2>&1 | tee @var{log-file}} with a decent
26475 @var{shell} may work, but produces lots of output.  Here, it can help to
26476 search for markers like @samp{checking for} a particular test in the
26477 @var{log-file}.
26479 @item
26480 Alternatively, you might use a shell with debugging capabilities like
26481 @uref{http://bashdb.sourceforge.net/, bashdb}.
26483 @item
26484 When @command{configure} tests produce invalid results for your system,
26485 it may be necessary to override them:
26487 @itemize
26488 @item
26489 For programs, tools or libraries variables, preprocessor, compiler, or
26490 linker flags, it is often sufficient to override them at @command{make}
26491 run time with some care (@pxref{Macros and Submakes}).  Since this
26492 normally won't cause @command{configure} to be run again with these
26493 changed settings, it may fail if the changed variable would have caused
26494 different test results from @command{configure}, so this may work only
26495 for simple differences.
26497 @item
26498 Most tests which produce their result in a substituted variable allow to
26499 override the test by setting the variable on the @command{configure}
26500 command line (@pxref{Compilers and Options}, @pxref{Defining Variables},
26501 @pxref{Particular Systems}).
26503 @item
26504 Many tests store their result in a cache variable (@pxref{Caching
26505 Results}).  This lets you override them either on the
26506 @command{configure} command line as above, or through a primed cache or
26507 site file (@pxref{Cache Files}, @pxref{Site Defaults}).  The name of a
26508 cache variable is documented with a test macro or may be inferred from
26509 @ref{Cache Variable Names}; the precise semantics of undocumented
26510 variables are often internal details, subject to change.
26511 @end itemize
26513 @item
26514 Alternatively, @command{configure} may produce invalid results because
26515 of uncaught programming errors, in your package or in an upstream
26516 library package.  For example, when @code{AC_CHECK_LIB} fails to find a
26517 library with a specified function, always check @file{config.log}.  This
26518 will reveal the exact error that produced the failing result: the
26519 library linked by @code{AC_CHECK_LIB} probably has a fatal bug.
26520 @end itemize
26522 Conversely, as macro author, you can make it easier for users of your
26523 macro:
26525 @itemize
26526 @item
26527 by minimizing dependencies between tests and between test results as far
26528 as possible,
26530 @item
26531 by using @command{make} variables to factorize and allow
26532 override of settings at @command{make} run time,
26534 @item
26535 by honoring the GNU Coding Standards and not overriding flags
26536 reserved for the user except temporarily during @command{configure}
26537 tests,
26539 @item
26540 by not requiring users of your macro to use the cache variables.
26541 Instead, expose the result of the test via @var{run-if-true} and
26542 @var{run-if-false} parameters.  If the result is not a boolean,
26543 then provide it through documented shell variables.
26544 @end itemize
26547 @c ===================================================== History of Autoconf.
26549 @node History
26550 @chapter History of Autoconf
26551 @cindex History of autoconf
26553 @emph{This chapter was written by the original author, David MacKenzie.}
26555 You may be wondering, Why was Autoconf originally written?  How did it
26556 get into its present form?  (Why does it look like gorilla spit?)  If
26557 you're not wondering, then this chapter contains no information useful
26558 to you, and you might as well skip it.  If you @emph{are} wondering,
26559 then let there be light@enddots{}
26561 @menu
26562 * Genesis::                     Prehistory and naming of @command{configure}
26563 * Exodus::                      The plagues of M4 and Perl
26564 * Leviticus::                   The priestly code of portability arrives
26565 * Numbers::                     Growth and contributors
26566 * Deuteronomy::                 Approaching the promises of easy configuration
26567 @end menu
26569 @node Genesis
26570 @section Genesis
26572 In June 1991 I was maintaining many of the GNU utilities for the
26573 Free Software Foundation.  As they were ported to more platforms and
26574 more programs were added, the number of @option{-D} options that users
26575 had to select in the makefile (around 20) became burdensome.
26576 Especially for me---I had to test each new release on a bunch of
26577 different systems.  So I wrote a little shell script to guess some of
26578 the correct settings for the fileutils package, and released it as part
26579 of fileutils 2.0.  That @command{configure} script worked well enough that
26580 the next month I adapted it (by hand) to create similar @command{configure}
26581 scripts for several other GNU utilities packages.  Brian Berliner
26582 also adapted one of my scripts for his CVS revision control system.
26584 Later that summer, I learned that Richard Stallman and Richard Pixley
26585 were developing similar scripts to use in the GNU compiler tools;
26586 so I adapted my @command{configure} scripts to support their evolving
26587 interface: using the file name @file{Makefile.in} as the templates;
26588 adding @samp{+srcdir}, the first option (of many); and creating
26589 @file{config.status} files.
26591 @node Exodus
26592 @section Exodus
26594 As I got feedback from users, I incorporated many improvements, using
26595 Emacs to search and replace, cut and paste, similar changes in each of
26596 the scripts.  As I adapted more GNU utilities packages to use
26597 @command{configure} scripts, updating them all by hand became impractical.
26598 Rich Murphey, the maintainer of the GNU graphics utilities, sent me
26599 mail saying that the @command{configure} scripts were great, and asking if
26600 I had a tool for generating them that I could send him.  No, I thought,
26601 but I should!  So I started to work out how to generate them.  And the
26602 journey from the slavery of hand-written @command{configure} scripts to the
26603 abundance and ease of Autoconf began.
26605 Cygnus @command{configure}, which was being developed at around that time,
26606 is table driven; it is meant to deal mainly with a discrete number of
26607 system types with a small number of mainly unguessable features (such as
26608 details of the object file format).  The automatic configuration system
26609 that Brian Fox had developed for Bash takes a similar approach.  For
26610 general use, it seems to me a hopeless cause to try to maintain an
26611 up-to-date database of which features each variant of each operating
26612 system has.  It's easier and more reliable to check for most features on
26613 the fly---especially on hybrid systems that people have hacked on
26614 locally or that have patches from vendors installed.
26616 I considered using an architecture similar to that of Cygnus
26617 @command{configure}, where there is a single @command{configure} script that
26618 reads pieces of @file{configure.in} when run.  But I didn't want to have
26619 to distribute all of the feature tests with every package, so I settled
26620 on having a different @command{configure} made from each
26621 @file{configure.in} by a preprocessor.  That approach also offered more
26622 control and flexibility.
26624 I looked briefly into using the Metaconfig package, by Larry Wall,
26625 Harlan Stenn, and Raphael Manfredi, but I decided not to for several
26626 reasons.  The @command{Configure} scripts it produces are interactive,
26627 which I find quite inconvenient; I didn't like the ways it checked for
26628 some features (such as library functions); I didn't know that it was
26629 still being maintained, and the @command{Configure} scripts I had
26630 seen didn't work on many modern systems (such as System V R4 and NeXT);
26631 it wasn't flexible in what it could do in response to a feature's
26632 presence or absence; I found it confusing to learn; and it was too big
26633 and complex for my needs (I didn't realize then how much Autoconf would
26634 eventually have to grow).
26636 I considered using Perl to generate my style of @command{configure}
26637 scripts, but decided that M4 was better suited to the job of simple
26638 textual substitutions: it gets in the way less, because output is
26639 implicit.  Plus, everyone already has it.  (Initially I didn't rely on
26640 the GNU extensions to M4.)  Also, some of my friends at the
26641 University of Maryland had recently been putting M4 front ends on
26642 several programs, including @code{tvtwm}, and I was interested in trying
26643 out a new language.
26645 @node Leviticus
26646 @section Leviticus
26648 Since my @command{configure} scripts determine the system's capabilities
26649 automatically, with no interactive user intervention, I decided to call
26650 the program that generates them Autoconfig.  But with a version number
26651 tacked on, that name would be too long for old Unix file systems,
26652 so I shortened it to Autoconf.
26654 In the fall of 1991 I called together a group of fellow questers after
26655 the Holy Grail of portability (er, that is, alpha testers) to give me
26656 feedback as I encapsulated pieces of my handwritten scripts in M4 macros
26657 and continued to add features and improve the techniques used in the
26658 checks.  Prominent among the testers were Fran@,{c}ois Pinard, who came up
26659 with the idea of making an Autoconf shell script to run M4
26660 and check for unresolved macro calls; Richard Pixley, who suggested
26661 running the compiler instead of searching the file system to find
26662 include files and symbols, for more accurate results; Karl Berry, who
26663 got Autoconf to configure @TeX{} and added the macro index to the
26664 documentation; and Ian Lance Taylor, who added support for creating a C
26665 header file as an alternative to putting @option{-D} options in a
26666 makefile, so he could use Autoconf for his UUCP package.
26667 The alpha testers cheerfully adjusted their files again and again as the
26668 names and calling conventions of the Autoconf macros changed from
26669 release to release.  They all contributed many specific checks, great
26670 ideas, and bug fixes.
26672 @node Numbers
26673 @section Numbers
26675 In July 1992, after months of alpha testing, I released Autoconf 1.0,
26676 and converted many GNU packages to use it.  I was surprised by how
26677 positive the reaction to it was.  More people started using it than I
26678 could keep track of, including people working on software that wasn't
26679 part of the GNU Project (such as TCL, FSP, and Kerberos V5).
26680 Autoconf continued to improve rapidly, as many people using the
26681 @command{configure} scripts reported problems they encountered.
26683 Autoconf turned out to be a good torture test for M4 implementations.
26684 Unix M4 started to dump core because of the length of the
26685 macros that Autoconf defined, and several bugs showed up in GNU
26686 M4 as well.  Eventually, we realized that we needed to use some
26687 features that only GNU M4 has.  4.3BSD M4, in
26688 particular, has an impoverished set of builtin macros; the System V
26689 version is better, but still doesn't provide everything we need.
26691 More development occurred as people put Autoconf under more stresses
26692 (and to uses I hadn't anticipated).  Karl Berry added checks for X11.
26693 david zuhn contributed C++ support.  Fran@,{c}ois Pinard made it diagnose
26694 invalid arguments.  Jim Blandy bravely coerced it into configuring
26695 GNU Emacs, laying the groundwork for several later improvements.
26696 Roland McGrath got it to configure the GNU C Library, wrote the
26697 @command{autoheader} script to automate the creation of C header file
26698 templates, and added a @option{--verbose} option to @command{configure}.
26699 Noah Friedman added the @option{--autoconf-dir} option and
26700 @code{AC_MACRODIR} environment variable.  (He also coined the term
26701 @dfn{autoconfiscate} to mean ``adapt a software package to use
26702 Autoconf''.)  Roland and Noah improved the quoting protection in
26703 @code{AC_DEFINE} and fixed many bugs, especially when I got sick of
26704 dealing with portability problems from February through June, 1993.
26706 @node Deuteronomy
26707 @section Deuteronomy
26709 A long wish list for major features had accumulated, and the effect of
26710 several years of patching by various people had left some residual
26711 cruft.  In April 1994, while working for Cygnus Support, I began a major
26712 revision of Autoconf.  I added most of the features of the Cygnus
26713 @command{configure} that Autoconf had lacked, largely by adapting the
26714 relevant parts of Cygnus @command{configure} with the help of david zuhn
26715 and Ken Raeburn.  These features include support for using
26716 @file{config.sub}, @file{config.guess}, @option{--host}, and
26717 @option{--target}; making links to files; and running @command{configure}
26718 scripts in subdirectories.  Adding these features enabled Ken to convert
26719 GNU @code{as}, and Rob Savoye to convert DejaGNU, to using
26720 Autoconf.
26722 I added more features in response to other peoples' requests.  Many
26723 people had asked for @command{configure} scripts to share the results of
26724 the checks between runs, because (particularly when configuring a large
26725 source tree, like Cygnus does) they were frustratingly slow.  Mike
26726 Haertel suggested adding site-specific initialization scripts.  People
26727 distributing software that had to unpack on MS-DOS asked for a way to
26728 override the @file{.in} extension on the file names, which produced file
26729 names like @file{config.h.in} containing two dots.  Jim Avera did an
26730 extensive examination of the problems with quoting in @code{AC_DEFINE}
26731 and @code{AC_SUBST}; his insights led to significant improvements.
26732 Richard Stallman asked that compiler output be sent to @file{config.log}
26733 instead of @file{/dev/null}, to help people debug the Emacs
26734 @command{configure} script.
26736 I made some other changes because of my dissatisfaction with the quality
26737 of the program.  I made the messages showing results of the checks less
26738 ambiguous, always printing a result.  I regularized the names of the
26739 macros and cleaned up coding style inconsistencies.  I added some
26740 auxiliary utilities that I had developed to help convert source code
26741 packages to use Autoconf.  With the help of Fran@,{c}ois Pinard, I made
26742 the macros not interrupt each others' messages.  (That feature revealed
26743 some performance bottlenecks in GNU M4, which he hastily
26744 corrected!)  I reorganized the documentation around problems people want
26745 to solve.  And I began a test suite, because experience had shown that
26746 Autoconf has a pronounced tendency to regress when we change it.
26748 Again, several alpha testers gave invaluable feedback, especially
26749 Fran@,{c}ois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn,
26750 and Mark Eichin.
26752 Finally, version 2.0 was ready.  And there was much rejoicing.  (And I
26753 have free time again.  I think.  Yeah, right.)
26756 @c ========================================================== Appendices
26759 @node GNU Free Documentation License
26760 @appendix GNU Free Documentation License
26762 @include fdl.texi
26764 @node Indices
26765 @appendix Indices
26767 @menu
26768 * Environment Variable Index::  Index of environment variables used
26769 * Output Variable Index::       Index of variables set in output files
26770 * Preprocessor Symbol Index::   Index of C preprocessor symbols defined
26771 * Cache Variable Index::        Index of documented cache variables
26772 * Autoconf Macro Index::        Index of Autoconf macros
26773 * M4 Macro Index::              Index of M4, M4sugar, and M4sh macros
26774 * Autotest Macro Index::        Index of Autotest macros
26775 * Program & Function Index::    Index of those with portability problems
26776 * Concept Index::               General index
26777 @end menu
26779 @node Environment Variable Index
26780 @appendixsec Environment Variable Index
26782 This is an alphabetical list of the environment variables that might
26783 influence Autoconf checks.
26785 @printindex ev
26787 @node Output Variable Index
26788 @appendixsec Output Variable Index
26790 This is an alphabetical list of the variables that Autoconf can
26791 substitute into files that it creates, typically one or more
26792 makefiles.  @xref{Setting Output Variables}, for more information
26793 on how this is done.
26795 @printindex ov
26797 @node Preprocessor Symbol Index
26798 @appendixsec Preprocessor Symbol Index
26800 This is an alphabetical list of the C preprocessor symbols that the
26801 Autoconf macros define.  To work with Autoconf, C source code needs to
26802 use these names in @code{#if} or @code{#ifdef} directives.
26804 @printindex cv
26806 @node Cache Variable Index
26807 @appendixsec Cache Variable Index
26809 This is an alphabetical list of documented cache variables used
26810 by macros defined in Autoconf.  Autoconf macros may use additional cache
26811 variables internally.
26812 @ifset shortindexflag
26813 To make the list easier to use, the variables are listed without their
26814 preceding @samp{ac_cv_}.
26815 @end ifset
26817 @printindex CA
26819 @node Autoconf Macro Index
26820 @appendixsec Autoconf Macro Index
26822 This is an alphabetical list of the Autoconf macros.
26823 @ifset shortindexflag
26824 To make the list easier to use, the macros are listed without their
26825 preceding @samp{AC_}.
26826 @end ifset
26828 @printindex AC
26830 @node M4 Macro Index
26831 @appendixsec M4 Macro Index
26833 This is an alphabetical list of the M4, M4sugar, and M4sh macros.
26834 @ifset shortindexflag
26835 To make the list easier to use, the macros are listed without their
26836 preceding @samp{m4_} or @samp{AS_}.  The prefix is @samp{m4_} for
26837 all-lowercase macro names and @samp{AS_} for all-uppercase macro
26838 names.
26839 @end ifset
26841 @printindex MS
26843 @node Autotest Macro Index
26844 @appendixsec Autotest Macro Index
26846 This is an alphabetical list of the Autotest macros.
26847 @ifset shortindexflag
26848 To make the list easier to use, the macros are listed without their
26849 preceding @samp{AT_}.
26850 @end ifset
26852 @printindex AT
26854 @node Program & Function Index
26855 @appendixsec Program and Function Index
26857 This is an alphabetical list of the programs and functions whose
26858 portability is discussed in this document.
26860 @printindex pr
26862 @node Concept Index
26863 @appendixsec Concept Index
26865 This is an alphabetical list of the files, tools, and concepts
26866 introduced in this document.
26868 @printindex cp
26870 @bye
26872 @c  LocalWords:  texinfo setfilename autoconf texi settitle setchapternewpage
26873 @c  LocalWords:  setcontentsaftertitlepage finalout ARG ovar varname dvar acx
26874 @c  LocalWords:  makeinfo dvi defcodeindex ev ov CPP cv Autotest mv defindex fn
26875 @c  LocalWords:  shortindexflag iftex ifset acindex ACindex ifclear ahindex fu
26876 @c  LocalWords:  asindex MSindex atindex ATindex auindex hdrindex prindex FIXME
26877 @c  LocalWords:  msindex alloca fnindex Aaarg indices FSF's dircategory ifnames
26878 @c  LocalWords:  direntry autoscan autoreconf autoheader autoupdate config FDs
26879 @c  LocalWords:  testsuite titlepage Elliston Demaille vskip filll ifnottex hmm
26880 @c  LocalWords:  insertcopying Autoconf's detailmenu Automake Libtool Posix ois
26881 @c  LocalWords:  Systemology Checkpointing Changequote INTERCAL changequote dfn
26882 @c  LocalWords:  Quadrigraphs builtins Shellology acconfig Bugward LIBOBJ Imake
26883 @c  LocalWords:  LIBOBJS IFELSE cindex flushright Pinard Metaconfig uref Simons
26884 @c  LocalWords:  distclean uninstall noindent versioning Tromey dir vr
26885 @c  LocalWords:  SAMS samp aclocal acsite underquoted emph itemx prepend SUBST
26886 @c  LocalWords:  evindex automake Gettext autopoint gettext symlink libtoolize
26887 @c  LocalWords:  defmac INIT tarname ovindex cvindex BUGREPORT PREREQ asis PROG
26888 @c  LocalWords:  SRCDIR srcdir globbing afterwards cmds foos fooo foooo init cd
26889 @c  LocalWords:  builddir timestamp src Imakefile chmod defvar CFLAGS CPPFLAGS
26890 @c  LocalWords:  CXXFLAGS DEFS DHAVE defvarx FCFLAGS FFLAGS LDFLAGS bindir GCC
26891 @c  LocalWords:  datadir datarootdir docdir dvidir htmldir libdir ifnothtml kbd
26892 @c  LocalWords:  includedir infodir libexecdir localedir localstatedir mandir
26893 @c  LocalWords:  oldincludedir pdfdir PDF psdir PostScript sbindir sysconfdir
26894 @c  LocalWords:  sharedstatedir DDATADIR sed tmp pkgdatadir VPATH conf unistd
26895 @c  LocalWords:  undef endif builtin FUNCS ifndef STACKSEG getb GETB YMP fubar
26896 @c  LocalWords:  PRE dest SUBDIRS subdirs fi struct STDC stdlib stddef INTTYPES
26897 @c  LocalWords:  inttypes STDINT stdint AWK AIX Solaris NeXT env EGREP FGREP yy
26898 @c  LocalWords:  LEXLIB YYTEXT lfl nonportable Automake's LN RANLIB byacc INETD
26899 @c  LocalWords:  inetd prog PROGS progs ranlib lmp lXt lX nsl gethostbyname UX
26900 @c  LocalWords:  NextStep isinf isnan glibc IRIX sunmath lm lsunmath pre sizeof
26901 @c  LocalWords:  ld inline malloc putenv setenv FreeBSD realloc SunOS MinGW
26902 @c  LocalWords:  snprintf vsnprintf sprintf vsprintf sscanf gcc strerror ifdef
26903 @c  LocalWords:  strnlen sysconf PAGESIZE unsetenv va fallback memcpy dst FUNC
26904 @c  LocalWords:  PowerPC GNUC libPW pragma Olibcalls CHOWN chown CLOSEDIR VFORK
26905 @c  LocalWords:  closedir FNMATCH fnmatch vfork FSEEKO LARGEFILE fseeko SVR sc
26906 @c  LocalWords:  largefile GETGROUPS getgroups GETLOADAVG DGUX UMAX NLIST KMEM
26907 @c  LocalWords:  SETGID getloadavg nlist GETMNTENT irix acxindex autom
26908 @c  LocalWords:  getmntent UnixWare GETPGRP getpgid getpgrp Posix's pid LSTAT
26909 @c  LocalWords:  lstat rpl MEMCMP memcmp OpenStep MBRTOWC mbrtowc MKTIME mktime
26910 @c  LocalWords:  localtime MMAP mmap OBSTACK obstack obstacks ARGTYPES timeval
26911 @c  LocalWords:  SETPGRP setpgrp defmacx Hurd SETVBUF setvbuf STRCOLL strcoll
26912 @c  LocalWords:  STRTOD strtod DECL STRFTIME strftime SCO UTIME utime VPRINTF
26913 @c  LocalWords:  DOPRNT vprintf doprnt sp unfixable LIBSOURCE LIBSOURCES Eggert
26914 @c  LocalWords:  linux netinet ia Tru XFree DIRENT NDIR dirent ndir multitable
26915 @c  LocalWords:  NAMLEN strlen namlen MKDEV SYSMACROS makedev RESOLV resolv DNS
26916 @c  LocalWords:  inet structs NAMESER arpa NETDB netdb UTekV UTS GCC's kB
26917 @c  LocalWords:  STDBOOL BOOL stdbool cplusplus bool Bool stdarg tm te
26918 @c  LocalWords:  ctype strchr strrchr rindex bcopy memmove memchr WEXITSTATUS
26919 @c  LocalWords:  WIFEXITED TIOCGWINSZ GWINSZ termios preprocess preprocessable
26920 @c  LocalWords:  DECLS strdup calloc BLKSIZE blksize RDEV rdev TZNAME tzname pw
26921 @c  LocalWords:  passwd gecos pwd MBSTATE mbstate wchar RETSIGTYPE hup UID uid
26922 @c  LocalWords:  gid ptrdiff uintmax EXEEXT OBJEXT Ae conftest AXP str
26923 @c  LocalWords:  ALIGNOF WERROR Werror cpp HP's WorkShop egcs un fied stdc CXX
26924 @c  LocalWords:  varargs BIGENDIAN Endianness SPARC endianness grep'ed CONST FC
26925 @c  LocalWords:  const STRINGIZE stringizing PARAMS unprotoize protos KCC cxx
26926 @c  LocalWords:  xlC aCC CXXCPP FREEFORM xlf FLIBS FCLIBS ish SRCEXT XTRA LFS
26927 @c  LocalWords:  ISC lcposix MINIX Minix conditionalized inlines hw dD confdefs
26928 @c  LocalWords:  fputs stdout PREPROC ar UFS HFS QNX realtime fstype STATVFS se
26929 @c  LocalWords:  statvfs STATFS statfs func machfile hdr lelf raboof DEFUN GTK
26930 @c  LocalWords:  GTKMM Grmph ified ine defn baz EOF qar Ahhh changecom algol io
26931 @c  LocalWords:  changeword quadrigraphs quadrigraph dnl SGI atoi overquoting
26932 @c  LocalWords:  Aas Wcross sep args namespace undefine bpatsubst popdef dquote
26933 @c  LocalWords:  bregexp Overquote overquotation meisch maisch meische maische
26934 @c  LocalWords:  miscian DIRNAME dirname MKDIR CATFILE XMKMF TRAVOLTA celsius
26935 @c  LocalWords:  EMX emxos Emacsen Korn DYNIX subshell posix Ksh ksh Pdksh Zsh
26936 @c  LocalWords:  pdksh zsh Allbery Lipe Kubota UWS zorglub stderr eval esac lfn
26937 @c  LocalWords:  drivespec Posixy DJGPP doschk prettybird LPT pfew Zsh's yu yaa
26938 @c  LocalWords:  yM uM aM firebird IP subdir misparses ok Unpatched abc bc zA
26939 @c  LocalWords:  CDPATH DUALCASE LINENO prepass Subshells lineno NULLCMD cmp wc
26940 @c  LocalWords:  MAILPATH scanset arg NetBSD Almquist printf expr cp pR
26941 @c  LocalWords:  Oliva awk Aaaaarg cmd regex xfoo GNV OpenVMS VM url fc
26942 @c  LocalWords:  sparc Proulx nbar nfoo maxdepth acdilrtu TWG mc ing FP
26943 @c  LocalWords:  mkdir exe uname OpenBSD Fileutils mktemp umask TMPDIR guid os
26944 @c  LocalWords:  fooXXXXXX Unicos utimes hpux hppa unescaped SUBST'ed
26945 @c  LocalWords:  pmake DOS's gmake ifoo DESTDIR autoconfiscated pc coff mips gg
26946 @c  LocalWords:  dec ultrix cpu wildcards rpcc rdtsc powerpc readline
26947 @c  LocalWords:  withval vxworks gless localcache usr LOFF loff CYGWIN Cygwin
26948 @c  LocalWords:  cygwin SIGLIST siglist SYSNDIR SYSDIR ptx lseq rusage elif MSC
26949 @c  LocalWords:  lfoo POUNDBANG lsun NIS getpwnam SYSCALLS RSH INTL lintl aix
26950 @c  LocalWords:  intl lx ldir syslog bsd EPI toolchain netbsd objext de KNR nn
26951 @c  LocalWords:  fication LTLIBOBJS Wdiff TESTDIR atconfig atlocal akim XFAIL
26952 @c  LocalWords:  ChangeLog prepended errexit smallexample TESTSUITEFLAGS GPL er
26953 @c  LocalWords:  installcheck autotest indir Pixley Bothner Eichin Kerberos adl
26954 @c  LocalWords:  DISTCLEANFILES preprocessor's fileutils Stallman Murphey Stenn
26955 @c  LocalWords:  Manfredi Autoconfig TCL FSP david zuhn Blandy MACRODIR Raeburn
26956 @c  LocalWords:  autoconfiscate Savoye Haertel Avera Meyering fdl appendixsec
26957 @c  LocalWords:  printindex american LIBOBJDIR LibdirTest ERLCFLAGS OBJCFLAGS
26958 @c  LocalWords:  VER Gnulib online xyes strcpy TYPEOF typeof OBJC objcc objc ln
26959 @c  LocalWords:  GOBJC OTP ERLC erl valloc decr dumpdef errprint incr
26960 @c  LocalWords:  esyscmd len maketemp pushdef substr syscmd sysval translit txt
26961 @c  LocalWords:  sinclude foreach myvar tolower toupper uniq BASENAME STDIN
26962 @c  LocalWords:  Dynix basename aname cname macroexpands xno xcheck iso
26963 @c  LocalWords:  LIBREADLINE lreadline lncurses libreadline vrindex SYS
26964 @c  LocalWords:  syncodeindex define'd caindex CAindex MacKenzie DIRS
26965 @c  LocalWords:  Runtime runtime Submakes submakes MAKEFLAGS whitespace
26966 @c  LocalWords:  Timestamps Unportability Canonicalizing stdalign dirN
26967 @c  LocalWords:  acinclude AMFLAGS LIBS OBJCXXFLAGS GOFLAGS runstatedir
26968 @c  LocalWords:  metacharacter EXPENSIVEP errno setjmp wctype sys mawk
26969 @c  LocalWords:  nawk ggrep egrep gegrep fgrep gfgrep LEX lex yytext nm
26970 @c  LocalWords:  yywrap xflex lexyy YFLAGS yacc divnum libs fuindex ffs
26971 @c  LocalWords:  environ sigaction extern ftello nonnull STRTOLD LLONG
26972 @c  LocalWords:  strtold vfprintf ULLONG strcasecmp strncasecmp MSVC th
26973 @c  LocalWords:  NDEBUG Xenix INO libc ISDIR ISREG Tektronix Amdahl ino
26974 @c  LocalWords:  typedef pxref fileblocks submembers INTMAX intmax UINT
26975 @c  LocalWords:  INTPTR intptr SSIZE ssize uint UINTPTR uintptr OPENMP
26976 @c  LocalWords:  openmp OpenMP omp Alignas Alignof Noreturn UTF vals gl
26977 @c  LocalWords:  offsetof VARARRAYS VLA CCC stdcxx nullptr
26978 @c  LocalWords:  constexpr decltype unicode fstreams iostreams iomanip
26979 @c  LocalWords:  stringstreams GXX OBJCPP OBJCXX objcxx GOBJCXX erlc tx
26980 @c  LocalWords:  OBJCXXCPP FIXEDFORM GFC argc argv shellvar fpp MODEXT
26981 @c  LocalWords:  freeform fixedform MODINC MODOUT gccgo GOC xmkmf fseek
26982 @c  LocalWords:  interpval ftell Interix macOS PTHREAD NonStop XOPEN xc
26983 @c  LocalWords:  IEC ATTRIBS BFP DFP O'Donell Sebor ERTS Erlang's erts
26984 @c  LocalWords:  erlang Wundef scalable USG NOTMAKE DOUCH
26985 @c  LocalWords:  IVE changesyntax ifnotinfo oline num cfg debugfile cdr
26986 @c  LocalWords:  debugmode traceoff traceon patsubst dumpdefs ifelse aa
26987 @c  LocalWords:  mkstemp undivert lifo errprintn BINSH sanitization bcd
26988 @c  LocalWords:  cleardivert bmatch bpatsubsts subst cond nblank ifval
26989 @c  LocalWords:  ifblank ifnblank ifvaln fputc fgetc argn mapall dvarv
26990 @c  LocalWords:  shiftn abcd elt noquote mkargs joinall SHA prereq dup
26991 @c  LocalWords:  listc setb seta ARITH HNUM xcurly xoccupied
26992 @c  LocalWords:  TESTA TESTB TESTC hoc xpg xxyzzyz dtksh nosuch fifos
26993 @c  LocalWords:  fifo Stardent sig WIF WIFSIGNALED SIGQUIT tty perl ret
26994 @c  LocalWords:  SIGINT NUL SFN PRN aeiou MSYS SIGTERM xhi arith UWIN
26995 @c  LocalWords:  CLICOLOR FPATH POSIXLY Shellshock CVE OSF doit ec ci
26996 @c  LocalWords:  notreached cim nc ACL faccessat Alexandre getline sqrt
26997 @c  LocalWords:  CONVFMT FS OFMT CDS chgrp futimens utimensat oo esc od
26998 @c  LocalWords:  ownerships mape readdir mkfifo mknod testsuites XSI rf
26999 @c  LocalWords:  bcdox hexdump filelist rmdir flushleft busybox nl HAZy
27000 @c  LocalWords:  ABCDEFGHIJKLMNOPQRSTUVWXYZ Fantazy FAntAZy adc unix xb
27001 @c  LocalWords:  SUBMAKEFLAGS ehBc ehB hBc hvB dmake hostname nlinit xf
27002 @c  LocalWords:  DCOMMENT bart pathnames ifhtml randx
27003 @c  LocalWords:  sumc hic ic fwrapv ftrapv SIGFPE memset fmudflap ctime
27004 @c  LocalWords:  asctime lvalues lvalue Multithreaded decstation gdb na
27005 @c  LocalWords:  enableval lesskey FHS superset waitpid libfoo cposix
27006 @c  LocalWords:  mem RESTARTABLE bzero DejaGNU EUNIT subfile optarg ive
27007 @c  LocalWords:  nolog expout experr erlflags EUnit testme eunit myprog
27008 @c  LocalWords:  configmake vx bashdb tvtwm questers UUCP McGrath
27009 @c  LocalWords:  ispell
27010 @c Local Variables:
27011 @c fill-column: 72
27012 @c ispell-local-dictionary: "american"
27013 @c indent-tabs-mode: nil
27014 @c whitespace-check-buffer-indent: nil
27015 @c End: