aboutsummaryrefslogtreecommitdiff
path: root/unit-tests/recursive.mk
diff options
context:
space:
mode:
Diffstat (limited to 'unit-tests/recursive.mk')
-rw-r--r--unit-tests/recursive.mk37
1 files changed, 37 insertions, 0 deletions
diff --git a/unit-tests/recursive.mk b/unit-tests/recursive.mk
new file mode 100644
index 000000000000..bc5a2817b333
--- /dev/null
+++ b/unit-tests/recursive.mk
@@ -0,0 +1,37 @@
+# $NetBSD: recursive.mk,v 1.2 2020/08/06 05:52:45 rillig Exp $
+#
+# In -dL mode, a variable may get expanded before it makes sense.
+# This would stop make from doing anything since the "recursive" error
+# is fatal and exits immediately.
+#
+# The purpose of evaluating that variable early was just to detect
+# whether there are unclosed variables. It might be enough to parse the
+# variable value without VARE_WANTRES for that purpose.
+#
+# Seen in pkgsrc/x11/libXfixes, and probably many more package that use
+# GNU Automake.
+
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 =
+
+# On 2020-08-06, make reported: "Variable am__v_lt_ is recursive."
+libXfixes_la_LINK = ... $(AM_V_lt) ...
+
+# somewhere later ...
+AM_DEFAULT_VERBOSITY = 1
+
+
+# The purpose of the -dL flag is to detect unclosed variables. This
+# can be achieved by just parsing the variable and not evaluating it.
+#
+# When the variable is only parsed but not evaluated, bugs in nested
+# variables are not discovered. But these are hard to produce anyway,
+# therefore that's acceptable. In most practical cases, the missing
+# brace would be detected directly in the line where it is produced.
+MISSING_BRACE_INDIRECT:= ${:U\${MISSING_BRACE}
+UNCLOSED = $(MISSING_PAREN
+UNCLOSED = ${MISSING_BRACE
+UNCLOSED = ${MISSING_BRACE_INDIRECT}
+