[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Automake-NG] [FYI 2/2] dry run: use $(MFLAGS), not $(MAKEFLAGS), to det
From: |
Stefano Lattarini |
Subject: |
[Automake-NG] [FYI 2/2] dry run: use $(MFLAGS), not $(MAKEFLAGS), to determine whether running dry |
Date: |
Wed, 3 Oct 2012 10:19:52 +0200 |
$(MFLAGS) does not containing the command line variable definitions, and
it always begins with a hyphen unless it is empty (MAKEFLAGS begins with
a hyphen only when it begins with an option that has no single-letter
version, such as '--warn-undefined-variables'). This allows use to make
stricter assumptions on its content, thus simplifying the implementation
of ...
* lib/am/header-vars.am (am__make_dryrun): ... this macro.
* t/make-dryrun.tap: Simplify accordingly.
Signed-off-by: Stefano Lattarini <address@hidden>
---
lib/am/header-vars.mk | 17 +++++------------
t/make-dryrun.tap | 33 ++-------------------------------
2 files changed, 7 insertions(+), 43 deletions(-)
diff --git a/lib/am/header-vars.mk b/lib/am/header-vars.mk
index 27699ba..c067bdf 100644
--- a/lib/am/header-vars.mk
+++ b/lib/am/header-vars.mk
@@ -160,19 +160,12 @@ DESTDIR ?=
# Tell whether make is running in "dry mode". It is either 'true' or
# 'false', so that it can be easily used in shell code as well as in
-# GNU make conditionals.
-# If we run "make TESTS='snooze nap'", GNU make will export MAKEFLAGS to
-# "TESTS=foo\ nap", so that the builtins operating on word-split lists
-# would see a "make flag" equal to "nap" when analyzing $(MAKEFLAGS), and
-# would wrongly misinterpret that as and indication that make is running
-# in dry mode. This has already happened in practice. So we need the
-# hack with $(subst \ , ...).
+# GNU make conditionals. Use $(MFLAGS), not $(MAKEFLAGS), since the
+# former doesn't containing the command line variable definitions, and
+# it always begins with a hyphen unless it is empty, assumptions that
+# allow a simpler implementation.
am.make.dry-run := \
- $(strip $(if $(strip \
- $(foreach v, $(subst \ ,,$(strip $(MAKEFLAGS))), \
- $(if $(or $(findstring =,$v),$(filter --%,$v)),, \
- $(findstring n,$v)))), \
- true, false))
+ $(if $(findstring n,$(filter-out --%,$(MFLAGS))),true,false)
am.util.strip-first-word = $(wordlist 2,$(words $(1)),$(1))
am.util.strip-last-word = $(wordlist 2,$(words $(1)),dummy $(1))
diff --git a/t/make-dryrun.tap b/t/make-dryrun.tap
index 83f8862..487681b 100755
--- a/t/make-dryrun.tap
+++ b/t/make-dryrun.tap
@@ -18,7 +18,7 @@
. ./defs || exit 1
-plan_ 32
+plan_ 14
echo AC_OUTPUT >> configure.ac
@@ -26,18 +26,13 @@ cat > Makefile.am <<'END'
all:
@echo "Target '$@' should never run" >&2; exit 1;
notdry-plain:
- @echo ":: $$MAKEFLAGS ::" # For debugging.
- @$(warning << $(MAKEFLAGS) >>) # Likewise.
$(am.make.dry-run) && exit 1; exit 0
notdry-recursive:
$(MAKE) notdry-plain
dry-plain:
- address@hidden ":: $$MAKEFLAGS ::" # For debugging.
- address@hidden(warning << $(MAKEFLAGS) >>) # Likewise.
+$(am.make.dry-run) || exit 1; echo ok > from-dry-mode
dry-recursive:
$(MAKE) dry-plain
-foo = $(error foo should not be expanded)
END
$ACLOCAL || fatal_ "aclocal failed"
@@ -57,15 +52,11 @@ check_no_dryrun ()
cnt=1
check_no_dryrun
+check_no_dryrun -k
# Test against a known regression. This was especially heinous, since
# make running in normal mode was sometimes mistaken for make running
# in dry mode.
-check_no_dryrun TESTS="n1.test n2.test"
-check_no_dryrun TESTS="n1 n2"
-check_no_dryrun TESTS="n1 n2"
-check_no_dryrun FOOFLAGS="-n -n -knf2 n --none -n"
-check_no_dryrun MYFLAGS="-n --dryrun -n --dry-run -n"
mkdir n ./--dry-run
check_no_dryrun -I n
check_no_dryrun -I --dry-run
@@ -92,24 +83,4 @@ check_dryrun --dry-run -k
# ----------------------------------------------------------------------
-# Test for when shell metacharacters or backslashes are in $(MAKEFLAGS).
-
-check_metachars ()
-{
- for kind in plain recursive; do
- command_ok_ "wet-run, $kind, with shell metachars ($cnt)" \
- $MAKE notdry-$kind ${1+"$@"}
- done
- cnt=$(($cnt + 1))
-}
-cnt=1
-
-check_metachars MYFLAGS="-n \"n\" '-n' --none -n"
-check_metachars MYFLAGS='-knf2\ n\ \\n'
-check_metachars MYFLAGS="(&) | ; \" \` '"
-check_metachars MYFLAGS=" ' # ' "
-check_metachars MYFLAGS='$(foo)'
-
-# ----------------------------------------------------------------------
-
:
--
1.7.12.317.g1c54b74