--- a/make/common/MakeBase.gmk Tue Sep 15 07:47:44 2015 -0700
+++ b/make/common/MakeBase.gmk Tue Sep 15 11:47:50 2015 -0700
@@ -567,16 +567,22 @@
endif
################################################################################
-# Convenience functions for working around make's limitations with $(filter ).
-containing = \
- $(strip $(foreach v,$(strip $2),$(if $(findstring $(strip $1),$v),$v)))
-not-containing = \
- $(strip $(foreach v,$(strip $2),$(if $(findstring $(strip $1),$v),,$v)))
-
# Filter out duplicate sub strings while preserving order. Keeps the first occurance.
uniq = \
$(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
+# Returns all whitespace-separated words in $2 where at least one of the
+# whitespace-separated words in $1 is a substring.
+containing = \
+ $(strip \
+ $(foreach v,$(strip $2),\
+ $(call uniq,$(foreach p,$(strip $1),$(if $(findstring $p,$v),$v)))))
+
+# Returns all whitespace-separated words in $2 where none of the
+# whitespace-separated words in $1 is a substring.
+not-containing = \
+ $(strip $(filter-out $(call containing,$1,$2),$2))
+
# Return a list of all string elements that are duplicated in $1.
dups = \
$(strip $(foreach v, $(sort $1), $(if $(filter-out 1, \
--- a/test/make/TestMakeBase.gmk Tue Sep 15 07:47:44 2015 -0700
+++ b/test/make/TestMakeBase.gmk Tue Sep 15 11:47:50 2015 -0700
@@ -73,6 +73,37 @@
TEST_TARGETS += $(ESCAPE_DOLLAR_DIR)/_escape_dollar
################################################################################
+# Test containing and not-containing
+
+CONT_LIST := foo bar baz foobar foobaz
+
+# Param 1 - string to look for
+# Param 2 - expected result
+define TestContaining
+ value := $$(call containing, $1, $(CONT_LIST))
+ ifneq ($$(value), $2)
+ $$(info (call containing, $1, $(CONT_LIST)))
+ $$(error result >$$(value)<, expected >$2<)
+ endif
+endef
+
+$(eval $(call TestContaining,bar,bar foobar))
+$(eval $(call TestContaining,foo bar,foo bar foobar foobaz))
+
+# Param 1 - string to look for
+# Param 2 - expected result
+define TestNotContaining
+ value := $$(call not-containing, $1, $(CONT_LIST))
+ ifneq ($$(value), $2)
+ $$(info (call not-containing, $1, $(CONT_LIST)))
+ $$(error result >$$(value)<, expected >$2<)
+ endif
+endef
+
+$(eval $(call TestNotContaining,bar,foo baz foobaz))
+$(eval $(call TestNotContaining,foo bar,baz))
+
+################################################################################
# Test Equals
EQUALS_VALUE1 := value1$(SPACE)