1 # 2 # Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 # 5 # This code is free software; you can redistribute it and/or modify it 6 # under the terms of the GNU General Public License version 2 only, as 7 # published by the Free Software Foundation. Oracle designates this 8 # particular file as subject to the "Classpath" exception as provided 9 # by Oracle in the LICENSE file that accompanied this code. 10 # 11 # This code is distributed in the hope that it will be useful, but WITHOUT 12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 # version 2 for more details (a copy is included in the LICENSE file that 15 # accompanied this code). 16 # 17 # You should have received a copy of the GNU General Public License version 18 # 2 along with this work; if not, write to the Free Software Foundation, 19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 # 21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 # or visit www.oracle.com if you need additional information or have any 23 # questions. 24 # 25 26 default: all 27 28 include $(SPEC) 29 include MakeBase.gmk 30 31 THIS_FILE := $(SRC_ROOT)/test/make/TestMakeBase.gmk 32 DEPS := $(THIS_FILE) \ 33 $(SRC_ROOT)/make/common/MakeBase.gmk \ 34 # 35 36 # Assert two strings are equal 37 # 1 - Tested value 38 # 2 - Exepected value 39 # 3 - Error message 40 define assert-equals 41 ifneq ($$(strip $1),$$(strip $2)) 42 $$(error $3 - Expected >$$(strip $2)< - Got >$$(strip $1)<) 43 endif 44 endef 45 46 # On macosx, file system timestamps only have 1 second resultion so must add 47 # sleeps to properly test dependencies. 48 ifeq ($(OPENJDK_BUILD_OS), macosx) 49 SLEEP_ON_MAC := sleep 1 50 endif 51 52 OUTPUT_DIR := $(TESTMAKE_OUTPUTDIR)/make-base 53 $(call MakeDir, $(OUTPUT_DIR)) 54 55 ################################################################################ 56 # Escape $ 57 ifneq ($(call EscapeDollar, foo$$bar), foo\$$bar) 58 $(error EscapeDollar failed $(call EscapeDollar, foo$$bar) foo\$$bar) 59 endif 60 61 ESCAPE_DOLLAR_DIR := $(OUTPUT_DIR)/escape-dollar 62 63 $(ESCAPE_DOLLAR_DIR)/_escape_dollar: $(DEPS) 64 $(RM) -r $(@D) 65 $(MKDIR) -p $(@D) 66 $(ECHO) foo\$$bar > $(@D)/file1 67 $(ECHO) $(call EscapeDollar, foo$$bar) > $(@D)/file2 68 $(ECHO) $(call EscapeDollar, foo\$$bar) > $(@D)/file3 69 $(DIFF) $(@D)/file1 $(@D)/file2 70 $(DIFF) $(@D)/file1 $(@D)/file3 71 $(TOUCH) $@ 72 73 TEST_TARGETS += $(ESCAPE_DOLLAR_DIR)/_escape_dollar 74 75 ################################################################################ 76 # Test Equals 77 78 EQUALS_VALUE1 := value1$(SPACE) 79 EQUALS_VALUE2 := value2 80 81 ifneq ($(call equals, $(EQUALS_VALUE1), $(EQUALS_VALUE2)), ) 82 $(error The strings >$(EQUALS_VALUE1)< and >$(EQUALS_VALUE2)< are equal) 83 endif 84 85 ifeq ($(call equals, $(EQUALS_VALUE1), $(EQUALS_VALUE1)), ) 86 $(error The strings >$(EQUALS_VALUE1)< and >$(EQUALS_VALUE1)< are not equal) 87 endif 88 89 ################################################################################ 90 # Test remove-prefixes 91 92 $(eval $(call assert-equals, \ 93 $(call remove-prefixes, pre, prefix postfix), fix postfix, \ 94 Prefixes not properly removed)) 95 96 $(eval $(call assert-equals, \ 97 $(call remove-prefixes, pre post, prefix postfix), fix fix, \ 98 Prefixes not properly removed)) 99 100 ################################################################################ 101 # Test ShellQuote 102 103 SHELL_QUOTE_VALUE := foo '""' "''" bar 104 SHELL_QUOTE_RESULT := $(shell $(ECHO) $(call ShellQuote, \ 105 $(SHELL_QUOTE_VALUE))) 106 107 ifneq ($(SHELL_QUOTE_VALUE), $(SHELL_QUOTE_RESULT)) 108 $(error Expected: >$(SHELL_QUOTE_VALUE)< - Result: >$(SHELL_QUOTE_RESULT)<) 109 endif 110 111 ################################################################################ 112 # Test read and write to file 113 114 READ_WRITE_FILE := $(OUTPUT_DIR)/read-write 115 READ_WRITE_VALUE := foo '""' "''" \t\n\\ bar 116 $(call WriteFile, $(READ_WRITE_VALUE), $(READ_WRITE_FILE)) 117 READ_WRITE_RESULT := $(call ReadFile, $(READ_WRITE_FILE)) 118 119 ifneq ($(READ_WRITE_VALUE), $(READ_WRITE_RESULT)) 120 $(error Expected: >$(READ_WRITE_VALUE)< - Result: >$(READ_WRITE_RESULT)<) 121 endif 122 123 ################################################################################ 124 # Test creating dependencies on make variables 125 126 VARDEP_DIR := $(OUTPUT_DIR)/vardep 127 VARDEP_SRC_FILE := $(VARDEP_DIR)/src-file 128 VARDEP_TARGET_FILE := $(VARDEP_DIR)/target-file 129 VARDEP_FLAG_FILE := $(VARDEP_DIR)/flag-file 130 131 $(VARDEP_DIR)/src-file: 132 $(MKDIR) -p $(@D) 133 $(ECHO) "some string XXX" > $@ 134 135 $(VARDEP_TARGET_FILE): $(VARDEP_DIR)/src-file \ 136 $(call DependOnVariable, VARDEP_TEST_VAR) 137 $(MKDIR) -p $(@D) 138 $(SED) -e 's/XXX/$(VARDEP_TEST_VAR)/g' $< > $@ 139 $(TOUCH) $(VARDEP_FLAG_FILE) 140 141 test-vardep: 142 $(RM) $(VARDEP_SRC_FILE) $(VARDEP_TARGET_FILE) $(VARDEP_FLAG_FILE) 143 # 144 # Simply create the target file and verify that it has the correct value 145 # 146 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value1 $(VARDEP_TARGET_FILE) 147 $(PRINTF) "Expecting value1: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" 148 test "some string value1" = "`$(CAT) $(VARDEP_DIR)/target-file`" 149 test -e $(VARDEP_FLAG_FILE) 150 # 151 # Make the target file again and verify that the value is updated with 152 # the new value 153 # 154 $(SLEEP_ON_MAC) 155 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value2 $(VARDEP_TARGET_FILE) 156 $(PRINTF) "Expecting value2: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" 157 test "some string value2" = "`$(CAT) $(VARDEP_DIR)/target-file`" 158 test -e $(VARDEP_FLAG_FILE) 159 # 160 # Make the target again with the same value and verify that the recipe 161 # was never run by checking that the flag file was not recreated 162 # 163 $(SLEEP_ON_MAC) 164 $(RM) $(VARDEP_FLAG_FILE) 165 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value2 $(VARDEP_TARGET_FILE) 166 $(PRINTF) "Expecting value2: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" 167 test "some string value2" = "`$(CAT) $(VARDEP_DIR)/target-file`" 168 test ! -e $(VARDEP_FLAG_FILE) 169 # 170 # Test running with spaces at the end and the middle of the value 171 # and verify that the file isn't rewritten the second time 172 # 173 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="value3 foo " $(VARDEP_TARGET_FILE) 174 $(RM) $(VARDEP_FLAG_FILE) 175 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="value3 foo" $(VARDEP_TARGET_FILE) 176 test ! -e $(VARDEP_FLAG_FILE) 177 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=" value3 foo" $(VARDEP_TARGET_FILE) 178 test ! -e $(VARDEP_FLAG_FILE) 179 180 # Test specifying a specific value file to store variable in 181 VARDEP_VALUE_FILE := $(VARDEP_DIR)/value-file 182 VARDEP_TEST_VAR2 := value3 183 184 VARDEP_RETURN_VALUE := $(call DependOnVariable, VARDEP_TEST_VAR2, $(VARDEP_VALUE_FILE)) 185 ifneq ($(VARDEP_VALUE_FILE), $(VARDEP_RETURN_VALUE)) 186 $(error Expected: $(VARDEP_VALUE_FILE) - DependOnVariable: $(VARDEP_RETURN_VALUE)) 187 endif 188 VARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE)) 189 ifneq ($(VARDEP_TEST_VAR2), $(VARDEP_FILE_CONTENTS)) 190 $(error Expected: $(VARDEP_TEST_VAR2) - DependOnVariable file contained: \ 191 $(VARDEP_FILE_CONTENTS)) 192 endif 193 194 # Test with a variable value containing some problematic characters 195 VARDEP_TEST_VAR3 := foo '""' "''" bar 196 VARDEP_VALUE_FILE := $(call DependOnVariable, VARDEP_TEST_VAR3) 197 VARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE)) 198 ifneq ($(VARDEP_TEST_VAR3), $(VARDEP_FILE_CONTENTS)) 199 $(error Expected: >$(VARDEP_TEST_VAR3)< - DependOnVariable file contained: \ 200 >$(VARDEP_FILE_CONTENTS)<) 201 endif 202 203 TEST_TARGETS += test-vardep 204 205 ################################################################################ 206 # Test sequence 207 208 ifneq ($(call sequence, 1, 1), 1) 209 $(error Sequence 1, 1 should be "1", but was $(call sequence, 1, 1)) 210 endif 211 212 ifneq ($(call sequence, 2, 3), 2 3) 213 $(error Sequence 2, 3 should be "2 3", but was $(call sequence, 2, 3)) 214 endif 215 216 ifneq ($(call sequence, 4, 9), 4 5 6 7 8 9) 217 $(error Sequence 4, 9 should be "4 5 6 7 8 9", but was $(call sequence, 4, 9)) 218 endif 219 220 ifneq ($(call sequence, 5, 15), 5 6 7 8 9 10 11 12 13 14 15) 221 $(error Sequence 5, 15 should be "5 6 7 8 9 10 11 12 13 14 15", \ 222 but was $(call sequence, 5, 15)) 223 endif 224 225 all: $(TEST_TARGETS)