libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Tidy and fix clean and distclean rules for old testsuite.


From: Ralf Wildenhues
Subject: Tidy and fix clean and distclean rules for old testsuite.
Date: Sun, 22 Aug 2010 06:23:41 +0200
User-agent: Mutt/1.5.20 (2010-04-22)

In the Libtool tree, invoking 'make distclean' after 'make clean'
or before 'make check' has ever run, fails because there are no
Makefiles in the old test subdirectories (and automake's distclean
rule looks at DIST_SUBDIRS not SUBDIRS).  This patch fixes this
long-standing error by creating stub Makefiles, and IMHO using
minimal insider information about Automake-generated rules:
basically only the name of the 'distclean-recursive' rule, to
which we must add a prerequisite.  Just adding to distclean-local
doesn't work, that gets invoked too late.

OK to apply?

Even with this patch, 'make clean' may be very slow in the case where
the test subdirectories need reconfiguring.  That is an orthogonal and
IMVHO minor issue, which I don't know how fix easily though.

Thanks,
Ralf

    Tidy and fix clean and distclean rules for old testsuite.
    
    * Makefile.am (clean-local-legacy): Use $(CONF_SUBDIRS) instead
    of hard-coding the list of test directories.  Use
    $(AM_MAKEFLAGS).
    (fake-distclean-legacy): New phony rule, to create fake Makefile
    files if needed so that the automake-generated
    distclean-recursive rule can work properly.
    (distclean_recursive): New helper variable.
    (distclean-recursive): Depend on fake-distclean-legacy.

diff --git a/Makefile.am b/Makefile.am
index d689e09..2c4a3db 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -712,12 +712,26 @@ $(srcdir)/tests/defs.in: $(auxdir)/general.m4sh 
tests/defs.m4sh Makefile.am
 
 # We need to remove any files that the above tests created.
 clean-local-legacy:
-       -cd tests; \
-       for dir in cdemo demo depdemo f77demo fcdemo mdemo mdemo2 pdemo 
tagdemo; \
-       do \
-           test -f $$dir/Makefile && ( cd $$dir && $(MAKE) distclean; ); \
+       -for dir in $(CONF_SUBDIRS); do \
+         if test -f $$dir/Makefile; then \
+           (cd $$dir && $(MAKE) $(AM_MAKEFLAGS) distclean); \
+         else :; fi; \
        done
        rm -rf _inst
 
+# For distclean, we may have to fake Makefiles in the test directories
+# so that descending in DIST_SUBDIRS works.
+# Hide the additional dependency from automake so it still outputs the rule.
+distclean_recursive = distclean-recursive
+$(distclean_recursive): fake-distclean-legacy
+.PHONY: fake-distclean-legacy
+fake-distclean-legacy:
+       -for dir in $(CONF_SUBDIRS); do \
+         if test ! -f $$dir/Makefile; then \
+           $(mkinstalldirs) $$dir; \
+           echo 'distclean: ; rm -f Makefile' > $$dir/Makefile; \
+         else :; fi; \
+       done
+
 $(TESTS): tests/defs
 DISTCLEANFILES += tests/defs



reply via email to

[Prev in Thread] Current Thread [Next in Thread]