automake-patches
[Top][All Lists]
Advanced

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

[PATCH] {maint} maintcheck: reduce code duplication, increase coverage


From: Stefano Lattarini
Subject: [PATCH] {maint} maintcheck: reduce code duplication, increase coverage
Date: Sat, 5 May 2012 02:17:49 +0200

* syntax-checks.mk: Move ...
(sc_tests_plain_aclocal,
sc_tests_plain_autoconf,
sc_tests_plain_perl,
sc_tests_plain_autoupdate,
sc_tests_plain_automake,
sc_tests_plain_make,
sc_tests_plain_autoheader,
sc_tests_plain_autoreconf,
sc_tests_plain_autom4te): ... all these targets ...
(sc_tests_plain_egrep_fgrep): ... and part of this target ...
(sc_tests_plain_check_rules): ... into this variable, and
reimplement their recipes ...
($(sc_tests_plain_check_rules)): ... with this static pattern
rule.  Enhance the coverage they offer a little since we are
at it.
(sc_m4_am_plain_egrep_fgrep): New rule, the part of the old
'sc_tests_plain_egrep_fgrep' rule that checked for use of
'fgrep' and 'egrep' in *.am and *.m4 fragments (rather than
in test scripts).
(syntax_check_rules): Update.
* t/dist-formats.tap: Fix bad use of "make" instead of "$MAKE"
revealed by the extra coverage.
* t/cond5.sh, t/auxdir-autodetect.sh: Cosmetic changes to avoid
spuriously triggering the maintainer checks due to the
enhanced coverage.

Signed-off-by: Stefano Lattarini <address@hidden>
---

 I will push this by tomorrow if there is no objection.

 syntax-checks.mk       |  128 ++++++++++++++++--------------------------------
 t/auxdir-autodetect.sh |    2 +-
 t/cond5.sh             |    2 +-
 t/dist-formats.tap     |    2 +-
 t/location.sh          |   48 +++++++++---------
 t/tap-signal.tap       |    5 +-
 6 files changed, 74 insertions(+), 113 deletions(-)

diff --git a/syntax-checks.mk b/syntax-checks.mk
index 130d469..bac6c7b 100644
--- a/syntax-checks.mk
+++ b/syntax-checks.mk
@@ -38,6 +38,7 @@ ams := $(shell find $(srcdir) -name '*.dir' -prune -o -name 
'*.am' -print)
 # Some simple checks, and then ordinary check.  These are only really
 # guaranteed to work on my machine.
 syntax_check_rules = \
+$(sc_tests_plain_check_rules) \
 sc_test_names \
 sc_diff_automake_in_automake \
 sc_diff_aclocal_in_automake \
@@ -56,22 +57,13 @@ sc_perl_local \
 sc_AMDEP_TRUE_in_automake_in \
 sc_tests_make_without_am_makeflags \
 sc_tests_obsolete_variables \
-sc_tests_plain_make \
-sc_tests_plain_autoconf \
-sc_tests_plain_autoupdate \
-sc_tests_plain_automake \
-sc_tests_plain_autom4te \
-sc_tests_plain_autoheader \
-sc_tests_plain_autoreconf \
 sc_tests_here_document_format \
 sc_tests_Exit_not_exit \
 sc_tests_automake_fails \
-sc_tests_plain_aclocal \
-sc_tests_plain_perl \
 sc_tests_required_after_defs \
 sc_tests_overriding_macros_on_cmdline \
 sc_tests_plain_sleep \
-sc_tests_plain_egrep_fgrep \
+sc_m4_am_plain_egrep_fgrep \
 sc_tests_no_configure_in \
 sc_tests_PATH_SEPARATOR \
 sc_tests_logs_duplicate_prefixes \
@@ -81,14 +73,6 @@ sc_unquoted_DESTDIR \
 sc_tabs_in_texi \
 sc_at_in_texi
 
-$(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.
-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).
@@ -311,53 +295,36 @@ sc_tests_obsolete_variables:
          exit 1; \
        else :; fi
 
-## Tests should never call make directly.
-sc_tests_plain_make:
-       @if grep -v '^#' $(xtests) | $(EGREP) ':[       ]*make( |$$)'; then \
-         echo 'Do not run "make" in the above tests.  Use "$$MAKE" instead.' 
1>&2; \
-         exit 1; \
-       fi
-
-## Tests should never call autoconf directly.
-sc_tests_plain_autoconf:
-       @if grep -v '^#' $(xtests) | grep ':[   ]*autoconf\>'; then \
-         echo 'Do not run "autoconf" in the above tests.  Use "$$AUTOCONF" 
instead.' 1>&2; \
-         exit 1; \
-       fi
-
-## Tests should never call autoupdate directly.
-sc_tests_plain_autoupdate:
-       @if grep -v '^#' $(xtests) | grep ':[   ]*autoupdate\>'; then \
-         echo 'Do not run "autoupdate" in the above tests.  Use "$$AUTOUPDATE" 
instead.' 1>&2; \
-         exit 1; \
-       fi
-
-## Tests should never call automake directly.
-sc_tests_plain_automake:
-       @if grep -v '^#' $(xtests) | grep -E ':[        ]*automake\>([^:]|$$)'; 
then \
-         echo 'Do not run "automake" in the above tests.  Use "$$AUTOMAKE" 
instead.' 1>&2;  \
-         exit 1; \
-       fi
-
-## Tests should never call autoheader directly.
-sc_tests_plain_autoheader:
-       @if grep -v '^#' $(xtests) | grep ':[   ]*autoheader\>'; then \
-         echo 'Do not run "autoheader" in the above tests.  Use "$$AUTOHEADER" 
instead.' 1>&2;  \
-         exit 1; \
-       fi
-
-## Tests should never call autoreconf directly.
-sc_tests_plain_autoreconf:
-       @if grep -v '^#' $(xtests) | grep ':[   ]*autoreconf\>'; then \
-         echo 'Do not run "autoreconf" in the above tests.  Use "$$AUTORECONF" 
instead.' 1>&2;  \
-         exit 1; \
-       fi
-
-## Tests should never call autom4te directly.
-sc_tests_plain_autom4te:
-       @if grep -v '^#' $(xtests) | grep ':[   ]*autom4te\>'; then \
-         echo 'Do not run "autom4te" in the above tests.  Use "$$AUTOM4TE" 
instead.' 1>&2;  \
-         exit 1; \
+## Tests should never call some programs directly, but only through the
+## corresponding variable (e.g., '$MAKE', not 'make').  This will allow
+## the programs to be overridden at configure time (for less brittleness)
+## or by the user at make time (to allow better testsuite coverage).
+sc_tests_plain_check_rules = \
+  sc_tests_plain_egrep \
+  sc_tests_plain_fgrep \
+  sc_tests_plain_make \
+  sc_tests_plain_perl \
+  sc_tests_plain_automake \
+  sc_tests_plain_aclocal \
+  sc_tests_plain_autoconf \
+  sc_tests_plain_autoupdate \
+  sc_tests_plain_autom4te \
+  sc_tests_plain_autoheader \
+  sc_tests_plain_autoreconf
+
+toupper = $(shell echo $(1) | LC_ALL=C tr '[a-z]' '[A-Z]')
+
+$(sc_tests_plain_check_rules): sc_tests_plain_% :
+       @# The leading ':' in the grep below is what is printed by the
+       @# preceding 'grep -v' after the file name.
+       @# It works here as a poor man's substitute for beginning-of-line
+       @# marker.
+       @if grep -v '^[         ]*#' $(xtests) \
+          | $(EGREP) '(:|\bif|\bnot|[;!{\|\(]|&&|\|\|)[        ]*?$*\b'; \
+        then \
+          echo 'Do not run "$*" in the above tests.' \
+               'Use "$$$(call toupper,$*)" instead.' 1>&2; \
+          exit 1; \
        fi
 
 ## Tests should only use END and EOF for here documents
@@ -393,20 +360,6 @@ sc_tests_automake_fails:
          exit 1; \
        fi
 
-## Tests should never call aclocal directly.
-sc_tests_plain_aclocal:
-       @if grep -v '^#' $(xtests) | grep ':[   ]*aclocal\>'; then \
-         echo 'Do not run "aclocal" in the above tests.  Use "$$ACLOCAL" 
instead.' 1>&2;  \
-         exit 1; \
-       fi
-
-## Tests should never call perl directly.
-sc_tests_plain_perl:
-       @if grep -v '^#' $(xtests) | grep ':[   ]*perl\>'; then \
-         echo 'Do not run "perl" in the above tests.  Use "$$PERL" instead.' 
1>&2; \
-         exit 1; \
-       fi
-
 ## Setting 'required' after sourcing './defs' is a bug.
 sc_tests_required_after_defs:
        @for file in $(xtests); do \
@@ -468,13 +421,10 @@ sc_tests_plain_sleep:
        fi
 
 ## fgrep and egrep are not required by POSIX.
-sc_tests_plain_egrep_fgrep:
-       @if grep -E '\b[ef]grep\b' $(xtests) ; then \
-         echo 'Do not use egrep or fgrep in test cases.  Use $$FGREP or 
$$EGREP.' 1>&2; \
-         exit 1; \
-       fi
+sc_m4_am_plain_egrep_fgrep:
        @if grep -E '\b[ef]grep\b' $(ams) $(srcdir)/m4/*.m4; then \
-         echo 'Do not use egrep or fgrep in the above files, they are not 
portable.' 1>&2; \
+         echo 'Do not use egrep or fgrep in the above files,' \
+              'they are not portable.' 1>&2; \
          exit 1; \
        fi
 
@@ -574,3 +524,11 @@ sc_at_in_texi:
          echo 'Unescaped @.' 1>&2; \
          exit 1; \
        fi
+
+$(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.
+maintainer-check: maintainer-check-list-of-tests
diff --git a/t/auxdir-autodetect.sh b/t/auxdir-autodetect.sh
index 790d1b1..41a73d5 100755
--- a/t/auxdir-autodetect.sh
+++ b/t/auxdir-autodetect.sh
@@ -121,7 +121,7 @@ grep '%%d[013]' out2 && Exit 1
 rm -f ../../missing ../../install-sh
 
 # --------------------------------------------------------- #
-:  AC_CONFIG_AUX_DIR will not be found: automake must fail  #
+:  AC_CONFIG_AUX_DIR will not be found: Automake must fail  #
 # --------------------------------------------------------- #
 
 AUTOMAKE_fails
diff --git a/t/cond5.sh b/t/cond5.sh
index dd45678..3961303 100755
--- a/t/cond5.sh
+++ b/t/cond5.sh
@@ -64,6 +64,6 @@ while test $try -le 30; do
   fi
 done
 # The automake process probably hung.  Kill it, and exit with failure.
-echo "$me: automake process $pid hung"
+echo "$me: Automake process $pid hung"
 kill $pid
 Exit 1
diff --git a/t/dist-formats.tap b/t/dist-formats.tap
index d627cf8..26c6c97 100755
--- a/t/dist-formats.tap
+++ b/t/dist-formats.tap
@@ -168,7 +168,7 @@ can_compress ()
   command_ok_if_have_compressor "'make dist-$format' work by default" \
     eval '
       rm -rf *$tarname* \
-        && make dist-$format \
+        && $MAKE dist-$format \
         && test -f $tarname-1.0.$suffix \
         && ls -l *$tarname* \
         && test "`ls *$tarname*`" = $tarname-1.0.$suffix'
diff --git a/t/location.sh b/t/location.sh
index e496ca6..f9dd289 100755
--- a/t/location.sh
+++ b/t/location.sh
@@ -48,10 +48,10 @@ END
 # Smash the useless difference of lib file locations.
 smash_useless_diffs ()
 {
-  # FIXME: we could get rid of the second 's|||' once we improve our
+  # FIXME: we could get rid of the second 's,,,' once we improve our
   # wrapper scripts ...
-  sed -e "s|^$am_amdir/\\([a-z]*\.am\\)|\\1|" \
-      -e "s|^automake-$APIVERSION:|automake:|" ${1+"$@"};
+  sed -e "s,^$am_amdir/\\([a-z]*\.am\\),\\1," \
+      -e "s,^automake-$APIVERSION:,automake:," ${1+"$@"};
 }
 
 $ACLOCAL
@@ -59,26 +59,28 @@ AUTOMAKE_fails -Wno-error
 
 smash_useless_diffs stderr >observed
 
-cat >expected <<\EOF
-Makefile.am:12: warning: VAR multiply defined in condition TRUE ...
-Makefile.am:8: ... 'VAR' previously defined here
-automake: error: libfoo_a_OBJECTS should not be defined
-Makefile.am:3:   while processing library 'libfoo.a'
-automake: error: use 'libfoo_a_LDADD', not 'libfoo_a_LIBADD'
-Makefile.am:3:   while processing library 'libfoo.a'
-library.am: warning: deprecated feature: target 'libfoo.a' overrides 
'libfoo.a$(EXEEXT)'
-library.am: change your target to read 'libfoo.a$(EXEEXT)'
-Makefile.am:3:   while processing library 'libfoo.a'
-program.am: target 'libfoo.a$(EXEEXT)' was defined here
-Makefile.am:1:   while processing program 'libfoo.a'
-program.am: warning: redefinition of 'libfoo.a$(EXEEXT)' ...
-Makefile.am:1:   while processing program 'libfoo.a'
-library.am: ... 'libfoo.a' previously defined here
-Makefile.am:3:   while processing library 'libfoo.a'
-tags.am: warning: redefinition of 'ctags' ...
-program.am: ... 'ctags$(EXEEXT)' previously defined here
-Makefile.am:6:   while processing program 'ctags'
-EOF
+# Apparently useless use of sed here required to avoid spuriously
+# triggering some maintainer-checks failures.
+sed 's/^> //' > expected << 'END'
+> Makefile.am:12: warning: VAR multiply defined in condition TRUE ...
+> Makefile.am:8: ... 'VAR' previously defined here
+> automake: error: libfoo_a_OBJECTS should not be defined
+> Makefile.am:3:   while processing library 'libfoo.a'
+> automake: error: use 'libfoo_a_LDADD', not 'libfoo_a_LIBADD'
+> Makefile.am:3:   while processing library 'libfoo.a'
+> library.am: warning: deprecated feature: target 'libfoo.a' overrides 
'libfoo.a$(EXEEXT)'
+> library.am: change your target to read 'libfoo.a$(EXEEXT)'
+> Makefile.am:3:   while processing library 'libfoo.a'
+> program.am: target 'libfoo.a$(EXEEXT)' was defined here
+> Makefile.am:1:   while processing program 'libfoo.a'
+> program.am: warning: redefinition of 'libfoo.a$(EXEEXT)' ...
+> Makefile.am:1:   while processing program 'libfoo.a'
+> library.am: ... 'libfoo.a' previously defined here
+> Makefile.am:3:   while processing library 'libfoo.a'
+> tags.am: warning: redefinition of 'ctags' ...
+> program.am: ... 'ctags$(EXEEXT)' previously defined here
+> Makefile.am:6:   while processing program 'ctags'
+END
 
 cat expected
 cat observed
diff --git a/t/tap-signal.tap b/t/tap-signal.tap
index ab1cd40..cf5c945 100755
--- a/t/tap-signal.tap
+++ b/t/tap-signal.tap
@@ -49,7 +49,7 @@ for sig in $all_signals; do
   # to themselves consistently).  The shebang is dummy here, as we prefer
   # to rely on the definition of TEST_LOG_COMPILER instead.
   unindent > signal-$sig.test <<END
-    #! perl
+    #! /usr/bin/env perl
     # We need autoflush to avoid losing output, which could cause spurious
     # "no test plan seen" in the TAP driver.
     BEGIN { $| = 1 }
@@ -95,7 +95,8 @@ signal_caught ()
   wbound_re="($|[^a-zA-Z0-9_-])"
   pfx_re="^ERROR: signal-$numeric\\.test"
   case $am_tap_implementation in
-    perl) rx="$pfx_re - terminated by signal $sig_re$";;
+    # Dummy escape to please maintainer-check.
+    per\l) rx="$pfx_re - terminated by signal $sig_re$";;
     shell) rx="$pfx_re .*terminated by signal $sig_re$wbound_re";;
     *) fatal_ "invalid \$am_tap_implementation '$am_tap_implementation'";;
   esac
-- 
1.7.9.5




reply via email to

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