]> git.draconx.ca Git - dxcommon.git/commitdiff
Ensure that all testsuite dependencies are distributed.
authorNick Bowler <nbowler@draconx.ca>
Sun, 26 Apr 2015 05:49:28 +0000 (01:49 -0400)
committerNick Bowler <nbowler@draconx.ca>
Wed, 28 Jun 2017 23:24:24 +0000 (19:24 -0400)
Failing to distribute all testsuite dependencies will cause failures
if the testsuite is modified.  Unfortunately, this is not caught by
distcheck because the testsuite is not rebuilt normally.  Therefore,
it is desirable for the dependencies to be picked up automatically
to reduce the possibility of omission.

We could check the M4 traces in a dist-hook, but then Autotest becomes
a dependency for "make dist", even when the testsuite is not modified.
Instead, distribute a record of all dependencies, and use that to
implement the dist-hook.

.gitignore
snippet/autotest.mk

index 02e9985ac1979fa66447dfde9fac8b9759ef5384..621f62ff440bb0c5b15d2df618ce4e8f17f91d14 100644 (file)
@@ -8,6 +8,7 @@
 /compile
 /testsuite.dir
 /testsuite.log
+/testsuite.deps
 /testsuite
 /package.m4
 /atconfig
index 04643f13e7907fc910f7b15c127563d0a87cd02d..293a85860976c8a8fd4f97d58c3427733f2acd22 100644 (file)
@@ -46,15 +46,16 @@ package.m4:
        ; } >$@.tmp
        $(AM_V_at) mv -f $@.tmp $@
 
-testsuite: testsuite.at package.m4
-if !HAVE_AUTOTEST
-       @:; { \
+DX_AUTOTEST_ERROR = @:; { \
          printf 'ERROR: Autotest was not available at configure time.\n'; \
          printf 'You should only need it if you modified the test suite.\n'; \
          printf 'Autotest is part of autom4te, included in the GNU\n'; \
          printf 'Autoconf package: <https://gnu.org/s/autoconf/>\n'; \
-       } 1>&2
-       @false
+       } 1>&2; false
+
+testsuite: testsuite.at package.m4
+if !HAVE_AUTOTEST
+       $(DX_AUTOTEST_ERROR)
 endif
        $(AM_V_GEN) $(AUTOTEST) $(ATFLAGS) -p m4_include -o $@.tmp testsuite.at
        $(AM_V_at) :; { \
@@ -63,7 +64,25 @@ endif
        } >$(DEPDIR)/$(@F).P
        $(AM_V_at) mv -f $@.tmp $@
 
-EXTRA_DIST += testsuite testsuite.at package.m4
+testsuite.deps: testsuite
+if !HAVE_AUTOTEST
+       $(DX_AUTOTEST_ERROR)
+endif
+       $(AM_V_GEN) $(AUTOTEST) $(ATFLAGS) -t m4_include:'$$1' -o $@.tmp \
+         testsuite.at
+       $(AM_V_at) mv -f $@.tmp $@
+
+dist-hook: dist-autotest-deps
+dist-autotest-deps: testsuite.deps
+       exec 3<$?; while read f <&3; do \
+         dir=`expr "$$f" : '\(.*\)/'`; \
+         $(MKDIR_P) "$(distdir)/$$dir" && \
+         chmod u+w "$(distdir)/$$dir" && \
+         cp -p "$(srcdir)/$$f" "$(distdir)/$$f" || exit; \
+       done
+.PHONY: dist-autotest-deps
+
+EXTRA_DIST += testsuite testsuite.at testsuite.deps package.m4
 DISTCLEANFILES += atconfig $(DEPDIR)/testsuite.P
 
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/testsuite.P@am__quote@