a39cf2e3b2
Reviewed-by: erikj
730 lines
24 KiB
Plaintext
730 lines
24 KiB
Plaintext
#
|
|
# Copyright (c) 2014, 2019, 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
|
|
include UtilsForTests.gmk
|
|
|
|
THIS_FILE := $(TOPDIR)/test/make/TestMakeBase.gmk
|
|
DEPS := $(THIS_FILE) \
|
|
$(TOPDIR)/make/common/MakeBase.gmk \
|
|
#
|
|
|
|
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
|
|
EQUALS_EMPTY :=
|
|
|
|
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
|
|
|
|
ifeq ($(call equals, $(EQUALS_EMPTY), $(EQUALS_EMPTY)), )
|
|
$(error The strings >$(EQUALS_EMPTY)< and >$(EQUALS_EMPTY)< are not equal)
|
|
endif
|
|
|
|
ifneq ($(call equals, $(EQUALS_EMPTY), $(EQUALS_VALUE2)), )
|
|
$(error The strings >$(EQUALS_EMPTY)< and >$(EQUALS_VALUE2)< are equal)
|
|
endif
|
|
|
|
ifneq ($(call equals, $(EQUALS_VALUE2), $(EQUALS_EMPTY)), )
|
|
$(error The strings >$(EQUALS_VALUE2)< and >$(EQUALS_EMPTY)< are equal)
|
|
endif
|
|
|
|
################################################################################
|
|
# Test boolean operators
|
|
|
|
$(eval $(call assert-equals, $(call And, true true true ), true))
|
|
$(eval $(call assert-equals, $(call And, true false true ), false))
|
|
$(eval $(call assert-equals, $(call And, false false false ), false))
|
|
$(eval $(call assert-equals, $(call And, true), true))
|
|
$(eval $(call assert-equals, $(call And, false), false))
|
|
$(eval $(call assert-equals, $(call And, ), true))
|
|
|
|
$(eval $(call assert-equals, $(call Or, true true true ), true))
|
|
$(eval $(call assert-equals, $(call Or, true false true ), true))
|
|
$(eval $(call assert-equals, $(call Or, false false false ), false))
|
|
$(eval $(call assert-equals, $(call Or, true), true))
|
|
$(eval $(call assert-equals, $(call Or, false), false))
|
|
$(eval $(call assert-equals, $(call Or, ), false))
|
|
|
|
# We cannot catch $(error) while testing, but you can enable this manually
|
|
# by uncommenting and watch make fails.
|
|
#$(eval $(call assert-equals, $(call And, non-boolean ), $(error ...)))
|
|
#$(eval $(call assert-equals, $(call Or, non-boolean ), $(error ...)))
|
|
|
|
################################################################################
|
|
# Test remove-prefixes
|
|
|
|
$(call AssertEquals, \
|
|
$(call remove-prefixes, pre, prefix postfix), fix postfix, \
|
|
Prefixes not properly removed)
|
|
|
|
$(call AssertEquals, \
|
|
$(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_STRING_1 := 1234
|
|
TEST_STRING_2 := 1234$(NEWLINE)
|
|
TEST_STRING_3 := 1234$(NEWLINE)$(NEWLINE)
|
|
|
|
# Writing a string ending in newline should not add a newline, but if it does
|
|
# not, a newline should be added. We check this by verifying that the size of the
|
|
# file is 5 characters for both test strings.
|
|
TEST_FILE_1 := $(OUTPUT_DIR)/write-file-1
|
|
TEST_FILE_2 := $(OUTPUT_DIR)/write-file-2
|
|
TEST_FILE_3 := $(OUTPUT_DIR)/write-file-3
|
|
|
|
$(call WriteFile, $(TEST_STRING_1), $(TEST_FILE_1))
|
|
$(call WriteFile, $(TEST_STRING_2), $(TEST_FILE_2))
|
|
$(call WriteFile, $(TEST_STRING_3), $(TEST_FILE_3))
|
|
|
|
TEST_FILE_1_SIZE := $(strip $(shell $(WC) -c < $(TEST_FILE_1)))
|
|
TEST_FILE_2_SIZE := $(strip $(shell $(WC) -c < $(TEST_FILE_2)))
|
|
TEST_FILE_3_SIZE := $(strip $(shell $(WC) -c < $(TEST_FILE_3)))
|
|
|
|
ifneq ($(TEST_FILE_1_SIZE), 5)
|
|
$(error Expected file size 5 for WriteFile 1, got $(TEST_FILE_1_SIZE))
|
|
endif
|
|
ifneq ($(TEST_FILE_2_SIZE), 5)
|
|
$(error Expected file size 5 for WriteFile 2, got $(TEST_FILE_2_SIZE))
|
|
endif
|
|
ifneq ($(TEST_FILE_3_SIZE), 5)
|
|
$(error Expected file size 5 for WriteFile 3, got $(TEST_FILE_3_SIZE))
|
|
endif
|
|
|
|
# Also test append (assumes WriteFile works as expected)
|
|
$(call WriteFile, $(TEST_STRING_1), $(TEST_FILE_1))
|
|
$(call AppendFile, $(TEST_STRING_1), $(TEST_FILE_1))
|
|
$(call AppendFile, $(TEST_STRING_1), $(TEST_FILE_1))
|
|
|
|
$(call WriteFile, $(TEST_STRING_2), $(TEST_FILE_2))
|
|
$(call AppendFile, $(TEST_STRING_2), $(TEST_FILE_2))
|
|
$(call AppendFile, $(TEST_STRING_2), $(TEST_FILE_2))
|
|
|
|
$(call WriteFile, $(TEST_STRING_3), $(TEST_FILE_3))
|
|
$(call AppendFile, $(TEST_STRING_3), $(TEST_FILE_3))
|
|
$(call AppendFile, $(TEST_STRING_3), $(TEST_FILE_3))
|
|
|
|
TEST_FILE_1_SIZE := $(strip $(shell $(WC) -c < $(TEST_FILE_1)))
|
|
TEST_FILE_2_SIZE := $(strip $(shell $(WC) -c < $(TEST_FILE_2)))
|
|
TEST_FILE_3_SIZE := $(strip $(shell $(WC) -c < $(TEST_FILE_3)))
|
|
|
|
ifneq ($(TEST_FILE_1_SIZE), 15)
|
|
$(error Expected file size 15 for AppendFile 1, got $(TEST_FILE_1_SIZE))
|
|
endif
|
|
ifneq ($(TEST_FILE_2_SIZE), 15)
|
|
$(error Expected file size 15 for AppendFile 2, got $(TEST_FILE_2_SIZE))
|
|
endif
|
|
ifneq ($(TEST_FILE_3_SIZE), 15)
|
|
$(error Expected file size 15 for AppendFile 3, got $(TEST_FILE_3_SIZE))
|
|
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_SRC_FILE):
|
|
$(MKDIR) -p $(@D)
|
|
$(ECHO) "some string XXX" > $@
|
|
|
|
$(VARDEP_TARGET_FILE): $(VARDEP_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 having the variable be empty, first from scratch, with even
|
|
# the vardep file deleted.
|
|
$(SLEEP_ON_MAC)
|
|
$(RM) $(VARDEP_FLAG_FILE) $(VARDEP_TARGET_FILE) \
|
|
$(call DependOnVariableFileName,VARDEP_TEST_VAR)
|
|
$(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="" $(VARDEP_TARGET_FILE)
|
|
$(PRINTF) "Expecting '': %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`"
|
|
test "some string " = "`$(CAT) $(VARDEP_DIR)/target-file`"
|
|
test -e $(VARDEP_FLAG_FILE)
|
|
#
|
|
# Then rebuild with same empty value, nothing should happen
|
|
$(SLEEP_ON_MAC)
|
|
$(RM) $(VARDEP_FLAG_FILE)
|
|
$(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="" $(VARDEP_TARGET_FILE)
|
|
$(PRINTF) "Expecting '': %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`"
|
|
test "some string " = "`$(CAT) $(VARDEP_DIR)/target-file`"
|
|
test ! -e $(VARDEP_FLAG_FILE)
|
|
#
|
|
# Try setting a value again and verify that the target gets rebuilt
|
|
$(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)
|
|
|
|
# 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))
|
|
$(call AssertEquals, $(VARDEP_RETURN_VALUE), $(VARDEP_VALUE_FILE), \
|
|
Wrong filename returned)
|
|
-include $(VARDEP_VALUE_FILE)
|
|
$(call AssertEquals, $(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)
|
|
$(call AssertEquals, $(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
|
|
|
|
$(call AssertEquals, \
|
|
$(call PathList, $(call PathList, $(PATHLIST_INPUT))), \
|
|
$(call PathList, $(PATHLIST_INPUT)), \
|
|
PathList call not safe for calling twice, \
|
|
)
|
|
|
|
################################################################################
|
|
# Test FindCommonPathPrefix
|
|
|
|
$(call AssertEquals, \
|
|
$(call FindCommonPathPrefix, /foo/bar/baz, /foo/bar/banan), \
|
|
/foo/bar, \
|
|
FindCommonPathPrefix, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call FindCommonPathPrefix, /foo/bar/baz, /foo/bar), \
|
|
/foo/bar, \
|
|
FindCommonPathPrefix, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call FindCommonPathPrefix, /foo/bar/baz, /foo/bar/), \
|
|
/foo/bar, \
|
|
FindCommonPathPrefix, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call FindCommonPathPrefix, foo/bar/baz, foo/bar/banan), \
|
|
foo/bar, \
|
|
FindCommonPathPrefix, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call FindCommonPathPrefix, foo/bar/baz, /foo/bar/banan), \
|
|
, \
|
|
FindCommonPathPrefix, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call FindCommonPathPrefix, /foo/bar/, /foo/bar), \
|
|
/foo/bar, \
|
|
FindCommonPathPrefix, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call FindCommonPathPrefix, /fo oo/bar1/, /fo oo/bar2), \
|
|
/fo oo, \
|
|
FindCommonPathPrefix, \
|
|
)
|
|
|
|
################################################################################
|
|
# RelativePath
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, foo/bar/baz, foo/bar/banan), \
|
|
../baz, \
|
|
RelativePath, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, foo/bar/baz/banan/kung, foo/bar/banan/kung), \
|
|
../../baz/banan/kung, \
|
|
RelativePath, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, /foo/bar/baz/banan/kung, /foo/bar/banan/kung/), \
|
|
../../baz/banan/kung, \
|
|
RelativePath, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, /foo/bar/baz/banan/kung, /foo/bar/baz), \
|
|
banan/kung, \
|
|
RelativePath, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, /foo/bar/baz/banan/kung, /foo/bar/baz/), \
|
|
banan/kung, \
|
|
RelativePath, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, /foo/bar, /foo/bar/baz), \
|
|
.., \
|
|
RelativePath, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, /foo/bar/baz/, /foo/bar/baz), \
|
|
., \
|
|
RelativePath, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, /fo oo/bar/baz/ban an, /fo oo/bar/), \
|
|
baz/ban an, \
|
|
RelativePath, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, /foo/ba rr/ba zz, /foo/ba rr/banan), \
|
|
../ba zz, \
|
|
RelativePath, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(call RelativePath, /foo, /bar), \
|
|
../foo, \
|
|
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, \
|
|
SINGLE_KEYWORDS := APA GURKA SUM, \
|
|
STRING_KEYWORDS := COUNT MANY_WORDS, \
|
|
))
|
|
|
|
$(call AssertEquals, \
|
|
$(KWBASE_APA), \
|
|
banan, \
|
|
ParseKeywordVariable failed to parse APA, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(KWBASE_COUNT), \
|
|
1 2 3 4 5, \
|
|
ParseKeywordVariable failed to parse COUNT, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(KWBASE_SUM), \
|
|
1+2+3+4+5, \
|
|
ParseKeywordVariable failed to parse SUM, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(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, \
|
|
SINGLE_KEYWORDS := APA GURKA SUM, \
|
|
STRING_KEYWORDS := COUNT, \
|
|
))
|
|
|
|
$(call AssertEquals, \
|
|
$(KWBASE_WEIRD_APA), \
|
|
skansen, \
|
|
ParseKeywordVariable failed to overwrite APA, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(KWBASE_WEIRD_GURKA), \
|
|
paprika, \
|
|
ParseKeywordVariable failed to preserve GURKA, \
|
|
)
|
|
|
|
################################################################################
|
|
# Test recursive wildcard
|
|
|
|
A_FOOBAR := $(OUTPUT_DIR)/wildcard/a/foo.bar
|
|
A_B_DOOBAR := $(OUTPUT_DIR)/wildcard/a/b/doo.bar
|
|
A_B_FOOBAR := $(OUTPUT_DIR)/wildcard/a/b/foo.bar
|
|
A_B_FOOBAZ := $(OUTPUT_DIR)/wildcard/a/b/foo.baz
|
|
X_Y_FOOBAR := $(OUTPUT_DIR)/wildcard/x/y/foo.bar
|
|
X_Y_FOOBAZ := $(OUTPUT_DIR)/wildcard/x/y/foo.baz
|
|
X_Y_FOODOLLAR := $(OUTPUT_DIR)/wildcard/x/y/foo$$foo
|
|
|
|
$(call MakeDir, $(OUTPUT_DIR)/wildcard/a/b)
|
|
$(call MakeDir, $(OUTPUT_DIR)/wildcard/x/y)
|
|
$(shell $(TOUCH) $(A_FOOBAR) $(A_B_FOOBAR) $(A_B_DOOBAR) $(A_B_FOOBAZ) \
|
|
$(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(call ShellQuote, $(X_Y_FOODOLLAR)))
|
|
|
|
ifeq ($(RWILDCARD_WORKS), true)
|
|
$(call AssertEquals, \
|
|
$(sort $(call rwildcard, $(OUTPUT_DIR)/wildcard, *.bar)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_FOOBAR) $(X_Y_FOOBAR)), \
|
|
Wrong files returned from rwildcard, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call rwildcard, $(OUTPUT_DIR)/wildcard, doo.*)), \
|
|
$(A_B_DOOBAR), \
|
|
Wrong files returned from rwildcard, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call rwildcard, $(OUTPUT_DIR)/wildcard, *.bar *.baz)), \
|
|
$(sort $(A_B_DOOBAR) $(A_FOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) \
|
|
$(X_Y_FOOBAR) $(X_Y_FOOBAZ)), \
|
|
Wrong files returned from rwildcard, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call WildcardFindFiles, $(OUTPUT_DIR)/wildcard)), \
|
|
$(sort $(A_B_DOOBAR) $(A_FOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) \
|
|
$(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
Wrong files returned from WildcardFindFiles, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call WildcardFindFiles, $(OUTPUT_DIR)/wildcard/x/y)), \
|
|
$(sort $(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
Wrong files returned from WildcardFindFiles, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call WildcardFindFiles, $(OUTPUT_DIR)/wildcard/a/b $(OUTPUT_DIR)/wildcard/x)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) \
|
|
$(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
Wrong files returned from WildcardFindFiles, \
|
|
)
|
|
endif
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call ShellFindFiles, $(OUTPUT_DIR)/wildcard)), \
|
|
$(sort $(A_B_DOOBAR) $(A_FOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) \
|
|
$(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
Wrong files returned from ShellFindFiles, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call ShellFindFiles, $(OUTPUT_DIR)/wildcard/x/y)), \
|
|
$(sort $(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
Wrong files returned from ShellFindFiles, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call ShellFindFiles, $(OUTPUT_DIR)/wildcard/a/b $(OUTPUT_DIR)/wildcard/x)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) \
|
|
$(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
Wrong files returned from ShellFindFiles, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call ShellFindFiles, $(OUTPUT_DIR)/wildcard, *.bar)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_FOOBAR) $(X_Y_FOOBAR)), \
|
|
Wrong files returned from ShellFindFiles, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call ShellFindFiles, $(OUTPUT_DIR)/wildcard, doo.*)), \
|
|
$(A_B_DOOBAR), \
|
|
Wrong files returned from ShellFindFiles, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call ShellFindFiles, $(OUTPUT_DIR)/wildcard, *.bar *.baz)), \
|
|
$(sort $(A_B_DOOBAR) $(A_FOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) \
|
|
$(X_Y_FOOBAR) $(X_Y_FOOBAZ)), \
|
|
Wrong files returned from ShellFindFiles, \
|
|
)
|
|
|
|
################################################################################
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call CacheFindFiles, $(OUTPUT_DIR)/wildcard/a/b)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ)), \
|
|
CacheFindFiles test 1, \
|
|
)
|
|
$(call FillFindCache, $(OUTPUT_DIR)/wildcard/a/b)
|
|
$(call AssertEquals, \
|
|
$(CacheFindFiles_CACHED_DIRS), $(OUTPUT_DIR)/wildcard/a/b, \
|
|
Wrong files in find cache dirs, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(sort $(CacheFindFiles_CACHED_FILES)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ)), \
|
|
Wrong files in find cache files, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(sort $(call CacheFindFiles, $(OUTPUT_DIR)/wildcard/a/b)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ)), \
|
|
CacheFindFiles test 1, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call CacheFindFiles, $(OUTPUT_DIR)/wildcard/a)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) $(A_FOOBAR)), \
|
|
CacheFindFiles test 2, \
|
|
)
|
|
$(call FillFindCache, $(OUTPUT_DIR)/wildcard/a)
|
|
$(call AssertEquals, \
|
|
$(CacheFindFiles_CACHED_DIRS), \
|
|
$(OUTPUT_DIR)/wildcard/a/b $(OUTPUT_DIR)/wildcard/a, \
|
|
Wrong files in find cache dirs, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(sort $(CacheFindFiles_CACHED_FILES)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) $(A_FOOBAR)), \
|
|
Wrong files in find cache files, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(words $(CacheFindFiles_CACHED_FILES)), 4, \
|
|
Wrong files in find cache files >$(CacheFindFiles_CACHED_FILES)<, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(sort $(call CacheFindFiles, $(OUTPUT_DIR)/wildcard/a)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) $(A_FOOBAR)), \
|
|
CacheFindFiles test 2, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call CacheFindFiles, $(OUTPUT_DIR)/wildcard/x)), \
|
|
$(sort $(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
CacheFindFiles test 3, \
|
|
)
|
|
$(call FillFindCache, $(OUTPUT_DIR)/wildcard/x)
|
|
$(call AssertEquals, \
|
|
$(CacheFindFiles_CACHED_DIRS), \
|
|
$(OUTPUT_DIR)/wildcard/a/b $(OUTPUT_DIR)/wildcard/a $(OUTPUT_DIR)/wildcard/x, \
|
|
Wrong files in find cache dirs, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(sort $(CacheFindFiles_CACHED_FILES)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) $(A_FOOBAR) \
|
|
$(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
Wrong files in find cache files, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(words $(CacheFindFiles_CACHED_FILES)), 7, \
|
|
Wrong files in find cache files, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(sort $(call CacheFindFiles, $(OUTPUT_DIR)/wildcard/x)), \
|
|
$(sort $(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
CacheFindFiles test 3, \
|
|
)
|
|
|
|
$(call AssertEquals, \
|
|
$(sort $(call CacheFindFiles, $(OUTPUT_DIR)/wildcard/x/y)), \
|
|
$(sort $(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
CacheFindFiles test 4, \
|
|
)
|
|
$(call FillFindCache, $(OUTPUT_DIR)/wildcard/x/y)
|
|
$(call AssertEquals, \
|
|
$(CacheFindFiles_CACHED_DIRS), \
|
|
$(OUTPUT_DIR)/wildcard/a/b $(OUTPUT_DIR)/wildcard/a $(OUTPUT_DIR)/wildcard/x, \
|
|
Wrong files in find cache dirs, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(sort $(CacheFindFiles_CACHED_FILES)), \
|
|
$(sort $(A_B_DOOBAR) $(A_B_FOOBAR) $(A_B_FOOBAZ) $(A_FOOBAR) \
|
|
$(X_Y_FOOBAR) $(X_Y_FOOBAZ) $(X_Y_FOODOLLAR)), \
|
|
Wrong files in find cache files, \
|
|
)
|
|
$(call AssertEquals, \
|
|
$(words $(CacheFindFiles_CACHED_FILES)), 7, \
|
|
Wrong files in find cache files, \
|
|
)
|
|
|
|
################################################################################
|
|
|
|
all: $(TEST_TARGETS)
|