+
+# Test the gen-tree features that avoid creating string labels for nodes.
+AT_SETUP([gen-tree.awk @nostrtab option])
+AT_KEYWORDS([gen-tree awk script scripts])
+
+AT_DATA([tree.def],
+[[@nostrtab
+ROOT
+ a 1, a_OFFSET
+ b 1
+ c 2
+ d 2, d_OFFSET
+ e 1
+ f 2
+]])
+AT_CHECK([$AWK -f "$srcdir/scripts/gen-tree.awk" <tree.def >tree.h])
+
+AT_DATA([test0.c],
+[[float tree_strtab = 0;
+#define a []
+#define b []
+#define c []
+#define e []
+#define f []
+#include "tree.h"
+#include <stdio.h>
+
+static struct { int num, offset; } root[] = { ROOT_INITIALIZER };
+
+int main(void)
+{
+ unsigned i;
+ for (i = 0; i < sizeof root / sizeof root[0]; i++) {
+ printf("%d, %d\n", root[i].num, root[i].offset);
+ }
+ return 0;
+}
+]])
+
+AT_CHECK([$CC -o test0$EXEEXT test0.c && ./test0$EXEEXT], [0],
+[[1, 3
+2, 6
+0, 0
+1, 0
+2, 0
+0, 0
+1, 0
+2, 0
+0, 0
+]])
+
+AT_DATA([flat.def],
+[[FLAT
+ a 1
+ b 2
+ c 3
+@nostrtab
+]])
+AT_CHECK([$AWK -f "$srcdir/scripts/gen-tree.awk" <flat.def >flat.h])
+
+sed -e 's/tree\.h/flat.h/' -e 's/ROOT/FLAT/' test0.c >test1.c
+AT_CHECK([$CC -o test1$EXEEXT test1.c && ./test1$EXEEXT], [0],
+[[1, 0
+2, 0
+3, 0
+0, 0
+]])
+
+AT_CLEANUP
+
+AT_SETUP([join.awk])
+AT_KEYWORDS([join awk script scripts])
+
+JOIN="$AWK -f $srcdir/scripts/join.awk --"
+
+AT_DATA([a],
+[[1 a
+3 a1 x
+3 a2 x
+5 a
+6 a
+8 a1 x
+8 a2 x
+9 a1
+9 a2
+9 a3
+]])
+
+AT_DATA([b],
+[[2 b
+2 b
+3 b y
+4 b
+6 b1 y
+6 b2 y
+7 b
+8 b1 y
+8 b2 y
+]])
+
+AT_CHECK([$JOIN a b], [0],
+[[3 a1 x b y
+3 a2 x b y
+6 a b1 y
+6 a b2 y
+8 a1 x b1 y
+8 a1 x b2 y
+8 a2 x b1 y
+8 a2 x b2 y
+]])
+
+AT_CHECK([$JOIN -v1 a b], [0],
+[[1 a
+5 a
+9 a1
+9 a2
+9 a3
+]])
+
+AT_CHECK([$JOIN -v2 a b], [0],
+[[2 b
+2 b
+4 b
+7 b
+]])
+
+AT_CHECK([$JOIN -v1 -v2 a b], [0],
+[[1 a
+2 b
+2 b
+4 b
+5 a
+7 b
+9 a1
+9 a2
+9 a3
+]])
+
+AT_CHECK([$JOIN -a1 a b], [0],
+[[1 a
+3 a1 x b y
+3 a2 x b y
+5 a
+6 a b1 y
+6 a b2 y
+8 a1 x b1 y
+8 a1 x b2 y
+8 a2 x b1 y
+8 a2 x b2 y
+9 a1
+9 a2
+9 a3
+]])
+
+AT_CHECK([$JOIN -a2 a b], [0],
+[[2 b
+2 b
+3 a1 x b y
+3 a2 x b y
+4 b
+6 a b1 y
+6 a b2 y
+7 b
+8 a1 x b1 y
+8 a1 x b2 y
+8 a2 x b1 y
+8 a2 x b2 y
+]])
+
+AT_CHECK([$JOIN -a1 -a2 a b], [0],
+[[1 a
+2 b
+2 b
+3 a1 x b y
+3 a2 x b y
+4 b
+5 a
+6 a b1 y
+6 a b2 y
+7 b
+8 a1 x b1 y
+8 a1 x b2 y
+8 a2 x b1 y
+8 a2 x b2 y
+9 a1
+9 a2
+9 a3
+]])
+
+AT_CHECK([$JOIN b a], [0],
+[[3 b y a1 x
+3 b y a2 x
+6 b1 y a
+6 b2 y a
+8 b1 y a1 x
+8 b1 y a2 x
+8 b2 y a1 x
+8 b2 y a2 x
+]])
+
+AT_CHECK([$JOIN -v1 b a], [0],
+[[2 b
+2 b
+4 b
+7 b
+]])
+
+AT_CHECK([$JOIN -v2 b a], [0],
+[[1 a
+5 a
+9 a1
+9 a2
+9 a3
+]])
+
+AT_CHECK([$JOIN -v1 -v2 b a], [0],
+[[1 a
+2 b
+2 b
+4 b
+5 a
+7 b
+9 a1
+9 a2
+9 a3
+]])
+
+AT_CHECK([$JOIN -a1 b a], [0],
+[[2 b
+2 b
+3 b y a1 x
+3 b y a2 x
+4 b
+6 b1 y a
+6 b2 y a
+7 b
+8 b1 y a1 x
+8 b1 y a2 x
+8 b2 y a1 x
+8 b2 y a2 x
+]])
+
+AT_CHECK([$JOIN -a2 b a], [0],
+[[1 a
+3 b y a1 x
+3 b y a2 x
+5 a
+6 b1 y a
+6 b2 y a
+8 b1 y a1 x
+8 b1 y a2 x
+8 b2 y a1 x
+8 b2 y a2 x
+9 a1
+9 a2
+9 a3
+]])
+
+AT_CHECK([$JOIN -a1 -a2 b a], [0],
+[[1 a
+2 b
+2 b
+3 b y a1 x
+3 b y a2 x
+4 b
+5 a
+6 b1 y a
+6 b2 y a
+7 b
+8 b1 y a1 x
+8 b1 y a2 x
+8 b2 y a1 x
+8 b2 y a2 x
+9 a1
+9 a2
+9 a3
+]])
+
+AT_CHECK([echo wat | $JOIN -v1 - /dev/null], [0],
+[[wat
+]])
+
+AT_CLEANUP
+
+m4_divert_push([PREPARE_TESTS])dnl
+test_fix_ltdl () {
+ $PERL -e 'my $x = 42; exit $x;'; test $? = 42 || exit 77
+ $PERL "$srcdir/scripts/fix-ltdl.pl" "$@"
+}
+test_fix_gnulib () {
+ $PERL -e 'my $x = 42; exit $x;'; test $? = 42 || exit 77
+ $PERL "$srcdir/scripts/fix-gnulib.pl" "$@"
+}
+test_gnulib_mk () {
+ echo;
+ for arg
+ do
+ sed -n -e \
+ "/^## begin gnulib module $arg/,/^## end gnulib module $arg/p" \
+ "$srcdir/tests/data/gnulib.mk"
+ done
+}
+m4_divert_pop([PREPARE_TESTS])
+
+AT_SETUP([fix-gnulib.pl SED_HEADER variables])
+AT_KEYWORDS([fix-gnulib perl script scripts])
+
+test_gnulib_mk gen-header >test.mk.in
+AT_CHECK([grep SED_HEADER test.mk.in >expout || exit 99])
+AT_CHECK([test_fix_gnulib -i test.mk.in -o test.mk || exit
+grep SED_HEADER test.mk], [0], [expout])
+
+AT_CLEANUP
+
+AT_SETUP([fix-gnulib.pl warning removal])
+AT_KEYWORDS([fix-gnulib perl script scripts])
+
+AT_DATA([test.mk.in], [[
+## test begin
+noinst_LTLIBRARIES += libgnu.la
+libgnu_la_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS)
+noinst_LIBRARIES += libgnu.a
+libgnu_a_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS)
+## test end
+]])
+AT_CHECK([test_fix_gnulib -i test.mk.in -o test.mk || exit
+sed -n '/^## test begin/,/^## test end/p' test.mk], [0], [## test begin
+EXTRA_LTLIBRARIES += libgnu.la
+EXTRA_LIBRARIES += libgnu.a
+## test end
+])
+
+AT_CLEANUP
+
+AT_SETUP([fix-gnulib.pl header directory creation])
+AT_KEYWORDS([fix-gnulib perl script scripts])
+
+AT_DATA([extract.awk],
+[[$0 !~ /^\t/ && $1 ~ /:$/ {
+ target=$1;
+
+ for (i = 2; i <= NF; i++) {
+ if ($i ~ /am__dirstamp/)
+ target = target " " $i;
+ }
+
+ next;
+}
+
+target != "" && sub(/[$][({](AM_V_GEN|gl_V_at)[})].*$/, "[OK]") {
+ print target, $1;
+}
+
+{ target=""; }
+]])
+
+test_gnulib_mk alloca-opt sys_types stddef >test.mk.in
+AT_CHECK([test_fix_gnulib -i test.mk.in -o test.mk || exit
+$AWK -f extract.awk test.mk], [0],
+[[lib/alloca.h: lib/$(am__dirstamp) [OK]
+lib/sys/types.h: lib/sys/$(am__dirstamp) [OK]
+lib/stddef.h: lib/$(am__dirstamp) [OK]
+]])
+
+AT_CLEANUP
+
+dnl TEST_FIND_AUTOMAKE_VER([to-check], [test-action])
+dnl
+dnl For each whitespace-separated version token in to-check, check if we can
+dnl run the programs automake-VER and aclocal-VER. The special token 'default'
+dnl also checks the unversioned automake and aclocal (or, if set in the
+dnl environment, $AUTOMAKE and $ACLOCAL).
+dnl
+dnl Then test-action is expanded such that shell variables $ac and $am refer to
+dnl the aclocal and automake programs, and $amver is the actual version
+dnl reported by --version. The action should do nothing if the version is
+dnl acceptable, or "continue" if the version is unacceptable.
+dnl
+dnl If an acceptable version is found, the AUTOMAKE and ACLOCAL environment
+dnl variables are set accordingly. Otherwise, the test group is skipped.
+m4_define([TEST_FIND_AUTOMAKE],
+[have_am=false
+for am in $1; do
+ AS_CASE([$am],
+ [default], [ac=${ACLOCAL-aclocal} am=${AUTOMAKE-automake}],
+ [ac=aclocal-$am; am=automake-$am])
+ amver=`$am --version | sed -n '1s/.* //p'`
+ acver=`$ac --version | sed -n '1s/.* //p'`
+ set x $amver $acver; shift; test x"$[]#" = x"2" || continue
+ test x"$amver" = x"$acver" || continue
+ $2
+ have_am=:; break
+done
+AT_CHECK([$have_am || exit 77])
+AUTOMAKE=$am; export AUTOMAKE
+ACLOCAL=$ac; export ACLOCAL
+AT_CHECK([$ACLOCAL --version && $AUTOMAKE --version], [0], [stdout])
+])
+
+m4_define([TEST_LTDL_LIBOBJ_MANGLING],
+[TEST_CONFIGURE_AC([[AM_INIT_AUTOMAKE([foreign subdir-objects])
+AC_PROG_CC
+LT_INIT
+AC_SUBST([ltdl_LTLIBOBJS], [libltdl/test.lo])
+AC_CONFIG_FILES([Makefile])
+]])
+
+mkdir libltdl
+AT_DATA([ltdl.mk.in], [[
+AM_CPPFLAGS += -DSTRING=\"helloworld\"
+
+noinst_LTLIBRARIES = libltdl/libltdl.la
+libltdl_libltdl_la_SOURCES = libltdl/ltdl.c
+libltdl_libltdl_la_LIBADD = $(ltdl_LTLIBOBJS)
+libltdl_libltdl_la_DEPENDENCIES = $(ltdl_LTLIBOBJS)
+
+EXTRA_DIST += libltdl/test.c
+]])
+AT_DATA([Makefile.am], [[AM_CPPFLAGS =
+include $(top_srcdir)/ltdl.mk
+AM_LIBTOOLFLAGS = --quiet
+bin_PROGRAMS = test
+test_SOURCES =
+test_LDADD = libltdl/libltdl.la
+all-local: ; @printf '%s\n' $(AM_CPPFLAGS)
+]])
+AT_DATA([libltdl/test.c], [[#include <stdio.h>
+int foo(void) { printf("%s\n", STRING); return 0; }
+]])
+AT_DATA([libltdl/ltdl.c], [[int foo(void); int main(void) { return foo(); }
+]])
+
+AT_CHECK([test_fix_ltdl -i ltdl.mk.in -o ltdl.mk])
+libtoolize; TEST_AUTORECONF
+TEST_CONFIGURE([--disable-shared])
+AT_CHECK([make -s && ./test], [0], [
+helloworld
+])])
+
+AT_SETUP([fix-ltdl.pl LIBOBJ mangling (<automake-1.16)])
+AT_KEYWORDS([fix-ltdl perl script scripts])
+
+TEST_FIND_AUTOMAKE([default 1.10 1.11 1.12 1.13 1.14 1.15],
+ [AS_VERSION_COMPARE(["$amver"], [1.16], [], [continue], [continue])])
+TEST_LTDL_LIBOBJ_MANGLING
+
+AT_CLEANUP
+
+AT_SETUP([fix-ltdl.pl LIBOBJ mangling (>=automake-1.16)])
+AT_KEYWORDS([fix-ltdl perl script scripts])
+
+TEST_FIND_AUTOMAKE([default 1.16 1.17 1.18 1.19],
+ [AS_VERSION_COMPARE(["$amver"], [1.16], [continue])])
+TEST_LTDL_LIBOBJ_MANGLING
+
+AT_CLEANUP