# HG changeset patch # User amurillo # Date 1442342870 25200 # Node ID c6862c043f76cb90d848bf74e8f71457d2109c08 # Parent b45c22d42940c7619141ebf7820e48cd8ad17dd9# Parent 382d23edebb6d465a1673b64fabc9b9b580d1d41 Merge diff -r b45c22d42940 -r c6862c043f76 make/common/MakeBase.gmk --- 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, \ diff -r b45c22d42940 -r c6862c043f76 test/make/TestMakeBase.gmk --- 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)