Mercurial > hg > jdk9-shenandoah
changeset 1632:382d23edebb6
8136383: Improve make utilities containing and not-containing
Reviewed-by: ihse
author | erikj |
---|---|
date | Tue, 15 Sep 2015 18:00:21 +0200 |
parents | 42b56d1f4185 |
children | c6862c043f76 |
files | make/common/MakeBase.gmk test/make/TestMakeBase.gmk |
diffstat | 2 files changed, 43 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/make/common/MakeBase.gmk Fri Sep 11 12:59:45 2015 -0700 +++ b/make/common/MakeBase.gmk Tue Sep 15 18:00:21 2015 +0200 @@ -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 Fri Sep 11 12:59:45 2015 -0700 +++ b/test/make/TestMakeBase.gmk Tue Sep 15 18:00:21 2015 +0200 @@ -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)