* tests/semantics.at (AC_REPLACE_FUNCS): Test for just-fixed bug.
[autoconf.git] / tests / semantics.at
blob5bcab52586ef395f0c8d75bf9681ca8a5366a41d
1 #                                                       -*- Autotest -*-
3 AT_BANNER([Semantics.])
5 # Copyright (C) 2000-2002, 2004-2007, 2009-2011 Free Software
6 # Foundation, Inc.
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
22 ## -------------------------------- ##
23 ## Members of the AC_CHECK family.  ##
24 ## -------------------------------- ##
27 # AC_CHECK_LIB
28 # ------------
29 # Well, I can't imagine a system where `cos' is neither in libc, nor
30 # in libm.  Nor can I imagine a lib more likely to exists than libm.
31 # But there are systems without libm, on which we don't want to have
32 # this test fail, so exit successfully if `cos' is in libc.
33 AT_CHECK_MACRO([AC_CHECK_LIB],
34 [AC_TRY_LINK_FUNC(cos,
35                   [AC_MSG_ERROR([`cos' is in `libc'], 77)])
37 AC_CHECK_LIB(m, cos,,
38              [AC_MSG_ERROR([cannot find `cos' in `libm'])])
40 # No kidding, using variables was broken in 2.50 :(
41 ac_sin=sin
42 AC_CHECK_LIB(m, $ac_sin,,
43       [AC_MSG_ERROR([cannot find `\$ac_sin' (= `$ac_sin') in `libm'])])
45 ac_m=m
46 AC_CHECK_LIB($ac_m, acos,,
47       [AC_MSG_ERROR([cannot find `acos' in `\$ac_m' (= `$ac_m')])])
49 ac_asin=asin
50 AC_CHECK_LIB($ac_m, $ac_asin,,
51       [AC_MSG_ERROR([cannot find `\$ac_asin' (= `$ac_asin') in `\$ac_m' (= `$ac_m')])])
53 # But if the bug is in the caching mechanism, then be sure we
54 # correctly detect failures.
56 AC_CHECK_LIB(m, cossack,
57              [AC_MSG_ERROR([found `cossack' in `libm'])])
59 # No kidding, using variables was broken in 2.50 :(
60 ac_sinner=sinner
61 AC_CHECK_LIB(m, $ac_sinner,
62       [AC_MSG_ERROR([found `\$ac_sinner' (= `$ac_sinner') in `libm'])])
64 ac_m=m
65 AC_CHECK_LIB($ac_m, acossack,
66       [AC_MSG_ERROR([found `acossack' in `\$ac_m' (= `$ac_m')])])
68 ac_asinner=asinner
69 AC_CHECK_LIB($ac_m, $ac_asinner,
70       [AC_MSG_ERROR([found `\$ac_asinner' (= `$ac_asinner') in `\$ac_m' (= `$ac_m')])])
75 # AC_SEARCH_LIBS
76 # --------------
77 AT_CHECK_MACRO([AC_SEARCH_LIBS],
79 AC_SEARCH_LIBS(cos, oser m ust,,
80              [AC_MSG_ERROR([cannot find `cos'])])
82 case "$ac_cv_search_cos" in
83   -loser|-lust) AC_MSG_ERROR([jeez, $ac_cv_search_cos must be a cool library!]) ;;
84 esac
88 # AC_SEARCH_LIBS (none needed)
89 # ----------------------------
90 AT_CHECK_MACRO([AC_SEARCH_LIBS (none needed)],
92 AC_SEARCH_LIBS(printf, oser c ust,,
93              [AC_MSG_ERROR([cannot find `printf'])])
95 case "$ac_cv_search_printf" in
96   -loser|-lust) AC_MSG_ERROR([jeez, $ac_cv_search_printf must be a cool library!]) ;;
97   -lc) AC_MSG_ERROR([huh, you need to give -lc?])
98 esac
102 # AC_CHECK_DECLS
103 # --------------
104 # Check that it performs the correct actions:
105 AT_CHECK_MACRO([AC_CHECK_DECLS],
106 [[AC_CHECK_DECLS([yes, no, myenum, mystruct, myfunc, mymacro1, mymacro2],,,
107                  [[int yes = 1;
108                    enum { myenum };
109                    struct { int x[20]; } mystruct;
110                    extern int myfunc();
111                    #define mymacro1(arg) arg
112                    #define mymacro2]])
113   # The difference in space-before-open-paren is intentional.
114   AC_CHECK_DECLS([basenam (char *), dirnam(char *),
115                   [moreargs (char, short, int, long, void *, char [], float, double)]],,,
116                  [[#ifdef __cplusplus
117                    extern "C++" char *basenam (char *);
118                    extern "C++" const char *basenam (const char *);
119                    #else
120                    extern char *basenam (const char *);
121                    #endif
122                    #ifdef __cplusplus
123                    extern "C" {
124                    #endif
125                    extern int moreargs (char, short, int, long, void *,
126                                         char [], float, double);
127                    #ifdef __cplusplus
128                    }
129                    #endif
130                    ]])
131   AC_CHECK_DECL([declared (char *)],, [AS_EXIT([1])],
132                 [[#ifdef __cplusplus
133                   extern "C++" char *declared (char *);
134                   extern "C++" const char *declared (const char *);
135                   #else
136                   extern char *declared (const char *);
137                   #endif
138                 ]])
139   AC_CHECK_DECL([undeclared (char *)], [AS_EXIT([1])],, [[]])
141 [AT_CHECK_DEFINES(
142 [#define HAVE_DECL_BASENAM 1
143 #define HAVE_DECL_DIRNAM 0
144 #define HAVE_DECL_MOREARGS 1
145 #define HAVE_DECL_MYENUM 1
146 #define HAVE_DECL_MYFUNC 1
147 #define HAVE_DECL_MYMACRO1 1
148 #define HAVE_DECL_MYMACRO2 1
149 #define HAVE_DECL_MYSTRUCT 1
150 #define HAVE_DECL_NO 0
151 #define HAVE_DECL_YES 1
152 ])])
155 # AC_CHECK_FUNCS
156 # --------------
157 # Check that it performs the correct actions:
158 # Must define HAVE_PRINTF, but not HAVE_AUTOCONF_FTNIRP
159 AT_CHECK_MACRO([AC_CHECK_FUNCS],
160 [AC_CHECK_FUNCS(printf autoconf_ftnirp)],
161 [AT_CHECK_DEFINES(
162 [/* #undef HAVE_AUTOCONF_FTNIRP */
163 #define HAVE_PRINTF 1
164 ])])
167 # AC_REPLACE_FUNCS
168 # ----------------
169 # Check that it performs the correct actions: autoconf_ftnirp.c must
170 # be compiled, and must define HAVE_PRINTF, but not HAVE_AUTOCONF_FTNIRP
171 # FIXME: Maybe check the traces?
172 AT_SETUP([AC_REPLACE_FUNCS])
174 AT_DATA([config.in],
175 [@LIBOBJS@
178 AT_CONFIGURE_AC(
179 [AC_CONFIG_FILES([config.libobjs:config.in])
180 AC_REPLACE_FUNCS([printf \
181 autoconf_ftnirp])
182 funcs='fprintf fopen autoconf_ftnirpf'
183 AH_TEMPLATE([HAVE_FOPEN], [])
184 AH_TEMPLATE([HAVE_FPRINTF], [])
185 AH_TEMPLATE([HAVE_AUTOCONF_FTNIRPF], [])
186 AC_REPLACE_FUNCS([\
187 $funcs])
188 AS_UNSET([funcs])])
190 AT_CHECK_AUTOCONF([-W obsolete])
191 AT_CHECK_AUTOHEADER
192 AT_CHECK_CONFIGURE
193 AT_CHECK_ENV
194 AT_CHECK_DEFINES(
195 [/* #undef HAVE_AUTOCONF_FTNIRP */
196 /* #undef HAVE_AUTOCONF_FTNIRPF */
197 #define HAVE_FOPEN 1
198 #define HAVE_FPRINTF 1
199 #define HAVE_PRINTF 1
202 AT_CHECK([sed 's/  */ /g;s/^ //;s/ $//' config.libobjs], [],
203          [${LIBOBJDIR}autoconf_ftnirp$U.o ${LIBOBJDIR}autoconf_ftnirpf$U.o
206 AT_CLEANUP
209 # AC_CHECK_HEADERS
210 # ----------------
211 # Check that it performs the correct actions:
212 # Must define HAVE_STDIO_H, but not HAVE_AUTOCONF_IO_H.
213 AT_SETUP([AC_CHECK_HEADERS])
215 AT_DATA([autoconf_io.h],
216 [blah blah
219 AT_CONFIGURE_AC([AC_CHECK_HEADERS(stdio.h autoconf_io.h)])
220 AT_CHECK_AUTOCONF([-W obsolete])
221 AT_CHECK_AUTOHEADER
222 AT_CHECK_CONFIGURE([CPPFLAGS=-I.], [0], [ignore],
223 [configure: WARNING: autoconf_io.h: present but cannot be compiled
224 configure: WARNING: autoconf_io.h:     check for missing prerequisite headers?
225 configure: WARNING: autoconf_io.h: see the Autoconf documentation
226 configure: WARNING: autoconf_io.h:     section "Present But Cannot Be Compiled"
227 configure: WARNING: autoconf_io.h: proceeding with the compiler's result
229 AT_CHECK_ENV
230 AT_CHECK_DEFINES(
231 [/* #undef HAVE_AUTOCONF_IO_H */
232 #define HAVE_STDIO_H 1
235 AT_CLEANUP
238 # AC_CHECK_HEADERS_OLD
239 # --------------------
240 # Check that it performs the correct actions:
241 # Must not check prerequisites, hence define header2.h
242 AT_SETUP([AC_CHECK_HEADERS (preprocessor test)])
244 AT_DATA([header1.h],
245 [typedef int foo;
248 AT_DATA([header2.h],
249 [typedef foo bar;
252 AT_CONFIGURE_AC([AC_CHECK_HEADERS(header2.h, [], [], -)])
254 AT_CHECK_AUTOCONF([-W obsolete])
255 AT_CHECK_AUTOHEADER
256 AT_CHECK_CONFIGURE([CPPFLAGS=-I.])
257 AT_CHECK_ENV
258 AT_CHECK_DEFINES(
259 [#define HAVE_HEADER2_H 1
262 AT_CLEANUP
265 # AC_CHECK_HEADERS_NEW
266 # --------------------
267 # Check that it performs the correct actions:
268 # Must check prerequisites, hence define header2.h but not header3.h
269 AT_SETUP([AC_CHECK_HEADERS (compiler test)])
271 AT_DATA([header1.h],
272 [typedef int foo;
275 AT_DATA([header2.h],
276 [typedef foo bar;
279 AT_DATA([header3.h],
280 [typedef bar wow;
283 AT_CONFIGURE_AC(
284 [AC_CHECK_HEADERS(header2.h header3.h, [], [], [[@%:@include "header1.h"]])])
286 AT_CHECK_AUTOCONF([-W obsolete])
287 AT_CHECK_AUTOHEADER
288 AT_CHECK_CONFIGURE([CPPFLAGS=-I.])
289 AT_CHECK_ENV
290 AT_CHECK_DEFINES(
291 [#define HAVE_HEADER2_H 1
292 /* #undef HAVE_HEADER3_H */
295 AT_CLEANUP
298 # AC_CHECK_MEMBER
299 # ---------------
300 # Check that it performs the correct actions.
301 # Must define HAVE_STRUCT_YES_S_YES, but not HAVE_STRUCT_YES_S_NO.
302 AT_CHECK_MACRO([AC_CHECK_MEMBER],
303 [[AC_CHECK_MEMBER([struct yes_s.yes],
304                   [AC_DEFINE([HAVE_STRUCT_YES_S_YES], [1],
305                              [Define to 1 if `yes' is a member of `struct yes_s'.])],,
306                    [struct sub { int x; };
307                     struct yes_s { int yes; struct sub substruct; };])
308   AC_CHECK_MEMBER([struct yes_s.no],
309                   [AC_DEFINE([HAVE_STRUCT_YES_S_NO], [1],
310                              [Define to 1 if `no' is a member of `struct yes_s'.])],,
311                    [struct sub { int x; };
312                     struct yes_s { int yes; struct sub substruct; };])
313   AC_CHECK_MEMBER([struct yes_s.substruct],
314                   [AC_DEFINE([HAVE_STRUCT_YES_S_SUBSTRUCT], [1],
315                              [Define to 1 if `substruct' is a member of `struct yes_s'.])],,
316                    [struct sub { int x; };
317                     struct yes_s { int yes; struct sub substruct; };])]],
318 [AT_CHECK_DEFINES(
319 [/* #undef HAVE_STRUCT_YES_S_NO */
320 #define HAVE_STRUCT_YES_S_SUBSTRUCT 1
321 #define HAVE_STRUCT_YES_S_YES 1
322 ])])
324 # AC_CHECK_MEMBERS
325 # ----------------
326 # Check that it performs the correct actions.
327 # Must define HAVE_STRUCT_YES_S_YES, but not HAVE_STRUCT_YES_S_NO.
328 AT_CHECK_MACRO([AC_CHECK_MEMBERS],
329 [[AC_CHECK_MEMBERS([struct yes_s.yes, struct yes_s.no, struct yes_s.substruct],,,
330                    [struct sub { int x; };
331                     struct yes_s { int yes; struct sub substruct; };])]],
332 [AT_CHECK_DEFINES(
333 [/* #undef HAVE_STRUCT_YES_S_NO */
334 #define HAVE_STRUCT_YES_S_SUBSTRUCT 1
335 #define HAVE_STRUCT_YES_S_YES 1
337 AT_CHECK([grep 'yes.*member of.*yes_s' config.h], [], [ignore])
341 # AC_CHECK_ALIGNOF
342 # ----------------
343 AT_CHECK_MACRO_CROSS([AC_CHECK_ALIGNOF],
344 [[AC_CHECK_ALIGNOF(char)
345 AC_CHECK_ALIGNOF(charchar,
346 [[#include <stddef.h>
347 #include <stdio.h>
348 typedef char charchar[2];]])
349 AC_CHECK_ALIGNOF(charcharchar)
351 [AT_CHECK_DEFINES(
352 [#define ALIGNOF_CHAR 1
353 #define ALIGNOF_CHARCHAR 1
354 #define ALIGNOF_CHARCHARCHAR 0
355 ])])
358 # AC_CHECK_ALIGNOF struct
359 # -----------------------
360 AT_CHECK_MACRO_CROSS([AC_CHECK_ALIGNOF struct],
361 [[AC_CHECK_ALIGNOF([struct { char c; }])
362 AC_CHECK_ALIGNOF([struct nosuchstruct])
364 [AT_CHECK([[grep "#define ALIGNOF_STRUCT___CHAR_C___ [1-9]" config.h]],
365          0, ignore)
366 AT_CHECK([[grep "#define ALIGNOF_STRUCT_NOSUCHSTRUCT 0" config.h]],
367          0, ignore)
370 # AC_CHECK_SIZEOF
371 # ---------------
372 AT_CHECK_MACRO_CROSS([AC_CHECK_SIZEOF],
373 [[AC_CHECK_SIZEOF(char)
374 AC_CHECK_SIZEOF(charchar,,
375 [[#include <stdio.h>
376 typedef char charchar[2];]])
377 AC_CHECK_SIZEOF(charcharchar)
379 [AT_CHECK_DEFINES(
380 [#define SIZEOF_CHAR 1
381 #define SIZEOF_CHARCHAR 2
382 #define SIZEOF_CHARCHARCHAR 0
383 ])])
386 # AC_CHECK_SIZEOF struct
387 # ----------------------
388 AT_CHECK_MACRO_CROSS([AC_CHECK_SIZEOF struct],
389 [[AC_C_CONST
390 AC_CHECK_SIZEOF([struct x], [], [struct x { char c; int x; };])
391 AC_CHECK_SIZEOF([const struct x], [], [struct x { const char *p; int x; };])
392 AC_CHECK_SIZEOF([struct nosuchstruct])
393 # Taken from autoconf.texi:Generic Compiler Characteristics.
394 AC_CHECK_SIZEOF([int *])
396 [AT_CHECK([[grep "#define SIZEOF_STRUCT_X [1-9]" config.h]],
397          0, ignore)
398 AT_CHECK([[grep "#define SIZEOF_CONST_STRUCT_X [1-9]" config.h]],
399          0, ignore)
400 AT_CHECK([[grep "#define SIZEOF_STRUCT_NOSUCHSTRUCT 0" config.h]],
401          0, ignore)
402 AT_CHECK([[grep "#define SIZEOF_INT_P [1-9]" config.h]],
403          0, ignore)
407 # AC_CHECK_TYPES
408 # --------------
409 # Check that it performs the correct actions.
410 # Must define HAVE_STRUCT_YES_S, HAVE_INT, but not HAVE_STRUCT_NO_S.
411 # `int' and `struct yes_s' are both checked to test both the compiler
412 # builtin types, and defined types.
413 AT_CHECK_MACRO([AC_CHECK_TYPES],
414 [[AC_CHECK_TYPES([int, struct yes_s, struct no_s],,,
415                  [struct yes_s { int yes ;} ;])]],
416 [AT_CHECK_DEFINES(
417 [#define HAVE_INT 1
418 /* #undef HAVE_STRUCT_NO_S */
419 #define HAVE_STRUCT_YES_S 1
420 ])])
423 # AC_CHECK_TYPES
424 # --------------
425 # Check that we properly dispatch properly to the old implementation
426 # or to the new one.
427 AT_SETUP([AC_CHECK_TYPES: backward compatibility])
429 AT_DATA([configure.ac],
430 [[AC_INIT
431 define([_AC_CHECK_TYPE_NEW], [NEW])
432 define([_AC_CHECK_TYPE_OLD], [OLD])
433 #(cut-from-here
434 AC_CHECK_TYPE(ptrdiff_t)
435 AC_CHECK_TYPE(ptrdiff_t, int)
436 AC_CHECK_TYPE(quad, long long int)
437 AC_CHECK_TYPE(table_42, [int[42]])
438 # Nice machine!
439 AC_CHECK_TYPE(uint8_t, uint65536_t)
440 AC_CHECK_TYPE(a,b,c,d)
441 #to-here)
442 AC_OUTPUT
445 AT_CHECK_AUTOCONF
446 AT_CHECK([[sed -e '/^#(cut-from-here/,/^#to-here)/!d' -e '/^#/d' configure]],
447          0,
448          [NEW
456 AT_CLEANUP
459 # AC_CHECK_FILES
460 # --------------
461 # FIXME: To really test HAVE_AC_EXISTS2 and HAVE_AC_MISSING2 we need to
462 # open AH_TEMPLATE to `configure.ac', which is not yet the case.
463 AT_CHECK_MACRO([AC_CHECK_FILES],
464 [touch at-exists1 at-exists2
465 ac_exists2=at-exists2
466 ac_missing2=at-missing2
467 AC_CHECK_FILES(at-exists1 at-missing1 $ac_exists2 $ac_missing2)
468 rm at-exists1 at-exists2],
469 [AT_CHECK_DEFINES(
470 [#define HAVE_AT_EXISTS1 1
471 /* #undef HAVE_AT_MISSING1 */
472 ])])
476 ## ------------------------------ ##
477 ## AC_CHECK_PROG & AC_PATH_PROG.  ##
478 ## ------------------------------ ##
481 # AT_CHECK_PROGS_PREPARE
482 # ----------------------
483 # Create a sub directory `path' with 6 subdirs which all 7 contain
484 # an executable `tool'. `6' contains a `better' tool.
485 m4_define([AT_CHECK_PROGS_PREPARE],
486 [mkdir path
488 cat >path/tool <<\EOF
489 #! /bin/sh
490 exit 0
492 chmod +x path/tool
494 for i in 1 2 3 4 5 6
496   mkdir path/$i
497   cp path/tool path/$i
498 done
499 cp path/tool path/6/better])
502 # -------------------------------- #
503 # AC_CHECK_PROG & AC_CHECK_PROGS.  #
504 # -------------------------------- #
506 AT_SETUP([AC_CHECK_PROG & AC_CHECK_PROGS])
508 AT_CHECK_PROGS_PREPARE
510 AT_DATA([configure.ac],
511 [[AC_INIT
512 pwd=`pwd`
513 p="1${PATH_SEPARATOR}2${PATH_SEPARATOR}3${PATH_SEPARATOR}4${PATH_SEPARATOR}5${PATH_SEPARATOR}6"
514 path=`echo $p | sed -e 's,\([[0-9]]\),'"$pwd"'/path/\1,g'`
515 fail=false
517 AC_CHECK_PROG(TOOL1, tool, found, not-found, $path)
518 test "$TOOL1" = found || fail=:
520 # Yes, the semantics of this macro is weird.
521 AC_CHECK_PROG(TOOL2, tool,, not-found, $path)
522 test "$TOOL2" = not-found || fail=:
524 AC_CHECK_PROG(TOOL3, tool, tool, not-found, $path, $pwd/path/1/tool)
525 test "$TOOL3" = "$pwd/path/2/tool" || fail=:
527 AC_CHECK_PROG(TOOL4, better, better, not-found, $path, $pwd/path/1/tool)
528 test "$TOOL4" = better || fail=:
530 # When a tool is not found, and no value is given for not-found,
531 # the variable is left empty.
532 AC_CHECK_PROGS(TOOL5, missing,, $path)
533 test -z "$TOOL5" || fail=:
535 AC_CHECK_PROGS(TOOL6, missing tool better,, $path)
536 test "$TOOL6" = tool || fail=:
538 # No AC-OUTPUT, we don't need config.status.
539 $fail &&
540   AC_MSG_ERROR([[CHECK_PROG failed]])
541 AS_EXIT(0)
544 AT_CHECK_AUTOCONF
545 AT_CHECK_CONFIGURE
547 AT_CLEANUP
551 ## ---------------- ##
552 ## AC_C_BIGENDIAN.  ##
553 ## ---------------- ##
555 AT_SETUP([AC_C_BIGENDIAN])
556 AT_KEYWORDS([cross])
558 # Make sure that AC_C_BIGENDIAN behave the same whether we are
559 # cross-compiling or not.
561 _AT_CHECK_AC_MACRO(
562   [[AC_C_BIGENDIAN(
563       [ac_endian=big],
564       [ac_endian=little],
565       [ac_endian=unknown],
566       [ac_endian=universal])
567    echo $ac_endian > at-endian
570 rm -f config.hin  # So that next run of autoheader is quiet.
571 _AT_CHECK_AC_MACRO(
572   [[# Force cross compiling.
573    cross_compiling=yes
574    ac_tool_warned=yes
575    AC_C_BIGENDIAN(
576      [ac_endian=big],
577      [ac_endian=little],
578      [ac_endian=unknown],
579      [ac_endian=universal])
580    ac_prevendian=`cat at-endian`
581    # Check that we have found the same result as in the previous run
582    # or unknown (because the cross-compiling check is allowed to fail;
583    # although it might be interesting to suppress this comparison, just
584    # to know on which system it fails if it ever does).
585    if test $ac_endian != $ac_prevendian && test $ac_endian != unknown; then
586      AC_MSG_ERROR([unexpected endianness: first run found '$ac_prevendian' but second run found '$ac_endian'])
587    fi
590 # Make sure AC_C_BIGENDIAN with no argument will create a config.h template
591 # containing "WORDS_BIGENDIAN".
592 AT_CONFIGURE_AC([[AC_C_BIGENDIAN]])
593 # --force is necessary, the computer might be too fast.
594 AT_CHECK_AUTOHEADER([--force])
595 AT_CHECK([grep WORDS_BIGENDIAN config.hin], [], [ignore])
597 AT_CLEANUP
600 # ------------------------------ #
601 # AC_PATH_PROG & AC_PATH_PROGS.  #
602 # ------------------------------ #
604 AT_SETUP([AC_PATH_PROG & AC_PATH_PROGS])
606 AT_CHECK_PROGS_PREPARE
608 AT_DATA([configure.ac],
609 [[AC_INIT
610 pwd=`pwd`
611 p="1${PATH_SEPARATOR}2${PATH_SEPARATOR}3${PATH_SEPARATOR}4${PATH_SEPARATOR}5${PATH_SEPARATOR}6"
612 path=`echo $p | sed -e 's,\([[0-9]]\),'"$pwd"'/path/\1,g'`
613 fail=false
615 AC_PATH_PROG(TOOL1, tool, not-found, $path)
616 test "$TOOL1" = "$pwd/path/1/tool" || fail=:
618 AC_PATH_PROG(TOOL2, better, not-found, $path)
619 test "$TOOL2" = "$pwd/path/6/better" || fail=:
621 # When a tool is not found, and no value is given for not-found,
622 # the variable is left empty.
623 AC_PATH_PROGS(TOOL3, missing,, $path)
624 test -z "$TOOL3" || fail=:
626 AC_PATH_PROGS(TOOL4, missing tool better,, $path)
627 test "$TOOL4" = "$pwd/path/1/tool" || fail=:
629 # No AC-OUTPUT, we don't need config.status.
630 $fail &&
631   AC_MSG_ERROR([[PATH_PROG failed]])
632 AS_EXIT(0)
635 AT_CHECK_AUTOCONF
636 AT_CHECK_CONFIGURE
638 AT_CLEANUP
642 # ----------------------------- #
643 # AC_PATH_PROGS_FEATURE_CHECK.  #
644 # ----------------------------- #
646 AT_SETUP([AC_PATH_PROGS_FEATURE_CHECK])
648 # This test doesn't work if `pwd` contains white space
649 case `pwd` in
650   *\ * | *\     *) AT_CHECK([exit 77]) ;;
651 esac
653 AT_CHECK_PROGS_PREPARE
655 AT_DATA([configure.ac],
656 [[AC_INIT
657 pwd=`pwd`
658 p="1${PATH_SEPARATOR}2${PATH_SEPARATOR}3${PATH_SEPARATOR}4${PATH_SEPARATOR}5${PATH_SEPARATOR}6"
659 path=`echo $p | sed -e 's,\([[0-9]]\),'"$pwd"'/path/\1,g'`
660 fail=false
662 # Find first candidate and stop search
663 AC_PATH_PROGS_FEATURE_CHECK(TOOL1, [tool better],
664   [$ac_path_TOOL1 && ac_cv_path_TOOL1=$ac_path_TOOL1 ac_path_TOOL1_found=:],
665   fail=:, $path)
666 test -z "$TOOL1" || fail=:
667 test "$ac_cv_path_TOOL1" = "$pwd/path/1/tool" || fail=:
669 # Keep searching each candidate
670 AC_PATH_PROGS_FEATURE_CHECK(TOOL2, [tool better],
671   [$ac_path_TOOL2 && ac_cv_path_TOOL2=$ac_path_TOOL2],
672   fail=:, $path)
673 test "$ac_cv_path_TOOL2" = "$pwd/path/6/better" || fail=:
675 # Only accept better candidate
676 AC_PATH_PROGS_FEATURE_CHECK(TOOL3, [tool better],
677   [case "$ac_path_TOOL3" in #(
678     *better) ac_cv_path_TOOL3=$ac_path_TOOL3;;
679   esac],
680   fail=:, $path)
681 test "$ac_cv_path_TOOL3" = "$pwd/path/6/better" || fail=:
683 # When a tool is not found, and no action is given for not-found,
684 # the variable is left empty.
685 AC_PATH_PROGS_FEATURE_CHECK(TOOL4, missing,
686   [ac_cv_path_TOOL4=$ac_path_TOOL4], [], $path)
687 test -z "$ac_cv_path_TOOL4" || fail=:
689 # Test action when tool is not found
690 AC_PATH_PROGS_FEATURE_CHECK(TOOL5, missing, [],
691   [ac_cv_path_TOOL5='not found'], $path)
692 test "$ac_cv_path_TOOL5" = "not found" || fail=:
694 # Test that pre-set tool bypasses feature test
695 TOOL6=$pwd/path/6/better
696 AC_PATH_PROGS_FEATURE_CHECK(TOOL6, tool, fail=:, fail=:, $path)
697 test "$ac_cv_path_TOOL6" = "$pwd/path/6/better" || fail=:
699 # A blank pre-set does not bypass feature test
700 TOOL7=
701 AC_PATH_PROGS_FEATURE_CHECK(TOOL7, [tool better],
702   [$ac_path_TOOL7 && ac_cv_path_TOOL7=$ac_path_TOOL7 ac_path_TOOL7_found=:],
703   fail=:, $path)
704 test -z "$TOOL7" || fail=:
705 test "$ac_cv_path_TOOL7" = "$pwd/path/1/tool" || fail=:
707 # No AC-OUTPUT, we don't need config.status.
708 $fail &&
709   AC_MSG_ERROR([[PATH_PROG failed]])
710 AS_EXIT(0)
713 AT_CHECK_AUTOCONF
714 AT_CHECK_CONFIGURE
716 AT_CLEANUP
721 ## -------------- ##
722 ## AC_PATH_XTRA.  ##
723 ## -------------- ##
726 AT_SETUP([AC_PATH_XTRA])
728 _AT_CHECK_AC_MACRO([AC_PATH_XTRA])
730 # Check X_DISPLAY_MISSING.
731 AT_CHECK_CONFIGURE([--without-x])
732 AT_CHECK_DEFINES(
733 [#define X_DISPLAY_MISSING 1
736 AT_CLEANUP
739 ## ------------------------------- ##
740 ## Obsolete non-updatable macros.  ##
741 ## ------------------------------- ##
744 AT_CHECK_MACRO([AC_SYS_RESTARTABLE_SYSCALLS], , ,[-W no-obsolete])
745 AT_CHECK_MACRO([AC_FUNC_SETVBUF_REVERSED], , ,[-W no-obsolete])
746 AT_CHECK_MACRO([AC_FUNC_WAIT3], , ,[-W no-obsolete])