summaryrefslogtreecommitdiff
path: root/util/autoconf/autoconf.info-3
blob: 0cbd5dbcf8e42ecd6e0d9abb0d7d89e558cea15d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
This is Info file autoconf.info, produced by Makeinfo-1.55 from the
input file ./autoconf.texi.

START-INFO-DIR-ENTRY
* Autoconf: (autoconf).         Create source code configuration scripts.
END-INFO-DIR-ENTRY

   This file documents the GNU Autoconf package for creating scripts to
configure source code packages using templates and an `m4' macro
package.

   Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.

   Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

   Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided that
the entire resulting derived work is distributed under the terms of a
permission notice identical to this one.

   Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that this permission notice may be stated in a
translation approved by the Foundation.


File: autoconf.info,  Node: Run Time,  Next: Portable Shell,  Prev: Examining Libraries,  Up: Writing Tests

Checking Run Time Behavior
==========================

   Sometimes you need to find out how a system performs at run time,
such as whether a given function has a certain capability or bug.  If
you can, make such checks when your program runs instead of when it is
configured.  You can check for things like the machine's endianness when
your program initializes itself.

   If you really need to test for a run-time behavior while configuring,
you can write a test program to determine the result, and compile and
run it using `AC_TRY_RUN'.  Avoid running test programs if possible,
because using them prevents people from configuring your package for
cross-compiling.

* Menu:

* Test Programs::               Running test programs.
* Guidelines::			General rules for writing test programs.
* Test Functions::		Avoiding pitfalls in test programs.


File: autoconf.info,  Node: Test Programs,  Next: Guidelines,  Up: Run Time

Running Test Programs
---------------------

   Use the following macro if you need to test run-time behavior of the
system while configuring.

 - Macro: AC_TRY_RUN (PROGRAM, ACTION-IF-TRUE [, ACTION-IF-FALSE [,
          ACTION-IF-CROSS-COMPILING]])
     PROGRAM is the text of a C program, on which shell variable and
     backquote substitutions are performed.  If it compiles and links
     successfully and returns an exit status of 0 when executed, run
     shell commands ACTION-IF-TRUE.  Otherwise run shell commands
     ACTION-IF-FALSE; the exit status of the program is available in
     the shell variable `$?'.  This macro uses `CFLAGS' or `CXXFLAGS',
     `CPPFLAGS', `LDFLAGS', and `LIBS' when compiling.

     If the C compiler being used does not produce executables that run
     on the system where `configure' is being run, then the test
     program is not run.  If the optional shell commands
     ACTION-IF-CROSS-COMPILING are given, they are run instead and this
     macro calls `AC_C_CROSS' if it has not already been called.
     Otherwise, `configure' prints an error message and exits.

   Try to provide a pessimistic default value to use when
cross-compiling makes run-time tests impossible.  You do this by
passing the optional last argument to `AC_TRY_RUN'.  `autoconf' prints
a warning message when creating `configure' each time it encounters a
call to `AC_TRY_RUN' with no ACTION-IF-CROSS-COMPILING argument given.
You may ignore the warning, though users will not be able to configure
your package for cross-compiling.  A few of the macros distributed with
Autoconf produce this warning message.

   To configure for cross-compiling you can also choose a value for
those parameters based on the canonical system name (*note Manual
Configuration::.).  Alternatively, set up a test results cache file with
the correct values for the target system (*note Caching Results::.).

   To provide a default for calls of `AC_TRY_RUN' that are embedded in
other macros, including a few of the ones that come with Autoconf, you
can call `AC_C_CROSS' before running them.  Then, if the shell variable
`cross_compiling' is set to `yes', use an alternate method to get the
results instead of calling the macros.

 - Macro: AC_C_CROSS
     If the C compiler being used does not produce executables that can
     run on the system where `configure' is being run, set the shell
     variable `cross_compiling' to `yes', otherwise `no'.


File: autoconf.info,  Node: Guidelines,  Next: Test Functions,  Prev: Test Programs,  Up: Run Time

Guidelines for Test Programs
----------------------------

   Test programs should not write anything to the standard output.  They
should return 0 if the test succeeds, nonzero otherwise, so that success
can be distinguished easily from a core dump or other failure;
segmentation violations and other failures produce a nonzero exit
status.  Test programs should `exit', not `return', from `main',
because on some systems (old Suns, at least) the argument to `return'
in `main' is ignored.

   Test programs can use `#if' or `#ifdef' to check the values of
preprocessor macros defined by tests that have already run.  For
example, if you call `AC_HEADER_STDC', then later on in `configure.in'
you can have a test program that includes an ANSI C header file
conditionally:

     #if STDC_HEADERS
     # include <stdlib.h>
     #endif

   If a test program needs to use or create a data file, give it a name
that starts with `conftest', such as `conftestdata'.  The `configure'
script cleans up by running `rm -rf conftest*' after running test
programs and if the script is interrupted.


File: autoconf.info,  Node: Test Functions,  Prev: Guidelines,  Up: Run Time

Test Functions
--------------

   Function declarations in test programs should have a prototype
conditionalized for C++.  In practice, though, test programs rarely need
functions that take arguments.

     #ifdef __cplusplus
     foo(int i)
     #else
     foo(i) int i;
     #endif

   Functions that test programs declare should also be conditionalized
for C++, which requires `extern "C"' prototypes.  Make sure to not
include any header files containing clashing prototypes.

     #ifdef __cplusplus
     extern "C" void *malloc(size_t);
     #else
     char *malloc();
     #endif

   If a test program calls a function with invalid parameters (just to
see whether it exists), organize the program to ensure that it never
invokes that function.  You can do this by calling it in another
function that is never invoked.  You can't do it by putting it after a
call to `exit', because GCC version 2 knows that `exit' never returns
and optimizes out any code that follows it in the same block.

   If you include any header files, make sure to call the functions
relevant to them with the correct number of arguments, even if they are
just 0, to avoid compilation errors due to prototypes.  GCC version 2
has internal prototypes for several functions that it automatically
inlines; for example, `memcpy'.  To avoid errors when checking for
them, either pass them the correct number of arguments or redeclare them
with a different return type (such as `char').


File: autoconf.info,  Node: Portable Shell,  Next: Testing Values and Files,  Prev: Run Time,  Up: Writing Tests

Portable Shell Programming
==========================

   When writing your own checks, there are some shell script programming
techniques you should avoid in order to make your code portable.  The
Bourne shell and upward-compatible shells like Bash and the Korn shell
have evolved over the years, but to prevent trouble, do not take
advantage of features that were added after UNIX version 7, circa 1977.
You should not use shell functions, aliases, negated character classes,
or other features that are not found in all Bourne-compatible shells;
restrict yourself to the lowest common denominator.  Even `unset' is
not supported by all shells!

   The set of external programs you should run in a `configure' script
is fairly small.  *Note Utilities in Makefiles:
(standards.info)Utilities in Makefiles, for the list.  This restriction
allows users to start out with a fairly small set of programs and build
the rest, avoiding too many interdependencies between packages.

   Some of these external utilities have a portable subset of features,
as well; for example, don't rely on `ln' having a `-f' option or `cat'
having any options.  `sed' scripts should not contain comments or use
branch labels longer than 8 characters.  Don't use `grep -s' to
suppress output, because `grep -s' on System V does not suppress
output, only error messages.  Instead, redirect the standard output and
standard error (in case the file doesn't exist) of `grep' to
`/dev/null'.  Check the exit status of `grep' to determine whether it
found a match.


File: autoconf.info,  Node: Testing Values and Files,  Next: Multiple Cases,  Prev: Portable Shell,  Up: Writing Tests

Testing Values and Files
========================

   `configure' scripts need to test properties of many files and
strings.  Here are some portability problems to watch out for when doing
those tests.

   The `test' program is the way to perform many file and string tests.
It is often invoked by the alternate name `[', but using that name in
Autoconf code is asking for trouble since it is an `m4' quote character.

   If you need to make multiple checks using `test', combine them with
the shell operators `&&' and `||' instead of using the `test' operators
`-a' and `-o'.  On System V, the precedence of `-a' and `-o' is wrong
relative to the unary operators; consequently, POSIX does not specify
them, so using them is nonportable.  If you combine `&&' and `||' in
the same statement, keep in mind that they have equal precedence.

   To enable `configure' scripts to support cross-compilation, they
shouldn't do anything that tests features of the host system instead of
the target system.  But occasionally you may find it necessary to check
whether some arbitrary file exists.  To do so, use `test -f' or `test
-r'.  Do not use `test -x', because 4.3BSD does not have it.

   Another nonportable shell programming construction is
     VAR=${VAR:-VALUE}

The intent is to set VAR to VALUE only if it is not already set, but if
VAR has any value, even the empty string, to leave it alone.  Old BSD
shells, including the Ultrix `sh', don't accept the colon, and complain
and die.  A portable equivalent is
     : ${VAR=VALUE}


File: autoconf.info,  Node: Multiple Cases,  Next: Language Choice,  Prev: Testing Values and Files,  Up: Writing Tests

Multiple Cases
==============

   Some operations are accomplished in several possible ways, depending
on the UNIX variant.  Checking for them essentially requires a "case
statement".  Autoconf does not directly provide one; however, it is
easy to simulate by using a shell variable to keep track of whether a
way to perform the operation has been found yet.

   Here is an example that uses the shell variable `fstype' to keep
track of whether the remaining cases need to be checked.

     AC_MSG_CHECKING(how to get filesystem type)
     fstype=no
     # The order of these tests is important.
     AC_TRY_CPP([#include <sys/statvfs.h>
     #include <sys/fstyp.h>], AC_DEFINE(FSTYPE_STATVFS) fstype=SVR4)
     if test $fstype = no; then
     AC_TRY_CPP([#include <sys/statfs.h>
     #include <sys/fstyp.h>], AC_DEFINE(FSTYPE_USG_STATFS) fstype=SVR3)
     fi
     if test $fstype = no; then
     AC_TRY_CPP([#include <sys/statfs.h>
     #include <sys/vmount.h>], AC_DEFINE(FSTYPE_AIX_STATFS) fstype=AIX)
     fi
     # (more cases omitted here)
     AC_MSG_RESULT($fstype)


File: autoconf.info,  Node: Language Choice,  Prev: Multiple Cases,  Up: Writing Tests

Language Choice
===============

   Packages that use both C and C++ need to test features of both
compilers.  Autoconf-generated `configure' scripts check for C features
by default.  The following macros determine which language's compiler
is used in tests that follow in `configure.in'.

 - Macro: AC_LANG_C
     Do compilation tests using `CC' and `CPP' and use extension `.c'
     for test programs.

 - Macro: AC_LANG_CPLUSPLUS
     Do compilation tests using `CXX' and `CXXCPP' and use extension
     `.C' for test programs.

 - Macro: AC_LANG_SAVE
     Remember the current language (as set by `AC_LANG_C' or
     `AC_LANG_CPLUSPLUS') on a stack.  Does not change which language is
     current.  Use this macro and `AC_LANG_RESTORE' in macros that need
     to temporarily switch to a particular language.

 - Macro: AC_LANG_RESTORE
     Select the language that is saved on the top of the stack, as set
     by `AC_LANG_SAVE', and remove it from the stack.  This macro is
     equivalent to either `AC_LANG_C' or `AC_LANG_CPLUSPLUS', whichever
     had been run most recently when `AC_LANG_SAVE' was last called.

     Do not call this macro more times than `AC_LANG_SAVE'.

 - Macro: AC_REQUIRE_CPP
     Ensure that whichever preprocessor would currently be used for
     tests has been found.  Calls `AC_REQUIRE' (*note Prerequisite
     Macros::.) with an argument of either `AC_PROG_CPP' or
     `AC_PROG_CXXCPP', depending on which language is current.


File: autoconf.info,  Node: Results,  Next: Writing Macros,  Prev: Writing Tests,  Up: Top

Results of Tests
****************

   Once `configure' has determined whether a feature exists, what can
it do to record that information?  There are four sorts of things it can
do: define a C preprocessor symbol, set a variable in the output files,
save the result in a cache file for future `configure' runs, and print
a message letting the user know the result of the test.

* Menu:

* Defining Symbols::            Defining C preprocessor symbols.
* Setting Output Variables::	Replacing variables in output files.
* Caching Results::             Speeding up subsequent `configure' runs.
* Printing Messages::           Notifying users of progress or problems.


File: autoconf.info,  Node: Defining Symbols,  Next: Setting Output Variables,  Up: Results

Defining C Preprocessor Symbols
===============================

   A common action to take in response to a feature test is to define a
C preprocessor symbol indicating the results of the test.  That is done
by calling `AC_DEFINE' or `AC_DEFINE_UNQUOTED'.

   By default, `AC_OUTPUT' places the symbols defined by these macros
into the output variable `DEFS', which contains an option
`-DSYMBOL=VALUE' for each symbol defined.  Unlike in Autoconf version
1, there is no variable `DEFS' defined while `configure' is running.
To check whether Autoconf macros have already defined a certain C
preprocessor symbol, test the value of the appropriate cache variable,
as in this example:

     AC_CHECK_FUNC(vprintf, AC_DEFINE(HAVE_VPRINTF))
     if test "$ac_cv_func_vprintf" != yes; then
     AC_CHECK_FUNC(_doprnt, AC_DEFINE(HAVE_DOPRNT))
     fi

   If `AC_CONFIG_HEADER' has been called, then instead of creating
`DEFS', `AC_OUTPUT' creates a header file by substituting the correct
values into `#define' statements in a template file.  *Note
Configuration Headers::, for more information about this kind of output.

 - Macro: AC_DEFINE (VARIABLE [, VALUE])
     Define C preprocessor variable VARIABLE.  If VALUE is given, set
     VARIABLE to that value (verbatim), otherwise set it to 1.  VALUE
     should not contain literal newlines, and if you are not using
     `AC_CONFIG_HEADER' it should not contain any `#' characters, as
     `make' tends to eat them.  To use a shell variable (which you need
     to do in order to define a value containing the `m4' quote
     characters `[' or `]'), use `AC_DEFINE_UNQUOTED' instead.  The
     following example defines the C preprocessor variable `EQUATION'
     to be the string constant `"$a > $b"':

          AC_DEFINE(EQUATION, "$a > $b")

 - Macro: AC_DEFINE_UNQUOTED (VARIABLE [, VALUE])
     Like `AC_DEFINE', but three shell expansions are
     performed--once--on VARIABLE and VALUE: variable expansion (`$'),
     command substitution (``'), and backslash escaping (`\').  Single
     and double quote characters in the value have no special meaning.
     Use this macro instead of `AC_DEFINE' when VARIABLE or VALUE is a
     shell variable.  Examples:

          AC_DEFINE_UNQUOTED(config_machfile, "${machfile}")
          AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups)
          AC_DEFINE_UNQUOTED(${ac_tr_hdr})

   Due to the syntactical bizarreness of the Bourne shell, do not use
semicolons to separate `AC_DEFINE' or `AC_DEFINE_UNQUOTED' calls from
other macro calls or shell code; that can cause syntax errors in the
resulting `configure' script.  Use either spaces or newlines.  That is,
do this:

     AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4) LIBS="$LIBS -lelf")

or this:

     AC_CHECK_HEADER(elf.h,
       AC_DEFINE(SVR4)
       LIBS="$LIBS -lelf")

instead of this:

     AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4); LIBS="$LIBS -lelf")


File: autoconf.info,  Node: Setting Output Variables,  Next: Caching Results,  Prev: Defining Symbols,  Up: Results

Setting Output Variables
========================

   One way to record the results of tests is to set "output variables",
which are shell variables whose values are substituted into files that
`configure' outputs.  The two macros below create new output variables.
*Note Preset Output Variables::, for a list of output variables that
are always available.

 - Macro: AC_SUBST (VARIABLE)
     Create an output variable from a shell variable.  Make `AC_OUTPUT'
     substitute the variable VARIABLE into output files (typically one
     or more `Makefile's).  This means that `AC_OUTPUT' will replace
     instances of `@VARIABLE@' in input files with the value that the
     shell variable VARIABLE has when `AC_OUTPUT' is called.  The value
     of VARIABLE should not contain literal newlines.

 - Macro: AC_SUBST_FILE (VARIABLE)
     Another way to create an output variable from a shell variable.
     Make `AC_OUTPUT' insert (without substitutions) the contents of
     the file named by shell variable VARIABLE into output files.  This
     means that `AC_OUTPUT' will replace instances of `@VARIABLE@' in
     output files (such as `Makefile.in') with the contents of the file
     that the shell variable VARIABLE names when `AC_OUTPUT' is called.
     Set the variable to `/dev/null' for cases that do not have a file
     to insert.

     This macro is useful for inserting `Makefile' fragments containing
     special dependencies or other `make' directives for particular host
     or target types into `Makefile's.  For example, `configure.in'
     could contain:

          AC_SUBST_FILE(host_frag)dnl
          host_frag=$srcdir/conf/sun4.mh

     and then a `Makefile.in' could contain:

          @host_frag@


File: autoconf.info,  Node: Caching Results,  Next: Printing Messages,  Prev: Setting Output Variables,  Up: Results

Caching Results
===============

   To avoid checking for the same features repeatedly in various
`configure' scripts (or repeated runs of one script), `configure' saves
the results of many of its checks in a "cache file".  If, when a
`configure' script runs, it finds a cache file, it reads from it the
results from previous runs and avoids rerunning those checks.  As a
result, `configure' can run much faster than if it had to perform all
of the checks every time.

 - Macro: AC_CACHE_VAL (CACHE-ID, COMMANDS-TO-SET-IT)
     Ensure that the results of the check identified by CACHE-ID are
     available.  If the results of the check were in the cache file
     that was read, and `configure' was not given the `--quiet' or
     `--silent' option, print a message saying that the result was
     cached; otherwise, run the shell commands COMMANDS-TO-SET-IT.
     Those commands should have no side effects except for setting the
     variable CACHE-ID.  In particular, they should not call
     `AC_DEFINE'; the code that follows the call to `AC_CACHE_VAL'
     should do that, based on the cached value.  Also, they should not
     print any messages, for example with `AC_MSG_CHECKING'; do that
     before calling `AC_CACHE_VAL', so the messages are printed
     regardless of whether the results of the check are retrieved from
     the cache or determined by running the shell commands.  If the
     shell commands are run to determine the value, the value will be
     saved in the cache file just before `configure' creates its output
     files.  *Note Cache Variable Names::, for how to choose the name
     of the CACHE-ID variable.

* Menu:

* Cache Variable Names::        Shell variables used in caches.
* Cache Files::	        	Files `configure' uses for caching.


File: autoconf.info,  Node: Cache Variable Names,  Next: Cache Files,  Up: Caching Results

Cache Variable Names
--------------------

   The names of cache variables should have the following format:

     PACKAGE-PREFIX_cv_VALUE-TYPE_SPECIFIC-VALUE[_ADDITIONAL-OPTIONS]

for example, `ac_cv_header_stat_broken' or
`ac_cv_prog_gcc_traditional'.  The parts of the variable name are:

PACKAGE-PREFIX
     An abbreviation for your package or organization; the same prefix
     you begin local Autoconf macros with, except lowercase by
     convention.  For cache values used by the distributed Autoconf
     macros, this value is `ac'.

`_cv_'
     Indicates that this shell variable is a cache value.

VALUE-TYPE
     A convention for classifying cache values, to produce a rational
     naming system.  The values used in Autoconf are listed in *Note
     Macro Names::.

SPECIFIC-VALUE
     Which member of the class of cache values this test applies to.
     For example, which function (`alloca'), program (`gcc'), or output
     variable (`INSTALL').

ADDITIONAL-OPTIONS
     Any particular behavior of the specific member that this test
     applies to.  For example, `broken' or `set'.  This part of the
     name may be omitted if it does not apply.

   Like their names, the values that may be assigned to cache variables
have a few restrictions.  The values may not contain single quotes or
curly braces.  Usually, their values will be boolean (`yes' or `no') or
the names of files or functions; so this is not an important
restriction.


File: autoconf.info,  Node: Cache Files,  Prev: Cache Variable Names,  Up: Caching Results

Cache Files
-----------

   A cache file is a shell script that caches the results of configure
tests run on one system so they can be shared between configure scripts
and configure runs.  It is not useful on other systems.  If its contents
are invalid for some reason, the user may delete or edit it.

   By default, configure uses `./config.cache' as the cache file,
creating it if it does not exist already.  `configure' accepts the
`--cache-file=FILE' option to use a different cache file; that is what
`configure' does when it calls `configure' scripts in subdirectories,
so they share the cache.  Giving `--cache-file=/dev/null' disables
caching, for debugging `configure'.  *Note Subdirectories::, for
information on configuring subdirectories with the `AC_CONFIG_SUBDIRS'
macro.  `config.status' only pays attention to the cache file if it is
given the `--recheck' option, which makes it rerun `configure'.

   It is wrong to try to distribute cache files for particular system
types.  There is too much room for error in doing that, and too much
administrative overhead in maintaining them.  For any features that
can't be guessed automatically, use the standard method of the canonical
system type and linking files (*note Manual Configuration::.).

   The cache file on a particular system will gradually accumulate
whenever someone runs a `configure' script; it will be initially
nonexistent.  Running `configure' merges the new cache results with the
existing cache file.  The site initialization script can specify a
site-wide cache file to use instead of the default, to make it work
transparently, as long as the same C compiler is used every time (*note
Site Defaults::.).


File: autoconf.info,  Node: Printing Messages,  Prev: Caching Results,  Up: Results

Printing Messages
=================

   `configure' scripts need to give users running them several kinds of
information.  The following macros print messages in ways appropriate
for each kind.  The arguments to all of them get enclosed in shell
double quotes, so the shell performs variable and backquote substitution
on them.

   These macros are all wrappers around the `echo' shell command.
`configure' scripts should rarely need to run `echo' directly to print
messages for the user.  Using these macros makes it easy to change how
and when each kind of message is printed; such changes need only be
made to the macro definitions, and all of the callers change
automatically.

 - Macro: AC_MSG_CHECKING (FEATURE-DESCRIPTION)
     Notify the user that `configure' is checking for a particular
     feature.  This macro prints a message that starts with `checking '
     and ends with `...' and no newline.  It must be followed by a call
     to `AC_MSG_RESULT' to print the result of the check and the
     newline.  The FEATURE-DESCRIPTION should be something like
     `whether the Fortran compiler accepts C++ comments' or `for c89'.

     This macro prints nothing if `configure' is run with the `--quiet'
     or `--silent' option.

 - Macro: AC_MSG_RESULT (RESULT-DESCRIPTION)
     Notify the user of the results of a check.  RESULT-DESCRIPTION is
     almost always the value of the cache variable for the check,
     typically `yes', `no', or a file name.  This macro should follow a
     call to `AC_MSG_CHECKING', and the RESULT-DESCRIPTION should be
     the completion of the message printed by the call to
     `AC_MSG_CHECKING'.

     This macro prints nothing if `configure' is run with the `--quiet'
     or `--silent' option.

 - Macro: AC_MSG_ERROR (ERROR-DESCRIPTION)
     Notify the user of an error that prevents `configure' from
     completing.  This macro prints an error message on the standard
     error stream and exits `configure' with a nonzero status.
     eRROR-DESCRIPTION should be something like `invalid value $HOME
     for \$HOME'.

 - Macro: AC_MSG_WARN (PROBLEM-DESCRIPTION)
     Notify the `configure' user of a possible problem.  This macro
     prints the message on the standard error stream; `configure'
     continues running afterward, so macros that call `AC_MSG_WARN'
     should provide a default (back-up) behavior for the situations
     they warn about.  PROBLEM-DESCRIPTION should be something like `ln
     -s seems to make hard links'.

   The following two macros are an obsolete alternative to
`AC_MSG_CHECKING' and `AC_MSG_RESULT'.

 - Macro: AC_CHECKING (FEATURE-DESCRIPTION)
     This macro is similar to `AC_MSG_CHECKING', except that it prints a
     newline after the FEATURE-DESCRIPTION.  It is useful mainly to
     print a general description of the overall purpose of a group of
     feature checks, e.g.,

          AC_CHECKING(if stack overflow is detectable)

 - Macro: AC_VERBOSE (RESULT-DESCRIPTION)
     This macro is similar to `AC_MSG_RESULT', except that it is meant
     to follow a call to `AC_CHECKING' instead of `AC_MSG_CHECKING'; it
     starts the message it prints with a tab.  It is considered
     obsolete.


File: autoconf.info,  Node: Writing Macros,  Next: Manual Configuration,  Prev: Results,  Up: Top

Writing Macros
**************

   When you write a feature test that could be applicable to more than
one software package, the best thing to do is encapsulate it in a new
macro.  Here are some instructions and guidelines for writing Autoconf
macros.

* Menu:

* Macro Definitions::		Basic format of an Autoconf macro.
* Macro Names::                 What to call your new macros.
* Quoting::			Protecting macros from unwanted expansion.
* Dependencies Between Macros::	What to do when macros depend on other macros.


File: autoconf.info,  Node: Macro Definitions,  Next: Macro Names,  Up: Writing Macros

Macro Definitions
=================

   Autoconf macros are defined using the `AC_DEFUN' macro, which is
similar to the `m4' builtin `define' macro.  In addition to defining a
macro, `AC_DEFUN' adds to it some code which is used to constrain the
order in which macros are called (*note Prerequisite Macros::.).

   An Autoconf macro definition looks like this:

     AC_DEFUN(MACRO-NAME, [MACRO-BODY])

The square brackets here do not indicate optional text: they should
literally be present in the macro definition to avoid macro expansion
problems (*note Quoting::.).  You can refer to any arguments passed to
the macro as `$1', `$2', etc.

   To introduce comments in `m4', use the `m4' builtin `dnl'; it causes
`m4' to discard the text through the next newline.  It is not needed
between macro definitions in `acsite.m4' and `aclocal.m4', because all
output is discarded until `AC_INIT' is called.

   *Note How to define new macros: (m4.info)Definitions, for more
complete information on writing `m4' macros.


File: autoconf.info,  Node: Macro Names,  Next: Quoting,  Prev: Macro Definitions,  Up: Writing Macros

Macro Names
===========

   All of the Autoconf macros have all-uppercase names starting with
`AC_' to prevent them from accidentally conflicting with other text.
All shell variables that they use for internal purposes have
mostly-lowercase names starting with `ac_'.  To ensure that your macros
don't conflict with present or future Autoconf macros, you should
prefix your own macro names and any shell variables they use with some
other sequence.  Possibilities include your initials, or an abbreviation
for the name of your organization or software package.

   Most of the Autoconf macros' names follow a structured naming
convention that indicates the kind of feature check by the name.  The
macro names consist of several words, separated by underscores, going
from most general to most specific.   The names of their cache
variables use the same convention (*note Cache Variable Names::., for
more information on them).

   The first word of the name after `AC_' usually tells the category of
feature being tested.  Here are the categories used in Autoconf for
specific test macros, the kind of macro that you are more likely to
write.  They are also used for cache variables, in all-lowercase.  Use
them where applicable; where they're not, invent your own categories.

`C'
     C language builtin features.

`DECL'
     Declarations of C variables in header files.

`FUNC'
     Functions in libraries.

`GROUP'
     UNIX group owners of files.

`HEADER'
     Header files.

`LIB'
     C libraries.

`PATH'
     The full path names to files, including programs.

`PROG'
     The base names of programs.

`STRUCT'
     Definitions of C structures in header files.

`SYS'
     Operating system features.

`TYPE'
     C builtin or declared types.

`VAR'
     C variables in libraries.

   After the category comes the name of the particular feature being
tested.  Any further words in the macro name indicate particular aspects
of the feature.  For example, `AC_FUNC_UTIME_NULL' checks the behavior
of the `utime' function when called with a `NULL' pointer.

   A macro that is an internal subroutine of another macro should have a
name that starts with the name of that other macro, followed by one or
more words saying what the internal macro does.  For example,
`AC_PATH_X' has internal macros `AC_PATH_X_XMKMF' and
`AC_PATH_X_DIRECT'.


File: autoconf.info,  Node: Quoting,  Next: Dependencies Between Macros,  Prev: Macro Names,  Up: Writing Macros

Quoting
=======

   Macros that are called by other macros are evaluated by `m4' several
times; each evaluation might require another layer of quotes to prevent
unwanted expansions of macros or `m4' builtins, such as `define' and
`$1'.  Quotes are also required around macro arguments that contain
commas, since commas separate the arguments from each other.  It's a
good idea to quote any macro arguments that contain newlines or calls
to other macros, as well.

   Autoconf changes the `m4' quote characters from the default ``' and
`'' to `[' and `]', because many of the macros use ``' and `'',
mismatched.  However, in a few places the macros need to use brackets
(usually in C program text or regular expressions).  In those places,
they use the `m4' builtin command `changequote' to temporarily change
the quote characters to `<<' and `>>'.  (Sometimes, if they don't need
to quote anything, they disable quoting entirely instead by setting the
quote characters to empty strings.)  Here is an example:

     AC_TRY_LINK(
     changequote(<<, >>)dnl
     <<#include <time.h>
     #ifndef tzname /* For SGI.  */
     extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
     #endif>>,
     changequote([, ])dnl
     [atoi(*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)

   When you create a `configure' script using newly written macros,
examine it carefully to check whether you need to add more quotes in
your macros.  If one or more words have disappeared in the `m4' output,
you need more quotes.  When in doubt, quote.

   However, it's also possible to put on too many layers of quotes.  If
this happens, the resulting `configure' script will contain unexpanded
macros.  The `autoconf' program checks for this problem by doing `grep
AC_ configure'.


File: autoconf.info,  Node: Dependencies Between Macros,  Prev: Quoting,  Up: Writing Macros

Dependencies Between Macros
===========================

   Some Autoconf macros depend on other macros having been called first
in order to work correctly.  Autoconf provides a way to ensure that
certain macros are called if needed and a way to warn the user if
macros are called in an order that might cause incorrect operation.

* Menu:

* Prerequisite Macros::		Ensuring required information.
* Suggested Ordering::		Warning about possible ordering problems.
* Obsolete Macros::             Warning about old ways of doing things.


File: autoconf.info,  Node: Prerequisite Macros,  Next: Suggested Ordering,  Up: Dependencies Between Macros

Prerequisite Macros
-------------------

   A macro that you write might need to use values that have previously
been computed by other macros.  For example, `AC_DECL_YYTEXT' examines
the output of `flex' or `lex', so it depends on `AC_PROG_LEX' having
been called first to set the shell variable `LEX'.

   Rather than forcing the user of the macros to keep track of the
dependencies between them, you can use the `AC_REQUIRE' macro to do it
automatically.  `AC_REQUIRE' can ensure that a macro is only called if
it is needed, and only called once.

 - Macro: AC_REQUIRE (MACRO-NAME)
     If the `m4' macro MACRO-NAME has not already been called, call it
     (without any arguments).  Make sure to quote MACRO-NAME with
     square brackets.  MACRO-NAME must have been defined using
     `AC_DEFUN' or else contain a call to `AC_PROVIDE' to indicate that
     it has been called.

   An alternative to using `AC_DEFUN' is to use `define' and call
`AC_PROVIDE'.  Because this technique does not prevent nested messages,
it is considered obsolete.

 - Macro: AC_PROVIDE (THIS-MACRO-NAME)
     Record the fact that THIS-MACRO-NAME has been called.
     tHIS-MACRO-NAME should be the name of the macro that is calling
     `AC_PROVIDE'.  An easy way to get it is from the `m4' builtin
     variable `$0', like this:

          AC_PROVIDE([$0])


File: autoconf.info,  Node: Suggested Ordering,  Next: Obsolete Macros,  Prev: Prerequisite Macros,  Up: Dependencies Between Macros

Suggested Ordering
------------------

   Some macros should be run before another macro if both are called,
but neither *requires* that the other be called.  For example, a macro
that changes the behavior of the C compiler should be called before any
macros that run the C compiler.  Many of these dependencies are noted in
the documentation.

   Autoconf provides the `AC_BEFORE' macro to warn users when macros
with this kind of dependency appear out of order in a `configure.in'
file.  The warning occurs when creating `configure' from
`configure.in', not when running `configure'.  For example,
`AC_PROG_CPP' checks whether the C compiler can run the C preprocessor
when given the `-E' option.  It should therefore be called after any
macros that change which C compiler is being used, such as
`AC_PROG_CC'.  So `AC_PROG_CC' contains:

     AC_BEFORE([$0], [AC_PROG_CPP])dnl

This warns the user if a call to `AC_PROG_CPP' has already occurred
when `AC_PROG_CC' is called.

 - Macro: AC_BEFORE (THIS-MACRO-NAME, CALLED-MACRO-NAME)
     Make `m4' print a warning message on the standard error output if
     CALLED-MACRO-NAME has already been called.  THIS-MACRO-NAME should
     be the name of the macro that is calling `AC_BEFORE'.  The macro
     CALLED-MACRO-NAME must have been defined using `AC_DEFUN' or else
     contain a call to `AC_PROVIDE' to indicate that it has been called.


File: autoconf.info,  Node: Obsolete Macros,  Prev: Suggested Ordering,  Up: Dependencies Between Macros

Obsolete Macros
---------------

   Configuration and portability technology has evolved over the years.
Often better ways of solving a particular problem are developed, or
ad-hoc approaches are systematized.  This process has occurred in many
parts of Autoconf.  One result is that some of the macros are now
considered "obsolete"; they still work, but are no longer considered
the best thing to do.  Autoconf provides the `AC_OBSOLETE' macro to
warn users producing `configure' scripts when they use obsolete macros,
to encourage them to modernize.  A sample call is:

     AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl

 - Macro: AC_OBSOLETE (THIS-MACRO-NAME [, SUGGESTION])
     Make `m4' print a message on the standard error output warning that
     THIS-MACRO-NAME is obsolete, and giving the file and line number
     where it was called.  THIS-MACRO-NAME should be the name of the
     macro that is calling `AC_OBSOLETE'.  If SUGGESTION is given, it
     is printed at the end of the warning message; for example, it can
     be a suggestion for what to use instead of THIS-MACRO-NAME.


File: autoconf.info,  Node: Manual Configuration,  Next: Site Configuration,  Prev: Writing Macros,  Up: Top

Manual Configuration
********************

   A few kinds of features can't be guessed automatically by running
test programs.  For example, the details of the object file format, or
special options that need to be passed to the compiler or linker.  It is
possible to check for such features using ad-hoc means, such as having
`configure' check the output of the `uname' program, or looking for
libraries that are unique to particular systems.  However, Autoconf
provides a uniform method for handling unguessable features.

* Menu:

* Specifying Names::            Specifying the system type.
* Canonicalizing::              Getting the canonical system type.
* System Type Variables::       Variables containing the system type.
* Using System Type::           What to do with the system type.


File: autoconf.info,  Node: Specifying Names,  Next: Canonicalizing,  Up: Manual Configuration

Specifying the System Type
==========================

   Like other GNU `configure' scripts, Autoconf-generated `configure'
scripts can make decisions based on a canonical name for the system
type, which has the form:

     CPU-COMPANY-SYSTEM

   `configure' can usually guess the canonical name for the type of
system it's running on.  To do so it runs a script called
`config.guess', which derives the name using the `uname' command or
symbols predefined by the C preprocessor.

   Alternately, the user can specify the system type with command line
arguments to `configure'.  Doing so is necessary when cross-compiling.
In the most complex case of cross-compiling, three system types are
involved.  The options to specify them are:

`--build=BUILD-TYPE'
     the type of system on which the package is being configured and
     compiled (rarely needed);

`--host=HOST-TYPE'
     the type of system on which the package will run;

`--target=TARGET-TYPE'
     the type of system for which any compiler tools in the package will
     produce code.

If the user gives `configure' a non-option argument, it is used as the
default for the host, target, and build system types if the user does
not specify them explicitly with options.  The target and build types
default to the host type if it is given and they are not.  If you are
cross-compiling, you still have to specify the names of the cross-tools
you use, in particular the C compiler, on the `configure' command line,
e.g.,

     CC=m68k-coff-gcc configure --target=m68k-coff

   `configure' recognizes short aliases for many system types; for
example, `decstation' can be given on the command line instead of
`mips-dec-ultrix4.2'.  `configure' runs a script called `config.sub' to
canonicalize system type aliases.


File: autoconf.info,  Node: Canonicalizing,  Next: System Type Variables,  Prev: Specifying Names,  Up: Manual Configuration

Getting the Canonical System Type
=================================

   The following macros make the system type available to `configure'
scripts.  They run the shell script `config.guess' to determine any
values for the host, target, and build types that they need and the user
did not specify on the command line.  They run `config.sub' to
canonicalize any aliases the user gave.  If you use these macros, you
must distribute those two shell scripts along with your source code.
*Note Output::, for information about the `AC_CONFIG_AUX_DIR' macro
which you can use to control which directory `configure' looks for
those scripts in.  If you do not use either of these macros,
`configure' ignores any `--host', `--target', and `--build' options
given to it.

 - Macro: AC_CANONICAL_SYSTEM
     Determine the system type and set output variables to the names of
     the canonical system types.  *Note System Type Variables::, for
     details about the variables this macro sets.

 - Macro: AC_CANONICAL_HOST
     Perform only the subset of `AC_CANONICAL_SYSTEM' relevant to the
     host type.  This is all that is needed for programs that are not
     part of a compiler toolchain.


File: autoconf.info,  Node: System Type Variables,  Next: Using System Type,  Prev: Canonicalizing,  Up: Manual Configuration

System Type Variables
=====================

   After calling `AC_CANONICAL_SYSTEM', the following output variables
contain the system type information.  After `AC_CANONICAL_HOST', only
the `host' variables below are set.

``build', `host', `target''
     the canonical system names;

``build_alias', `host_alias', `target_alias''
     the names the user specified, or the canonical names if
     `config.guess' was used;

``build_cpu', `build_vendor', `build_os''
``host_cpu', `host_vendor', `host_os''
``target_cpu', `target_vendor', `target_os''
     the individual parts of the canonical names (for convenience).


File: autoconf.info,  Node: Using System Type,  Prev: System Type Variables,  Up: Manual Configuration

Using the System Type
=====================

   How do you use a canonical system type?  Usually, you use it in one
or more `case' statements in `configure.in' to select system-specific C
files.  Then link those files, which have names based on the system
name, to generic names, such as `host.h' or `target.c'.  The `case'
statement patterns can use shell wildcards to group several cases
together, like in this fragment:

     case "$target" in
     i386-*-mach* | i386-*-gnu*) obj_format=aout emulation=mach bfd_gas=yes ;;
     i960-*-bout) obj_format=bout ;;
     esac

 - Macro: AC_LINK_FILES (SOURCE..., DEST...)
     Make `AC_OUTPUT' link each of the existing files SOURCE to the
     corresponding link name DEST.  Makes a symbolic link if possible,
     otherwise a hard link.  The DEST and SOURCE names should be
     relative to the top level source or build directory.

     For example, this call:

          AC_LINK_FILES(config/${machine}.h config/${obj_format}.h, host.h object.h)

     creates in the current directory `host.h', which is a link to
     `SRCDIR/config/${machine}.h', and `object.h', which is a link to
     `SRCDIR/config/${obj_format}.h'.


File: autoconf.info,  Node: Site Configuration,  Next: Invoking configure,  Prev: Manual Configuration,  Up: Top

Site Configuration
******************

   `configure' scripts support several kinds of local configuration
decisions.  There are ways for users to specify where external software
packages are, include or exclude optional features, install programs
under modified names, and set default values for `configure' options.

* Menu:

* External Software::           Working with other optional software.
* Package Options::             Selecting optional features.
* Site Details::                Configuring site details.
* Transforming Names::          Changing program names when installing.
* Site Defaults::               Giving `configure' local defaults.


File: autoconf.info,  Node: External Software,  Next: Package Options,  Up: Site Configuration

Working With External Software
==============================

   Some packages require, or can optionally use, other software packages
which are already installed.  The user can give `configure' command
line options to specify which such external software to use.  The
options have one of these forms:

     --with-PACKAGE[=ARG]
     --without-PACKAGE

   For example, `--with-gnu-ld' means work with the GNU linker instead
of some other linker.  `--with-x11' means work with X11.

   The user can give an argument by following the package name with `='
and the argument.  Giving an argument of `no' is for packages that are
used by default; it says to *not* use the package.  An argument that is
neither `yes' nor `no' could include a name or number of a version of
the other package, to specify more precisely which other package this
program is supposed to work with.  If no argument is given, it defaults
to `yes'.  `--without-PACKAGE' is equivalent to `--with-PACKAGE=no'.

   For each external software package that may be used, `configure.in'
should call `AC_ARG_WITH' to detect whether the `configure' user asked
to use it.  Whether each package is used or not by default, and which
arguments are valid, is up to you.

 - Macro: AC_ARG_WITH (PACKAGE, HELP-STRING, ACTION-IF-TRUE [,
          ACTION-IF-FALSE])
     If the user gave `configure' the option `--with-PACKAGE' or
     `--without-PACKAGE', run shell commands ACTION-IF-TRUE.  Otherwise
     run shell commands ACTION-IF-FALSE.  The name PACKAGE indicates
     another software package that this program should work with.  It
     should consist only of alphanumeric characters and dashes.

     The option's argument is available to the shell commands
     ACTION-IF-TRUE in the shell variable `withval'.

     The argument HELP-STRING is a description of the option which
     looks like this:
            --with-readline         support fancy command line editing

     HELP-STRING may be more than one line long, if more detail is
     needed.  Just make sure the columns line up in `configure --help'.
     Avoid tabs in the help string.  You'll need to enclose it in `['
     and `]' in order to produce the leading spaces.

 - Macro: AC_WITH (PACKAGE, ACTION-IF-TRUE [, ACTION-IF-FALSE])
     This is an obsolete version of `AC_ARG_WITH' that does not support
     providing a help string.


File: autoconf.info,  Node: Package Options,  Next: Site Details,  Prev: External Software,  Up: Site Configuration

Choosing Package Options
========================

   If a software package has optional compile-time features, the user
can give `configure' command line options to specify whether to compile
them.  The options have one of these forms:

     --enable-FEATURE[=ARG]
     --disable-FEATURE

   These options allow users to choose which optional features to build
and install.  `--enable-FEATURE' options should never make a feature
behave differently or cause one feature to replace another.  They
should only cause parts of the program to be built rather than left out.

   The user can give an argument by following the feature name with `='
and the argument.  Giving an argument of `no' requests that the feature
*not* be made available.  A feature with an argument looks like
`--enable-debug=stabs'.  If no argument is given, it defaults to `yes'.
`--disable-FEATURE' is equivalent to `--enable-FEATURE=no'.

   For each optional feature, `configure.in' should call
`AC_ARG_ENABLE' to detect whether the `configure' user asked to include
it.  Whether each feature is included or not by default, and which
arguments are valid, is up to you.

 - Macro: AC_ARG_ENABLE (FEATURE, HELP-STRING, ACTION-IF-TRUE [,
          ACTION-IF-FALSE])
     If the user gave `configure' the option `--enable-FEATURE' or
     `--disable-FEATURE', run shell commands ACTION-IF-TRUE.  Otherwise
     run shell commands ACTION-IF-FALSE.  The name FEATURE indicates an
     optional user-level facility.  It should consist only of
     alphanumeric characters and dashes.

     The option's argument is available to the shell commands
     ACTION-IF-TRUE in the shell variable `enableval'.  The HELP-STRING
     argument is like that of `AC_ARG_WITH' (*note External
     Software::.).

 - Macro: AC_ENABLE (FEATURE, ACTION-IF-TRUE [, ACTION-IF-FALSE])
     This is an obsolete version of `AC_ARG_ENABLE' that does not
     support providing a help string.


File: autoconf.info,  Node: Site Details,  Next: Transforming Names,  Prev: Package Options,  Up: Site Configuration

Configuring Site Details
========================

   Some software packages require complex site-specific information.
Some examples are host names to use for certain services, company
names, and email addresses to contact.  Since some configuration
scripts generated by Metaconfig ask for such information interactively,
people sometimes wonder how to get that information in
Autoconf-generated configuration scripts, which aren't interactive.

   Such site configuration information should be put in a file that is
edited *only by users*, not by programs.  The location of the file can
either be based on the `prefix' variable, or be a standard location
such as the user's home directory.  It could even be specified by an
environment variable.  The programs should examine that file at run
time, rather than at compile time.  That approach is more convenient
for users and makes the configuration process simpler than getting the
information while configuring.  *Note Variables for Installation
Directories: (standards)Directory Variables, for more information on
where to put data files.