Fix failure of test 35 when the user has a .autom4te.cfg file.
[autoconf.git] / tests / tools.at
blobe23ac04dca6273eff1c1d049a7d8e15cebd03f73
1 #                                                       -*- Autotest -*-
3 AT_BANNER([Executables (autoheader, autoupdate...).])
5 # Copyright (C) 2000, 2001, 2003, 2004, 2006, 2007, 2008, 2009 Free
6 # Software 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 ## 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 "$ac_cv_sh_n_works" = yes || 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/bin/autoconf"])
54 AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/autoconf"])
55 AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/testsuite"])
57 # These are not built, they are in the src tree.
58 AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/install-sh"])
59 AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/missing"])
61 AT_CLEANUP
66 ## ---------------------------- ##
67 ## Syntax of the Perl scripts.  ##
68 ## ---------------------------- ##
70 AT_SETUP([Syntax of the Perl scripts])
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: 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 time stamp 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(0)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(0)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 'possibly undefined macro' stderr], [], [ignore])
197   cat >"$file" <<'END'
198 [m4@&t@_init[]m4@&t@_include(foo.m4)
199 m4@&t@_divert(0)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
362 ## ---------------------------- ##
363 ## autoconf: forbidden tokens.  ##
364 ## ---------------------------- ##
367 # autoconf: forbidden tokens, basic
368 # ---------------------------------
369 AT_SETUP([autoconf: forbidden tokens,[] basic])
371 AT_DATA_M4SH([configure.ac],
372 [[AS_INIT
373 m4_foo
374 _m4_bar
375 AS_FOO
376 _AS_BAR
377 [dnl]
380 dnl This test needs autom4te's cache, in spite of any ~/.autom4te.cfg.
381 AT_DATA([.autom4te.cfg], [[
382 begin-language: "Autoconf"
383 args: --cache=autom4te.cache
384 end-language: "Autoconf"
385 begin-language: "Autoconf-without-aclocal-m4"
386 args: --cache=autom4te.cache
387 end-language: "Autoconf-without-aclocal-m4"
390 AT_CHECK_AUTOCONF([], 1, [],
391 [[configure.ac:2: error: possibly undefined macro: m4@&t@_foo
392       If this token and others are legitimate, please use m4@&t@_pattern_allow.
393       See the Autoconf documentation.
394 configure.ac:3: error: possibly undefined macro: _m4@&t@_bar
395 configure.ac:4: error: possibly undefined macro: AS@&t@_FOO
396 configure.ac:5: error: possibly undefined macro: _AS@&t@_BAR
397 configure.ac:6: error: possibly undefined macro: d@&t@nl
399 # Second run should succeed and yield no output.
400 AT_CHECK([autoconf])
402 AT_CLEANUP
405 # autoconf: forbidden tokens, exceptions
406 # --------------------------------------
407 AT_SETUP([autoconf: forbidden tokens,[] exceptions])
409 AT_DATA_M4SH([configure.ac],
410 [[AS_INIT
412 # This is allowed in spite of the name.
413 # It is on purpose that we check the case where there are several
414 # tokens on the same line.
415 m4_pattern_allow([^AS_ALLOWED$])
416 NOT_AS_ALLOWED AS_ALLOWED AS_ALLOWED_NOT
418 # Test forbidding.
419 m4_pattern_forbid([^FORBIDDEN$])
420 NOT_FORBIDDEN FORBIDDEN FORBIDDEN_NOT
422 # Test Autoconf's patterns.
423 AS_THIS_IS_INVALID and _AS_THIS_IS_INVALID_TOO
424 BUT_AZ_THIS_IS_NOT ALTHOUGH_AS_THIS_IS
425 # This is legal, although there is `AS_DEFINE' in there.
426 BAS_DEFINE
427 # AS_THIS_IS_A_COMMENT so just shut up.
428 It would be very bad if Autoconf forgot to expand [AS_]INIT!
431 AT_CHECK_AUTOCONF([], 1, [],
432 [[configure.ac:1: error: possibly undefined macro: AS@&t@_INIT
433       If this token and others are legitimate, please use m4@&t@_pattern_allow.
434       See the Autoconf documentation.
435 configure.ac:7: error: possibly undefined macro: AS@&t@_ALLOWED_NOT
436 configure.ac:10: error: possibly undefined macro: FORBIDDEN
437 configure.ac:14: error: possibly undefined macro: AS@&t@_THIS_IS_INVALID
438 configure.ac:14: error: possibly undefined macro: _AS@&t@_THIS_IS_INVALID_TOO
441 AT_CLEANUP
444 # autoconf: automatically allowed tokens
445 # --------------------------------------
446 AT_SETUP([autoconf: automatically allowed tokens])
448 AT_DATA_M4SH([configure.ac],
449 [[AC_INIT
450 m4_pattern_forbid([^FB_])
451 AC_DEFINE([FB_ONE])
452 AC_SUBST([FB_TWO])
453 AC_OUTPUT
456 AT_CHECK_AUTOCONF
458 AT_CLEANUP
461 # autoconf: do not forbid the empty token
462 # ---------------------------------------
463 AT_SETUP([autoconf: the empty token])
465 AT_DATA_M4SH([configure.ac],
466 [[m4_init[]m4_pattern_allow([^foo$])
467 m4_divert([0])dnl
468  line that begins with a space
471 AT_CHECK_AUTOCONF
473 AT_CLEANUP
476 # autoconf: subdirectories
477 # ------------------------
478 AT_SETUP([autoconf: subdirectories])
480 AT_DATA([configure.ac],
481 [[AC_INIT
482 AC_PROG_MKDIR_P
483 AC_CONFIG_FILES(sub/foo)
484 AC_OUTPUT
487 mkdir sub
489 AT_DATA([sub/foo.in],
490 [[@MKDIR_P@
493 AT_DATA([install-sh])
495 AT_CHECK_AUTOCONF
496 AT_CHECK_CONFIGURE
497 AT_CHECK([[grep '^[^/].*/mkdir -p' sub/foo]], 1)
499 AT_CLEANUP
502 # autoconf: input from stdin
503 # --------------------------
504 AT_SETUP([autoconf: input from stdin])
506 # Past Autoconf versions failed to read from stdin when other, non-frozen input
507 # files were present.
508 AT_DATA([aclocal.m4])
510 AT_CHECK([echo 'AC_INIT(X, 1.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
511          0, [stdin:1:AC_INIT:X:1.0:bug-autoconf@gnu.org
513 AT_CHECK([echo 'AC_INIT(X, 2.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
514          0, [stdin:1:AC_INIT:X:2.0:bug-autoconf@gnu.org
517 AT_CLEANUP
520 # autoconf: AC_AUTOCONF_VERSION
521 # --------------------------------------
522 AT_SETUP([autoconf: AC_AUTOCONF_VERSION])
524 AT_DATA([configure.ac],
525 [[AC_INIT
526 version m4@&t@_defn([AC_AUTOCONF_VERSION]) version
527 AC_OUTPUT
530 AT_CHECK_AUTOCONF
531 AT_CHECK([[grep 'version ]]AT_PACKAGE_VERSION[[ version' configure]],
532 0, [ignore])
534 AT_CLEANUP
538 ## --------- ##
539 ## ifnames.  ##
540 ## --------- ##
542 AT_SETUP([ifnames])
544 AT_DATA([iftest1.c],
545 [[#ifdef DEF1
546 #ifndef DEF2
547 #if ! defined DEF3 && defined DEF4 /* but not defined DEF5 */
548     # if SPACES
549         #       if      TABS
550 /* #if C_COMMENTS */
551 // #if CXX_COMMENTS
552 #if LINE1 = \
553 LINE2
554 #if (VAL1*VAL2)==VAL3+VAL4 /* Not VAL5 !!! */
557 AT_DATA([iftest2.c],
558 [[#ifdef IFTEST2
559 #if VAL1
562 AT_CHECK([ifnames iftest1.c iftest2.c], 0,
563 [DEF1 iftest1.c
564 DEF2 iftest1.c
565 DEF3 iftest1.c
566 DEF4 iftest1.c
567 IFTEST2 iftest2.c
568 LINE1 iftest1.c
569 LINE2 iftest1.c
570 SPACES iftest1.c
571 TABS iftest1.c
572 VAL1 iftest1.c iftest2.c
573 VAL2 iftest1.c
574 VAL3 iftest1.c
575 VAL4 iftest1.c
576 ], [])
578 AT_CLEANUP
582 ## ------------ ##
583 ## autoheader.  ##
584 ## ------------ ##
586 # autoheader is intensively used in its modern form throughout this
587 # test suite.  But we also have to check that acconfig.h still works.
588 # autoheader uses autoconf --trace, so traces first.
590 AT_SETUP([autoheader])
592 AT_DATA([acconfig.h],
593 [[/* Define this to whatever you want. */
594 #undef this
598 # 1. Check that `acconfig.h' is still honored.
599 AT_DATA([configure.ac],
600 [[AC_INIT
601 AC_CONFIG_HEADERS(config.h:config.hin)
602 AC_DEFINE(this, "whatever you want.")
605 AT_CHECK_AUTOHEADER([], [], [], [ignore])
606 AT_CHECK([cat config.hin], 0,
607 [[/* config.hin.  Generated from configure.ac by autoheader.  */
608 /* Define this to whatever you want. */
609 #undef this
611 /* Define to the address where bug reports for this package should be sent. */
612 #undef PACKAGE_BUGREPORT
614 /* Define to the full name of this package. */
615 #undef PACKAGE_NAME
617 /* Define to the full name and version of this package. */
618 #undef PACKAGE_STRING
620 /* Define to the one symbol short name of this package. */
621 #undef PACKAGE_TARNAME
623 /* Define to the home page for this package. */
624 #undef PACKAGE_URL
626 /* Define to the version of this package. */
627 #undef PACKAGE_VERSION
631 # 2. Check that missing templates are a fatal error.
632 AT_DATA([configure.ac],
633 [[AC_INIT
634 AC_CONFIG_HEADERS(config.h:config.hin)
635 AC_DEFINE(that, "whatever you want.")
638 # The test suite goes too fast for the cache time stamps...
639 # Pass --force.
640 AT_CHECK_AUTOHEADER([--force], [1], [], [ignore])
643 # 3. Check TOP and BOTTOM.
644 AT_DATA([acconfig.h],
645 [[/* Top from acconfig.h. */
646 @TOP@
647 /* Middle from acconfig.h. */
648 @BOTTOM@
649 /* Bottom from acconfig.h. */
652 AT_DATA([configure.ac],
653 [[AC_INIT
654 AC_CONFIG_HEADERS(config.h:config.hin)
655 AH_TOP([Top1 from configure.ac.])
656 AH_TOP([Top2 from configure.ac.])
657 AH_TOP([The Cat in a h@t.])
658 AH_VERBATIM([Middle], [Middle from configure.ac.])
659 AH_VERBATIM([Mouse],  [The Mouse in a h@t.])
660 AH_BOTTOM([Bottom1 from configure.ac.])
661 AH_BOTTOM([Bottom2 from configure.ac.])
662 AH_BOTTOM([The Dog in a h@t.])
664 AC_DEFINE([ANT], [@], [The Ant in a h@t.])
668 # Yes, that's right: the `middle' part of `acconfig.h' is still before
669 # the AH_TOP part.  But so what, you're not supposed to use the two
670 # together.
671 # Ignore STDERR which is the longuish complaint against autoheader junk
672 # files.
673 AT_CHECK_AUTOHEADER([--force], [], [], [ignore])
674 AT_CHECK([cat config.hin], 0,
675 [[/* config.hin.  Generated from configure.ac by autoheader.  */
676 /* Top from acconfig.h. */
677 /* Middle from acconfig.h. */
679 Top1 from configure.ac.
681 Top2 from configure.ac.
683 The Cat in a h@t.
685 /* The Ant in a h@t. */
686 #undef ANT
688 Middle from configure.ac.
690 The Mouse in a h@t.
692 /* Define to the address where bug reports for this package should be sent. */
693 #undef PACKAGE_BUGREPORT
695 /* Define to the full name of this package. */
696 #undef PACKAGE_NAME
698 /* Define to the full name and version of this package. */
699 #undef PACKAGE_STRING
701 /* Define to the one symbol short name of this package. */
702 #undef PACKAGE_TARNAME
704 /* Define to the home page for this package. */
705 #undef PACKAGE_URL
707 /* Define to the version of this package. */
708 #undef PACKAGE_VERSION
710 Bottom1 from configure.ac.
712 Bottom2 from configure.ac.
714 The Dog in a h@t.
715 /* Bottom from acconfig.h. */
718 AT_CLEANUP
721 # autoheader should see through m4 macros, just like autoconf
722 # http://lists.gnu.org/archive/html/bug-autoconf/2009-06/msg00000.html
723 AT_SETUP([autoheader and macros])
725 AT_DATA([configure.ac],
726 [[AC_INIT
727 AC_CONFIG_HEADER([config.h])
728 m4_define([PETER], [SIMSALABIM])
729 m4_define([PAUL], [OPENSESAME])
730 AC_DEFINE([PETER], [10], [Peter's public info])
731 AC_DEFINE_UNQUOTED([PAUL], [`expr 4 + 6`], [Paul's public info])
732 AC_OUTPUT
735 AT_CHECK_AUTOCONF
736 AT_CHECK_AUTOHEADER
737 AT_CHECK([grep -c SIMSALABIM configure config.h.in], [0],
738 [[configure:1
739 config.h.in:1
741 AT_CHECK([grep -c OPENSESAME configure config.h.in], [0],
742 [[configure:1
743 config.h.in:1
745 AT_CHECK([grep -c PETER configure config.h.in], [1],
746 [[configure:0
747 config.h.in:0
749 AT_CHECK([grep -c PAUL configure config.h.in], [1],
750 [[configure:0
751 config.h.in:0
754 AT_CLEANUP
759 ## ------------ ##
760 ## autoupdate.  ##
761 ## ------------ ##
763 # Check that AC_CANONICAL_SYSTEM and AC_OUTPUT are properly updated.
764 AT_SETUP([autoupdate])
766 AT_DATA([configure.ac],
767 [[AC_INIT(Test, 1.0)
768 AC_CANONICAL_SYSTEM
769 # The doc says 27 is a valid fubar.
770 fubar=27
771 AC_OUTPUT(Makefile, echo $fubar, fubar=$fubar)
774 AT_DATA([expout],
775 [[AC_INIT([Test],[1.0])
776 AC_CANONICAL_TARGET
777 # The doc says 27 is a valid fubar.
778 fubar=27
779 AC_CONFIG_FILES([Makefile])
780 AC_CONFIG_COMMANDS([default],[echo $fubar],[fubar=$fubar])
781 AC_OUTPUT
784 # Checking `autoupdate'.
785 AT_CHECK_AUTOUPDATE
786 AT_CHECK([cat configure.ac], 0, [expout])
787 # Checking that `autoupdate' is idempotent
788 AT_CHECK_AUTOUPDATE
789 AT_CHECK([cat configure.ac], 0, [expout])
791 AT_CLEANUP
794 # autoupdating AC_LINK_FILES
795 # --------------------------
796 AT_SETUP([autoupdating AC_LINK_FILES])
798 AT_DATA([configure.ac],
799 [[AC_INIT
800 AC_LINK_FILES(dst1 dst2, src1 src2)
801 AC_OUTPUT
804 AT_DATA([dst1], dst1
806 AT_DATA([dst2], dst2
809 # Checking `autoupdate'.
810 AT_CHECK_AUTOUPDATE([], 0, [], ignore)
811 AT_CHECK_AUTOCONF
812 AT_CHECK_CONFIGURE
813 AT_CHECK([cat src1], 0, [dst1
815 AT_CHECK([cat src2], 0, [dst2
818 AT_CLEANUP
821 # autoupdating AC_PREREQ
822 # ----------------------
823 AT_SETUP([autoupdating AC_PREREQ])
825 # Produce `AC_PREREQ(<AUTOUPDATE VERSION>)'.
826 AT_CHECK([autoupdate --version | sed 's/.*) //;q'], 0, [stdout])
827 autoupdate_version=`cat stdout`
828 echo "AC_PREREQ($autoupdate_version)" >expout
830 AT_CHECK([echo "AC_PREREQ(1.0)" | autoupdate -],
831          0, [expout], [])
833 AT_CHECK([echo "AC_PREREQ($autoupdate_version)" | autoupdate -],
834          0, [expout], [])
836 AT_CHECK([echo "AC_PREREQ(999.99)" | autoupdate -],
837          63, [], [ignore])
839 AT_CLEANUP
842 # autoupdating AU_ALIAS
843 # ---------------------
844 AT_SETUP([autoupdating AU_ALIAS])
846 AT_DATA([configure.ac],
847 [[AC_INIT
848 AC_DEFUN([FOO], [$#])
849 AU_ALIAS([BAZ],[FOO])
850 test "FOO:FOO():FOO(x) BAZ:BAZ():BAZ(x)" = "0:1:1 0:1:1" || exit 1
851 AC_PROG_CC
852 AC_STDC_HEADERS
853 AC_OUTPUT
856 # Checking `autoupdate'.
857 AT_CHECK_AUTOUPDATE
858 AT_CHECK_AUTOCONF
859 AT_CHECK_CONFIGURE
860 AT_CHECK([grep 'AC_HEADER_STDC[(]' configure.ac], 1, [ignore], [ignore])
861 AT_CHECK([grep 'AC_HEADER_STDC' configure.ac], 0, [ignore], [ignore])
863 AT_CLEANUP
866 # autoupdating OLD to NEW
867 # -----------------------
869 # The example taken from the code comments.
870 AT_SETUP([autoupdating OLD to NEW])
872 AT_DATA([aclocal.m4],
873 [[AU_DEFUN([OLD], [NEW([$1, $2], m4@&t@_eval([$1 + $2]))])
874 AC_DEFUN([NEW], [echo "sum($1) = $2"])
877 AT_DATA([configure.ac],
878 [[AC_INIT
879 OLD(1, 2)
880 NEW([0, 0], [0])
883 # Checking `autoupdate'.
884 AT_CHECK_AUTOUPDATE
885 AT_CHECK_AUTOCONF
886 AT_CHECK_CONFIGURE
887 AT_CHECK([[grep 'NEW(\[1, 2], *\[3])' configure.ac]], 0, [ignore], [ignore])
888 AT_CHECK([[grep 'NEW(\[0, 0], *\[0])' configure.ac]], 0, [ignore], [ignore])
890 AT_CLEANUP
893 # autoupdating macros recursively
894 # -------------------------------
896 AT_SETUP([autoupdating macros recursively])
898 AT_XFAIL_IF([:])
900 AT_DATA([configure.ac],
901 [[AC_INIT
902 AC_PROG_CC
903 AC_TRY_COMPILE([], [choke me], [echo bogus1],
904                [AC_TRY_COMPILE([], [return 0;], [echo good], [echo bogus2])])
905 AC_OUTPUT
908 # Checking `autoupdate'.
909 AT_CHECK_AUTOUPDATE
910 AT_CHECK([grep changequote configure.ac], [1])
911 AT_CHECK([grep TRY_COMPILE configure.ac], [1])
912 AT_CHECK_AUTOCONF
913 AT_CHECK_CONFIGURE
915 AT_CLEANUP
918 # autoupdating AC_HELP_STRING
919 # ---------------------------
920 AT_SETUP([autoupdating AC_HELP_STRING])
922 AT_DATA([configure.ac],
923 [[AC_INIT
924 AC_ARG_ENABLE([foo], [AC_HELP_STRING([--enable-foo], [foo bar])], [:], [:])
927 # Checking `autoupdate'.
928 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
929 AT_CHECK_AUTOCONF
930 AT_CHECK_CONFIGURE([], [], [], [ignore])
931 AT_CHECK([[grep '\[--enable-foo], *\[foo bar]' configure.ac]], 0, [ignore], [ignore])
933 AT_CLEANUP
936 # autoupdating with m4sugar
937 # -------------------------
938 AT_SETUP([autoupdating with m4sugar])
940 AT_DATA([aclocal.m4],
941 [[AU_DEFUN([OLD],
942 [m4@&t@_pushdef([foo], [bar])dn@&t@l
943 echo "foo $1 foo"
944 m4@&t@_popdef([foo])dn@&t@l
948 touch foo.in
950 AT_DATA([configure.ac],
951 [[AC_PREREQ(2.54)
952 m4_define([gnumeric_version_epoch], [1])
953 AC_INIT
954 OLD([ bla  bla ])
955 AC_FOREACH([name], [n1 n2],
956            [echo name
958 AC_CHECKING([for feature])
959 AC_MSG_RESULT_UNQUOTED([`echo done`])
961 AC_OUTPUT([foo])
964 # Checking `autoupdate'.
965 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
966 AT_CHECK_AUTOCONF
967 AT_CHECK_CONFIGURE([], [], [], [ignore])
969 AT_CLEANUP
972 # autoupdating with m4_pushdef
973 # ----------------------------
974 AT_SETUP([autoupdating with m4@&t@_pushdef])
976 AT_XFAIL_IF([:])
978 touch foo.in
979 AT_DATA([configure.ac],
980 [[AC_INIT
981 AC_PROG_CC
982 # temporarily override this macro
983 m4@&t@_pushdef([AC_MSG_RESULT_UNQUOTED], [:])
984 AC_C_BIGENDIAN
985 m4@&t@_popdef([AC_MSG_RESULT_UNQUOTED])
986 AC_OUTPUT
989 # Checking `autoupdate'.
990 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
991 AT_CHECK([grep changequote configure.ac], [1])
992 AT_CHECK([grep [pushdef.*AC_MSG_RESULT_UNQUOTED] configure.ac], [0], [ignore])
993 AT_CHECK_AUTOCONF
994 AT_CHECK_CONFIGURE([], [], [], [ignore])
996 AT_CLEANUP
999 # autoupdating with AC_REQUIRE
1000 # ----------------------------
1001 AT_SETUP([autoupdating with AC_REQUIRE])
1003 AT_XFAIL_IF([:])
1005 AT_DATA([configure.ac],
1006 [[AC_DEFUN([MACRO],
1007 [AC_REQUIRE([AC_DECL_SYS_SIGLIST])
1008 AC_CHECK_DECLS([_sys_siglist], [], [], [#include <signal.h>])
1011 AC_INIT
1012 MACRO
1013 AC_OUTPUT
1016 # Checking `autoupdate'.
1017 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1018 AT_CHECK_AUTOCONF
1019 AT_CHECK_CONFIGURE([], [], [], [ignore])
1021 AT_CLEANUP
1024 # autoupdating with complex quoting
1025 # ---------------------------------
1026 AT_SETUP([autoupdating with complex quoting])
1028 AT_XFAIL_IF([:])
1030 AT_DATA([configure.ac],
1031 [[m4_define([MACRO],
1032 [[#define STRING "hello, world\n"
1035 AC_INIT
1036 AC_TRY_COMPILE([#include <stdio.h>
1037                ]MACRO[], [printf (STRING);],
1038                [], [AS_EXIT([1])])
1039 AC_OUTPUT
1042 # Checking `autoupdate'.
1043 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1044 AT_CHECK_AUTOCONF
1045 AT_CHECK([grep MACRO configure], [1])
1046 AT_CHECK_CONFIGURE([], [], [], [ignore])
1048 AT_CLEANUP
1051 # autoupdating AC_LANG_SAVE
1052 # -------------------------
1053 AT_SETUP([autoupdating AC_LANG_SAVE])
1055 AT_DATA([configure.ac],
1056 [[AC_INIT
1057 AC_LANG_SAVE
1058 AC_LANG_RESTORE
1059 AC_LANG_SAVE
1060 AC_LANG_RESTORE
1063 # Checking `autoupdate'.
1064 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1065 AT_CHECK_AUTOCONF
1066 AT_CHECK_CONFIGURE([], [], [], [ignore])
1068 AT_CLEANUP
1071 # autoupdating AC_FOREACH
1072 # -----------------------
1073 AT_SETUP([autoupdating AC_FOREACH])
1075 AT_DATA([aclocal.m4],
1076 [[AU_DEFUN([OLD], [AC_FOREACH([myvar], [4 5 6], [' myvar'])])
1079 AT_DATA([configure.ac],
1080 [[AC_INIT
1081 echo AC_FOREACH([myvar], [1 2 3], [' myvar'])OLD
1084 # Checking `autoupdate'.
1085 AT_CHECK_AUTOUPDATE
1086 AT_CHECK([[grep 'echo 1 2 3 4 5 6' configure.ac]], 1, [ignore], [ignore])
1087 AT_CHECK([[grep 'm4@&t@_foreach_w' configure.ac]], 0, [ignore], [ignore])
1088 AT_CHECK_AUTOCONF
1089 AT_CHECK_CONFIGURE([], [0], [stdout])
1090 AT_CHECK([[grep ' 1 2 3 4 5 6' stdout]], 0, [ignore], [ignore])
1092 AT_CLEANUP
1095 # autoupdating with aclocal and m4_include
1096 # ----------------------------------------
1097 AT_SETUP([autoupdating with aclocal and m4@&t@_include])
1099 # We use aclocal.
1100 AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
1102 mkdir m4 aclocal
1103 AT_DATA([configure.in],
1104 [[AC_INIT(x,0)
1105 AC_UNCHANGED_MACRO
1106 AC_OLD_MACRO
1107 AC_OUTPUT
1109 AT_DATA([m4/stuff.m4],
1110 [[AU_ALIAS([AC_OLD_MACRO], [AC_NEW_MACRO])
1111 AC_DEFUN([AC_NEW_MACRO], [echo hi])
1112 AC_DEFUN([AC_UNCHANGED_MACRO], [echo one])
1114 cp m4/stuff.m4 aclocal/stuff.m4
1115 AT_CHECK([aclocal -I aclocal], [0], [ignore], [ignore])
1116 # Checking `autoupdate'.
1117 AT_CHECK_AUTOUPDATE
1118 AT_CHECK([aclocal -I m4], [0], [ignore], [ignore])
1119 AT_CHECK_AUTOUPDATE
1121 AT_CLEANUP
1124 # Keeping autom4te.cfg complete
1125 # -----------------------------
1127 AT_SETUP([autom4te preselections])
1128 : ${sleep='sleep 1'}    # Command to force different time stamps.
1129 # If this test should run on FAT file systems and older w32,
1130 # then setting $sleep correctly needs to be revisited.
1132 # We use aclocal and automake.
1133 AT_CHECK([automake --version || exit 77], [], [ignore], [ignore])
1134 AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
1136 AT_DATA([configure.in],
1137 [[AC_INIT(GNU foo, 1.0)
1138 AM_INIT_AUTOMAKE
1139 AC_CONFIG_FILES([Makefile])
1140 AC_OUTPUT
1143 AT_DATA([Makefile.am],
1144 [[AUTOMAKE_OPTIONS = foreign
1147 $sleep # `aclocal.m4' should be strictly younger than its inputs
1149 # If Autoconf is too old, or the user has turned caching off, skip:
1150 AT_CHECK([aclocal || { ret=$?; test $ret -eq 63 && ret=77; exit $ret; }],
1151          [], [], [ignore])
1152 AT_CHECK([test -d autom4te.cache || exit 77])
1153 AT_CHECK([autoconf])
1155 # If this test fails due to missing entries in lib/autom4te.in, then
1156 # comparing the old and new requests is a good place to start debugging:
1157 cp autom4te.cache/requests old-requests
1158 echo newer >newer
1159 $sleep # if `configure' is regenerated, we want it to be strictly newer,
1160        # to catch the error consistently.
1161 AT_CHECK([aclocal], [], [], [ignore])
1162 AT_CHECK([automake --no-force --add-missing], [], [], [ignore])
1163 AT_CHECK([autoconf])
1164 AT_CHECK([test "`find configure -newer newer`" = "" ||
1165           { diff old-requests autom4te.cache/requests; exit 1; }])
1167 AT_CLEANUP
1170 # autom4te cache creation
1171 # -----------------------
1172 # Ensure autom4te fails when it cannot create the cache directory
1173 # or create files there.
1174 AT_SETUP([autom4te cache creation])
1176 AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
1178 # Work in a subdirectory so autotest can scribble in the toplevel.
1179 mkdir sub
1180 chmod a-w sub
1182 AT_DATA([configure.ac],
1183 [[AC_INIT
1186 AT_DATA([.autom4te.cfg],
1187 [[begin-language: "Autoconf-without-aclocal-m4"
1188 args: --cache=sub/autom4te.cache
1189 end-language: "Autoconf-without-aclocal-m4"
1192 # Do not try this when we are root or on systems without permissions.
1193 AT_CHECK([: > sub/some-file && exit 77], 1, [ignore], [ignore])
1195 # Failure to create cache directory.
1196 AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
1197 AT_CHECK([grep 'cannot create .*autom4te.cache' stderr], [0], [ignore])
1198 AT_CHECK([test -f configure], [1])
1200 chmod u+w sub
1201 AT_CHECK_AUTOCONF
1203 rm -f configure sub/autom4te.cache/*
1204 chmod a-w sub/autom4te.cache
1206 # Failure to create a file in the cache directory.
1207 AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
1208 AT_CHECK([grep 'cannot open.*autom4te.cache' stderr], [0], [ignore])
1210 AT_CLEANUP
1213 # autom4te cache locking
1214 # ----------------------
1216 AT_SETUP([autom4te cache locking])
1218 # Cannot use AT_CHECK here, autotest internals could be messed up.
1220 (echo AC_INIT; sleep 2; echo) \
1221   | (autom4te --language=autoconf -o configure -; echo $? >&2 ) 2>errlog &
1222 AT_CHECK([echo AC_INIT | autom4te --language=autoconf -o configure -])
1223 wait
1225 # Ignore additional output from shell verbose or xtrace mode.
1226 AT_CHECK([grep 'cannot rename' errlog], [1])
1227 AT_CHECK([grep '^0$' errlog], [], [ignore])
1228 AT_CHECK_CONFIGURE
1230 AT_CLEANUP
1233 # autotools and file names containing whitespace
1234 # ---------------------------------------------
1236 AT_SETUP([autotools and whitespace in file names])
1238 # We use aclocal.
1239 AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
1242 export x
1243 rm -f a b
1244 for funny in \
1245   'with  funny '\'' $x & #! name ' \
1246   'with  funny \ '\'' \'\'' " <a >b * ? name '
1248   funny=`func_sanitize_file_name "$funny"`
1249   file=" file $funny"
1250   dir=`func_sanitize_dir_name " dir $funny"`
1251   TMPDIR=" tmp$dir"
1252   export TMPDIR
1254   cat >"$file.in" <<'END'
1255 [AC_INIT(x,0)
1256 m4@&t@_include([foo.m4])
1257 AC_CONFIG_HEADERS([config.h:config.hin])
1258 AC_MACRO
1259 AC_OUTPUT]
1261   # skip if we cannot create such a file or directory
1262   AT_CHECK([mkdir "$dir" "$TMPDIR" && test -f "$file.in" || exit 77])
1263   cat >"$dir"/foo.m4 <<'END'
1264 [AC_DEFUN([AC_MACRO], [echo hi])]
1267   AT_CHECK_AUTOHEADER([-B "$dir" "$file.in"])
1268   AT_CHECK_AUTOHEADER([--force -I "$dir" "$file.in"])
1269   AT_CHECK_AUTOUPDATE([-B "$dir" "$file.in"])
1270   AT_CHECK_AUTOUPDATE([--force -I "$dir" "$file.in"])
1271   AT_CHECK_AUTOUPDATE([-B "$dir" - < "$file.in"], [], [ignore])
1272   AT_CHECK_AUTOCONF([-B "$dir" -o "$file" "$file.in"])
1273   AT_CHECK_AUTOCONF([-I "$dir" -o "$file" "$file.in"])
1274   # In autoconf, these exercise a slightly different code path:
1275   AT_CHECK_AUTOCONF([--prepend-include="$dir" -o "$file" "$file.in"])
1276   AT_CHECK_AUTOCONF([--include="$dir" -o "$file" "$file.in"])
1277   AT_CHECK([autoscan -B "$dir"], [], [], [ignore])
1278   AT_CHECK([autoscan --force -I "$dir"], [], [], [ignore])
1279   # autoreconf requires a sane input file name.  Also, disable aclocal.
1280   mv -f "$file.in" configure.in
1281   AT_DATA([aclocal.m4])
1282   AT_CHECK([autoreconf -B "$dir"])
1283   AT_CHECK([autoreconf --force -I "$dir"])
1285   cat >"$file.c" <<'END'
1286 #if FOO
1287 #endif
1289   AT_CHECK([ifnames "$file.c"], [], [ignore])
1291   test ! -f b
1292 done
1294 AT_CLEANUP