diff options
Diffstat (limited to 'test/make/TestMakeBase.gmk')
-rw-r--r-- | test/make/TestMakeBase.gmk | 400 |
1 files changed, 400 insertions, 0 deletions
diff --git a/test/make/TestMakeBase.gmk b/test/make/TestMakeBase.gmk new file mode 100644 index 0000000..60a7a6a --- /dev/null +++ b/test/make/TestMakeBase.gmk @@ -0,0 +1,400 @@ +# +# Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +default: all + +include $(SPEC) +include MakeBase.gmk + +THIS_FILE := $(SRC_ROOT)/test/make/TestMakeBase.gmk +DEPS := $(THIS_FILE) \ + $(SRC_ROOT)/make/common/MakeBase.gmk \ + # + +# Assert two strings are equal +# 1 - Tested value +# 2 - Exepected value +# 3 - Error message +define assert-equals + ifneq ($$(strip $1),$$(strip $2)) + $$(error $3 - Expected >$$(strip $2)< - Got >$$(strip $1)<) + endif +endef + +# On macosx, file system timestamps only have 1 second resultion so must add +# sleeps to properly test dependencies. +ifeq ($(OPENJDK_BUILD_OS), macosx) + SLEEP_ON_MAC := sleep 1 +endif + +OUTPUT_DIR := $(TESTMAKE_OUTPUTDIR)/make-base +$(call MakeDir, $(OUTPUT_DIR)) + +################################################################################ +# Escape $ +ifneq ($(call EscapeDollar, foo$$bar), foo\$$bar) + $(error EscapeDollar failed $(call EscapeDollar, foo$$bar) foo\$$bar) +endif + +ESCAPE_DOLLAR_DIR := $(OUTPUT_DIR)/escape-dollar + +$(ESCAPE_DOLLAR_DIR)/_escape_dollar: $(DEPS) + $(RM) -r $(@D) + $(MKDIR) -p $(@D) + $(ECHO) foo\$$bar > $(@D)/file1 + $(ECHO) $(call EscapeDollar, foo$$bar) > $(@D)/file2 + $(ECHO) $(call EscapeDollar, foo\$$bar) > $(@D)/file3 + $(DIFF) $(@D)/file1 $(@D)/file2 + $(DIFF) $(@D)/file1 $(@D)/file3 + $(TOUCH) $@ + +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) +EQUALS_VALUE2 := value2 + +ifneq ($(call equals, $(EQUALS_VALUE1), $(EQUALS_VALUE2)), ) + $(error The strings >$(EQUALS_VALUE1)< and >$(EQUALS_VALUE2)< are equal) +endif + +ifeq ($(call equals, $(EQUALS_VALUE1), $(EQUALS_VALUE1)), ) + $(error The strings >$(EQUALS_VALUE1)< and >$(EQUALS_VALUE1)< are not equal) +endif + +################################################################################ +# Test remove-prefixes + +$(eval $(call assert-equals, \ + $(call remove-prefixes, pre, prefix postfix), fix postfix, \ + Prefixes not properly removed)) + +$(eval $(call assert-equals, \ + $(call remove-prefixes, pre post, prefix postfix), fix fix, \ + Prefixes not properly removed)) + +################################################################################ +# Test ShellQuote + +SHELL_QUOTE_VALUE := foo '""' "''" bar +SHELL_QUOTE_RESULT := $(shell $(ECHO) $(call ShellQuote, \ + $(SHELL_QUOTE_VALUE))) + +ifneq ($(SHELL_QUOTE_VALUE), $(SHELL_QUOTE_RESULT)) + $(error Expected: >$(SHELL_QUOTE_VALUE)< - Result: >$(SHELL_QUOTE_RESULT)<) +endif + +################################################################################ +# Test read and write to file + +READ_WRITE_FILE := $(OUTPUT_DIR)/read-write +READ_WRITE_VALUE := foo '""' "''" \t\n\\ bar +$(call WriteFile, $(READ_WRITE_VALUE), $(READ_WRITE_FILE)) +READ_WRITE_RESULT := $(call ReadFile, $(READ_WRITE_FILE)) + +ifneq ($(READ_WRITE_VALUE), $(READ_WRITE_RESULT)) + $(error Expected: >$(READ_WRITE_VALUE)< - Result: >$(READ_WRITE_RESULT)<) +endif + +################################################################################ +# Test creating dependencies on make variables + +VARDEP_DIR := $(OUTPUT_DIR)/vardep +VARDEP_SRC_FILE := $(VARDEP_DIR)/src-file +VARDEP_TARGET_FILE := $(VARDEP_DIR)/target-file +VARDEP_FLAG_FILE := $(VARDEP_DIR)/flag-file + +$(VARDEP_DIR)/src-file: + $(MKDIR) -p $(@D) + $(ECHO) "some string XXX" > $@ + +$(VARDEP_TARGET_FILE): $(VARDEP_DIR)/src-file \ + $(call DependOnVariable, VARDEP_TEST_VAR) + $(MKDIR) -p $(@D) + $(SED) -e 's/XXX/$(VARDEP_TEST_VAR)/g' $< > $@ + $(TOUCH) $(VARDEP_FLAG_FILE) + +test-vardep: + $(RM) $(VARDEP_SRC_FILE) $(VARDEP_TARGET_FILE) $(VARDEP_FLAG_FILE) + # + # Simply create the target file and verify that it has the correct value + # + $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value1 $(VARDEP_TARGET_FILE) + $(PRINTF) "Expecting value1: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" + test "some string value1" = "`$(CAT) $(VARDEP_DIR)/target-file`" + test -e $(VARDEP_FLAG_FILE) + # + # Make the target file again and verify that the value is updated with + # the new value + # + $(SLEEP_ON_MAC) + $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value2 $(VARDEP_TARGET_FILE) + $(PRINTF) "Expecting value2: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" + test "some string value2" = "`$(CAT) $(VARDEP_DIR)/target-file`" + test -e $(VARDEP_FLAG_FILE) + # + # Make the target again with the same value and verify that the recipe + # was never run by checking that the flag file was not recreated + # + $(SLEEP_ON_MAC) + $(RM) $(VARDEP_FLAG_FILE) + $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value2 $(VARDEP_TARGET_FILE) + $(PRINTF) "Expecting value2: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" + test "some string value2" = "`$(CAT) $(VARDEP_DIR)/target-file`" + test ! -e $(VARDEP_FLAG_FILE) + # + # Test running with spaces at the end and the middle of the value + # and verify that the file isn't rewritten the second time + # + $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="value3 foo " $(VARDEP_TARGET_FILE) + $(RM) $(VARDEP_FLAG_FILE) + $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="value3 foo" $(VARDEP_TARGET_FILE) + 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 +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)) +-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 \$$ORIGIN &\#x00a9 +VARDEP_VALUE_FILE := $(call DependOnVariable, VARDEP_TEST_VAR3) +-include $(VARDEP_VALUE_FILE) +$(eval $(call assert-equals, $(call EscapeHash,$(VARDEP_TEST_VAR3_old)), \ + $(call EscapeHash,$(VARDEP_TEST_VAR3)), \ + Wrong contents in vardep file)) + +TEST_TARGETS += test-vardep + +################################################################################ +# Test sequence + +ifneq ($(call sequence, 1, 1), 1) + $(error Sequence 1, 1 should be "1", but was $(call sequence, 1, 1)) +endif + +ifneq ($(call sequence, 2, 3), 2 3) + $(error Sequence 2, 3 should be "2 3", but was $(call sequence, 2, 3)) +endif + +ifneq ($(call sequence, 4, 9), 4 5 6 7 8 9) + $(error Sequence 4, 9 should be "4 5 6 7 8 9", but was $(call sequence, 4, 9)) +endif + +ifneq ($(call sequence, 5, 15), 5 6 7 8 9 10 11 12 13 14 15) + $(error Sequence 5, 15 should be "5 6 7 8 9 10 11 12 13 14 15", \ + but was $(call sequence, 5, 15)) +endif + +################################################################################ +# Test that PathList is safe when called multiple nested times. + +PATHLIST_INPUT := foo bar baz + +$(eval $(call assert-equals, \ + $(call PathList, $(call PathList, $(PATHLIST_INPUT))), \ + $(call PathList, $(PATHLIST_INPUT)), \ + PathList call not safe for calling twice)) + +################################################################################ +# Test FindCommonPathPrefix + +$(eval $(call assert-equals, \ + $(call FindCommonPathPrefix, /foo/bar/baz, /foo/bar/banan), \ + /foo/bar, \ + FindCommonPathPrefix, \ +)) + +$(eval $(call assert-equals, \ + $(call FindCommonPathPrefix, /foo/bar/baz, /foo/bar), \ + /foo/bar, \ + FindCommonPathPrefix, \ +)) + +$(eval $(call assert-equals, \ + $(call FindCommonPathPrefix, /foo/bar/baz, /foo/bar/), \ + /foo/bar, \ + FindCommonPathPrefix, \ +)) + +$(eval $(call assert-equals, \ + $(call FindCommonPathPrefix, foo/bar/baz, foo/bar/banan), \ + foo/bar, \ + FindCommonPathPrefix, \ +)) + +$(eval $(call assert-equals, \ + $(call FindCommonPathPrefix, foo/bar/baz, /foo/bar/banan), \ + , \ + FindCommonPathPrefix, \ +)) + +################################################################################ +# DirToDotDot + +$(eval $(call assert-equals, \ + $(call DirToDotDot, foo/bar/baz/), \ + ../../.., \ + DirToDotDot, \ +)) + +$(eval $(call assert-equals, \ + $(call DirToDotDot, foo/bar), \ + ../.., \ + DirToDotDot, \ +)) + +$(eval $(call assert-equals, \ + $(call DirToDotDot, /foo), \ + .., \ + DirToDotDot, \ +)) + +################################################################################ +# RelativePath + +$(eval $(call assert-equals, \ + $(call RelativePath, foo/bar/baz, foo/bar/banan), \ + ../baz, \ + RelativePath, \ +)) + +$(eval $(call assert-equals, \ + $(call RelativePath, foo/bar/baz/banan/kung, foo/bar/banan/kung), \ + ../../baz/banan/kung, \ + RelativePath, \ +)) + +$(eval $(call assert-equals, \ + $(call RelativePath, /foo/bar/baz/banan/kung, /foo/bar/banan/kung/), \ + ../../baz/banan/kung, \ + RelativePath, \ +)) + +################################################################################ +# Test ParseKeywordVariable + +KWBASE := APA=banan;GURKA=tomat;COUNT=1%202%203%204%205;SUM=1+2+3+4+5;MANY_WORDS=I have the best words. + +$(eval $(call ParseKeywordVariable, KWBASE, \ + KEYWORDS := APA GURKA SUM, \ + STRING_KEYWORDS := COUNT MANY_WORDS, \ +)) + +$(eval $(call assert-equals, \ + $(KWBASE_APA), \ + banan, \ + ParseKeywordVariable failed to parse APA, \ +)) + +$(eval $(call assert-equals, \ + $(KWBASE_COUNT), \ + 1 2 3 4 5, \ + ParseKeywordVariable failed to parse COUNT, \ +)) + +$(eval $(call assert-equals, \ + $(KWBASE_SUM), \ + 1+2+3+4+5, \ + ParseKeywordVariable failed to parse SUM, \ +)) + +$(eval $(call assert-equals, \ + $(KWBASE_MANY_WORDS), \ + I have the best words., \ + ParseKeywordVariable failed to parse MANY_WORDS, \ +)) + +# Simulate variable set from command line by using "override" +override KWBASE_WEIRD_GURKA := paprika +KWBASE_WEIRD := ;;APA=banan;;;GURKA=apelsin;APA=skansen;; + +$(eval $(call ParseKeywordVariable, KWBASE_WEIRD, \ + KEYWORDS := APA GURKA SUM, \ + STRING_KEYWORDS := COUNT, \ +)) + +$(eval $(call assert-equals, \ + $(KWBASE_WEIRD_APA), \ + skansen, \ + ParseKeywordVariable failed to overwrite APA, \ +)) + +$(eval $(call assert-equals, \ + $(KWBASE_WEIRD_GURKA), \ + paprika, \ + ParseKeywordVariable failed to preserve GURKA, \ +)) + +################################################################################ + +all: $(TEST_TARGETS) |