automake-patches
[Top][All Lists]
Advanced

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

[PATCH 2/3] Maint-check: refactoring to avoid code duplication


From: Stefano Lattarini
Subject: [PATCH 2/3] Maint-check: refactoring to avoid code duplication
Date: Sat, 30 Jan 2010 03:50:14 +0100
User-agent: KMail/1.12.1 (Linux/2.6.30-2-686; KDE/4.3.2; i686; ; )

The previous patch introduced some code duplication.  This patch takes 
care of removing (part of) such duplication, by adding a new *.am 
makefile fragment to be included by the relevant Makefiles.am
From 6dc1a373b889e484d979ce7a1107ec9a26a2ee0e Mon Sep 17 00:00:00 2001
From: Stefano Lattarini <address@hidden>
Date: Sat, 30 Jan 2010 01:57:12 +0100
Subject: [PATCH 2/3] Maint-check: refactoring to avoid code duplication

The recent extension of the `maintainer-check' target (to include
checks on the consistency of the list of test scripts) has
introduced some code duplication.  This commit takes care of
removing (part of) such duplication.

* CheckListOfTests.am: New file.
(maintainer-check-list-of-tests): New target, mostly copied
from the equally-named rule in the previous version of file
`tests/Makefile.am'.
(clean-maintcheck-testslist-tmp): New rule, to clean up the
temporary files that might be left around by the previous rule.
(clean-local): Depend on it.
* tests/Makefile.am: Include `CheckListOfTests.am'.
(maintainer-check-list-of-tests): Removed associated rules,
they're defined in included file `CheckListOfTests.am'.
(TEST_EXTENSIONS): New, define to `.test'.
(MOSTLYCLEANFILES): Definition removed, no more needed.
* lib/Automake/tests/Makefile.am: Include `CheckListOfTests.am'.
Bump copyright years.
(maintainer-check-list-of-tests): Removed, it's defined in
included file `CheckListOfTests.am'.
(MOSTLYCLEANFILES): Definition removed, no more needed.
---
 ChangeLog                      |   25 ++++++++++++++
 CheckListOfTests.am            |   71 ++++++++++++++++++++++++++++++++++++++++
 lib/Automake/tests/Makefile.am |   42 +-----------------------
 lib/Automake/tests/Makefile.in |   52 +++++++++++++++++------------
 tests/Makefile.am              |   43 ++----------------------
 tests/Makefile.in              |   42 +++++++++++++++--------
 6 files changed, 158 insertions(+), 117 deletions(-)
 create mode 100644 CheckListOfTests.am

diff --git a/ChangeLog b/ChangeLog
index 292aff2..b69037b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,30 @@
 2009-01-30  Stefano Lattarini  <address@hidden>
 
+       Maint-check: refactoring in makefiles, to avoid code duplication.
+       The recent extension of the `maintainer-check' target (to include
+       checks on the consistency of the list of test scripts) has
+       introduced some code duplication.  This change takes care of
+       removing (part of) such duplication.
+       * CheckListOfTests.am: New file.
+       (maintainer-check-list-of-tests): New target, mostly copied
+       from the equally-named rule in the previous version of file
+       `tests/Makefile.am'.
+       (clean-maintcheck-testslist-tmp): New rule, to clean up the
+       temporary files that might be left around by the previous rule.
+       (clean-local): Depend on it.
+       * tests/Makefile.am: Include `CheckListOfTests.am'.
+       (maintainer-check-list-of-tests): Removed associated rules,
+       they're defined in included file `CheckListOfTests.am'.
+       (TEST_EXTENSIONS): New, define to `.test'.
+       (MOSTLYCLEANFILES): Definition removed, no more needed.
+       * lib/Automake/tests/Makefile.am: Include `CheckListOfTests.am'.
+       Bump copyright years.
+       (maintainer-check-list-of-tests): Removed, it's defined in
+       included file `CheckListOfTests.am'.
+       (MOSTLYCLEANFILES): Definition removed, no more needed.
+
+2009-01-30  Stefano Lattarini  <address@hidden>
+
        Maint-check: check consistency of list of test scripts.
        * Makefile.am (maintainer-check-list-of-tests): New target.
        (maintainer-check): Added dependency from new target
diff --git a/CheckListOfTests.am b/CheckListOfTests.am
new file mode 100644
index 0000000..40e1e05
--- /dev/null
+++ b/CheckListOfTests.am
@@ -0,0 +1,71 @@
+## -*- Automake -*-
+##
+## Copyright (C) 2010 Free Software Foundation, Inc.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program.  If not, see <http://www.gnu.org/licenses/>.
+##
+
+## temporary files used in the `check-list-of-tests' target
+tmk = tests-in-makefile-list.tmp
+tfs = tests-on-filesystem-list.tmp
+tdf = diff-in-tests-lists.tmp
+
+## Check that the list of tests given in the Makefile is equal to the
+## list of all test scripts in the Automake testsuite.
+.PHONY: maintainer-check-list-of-tests
+maintainer-check-list-of-tests:
+        ## prefer unified diffs over plain diffs, for readability
+        @if diff -u /dev/null /dev/null >/dev/null 2>&1; then \
+          diff='diff -u'; \
+        else \
+          diff='diff'; \
+        fi; \
+        ## determine which files are to be considered test scripts
+        set X $(TEST_EXTENSIONS); shift; \
+        if test $$# -eq 0; then \
+          echo '$@: INTERNAL ERROR: $$(TEST_EXTENSIONS) undefined' \
+               'or empty' >&2; \
+          exit 255; \
+        fi; \
+        shift $$#; \
+        ## list of tests in Makefile
+        for t in $(TESTS); do \
+          echo "$$t"; \
+        done | sort >$(tmk); \
+        ## list of tests on filesystem
+        for suf in $(TEST_EXTENSIONS); do \
+          glob="$(srcdir)/*$$suf"; \
+          if test x"$(srcdir)" != x"$(builddir)"; then \
+            glob="$$glob $(builddir)/*$$suf"; \
+          fi; \
+        done; \
+        for t in $$glob; do \
+          echo "$$t"; \
+        done | sed 's,^.*/,,' | sort >$(tfs); \
+        ## compare the two lists
+        if $$diff $(tmk) $(tfs) >$(tdf); then \
+           e=0; \
+        else \
+           echo '$@: list of tests in Makefile an on filesystem differ' >&2; \
+           echo "+ $$diff in-makefile on-filesystem" >&2; \
+           cat $(tdf) >&2; \
+           e=1; \
+        fi; \
+        rm -f $(tmk) $(tfs) $(tdf); \
+        exit $$e;
+
+.PHONY: clean-maintcheck-testslist-tmp
+clean-local: clean-maintcheck-testslist-tmp
+clean-maintcheck-testslist-tmp:
+       rm -f $(tmk) $(tfs) $(tdf)
diff --git a/lib/Automake/tests/Makefile.am b/lib/Automake/tests/Makefile.am
index 4597b48..e0f27b4 100644
--- a/lib/Automake/tests/Makefile.am
+++ b/lib/Automake/tests/Makefile.am
@@ -44,44 +44,4 @@ Version3.pl
 
 EXTRA_DIST = $(TESTS)
 
-## temporary files used in the `check-list-of-tests' target
-tmk = tests-in-makefile-list.tmp
-tfs = tests-on-filesystem-list.tmp
-tdf = diff-in-tests-lists.tmp
-
-MOSTLYCLEANFILES = $(tmk) $(tfs) $(tdf)
-
-# Check that the list of tests given in the Makefile is equal to the
-# list of all test scripts in the Automake testsuite.
-maintainer-check-list-of-tests:
-       @:; \
-        ## prefer unified diffs over plain diffs, for readability
-        if diff -u /dev/null /dev/null >/dev/null 2>&1; then \
-          diff='diff -u'; \
-        else \
-          diff='diff'; \
-        fi; \
-        ## list of tests in Makefile
-        for t in $(TESTS); do \
-          echo "$$t"; \
-        done | sort >$(tmk); \
-        ## list of tests on filesystem
-        glob="$(srcdir)/*.pl"; \
-        if test x"$(srcdir)" != x"$(builddir)"; then \
-          glob="$$glob $(builddir)/*.pl"; \
-        fi; \
-        for t in $$glob; do \
-          echo "$$t"; \
-        done | sed 's,^.*/,,' | sort >$(tfs); \
-        ## compare the two lists
-        if $$diff $(tmk) $(tfs) >$(tdf); then \
-           e=0; \
-        else \
-           echo '$@: list of tests in Makefile an on filesystem differ' >&2; \
-           echo "+ $$diff in-makefile on-filesystem" >&2; \
-           cat $(tdf) >&2; \
-           e=1; \
-        fi; \
-        rm -f $(tmk) $(tfs) $(tdf); \
-        exit $$e;
-.PHONY: maintainer-check-list-of-tests
+include ../../../CheckListOfTests.am
diff --git a/lib/Automake/tests/Makefile.in b/lib/Automake/tests/Makefile.in
index b1c837f..6a9beae 100644
--- a/lib/Automake/tests/Makefile.in
+++ b/lib/Automake/tests/Makefile.in
@@ -48,8 +48,9 @@ NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
+DIST_COMMON = $(srcdir)/../../../CheckListOfTests.am \
+       $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 subdir = lib/Automake/tests
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/amversion.m4 \
        $(top_srcdir)/m4/auxdir.m4 $(top_srcdir)/m4/init.m4 \
@@ -274,12 +275,11 @@ EXTRA_DIST = $(TESTS)
 tmk = tests-in-makefile-list.tmp
 tfs = tests-on-filesystem-list.tmp
 tdf = diff-in-tests-lists.tmp
-MOSTLYCLEANFILES = $(tmk) $(tfs) $(tdf)
 all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .html .log .pl
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am 
$(srcdir)/../../../CheckListOfTests.am $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -523,7 +523,6 @@ install-strip:
          `test -z '$(STRIP)' || \
            echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
-       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
        -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
        -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP)
        -test -z "$(TEST_SUITE_HTML)" || rm -f $(TEST_SUITE_HTML)
@@ -540,7 +539,7 @@ maintainer-clean-generic:
        @echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic mostlyclean-am
+clean-am: clean-generic clean-local mostlyclean-am
 
 distclean: distclean-am
        -rm -f Makefile
@@ -608,33 +607,40 @@ uninstall-am:
        recheck-html
 
 .PHONY: all all-am check check-TESTS check-am check-html clean \
-       clean-generic distclean distclean-generic distdir dvi dvi-am \
-       html html-am info info-am install install-am install-data \
-       install-data-am install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-man install-pdf install-pdf-am \
-       install-ps install-ps-am install-strip installcheck \
-       installcheck-am installdirs maintainer-clean \
+       clean-generic clean-local distclean distclean-generic distdir \
+       dvi dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
        maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
        pdf-am ps ps-am recheck recheck-html uninstall uninstall-am
 
 
-# Check that the list of tests given in the Makefile is equal to the
-# list of all test scripts in the Automake testsuite.
+.PHONY: maintainer-check-list-of-tests
 maintainer-check-list-of-tests:
-       @:; \
-        if diff -u /dev/null /dev/null >/dev/null 2>&1; then \
+        @if diff -u /dev/null /dev/null >/dev/null 2>&1; then \
           diff='diff -u'; \
         else \
           diff='diff'; \
         fi; \
+        set X $(TEST_EXTENSIONS); shift; \
+        if test $$# -eq 0; then \
+          echo '$@: INTERNAL ERROR: $$(TEST_EXTENSIONS) undefined' \
+               'or empty' >&2; \
+          exit 255; \
+        fi; \
+        shift $$#; \
         for t in $(TESTS); do \
           echo "$$t"; \
         done | sort >$(tmk); \
-        glob="$(srcdir)/*.pl"; \
-        if test x"$(srcdir)" != x"$(builddir)"; then \
-          glob="$$glob $(builddir)/*.pl"; \
-        fi; \
+        for suf in $(TEST_EXTENSIONS); do \
+          glob="$(srcdir)/*$$suf"; \
+          if test x"$(srcdir)" != x"$(builddir)"; then \
+            glob="$$glob $(builddir)/*$$suf"; \
+          fi; \
+        done; \
         for t in $$glob; do \
           echo "$$t"; \
         done | sed 's,^.*/,,' | sort >$(tfs); \
@@ -648,7 +654,11 @@ maintainer-check-list-of-tests:
         fi; \
         rm -f $(tmk) $(tfs) $(tdf); \
         exit $$e;
-.PHONY: maintainer-check-list-of-tests
+
+.PHONY: clean-maintcheck-testslist-tmp
+clean-local: clean-maintcheck-testslist-tmp
+clean-maintcheck-testslist-tmp:
+       rm -f $(tmk) $(tfs) $(tdf)
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 30bbe20..4ce9955 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -38,6 +38,8 @@ MAINTAINERCLEANFILES = $(parallel_tests)
 defs-p: defs Makefile.am
        $(AM_V_GEN)sed 's,^AM_INIT_AUTOMAKE$$,&([parallel-tests]),' < defs >$@
 
+TEST_EXTENSIONS = .test
+
 TESTS =        \
 aclibobj.test \
 aclocal.test \
@@ -772,47 +774,8 @@ $(parallel_tests)
 
 EXTRA_DIST = ChangeLog-old gen-parallel-tests $(TESTS)
 
-## temporary files used in the `check-list-of-tests' target
-tmk = tests-in-makefile-list.tmp
-tfs = tests-on-filesystem-list.tmp
-tdf = diff-in-tests-lists.tmp
-
-MOSTLYCLEANFILES = $(tmk) $(tfs) $(tdf)
-
-# Check that the list of tests given in the Makefile is equal to the
-# list of all test scripts in the Automake testsuite.
+include ../CheckListOfTests.am
 maintainer-check-list-of-tests: $(parallel_tests)
-       @:; \
-        ## prefer unified diffs over plain diffs, for readability
-        if diff -u /dev/null /dev/null >/dev/null 2>&1; then \
-          diff='diff -u'; \
-        else \
-          diff='diff'; \
-        fi; \
-        ## list of tests in Makefile
-        for t in $(TESTS); do \
-          echo "$$t"; \
-        done | sort >$(tmk); \
-        ## list of tests on filesystem
-        glob="$(srcdir)/*.test"; \
-        if test x"$(srcdir)" != x"$(builddir)"; then \
-          glob="$$glob $(builddir)/*.test"; \
-        fi; \
-        for t in $$glob; do \
-          echo "$$t"; \
-        done | sed 's,^.*/,,' | sort >$(tfs); \
-        ## compare the two lists
-        if $$diff $(tmk) $(tfs) >$(tdf); then \
-           e=0; \
-        else \
-           echo '$@: list of tests in Makefile an on filesystem differ' >&2; \
-           echo "+ $$diff in-makefile on-filesystem" >&2; \
-           cat $(tdf) >&2; \
-           e=1; \
-        fi; \
-        rm -f $(tmk) $(tfs) $(tdf); \
-        exit $$e;
-.PHONY: maintainer-check-list-of-tests
 
 # Each test case depends on defs, aclocal, and automake.
 check_SCRIPTS = defs defs-p aclocal-$(APIVERSION) automake-$(APIVERSION)
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 301d735..0b8ee7b 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -48,7 +48,8 @@ NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+DIST_COMMON = README $(srcdir)/../CheckListOfTests.am \
+       $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
        $(srcdir)/aclocal.in $(srcdir)/automake.in $(srcdir)/defs.in \
        $(srcdir)/parallel-tests.am
 subdir = tests
@@ -151,7 +152,6 @@ RECHECK_LOGS = $(TEST_LOGS)
 AM_RECURSIVE_TARGETS = check check-html recheck recheck-html
 TEST_SUITE_LOG = test-suite.log
 TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html)
-TEST_EXTENSIONS = .test
 am__test_logs1 = $(TESTS:=.log)
 TEST_LOGS = $(am__test_logs1:.test.log=.log)
 TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
@@ -279,6 +279,7 @@ pr401b-p.test \
 pr401c-p.test
 
 MAINTAINERCLEANFILES = $(parallel_tests)
+TEST_EXTENSIONS = .test
 TESTS = \
 aclibobj.test \
 aclocal.test \
@@ -1015,7 +1016,6 @@ EXTRA_DIST = ChangeLog-old gen-parallel-tests $(TESTS)
 tmk = tests-in-makefile-list.tmp
 tfs = tests-on-filesystem-list.tmp
 tdf = diff-in-tests-lists.tmp
-MOSTLYCLEANFILES = $(tmk) $(tfs) $(tdf)
 
 # Each test case depends on defs, aclocal, and automake.
 check_SCRIPTS = defs defs-p aclocal-$(APIVERSION) automake-$(APIVERSION)
@@ -1023,7 +1023,7 @@ all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .html .log .test
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/parallel-tests.am 
$(am__configure_deps)
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/parallel-tests.am 
$(srcdir)/../CheckListOfTests.am $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -1274,7 +1274,6 @@ install-strip:
          `test -z '$(STRIP)' || \
            echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
-       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
        -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
        -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP)
        -test -z "$(TEST_SUITE_HTML)" || rm -f $(TEST_SUITE_HTML)
@@ -1382,22 +1381,29 @@ $(parallel_tests): $(parallel_tests:-p.test=.test) 
Makefile.am
 defs-p: defs Makefile.am
        $(AM_V_GEN)sed 's,^AM_INIT_AUTOMAKE$$,&([parallel-tests]),' < defs >$@
 
-# Check that the list of tests given in the Makefile is equal to the
-# list of all test scripts in the Automake testsuite.
-maintainer-check-list-of-tests: $(parallel_tests)
-       @:; \
-        if diff -u /dev/null /dev/null >/dev/null 2>&1; then \
+.PHONY: maintainer-check-list-of-tests
+maintainer-check-list-of-tests:
+        @if diff -u /dev/null /dev/null >/dev/null 2>&1; then \
           diff='diff -u'; \
         else \
           diff='diff'; \
         fi; \
+        set X $(TEST_EXTENSIONS); shift; \
+        if test $$# -eq 0; then \
+          echo '$@: INTERNAL ERROR: $$(TEST_EXTENSIONS) undefined' \
+               'or empty' >&2; \
+          exit 255; \
+        fi; \
+        shift $$#; \
         for t in $(TESTS); do \
           echo "$$t"; \
         done | sort >$(tmk); \
-        glob="$(srcdir)/*.test"; \
-        if test x"$(srcdir)" != x"$(builddir)"; then \
-          glob="$$glob $(builddir)/*.test"; \
-        fi; \
+        for suf in $(TEST_EXTENSIONS); do \
+          glob="$(srcdir)/*$$suf"; \
+          if test x"$(srcdir)" != x"$(builddir)"; then \
+            glob="$$glob $(builddir)/*$$suf"; \
+          fi; \
+        done; \
         for t in $$glob; do \
           echo "$$t"; \
         done | sed 's,^.*/,,' | sort >$(tfs); \
@@ -1411,7 +1417,13 @@ maintainer-check-list-of-tests: $(parallel_tests)
         fi; \
         rm -f $(tmk) $(tfs) $(tdf); \
         exit $$e;
-.PHONY: maintainer-check-list-of-tests
+
+.PHONY: clean-maintcheck-testslist-tmp
+clean-local: clean-maintcheck-testslist-tmp
+clean-maintcheck-testslist-tmp:
+       rm -f $(tmk) $(tfs) $(tdf)
+
+maintainer-check-list-of-tests: $(parallel_tests)
 
 clean-local: clean-local-check
 .PHONY: clean-local-check
-- 
1.6.5


reply via email to

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