TestMakeBase.gmk revision 1306:bb7c11ec0b20
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 26default: all 27 28include $(SPEC) 29include MakeBase.gmk 30 31THIS_FILE := $(SRC_ROOT)/test/make/TestMakeBase.gmk 32DEPS := $(THIS_FILE) \ 33 $(SRC_ROOT)/make/common/MakeBase.gmk \ 34 # 35 36# On macosx, file system timestamps only have 1 second resultion so must add 37# sleeps to properly test dependencies. 38ifeq ($(OPENJDK_BUILD_OS), macosx) 39 SLEEP_ON_MAC := sleep 1 40endif 41 42OUTPUT_DIR := $(TESTMAKE_OUTPUTDIR)/make-base 43$(call MakeDir, $(OUTPUT_DIR)) 44 45################################################################################ 46# Escape $ 47ifneq ($(call EscapeDollar, foo$$bar), foo\$$bar) 48 $(error EscapeDollar failed $(call EscapeDollar, foo$$bar) foo\$$bar) 49endif 50 51ESCAPE_DOLLAR_DIR := $(OUTPUT_DIR)/escape-dollar 52 53$(ESCAPE_DOLLAR_DIR)/_escape_dollar: $(DEPS) 54 $(RM) -r $(@D) 55 $(MKDIR) -p $(@D) 56 $(ECHO) foo\$$bar > $(@D)/file1 57 $(ECHO) $(call EscapeDollar, foo$$bar) > $(@D)/file2 58 $(ECHO) $(call EscapeDollar, foo\$$bar) > $(@D)/file3 59 $(DIFF) $(@D)/file1 $(@D)/file2 60 $(DIFF) $(@D)/file1 $(@D)/file3 61 $(TOUCH) $@ 62 63TEST_TARGETS += $(ESCAPE_DOLLAR_DIR)/_escape_dollar 64 65################################################################################ 66# Test Equals 67 68EQUALS_VALUE1 := value1$(SPACE) 69EQUALS_VALUE2 := value2 70 71ifneq ($(call equals, $(EQUALS_VALUE1), $(EQUALS_VALUE2)), ) 72 $(error The strings >$(EQUALS_VALUE1)< and >$(EQUALS_VALUE2)< are equal) 73endif 74 75ifeq ($(call equals, $(EQUALS_VALUE1), $(EQUALS_VALUE1)), ) 76 $(error The strings >$(EQUALS_VALUE1)< and >$(EQUALS_VALUE1)< are not equal) 77endif 78 79################################################################################ 80# Test ShellQuote 81 82SHELL_QUOTE_VALUE := foo '""' "''" bar 83SHELL_QUOTE_RESULT := $(shell $(ECHO) $(call ShellQuote, \ 84 $(SHELL_QUOTE_VALUE))) 85 86ifneq ($(SHELL_QUOTE_VALUE), $(SHELL_QUOTE_RESULT)) 87 $(error Expected: >$(SHELL_QUOTE_VALUE)< - Result: >$(SHELL_QUOTE_RESULT)<) 88endif 89 90################################################################################ 91# Test read and write to file 92 93READ_WRITE_FILE := $(OUTPUT_DIR)/read-write 94READ_WRITE_VALUE := foo '""' "''" \t\n\\ bar 95$(call WriteFile, $(READ_WRITE_VALUE), $(READ_WRITE_FILE)) 96READ_WRITE_RESULT := $(call ReadFile, $(READ_WRITE_FILE)) 97 98ifneq ($(READ_WRITE_VALUE), $(READ_WRITE_RESULT)) 99 $(error Expected: >$(READ_WRITE_VALUE)< - Result: >$(READ_WRITE_RESULT)<) 100endif 101 102################################################################################ 103# Test creating dependencies on make variables 104 105VARDEP_DIR := $(OUTPUT_DIR)/vardep 106VARDEP_SRC_FILE := $(VARDEP_DIR)/src-file 107VARDEP_TARGET_FILE := $(VARDEP_DIR)/target-file 108VARDEP_FLAG_FILE := $(VARDEP_DIR)/flag-file 109 110$(VARDEP_DIR)/src-file: 111 $(MKDIR) -p $(@D) 112 $(ECHO) "some string XXX" > $@ 113 114$(VARDEP_TARGET_FILE): $(VARDEP_DIR)/src-file \ 115 $(call DependOnVariable, VARDEP_TEST_VAR) 116 $(MKDIR) -p $(@D) 117 $(SED) -e 's/XXX/$(VARDEP_TEST_VAR)/g' $< > $@ 118 $(TOUCH) $(VARDEP_FLAG_FILE) 119 120test-vardep: 121 $(RM) $(VARDEP_SRC_FILE) $(VARDEP_TARGET_FILE) $(VARDEP_FLAG_FILE) 122 # 123 # Simply create the target file and verify that it has the correct value 124 # 125 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value1 $(VARDEP_TARGET_FILE) 126 $(PRINTF) "Expecting value1: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" 127 test "some string value1" = "`$(CAT) $(VARDEP_DIR)/target-file`" 128 test -e $(VARDEP_FLAG_FILE) 129 # 130 # Make the target file again and verify that the value is updated with 131 # the new value 132 # 133 $(SLEEP_ON_MAC) 134 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value2 $(VARDEP_TARGET_FILE) 135 $(PRINTF) "Expecting value2: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" 136 test "some string value2" = "`$(CAT) $(VARDEP_DIR)/target-file`" 137 test -e $(VARDEP_FLAG_FILE) 138 # 139 # Make the target again with the same value and verify that the recipe 140 # was never run by checking that the flag file was not recreated 141 # 142 $(SLEEP_ON_MAC) 143 $(RM) $(VARDEP_FLAG_FILE) 144 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value2 $(VARDEP_TARGET_FILE) 145 $(PRINTF) "Expecting value2: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" 146 test "some string value2" = "`$(CAT) $(VARDEP_DIR)/target-file`" 147 test ! -e $(VARDEP_FLAG_FILE) 148 # 149 # Test running with spaces at the end and the middle of the value 150 # and verify that the file isn't rewritten the second time 151 # 152 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="value3 foo " $(VARDEP_TARGET_FILE) 153 $(RM) $(VARDEP_FLAG_FILE) 154 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="value3 foo" $(VARDEP_TARGET_FILE) 155 test ! -e $(VARDEP_FLAG_FILE) 156 $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=" value3 foo" $(VARDEP_TARGET_FILE) 157 test ! -e $(VARDEP_FLAG_FILE) 158 159# Test specifying a specific value file to store variable in 160VARDEP_VALUE_FILE := $(VARDEP_DIR)/value-file 161VARDEP_TEST_VAR2 := value3 162 163VARDEP_RETURN_VALUE := $(call DependOnVariable, VARDEP_TEST_VAR2, $(VARDEP_VALUE_FILE)) 164ifneq ($(VARDEP_VALUE_FILE), $(VARDEP_RETURN_VALUE)) 165 $(error Expected: $(VARDEP_VALUE_FILE) - DependOnVariable: $(VARDEP_RETURN_VALUE)) 166endif 167VARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE)) 168ifneq ($(VARDEP_TEST_VAR2), $(VARDEP_FILE_CONTENTS)) 169 $(error Expected: $(VARDEP_TEST_VAR2) - DependOnVariable file contained: \ 170 $(VARDEP_FILE_CONTENTS)) 171endif 172 173# Test with a variable value containing some problematic characters 174VARDEP_TEST_VAR3 := foo '""' "''" bar 175VARDEP_VALUE_FILE := $(call DependOnVariable, VARDEP_TEST_VAR3) 176VARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE)) 177ifneq ($(VARDEP_TEST_VAR3), $(VARDEP_FILE_CONTENTS)) 178 $(error Expected: >$(VARDEP_TEST_VAR3)< - DependOnVariable file contained: \ 179 >$(VARDEP_FILE_CONTENTS)<) 180endif 181 182TEST_TARGETS += test-vardep 183 184################################################################################ 185 186all: $(TEST_TARGETS) 187