Instead of tweaking or dumbing down some of our sources or tests in order not to make them spuriously trigger few maintainer checks, we tweak such checks instead.
* syntax-checks.mk (sc_tests_overriding_macros_on_cmdline): Also allow the variable 'exp' to be overridden on the make command line. Whitelist the test 'make-dryrun.test' where appropriate. (sc_mkinstalldirs): When whitelisting the 'mkinstalldirs' occurrence in 'lib/Makefile.am', do not look for the exact line number: it is obviously too fragile. --- syntax-checks.mk | 21 ++++++++++++++++----- 1 files changed, 16 insertions(+), 5 deletions(-) diff --git a/syntax-checks.mk b/syntax-checks.mk index 0f01114..13531bd 100644 --- a/syntax-checks.mk +++ b/syntax-checks.mk @@ -207,7 +207,7 @@ sc_no_for_variable_in_macro: sc_mkinstalldirs: @if grep -n 'mkinstalldirs' $(ams) \ | grep -F -v '$$(mkinstalldirs)' \ - | grep -v '^\./lib/Makefile.am:37: *mkinstalldirs \\$$'; \ + | grep -v '^\./lib/Makefile.am:[0-9][0-9]*: *mkinstalldirs \\$$'; \ then \ echo "Found incorrect use of mkinstalldirs in the lines above" 1>&2; \ exit 1; \ @@ -458,6 +458,8 @@ sc_tests_tap_plan: ## exception, POSIX says it can't come from the environment. V, DESTDIR, ## DISTCHECK_CONFIGURE_FLAGS and DISABLE_HARD_ERRORS are exceptions, too, ## as package authors are urged not to initialize them anywhere. +## Finally, 'exp' is used by some ad-hoc checks, where we ensure it's +## ok to override it from the command line. sc_tests_overriding_macros_on_cmdline: @if grep -E '\$$MAKE .*(SHELL=.*=|=.*SHELL=)' $(xtests); then \ echo 'Rewrite "$$MAKE foo=bar SHELL=$$SHELL" as "foo=bar $$MAKE -e SHELL=$$SHELL"' 1>&2; \ @@ -465,15 +467,24 @@ sc_tests_overriding_macros_on_cmdline: exit 1; \ fi # The first s/// tries to account for usages like "$MAKE || st=$?". -# DISTCHECK_CONFIGURE_FLAGS is allowed to contain whitespace in its -# definition, hence the more complex last three substitutions below. - @if sed -e 's/ || .*//' -e 's/ && .*//' \ +# 'DISTCHECK_CONFIGURE_FLAGS' and 'exp' are allowed to contain whitespace in +# their definitions, hence the more complex last three substitutions below. +# Also, the 'make-dryrun.test' is whitelisted, since there we need to +# override variables from the command line in order to cover the expected +# code paths. + @tests=`for t in $(xtests); do \ + case $$t in */make-dryrun.test);; *) echo $$t;; esac; \ + done`; \ + if sed -e 's/ || .*//' -e 's/ && .*//' \ -e 's/ DESTDIR=[^ ]*/ /' -e 's/ SHELL=[^ ]*/ /' \ -e 's/ V=[^ ]*/ /' -e 's/ DISABLE_HARD_ERRORS=[^ ]*/ /' \ -e "s/ DISTCHECK_CONFIGURE_FLAGS='[^']*'/ /" \ -e 's/ DISTCHECK_CONFIGURE_FLAGS="[^"]*"/ /' \ -e 's/ DISTCHECK_CONFIGURE_FLAGS=[^ ]/ /' \ - $(xtests) | grep '\$$MAKE .*='; then \ + -e "s/ exp='[^']*'/ /" \ + -e 's/ exp="[^"]*"/ /' \ + -e 's/ exp=[^ ]/ /' \ + $$tests | grep '\$$MAKE .*='; then \ echo 'Rewrite "$$MAKE foo=bar" as "foo=bar $$MAKE -e" in the above lines,' 1>&2; \ echo 'it is more portable.' 1>&2; \ exit 1; \ -- 1.7.9