1 dnl Copyright © 2014-2015, 2018-2019, 2021-2022 Nick Bowler
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.
7 AT_BANNER([Autoconf macros])
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])
19 [[AC_SUBST([TEST], 'm4@&t@_dquote(DX_BASEDIR)')
20 AC_CONFIG_FILES([test])
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])
31 dnl Verify that DX_BASEDIR is correctly AC_SUBSTed
32 AT_SETUP([DX_BASEDIR output substitution])
33 AT_KEYWORDS([DX_BASEDIR macro])
41 AC_CONFIG_FILES([test])
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])
52 dnl Verify that DX_BASEDIR is set correctly implicitly
53 AT_SETUP([DX_BASEDIR implicit definition])
54 AT_KEYWORDS([DX_BASEDIR macro])
62 AC_CONFIG_FILES([test])
69 AT_SETUP([DX_COMMAND_OUTPUT])
70 AT_KEYWORDS([DX_COMMAND_OUTPUT macro])
74 trailing whitespace @&t@
82 [[DX_COMMAND_OUTPUT([var], [cat expout])
83 AS@&t@_ECHO(["$var"]) >test.out
88 AT_CHECK([cat test.out], [0], [expout])
92 AT_SETUP([DX_DO quoting])
93 AT_KEYWORDS([DX_DO macro])
96 [[m4@&t@_define([FOO])
97 :; { DX_DO([AS@&t@_ECHO_N(["[FOO]"])],
98 [AS@&t@_ECHO_N(["[FOO]"])],
99 [AS@&t@_ECHO(["[FOO]"])])
103 dnl TEST_CONFIGURE_AC(
104 dnl [[DX_DO([AS@&t@_ECHO_N([hello,world])],[AS@&t@_ECHO_N([goodbye,world])])
108 AT_CHECK([cat test.out], [0], [[FOOFOOFOO
113 AT_SETUP([DX_LINGUAS unused country variants])
114 AT_KEYWORDS([DX_LINGUAS macro])
117 chmod +x config.rpath
120 AT_DATA([po/LINGUAS], [[en
123 AT_DATA([test.in], [[POFILES = @POFILES@
128 [[m4@&t@_traceoff([AM_GNU_GETTEXT])
129 AM_GNU_GETTEXT([external])
131 AC_CONFIG_FILES([test])
135 LINGUAS='en_CA en'; export LINGUAS; TEST_CONFIGURE
137 AT_CHECK([cat test], [0], [[POFILES = po/en.po
143 AT_SETUP([DX_LINGUAS default install all])
144 AT_KEYWORDS([DX_LINGUAS macro])
147 AT_SKIP_IF([test ${LINGUAS+y}])
150 chmod +x config.rpath
153 AT_DATA([po/LINGUAS], [[en ja # a comment ko
157 AT_DATA([test.in], [[POFILES = @POFILES@
162 [[m4@&t@_traceoff([AM_GNU_GETTEXT])
163 AM_GNU_GETTEXT([external])
165 AC_CONFIG_FILES([test])
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
178 AT_SETUP([DX_LINGUAS selections])
179 AT_KEYWORDS([DX_LINGUAS macro])
182 chmod +x config.rpath
185 AT_DATA([po/LINGUAS], [[en ja # a comment ko
189 AT_DATA([test.in], [[POFILES = @POFILES@
194 [[m4@&t@_traceoff([AM_GNU_GETTEXT])
195 AM_GNU_GETTEXT([external])
197 AC_CONFIG_FILES([test])
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
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
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
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
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
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
239 AT_SETUP([DX_LINGUAS with broken "join" utility])
240 AT_KEYWORDS([DX_LINGUAS macro])
243 chmod +x config.rpath
253 AT_DATA([po/LINGUAS], [[en ja # a comment ko
257 AT_DATA([test.in], [[POFILES = @POFILES@
262 [[m4@&t@_traceoff([AM_GNU_GETTEXT])
263 AM_GNU_GETTEXT([external])
265 AC_CONFIG_FILES([test])
270 PATH=`pwd`/bin${PATH:+":$PATH"}
271 LINGUAS='en_US'; export LINGUAS; TEST_CONFIGURE
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
278 LINGUAS='en_US'; export LINGUAS; TEST_CONFIGURE([JOIN=false])
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
289 AT_SETUP([DX_BASENAME])
290 AT_KEYWORDS([DX_BASENAME macro])
292 AT_DATA([test.in], [[@base0@
299 [[DX_BASENAME([base0], ["hello"])
300 DX_BASENAME([base1], ["foo/bar"])
301 DX_BASENAME([base2], ["/foo/bar/baz"])
302 DX_BASENAME([base3], ["hello world"])
307 AC_CONFIG_FILES([test])
312 AT_CHECK([cat test], [0], [hello
320 AT_SETUP([DX_PROG_JOIN distribution])
321 AT_KEYWORDS([DX_PROG_JOIN macro])
323 TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
325 AC_CONFIG_FILES([Makefile])
328 AT_DATA([Makefile.am],
329 [[foo: ; printf '%s\n' $(DX_BASEDIR) $(DISTFILES)
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
343 m4_define([TEST_SYMFILES_INIT],
344 [TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
346 AC_SUBST([GLSRC], [.])
348 DX_GNULIB_SYMFILES([symfiles.lst])
349 AC_CONFIG_FILES([Makefile])
352 cp "$srcdir/snippet/glconfig.mk" .
353 AT_DATA([Makefile.am],
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
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)
367 printf '%s\n' $(gnulib_symfiles) | LC_ALL=C sort; \
368 echo ///; printf '%s\n' $(gnulib_extra_objects) | LC_ALL=C sort
371 include $(top_srcdir)/glconfig.mk
374 AT_SETUP([DX_GNULIB_SYMFILES])
375 AT_KEYWORDS([DX_GNULIB_SYMFILES macro])
378 AT_DATA([symfiles.lst],
385 AT_CHECK([make -s do_test], [0], [[b.glsym
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
410 AT_SETUP([DX_GNULIB_SYMFILES separate srcdir])
411 AT_KEYWORDS([DX_GNULIB_SYMFILES macro vpath])
414 AT_DATA([symfiles.lst])
417 mkdir build && cd build
418 TEST_CONFIGURE([], [../configure])
419 AT_CHECK([make -s do_test], [0], [[
431 AT_SETUP([DX_GNULIB_SYMFILES shortname])
432 AT_KEYWORDS([DX_GNULIB_SYMFILES macro])
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
442 AT_DATA([symfiles.lst],
451 AT_CHECK([make -s do_test], [0],
464 AT_SETUP([DX_GNULIB_SYMFILES distribution])
465 AT_KEYWORDS([DX_GNULIB_SYMFILES macro])
467 TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
468 DX_GNULIB_SYMFILES([symfiles.lst])
469 AC_CONFIG_FILES([Makefile])
472 AT_DATA([symfiles.lst])
473 AT_DATA([Makefile.am],
474 [[foo: ; printf '%s\n' $(top_srcdir) $(DISTFILES)
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
488 AT_SETUP([DX_EXPORTED_SH])
489 AT_KEYWORDS([DX_EXPORTED_SH exported.sh macro])
491 AT_DATA([helpopt.nm],
492 [[0000000000000000 r .LC0
493 000000000000001e r .LC1
494 0000000000000025 r .LC2
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
509 AT_DATA([helpopt-shared.lo],
510 [[pic_object=helpopt.nm
514 AT_DATA([helpopt-static.lo],
515 [[non_pic_object=helpopt.nm
519 AT_DATA([helpopt.lo],
520 [[non_pic_object=helpopt.nm
521 pic_object=helpopt.nm
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'"
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])
546 AT_SETUP([DX_W32_GUI])
548 AT_DATA([test.in], [[@dx_cv_w32_gui@
549 @dx_cv_w32_gui_flags@
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])
559 myconf="cross_compiling=yes --host=none CC=$srcdir/t/ccw32.sh"
561 TEST_CONFIGURE([TEST_SUBSYS=2 TEST_GUI_FLAG=-mwindows $myconf])
562 AT_CHECK([cat test], [0], [none needed
566 TEST_CONFIGURE([TEST_SUBSYS=3 TEST_GUI_FLAG=-mwindows $myconf])
567 AT_CHECK([cat test], [0], [-mwindows
571 TEST_CONFIGURE([TEST_SUBSYS=4 TEST_GUI_FLAG=xxx $myconf])
572 AT_CHECK([cat test], [0], [unknown
578 AT_SETUP([DX_W32_GUI distribution])
579 AT_KEYWORDS([DX_W32_GUI macro])
581 TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
583 AC_CONFIG_FILES([Makefile])
586 AT_DATA([Makefile.am],
587 [[foo: ; printf '%s\n' $(DX_BASEDIR) $(DISTFILES)
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