]> git.draconx.ca Git - dxcommon.git/blob - tests/macros.at
DX_C_ALIGNAS: Work around bash-5 parsing bug.
[dxcommon.git] / tests / macros.at
1 dnl Copyright © 2014-2015, 2018-2019, 2021-2024 Nick Bowler
2 dnl
3 dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
4 dnl This is free software: you are free to do what the fuck you want to.
5 dnl There is NO WARRANTY, to the extent permitted by law.
6
7 AT_BANNER([Autoconf macros])
8
9 dnl Verify that the DX_BASEDIR macro expands correctly during argument
10 dnl collection.  Crucially, the output must not contain any other text.
11 AT_SETUP([DX_BASEDIR during argument collection])
12 AT_KEYWORDS([DX_BASEDIR macro])
13
14 AT_DATA([test.in],
15 [[@TEST@
16 ]])
17
18 TEST_CONFIGURE_AC(
19 [[AC_SUBST([TEST], 'm4@&t@_dquote(DX_BASEDIR)')
20 AC_CONFIG_FILES([test])
21 ]])
22 TEST_AUTORECONF
23 TEST_CONFIGURE
24
25 printf '%s\n' "$srcdir" | sed -e 's:/\./:/:g' -e 's:/\.$::g' \
26                               -e 's:\(.\)//*:\1/:g' >expout
27 AT_CHECK([cat test], [0], [expout])
28
29 AT_CLEANUP
30
31 dnl Verify that DX_BASEDIR is correctly AC_SUBSTed
32 AT_SETUP([DX_BASEDIR output substitution])
33 AT_KEYWORDS([DX_BASEDIR macro])
34
35 AT_DATA([test.in],
36 [[@DX_BASEDIR@
37 ]])
38
39 TEST_CONFIGURE_AC(
40 [[DX_INIT
41 AC_CONFIG_FILES([test])
42 ]])
43 TEST_AUTORECONF
44 TEST_CONFIGURE
45
46 printf '${top_srcdir}/%s\n' "$srcdir" | sed -e 's:/\./:/:g' -e 's:/\.$::g' \
47                                             -e 's:\(.\)//*:\1/:g' >expout
48 AT_CHECK([cat test], [0], [expout])
49
50 AT_CLEANUP
51
52 dnl Verify that DX_BASEDIR is set correctly implicitly
53 AT_SETUP([DX_BASEDIR implicit definition])
54 AT_KEYWORDS([DX_BASEDIR macro])
55
56 AT_DATA([test.in],
57 [[@DX_BASEDIR@
58 ]])
59
60 TEST_CONFIGURE_AC(
61 [[DX_EXPORTED_SH
62 AC_CONFIG_FILES([test])
63 ]])
64 TEST_AUTORECONF
65 TEST_CONFIGURE
66
67 AT_CLEANUP
68
69 AT_SETUP([DX_COMMAND_OUTPUT])
70 AT_KEYWORDS([DX_COMMAND_OUTPUT macro])
71
72 AT_DATA([expout],
73 [[   leading whitespace
74 trailing whitespace     @&t@
75 embedded\ backslashes
76       @&t@
77 backslash\
78 newline
79 ]])
80
81 TEST_CONFIGURE_AC(
82 [[DX_COMMAND_OUTPUT([var], [cat expout])
83 AS@&t@_ECHO(["$var"]) >test.out
84 ]])
85 TEST_AUTORECONF
86 TEST_CONFIGURE
87
88 AT_CHECK([cat test.out], [0], [expout])
89
90 AT_CLEANUP
91
92 AT_SETUP([DX_DO quoting])
93 AT_KEYWORDS([DX_DO macro])
94
95 TEST_CONFIGURE_AC(
96 [[m4@&t@_define([FOO])
97 :; { DX_DO([AS@&t@_ECHO_N(["[FOO]"])],
98            [AS@&t@_ECHO_N(["[FOO]"])],
99            [AS@&t@_ECHO(["[FOO]"])])
100 } >test.out
101 ]])
102
103 dnl TEST_CONFIGURE_AC(
104 dnl [[DX_DO([AS@&t@_ECHO_N([hello,world])],[AS@&t@_ECHO_N([goodbye,world])])
105 dnl ]])
106 TEST_AUTORECONF
107 TEST_CONFIGURE
108 AT_CHECK([cat test.out], [0], [[FOOFOOFOO
109 ]])
110
111 AT_CLEANUP
112
113 AT_SETUP([DX_LINGUAS unused country variants])
114 AT_KEYWORDS([DX_LINGUAS macro])
115
116 echo : >config.rpath
117 chmod +x config.rpath
118
119 mkdir po
120 AT_DATA([po/LINGUAS], [[en
121 ]])
122
123 AT_DATA([test.in], [[POFILES = @POFILES@
124 MOFILES = @MOFILES@
125 ]])
126
127 TEST_CONFIGURE_AC(
128 [[m4@&t@_traceoff([AM_GNU_GETTEXT])
129 AM_GNU_GETTEXT([external])
130 DX_LINGUAS
131 AC_CONFIG_FILES([test])
132 ]])
133
134 TEST_AUTORECONF
135 LINGUAS='en_CA en'; export LINGUAS; TEST_CONFIGURE
136
137 AT_CHECK([cat test], [0], [[POFILES = po/en.po
138 MOFILES = po/en.mo
139 ]])
140
141 AT_CLEANUP
142
143 AT_SETUP([DX_LINGUAS default install all])
144 AT_KEYWORDS([DX_LINGUAS macro])
145
146 AS_UNSET([LINGUAS])
147 AT_SKIP_IF([test ${LINGUAS+y}])
148
149 echo : >config.rpath
150 chmod +x config.rpath
151
152 mkdir po
153 AT_DATA([po/LINGUAS], [[en ja # a comment ko
154 zh
155 ]])
156
157 AT_DATA([test.in], [[POFILES = @POFILES@
158 MOFILES = @MOFILES@
159 ]])
160
161 TEST_CONFIGURE_AC(
162 [[m4@&t@_traceoff([AM_GNU_GETTEXT])
163 AM_GNU_GETTEXT([external])
164 DX_LINGUAS
165 AC_CONFIG_FILES([test])
166 ]])
167
168 TEST_AUTORECONF
169 TEST_CONFIGURE
170
171 AT_CHECK([cat test], [0],
172 [[POFILES = po/en.po po/ja.po po/zh.po
173 MOFILES = po/en.mo po/ja.mo po/zh.mo
174 ]])
175
176 AT_CLEANUP
177
178 AT_SETUP([DX_LINGUAS selections])
179 AT_KEYWORDS([DX_LINGUAS macro])
180
181 echo : >config.rpath
182 chmod +x config.rpath
183
184 mkdir po
185 AT_DATA([po/LINGUAS], [[en ja # a comment ko
186 zh en_US
187 ]])
188
189 AT_DATA([test.in], [[POFILES = @POFILES@
190 MOFILES = @MOFILES@
191 ]])
192
193 TEST_CONFIGURE_AC(
194 [[m4@&t@_traceoff([AM_GNU_GETTEXT])
195 AM_GNU_GETTEXT([external])
196 DX_LINGUAS
197 AC_CONFIG_FILES([test])
198 ]])
199 TEST_AUTORECONF
200
201 LINGUAS='en'; export LINGUAS; TEST_CONFIGURE
202 AT_CHECK([cat test], [0],
203 [[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po
204 MOFILES = po/en.mo
205 ]])
206
207 LINGUAS='en_US'; export LINGUAS; TEST_CONFIGURE
208 AT_CHECK([cat test], [0],
209 [[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po
210 MOFILES = po/en.mo po/en_US.mo
211 ]])
212
213 LINGUAS='en_CA'; export LINGUAS; TEST_CONFIGURE
214 AT_CHECK([cat test], [0],
215 [[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po
216 MOFILES = po/en.mo
217 ]])
218
219 LINGUAS='ja ko'; export LINGUAS; TEST_CONFIGURE
220 AT_CHECK([cat test], [0],
221 [[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po
222 MOFILES = po/ja.mo
223 ]])
224
225 LINGUAS='ja_JP ko_KR'; export LINGUAS; TEST_CONFIGURE
226 AT_CHECK([cat test], [0],
227 [[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po
228 MOFILES = po/ja.mo
229 ]])
230
231 LINGUAS=''; export LINGUAS; TEST_CONFIGURE
232 AT_CHECK([cat test], [0],
233 [[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po
234 MOFILES = @&t@
235 ]])
236
237 AT_CLEANUP
238
239 AT_SETUP([DX_LINGUAS with broken "join" utility])
240 AT_KEYWORDS([DX_LINGUAS macro])
241
242 echo : >config.rpath
243 chmod +x config.rpath
244
245 mkdir bin
246 cat >bin/join <<EOF
247 #!/bin/sh
248 :
249 EOF
250 chmod +x bin/join
251
252 mkdir po
253 AT_DATA([po/LINGUAS], [[en ja # a comment ko
254 zh en_US
255 ]])
256
257 AT_DATA([test.in], [[POFILES = @POFILES@
258 MOFILES = @MOFILES@
259 ]])
260
261 TEST_CONFIGURE_AC(
262 [[m4@&t@_traceoff([AM_GNU_GETTEXT])
263 AM_GNU_GETTEXT([external])
264 DX_LINGUAS
265 AC_CONFIG_FILES([test])
266 ]])
267 TEST_AUTORECONF
268
269 save_PATH=$PATH
270 PATH=`pwd`/bin${PATH:+":$PATH"}
271 LINGUAS='en_US'; export LINGUAS; TEST_CONFIGURE
272
273 AT_CHECK([cat test], [0],
274 [[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po
275 MOFILES = po/en.mo po/en_US.mo
276 ]])
277
278 LINGUAS='en_US'; export LINGUAS; TEST_CONFIGURE([JOIN=false])
279
280 AT_CHECK([cat test], [0],
281 [[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po
282 MOFILES = po/en.mo po/en_US.mo
283 ]])
284
285 PATH=$save_PATH
286
287 AT_CLEANUP
288
289 AT_SETUP([DX_BASENAME])
290 AT_KEYWORDS([DX_BASENAME macro])
291
292 AT_DATA([test.in], [[@base0@
293 @base1@
294 @base2@
295 @base3@
296 ]])
297
298 TEST_CONFIGURE_AC(
299 [[DX_BASENAME([base0], ["hello"])
300 DX_BASENAME([base1], ["foo/bar"])
301 DX_BASENAME([base2], ["/foo/bar/baz"])
302 DX_BASENAME([base3], ["hello world"])
303 AC_SUBST([base0])
304 AC_SUBST([base1])
305 AC_SUBST([base2])
306 AC_SUBST([base3])
307 AC_CONFIG_FILES([test])
308 ]])
309 TEST_AUTORECONF
310
311 TEST_CONFIGURE
312 AT_CHECK([cat test], [0], [hello
313 bar
314 baz
315 hello world
316 ])
317
318 AT_CLEANUP
319
320 AT_SETUP([DX_PROG_JOIN distribution])
321 AT_KEYWORDS([DX_PROG_JOIN macro])
322
323 TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
324 DX_PROG_JOIN
325 AC_CONFIG_FILES([Makefile])
326 ]])
327
328 AT_DATA([Makefile.am],
329 [[foo: ; printf '%s\n' $(DX_BASEDIR) $(DISTFILES)
330 ]])
331 TEST_AUTORECONF
332
333 TEST_CONFIGURE
334 AT_CHECK([make -s foo], [0], [stdout])
335 AT_CHECK([exec 3<stdout
336 read basedir <&3; while read f <&3; do
337   test x"$f" = x"$basedir/scripts/join.awk" && exit
338 done
339 exit 1])
340
341 AT_CLEANUP
342
343 m4_define([TEST_SYMFILES_INIT],
344 [TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
345 AM_PROG_CC_C_O
346 AC_SUBST([GLSRC], [.])
347 DX_AUTOMAKE_COMPAT
348 DX_GNULIB_SYMFILES([symfiles.lst])
349 AC_CONFIG_FILES([Makefile])
350 ]])
351
352 cp "$srcdir/snippet/glconfig.mk" .
353 AT_DATA([Makefile.am],
354 [[CLEANFILES =
355 DISTCLEANFILES =
356
357 # automake won't emit this without sources but we expect it to be set
358 am__depfiles_maybe = depfiles
359 am__maybe_remake_depfiles = depfiles
360
361 gnulib_headers =
362 gnulib_objects = a.o c.o b.o e.o d.o
363 gnulib_all_symfiles = $(gnulib_objects:.o=.glsym)
364 gnulib_symfiles = $(gnulib_all_symfiles)
365
366 do_test:
367         printf '%s\n' $(gnulib_symfiles) | LC_ALL=C sort; \
368           echo ///; printf '%s\n' $(gnulib_extra_objects) | LC_ALL=C sort
369 .PHONY: do_test
370
371 include $(top_srcdir)/glconfig.mk
372 ]])])
373
374 AT_SETUP([DX_GNULIB_SYMFILES])
375 AT_KEYWORDS([DX_GNULIB_SYMFILES macro])
376
377 TEST_SYMFILES_INIT
378 AT_DATA([symfiles.lst],
379 [[b.foo
380 d.bar
381 ]])
382 TEST_AUTORECONF
383
384 TEST_CONFIGURE
385 AT_CHECK([make -s do_test], [0], [[b.glsym
386 d.glsym
387 ///
388 a.o
389 c.o
390 e.o
391 ]])
392
393 dnl verify rebuild rule insertion
394 sed '/^gnulib_objects/s/b[[.]]o//' Makefile.in >tmp
395 mv -f tmp Makefile.in
396 AT_CHECK([make -s do_test >rebuild.out &&
397   sed '/^config.status:/,$!d' rebuild.out], [0],
398 [[config.status: creating Makefile
399 config.status: executing depfiles commands
400 config.status: executing gnulib-symfiles commands
401 d.glsym
402 ///
403 a.o
404 c.o
405 e.o
406 ]])
407
408 AT_CLEANUP
409
410 AT_SETUP([DX_GNULIB_SYMFILES separate srcdir])
411 AT_KEYWORDS([DX_GNULIB_SYMFILES macro vpath])
412
413 TEST_SYMFILES_INIT
414 AT_DATA([symfiles.lst])
415 TEST_AUTORECONF
416
417 mkdir build && cd build
418 TEST_CONFIGURE([], [../configure])
419 AT_CHECK([make -s do_test], [0], [[
420 ///
421 a.o
422 b.o
423 c.o
424 d.o
425 e.o
426 ]])
427 cd ..
428
429 AT_CLEANUP
430
431 AT_SETUP([DX_GNULIB_SYMFILES shortname])
432 AT_KEYWORDS([DX_GNULIB_SYMFILES macro])
433
434 TEST_SYMFILES_INIT
435
436 sed '/GNULIB_SYMFILES/c\
437 [DX_GNULIB_SYMFILES([symfiles.lst], [x])]' configure.ac >configure.tmp
438 sed '/gnulib_objects/s|$| a/b.o a/b/c.o|' Makefile.am >Makefile.tmp
439 mv -f configure.tmp configure.ac
440 mv -f Makefile.tmp Makefile.am
441
442 AT_DATA([symfiles.lst],
443 [[b.c
444 c.c
445 d.c
446 e.c
447 ]])
448 TEST_AUTORECONF
449
450 TEST_CONFIGURE
451 AT_CHECK([make -s do_test], [0],
452 [[b.glsym
453 c.glsym
454 d.glsym
455 e.glsym
456 ///
457 a/b/x-c.o
458 a/x-b.o
459 x-a.o
460 ]])
461
462 AT_CLEANUP
463
464 AT_SETUP([DX_GNULIB_SYMFILES distribution])
465 AT_KEYWORDS([DX_GNULIB_SYMFILES macro])
466
467 TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
468 DX_GNULIB_SYMFILES([symfiles.lst])
469 AC_CONFIG_FILES([Makefile])
470 ]])
471
472 AT_DATA([symfiles.lst])
473 AT_DATA([Makefile.am],
474 [[foo: ; printf '%s\n' $(top_srcdir) $(DISTFILES)
475 ]])
476 TEST_AUTORECONF
477
478 TEST_CONFIGURE
479 AT_CHECK([make -s foo], [0], [stdout])
480 AT_CHECK([exec 3<stdout
481 read basedir <&3; while read f <&3; do
482   test x"$f" = x"$basedir/symfiles.lst" && exit
483 done
484 exit 1])
485
486 AT_CLEANUP
487
488 AT_SETUP([DX_EXPORTED_SH])
489 AT_KEYWORDS([DX_EXPORTED_SH exported.sh macro])
490
491 AT_DATA([helpopt.nm],
492 [[0000000000000000 r .LC0
493 000000000000001e r .LC1
494 0000000000000025 r .LC2
495                  U __errno_location
496                  U __printf_chk
497                  U __stack_chk_fail
498 0000000000000000 T arg_to_int
499 0000000000000000 b dummy.0
500                  U help_print_optstring
501 0000000000000000 T main
502 00000000000000c0 T print_opt
503                  U strchr
504                  U strerror
505                  U strtol
506                  U tap_bail_out
507 ]])
508
509 AT_DATA([helpopt-shared.lo],
510 [[pic_object=helpopt.nm
511 non_pic_object=none
512 ]])
513
514 AT_DATA([helpopt-static.lo],
515 [[non_pic_object=helpopt.nm
516 pic_object=none
517 ]])
518
519 AT_DATA([helpopt.lo],
520 [[non_pic_object=helpopt.nm
521 pic_object=helpopt.nm
522 ]])
523
524 AT_DATA([expout],
525 [[arg_to_int
526 main
527 print_opt
528 ]])
529
530 TEST_CONFIGURE_AC([[AC_PROVIDE([LT_INIT])
531 AC_SUBST([NM], [cat])
532 lt_cv_sys_global_symbol_pipe="sed -n -e '/ T /p'"
533 DX_EXPORTED_SH
534 ]])
535 TEST_AUTORECONF
536 TEST_CONFIGURE
537
538 AT_CHECK([$SHELL exported.sh helpopt.nm], [0], [expout])
539 AT_CHECK([$SHELL exported.sh helpopt-shared.lo], [0], [expout])
540 AT_CHECK([$SHELL exported.sh helpopt-static.lo], [0], [expout])
541 AT_CHECK([$SHELL exported.sh helpopt.lo], [0], [expout])
542 AT_CHECK([$SHELL exported.sh nonexistent], [1], [], [ignore])
543
544 AT_CLEANUP
545
546 AT_SETUP([DX_W32_GUI])
547
548 AT_DATA([test.in], [[@dx_cv_w32_gui@
549 @dx_cv_w32_gui_flags@
550 ]])
551
552 TEST_CONFIGURE_AC([[DX_W32_GUI
553 AC_SUBST([dx_cv_w32_gui])
554 AC_SUBST([dx_cv_w32_gui_flags])
555 AC_CONFIG_FILES([test])
556 ]])
557 TEST_AUTORECONF
558
559 myconf="cross_compiling=yes --host=none CC=$srcdir/t/ccw32.sh"
560
561 TEST_CONFIGURE([TEST_SUBSYS=2 TEST_GUI_FLAG=-mwindows $myconf])
562 AT_CHECK([cat test], [0], [none needed
563
564 ])
565
566 TEST_CONFIGURE([TEST_SUBSYS=3 TEST_GUI_FLAG=-mwindows $myconf])
567 AT_CHECK([cat test], [0], [-mwindows
568 -mwindows
569 ])
570
571 TEST_CONFIGURE([TEST_SUBSYS=4 TEST_GUI_FLAG=xxx $myconf])
572 AT_CHECK([cat test], [0], [unknown
573
574 ])
575
576 AT_CLEANUP
577
578 AT_SETUP([DX_W32_GUI distribution])
579 AT_KEYWORDS([DX_W32_GUI macro])
580
581 TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
582 DX_W32_GUI
583 AC_CONFIG_FILES([Makefile])
584 ]])
585
586 AT_DATA([Makefile.am],
587 [[foo: ; printf '%s\n' $(DX_BASEDIR) $(DISTFILES)
588 ]])
589 TEST_AUTORECONF
590
591 TEST_CONFIGURE
592 AT_CHECK([make -s foo], [0], [stdout])
593 AT_CHECK([exec 3<stdout
594 read basedir <&3; while read f <&3; do
595   test x"$f" = x"$basedir/scripts/pe-subsys.awk" && exit
596 done
597 exit 1])
598
599 AT_CLEANUP
600
601 # TEST_FIND_AUTOCONF_VER([to-check], [test-action])
602 #
603 # For each whitespace-separated version token in to-check, check if we can
604 # run program autoconf-VER.  The special token 'default' also checks the
605 # unversioned autoconf (or, if set in the environment, $AUTOCONF).
606 #
607 # Then test-action is expanded such that the shell variable $ac refers
608 # to the autoconf program, and $acver is the actual version reported by
609 # $ac --version. The action should do nothing if the version is acceptable,
610 # or "continue" if the version is unacceptable.
611 #
612 # If an acceptable version is found, the AUTOCONF environment variable is
613 # set accordingly.  Otherwise, the test group is skipped.
614 m4_define([TEST_FIND_AUTOCONF],
615 [have_ac=false
616 for ac in $1; do
617   AS_CASE([$ac], [default], [ac=${AUTOCONF-autoconf}], [ac=autoconf-$ac])
618   acver=`$ac --version | sed -n '1s/.* //p'`
619   set x $acver; test x"$[#]" = x"2" || continue
620   $2
621   have_ac=:; break
622 done
623 AT_CHECK([$have_ac || exit 77])
624 AUTOCONF=$ac; export AUTOCONF
625 AT_CHECK([$AUTOCONF --version], [0], [ignore])
626 ])
627
628 m4_define([TEST_DX_C_FOR_DECLARATIONS],
629 [cat "$srcdir/m4/fordecl.m4" >aclocal.m4
630 AT_DATA([config.h.in],
631 [[#undef HAVE_FOR_DECLS
632 ]])
633 TEST_CONFIGURE_AC([m4_ifnblank([$1], [$1])
634 [AC_CONFIG_HEADERS([config.h])
635 DX_C_FOR_DECLARATIONS
636 ]])
637 AT_CHECK([$AUTOCONF], [0], [], [stderr])
638 AT_DATA([test.c],
639 [[#if __STDC_VERSION__ < 199901
640 #error nope
641 char nope[-1];
642 #endif
643 char yup;
644 ]])
645 AT_CHECK([$CC -c -std=gnu99 test.c || exit 77], [0], [ignore], [ignore])
646 TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89"])
647 AT_CHECK([grep HAVE_FOR_DECLS config.h], [0],
648 [[/* #undef HAVE_FOR_DECLS */
649 ]])
650 TEST_CONFIGURE([CC="$CC -std=gnu99"])
651 AT_CHECK([grep HAVE_FOR_DECLS config.h], [0],
652 [[#define HAVE_FOR_DECLS 1
653 ]])])
654
655 AT_SETUP([DX_C_FOR_DECLARATIONS (<autoconf-2.70)])
656 AT_KEYWORDS([DX_C_FOR_DECLARATIONS macro])
657 TEST_FIND_AUTOCONF([default 2.69 2.68],
658   [AS_VERSION_COMPARE(["$acver"], [2.70], [], [continue], [continue])])
659 TEST_DX_C_FOR_DECLARATIONS([[AC_PROG_CC]])
660 TEST_DX_C_FOR_DECLARATIONS([[AC_PROG_CC_C99]])
661 AT_CLEANUP
662
663 AT_SETUP([DX_C_FOR_DECLARATIONS (=autoconf-2.70)])
664 AT_KEYWORDS([DX_C_FOR_DECLARATIONS macro])
665 TEST_FIND_AUTOCONF([default 2.70],
666   [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [], [continue])])
667 TEST_DX_C_FOR_DECLARATIONS
668 AT_CLEANUP
669
670 AT_SETUP([DX_C_FOR_DECLARATIONS (>autoconf-2.70)])
671 AT_KEYWORDS([DX_C_FOR_DECLARATIONS macro])
672 TEST_FIND_AUTOCONF([default 2.71 2.72 2.73 2.74],
673   [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [continue], [])])
674 TEST_DX_C_FOR_DECLARATIONS
675 AT_CLEANUP
676
677 m4_define([TEST_DX_C_ALIGNOF],
678 [cat "$srcdir/m4/align.m4" >aclocal.m4
679 AT_DATA([config.h.in],
680 [[#undef _Alignof
681 #undef _Alignas
682 ]])
683 TEST_CONFIGURE_AC([m4_ifnblank([$1], [$1])
684 [AC_CONFIG_HEADERS([config.h])
685 DX_C_ALIGNOF
686 ]])
687 AT_CHECK([$AUTOCONF], [0], [], [stderr])
688 AT_DATA([test.c],
689 [[#if __STDC_VERSION__ < 201112
690 #error nope
691 char nope[-1];
692 #endif
693 char yup;
694 ]])
695 AT_CHECK([$CC -c -std=gnu11 -pedantic-errors test.c || exit 77],
696   [0], [ignore], [ignore])
697 TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89 -pedantic-errors"])
698 AT_CHECK([grep _Align config.h], [0],
699 [[#define _Alignof(T) offsetof(struct { char a; T b; }, b)
700 /* #undef _Alignas */
701 ]])
702 TEST_CONFIGURE([CC="$CC -std=gnu11"])
703 AT_CHECK([grep _Align config.h], [0],
704 [[/* #undef _Alignof */
705 /* #undef _Alignas */
706 ]])])
707
708 AT_SETUP([DX_C_ALIGNOF (<autoconf-2.70)])
709 AT_KEYWORDS([DX_C_ALIGNOF macro])
710 TEST_FIND_AUTOCONF([default 2.69 2.68],
711   [AS_VERSION_COMPARE(["$acver"], [2.70], [], [continue], [continue])])
712 TEST_DX_C_FOR_DECLARATIONS([[AC_PROG_CC]])
713 AT_CLEANUP
714
715 AT_SETUP([DX_C_ALIGNOF (=autoconf-2.70)])
716 AT_KEYWORDS([DX_C_ALIGNOF macro])
717 TEST_FIND_AUTOCONF([default 2.70],
718   [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [], [continue])])
719 TEST_DX_C_ALIGNOF
720 AT_CLEANUP
721
722 AT_SETUP([DX_C_ALIGNOF (>autoconf-2.70)])
723 AT_KEYWORDS([DX_C_ALIGNOF macro])
724 TEST_FIND_AUTOCONF([default 2.71 2.72 2.73 2.74],
725   [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [continue], [])])
726 TEST_DX_C_ALIGNOF([[AC_PROG_CC]])
727 AT_CLEANUP
728
729 m4_define([TEST_DX_C_ALIGNAS],
730 [cat "$srcdir/m4/align.m4" >aclocal.m4
731 AT_DATA([config.h.in],
732 [[#undef _Alignas
733 #undef _Alignof
734 ]])
735 TEST_CONFIGURE_AC([m4_ifnblank([$1], [$1])
736 [AC_CONFIG_HEADERS([config.h])
737 AC_COMPUTE_INT([dummy], [0], [@&t@], [dummy=0]) # ensure main CC probes finish
738 AC_ARG_ENABLE([break-cc], [], [CC=false]) # before we force everything to fail
739 DX_C_ALIGNAS
740 ]])
741 AT_CHECK([$AUTOCONF], [0], [], [stderr])
742 AT_DATA([test.c],
743 [[#if __STDC_VERSION__ < 201112
744 #error nope
745 char nope[-1];
746 #endif
747 char yup;
748 ]])
749 AT_CHECK([$CC -c -std=gnu11 -pedantic-errors test.c || exit 77],
750   [0], [ignore], [ignore])
751 TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89 -pedantic-errors"])
752 AT_CHECK([grep _Align config.h], [0],
753 [[#define _Alignas(X) __attribute__((__aligned__(X)))
754 /* #undef _Alignof */
755 ]])
756 TEST_CONFIGURE([CC="$CC -std=gnu11"])
757 AT_CHECK([grep _Align config.h], [0],
758 [[/* #undef _Alignas */
759 /* #undef _Alignof */
760 ]])
761 TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89 -pedantic-errors" --enable-break-cc])
762 AT_CHECK([grep _Align config.h], [0],
763 [[#define _Alignas(X) /**/
764 /* #undef _Alignof */
765 ]])])
766
767 AT_SETUP([DX_C_ALIGNAS (<autoconf-2.70)])
768 AT_KEYWORDS([DX_C_ALIGNAS macro])
769 TEST_FIND_AUTOCONF([default 2.69 2.68],
770   [AS_VERSION_COMPARE(["$acver"], [2.70], [], [continue], [continue])])
771 TEST_DX_C_ALIGNAS([[AC_PROG_CC]])
772 AT_CLEANUP
773
774 AT_SETUP([DX_C_ALIGNAS (=autoconf-2.70)])
775 AT_KEYWORDS([DX_C_ALIGNAS macro])
776 TEST_FIND_AUTOCONF([default 2.70],
777   [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [], [continue])])
778 TEST_DX_C_ALIGNAS
779 AT_CLEANUP
780
781 AT_SETUP([DX_C_ALIGNAS (>autoconf-2.70)])
782 AT_KEYWORDS([DX_C_ALIGNAS macro])
783 TEST_FIND_AUTOCONF([default 2.71 2.72 2.73 2.74],
784   [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [continue], [])])
785 TEST_DX_C_ALIGNAS([[AC_PROG_CC]])
786 AT_CLEANUP