Sync usage with man page.
[netbsd-mini2440.git] / gnu / dist / autoconf / tests / tools.at
blob47bf811fb2b7c8bb4ec0bc19e23cf15c6909ca3a
1 #                                                       -*- autoconf -*-
3 AT_BANNER([Executables (autoheader, autoupdate...).])
5 ## -------------------------------------------------------- ##
6 ## Check that the shell scripts are syntactically correct.  ##
7 ## -------------------------------------------------------- ##
9 # We use `/bin/sh -n script' to check that there are no syntax errors
10 # in the scripts.  Although incredible, there are /bin/sh that go into
11 # endless loops with `-n', e.g., SunOS's:
13 #   $ uname -a
14 #   SunOS ondine 4.1.3 2 sun4m unknown
15 #   $ cat endless.sh
16 #   while false
17 #   do
18 #     :
19 #   done
20 #   exit 0
21 #   $ time sh endless.sh
22 #   sh endless.sh  0,02s user 0,03s system 78% cpu 0,064 total
23 #   $ time sh -nx endless.sh
24 #   ^Csh -nx endless.sh  3,67s user 0,03s system 63% cpu 5,868 total
26 # So before using `/bin/sh -n' to check our scripts, we first check
27 # that `/bin/sh -n' is not broken to death.
29 AT_SETUP([Syntax of the scripts])
31 # A script that never returns.  We don't care that it never returns,
32 # broken /bin/sh loop equally with `false', but it makes it easier to
33 # test the robusteness in a good environment: just remove the `-n'.
34 AT_DATA(endless.sh,
35 [[while :
37   :
38 done
39 ]])
41 # A script in charge of testing `/bin/sh -n'.
42 AT_DATA(syntax.sh,
43 [[(/bin/sh -n endless.sh) &
44 sleep 2
45 if kill $! >/dev/null 2>&1; then
46   # We managed to kill the child, which means that we probably
47   # can't trust `/bin/sh -n', hence the test failed.
48   exit 77
50 ]])
52 # If we can't trust sh, just skip.
53 AT_CHECK([/bin/sh ./syntax.sh])
55 # Specify the path to the tool, some shells don't honor PATH when
56 # running `sh PROG'.
58 AT_CHECK([/bin/sh -n ../autoconf],   0)
59 AT_CHECK([/bin/sh -n ../autoreconf], 0)
60 AT_CHECK([/bin/sh -n ../ifnames],    0)
62 # These are not built, they are in the src tree.
63 AT_CHECK([/bin/sh -n $top_srcdir/config/install-sh], 0)
64 AT_CHECK([/bin/sh -n $top_srcdir/config/mkinstalldirs], 0)
65 AT_CHECK([/bin/sh -n $top_srcdir/config/missing], 0)
67 AT_CLEANUP
72 ## ----------------- ##
73 ## AWK portability.  ##
74 ## ----------------- ##
76 AT_SETUP([AWK portability])
78 AT_DATA([configure.ac],
79 [])
81 # Skip if we don't have GNU Awk.
82 AT_CHECK([gawk --version || exit 77], 0, ignore, ignore)
84 # Generation of the script.
85 AT_CHECK([AWK='gawk --posix' autoconf --autoconf-dir .. -l $at_srcdir], 0,
86          [], [])
87 # Tracing.
88 AT_CHECK([AWK='gawk --posix' autoconf --autoconf-dir .. -l $at_srcdir -t AC_INIT], 0,
89          ignore, [])
90 # Syntax correctness of ifnames.
91 AT_CHECK([AWK='gawk --posix' ifnames /dev/null], 0,
92          [], [])
94 AT_CLEANUP(configure)
101 ## ------------------ ##
102 ## autoconf --trace.  ##
103 ## ------------------ ##
106 # autoconf --trace: user macros
107 # -----------------------------
108 AT_SETUP([autoconf --trace: user macros])
110 AT_DATA(configure.ac,
111 [[m4_define([active], [ACTIVE])
112 m4_define([TRACE1], [TRACE2(m4_shift($@))])
113 m4_define([TRACE2], [[$2], $1])
114 TRACE1(foo, bar, baz)
115 TRACE1(foo, TRACE1(bar, baz))
116 TRACE1(foo, active, baz)
117 TRACE1(foo, [active], TRACE1(active, [active]))
120 # Several --traces.
121 AT_CHECK([autoconf --autoconf-dir .. -l $at_srcdir -t TRACE1 -t TRACE2], 0,
122 [[configure.ac:4:TRACE1:foo:bar:baz
123 configure.ac:4:TRACE2:bar:baz
124 configure.ac:5:TRACE1:bar:baz
125 configure.ac:5:TRACE2:baz
126 configure.ac:5:TRACE1:foo::baz
127 configure.ac:5:TRACE2::baz
128 configure.ac:6:TRACE1:foo:ACTIVE:baz
129 configure.ac:6:TRACE2:ACTIVE:baz
130 configure.ac:7:TRACE1:ACTIVE:active
131 configure.ac:7:TRACE2:active
132 configure.ac:7:TRACE1:foo:active::ACTIVE
133 configure.ac:7:TRACE2:active::ACTIVE
136 # Several line requests.
137 AT_CHECK([[autoconf --autoconf-dir .. -l $at_srcdir -t TRACE1:'
138 [$1], [$2], [$3].']], 0,
140 [foo], [bar], [baz].
142 [bar], [baz], [].
144 [foo], [], [baz].
146 [foo], [ACTIVE], [baz].
148 [ACTIVE], [active], [].
150 [foo], [active], [].
153 # ${sep}@.
154 AT_CHECK([autoconf --autoconf-dir .. -l $at_srcdir -t TRACE2:'${)===(}@'], 0,
155 [[[bar])===([baz]
156 [baz]
157 [])===([baz]
158 [ACTIVE])===([baz]
159 [active]
160 [active])===([])===([ACTIVE]
163 AT_CLEANUP
166 # autoconf --trace: builtins
167 # --------------------------
168 AT_SETUP([autoconf --trace: builtins])
170 AT_DATA(configure.ac,
171 [[define([active], [ACTIVE])
174 AT_CHECK([[autoconf --autoconf-dir .. -l $at_srcdir -t define |
175             sed -n '$p']],
176          0,
177 [[configure.ac:1:define:active:ACTIVE
180 # FIXME: Without `$1' the following test dies.  Groumphf, once again to
181 # dive into obscure feature interaction...
182 # Note that using `-i' means we need the *.m4 files, not the *.m4f files,
183 # hence we need srcdir, not builddir.
184 AT_CHECK([[autoconf --autoconf-dir $top_srcdir -l $at_srcdir -t define:'$1' -i|
185             sed -n '$p']],
186          0,
187 [[active
190 AT_CLEANUP
195 ## ---------------------------- ##
196 ## autoconf: forbidden tokens.  ##
197 ## ---------------------------- ##
199 # autoconf: forbidden tokens, basic
200 # ---------------------------------
201 AT_SETUP([autoconf: forbidden tokens, basic])
203 AT_DATA([configure.ac],
204 [[AC_PLAIN_SCRIPT()dnl
205 AC_FOO
206 _AC_BAR
207 m4_foo
208 _m4_bar
209 BAC_FOO
210 B_AC_FOO
211 AS_FOO
212 _AS_BAR
215 AT_CHECK([autoconf --autoconf-dir .. -l $at_srcdir], 1, [], [stderr])
216 # The output of autoconf is not deterministic here because it
217 # uses `for (ind in array)'.  So be sure to have a unique representation.
218 AT_CHECK([sort stderr], 0,
219 [[configure.ac:2: error: possibly undefined macro: AC_FOO
220 configure.ac:3: error: possibly undefined macro: _AC_BAR
221 configure.ac:4: error: possibly undefined macro: m4_foo
222 configure.ac:7: error: possibly undefined macro: B_AC_FOO
223 configure.ac:8: error: possibly undefined macro: AS_FOO
224 configure.ac:9: error: possibly undefined macro: _AS_BAR
227 AT_CLEANUP(configure)
230 # autoconf: forbidden tokens, exceptions
231 # --------------------------------------
232 AT_SETUP([autoconf: forbidden tokens, exceptions])
234 AT_DATA([configure.ac],
235 [[AC_PLAIN_SCRIPT()dnl
237 # This is allowed in spite of the name.
238 # It is on purpose that we check the case where there are several
239 # tokens on the same line.
240 m4_pattern_allow([^AC_ALLOWED$])
241 NOT_AC_ALLOWED AC_ALLOWED AC_ALLOWED_NOT
243 # Test forbidding.
244 m4_pattern_forbid([^FORBIDDEN$])
245 NOT_FORBIDDEN FORBIDDEN FORBIDDEN_NOT
247 # Test Autoconf's patterns.
248 AC_THIS_IS_INVALID and _AC_THIS_IS_INVALID_TOO
249 BUT_AZ_THIS_IS_NOT ALTHOUGH_AC_THIS_IS
250 # This is legal, although there is `AC_DEFINE' in there.
251 BAC_DEFINE
252 # AC_THIS_IS_A_COMMENT so just shut up.
253 It would be very bad if Autoconf forgot to expand [AC_]OUTPUT!
256 AT_CHECK([autoconf --autoconf-dir .. -l $at_srcdir], 1, [], [stderr])
257 # The output of autoconf is not deterministic here because it
258 # uses `for (ind in array)'.  So be sure to have a unique representation.
259 AT_CHECK([sort stderr], 0,
260 [[configure.ac:10: error: possibly undefined macro: FORBIDDEN
261 configure.ac:14: error: possibly undefined macro: AC_THIS_IS_INVALID
262 configure.ac:14: error: possibly undefined macro: _AC_THIS_IS_INVALID_TOO
263 configure.ac:15: error: possibly undefined macro: ALTHOUGH_AC_THIS_IS
264 configure.ac:7: error: possibly undefined macro: AC_ALLOWED_NOT
265 configure.ac:7: error: possibly undefined macro: NOT_AC_ALLOWED
266 configure:18: error: possibly undefined macro: AC_OUTPUT
269 AT_CLEANUP(configure err)
275 ## --------- ##
276 ## ifnames.  ##
277 ## --------- ##
279 AT_SETUP([ifnames])
281 AT_DATA([iftest1.c],
282 [[#ifdef DEF1
283 #ifndef DEF2
284 #if !defined(DEF3) && defined(DEF4) /* but not defined(DEF5) */
285     # if SPACES
286         #       if      TABS
287 /* #if C_COMMENTS */
288 // #if CXX_COMMENTS
289 #if LINE1 = \
290 LINE2
291 #if (VAL1*VAL2)==VAL3+VAL4 /* Not VAL5 !!! */
294 AT_DATA([iftest2.c],
295 [[#ifdef IFTEST2
296 #if VAL1
299 AT_CHECK([ifnames iftest1.c iftest2.c], 0,
300 [DEF1 iftest1.c
301 DEF2 iftest1.c
302 DEF3 iftest1.c
303 DEF4 iftest1.c
304 IFTEST2 iftest2.c
305 LINE1 iftest1.c
306 LINE2 iftest1.c
307 SPACES iftest1.c
308 TABS iftest1.c
309 VAL1 iftest1.c iftest2.c
310 VAL2 iftest1.c
311 VAL3 iftest1.c
312 VAL4 iftest1.c
313 ], [])
315 AT_CLEANUP
319 ## ------------ ##
320 ## autoheader.  ##
321 ## ------------ ##
323 # autoheader is intensively used in its modern form throught this
324 # test suite.  But we also have to check that acconfig.h still works.
325 # autoheader uses autoconf --trace, so traces first.
327 AT_SETUP([autoheader])
329 AT_DATA(acconfig.h,
330 [[/* Define this to whatever you want. */
331 #undef this
335 # 1. Check that `acconfig.h' is still honored.
336 AT_DATA(configure.ac,
337 [[AC_INIT
338 AC_CONFIG_HEADERS(config.h)
339 AC_DEFINE(this, "whatever you want.")
342 AT_CHECK([autoheader --autoconf-dir .. -<configure.ac], 0,
343 [[/* config.h.in.  Generated automatically from - by autoheader.  */
344 /* Define this to whatever you want. */
345 #undef this
346 ]], ignore)
349 # 2. Check that missing templates are a fatal error.
350 AT_DATA(configure.ac,
351 [[AC_INIT
352 AC_CONFIG_HEADERS(config.h)
353 AC_DEFINE(that, "whatever you want.")
356 AT_CHECK([autoheader --autoconf-dir .. -<configure.ac], 1, [],
357 [autoheader: No template for symbol `that'
361 # 3. Check TOP and BOTTOM.
362 AT_DATA(acconfig.h,
363 [[/* Top from acconfig.h. */
364 @TOP@
365 /* Middle from acconfig.h. */
366 @BOTTOM@
367 /* Bottom from acconfig.h. */
370 AT_DATA(configure.ac,
371 [[AC_INIT
372 AC_CONFIG_HEADERS(config.h)
373 AH_TOP([Top1 from configure.ac.])
374 AH_TOP([Top2 from configure.ac.])
375 AH_VERBATIM([Middle], [Middle from configure.ac.])
376 AH_BOTTOM([Bottom1 from configure.ac.])
377 AH_BOTTOM([Bottom2 from configure.ac.])
381 # Yes, that's right: the `middle' part of `acconfig.h' is still before
382 # the AH_TOP part.  But so what, you're not supposed to use the two
383 # together.
384 AT_CHECK([autoheader --autoconf-dir .. -<configure.ac], 0,
385 [[/* config.h.in.  Generated automatically from - by autoheader.  */
386 /* Top from acconfig.h. */
388 /* Middle from acconfig.h. */
390 Top1 from configure.ac.
392 Top2 from configure.ac.
394 Middle from configure.ac.
396 Bottom1 from configure.ac.
398 Bottom2 from configure.ac.
399 /* Bottom from acconfig.h. */
400 ]], [])
403 AT_CLEANUP
408 ## ------------ ##
409 ## autoupdate.  ##
410 ## ------------ ##
412 # Check that AC_CANONICAL_SYSTEM and AC_OUTPUT are properly updated.
413 AT_SETUP([autoupdate])
415 AT_DATA(configure.ac,
416 [[AC_INIT(Test, 1.0)
417 AC_CANONICAL_SYSTEM
418 dnl The doc says 27 is a valid fubar.
419 fubar=27
420 AC_OUTPUT(Makefile, echo $fubar, fubar=$fubar)
423 AT_DATA([expout],
424 [[AC_INIT([Test],[1.0])
425 AC_CANONICAL_TARGET([])
426 dnl The doc says 27 is a valid fubar.
427 fubar=27
428 AC_CONFIG_FILES([Makefile])
429 AC_CONFIG_COMMANDS([default],[[echo $fubar]],[[fubar=$fubar]])
430 AC_OUTPUT
433 # Checking `autoupdate'.
434 AT_CHECK_AUTOUPDATE
435 AT_CHECK([cat configure.ac], 0, [expout])
436 # Checking that `autoupdate' is idempotent
437 AT_CHECK([autoupdate --autoconf-dir $top_srcdir], 0, [],
438          [autoupdate: `configure.ac' is unchanged
440 AT_CHECK([cat configure.ac], 0, [expout])
442 AT_CLEANUP(configure.ac~)
445 # autoupdating AC_LINK_FILES
446 # --------------------------
447 AT_SETUP([autoupdating AC_LINK_FILES])
449 AT_DATA(configure.ac,
450 [[AC_INIT
451 AC_LINK_FILES(dst1 dst2, src1 src2)
452 AC_OUTPUT
455 AT_DATA(dst1, dst1
457 AT_DATA(dst2, dst2
460 # Checking `autoupdate'.
461 AT_CHECK_AUTOUPDATE
462 AT_CHECK_AUTOCONF
463 AT_CHECK_CONFIGURE
464 AT_CHECK([cat src1], 0, [dst1
466 AT_CHECK([cat src2], 0, [dst2
469 AT_CLEANUP(src1 src2 configure.ac~)
472 # autoupdating AC_PREREQ
473 # ----------------------
474 AT_SETUP([autoupdating AC_PREREQ])
476 cat >expout <<EOF
477 AC_PREREQ($at_version)
480 AT_CHECK([autoupdate --version || exit 77], ignore, ignore, ignore)
481 AT_CHECK([echo "AC_PREREQ(1.0)" |
482             autoupdate --autoconf-dir $top_srcdir -],
483          0, [expout], [])
485 AT_CHECK([echo "AC_PREREQ($at_version)" |
486             autoupdate --autoconf-dir $top_srcdir -],
487          0, [expout], [])
489 AT_CHECK([echo "AC_PREREQ(999.99)" |
490             autoupdate --autoconf-dir $top_srcdir -],
491          1, [], [ignore])
493 AT_CLEANUP