8140484: Vardeps broken when variable value contains '$'

Reviewed-by: tbell
This commit is contained in:
Erik Joelsson 2015-10-27 13:48:21 +01:00
parent 2cec07979a
commit 039a5edf35
2 changed files with 13 additions and 8 deletions
make/common
test/make

@ -640,7 +640,8 @@ DependOnVariableHelper = \
$(if $(findstring $(LOG_LEVEL), trace), \
$(info NewVariable $1: >$(strip $($1))<) \
$(info OldVariable $1: >$(strip $($1_old))<)) \
$(call WriteFile, $1_old:=$($1), $(call DependOnVariableFileName, $1, $2))) \
$(call WriteFile, $1_old:=$(call DoubleDollar,$($1)), \
$(call DependOnVariableFileName, $1, $2))) \
$(call DependOnVariableFileName, $1, $2) \
)

@ -207,6 +207,12 @@ test-vardep:
test ! -e $(VARDEP_FLAG_FILE)
$(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=" value3 foo" $(VARDEP_TARGET_FILE)
test ! -e $(VARDEP_FLAG_FILE)
#
# Test including some problematic characters
$(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR='value4 \$$$$ORIGIN' $(VARDEP_TARGET_FILE)
$(RM) $(VARDEP_FLAG_FILE)
$(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR='value4 \$$$$ORIGIN' $(VARDEP_TARGET_FILE)
test ! -e $(VARDEP_FLAG_FILE)
# Test specifying a specific value file to store variable in
VARDEP_VALUE_FILE := $(VARDEP_DIR)/value-file
@ -215,17 +221,15 @@ VARDEP_TEST_VAR2 := value3
VARDEP_RETURN_VALUE := $(call DependOnVariable, VARDEP_TEST_VAR2, $(VARDEP_VALUE_FILE))
$(eval $(call assert-equals, $(VARDEP_RETURN_VALUE), $(VARDEP_VALUE_FILE), \
Wrong filename returned))
VARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE))
$(eval $(call assert-equals, $(VARDEP_FILE_CONTENTS), \
VARDEP_TEST_VAR2_old:=$(VARDEP_TEST_VAR2), \
-include $(VARDEP_VALUE_FILE)
$(eval $(call assert-equals, $(VARDEP_TEST_VAR2_old), $(VARDEP_TEST_VAR2), \
Wrong contents in vardeps file))
# Test with a variable value containing some problematic characters
VARDEP_TEST_VAR3 := foo '""' "''" bar
VARDEP_TEST_VAR3 := foo '""' "''" bar \$$ORIGIN
VARDEP_VALUE_FILE := $(call DependOnVariable, VARDEP_TEST_VAR3)
VARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE))
$(eval $(call assert-equals, $(VARDEP_FILE_CONTENTS), \
VARDEP_TEST_VAR3_old:=$(VARDEP_TEST_VAR3), \
-include $(VARDEP_VALUE_FILE)
$(eval $(call assert-equals, $(VARDEP_TEST_VAR3_old), $(VARDEP_TEST_VAR3), \
Wrong contents in vardep file))
TEST_TARGETS += test-vardep