X-Git-Url: http://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/2d17f059aa8a1e4670b9dad3f24556c7d97f6d45..14c0c9a9e5eeacc82904f4cc33e0842f5ee9ec44:/tests/macros.at?ds=sidebyside diff --git a/tests/macros.at b/tests/macros.at index 9986d75..6da14b3 100644 --- a/tests/macros.at +++ b/tests/macros.at @@ -1,4 +1,4 @@ -dnl Copyright © 2015 Nick Bowler +dnl Copyright © 2014-2015, 2018-2019, 2021-2024 Nick Bowler dnl dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2. dnl This is free software: you are free to do what the fuck you want to. @@ -6,34 +6,17 @@ dnl There is NO WARRANTY, to the extent permitted by law. AT_BANNER([Autoconf macros]) -m4_define([TEST_CONFIGURE_AC], [AT_DATA([configure.ac], -[[AC_INIT([test], [0]) -]$1[ -AC_OUTPUT -]]) -cp "$srcdir/install-sh" \ - "$srcdir/config.guess" \ - "$srcdir/config.sub" \ - . -]) - -m4_define([TEST_AUTORECONF], - [AT_CHECK([autoreconf -I "$srcdir/m4"], [0], [], [stderr])]) - -m4_define([TEST_CONFIGURE], [AT_CHECK([./configure $1], [0], [ignore])]) - dnl Verify that the DX_BASEDIR macro expands correctly during argument dnl collection. Crucially, the output must not contain any other text. AT_SETUP([DX_BASEDIR during argument collection]) - -AT_XFAIL_IF([:]) +AT_KEYWORDS([DX_BASEDIR macro]) AT_DATA([test.in], [[@TEST@ ]]) TEST_CONFIGURE_AC( -[[AC@&t@_SUBST([TEST], 'm4@&t@_dquote(DX_BASEDIR)') +[[AC_SUBST([TEST], 'm4@&t@_dquote(DX_BASEDIR)') AC_CONFIG_FILES([test]) ]]) TEST_AUTORECONF @@ -44,3 +27,760 @@ printf '%s\n' "$srcdir" | sed -e 's:/\./:/:g' -e 's:/\.$::g' \ AT_CHECK([cat test], [0], [expout]) AT_CLEANUP + +dnl Verify that DX_BASEDIR is correctly AC_SUBSTed +AT_SETUP([DX_BASEDIR output substitution]) +AT_KEYWORDS([DX_BASEDIR macro]) + +AT_DATA([test.in], +[[@DX_BASEDIR@ +]]) + +TEST_CONFIGURE_AC( +[[DX_INIT +AC_CONFIG_FILES([test]) +]]) +TEST_AUTORECONF +TEST_CONFIGURE + +printf '${top_srcdir}/%s\n' "$srcdir" | sed -e 's:/\./:/:g' -e 's:/\.$::g' \ + -e 's:\(.\)//*:\1/:g' >expout +AT_CHECK([cat test], [0], [expout]) + +AT_CLEANUP + +dnl Verify that DX_BASEDIR is set correctly implicitly +AT_SETUP([DX_BASEDIR implicit definition]) +AT_KEYWORDS([DX_BASEDIR macro]) + +AT_DATA([test.in], +[[@DX_BASEDIR@ +]]) + +TEST_CONFIGURE_AC( +[[DX_EXPORTED_SH +AC_CONFIG_FILES([test]) +]]) +TEST_AUTORECONF +TEST_CONFIGURE + +AT_CLEANUP + +AT_SETUP([DX_COMMAND_OUTPUT]) +AT_KEYWORDS([DX_COMMAND_OUTPUT macro]) + +AT_DATA([expout], +[[ leading whitespace +trailing whitespace @&t@ +embedded\ backslashes + @&t@ +backslash\ +newline +]]) + +TEST_CONFIGURE_AC( +[[DX_COMMAND_OUTPUT([var], [cat expout]) +AS@&t@_ECHO(["$var"]) >test.out +]]) +TEST_AUTORECONF +TEST_CONFIGURE + +AT_CHECK([cat test.out], [0], [expout]) + +AT_CLEANUP + +AT_SETUP([DX_DO quoting]) +AT_KEYWORDS([DX_DO macro]) + +TEST_CONFIGURE_AC( +[[m4@&t@_define([FOO]) +:; { DX_DO([AS@&t@_ECHO_N(["[FOO]"])], + [AS@&t@_ECHO_N(["[FOO]"])], + [AS@&t@_ECHO(["[FOO]"])]) +} >test.out +]]) + +dnl TEST_CONFIGURE_AC( +dnl [[DX_DO([AS@&t@_ECHO_N([hello,world])],[AS@&t@_ECHO_N([goodbye,world])]) +dnl ]]) +TEST_AUTORECONF +TEST_CONFIGURE +AT_CHECK([cat test.out], [0], [[FOOFOOFOO +]]) + +AT_CLEANUP + +AT_SETUP([DX_LINGUAS unused country variants]) +AT_KEYWORDS([DX_LINGUAS macro]) + +echo : >config.rpath +chmod +x config.rpath + +mkdir po +AT_DATA([po/LINGUAS], [[en +]]) + +AT_DATA([test.in], [[POFILES = @POFILES@ +MOFILES = @MOFILES@ +]]) + +TEST_CONFIGURE_AC( +[[m4@&t@_traceoff([AM_GNU_GETTEXT]) +AM_GNU_GETTEXT([external]) +DX_LINGUAS +AC_CONFIG_FILES([test]) +]]) + +TEST_AUTORECONF +LINGUAS='en_CA en'; export LINGUAS; TEST_CONFIGURE + +AT_CHECK([cat test], [0], [[POFILES = po/en.po +MOFILES = po/en.mo +]]) + +AT_CLEANUP + +AT_SETUP([DX_LINGUAS default install all]) +AT_KEYWORDS([DX_LINGUAS macro]) + +AS_UNSET([LINGUAS]) +AT_SKIP_IF([test ${LINGUAS+y}]) + +echo : >config.rpath +chmod +x config.rpath + +mkdir po +AT_DATA([po/LINGUAS], [[en ja # a comment ko +zh +]]) + +AT_DATA([test.in], [[POFILES = @POFILES@ +MOFILES = @MOFILES@ +]]) + +TEST_CONFIGURE_AC( +[[m4@&t@_traceoff([AM_GNU_GETTEXT]) +AM_GNU_GETTEXT([external]) +DX_LINGUAS +AC_CONFIG_FILES([test]) +]]) + +TEST_AUTORECONF +TEST_CONFIGURE + +AT_CHECK([cat test], [0], +[[POFILES = po/en.po po/ja.po po/zh.po +MOFILES = po/en.mo po/ja.mo po/zh.mo +]]) + +AT_CLEANUP + +AT_SETUP([DX_LINGUAS selections]) +AT_KEYWORDS([DX_LINGUAS macro]) + +echo : >config.rpath +chmod +x config.rpath + +mkdir po +AT_DATA([po/LINGUAS], [[en ja # a comment ko +zh en_US +]]) + +AT_DATA([test.in], [[POFILES = @POFILES@ +MOFILES = @MOFILES@ +]]) + +TEST_CONFIGURE_AC( +[[m4@&t@_traceoff([AM_GNU_GETTEXT]) +AM_GNU_GETTEXT([external]) +DX_LINGUAS +AC_CONFIG_FILES([test]) +]]) +TEST_AUTORECONF + +LINGUAS='en'; export LINGUAS; TEST_CONFIGURE +AT_CHECK([cat test], [0], +[[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po +MOFILES = po/en.mo +]]) + +LINGUAS='en_US'; export LINGUAS; TEST_CONFIGURE +AT_CHECK([cat test], [0], +[[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po +MOFILES = po/en.mo po/en_US.mo +]]) + +LINGUAS='en_CA'; export LINGUAS; TEST_CONFIGURE +AT_CHECK([cat test], [0], +[[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po +MOFILES = po/en.mo +]]) + +LINGUAS='ja ko'; export LINGUAS; TEST_CONFIGURE +AT_CHECK([cat test], [0], +[[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po +MOFILES = po/ja.mo +]]) + +LINGUAS='ja_JP ko_KR'; export LINGUAS; TEST_CONFIGURE +AT_CHECK([cat test], [0], +[[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po +MOFILES = po/ja.mo +]]) + +LINGUAS=''; export LINGUAS; TEST_CONFIGURE +AT_CHECK([cat test], [0], +[[POFILES = po/en.po po/en_US.po po/ja.po po/zh.po +MOFILES = @&t@ +]]) + +AT_CLEANUP + +AT_SETUP([DX_LINGUAS with broken "join" utility]) +AT_KEYWORDS([DX_LINGUAS macro]) + +echo : >config.rpath +chmod +x config.rpath + +mkdir bin +cat >bin/join <tmp +mv -f tmp Makefile.in +AT_CHECK([make -s do_test >rebuild.out && + sed '/^config.status:/,$!d' rebuild.out], [0], +[[config.status: creating Makefile +config.status: executing depfiles commands +config.status: executing gnulib-symfiles commands +d.glsym +/// +a.o +c.o +e.o +]]) + +AT_CLEANUP + +AT_SETUP([DX_GNULIB_SYMFILES separate srcdir]) +AT_KEYWORDS([DX_GNULIB_SYMFILES macro vpath]) + +TEST_SYMFILES_INIT +AT_DATA([symfiles.lst]) +TEST_AUTORECONF + +mkdir build && cd build +TEST_CONFIGURE([], [../configure]) +AT_CHECK([make -s do_test], [0], [[ +/// +a.o +b.o +c.o +d.o +e.o +]]) +cd .. + +AT_CLEANUP + +AT_SETUP([DX_GNULIB_SYMFILES shortname]) +AT_KEYWORDS([DX_GNULIB_SYMFILES macro]) + +TEST_SYMFILES_INIT + +sed '/GNULIB_SYMFILES/c\ +[DX_GNULIB_SYMFILES([symfiles.lst], [x])]' configure.ac >configure.tmp +sed '/gnulib_objects/s|$| a/b.o a/b/c.o|' Makefile.am >Makefile.tmp +mv -f configure.tmp configure.ac +mv -f Makefile.tmp Makefile.am + +AT_DATA([symfiles.lst], +[[b.c +c.c +d.c +e.c +]]) +TEST_AUTORECONF + +TEST_CONFIGURE +AT_CHECK([make -s do_test], [0], +[[b.glsym +c.glsym +d.glsym +e.glsym +/// +a/b/x-c.o +a/x-b.o +x-a.o +]]) + +AT_CLEANUP + +AT_SETUP([DX_GNULIB_SYMFILES distribution]) +AT_KEYWORDS([DX_GNULIB_SYMFILES macro]) + +TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign]) +DX_GNULIB_SYMFILES([symfiles.lst]) +AC_CONFIG_FILES([Makefile]) +]]) + +AT_DATA([symfiles.lst]) +AT_DATA([Makefile.am], +[[foo: ; printf '%s\n' $(top_srcdir) $(DISTFILES) +]]) +TEST_AUTORECONF + +TEST_CONFIGURE +AT_CHECK([make -s foo], [0], [stdout]) +AT_CHECK([exec 3aclocal.m4 +AT_DATA([config.h.in], +[[#undef HAVE_FOR_DECLS +]]) +TEST_CONFIGURE_AC([m4_ifnblank([$1], [$1]) +[AC_CONFIG_HEADERS([config.h]) +DX_C_FOR_DECLARATIONS +]]) +AT_CHECK([$AUTOCONF], [0], [], [stderr]) +AT_DATA([test.c], +[[#if __STDC_VERSION__ < 199901 +#error nope +char nope[-1]; +#endif +char yup; +]]) +AT_CHECK([$CC -c -std=gnu99 test.c || exit 77], [0], [ignore], [ignore]) +TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89"]) +AT_CHECK([grep HAVE_FOR_DECLS config.h], [0], +[[/* #undef HAVE_FOR_DECLS */ +]]) +TEST_CONFIGURE([CC="$CC -std=gnu99"]) +AT_CHECK([grep HAVE_FOR_DECLS config.h], [0], +[[#define HAVE_FOR_DECLS 1 +]])]) + +AT_SETUP([DX_C_FOR_DECLARATIONS (autoconf-2.70)]) +AT_KEYWORDS([DX_C_FOR_DECLARATIONS macro]) +TEST_FIND_AUTOCONF([default 2.71 2.72 2.73 2.74], + [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [continue], [])]) +TEST_DX_C_FOR_DECLARATIONS +AT_CLEANUP + +m4_define([TEST_DX_C_ALIGNOF], +[cat "$srcdir/m4/align.m4" >aclocal.m4 +AT_DATA([config.h.in], +[[#undef _Alignof +#undef _Alignas +]]) +TEST_CONFIGURE_AC([m4_ifnblank([$1], [$1]) +[AC_CONFIG_HEADERS([config.h]) +DX_C_ALIGNOF +]]) +AT_CHECK([$AUTOCONF], [0], [], [stderr]) +AT_DATA([test.c], +[[#if __STDC_VERSION__ < 201112 +#error nope +char nope[-1]; +#endif +char yup; +]]) +AT_CHECK([$CC -c -std=gnu11 -pedantic-errors test.c || exit 77], + [0], [ignore], [ignore]) +TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89 -pedantic-errors"]) +AT_CHECK([grep _Align config.h], [0], +[[#define _Alignof(T) offsetof(struct { char a; T b; }, b) +/* #undef _Alignas */ +]]) +TEST_CONFIGURE([CC="$CC -std=gnu11"]) +AT_CHECK([grep _Align config.h], [0], +[[/* #undef _Alignof */ +/* #undef _Alignas */ +]])]) + +AT_SETUP([DX_C_ALIGNOF (autoconf-2.70)]) +AT_KEYWORDS([DX_C_ALIGNOF macro]) +TEST_FIND_AUTOCONF([default 2.71 2.72 2.73 2.74], + [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [continue], [])]) +TEST_DX_C_ALIGNOF([[AC_PROG_CC]]) +AT_CLEANUP + +m4_define([TEST_DX_C_ALIGNAS], +[cat "$srcdir/m4/align.m4" >aclocal.m4 +AT_DATA([config.h.in], +[[#undef _Alignas +#undef _Alignof +]]) +TEST_CONFIGURE_AC([m4_ifnblank([$1], [$1]) +[AC_CONFIG_HEADERS([config.h]) +AC_COMPUTE_INT([dummy], [0], [@&t@], [dummy=0]) # ensure main CC probes finish +AC_ARG_ENABLE([break-cc], [], [CC=false]) # before we force everything to fail +DX_C_ALIGNAS +]]) +AT_CHECK([$AUTOCONF], [0], [], [stderr]) +AT_DATA([test.c], +[[#if __STDC_VERSION__ < 201112 +#error nope +char nope[-1]; +#endif +char yup; +]]) +AT_CHECK([$CC -c -std=gnu11 -pedantic-errors test.c || exit 77], + [0], [ignore], [ignore]) +TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89 -pedantic-errors"]) +AT_CHECK([grep _Align config.h], [0], +[[#define _Alignas(X) __attribute__((__aligned__(X))) +/* #undef _Alignof */ +]]) +TEST_CONFIGURE([CC="$CC -std=gnu11"]) +AT_CHECK([grep _Align config.h], [0], +[[/* #undef _Alignas */ +/* #undef _Alignof */ +]]) +TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89 -pedantic-errors" --enable-break-cc]) +AT_CHECK([grep _Align config.h], [0], +[[#define _Alignas(X) /**/ +/* #undef _Alignof */ +]])]) + +AT_SETUP([DX_C_ALIGNAS (autoconf-2.70)]) +AT_KEYWORDS([DX_C_ALIGNAS macro]) +TEST_FIND_AUTOCONF([default 2.71 2.72 2.73 2.74], + [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [continue], [])]) +TEST_DX_C_ALIGNAS([[AC_PROG_CC]]) +AT_CLEANUP