Document how to safely override CFLAGS default.
[autoconf.git] / tests / tools.at
blobd8ac0dc5218cbbcdefbd3f922b786d8b62a7bbd3
1 #                                                       -*- Autotest -*-
3 AT_BANNER([Executables (autoheader, autoupdate...).])
5 # Copyright (C) 2000, 2001, 2003, 2004, 2006, 2007, 2008, 2009, 2010
6 # Free 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([])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 'possibly undefined 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
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([])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 # autoconf: AC_PRESERVE_HELP_ORDER
539 # --------------------------------
540 AT_SETUP([autoconf: AC_PRESERVE_HELP_ORDER])
541 AT_KEYWORDS([m4@&t@_divert_text])
543 AT_DATA_AUTOCONF([configure.ac],
544 [[AC_INIT
545 AC_PRESERVE_HELP_ORDER
546 AC_ARG_WITH([one], [  --with-one])
547 AC_ARG_ENABLE([two], [  --enable-two])
548 m4_divert_text([HELP_ENABLE], [arbitrary $text])
549 AC_ARG_WITH([three], [  --with-three])
550 AC_OUTPUT
553 AT_CHECK_AUTOCONF
554 AT_CHECK_CONFIGURE([--help], [], [stdout])
555 AT_CHECK([sed -n '/^Optional/,/^$/p' stdout], [],
556 [[Optional Features and Packages:
557   --disable-option-checking  ignore unrecognized --enable/--with options
558   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
559   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
560   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
561   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
562   --with-one
563   --enable-two
564 arbitrary $text
565   --with-three
569 AT_CLEANUP
573 ## --------- ##
574 ## ifnames.  ##
575 ## --------- ##
577 AT_SETUP([ifnames])
579 AT_DATA([iftest1.c],
580 [[#ifdef DEF1
581 #ifndef DEF2
582 #if ! defined DEF3 && defined DEF4 /* but not defined DEF5 */
583     # if SPACES
584         #       if      TABS
585 /* #if C_COMMENTS */
586 // #if CXX_COMMENTS
587 #if LINE1 = \
588 LINE2
589 #if (VAL1*VAL2)==VAL3+VAL4 /* Not VAL5 !!! */
592 AT_DATA([iftest2.c],
593 [[#ifdef IFTEST2
594 #if VAL1
597 AT_CHECK([ifnames iftest1.c iftest2.c], 0,
598 [DEF1 iftest1.c
599 DEF2 iftest1.c
600 DEF3 iftest1.c
601 DEF4 iftest1.c
602 IFTEST2 iftest2.c
603 LINE1 iftest1.c
604 LINE2 iftest1.c
605 SPACES iftest1.c
606 TABS iftest1.c
607 VAL1 iftest1.c iftest2.c
608 VAL2 iftest1.c
609 VAL3 iftest1.c
610 VAL4 iftest1.c
611 ], [])
613 AT_CLEANUP
617 ## ------------ ##
618 ## autoheader.  ##
619 ## ------------ ##
621 # autoheader is intensively used in its modern form throughout this
622 # test suite.  But we also have to check that acconfig.h still works.
623 # autoheader uses autoconf --trace, so traces first.
625 AT_SETUP([autoheader])
627 AT_DATA([acconfig.h],
628 [[/* Define this to whatever you want. */
629 #undef this
633 # 1. Check that `acconfig.h' is still honored.
634 AT_DATA([configure.ac],
635 [[AC_INIT
636 AC_CONFIG_HEADERS(config.h:config.hin)
637 AC_DEFINE(this, "whatever you want.")
640 AT_CHECK_AUTOHEADER([], [], [], [ignore])
641 AT_CHECK([cat config.hin], 0,
642 [[/* config.hin.  Generated from configure.ac by autoheader.  */
643 /* Define this to whatever you want. */
644 #undef this
646 /* Define to the address where bug reports for this package should be sent. */
647 #undef PACKAGE_BUGREPORT
649 /* Define to the full name of this package. */
650 #undef PACKAGE_NAME
652 /* Define to the full name and version of this package. */
653 #undef PACKAGE_STRING
655 /* Define to the one symbol short name of this package. */
656 #undef PACKAGE_TARNAME
658 /* Define to the home page for this package. */
659 #undef PACKAGE_URL
661 /* Define to the version of this package. */
662 #undef PACKAGE_VERSION
666 # 2. Check that missing templates are a fatal error.
667 AT_DATA([configure.ac],
668 [[AC_INIT
669 AC_CONFIG_HEADERS(config.h:config.hin)
670 AC_DEFINE(that, "whatever you want.")
673 # The test suite goes too fast for the cache time stamps...
674 # Pass --force.
675 AT_CHECK_AUTOHEADER([--force], [1], [], [ignore])
678 # 3. Check TOP and BOTTOM.
679 AT_DATA([acconfig.h],
680 [[/* Top from acconfig.h. */
681 @TOP@
682 /* Middle from acconfig.h. */
683 @BOTTOM@
684 /* Bottom from acconfig.h. */
687 AT_DATA([configure.ac],
688 [[AC_INIT
689 AC_CONFIG_HEADERS(config.h:config.hin)
690 AH_TOP([Top1 from configure.ac.])
691 AH_TOP([Top2 from configure.ac.])
692 AH_TOP([The Cat in a h@t.])
693 AH_VERBATIM([Middle], [Middle from configure.ac.])
694 AH_VERBATIM([Mouse],  [The Mouse in a h@t.])
695 AH_BOTTOM([Bottom1 from configure.ac.])
696 AH_BOTTOM([Bottom2 from configure.ac.])
697 AH_BOTTOM([The Dog in a h@t.])
699 AC_DEFINE([ANT], [@], [The Ant in a h@t.])
703 # Yes, that's right: the `middle' part of `acconfig.h' is still before
704 # the AH_TOP part.  But so what, you're not supposed to use the two
705 # together.
706 # Ignore STDERR which is the longuish complaint against autoheader junk
707 # files.
708 AT_CHECK_AUTOHEADER([--force], [], [], [ignore])
709 AT_CHECK([cat config.hin], 0,
710 [[/* config.hin.  Generated from configure.ac by autoheader.  */
711 /* Top from acconfig.h. */
712 /* Middle from acconfig.h. */
714 Top1 from configure.ac.
716 Top2 from configure.ac.
718 The Cat in a h@t.
720 /* The Ant in a h@t. */
721 #undef ANT
723 Middle from configure.ac.
725 The Mouse in a h@t.
727 /* Define to the address where bug reports for this package should be sent. */
728 #undef PACKAGE_BUGREPORT
730 /* Define to the full name of this package. */
731 #undef PACKAGE_NAME
733 /* Define to the full name and version of this package. */
734 #undef PACKAGE_STRING
736 /* Define to the one symbol short name of this package. */
737 #undef PACKAGE_TARNAME
739 /* Define to the home page for this package. */
740 #undef PACKAGE_URL
742 /* Define to the version of this package. */
743 #undef PACKAGE_VERSION
745 Bottom1 from configure.ac.
747 Bottom2 from configure.ac.
749 The Dog in a h@t.
750 /* Bottom from acconfig.h. */
753 AT_CLEANUP
756 # autoheader should see through m4 macros, just like autoconf
757 # http://lists.gnu.org/archive/html/bug-autoconf/2009-06/msg00000.html
758 AT_SETUP([autoheader and macros])
760 AT_DATA([configure.ac],
761 [[AC_INIT
762 AC_CONFIG_HEADER([config.h])
763 m4_define([PETER], [SIMSALABIM])
764 m4_define([PAUL], [OPENSESAME])
765 AC_DEFINE([PETER], [10], [Peter's public info])
766 AC_DEFINE_UNQUOTED([PAUL], [`expr 4 + 6`], [Paul's public info])
767 AC_OUTPUT
770 AT_CHECK_AUTOCONF
771 AT_CHECK_AUTOHEADER
772 AT_CHECK([grep -c SIMSALABIM configure config.h.in], [0],
773 [[configure:1
774 config.h.in:1
776 AT_CHECK([grep -c OPENSESAME configure config.h.in], [0],
777 [[configure:1
778 config.h.in:1
780 AT_CHECK([grep -c PETER configure config.h.in], [1],
781 [[configure:0
782 config.h.in:0
784 AT_CHECK([grep -c PAUL configure config.h.in], [1],
785 [[configure:0
786 config.h.in:0
789 AT_CLEANUP
794 ## ------------ ##
795 ## autoupdate.  ##
796 ## ------------ ##
798 # Check that AC_CANONICAL_SYSTEM and AC_OUTPUT are properly updated.
799 AT_SETUP([autoupdate])
801 AT_DATA([configure.ac],
802 [[AC_INIT(Test, 1.0)
803 AC_CANONICAL_SYSTEM
804 # The doc says 27 is a valid fubar.
805 fubar=27
806 AC_OUTPUT(Makefile, echo $fubar, fubar=$fubar)
809 AT_DATA([expout],
810 [[AC_INIT([Test],[1.0])
811 AC_CANONICAL_TARGET
812 # The doc says 27 is a valid fubar.
813 fubar=27
814 AC_CONFIG_FILES([Makefile])
815 AC_CONFIG_COMMANDS([default],[echo $fubar],[fubar=$fubar])
816 AC_OUTPUT
819 # Checking `autoupdate'.
820 AT_CHECK_AUTOUPDATE
821 AT_CHECK([cat configure.ac], 0, [expout])
822 # Checking that `autoupdate' is idempotent
823 AT_CHECK_AUTOUPDATE
824 AT_CHECK([cat configure.ac], 0, [expout])
826 AT_CLEANUP
829 # autoupdating AC_LINK_FILES
830 # --------------------------
831 AT_SETUP([autoupdating AC_LINK_FILES])
833 AT_DATA([configure.ac],
834 [[AC_INIT
835 AC_LINK_FILES(dst1 dst2, src1 src2)
836 AC_OUTPUT
839 AT_DATA([dst1], dst1
841 AT_DATA([dst2], dst2
844 # Checking `autoupdate'.
845 AT_CHECK_AUTOUPDATE([], 0, [], ignore)
846 AT_CHECK_AUTOCONF
847 AT_CHECK_CONFIGURE
848 AT_CHECK([cat src1], 0, [dst1
850 AT_CHECK([cat src2], 0, [dst2
853 AT_CLEANUP
856 # autoupdating AC_PREREQ
857 # ----------------------
858 AT_SETUP([autoupdating AC_PREREQ])
860 # Produce `AC_PREREQ(<AUTOUPDATE VERSION>)'.
861 AT_CHECK([autoupdate --version | sed 's/.*) //;q'], 0, [stdout])
862 autoupdate_version=`cat stdout`
863 echo "AC_PREREQ($autoupdate_version)" >expout
865 AT_CHECK([echo "AC_PREREQ(1.0)" | autoupdate -],
866          0, [expout], [])
868 AT_CHECK([echo "AC_PREREQ($autoupdate_version)" | autoupdate -],
869          0, [expout], [])
871 AT_CHECK([echo "AC_PREREQ(999.99)" | autoupdate -],
872          63, [], [ignore])
874 AT_CLEANUP
877 # autoupdating AU_ALIAS
878 # ---------------------
879 AT_SETUP([autoupdating AU_ALIAS])
881 AT_DATA([configure.ac],
882 [[AC_INIT
883 AC_DEFUN([FOO], [$#])
884 AU_ALIAS([BAZ],[FOO])
885 test "FOO:FOO():FOO(x) BAZ:BAZ():BAZ(x)" = "0:1:1 0:1:1" || exit 1
886 AC_PROG_CC
887 AC_STDC_HEADERS
888 AC_OUTPUT
891 # Checking `autoupdate'.
892 AT_CHECK_AUTOUPDATE
893 AT_CHECK_AUTOCONF
894 AT_CHECK_CONFIGURE
895 AT_CHECK([grep 'AC_HEADER_STDC[(]' configure.ac], 1, [ignore], [ignore])
896 AT_CHECK([grep 'AC_HEADER_STDC' configure.ac], 0, [ignore], [ignore])
898 AT_CLEANUP
901 # autoupdating OLD to NEW
902 # -----------------------
904 # The example taken from the code comments.
905 AT_SETUP([autoupdating OLD to NEW])
907 AT_DATA([aclocal.m4],
908 [[AU_DEFUN([OLD], [NEW([$1, $2], m4@&t@_eval([$1 + $2]))])
909 AC_DEFUN([NEW], [echo "sum($1) = $2"])
912 AT_DATA([configure.ac],
913 [[AC_INIT
914 OLD(1, 2)
915 NEW([0, 0], [0])
918 # Checking `autoupdate'.
919 AT_CHECK_AUTOUPDATE
920 AT_CHECK_AUTOCONF
921 AT_CHECK_CONFIGURE
922 AT_CHECK([[grep 'NEW(\[1, 2], *\[3])' configure.ac]], 0, [ignore], [ignore])
923 AT_CHECK([[grep 'NEW(\[0, 0], *\[0])' configure.ac]], 0, [ignore], [ignore])
925 AT_CLEANUP
928 # autoupdating macros recursively
929 # -------------------------------
931 AT_SETUP([autoupdating macros recursively])
933 AT_XFAIL_IF([:])
935 AT_DATA([configure.ac],
936 [[AC_INIT
937 AC_PROG_CC
938 AC_TRY_COMPILE([], [choke me], [echo bogus1],
939                [AC_TRY_COMPILE([], [return 0;], [echo good], [echo bogus2])])
940 AC_OUTPUT
943 # Checking `autoupdate'.
944 AT_CHECK_AUTOUPDATE
945 AT_CHECK([grep changequote configure.ac], [1])
946 AT_CHECK([grep TRY_COMPILE configure.ac], [1])
947 AT_CHECK_AUTOCONF
948 AT_CHECK_CONFIGURE
950 AT_CLEANUP
953 # autoupdating AC_HELP_STRING
954 # ---------------------------
955 AT_SETUP([autoupdating AC_HELP_STRING])
957 AT_DATA([configure.ac],
958 [[AC_INIT
959 AC_ARG_ENABLE([foo], [AC_HELP_STRING([--enable-foo], [foo bar])], [:], [:])
962 # Checking `autoupdate'.
963 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
964 AT_CHECK_AUTOCONF
965 AT_CHECK_CONFIGURE([], [], [], [ignore])
966 AT_CHECK([[grep '\[--enable-foo], *\[foo bar]' configure.ac]], 0, [ignore], [ignore])
968 AT_CLEANUP
971 # autoupdating with m4sugar
972 # -------------------------
973 AT_SETUP([autoupdating with m4sugar])
975 AT_DATA([aclocal.m4],
976 [[AU_DEFUN([OLD],
977 [m4@&t@_pushdef([foo], [bar])dn@&t@l
978 echo "foo $1 foo"
979 m4@&t@_popdef([foo])dn@&t@l
983 touch foo.in
985 AT_DATA([configure.ac],
986 [[AC_PREREQ(2.54)
987 m4_define([gnumeric_version_epoch], [1])
988 AC_INIT
989 OLD([ bla  bla ])
990 AC_FOREACH([name], [n1 n2],
991            [echo name
993 AC_CHECKING([for feature])
994 AC_MSG_RESULT_UNQUOTED([`echo done`])
996 AC_OUTPUT([foo])
999 # Checking `autoupdate'.
1000 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1001 AT_CHECK_AUTOCONF
1002 AT_CHECK_CONFIGURE([], [], [], [ignore])
1004 AT_CLEANUP
1007 # autoupdating with m4_pushdef
1008 # ----------------------------
1009 AT_SETUP([autoupdating with m4@&t@_pushdef])
1011 AT_XFAIL_IF([:])
1013 touch foo.in
1014 AT_DATA([configure.ac],
1015 [[AC_INIT
1016 AC_PROG_CC
1017 # temporarily override this macro
1018 m4@&t@_pushdef([AC_MSG_RESULT_UNQUOTED], [:])
1019 AC_C_BIGENDIAN
1020 m4@&t@_popdef([AC_MSG_RESULT_UNQUOTED])
1021 AC_OUTPUT
1024 # Checking `autoupdate'.
1025 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1026 AT_CHECK([grep changequote configure.ac], [1])
1027 AT_CHECK([grep [pushdef.*AC_MSG_RESULT_UNQUOTED] configure.ac], [0], [ignore])
1028 AT_CHECK_AUTOCONF
1029 AT_CHECK_CONFIGURE([], [], [], [ignore])
1031 AT_CLEANUP
1034 # autoupdating with AC_REQUIRE
1035 # ----------------------------
1036 AT_SETUP([autoupdating with AC_REQUIRE])
1038 AT_XFAIL_IF([:])
1040 AT_DATA([configure.ac],
1041 [[AC_DEFUN([MACRO],
1042 [AC_REQUIRE([AC_DECL_SYS_SIGLIST])
1043 AC_CHECK_DECLS([_sys_siglist], [], [], [#include <signal.h>])
1046 AC_INIT
1047 MACRO
1048 AC_OUTPUT
1051 # Checking `autoupdate'.
1052 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1053 AT_CHECK_AUTOCONF
1054 AT_CHECK_CONFIGURE([], [], [], [ignore])
1056 AT_CLEANUP
1059 # autoupdating with complex quoting
1060 # ---------------------------------
1061 AT_SETUP([autoupdating with complex quoting])
1063 AT_XFAIL_IF([:])
1065 AT_DATA([configure.ac],
1066 [[m4_define([MACRO],
1067 [[#define STRING "hello, world\n"
1070 AC_INIT
1071 AC_TRY_COMPILE([#include <stdio.h>
1072                ]MACRO[], [printf (STRING);],
1073                [], [AS_EXIT([1])])
1074 AC_OUTPUT
1077 # Checking `autoupdate'.
1078 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1079 AT_CHECK_AUTOCONF
1080 AT_CHECK([grep MACRO configure], [1])
1081 AT_CHECK_CONFIGURE([], [], [], [ignore])
1083 AT_CLEANUP
1086 # autoupdating AC_LANG_SAVE
1087 # -------------------------
1088 AT_SETUP([autoupdating AC_LANG_SAVE])
1090 AT_DATA([configure.ac],
1091 [[AC_INIT
1092 AC_LANG_SAVE
1093 AC_LANG_RESTORE
1094 AC_LANG_SAVE
1095 AC_LANG_RESTORE
1098 # Checking `autoupdate'.
1099 AT_CHECK_AUTOUPDATE([], [], [], [ignore])
1100 AT_CHECK_AUTOCONF
1101 AT_CHECK_CONFIGURE([], [], [], [ignore])
1103 AT_CLEANUP
1106 # autoupdating AC_FOREACH
1107 # -----------------------
1108 AT_SETUP([autoupdating AC_FOREACH])
1110 AT_DATA([aclocal.m4],
1111 [[AU_DEFUN([OLD], [AC_FOREACH([myvar], [4 5 6], [' myvar'])])
1114 AT_DATA([configure.ac],
1115 [[AC_INIT
1116 echo AC_FOREACH([myvar], [1 2 3], [' myvar'])OLD
1119 # Checking `autoupdate'.
1120 AT_CHECK_AUTOUPDATE
1121 AT_CHECK([[grep 'echo 1 2 3 4 5 6' configure.ac]], 1, [ignore], [ignore])
1122 AT_CHECK([[grep 'm4@&t@_foreach_w' configure.ac]], 0, [ignore], [ignore])
1123 AT_CHECK_AUTOCONF
1124 AT_CHECK_CONFIGURE([], [0], [stdout])
1125 AT_CHECK([[grep ' 1 2 3 4 5 6' stdout]], 0, [ignore], [ignore])
1127 AT_CLEANUP
1130 # autoupdating with aclocal and m4_include
1131 # ----------------------------------------
1132 AT_SETUP([autoupdating with aclocal and m4@&t@_include])
1134 # We use aclocal.
1135 AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
1137 mkdir m4 aclocal
1138 AT_DATA([configure.in],
1139 [[AC_INIT(x,0)
1140 AC_UNCHANGED_MACRO
1141 AC_OLD_MACRO
1142 AC_OUTPUT
1144 AT_DATA([m4/stuff.m4],
1145 [[AU_ALIAS([AC_OLD_MACRO], [AC_NEW_MACRO])
1146 AC_DEFUN([AC_NEW_MACRO], [echo hi])
1147 AC_DEFUN([AC_UNCHANGED_MACRO], [echo one])
1149 cp m4/stuff.m4 aclocal/stuff.m4
1150 AT_CHECK([aclocal -I aclocal], [0], [ignore], [ignore])
1151 # Checking `autoupdate'.
1152 AT_CHECK_AUTOUPDATE
1153 AT_CHECK([aclocal -I m4], [0], [ignore], [ignore])
1154 AT_CHECK_AUTOUPDATE
1156 AT_CLEANUP
1159 # Keeping autom4te.cfg complete
1160 # -----------------------------
1162 AT_SETUP([autom4te preselections])
1163 : ${sleep='sleep 1'}    # Command to force different time stamps.
1164 # If this test should run on FAT file systems and older w32,
1165 # then setting $sleep correctly needs to be revisited.
1167 # We use aclocal and automake.
1168 AT_CHECK([automake --version || exit 77], [], [ignore], [ignore])
1169 AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
1171 AT_DATA([configure.in],
1172 [[AC_INIT(GNU foo, 1.0)
1173 AM_INIT_AUTOMAKE
1174 AC_CONFIG_FILES([Makefile])
1175 AC_OUTPUT
1178 AT_DATA([Makefile.am],
1179 [[AUTOMAKE_OPTIONS = foreign
1182 $sleep # `aclocal.m4' should be strictly younger than its inputs
1184 # If Autoconf is too old, or the user has turned caching off, skip:
1185 AT_CHECK([aclocal || { ret=$?; test $ret -eq 63 && ret=77; exit $ret; }],
1186          [], [], [ignore])
1187 AT_CHECK([test -d autom4te.cache || exit 77])
1188 AT_CHECK([autoconf])
1190 # If this test fails due to missing entries in lib/autom4te.in, then
1191 # comparing the old and new requests is a good place to start debugging:
1192 cp autom4te.cache/requests old-requests
1193 echo newer >newer
1194 $sleep # if `configure' is regenerated, we want it to be strictly newer,
1195        # to catch the error consistently.
1196 AT_CHECK([aclocal], [], [], [ignore])
1197 AT_CHECK([automake --no-force --add-missing], [], [], [ignore])
1198 AT_CHECK([autoconf])
1199 AT_CHECK([test "`find configure -newer newer`" = "" ||
1200           { diff old-requests autom4te.cache/requests; exit 1; }],
1201          [], [], [],
1202          [extract_version=['s/^[^0-9]*\([0-9][^ ]*\).*/\1/;q']
1203           automake_version=`automake --version | sed "$extract_version"`
1204           used_automake_version=`sed "$extract_version" "$abs_top_srcdir/Makefile.in"`
1205           AT_CHECK([if test "$automake_version" = "$used_automake_version"; ]dnl
1206                     [then exit 1; else exit 77; fi])])
1207 AT_CLEANUP
1210 # autom4te cache creation
1211 # -----------------------
1212 # Ensure autom4te fails when it cannot create the cache directory
1213 # or create files there.
1214 AT_SETUP([autom4te cache creation])
1216 AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
1218 # Work in a subdirectory so autotest can scribble in the toplevel.
1219 mkdir sub
1220 chmod a-w sub
1222 AT_DATA([configure.ac],
1223 [[AC_INIT
1226 AT_DATA([.autom4te.cfg],
1227 [[begin-language: "Autoconf-without-aclocal-m4"
1228 args: --cache=sub/autom4te.cache
1229 end-language: "Autoconf-without-aclocal-m4"
1232 # Do not try this when we are root or on systems without permissions.
1233 AT_CHECK([: > sub/some-file && exit 77], 1, [ignore], [ignore])
1235 # Failure to create cache directory.
1236 AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
1237 AT_CHECK([grep 'cannot create .*autom4te.cache' stderr], [0], [ignore])
1238 AT_CHECK([test -f configure], [1])
1240 chmod u+w sub
1241 AT_CHECK_AUTOCONF
1243 rm -f configure sub/autom4te.cache/*
1244 chmod a-w sub/autom4te.cache
1246 # Failure to create a file in the cache directory.
1247 AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
1248 AT_CHECK([grep 'cannot open.*autom4te.cache' stderr], [0], [ignore])
1250 AT_CLEANUP
1253 # autom4te cache locking
1254 # ----------------------
1256 AT_SETUP([autom4te cache locking])
1258 # Cannot use AT_CHECK here, autotest internals could be messed up.
1260 (echo AC_INIT; sleep 2; echo) \
1261   | (autom4te --language=autoconf -o configure -; echo $? >&2 ) 2>errlog &
1262 AT_CHECK([echo AC_INIT | autom4te --language=autoconf -o configure -])
1263 wait
1265 # Ignore additional output from shell verbose or xtrace mode.
1266 AT_CHECK([grep 'cannot rename' errlog], [1])
1267 AT_CHECK([grep '^0$' errlog], [], [ignore])
1268 AT_CHECK_CONFIGURE
1270 AT_CLEANUP
1273 # autotools and file names containing whitespace
1274 # ---------------------------------------------
1276 AT_SETUP([autotools and whitespace in file names])
1278 # We use aclocal.
1279 AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
1282 export x
1283 rm -f a b
1284 for funny in \
1285   'with  funny '\'' $x & #! name ' \
1286   'with  funny \ '\'' \'\'' " <a >b * ? name ' #"
1288   funny=`func_sanitize_file_name "$funny"`
1289   file=" file $funny"
1290   dir=`func_sanitize_dir_name " dir $funny"`
1291   TMPDIR=" tmp$dir"
1292   export TMPDIR
1294   # skip if we cannot create such a file or directory
1295   AT_CHECK([mkdir "$dir" "$TMPDIR" && touch "$file.in" || exit 77])
1297   cat >"$file.in" <<'END'
1298 [AC_INIT(x,0)
1299 m4@&t@_include([foo.m4])
1300 AC_CONFIG_HEADERS([config.h:config.hin])
1301 AC_MACRO
1302 AC_OUTPUT]
1304   cat >"$dir"/foo.m4 <<'END'
1305 [AC_DEFUN([AC_MACRO], [echo hi])]
1308   AT_CHECK_AUTOHEADER([-B "$dir" "$file.in"])
1309   AT_CHECK_AUTOHEADER([--force -I "$dir" "$file.in"])
1310   AT_CHECK_AUTOUPDATE([-B "$dir" "$file.in"])
1311   AT_CHECK_AUTOUPDATE([--force -I "$dir" "$file.in"])
1312   AT_CHECK_AUTOUPDATE([-B "$dir" - < "$file.in"], [], [ignore])
1313   AT_CHECK_AUTOCONF([-B "$dir" -o "$file" "$file.in"])
1314   AT_CHECK_AUTOCONF([-I "$dir" -o "$file" "$file.in"])
1315   # In autoconf, these exercise a slightly different code path:
1316   AT_CHECK_AUTOCONF([--prepend-include="$dir" -o "$file" "$file.in"])
1317   AT_CHECK_AUTOCONF([--include="$dir" -o "$file" "$file.in"])
1318   AT_CHECK([autoscan -B "$dir"], [], [], [ignore])
1319   AT_CHECK([autoscan --force -I "$dir"], [], [], [ignore])
1320   # autoreconf requires a sane input file name.  Also, disable aclocal.
1321   mv -f "$file.in" configure.in
1322   AT_DATA([aclocal.m4])
1323   AT_CHECK([autoreconf -B "$dir"])
1324   AT_CHECK([autoreconf --force -I "$dir"])
1326   cat >"$file.c" <<'END'
1327 #if FOO
1328 #endif
1330   AT_CHECK([ifnames "$file.c"], [], [ignore])
1332   test ! -f b
1333 done
1335 AT_CLEANUP