]> git.draconx.ca Git - dxcommon.git/blobdiff - snippet/autotest.mk
Improve distribution of Autotest testsuite dependencies.
[dxcommon.git] / snippet / autotest.mk
index d5adc9d23f49c938f421103f888d8eadeaad1c80..badfc9f97ce0c11d71c4d83f8a1989fb0a52e596 100644 (file)
@@ -31,7 +31,7 @@ clean-autotest:
 
 maintainer-clean-local: maintainer-clean-autotest
 maintainer-clean-autotest:
-       rm -f testsuite package.m4
+       rm -f testsuite testsuite.deps package.m4
 .PHONY: maintainerclean-autotest
 
 package.m4: $(top_srcdir)/configure.ac
@@ -53,27 +53,20 @@ DX_AUTOTEST_ERROR = @:; { \
          printf 'Autoconf package: <https://gnu.org/s/autoconf/>\n'; \
        } 1>&2; false
 
-DX_ATFLAGS = -I$(srcdir) $(ATFLAGS)
+DX_AUTOTEST = $(AUTOTEST) -I$(srcdir) $(ATFLAGS)
 
 testsuite: testsuite.at package.m4
 if !HAVE_AUTOTEST
        $(DX_AUTOTEST_ERROR)
 endif
-       $(AM_V_GEN) $(AUTOTEST) $(DX_ATFLAGS) -p m4_include -o $@.tmp \
+       $(AM_V_GEN) $(DX_AUTOTEST) -p m4_include -o $@.tmp testsuite.at
+       $(AM_V_at) $(DX_AUTOTEST) -t m4_include:'$$1' -o $@.deps.tmp \
          testsuite.at
-       $(AM_V_at) :; { \
-         $(AUTOTEST) $(DX_ATFLAGS) -t m4_include:'$@: $$1' testsuite.at; \
-         $(AUTOTEST) $(DX_ATFLAGS) -t m4_include:'$$1:' testsuite.at; \
-       } >$(DEPDIR)/$(@F).P
+       $(AM_V_at) exec 3<$@.deps.tmp 4>$(DEPDIR)/$(@F).P; \
+         while read f <&3; do printf '$@: %s\n%s:\n' "$$f" "$$f" >&4; done
+       $(AM_V_at) mv -f $@.deps.tmp $@.deps
        $(AM_V_at) mv -f $@.tmp $@
-
 testsuite.deps: testsuite
-if !HAVE_AUTOTEST
-       $(DX_AUTOTEST_ERROR)
-endif
-       $(AM_V_GEN) $(AUTOTEST) $(DX_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
@@ -91,10 +84,25 @@ DISTCLEANFILES += atconfig $(DEPDIR)/testsuite.P
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/testsuite.P@am__quote@
 
 # Automake 1.16 and newer use make rules to generate the dependency stubs.
-# we must hook those which is kind of annoying to do.  This should be harmless
-# on previous versions which generate the stubs directly in config.status.
+# Use this opportunity to generate accurate prerequisites from distributed
+# testsuite dependencies, needed so that make knows to rebuild the testsuite
+# when source files are modified in a distribution tarball, or after a make
+# distclean.
+#
+# With older Automake the stubs are generated directly in config.status.
+# Since this rule is ignored things should still work but the build may
+# miss modifications to the testsuite on the first build from a tarball.
 _dx_autotest_depfiles = am--depfiles
 $(_dx_autotest_depfiles): $(DEPDIR)/testsuite.P
 $(DEPDIR)/testsuite.P:
        @$(MKDIR_P) $(@D)
-       @echo '# dummy' >$@-t && mv -f $@-t $@
+       @if test -f $(builddir)/testsuite.deps; then \
+         exec 3<$(builddir)/testsuite.deps; \
+       elif test -f $(srcdir)/testsuite.deps; then \
+         exec 3<$(srcdir)/testsuite.deps; \
+       else \
+         echo '# dummy' >$@-t && exit; \
+       fi; exec 4>$@-t; while read f <&3; do \
+         printf 'testsuite: %s\n%s:\n' "$$f" "$$f" >&4; \
+       done
+       @mv -f $@-t $@