Give a URL for COPYING.EXCEPTION in notices
[autoconf.git] / tests / tools.at
blob867ecd68b63c448b84875922882140a96c017979
1 #                                                       -*- Autotest -*-
3 AT_BANNER([Executables (autoheader, autoupdate...).])
5 # Copyright (C) 2000-2001, 2003-2004, 2006-2017, 2020-2024 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 <https://www.gnu.org/licenses/>.
22 ## ----------------------------- ##
23 ## Syntax of the shell scripts.  ##
24 ## ----------------------------- ##
26 # We use '/bin/sh -n script' to check that there are no syntax errors
27 # in the scripts.  Although incredible, there are /bin/sh that go into
28 # endless loops with '-n', e.g., SunOS's:
30 #   $ uname -a
31 #   SunOS ondine 4.1.3 2 sun4m unknown
32 #   $ cat endless.sh
33 #   while false
34 #   do
35 #     :
36 #   done
37 #   exit 0
38 #   $ time sh endless.sh
39 #   sh endless.sh  0,02s user 0,03s system 78% cpu 0,064 total
40 #   $ time sh -nx endless.sh
41 #   ^Csh -nx endless.sh  3,67s user 0,03s system 63% cpu 5,868 total
43 # So before using '/bin/sh -n' to check our scripts, we first check
44 # that '/bin/sh -n' is not broken to death.
46 AT_SETUP([Syntax of the shell scripts])
48 AT_CHECK([test "$SHELL_N" != none || exit 77])
50 # Specify the absolute name of the tool, as some shells don't honor PATH when
51 # running 'sh PROG'.
53 AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/autoconf"])
54 AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/testsuite"])
56 # These are not built, they are in the src tree.
57 AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/install-sh"])
58 AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/missing"])
60 AT_CLEANUP
65 ## ---------------------------- ##
66 ## Syntax of the Perl scripts.  ##
67 ## ---------------------------- ##
69 AT_SETUP([Syntax of the Perl scripts])
71 AT_CHECK_PERL_SYNTAX([autoconf])
72 AT_CHECK_PERL_SYNTAX([autoheader])
73 AT_CHECK_PERL_SYNTAX([autom4te])
74 AT_CHECK_PERL_SYNTAX([autoreconf])
75 AT_CHECK_PERL_SYNTAX([autoscan])
76 AT_CHECK_PERL_SYNTAX([autoupdate])
77 AT_CHECK_PERL_SYNTAX([ifnames])
79 AT_CLEANUP
84 ## ------------------ ##
85 ## autom4te's cache.  ##
86 ## ------------------ ##
88 AT_SETUP([autom4te cache])
90 AT_DATA_M4SUGAR([[script.4s]],
91 [[m4_include([foo])
92 ]])
94 # Everything is OK.
95 touch foo
96 AT_CHECK_M4SUGAR
98 # We moved a file: it should fail
99 mkdir sub
100 mv foo sub
101 AT_CHECK_M4SUGAR([], [1], [],
102 [m4:script.4s:1: cannot open 'foo': No such file or directory
103 autom4te: error: m4 failed with exit status: 1
106 # But if we change the main file, then we should no longer complain of
107 # missing files.
108 AT_DATA_M4SUGAR([[script.4s]],
109 [[m4_include([sub/foo])
111 AT_CHECK_M4SUGAR
113 AT_CLEANUP
116 # autom4te --force
117 # ----------------
119 AT_SETUP([autom4te --force])
121 AT_DATA([file.m4],
122 [[right
124 AT_CHECK_AUTOM4TE([-o file file.m4])
126 # Create a file whose timestamp is in the future.
127 # (next year)-01-01 00:01 UTC should always be in the future,
128 # even on slow machines.
129 echo BAD >file
130 this_year=`TZ=UTC0 date +%Y`
131 AS_VAR_ARITH([next_year], [$this_year + 1])
132 TZ=UTC0 touch -t ${next_year}01010001 file
134 AT_CHECK_AUTOM4TE([--force -o file file.m4])
135 AT_CHECK([cat file], 0,
136 [[right
139 AT_CLEANUP
142 # autom4te and file names containing whitespace
143 # ---------------------------------------------
145 AT_SETUP([autom4te and whitespace in file names])
148 export x
149 rm -f a b
150 for funny in \
151   'with  funny '\'' $x & #! name' \
152   'with  funny \ '\'' \'\'' " <a >b * ? name ' # "restore font-lock
154   funny=`func_sanitize_file_name "$funny"`
155   file=" file $funny"
156   outfile="$file out "
157   dir=`func_sanitize_dir_name " dir $funny"`
158   cachedir=" cache$dir"
159   TMPDIR=" tmp$dir"
160   export TMPDIR
162   # skip if we cannot create such a file or directory
163   AT_CHECK([mkdir "$dir" "$cachedir" "$TMPDIR" && touch "$file" || exit 77])
165   cat >"$file" <<'END'
166 [m4@&t@_init[]m4@&t@_include(foo.m4)
167 m4@&t@_divert([])d@&t@nl
168 FOO]
170   cat >"$dir"/foo.m4 <<'END'
171 [m4@&t@_define([FOO], [bar])]
174   AT_CHECK_AUTOM4TE([-C "$cachedir" -B "$dir" --language=m4sugar -o "$outfile" "$file"])
175   AT_CHECK([cat "$outfile"], [],
176   [[bar
178   rm -rf "$outfile" "$cachedir"
179   AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar -o "$outfile" "$file"])
180   AT_CHECK([cat "$outfile"], [],
181   [[bar
184   # This exercises a slightly different code path and will catch an open with
185   # trailing whitespace:
186   cat >"$file" <<'END'
187 [m4@&t@_init[]m4@&t@_include(foo.m4)
188 m4@&t@_pattern_forbid([^bar$])
189 m4@&t@_divert([])d@&t@nl
190 FOO]
192   rm -rf "$outfile" "$cachedir"
193   AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar -o "$outfile" "$file"],
194                     [1], [], [stderr])
195   AT_CHECK([grep 'undefined or overquoted macro' stderr], [], [ignore])
197   cat >"$file" <<'END'
198 [m4@&t@_init[]m4@&t@_include(foo.m4)
199 m4@&t@_divert([])d@&t@nl]
201   rm -rf "$file.m4f"
202   AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar --freeze -o "$file.m4f" "$file"])
203   AT_CHECK([test -s "$file.m4f"])
205   # Check --reload-state
206   AT_CHECK_AUTOM4TE([-C "$cachedir" --language=m4sugar -o "$outfile" "$file.m4f" /dev/null])
208   test ! -f b
209 done
211 AT_CLEANUP
214 # autom4te --trace and unusual macro names
215 # ----------------------------------------
217 AT_SETUP([autom4te --trace and unusual macro names])
219 AT_DATA([file.m4],
222 AT_CHECK_AUTOM4TE([-t 'TR A CE' -t 'TR(A)CE' file.m4])
224 AT_CLEANUP
227 AT_SETUP([autom4te --trace and whitespace])
229 dnl line numbering differs between m4 1.4.6 and 1.4.13 if we don't
230 dnl go through a single line wrapper
231 AT_DATA_M4SUGAR([file.m4],
232 [[m4_define([foo], [m4_echo([  a
233 b       c  ], [\
235 ])])
238 AT_CHECK_AUTOM4TE([--language=m4sugar -t 'm4@&t@_echo' file.m4], [0],
239 [[file.m4:5:m4@&t@_echo: a b c :d
242 AT_CLEANUP
245 ## ------------------ ##
246 ## autoconf --trace.  ##
247 ## ------------------ ##
250 # autoconf --trace: user macros
251 # -----------------------------
252 AT_SETUP([autoconf --trace: user macros])
254 AT_DATA([configure.ac],
255 [[m4_define([active], [ACTIVE])
256 m4_define([TRACE1], [TRACE2(m4_shift($@))])
257 m4_define([TRACE2], [[$2], $1])
259 # No arguments.
260 TRACE1
261 TRACE2
263 # With arguments, single line.
264 TRACE1(foo, @bar, @baz)
265 TRACE1(foo, TRACE1(bar, baz))
266 TRACE1(foo, active, baz)
267 TRACE1(foo, [active], TRACE1(active, [active]))
270 # Several --traces.
271 AT_CHECK_AUTOCONF([-t TRACE1 -t TRACE2], 0,
272 [[configure.ac:6:TRACE1:
273 configure.ac:6:TRACE2:
274 configure.ac:7:TRACE2:
275 configure.ac:10:TRACE1:foo:@bar:@baz
276 configure.ac:10:TRACE2:@bar:@baz
277 configure.ac:11:TRACE1:bar:baz
278 configure.ac:11:TRACE2:baz
279 configure.ac:11:TRACE1:foo::baz
280 configure.ac:11:TRACE2::baz
281 configure.ac:12:TRACE1:foo:ACTIVE:baz
282 configure.ac:12:TRACE2:ACTIVE:baz
283 configure.ac:13:TRACE1:ACTIVE:active
284 configure.ac:13:TRACE2:active
285 configure.ac:13:TRACE1:foo:active::ACTIVE
286 configure.ac:13:TRACE2:active::ACTIVE
289 # Several line requests.
290 AT_CHECK_AUTOCONF([[-t TRACE1:'
291 [$1], [$2], [$3].']], 0,
293 [], [], [].
295 [foo], [@bar], [@baz].
297 [bar], [baz], [].
299 [foo], [], [baz].
301 [foo], [ACTIVE], [baz].
303 [ACTIVE], [active], [].
305 [foo], [active], [].
308 # ${sep}@.
309 AT_CHECK_AUTOCONF([-t TRACE2:'${)===(}@'], 0,
310 [[[]
312 [@bar])===([@baz]
313 [baz]
314 [])===([baz]
315 [ACTIVE])===([baz]
316 [active]
317 [active])===([])===([ACTIVE]
320 # Arguments spanning multiple lines.
321 AT_DATA([configure.ac],
322 [[m4_define([TRACE], [])
323 TRACE(foo
324 bar,
326 foo)
329 AT_CHECK_AUTOCONF([-t TRACE:'$%'], 0,
330 [[foo bar:bar foo
333 AT_CLEANUP
336 # autoconf --trace: builtins
337 # --------------------------
338 AT_SETUP([autoconf --trace: builtins])
340 AT_DATA([configure.ac],
341 [[define([active], [ACTIVE])
344 AT_CHECK_AUTOCONF([[-t define | sed -n '$p']],
345          0,
346 [[configure.ac:1:define:active:ACTIVE
349 # FIXME: Without '$1' the following test dies.  Groumphf, once again to
350 # dive into obscure feature interaction...
351 # Note that using '-i' means we need the *.m4 files, not the *.m4f files,
352 # hence we need srcdir, not builddir.
353 AT_CHECK_AUTOCONF([[-t define:'$1' -i| sed -n '$p']],
354          0,
355 [[active
358 AT_CLEANUP
361 # autoconf --trace: AC_CONFIG_MACRO_DIRS
362 # --------------------------------------
363 AT_SETUP([autoconf --trace: AC_CONFIG_MACRO_DIRS])
364 AT_KEYWORDS([AC_CONFIG_MACRO_DIR AC_CONFIG_MACRO_DIR_TRACE])
366 AT_DATA([configure.ac],
367 [[AC_INIT
368 AC_CONFIG_MACRO_DIR([dir1])
369 AC_CONFIG_MACRO_DIRS([dir2 dir3 \
370 dir4])
371 AC_CONFIG_MACRO_DIRS([dir5])
374 # Legacy tracing
375 AT_CHECK_AUTOCONF([-t AC_CONFIG_MACRO_DIR], 0,
376 [[configure.ac:2:AC_CONFIG_MACRO_DIR:dir1
379 # Preferred tracing
380 AT_CHECK_AUTOCONF([-t AC_CONFIG_MACRO_DIR_TRACE], 0,
381 [[configure.ac:2:AC_CONFIG_MACRO_DIR_TRACE:dir1
382 configure.ac:3:AC_CONFIG_MACRO_DIR_TRACE:dir2
383 configure.ac:3:AC_CONFIG_MACRO_DIR_TRACE:dir3
384 configure.ac:3:AC_CONFIG_MACRO_DIR_TRACE:dir4
385 configure.ac:5:AC_CONFIG_MACRO_DIR_TRACE:dir5
388 # Legacy macro can only be used once
389 AT_DATA([configure.ac],
390 [[AC_INIT
391 AC_CONFIG_MACRO_DIR([dir1])
392 AC_CONFIG_MACRO_DIR([dir2])
393 AC_OUTPUT
395 AT_CHECK_AUTOCONF([], [1], [], [stderr])
396 AT_CHECK([grep 'error: AC_CONFIG_MACRO_DIR can only be used once' stderr],
397 [], [ignore])
399 # Legacy macro must be used first, if present
400 AT_DATA([configure.ac],
401 [[AC_INIT
402 AC_CONFIG_MACRO_DIRS([dir1])
403 AC_CONFIG_MACRO_DIR([dir2])
405 AT_CHECK_AUTOCONF([], [1], [], [stderr])
406 AT_CHECK([grep 'error: AC_CONFIG_MACRO_DIR can only be used once' stderr],
407 [], [ignore])
409 # Only use the public macros
410 AT_DATA([configure.ac],
411 [[AC_INIT
412 AC_CONFIG_MACRO_DIR_TRACE([dir1])
414 AT_CHECK_AUTOCONF([], [1], [],
415 [[configure.ac:2: error: Do not invoke AC_CONFIG_MACRO_DIR_TRACE directly
416 configure.ac:2: the top level
417 autom4te: error: m4 failed with exit status: 1
420 # Legacy macro use is not required, but still gets traced
421 AT_DATA([configure.ac],
422 [[AC_INIT
423 AC_CONFIG_MACRO_DIRS([dir1])
424 AC_CONFIG_MACRO_DIRS([dir2])
425 AC_OUTPUT
427 AT_CHECK_AUTOCONF([], [0], [], [])
428 AT_CHECK_AUTOCONF([-t AC_CONFIG_MACRO_DIR], [0],
429 [[configure.ac:2:AC_CONFIG_MACRO_DIR:dir1
432 AT_CLEANUP
435 ## ---------------------------- ##
436 ## autoconf: forbidden tokens.  ##
437 ## ---------------------------- ##
440 # autoconf: forbidden tokens, basic
441 # ---------------------------------
442 AT_SETUP([autoconf: forbidden tokens,[] basic])
444 AT_DATA_M4SH([configure.ac],
445 [[AS_INIT
446 m4_foo
447 _m4_bar
448 AS_FOO
449 _AS_BAR
450 [dnl]
453 # This test needs autom4te's cache, in spite of any ~/.autom4te.cfg.
454 AT_DATA([.autom4te.cfg], [[
455 begin-language: "Autoconf"
456 args: --cache=autom4te.cache
457 end-language: "Autoconf"
458 begin-language: "Autoconf-without-aclocal-m4"
459 args: --cache=autom4te.cache
460 end-language: "Autoconf-without-aclocal-m4"
463 AT_MTIME_DELAY
465 AT_CHECK_AUTOCONF([], 1, [],
466 [[trailer.m4: warning: AC_INIT was never used
467 trailer.m4: warning: AC_OUTPUT was never used
468 configure.ac:2: error: undefined or overquoted macro: m4@&t@_foo
469       If this token and others are legitimate, please use m4@&t@_pattern_allow.
470       See the Autoconf documentation.
471 configure.ac:3: error: undefined or overquoted macro: _m4@&t@_bar
472 configure.ac:4: error: undefined or overquoted macro: AS@&t@_FOO
473 configure.ac:5: error: undefined or overquoted macro: _AS@&t@_BAR
474 configure.ac:6: error: undefined or overquoted macro: d@&t@nl
477 # On a file system with coarse timestamp resolution (1 or 2s),
478 # configure and autom4te's cache files can easily have equal
479 # timestamps, in which case autom4te will consider the cache
480 # to be stale.  Ensure configure's timestamp is newer.
481 AT_MTIME_DELAY
482 touch configure
484 # Since warnings are replicated from the cache but "undefined or overquoted
485 # macro" errors are not, a second run, without --force, should succeed
486 # and should yield only the warnings about AC_INIT and AC_OUTPUT.
487 AT_CHECK_M4([autoconf], 0, [],
488 [[trailer.m4: warning: AC_INIT was never used
489 trailer.m4: warning: AC_OUTPUT was never used
492 AT_CLEANUP
495 # autoconf: forbidden tokens, exceptions
496 # --------------------------------------
497 AT_SETUP([autoconf: forbidden tokens,[] exceptions])
499 AT_DATA_M4SH([configure.ac],
500 [[AS_INIT
502 # This is allowed in spite of the name.
503 # It is on purpose that we check the case where there are several
504 # tokens on the same line.
505 m4_pattern_allow([^AS_ALLOWED$])
506 NOT_AS_ALLOWED AS_ALLOWED AS_ALLOWED_NOT
508 # Test forbidding.
509 m4_pattern_forbid([^FORBIDDEN$])
510 NOT_FORBIDDEN FORBIDDEN FORBIDDEN_NOT
512 # Test Autoconf's patterns.
513 AS_THIS_IS_INVALID and _AS_THIS_IS_INVALID_TOO
514 BUT_AZ_THIS_IS_NOT ALTHOUGH_AS_THIS_IS
515 # This is legal, although there is 'AS_DEFINE' in there.
516 BAS_DEFINE
517 # AS_THIS_IS_A_COMMENT so just shut up.
518 It would be very bad if Autoconf forgot to expand [AS_]INIT!
521 AT_CHECK_AUTOCONF([], 1, [],
522 [[trailer.m4: warning: AC_INIT was never used
523 trailer.m4: warning: AC_OUTPUT was never used
524 configure.ac:1: error: undefined or overquoted macro: AS@&t@_INIT
525       If this token and others are legitimate, please use m4@&t@_pattern_allow.
526       See the Autoconf documentation.
527 configure.ac:7: error: undefined or overquoted macro: AS@&t@_ALLOWED_NOT
528 configure.ac:10: error: undefined or overquoted macro: FORBIDDEN
529 configure.ac:14: error: undefined or overquoted macro: AS@&t@_THIS_IS_INVALID
530 configure.ac:14: error: undefined or overquoted macro: _AS@&t@_THIS_IS_INVALID_TOO
533 AT_CLEANUP
536 # autoconf: automatically allowed tokens
537 # --------------------------------------
538 AT_SETUP([autoconf: automatically allowed tokens])
540 AT_DATA_M4SH([configure.ac],
541 [[AC_INIT
542 m4_pattern_forbid([^FB_])
543 AC_DEFINE([FB_ONE])
544 AC_SUBST([FB_TWO])
545 AC_OUTPUT
548 AT_CHECK_AUTOCONF
550 AT_CLEANUP
553 # autoconf: do not forbid the empty token
554 # ---------------------------------------
555 AT_SETUP([autoconf: the empty token])
557 AT_DATA_M4SH([configure.ac],
558 [[m4_init[]m4_pattern_allow([^foo$])
559 m4_divert([])dnl
560  line that begins with a space
563 AT_CHECK_AUTOCONF([], 0, [],
564 [[trailer.m4: warning: AC_INIT was never used
565 trailer.m4: warning: AC_OUTPUT was never used
568 AT_CLEANUP
571 # autoconf: subdirectories
572 # ------------------------
573 AT_SETUP([autoconf: subdirectories])
575 AT_DATA([configure.ac],
576 [[AC_INIT
577 AC_PROG_MKDIR_P
578 AC_CONFIG_FILES(sub/foo)
579 AC_OUTPUT
582 mkdir sub
584 AT_DATA([sub/foo.in],
585 [[@MKDIR_P@
588 AT_DATA([install-sh])
590 AT_CHECK_AUTOCONF
591 AT_CHECK_CONFIGURE
592 AT_CHECK([[grep '^[^/].*/mkdir -p' sub/foo]], 1)
594 AT_CLEANUP
597 # autoconf: input from stdin
598 # --------------------------
599 AT_SETUP([autoconf: input from stdin])
601 # Past Autoconf versions failed to read from stdin when other, non-frozen input
602 # files were present.
603 AT_DATA([aclocal.m4])
605 AT_CHECK([echo 'AC_INIT(X, 1.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
606          0, [stdin:1:AC_INIT:X:1.0:bug-autoconf@gnu.org
608 AT_CHECK([echo 'AC_INIT(X, 2.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
609          0, [stdin:1:AC_INIT:X:2.0:bug-autoconf@gnu.org
612 AT_CLEANUP
615 # autoconf: AC_AUTOCONF_VERSION
616 # -----------------------------
617 AT_SETUP([autoconf: AC_AUTOCONF_VERSION])
619 AT_DATA([configure.ac],
620 [[AC_INIT
621 version m4@&t@_defn([AC_AUTOCONF_VERSION]) version
622 AC_OUTPUT
625 AT_CHECK_AUTOCONF
626 AT_CHECK([[grep 'version ]]AT_PACKAGE_VERSION[[ version' configure]],
627 0, [ignore])
629 AT_CLEANUP
633 # autoconf: AC_PRESERVE_HELP_ORDER
634 # --------------------------------
635 AT_SETUP([autoconf: AC_PRESERVE_HELP_ORDER])
636 AT_KEYWORDS([m4@&t@_divert_text])
638 AT_DATA_AUTOCONF([configure.ac],
639 [[AC_INIT
640 AC_PRESERVE_HELP_ORDER
641 AC_ARG_WITH([one], [  --with-one])
642 AC_ARG_ENABLE([two], [  --enable-two])
643 m4_divert_text([HELP_ENABLE], [arbitrary $text])
644 AC_ARG_WITH([three], [  --with-three])
645 AC_OUTPUT
648 AT_CHECK_AUTOCONF
649 AT_CHECK_CONFIGURE([--help], [], [stdout])
650 AT_CHECK([sed -n '/^Optional/,/^$/p' stdout], [],
651 [[Optional Features and Packages:
652   --disable-option-checking  ignore unrecognized --enable/--with options
653   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
654   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
655   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
656   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
657   --with-one
658   --enable-two
659 arbitrary $text
660   --with-three
664 AT_CLEANUP
667 # autoconf: timestamp changes
668 # ---------------------------
669 # Automake needs autoconf to update the timestamp on the configure script
670 # whenever configure.ac or aclocal.m4 changes, even if the contents of the
671 # configure script have not changed.
672 AT_SETUP([autoconf: timestamp changes])
674 AT_DATA([aclocal.m4],
675 [[AC_DEFUN([local_KILROY], [# kilroy was here
679 AT_DATA_AUTOCONF([configure.ac],
680 [[AC_INIT
681 AC_PROG_CC
682 local_KILROY
683 AC_OUTPUT
686 AT_CHECK_AUTOCONF
688 cp configure configure.1
689 AT_MTIME_DELAY
690 printf '%s\n' 'AC_LIBSOURCES([foo.c])dn@&t@l' >> configure.ac
692 # This step must not use --force.
693 # We don't need to check shell syntax, because if all goes well,
694 # the script will be unchanged from what it was in the first autoconf
695 # pass, and that was already checked.
696 AT_CHECK_M4([autoconf])
697 AT_CHECK([cmp configure configure.1])
698 AT_CHECK([test configure -nt configure.1])
700 cp configure configure.2
701 AT_MTIME_DELAY
702 printf '%s\n' \
703   'AC_DEFUN([unused_MACRO], [# bob was there too' \
704   '])' >> aclocal.m4
706 # Same as above.
707 AT_CHECK_M4([autoconf])
708 AT_CHECK([cmp configure configure.2])
709 AT_CHECK([test configure -nt configure.2])
711 AT_CLEANUP
714 ## --------- ##
715 ## ifnames.  ##
716 ## --------- ##
718 AT_SETUP([ifnames])
720 AT_DATA([iftest1.c],
721 [[#ifdef DEF1
722 #ifndef DEF2
723 #if ! defined DEF3 && defined DEF4 /* but not defined DEF5 */
724     # if SPACES
725         #       if      TABS
726 /* #if C_COMMENTS */
727 // #if CXX_COMMENTS
728 #if LINE1 = \
729 LINE2
730 #if (VAL1*VAL2)==VAL3+VAL4 /* Not VAL5 !!! */
733 AT_DATA([iftest2.c],
734 [[#ifdef IFTEST2
735 #elifdef IFTEST3
736 #elifndef IFTEST4
737 #if VAL1
740 AT_CHECK([ifnames iftest1.c iftest2.c], 0,
741 [DEF1 iftest1.c
742 DEF2 iftest1.c
743 DEF3 iftest1.c
744 DEF4 iftest1.c
745 IFTEST2 iftest2.c
746 IFTEST3 iftest2.c
747 IFTEST4 iftest2.c
748 LINE1 iftest1.c
749 LINE2 iftest1.c
750 SPACES iftest1.c
751 TABS iftest1.c
752 VAL1 iftest1.c iftest2.c
753 VAL2 iftest1.c
754 VAL3 iftest1.c
755 VAL4 iftest1.c
756 ], [])
758 AT_CLEANUP
762 ## ------------ ##
763 ## autoheader.  ##
764 ## ------------ ##
766 # autoheader is intensively used in its modern form throughout this
767 # test suite.  But we also have to check that acconfig.h still works.
768 # autoheader uses autoconf --trace, so traces first.
770 AT_SETUP([autoheader])
772 AT_DATA([acconfig.h],
773 [[/* Define this to whatever you want. */
774 #undef this
778 # 1. Check that 'acconfig.h' is still honored.
779 AT_DATA([configure.ac],
780 [[AC_INIT
781 AC_CONFIG_HEADERS(config.h:config.hin)
782 AC_DEFINE(this, "whatever you want.")
785 AT_CHECK_AUTOHEADER([], [this], [0], [], [ignore])
786 AT_CHECK([cat config.hin], 0,
787 [[/* config.hin.  Generated from configure.ac by autoheader.  */
788 /* Define this to whatever you want. */
789 #undef this
791 /* Define to the address where bug reports for this package should be sent. */
792 #undef PACKAGE_BUGREPORT
794 /* Define to the full name of this package. */
795 #undef PACKAGE_NAME
797 /* Define to the full name and version of this package. */
798 #undef PACKAGE_STRING
800 /* Define to the one symbol short name of this package. */
801 #undef PACKAGE_TARNAME
803 /* Define to the home page for this package. */
804 #undef PACKAGE_URL
806 /* Define to the version of this package. */
807 #undef PACKAGE_VERSION
811 # 2. Check that missing templates are a fatal error.
812 AT_DATA([configure.ac],
813 [[AC_INIT
814 AC_CONFIG_HEADERS(config.h:config.hin)
815 AC_DEFINE(that, "whatever you want.")
818 # The test suite goes too fast for the cache timestamps...
819 # Pass --force.
820 AT_CHECK_AUTOHEADER([--force], [], [1], [], [ignore])
823 # 3. Check TOP and BOTTOM.
824 AT_DATA([acconfig.h],
825 [[/* Top from acconfig.h. */
826 @TOP@
827 /* Middle from acconfig.h. */
828 @BOTTOM@
829 /* Bottom from acconfig.h. */
832 AT_DATA([configure.ac],
833 [[AC_INIT
834 AC_CONFIG_HEADERS(config.h:config.hin)
835 AH_TOP([Top1 from configure.ac.])
836 AH_TOP([Top2 from configure.ac.])
837 AH_TOP([The Cat in a h@t.])
838 AH_VERBATIM([Middle], [Middle from configure.ac.])
839 AH_VERBATIM([Mouse],  [The Mouse in a h@t.])
840 AH_BOTTOM([Bottom1 from configure.ac.])
841 AH_BOTTOM([Bottom2 from configure.ac.])
842 AH_BOTTOM([The Dog in a h@t.])
844 AC_DEFINE([ANT], [@], [The Ant in a h@t.])
848 # Yes, that's right: the 'middle' part of 'acconfig.h' is still before
849 # the AH_TOP part.  But so what, you're not supposed to use the two
850 # together.
851 # Ignore STDERR which is the longish complaint against autoheader junk
852 # files.
853 AT_CHECK_AUTOHEADER([--force], [ANT], [], [], [ignore])
854 AT_CHECK([cat config.hin], 0,
855 [[/* config.hin.  Generated from configure.ac by autoheader.  */
856 /* Top from acconfig.h. */
857 /* Middle from acconfig.h. */
859 Top1 from configure.ac.
861 Top2 from configure.ac.
863 The Cat in a h@t.
865 /* The Ant in a h@t. */
866 #undef ANT
868 Middle from configure.ac.
870 The Mouse in a h@t.
872 /* Define to the address where bug reports for this package should be sent. */
873 #undef PACKAGE_BUGREPORT
875 /* Define to the full name of this package. */
876 #undef PACKAGE_NAME
878 /* Define to the full name and version of this package. */
879 #undef PACKAGE_STRING
881 /* Define to the one symbol short name of this package. */
882 #undef PACKAGE_TARNAME
884 /* Define to the home page for this package. */
885 #undef PACKAGE_URL
887 /* Define to the version of this package. */
888 #undef PACKAGE_VERSION
890 Bottom1 from configure.ac.
892 Bottom2 from configure.ac.
894 The Dog in a h@t.
895 /* Bottom from acconfig.h. */
898 AT_CLEANUP
901 # autoheader should see through m4 macros, just like autoconf
902 # https://lists.gnu.org/archive/html/bug-autoconf/2009-06/msg00000.html
903 AT_SETUP([autoheader and macros])
905 AT_DATA([configure.ac],
906 [[AC_INIT
907 AC_CONFIG_HEADERS([config.h])
908 m4_define([PETER], [SIMSALABIM])
909 m4_define([PAUL], [OPENSESAME])
910 AC_DEFINE([PETER], [10], [Peter's public info])
911 AC_DEFINE_UNQUOTED([PAUL], [`expr 4 + 6`], [Paul's public info])
912 AC_OUTPUT
915 AT_CHECK_AUTOCONF
916 AT_CHECK_AUTOHEADER([], [OPENSESAME SIMSALABIM])
917 AT_CHECK([grep -c SIMSALABIM configure config.h.in], [0],
918 [[configure:1
919 config.h.in:1
921 AT_CHECK([grep -c OPENSESAME configure config.h.in], [0],
922 [[configure:1
923 config.h.in:1
925 AT_CHECK([grep -c PETER configure config.h.in], [1],
926 [[configure:0
927 config.h.in:0
929 AT_CHECK([grep -c PAUL configure config.h.in], [1],
930 [[configure:0
931 config.h.in:0
934 AT_CLEANUP
937 # autoheader should take all config header inputs into account when
938 # checking for missing templates.
939 AT_SETUP([autoheader with multiple headers])
941 AT_DATA([config-extra.h.in],
942 [[/* Define this to whatever you want. */
943 #undef HANNA
945 AT_DATA([configure.ac],
946 [[AC_INIT
947 AC_CONFIG_HEADERS([config.h config-extra.h])
948 AC_DEFINE([HANNA], ["Hanna"])
949 AC_DEFINE([SEAN], ["Sean"], [Sean's name])
950 AC_OUTPUT
953 AT_CHECK_AUTOCONF
954 AT_CHECK_AUTOHEADER([], [SEAN])
955 AT_CHECK([grep HANNA configure], [0], [ignore], [ignore])
956 AT_CHECK([grep HANNA config.h.in], [1], [ignore], [ignore])
957 AT_CHECK([grep SEAN configure], [0], [ignore], [ignore])
958 AT_CHECK([grep SEAN config.h.in], [0], [ignore], [ignore])
960 AT_CLEANUP
964 ## ------------ ##
965 ## autoupdate.  ##
966 ## ------------ ##
968 # Check that AC_CANONICAL_SYSTEM and AC_OUTPUT are properly updated.
969 AT_SETUP([autoupdate])
971 AT_DATA([configure.ac],
972 [[AC_INIT(Test, 1.0)
973 AC_CANONICAL_SYSTEM
974 # The doc says 27 is a valid fubar.
975 fubar=27
976 AC_OUTPUT(Makefile, echo $fubar, fubar=$fubar)
979 AT_DATA([expout],
980 [[AC_INIT([Test],[1.0])
981 AC_CANONICAL_TARGET
982 # The doc says 27 is a valid fubar.
983 fubar=27
984 AC_CONFIG_FILES([Makefile])
985 AC_CONFIG_COMMANDS([default],[echo $fubar],[fubar=$fubar])
986 AC_OUTPUT
989 # Checking 'autoupdate'.
990 AT_CHECK_AUTOUPDATE
991 AT_CHECK([cat configure.ac], 0, [expout])
992 # Checking that 'autoupdate' is idempotent
993 AT_CHECK_AUTOUPDATE
994 AT_CHECK([cat configure.ac], 0, [expout])
996 AT_CLEANUP
999 # autoupdating AC_LINK_FILES
1000 # --------------------------
1001 AT_SETUP([autoupdating AC_LINK_FILES])
1003 AT_DATA([configure.ac],
1004 [[AC_INIT
1005 AC_LINK_FILES(dst1 dst2, src1 src2)
1006 AC_OUTPUT
1009 AT_DATA([dst1], dst1
1011 AT_DATA([dst2], dst2
1014 # Checking 'autoupdate'.
1015 AT_CHECK_AUTOUPDATE([], 0, [], ignore)
1017 # The replacement for AC_LINK_FILES includes a forced -Wobsolete
1018 # warning, because it needs to be manually adjusted afterward.
1019 # Look for it in the autoconf output.
1020 AT_CHECK_AUTOCONF([], 0, [], stderr)
1021 AT_CHECK([grep 'AC_LINK_FILES' stderr], 0, ignore, ignore)
1022 AT_CHECK([grep 'AC_CONFIG_LINKS' stderr], 0, ignore, ignore)
1023 AT_CHECK([grep 'warning: It is technically impossible' stderr],
1024          0, ignore, ignore)
1025 AT_CHECK([grep 'tune the result yourself' stderr], 0, ignore, ignore)
1027 AT_CHECK_CONFIGURE
1028 AT_CHECK([cat src1], 0, [dst1
1030 AT_CHECK([cat src2], 0, [dst2
1033 AT_CLEANUP
1036 # autoupdating AC_PREREQ
1037 # ----------------------
1038 AT_SETUP([autoupdating AC_PREREQ])
1040 # Produce 'AC_PREREQ(<AUTOUPDATE VERSION>)'.
1041 AT_CHECK([autoupdate --version | sed 's/.*) //;q'], 0, [stdout])
1042 autoupdate_version=`cat stdout`
1043 [echo "AC_PREREQ([$autoupdate_version])" >expout]
1045 AT_CHECK([echo "AC_PREREQ(1.0)" | autoupdate -],
1046          0, [expout], [])
1048 AT_CHECK([echo "AC_PREREQ($autoupdate_version)" | autoupdate -],
1049          0, [expout], [])
1051 AT_CHECK([echo "AC_PREREQ(999.99)" | autoupdate -],
1052          63, [], [ignore])
1054 AT_CLEANUP
1057 # autoupdating AU_ALIAS
1058 # ---------------------
1059 AT_SETUP([autoupdating AU_ALIAS])
1061 AT_DATA([configure.ac],
1062 [[AC_INIT
1063 AC_DEFUN([FOO], [$#])
1064 AU_ALIAS([BAZ],[FOO])
1065 test "FOO:FOO():FOO(x) BAZ:BAZ():BAZ(x)" = "0:1:1 0:1:1" || exit 1
1066 AC_PROG_CC
1067 AC_WORDS_BIGENDIAN
1068 AC_CONFIG_HEADERS([config.h])
1069 AC_OUTPUT
1072 # Checking 'autoupdate'.
1073 AT_CHECK_AUTOUPDATE
1075 # autoupdate does not replace AU_DEFUNs/AU_ALIASes defined by
1076 # configure.ac itself, nor by aclocal.m4, so BAZ will still be present
1077 # in the updated configure.ac.  This is actually desirable for this
1078 # test: the point of that part of the above configure.ac is to
1079 # verify that the expansion of an AU_ALIAS definition handles $#
1080 # correctly.  If BAZ got turned into FOO by the above call to
1081 # autoupdate, we would need to run autoconf and configure twice in
1082 # this test.  However, it does also mean that by default we get a
1083 # -Wobsolete warning because of BAZ, so turn that off so it doesn't
1084 # cause a spurious failure.
1085 AT_CHECK_AUTOCONF([-Wno-obsolete])
1086 AT_CHECK_AUTOHEADER([-Wno-obsolete], [
1087   AC_APPLE_UNIVERSAL_BUILD
1088   HAVE_INTTYPES_H
1089   HAVE_STDINT_H
1090   HAVE_STDIO_H
1091   HAVE_STDLIB_H
1092   HAVE_STRINGS_H
1093   HAVE_STRING_H
1094   HAVE_SYS_STAT_H
1095   HAVE_SYS_TYPES_H
1096   HAVE_UNISTD_H
1097   STDC_HEADERS
1098   WORDS_BIGENDIAN
1100 AT_CHECK_CONFIGURE
1101 AT_CHECK([grep 'AC_C_BIGENDIAN[(]' configure.ac], 1, [ignore], [ignore])
1102 AT_CHECK([grep 'AC_C_BIGENDIAN' configure.ac], 0, [ignore], [ignore])
1104 AT_CLEANUP
1107 # autoupdating OLD to NEW
1108 # -----------------------
1110 # The example taken from the code comments.
1111 AT_SETUP([autoupdating OLD to NEW])
1113 AT_DATA([aclocal.m4],
1114 [[AU_DEFUN([OLD], [NEW([$1, $2], m4@&t@_eval([$1 + $2]))])
1115 AC_DEFUN([NEW], [echo "sum($1) = $2"])
1118 AT_DATA([configure.ac],
1119 [[AC_INIT
1120 OLD(1, 2)
1121 NEW([0, 0], [0])
1122 AC_OUTPUT
1125 # Checking 'autoupdate'.
1126 AT_CHECK_AUTOUPDATE
1127 AT_CHECK_AUTOCONF
1128 AT_CHECK_CONFIGURE
1129 AT_CHECK([[grep 'NEW(\[1, 2], *\[3])' configure.ac]], 0, [ignore], [ignore])
1130 AT_CHECK([[grep 'NEW(\[0, 0], *\[0])' configure.ac]], 0, [ignore], [ignore])
1132 AT_CLEANUP
1135 # autoupdating macros recursively
1136 # -------------------------------
1138 AT_SETUP([autoupdating macros recursively])
1140 AT_XFAIL_IF([:])
1142 AT_DATA([configure.ac],
1143 [[AC_INIT
1144 AC_PROG_CC
1145 AC_TRY_COMPILE([], [choke me], [echo bogus1],
1146                [AC_TRY_COMPILE([], [return 0;], [echo good], [echo bogus2])])
1147 AC_OUTPUT
1150 # Checking 'autoupdate'.
1151 AT_CHECK_AUTOUPDATE
1152 AT_CHECK([grep changequote configure.ac], [1])
1153 AT_CHECK([grep TRY_COMPILE configure.ac], [1])
1154 AT_CHECK_AUTOCONF
1155 AT_CHECK_CONFIGURE
1157 AT_CLEANUP
1160 # autoupdating AC_HELP_STRING
1161 # ---------------------------
1162 AT_SETUP([autoupdating AC_HELP_STRING])
1164 AT_DATA([configure.ac],
1165 [[AC_INIT
1166 AC_ARG_ENABLE([foo], [AC_HELP_STRING([--enable-foo], [foo bar])], [:], [:])
1167 AC_OUTPUT
1170 # Checking 'autoupdate'.
1171 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1172 AT_CHECK_AUTOCONF
1173 AT_CHECK_CONFIGURE([], [], [], [ignore])
1174 AT_CHECK([[grep '\[--enable-foo], *\[foo bar]' configure.ac]], 0, [ignore], [ignore])
1176 AT_CLEANUP
1179 # autoupdating with m4sugar
1180 # -------------------------
1181 AT_SETUP([autoupdating with m4sugar])
1183 AT_DATA([aclocal.m4],
1184 [[AU_DEFUN([OLD],
1185 [m4@&t@_pushdef([foo], [bar])dn@&t@l
1186 echo "foo $1 foo"
1187 m4@&t@_popdef([foo])dn@&t@l
1191 touch foo.in
1193 AT_DATA([configure.ac],
1194 [[AC_PREREQ(2.54)
1195 m4_define([gnumeric_version_epoch], [1])
1196 AC_INIT
1197 OLD([ bla  bla ])
1198 AC_FOREACH([name], [n1 n2],
1199            [echo name
1201 AC_CHECKING([for feature])
1202 AC_MSG_RESULT_UNQUOTED([`echo done`])
1204 AC_OUTPUT([foo])
1207 # Checking 'autoupdate'.
1208 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1209 AT_CHECK_AUTOCONF
1210 AT_CHECK_CONFIGURE([], [], [], [ignore])
1212 AT_CLEANUP
1215 # autoupdating with m4_pushdef
1216 # ----------------------------
1217 AT_SETUP([autoupdating with m4@&t@_pushdef])
1219 AT_XFAIL_IF([:])
1221 touch foo.in
1222 AT_DATA([configure.ac],
1223 [[AC_INIT
1224 AC_PROG_CC
1225 # temporarily override this macro
1226 m4@&t@_pushdef([AC_MSG_RESULT_UNQUOTED], [:])
1227 AC_C_BIGENDIAN
1228 m4@&t@_popdef([AC_MSG_RESULT_UNQUOTED])
1229 AC_OUTPUT
1232 # Checking 'autoupdate'.
1233 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1234 AT_CHECK([grep changequote configure.ac], [1])
1235 AT_CHECK([grep [pushdef.*AC_MSG_RESULT_UNQUOTED] configure.ac], [0], [ignore])
1236 AT_CHECK_AUTOCONF
1237 AT_CHECK_CONFIGURE([], [], [], [ignore])
1239 AT_CLEANUP
1242 # autoupdating with AC_REQUIRE
1243 # ----------------------------
1244 AT_SETUP([autoupdating with AC_REQUIRE])
1246 AT_XFAIL_IF([:])
1248 AT_DATA([configure.ac],
1249 [[AC_DEFUN([MACRO],
1250 [AC_REQUIRE([AC_DECL_SYS_SIGLIST])
1251 AC_CHECK_DECLS([_sys_siglist], [], [], [#include <signal.h>])
1254 AC_INIT
1255 MACRO
1256 AC_OUTPUT
1259 # Checking 'autoupdate'.
1260 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1261 AT_CHECK_AUTOCONF
1262 AT_CHECK_CONFIGURE([], [], [], [ignore])
1264 AT_CLEANUP
1267 # autoupdating with complex quoting
1268 # ---------------------------------
1269 AT_SETUP([autoupdating with complex quoting])
1271 AT_XFAIL_IF([:])
1273 AT_DATA([configure.ac],
1274 [[m4_define([MACRO],
1275 [[#define STRING "hello, world\n"
1278 AC_INIT
1279 AC_TRY_COMPILE([#include <stdio.h>
1280                ]MACRO[], [printf (STRING);],
1281                [], [AS_EXIT([1])])
1282 AC_OUTPUT
1285 # Checking 'autoupdate'.
1286 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1287 AT_CHECK_AUTOCONF
1288 AT_CHECK([grep MACRO configure], [1])
1289 AT_CHECK_CONFIGURE([], [], [], [ignore])
1291 AT_CLEANUP
1294 # autoupdating AC_LANG_SAVE
1295 # -------------------------
1296 AT_SETUP([autoupdating AC_LANG_SAVE])
1298 AT_DATA([configure.ac],
1299 [[AC_INIT
1300 AC_LANG_SAVE
1301 AC_LANG_RESTORE
1302 AC_LANG_SAVE
1303 AC_LANG_RESTORE
1304 AC_OUTPUT
1307 # Checking 'autoupdate'.
1309 # Both the autoupdate and autoconf invocations will complain about
1310 # AC_LANG_SAVE being obsolete, because autoupdate cannot replace
1311 # two-macro sequences (e.g. AC_LANG_SAVE \n AC_LANG([C]) ideally would
1312 # become AC_LANG_PUSH([C]) but we can't do that) so an m4_warn
1313 # is left in place to remind people they need to do some hand edits.
1314 # Ignore these diagnostics.
1315 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1316 AT_CHECK_AUTOCONF([], [], [], [ignore])
1317 AT_CHECK_CONFIGURE
1319 AT_CLEANUP
1322 # autoupdating AC_FOREACH
1323 # -----------------------
1324 AT_SETUP([autoupdating AC_FOREACH])
1326 AT_DATA([aclocal.m4],
1327 [[AU_DEFUN([OLD], [AC_FOREACH([myvar], [4 5 6], [' myvar'])])
1330 AT_DATA([configure.ac],
1331 [[AC_INIT
1332 echo AC_FOREACH([myvar], [1 2 3], [' myvar'])OLD
1333 AC_OUTPUT
1336 # Checking 'autoupdate'.
1337 # AC_FOREACH is replaced with an m4sugar macro, so we must make sure
1338 # the m4sugar macro wasn't expanded.
1339 AT_CHECK_AUTOUPDATE
1340 AT_CHECK([[grep 'm4@&t@_foreach_w' configure.ac]], 0, [ignore], [ignore])
1341 AT_CHECK([[grep 'echo 1 2 3 4 5 6' configure.ac]], 1, [ignore], [ignore])
1342 AT_CHECK([[grep "echo ' 1'' 2'' 3'' 4'' 5'' 6'" configure.ac]], 1,
1343          [ignore], [ignore])
1344 AT_CHECK_AUTOCONF
1345 AT_CHECK_CONFIGURE([], [0], [stdout])
1346 AT_CHECK([[grep ' 1 2 3 4 5 6' stdout]], 0, [ignore], [ignore])
1348 AT_CLEANUP
1350 # autoupdating AC_OBSOLETE
1351 # ------------------------
1352 AT_SETUP([autoupdating AC_OBSOLETE])
1354 AT_DATA([aclocal.m4],
1355 [[AC_DEFUN([OLD],
1356 [AC_OBSOLETE([$0], [; convert to NEW])
1357 NEW([$2], [$1])])
1358 AC_DEFUN([NEW],
1359 [AS@&t@_ECHO(["dst=$1 src=$2"])])
1362 AT_DATA([configure.ac],
1363 [[AC_INIT
1364 OLD([src], [dst])
1365 AC_OUTPUT
1368 AT_CHECK_AUTOCONF([-Werror], 1, [],
1369 [[configure.ac:2: warning: OLD is obsolete; convert to NEW
1370 general.m4: AC_OBSOLETE is expanded from...
1371 aclocal.m4:1: OLD is expanded from...
1372 configure.ac:2: the top level
1373 configure.ac:2: warning: The macro 'AC_OBSOLETE' is obsolete.
1374 configure.ac:2: You should run autoupdate.
1375 general.m4: AC_OBSOLETE is expanded from...
1376 aclocal.m4:1: OLD is expanded from...
1377 configure.ac:2: the top level
1380 # autoupdate does not know how to replace OLD with NEW
1381 AT_CHECK_AUTOUPDATE
1382 AT_CHECK([[grep OLD configure.ac]], 0, [ignore], [ignore])
1384 # autoupdate _does_ know how to remove AC_OBSOLETE from aclocal.m4
1385 AT_CHECK_AUTOUPDATE([aclocal.m4], 0, [],
1386 [[aclocal.m4:2: warning: if possible, define this macro using AU_DEFUN.
1389 # AC_OBSOLETE is replaced with an m4sugar macro, so we must make sure
1390 # the m4sugar macro wasn't expanded.
1391 AT_CHECK([[grep 'm4@&t@_warn' aclocal.m4]], 0, [ignore], [ignore])
1392 AT_CHECK([[grep 'if possible, define this' aclocal.m4]], 0, [ignore], [ignore])
1393 AT_CHECK([[grep 'AC_OBSOLETE(' aclocal.m4]], 1, [ignore], [ignore])
1395 AT_CHECK_AUTOCONF([-Wobsolete -Wno-error], 0, [],
1396 [[configure.ac:2: warning: if possible, define this macro using AU_DEFUN.
1397 aclocal.m4:1: OLD is expanded from...
1398 configure.ac:2: the top level
1399 configure.ac:2: warning: OLD is obsolete; convert to NEW
1400 aclocal.m4:1: OLD is expanded from...
1401 configure.ac:2: the top level
1404 AT_CHECK_CONFIGURE([], 0,
1405 [[dst=dst src=src
1406 configure: creating ./config.status
1409 AT_CLEANUP
1412 # autoupdating AC_DIAGNOSE and AC_WARNING
1413 -----------------------------------------
1414 AT_SETUP([autoupdating AC_DIAGNOSE and AC_WARNING])
1416 AT_DATA([configure.ac],
1417 [[AC_INIT
1418 AC_DIAGNOSE([gnu], [The gnu has escaped])
1419 AC_WARNING([funny punctu&tion])
1420 AC_OUTPUT
1423 # Checking 'autoupdate'.
1424 # AC_DIAGNOSE and AC_WARNING are replaced with m4sugar macros, so we
1425 # must make sure the m4sugar macros weren't expanded.
1426 AT_CHECK_AUTOUPDATE
1427 AT_CHECK([[grep 'm4@&t@_warn' configure.ac]], 0, [ignore], [ignore])
1428 AT_CHECK([[grep 'The gnu has escaped' configure.ac]], 0, [ignore], [ignore])
1429 AT_CHECK([[grep 'funny punctu&tion' configure.ac]], 0, [ignore], [ignore])
1431 # The diagnostics should appear when autoconf is run.
1432 AT_CHECK_AUTOCONF([-Wall], [0], [],
1433 [[configure.ac:2: warning: The gnu has escaped
1434 configure.ac:3: warning: funny punctu&tion
1436 AT_CHECK_CONFIGURE
1438 AT_CLEANUP
1441 # autoupdating AC_FATAL
1442 -----------------------
1443 AT_SETUP([autoupdating AC_FATAL])
1445 AT_DATA([configure.ac],
1446 [[AC_INIT
1447 AC_FATAL([what did you do this time])
1448 AC_OUTPUT
1451 # Checking 'autoupdate'.
1452 # AC_FATAL is replaced with a m4sugar macro, so we
1453 # must make sure the m4sugar macro wasn't expanded.
1454 AT_CHECK_AUTOUPDATE
1455 AT_CHECK([[grep 'm4@&t@_fatal' configure.ac]], 0, [ignore], [ignore])
1456 AT_CHECK([[grep 'what did you do this time' configure.ac]],
1457          0, [ignore], [ignore])
1459 # The diagnostic should appear when autoconf is run.
1460 AT_CHECK_AUTOCONF([-Wall], [1], [],
1461 [[configure.ac:2: error: what did you do this time
1462 configure.ac:2: the top level
1463 autom4te: error: m4 failed with exit status: 1
1465 AT_CHECK([[test \! -f configure]])
1467 AT_CLEANUP
1470 # autoupdating with aclocal and m4_include
1471 # ----------------------------------------
1472 AT_SETUP([autoupdating with aclocal and m4@&t@_include])
1474 AT_REQUIRE_ACLOCAL
1476 mkdir m4 aclocal
1477 AT_DATA([configure.ac],
1478 [[AC_INIT(x,0)
1479 AC_UNCHANGED_MACRO
1480 AC_OLD_MACRO
1481 AC_OUTPUT
1483 AT_DATA([m4/stuff.m4],
1484 [[AU_ALIAS([AC_OLD_MACRO], [AC_NEW_MACRO])
1485 AC_DEFUN([AC_NEW_MACRO], [echo hi])
1486 AC_DEFUN([AC_UNCHANGED_MACRO], [echo one])
1488 cp m4/stuff.m4 aclocal/stuff.m4
1489 AT_CHECK([$ACLOCAL -I aclocal], [0], [ignore], [ignore])
1490 # Checking 'autoupdate'.
1491 AT_CHECK_AUTOUPDATE
1492 AT_CHECK([$ACLOCAL -I m4], [0], [ignore], [ignore])
1493 AT_CHECK_AUTOUPDATE
1495 AT_CLEANUP
1498 # Keeping autom4te.cfg complete
1499 # -----------------------------
1501 AT_SETUP([autom4te preselections])
1503 AT_REQUIRE_AUTOMAKE
1504 AT_REQUIRE_ACLOCAL
1506 # This user configuration file will interfere with this test.
1507 AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
1509 AT_DATA([configure.ac],
1510 [[AC_INIT(GNU foo, 1.0)
1511 AM_INIT_AUTOMAKE
1512 AC_CONFIG_FILES([Makefile])
1513 AC_OUTPUT
1516 AT_DATA([Makefile.am],
1517 [[AUTOMAKE_OPTIONS = foreign
1520 AT_MTIME_DELAY
1522 # If Autoconf is too old, or the user has turned caching off, skip:
1523 AT_CHECK([$ACLOCAL || { ret=$?; test $ret -eq 63 && ret=77; exit $ret; }],
1524          [], [], [ignore])
1525 AT_CHECK([test -d autom4te.cache || exit 77])
1526 AT_CHECK([autoconf])
1528 # On a file system with coarse timestamp resolution (1 or 2s),
1529 # configure and autom4te's cache files can easily have equal
1530 # timestamps, in which case autom4te will consider the cache
1531 # to be stale.  Ensure configure's timestamp is newer.
1532 AT_MTIME_DELAY
1533 touch configure
1535 # If this test fails due to missing entries in lib/autom4te.in, then
1536 # comparing the old and new requests is a good place to start debugging:
1537 sort autom4te.cache/requests >old-requests
1539 # if 'configure' is regenerated, we want it to be strictly newer,
1540 # to catch the error consistently.
1541 echo newer >newer
1542 AT_MTIME_DELAY
1544 AT_CHECK([$ACLOCAL], [], [], [ignore])
1545 AT_CHECK([automake --no-force --add-missing], [], [], [ignore])
1546 AT_CHECK([autoconf])
1547 AT_CHECK([test "`find configure -newer newer`" = "" ||
1548           { sort autom4te.cache/requests | diff old-requests -; exit 1; }],
1549          [], [], [],
1550          [extract_version=['s/^[^0-9]*\([0-9][^ ]*\).*/\1/;q']
1551           automake_version=`automake --version | sed "$extract_version"`
1552           used_automake_version=`sed "$extract_version" "$abs_top_srcdir/Makefile.in"`
1553           AT_CHECK([if test "$automake_version" = "$used_automake_version"; ]dnl
1554                     [then exit 1; else exit 77; fi])])
1555 AT_CLEANUP
1558 # autom4te cache creation
1559 # -----------------------
1560 # Ensure autom4te fails when it cannot create the cache directory
1561 # or create files there.
1562 AT_SETUP([autom4te cache creation])
1564 AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
1566 # Work in a subdirectory so autotest can scribble in the toplevel.
1567 mkdir sub
1568 chmod a-w sub
1570 AT_DATA([configure.ac],
1571 [[AC_INIT
1572 AC_OUTPUT
1575 AT_DATA([.autom4te.cfg],
1576 [[begin-language: "Autoconf-without-aclocal-m4"
1577 args: --cache=sub/autom4te.cache
1578 end-language: "Autoconf-without-aclocal-m4"
1581 # Do not try this when we are root or on systems without permissions.
1582 # A failed redirection may cause a status of 2 with FreeBSD sh.
1583 AT_CHECK([(: > sub/some-file) || exit 1 && exit 77], 1, [ignore], [ignore])
1585 # Failure to create cache directory due to access permissions.
1586 AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
1587 AT_CHECK([grep 'cannot create .*autom4te.cache' stderr], [0], [ignore])
1588 AT_CHECK([grep ': Permission denied' stderr], [0], [ignore])
1589 AT_CHECK([test -f configure], [1])
1591 # Failure to create cache directory due to something else in the way.
1592 chmod u+w sub
1593 : > sub/autom4te.cache
1594 AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
1595 AT_CHECK([grep 'cannot create .*autom4te.cache' stderr], [0], [ignore])
1596 AT_CHECK([grep ': File exists' stderr], [0], [ignore])
1597 AT_CHECK([test -f configure], [1])
1599 # This time, creation should succeed.
1600 rm -f sub/autom4te.cache
1601 AT_CHECK_AUTOCONF
1602 AT_CHECK([test -d sub/autom4te.cache])
1604 rm -f configure sub/autom4te.cache/*
1605 chmod a-w sub/autom4te.cache
1607 # Failure to create a file in the cache directory.
1608 AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
1609 AT_CHECK([grep 'cannot open .*autom4te.cache' stderr], [0], [ignore])
1610 AT_CHECK([test -f configure], [1])
1612 # If the directory already exists, that should be fine.
1613 chmod u+w sub/autom4te.cache
1614 AT_CHECK_AUTOCONF
1616 AT_CLEANUP
1619 # autom4te cache locking
1620 # ----------------------
1622 AT_SETUP([autom4te cache locking])
1624 # Expect this test to fail if Perl file locking does not work.
1625 AT_XFAIL_IF([$PERL -I "$top_srcdir/lib" -e '
1626                  use Autom4te::XFile;
1627                  my $fh = new Autom4te::XFile "lockfile", O_RDWR|O_CREAT;
1628                  flock ($fh, LOCK_EX) && exit 1;
1629                '])
1631 # Cannot use AT_CHECK here, autotest internals could be messed up.
1632 # This sleep is not because of file timestamps, it's to make the
1633 # locks conflict.
1634 (echo AC_INIT; sleep 2; echo) \
1635   | (autom4te --language=autoconf -o configure -; echo $? >&2 ) 2>errlog &
1636 AT_CHECK([echo AC_INIT | autom4te --language=autoconf -o configure -])
1637 wait
1639 # Ignore additional output from shell verbose or xtrace mode.
1640 AT_CHECK([grep 'cannot rename' errlog], [1])
1641 AT_CHECK([grep '^0$' errlog], [], [ignore])
1642 AT_CHECK_CONFIGURE
1644 AT_CLEANUP
1647 # autotools and file names containing whitespace
1648 # ----------------------------------------------
1650 AT_SETUP([autotools and whitespace in file names])
1652 AT_SUPPRESS_ACLOCAL
1655 export x
1656 rm -f a b
1657 for funny in \
1658   'with  funny '\'' $x & #! name ' \
1659   'with  funny \ '\'' \'\'' " <a >b * ? name ' #"
1661   funny=`func_sanitize_file_name "$funny"`
1662   file=" file $funny"
1663   dir=`func_sanitize_dir_name " dir $funny"`
1664   TMPDIR="./ tmp$dir"
1665   export TMPDIR
1667   # skip if we cannot create such a file or directory
1668   AT_CHECK([mkdir "$dir" "$TMPDIR" && touch "$file.ac" || exit 77])
1670   cat >"$file.ac" <<'END'
1671 [AC_INIT(x,0)
1672 m4@&t@_include([foo.m4])
1673 AC_CONFIG_HEADERS([config.h:config.hin])
1674 AC_MACRO
1675 AC_OUTPUT]
1677   cat >"$dir"/foo.m4 <<'END'
1678 [AC_DEFUN([AC_MACRO], [echo hi])]
1681   AT_CHECK_AUTOHEADER([-B "$dir" "$file.ac"])
1682   AT_CHECK_AUTOHEADER([--force -I "$dir" "$file.ac"])
1683   AT_CHECK_AUTOUPDATE([-B "$dir" "$file.ac"])
1684   AT_CHECK_AUTOUPDATE([--force -I "$dir" "$file.ac"])
1685   AT_CHECK_AUTOUPDATE([-B "$dir" - < "$file.ac"], [], [ignore])
1686   AT_CHECK_AUTOCONF([-B "$dir" -o "$file" "$file.ac"])
1687   AT_CHECK_AUTOCONF([-I "$dir" -o "$file" "$file.ac"])
1688   # In autoconf, these exercise a slightly different code path:
1689   AT_CHECK_AUTOCONF([--prepend-include="$dir" -o "$file" "$file.ac"])
1690   AT_CHECK_AUTOCONF([--include="$dir" -o "$file" "$file.ac"])
1691   AT_CHECK([autoscan -B "$dir"], [], [], [ignore])
1692   AT_CHECK([autoscan --force -I "$dir"], [], [], [ignore])
1693   # autoreconf requires a sane input file name.
1694   mv -f "$file.ac" configure.ac
1695   AT_CHECK([autoreconf -B "$dir"])
1696   AT_CHECK([autoreconf --force -I "$dir"])
1698   cat >"$file.c" <<'END'
1699 #if FOO
1700 #endif
1702   AT_CHECK([ifnames "$file.c"], [], [ignore])
1704   test ! -f b
1705 done
1707 AT_CLEANUP
1709 # autotools and file names containing whitespace
1710 # ----------------------------------------------
1712 AT_SETUP([autotools and relative TMPDIR])
1714 AT_REQUIRE_ACLOCAL
1716 mkdir _tmp
1717 TMPDIR=_tmp
1718 export TMPDIR
1720 AT_DATA([configure.ac],
1721 [[AC_INIT(x,0)
1722 AC_CONFIG_HEADERS([config.h:config.hin])
1723 AC_MACRO
1724 AC_OUTPUT
1727 mkdir m4
1728 AT_DATA([m4/foo.m4],
1729 [[AC_DEFUN([AC_MACRO],
1730 [AC_DEFINE([HAVE_MACROS], 1, [Define if you have macros.])])
1733 AT_CHECK([$ACLOCAL -I m4])
1734 AT_CHECK_AUTOHEADER([], [HAVE_MACROS])
1735 AT_CHECK_AUTOCONF
1736 AT_CHECK_CONFIGURE
1738 AT_CLEANUP