summaryrefslogtreecommitdiff
path: root/make
diff options
context:
space:
mode:
Diffstat (limited to 'make')
-rw-r--r--make/subdir.mk17
1 files changed, 13 insertions, 4 deletions
diff --git a/make/subdir.mk b/make/subdir.mk
index ccde0dc8d..cf767f876 100644
--- a/make/subdir.mk
+++ b/make/subdir.mk
@@ -54,6 +54,11 @@ ifneq ($(DEBUGMAKE),)
$$(info MAKE: $(Dir): Processing subdirectory)
endif
+# Construct the variable key for this directory.
+$(call Set,DirKey,SubDir.$(subst .,,$(subst /,__,$(1))))
+$(call Append,SubDirKeys,$(DirKey))
+$(call Set,$(DirKey).Dir,$(Dir))
+
# Reset subdirectory specific variables to sentinel value.
$$(foreach var,$$(RequiredSubdirVariables) $$(OptionalSubdirVariables),\
$$(call Set,$$(var),UNDEFINED))
@@ -63,7 +68,7 @@ include $(1)/Makefile.mk
ifeq ($(DEBUGMAKE),2)
$$(foreach var,$(RequiredSubdirVariables) $(OptionalSubdirVariables),\
- $$(if $$(call strneq UNDEFINED,$$($$(var))), \
+ $$(if $$(call strneq,UNDEFINED,$$($$(var))), \
$$(info MAKE: $(Dir): $$(var) is defined), \
$$(info MAKE: $(Dir): $$(var) is undefined)))
endif
@@ -71,16 +76,20 @@ endif
# Check for undefined required variables, and unset sentinel value from optional
# variables.
$$(foreach var,$(RequiredSubdirVariables),\
- $$(if $$(call strneq UNDEFINED,$$($$(var))), \
+ $$(if $$(call strneq,UNDEFINED,$$($$(var))),, \
$$(error $(Dir): variable '$$(var)' was not undefined)))
$$(foreach var,$(OptionalSubdirVariables),\
- $$(if $$(call strneq UNDEFINED,$$($$(var))),, \
+ $$(if $$(call strneq,UNDEFINED,$$($$(var))),, \
$$(call Set,$$(var),)))
+# Collect all subdirectory variables for subsequent use.
+$$(foreach var,$(RequiredSubdirVariables) $(OptionalSubdirVariables),\
+ $$(call Set,$(DirKey).$$(var),$$($$(var))))
+
# Recurse.
include make/subdir.mk
-# Restore directory variable.
+# Restore directory variable, for cleanliness.
$$(call Set,Dir,$(1))
ifneq ($(DEBUGMAKE),)