From: Stefano Lattarini Date: Mon, 16 Jan 2012 09:05:59 +0000 (+0100) Subject: maintcheck: consistency of list of test scripts X-Git-Tag: v1.11.2b~4^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=v1.11-647-g27f1a1c;p=thirdparty%2Fautomake.git maintcheck: consistency of list of test scripts This is basically a backport of commit 'v1.11-358-g7b6ab07' and its follow-ups. The possibility of easily checking that the list of test scripts listed in a Makefile equals that of the tests on the filesystem has proved itself so useful that it's worth taking the annoyance of backporting it to maint. * CheckListOfTests.am: New file, backported from master (commit 'v1.11-1736-g083a75b') with minor adjustments. (maintainer-check-list-of-tests): New target, check for consistency between the list of tests defined in the including Makefile and the list of tests on the filesystem. (clean-maintcheck-testslist-tmp): New rule, to clean up temporary files that might be left around by the rules associated with the previous target. (clean-local): Depend on it. * lib/Automake/tests/Makefile.am: Include `CheckListOfTests.am'. * tests/Makefile.am: Likewise. * Makefile.am (maintainer-check-list-of-test): New target, calling recursively into `tests/' and `lib/Automake/tests/', using ... (TEST_SUBDIRS): ... this new variable. (maintainer-check): Added dependency from the new target `maintainer-check-list-of-tests'. --- diff --git a/CheckListOfTests.am b/CheckListOfTests.am new file mode 100644 index 000000000..0a484470e --- /dev/null +++ b/CheckListOfTests.am @@ -0,0 +1,62 @@ +## -*- Automake -*- +## +## Copyright (C) 2011, 2012 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 . +## + +## Temporary files used in the `check-list-of-tests' target. +am__tmk = tests-in-makefile-list.tmp +am__tfs = tests-on-filesystem-list.tmp +am__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; \ +## List of tests in Makefile. + lst='$(expected_list_of_tests)'; \ + test -n "$$lst" || lst='$(TESTS)'; \ + for t in $$lst; do \ + echo "$$t"; \ + done | sort >$(am__tmk); \ +## List of tests on filesystem. Be careful to cater for VPATH builds too. + for ext in $(TEST_EXTENSIONS); do \ + ls *$$ext 2>/dev/null; \ + if test $(srcdir) != $(builddir); then \ + (cd $(srcdir) && ls *$$ext 2>/dev/null); \ + fi; \ + done | sort | uniq >$(am__tfs); \ +## Compare the two lists, complain if they differ. + if $$diff $(am__tmk) $(am__tfs) >$(am__tdf); then \ + result=0; \ + else \ + echo '$@: list of tests in Makefile an on filesystem differ' >&2; \ + echo "+ $$diff in-makefile on-filesystem" >&2; \ + cat $(am__tdf) >&2; \ + result=1; \ + fi; \ + rm -f $(am__tmk) $(am__tfs) $(am__tdf); \ + exit $$result; + +.PHONY: clean-maintcheck-testslist-tmp +clean-local: clean-maintcheck-testslist-tmp +clean-maintcheck-testslist-tmp: + rm -f $(am__tmk) $(am__tfs) $(am__tdf) diff --git a/Makefile.am b/Makefile.am index 893baff1b..735cb009e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -25,6 +25,8 @@ ## run aclocal and automake. SUBDIRS = lib . doc m4 tests +TEST_SUBDIRS = tests lib/Automake/tests + bin_SCRIPTS = automake aclocal CLEANFILES = $(bin_SCRIPTS) @@ -196,6 +198,24 @@ $(syntax_check_rules): automake aclocal maintainer-check: $(syntax_check_rules) .PHONY: maintainer-check $(syntax_check_rules) +## 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: + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + for subdir in $(TEST_SUBDIRS); do \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@) || eval $$failcom; \ + done; \ + test -z "$$fail" + +maintainer-check: maintainer-check-list-of-tests + ## Look for test whose names can cause spurious failures when used as ## first argument to AC_INIT (chiefly because they might contain an ## m4/m4sugar builtin or macro name). diff --git a/lib/Automake/tests/Makefile.am b/lib/Automake/tests/Makefile.am index c5e53d2cf..a537fd1d7 100644 --- a/lib/Automake/tests/Makefile.am +++ b/lib/Automake/tests/Makefile.am @@ -1,6 +1,7 @@ ## Process this file with automake to create Makefile.in -# Copyright (C) 2002, 2003, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2008, 2009, 2012 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 @@ -28,3 +29,5 @@ Version.pl \ Wrap.pl EXTRA_DIST = $(TESTS) + +include $(top_srcdir)/CheckListOfTests.am diff --git a/tests/Makefile.am b/tests/Makefile.am index b6f9fb320..c2daff4fb 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -127,6 +127,10 @@ EXTRA_DIST += distcheck-hook-m4.am # Each test case depends on defs, aclocal, and automake. check_SCRIPTS = defs aclocal-$(APIVERSION) automake-$(APIVERSION) +## Checking the list of tests. +include $(top_srcdir)/CheckListOfTests.am +maintainer-check-list-of-tests: $(parallel_tests) + clean-local: clean-local-check .PHONY: clean-local-check clean-local-check: