]> git.draconx.ca Git - dxcommon.git/blobdiff - tests/macros.at
fix-gnulib: Reduce build-time impact of symbol renaming.
[dxcommon.git] / tests / macros.at
index f3ada4563f5230decf9b9ee6e93c211076e229ce..5202790440548a9ce93650478e7e95ef51ca74c2 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright © 2014-2015, 2018 Nick Bowler
+dnl Copyright © 2014-2015, 2018-2019, 2021-2022 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,22 +6,6 @@ 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])
@@ -59,8 +43,8 @@ AC_CONFIG_FILES([test])
 TEST_AUTORECONF
 TEST_CONFIGURE
 
-printf '%s\n' "$srcdir" | sed -e 's:/\./:/:g' -e 's:/\.$::g' \
-                              -e 's:\(.\)//*:\1/:g' >expout
+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
@@ -125,3 +109,323 @@ 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 <<EOF
+#!/bin/sh
+:
+EOF
+chmod +x bin/join
+
+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
+
+save_PATH=$PATH
+PATH=`pwd`/bin${PATH:+":$PATH"}
+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_US'; export LINGUAS; TEST_CONFIGURE([JOIN=false])
+
+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
+]])
+
+PATH=$save_PATH
+
+AT_CLEANUP
+
+AT_SETUP([DX_BASENAME])
+AT_KEYWORDS([DX_BASENAME macro])
+
+AT_DATA([test.in], [[@base0@
+@base1@
+@base2@
+@base3@
+]])
+
+TEST_CONFIGURE_AC(
+[[DX_BASENAME([base0], ["hello"])
+DX_BASENAME([base1], ["foo/bar"])
+DX_BASENAME([base2], ["/foo/bar/baz"])
+DX_BASENAME([base3], ["hello world"])
+AC_SUBST([base0])
+AC_SUBST([base1])
+AC_SUBST([base2])
+AC_SUBST([base3])
+AC_CONFIG_FILES([test])
+]])
+TEST_AUTORECONF
+
+TEST_CONFIGURE
+AT_CHECK([cat test], [0], [hello
+bar
+baz
+hello world
+])
+
+AT_CLEANUP
+
+AT_SETUP([DX_PROG_JOIN distribution])
+AT_KEYWORDS([DX_PROG_JOIN macro])
+
+TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
+DX_PROG_JOIN
+AC_CONFIG_FILES([Makefile])
+]])
+
+AT_DATA([Makefile.am],
+[[foo: ; printf '%s\n' $(DX_BASEDIR) $(DISTFILES)
+]])
+TEST_AUTORECONF
+
+TEST_CONFIGURE
+AT_CHECK([make -s foo], [0], [stdout])
+AT_CHECK([exec 3<stdout
+read basedir <&3; while read f <&3; do
+  test x"$f" = x"$basedir/scripts/join.awk" && exit
+done
+exit 1])
+
+AT_CLEANUP
+
+AT_SETUP([DX_GNULIB_SYMFILES])
+AT_KEYWORDS([DX_GNULIB_SYMFILES macro])
+
+echo : >compile
+TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign])
+AM_PROG_CC_C_O
+AC_SUBST([GLSRC], [.])
+DX_AUTOMAKE_COMPAT
+DX_GNULIB_SYMFILES([symfiles.lst])
+AC_CONFIG_FILES([Makefile])
+]])
+
+AT_DATA([symfiles.lst],
+[[b.foo
+d.bar
+]])
+
+cp "$srcdir/snippet/glconfig.mk" .
+AT_DATA([Makefile.am],
+[[CLEANFILES =
+DISTCLEANFILES =
+
+# automake won't emit this without sources but we expect it to be set
+am__depfiles_maybe = depfiles
+am__maybe_remake_depfiles = depfiles
+
+gnulib_headers =
+gnulib_objects = a.o c.o b.o e.o d.o
+gnulib_all_symfiles = $(gnulib_objects:.o=.glsym)
+gnulib_symfiles = $(gnulib_all_symfiles)
+
+do_test:
+       printf '%s\n' $(gnulib_symfiles) | LC_ALL=C sort; \
+         echo ///; printf '%s\n' $(gnulib_extra_objects) | LC_ALL=C sort
+.PHONY: do_test
+
+include $(top_srcdir)/glconfig.mk
+]])
+TEST_AUTORECONF
+
+TEST_CONFIGURE
+AT_CHECK([make -s do_test], [0], [[b.glsym
+d.glsym
+///
+a.o
+c.o
+e.o
+]])
+
+dnl verify rebuild rule insertion
+sed '/^gnulib_objects/s/b[[.]]o//' Makefile.in >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 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 3<stdout
+read basedir <&3; while read f <&3; do
+  test x"$f" = x"$basedir/symfiles.lst" && exit
+done
+exit 1])
+
+AT_CLEANUP