-check_PROGRAMS = test/crossparse
-check_LTLIBRARIES = libtest.la
-libtest_la_LIBADD = $(GSL_LIBS)
-libtest_la_SOURCES = test/testlib.c
-$(libtest_la_OBJECTS): $(gnulib_headers)
-
-if HAVE_GSL
-libtest_la_SOURCES += test/declgen.c
-check_PROGRAMS += test/randomdecl
-endif
-
-test_crossparse_LDADD = libcdecl.la libtest.la libgnu.la
-$(test_crossparse_OBJECTS): $(gnulib_headers)
-test_randomdecl_LDADD = libcdecl.la libtest.la libgnu.la
-$(test_randomdecl_OBJECTS): $(gnulib_headers)
-
-src/parse.lo: src/scan.h
-src/scan.lo: src/parse.h
-src/parse-decl.lo: src/scan.h src/parse.h
-src/typemap.lo: src/validtypes.h
-src/error.lo: src/errtab.h
-src/normalize.lo: src/ordspecs.h
-src/output.lo: src/namespecs.h
-test/declgen.lo: test/typegen.h
-
-src/validtypes.h: $(srcdir)/src/types.lst $(srcdir)/src/validtypes.sed
- $(AM_V_GEN)sed -f $(srcdir)/src/validtypes.sed \
- < $(srcdir)/src/types.lst > $@.tmp
- $(AM_V_at)mv -f $@.tmp $@
-
-src/namespecs.h: $(srcdir)/src/specs.lst $(srcdir)/src/namespecs.sed
- $(AM_V_GEN) sed -f $(srcdir)/src/namespecs.sed \
- < $(srcdir)/src/specs.lst > $@.tmp
- $(AM_V_at) mv -f $@.tmp $@
-
-src/ordspecs.h: $(srcdir)/src/specs.lst $(srcdir)/src/ordspecs.sed
- $(AM_V_GEN) sed -f $(srcdir)/src/ordspecs.sed \
- < $(srcdir)/src/specs.lst > $@.tmp
- $(AM_V_at) mv -f $@.tmp $@
-
-src/errtab.h: $(srcdir)/src/errors.lst $(srcdir)/src/strtab.sed
- $(AM_V_GEN)sed -f $(srcdir)/src/strtab.sed \
- < $(srcdir)/src/errors.lst > $@.tmp
- $(AM_V_at)mv -f $@.tmp $@
-
-test/typegen.h: $(srcdir)/src/types.lst $(srcdir)/test/typegen.sh
- $(AM_V_GEN) $(SHELL) $(srcdir)/test/typegen.sh \
- < $(srcdir)/src/types.lst > $@.tmp
- $(AM_V_at)mv -f $@.tmp $@
+check_PROGRAMS = t/crossparse t/normalize t/randomdecl t/rng-test
+check_LIBRARIES = libtest.a
+libtest_a_SOURCES = t/testlib.c t/rng.c common/src/help.c common/src/tap.c
+$(libtest_a_OBJECTS): $(gnulib_headers)
+
+TEST_LIBS = libtest.a libcdecl.la libgnu.a $(LDEXP_LIBM)
+
+t_randomdecl_SOURCES = t/randomdecl.c t/declgen.c
+t_randomdecl_LDADD = $(TEST_LIBS)
+$(t_randomdecl_OBJECTS): $(gnulib_headers)
+
+t_crossparse_LDADD = $(TEST_LIBS)
+$(t_crossparse_OBJECTS): $(gnulib_headers)
+
+t_normalize_LDADD = src/normalize.lo $(TEST_LIBS)
+$(t_normalize_OBJECTS): $(gnulib_headers)
+
+t_rng_test_LDADD = $(TEST_LIBS)
+$(t_rng_test_OBJECTS): $(gnulib_headers)
+EXTRA_DIST += t/xos256p.c
+
+check_PROGRAMS += t/rendertest
+t_rendertest_LDADD = $(TEST_LIBS)
+$(t_rendertest_OBJECTS): $(gnulib_headers)
+
+check_PROGRAMS += t/scantest
+t_scantest_LDADD = src/scan.lo src/parse.lo src/keywords.lo $(TEST_LIBS)
+$(t_scantest_OBJECTS): $(gnulib_headers) src/scan.h src/parse.h
+
+EXTRA_LIBRARIES += t/libmemwrap.a
+t_libmemwrap_a_SOURCES = t/memwrap.c
+$(t_libmemwrap_a_OBJECTS): $(gnulib_headers)
+
+EXTRA_LIBRARIES += t/liberrtest.a
+t_liberrtest_a_SOURCES = src/error.c
+t_liberrtest_a_CPPFLAGS = $(AM_CPPFLAGS) -DTEST_MALLOC_HOOK
+t_liberrtest_a_SHORTNAME = t
+$(t_liberrtest_a_OBJECTS): $(gnulib_headers)
+
+check_PROGRAMS += t/errthread
+EXTRA_t_errthread_DEPENDENCIES = $(t_liberrtest_a_OBJECTS) \
+ $(t_libmemwrap_a_OBJECTS) \
+ src/output.lo $(shared_gl_objects)
+t_errthread_LDADD = $(EXTRA_t_errthread_DEPENDENCIES) \
+ libtest.a $(LTLIBINTL) $(LIBMULTITHREAD)
+$(t_errthread_OBJECTS): $(gnulib_headers) src/errmsg.h
+
+src/error.lo: src/errmsg.h
+src/keywords.lo: src/parse.h
+src/output.lo: src/parse.h src/specstr.h
+src/parse-decl.lo: src/scan.h src/parse.h src/typemap.h src/errmsg.h
+src/parse.lo: src/scan.h src/errmsg.h
+src/scan.lo: src/parse.h src/errmsg.h
+t/declgen.$(OBJEXT): t/typegen.h
+t/cdeclerr.$(OBJEXT): src/errmsg.h
+
+check_PROGRAMS += t/cdeclerr
+t_cdeclerr_SOURCES = t/cdeclerr.c
+EXTRA_t_cdeclerr_DEPENDENCIES = src/error.lo src/output.lo $(shared_gl_objects)
+t_cdeclerr_LDADD = $(EXTRA_t_cdeclerr_DEPENDENCIES) \
+ libtest.a $(LTLIBINTL) $(LIBTHREAD)
+$(t_cdeclerr_OBJECTS): $(gnulib_headers)