TestMakeBase.gmk revision 1306:bb7c11ec0b20
1255570Strasz# 2255570Strasz# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3255570Strasz# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4255570Strasz# 5255570Strasz# This code is free software; you can redistribute it and/or modify it 6255570Strasz# under the terms of the GNU General Public License version 2 only, as 7255570Strasz# published by the Free Software Foundation. Oracle designates this 8255570Strasz# particular file as subject to the "Classpath" exception as provided 9255570Strasz# by Oracle in the LICENSE file that accompanied this code. 10255570Strasz# 11255570Strasz# This code is distributed in the hope that it will be useful, but WITHOUT 12255570Strasz# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13255570Strasz# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14255570Strasz# version 2 for more details (a copy is included in the LICENSE file that 15255570Strasz# accompanied this code). 16255570Strasz# 17255570Strasz# You should have received a copy of the GNU General Public License version 18255570Strasz# 2 along with this work; if not, write to the Free Software Foundation, 19255570Strasz# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20255570Strasz# 21255570Strasz# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22255570Strasz# or visit www.oracle.com if you need additional information or have any 23255570Strasz# questions. 24255570Strasz# 25255570Strasz 26255570Straszdefault: all 27255570Strasz 28255570Straszinclude $(SPEC) 29255570Straszinclude MakeBase.gmk 30255570Strasz 31255570StraszTHIS_FILE := $(SRC_ROOT)/test/make/TestMakeBase.gmk 32255570StraszDEPS := $(THIS_FILE) \ 33255570Strasz $(SRC_ROOT)/make/common/MakeBase.gmk \ 34255570Strasz # 35255570Strasz 36255570Strasz# On macosx, file system timestamps only have 1 second resultion so must add 37270279Strasz# sleeps to properly test dependencies. 38270279Straszifeq ($(OPENJDK_BUILD_OS), macosx) 39270279Strasz SLEEP_ON_MAC := sleep 1 40255570Straszendif 41255570Strasz 42255570StraszOUTPUT_DIR := $(TESTMAKE_OUTPUTDIR)/make-base 43255570Strasz$(call MakeDir, $(OUTPUT_DIR)) 44255570Strasz 45255570Strasz################################################################################ 46255570Strasz# Escape $ 47255570Straszifneq ($(call EscapeDollar, foo$$bar), foo\$$bar) 48263234Srwatson $(error EscapeDollar failed $(call EscapeDollar, foo$$bar) foo\$$bar) 49255570Straszendif 50255570Strasz 51255570StraszESCAPE_DOLLAR_DIR := $(OUTPUT_DIR)/escape-dollar 52255570Strasz 53255570Strasz$(ESCAPE_DOLLAR_DIR)/_escape_dollar: $(DEPS) 54255570Strasz $(RM) -r $(@D) 55255570Strasz $(MKDIR) -p $(@D) 56255570Strasz $(ECHO) foo\$$bar > $(@D)/file1 57255570Strasz $(ECHO) $(call EscapeDollar, foo$$bar) > $(@D)/file2 58255570Strasz $(ECHO) $(call EscapeDollar, foo\$$bar) > $(@D)/file3 59255570Strasz $(DIFF) $(@D)/file1 $(@D)/file2 60255570Strasz $(DIFF) $(@D)/file1 $(@D)/file3 61255570Strasz $(TOUCH) $@ 62255570Strasz 63255570StraszTEST_TARGETS += $(ESCAPE_DOLLAR_DIR)/_escape_dollar 64255570Strasz 65255570Strasz################################################################################ 66255570Strasz# Test Equals 67255570Strasz 68264524StraszEQUALS_VALUE1 := value1$(SPACE) 69264524StraszEQUALS_VALUE2 := value2 70255570Strasz 71255570Straszifneq ($(call equals, $(EQUALS_VALUE1), $(EQUALS_VALUE2)), ) 72255570Strasz $(error The strings >$(EQUALS_VALUE1)< and >$(EQUALS_VALUE2)< are equal) 73255570Straszendif 74264524Strasz 75255570Straszifeq ($(call equals, $(EQUALS_VALUE1), $(EQUALS_VALUE1)), ) 76255570Strasz $(error The strings >$(EQUALS_VALUE1)< and >$(EQUALS_VALUE1)< are not equal) 77255570Straszendif 78255570Strasz 79255570Strasz################################################################################ 80255570Strasz# Test ShellQuote 81255570Strasz 82255570StraszSHELL_QUOTE_VALUE := foo '""' "''" bar 83255570StraszSHELL_QUOTE_RESULT := $(shell $(ECHO) $(call ShellQuote, \ 84255665Strasz $(SHELL_QUOTE_VALUE))) 85255570Strasz 86255570Straszifneq ($(SHELL_QUOTE_VALUE), $(SHELL_QUOTE_RESULT)) 87255570Strasz $(error Expected: >$(SHELL_QUOTE_VALUE)< - Result: >$(SHELL_QUOTE_RESULT)<) 88255570Straszendif 89255570Strasz 90255570Strasz################################################################################ 91255570Strasz# Test read and write to file 92255570Strasz 93255570StraszREAD_WRITE_FILE := $(OUTPUT_DIR)/read-write 94255570StraszREAD_WRITE_VALUE := foo '""' "''" \t\n\\ bar 95255570Strasz$(call WriteFile, $(READ_WRITE_VALUE), $(READ_WRITE_FILE)) 96255570StraszREAD_WRITE_RESULT := $(call ReadFile, $(READ_WRITE_FILE)) 97255570Strasz 98255570Straszifneq ($(READ_WRITE_VALUE), $(READ_WRITE_RESULT)) 99255570Strasz $(error Expected: >$(READ_WRITE_VALUE)< - Result: >$(READ_WRITE_RESULT)<) 100255570Straszendif 101255570Strasz 102255570Strasz################################################################################ 103255570Strasz# Test creating dependencies on make variables 104255570Strasz 105255570StraszVARDEP_DIR := $(OUTPUT_DIR)/vardep 106273464StraszVARDEP_SRC_FILE := $(VARDEP_DIR)/src-file 107255570StraszVARDEP_TARGET_FILE := $(VARDEP_DIR)/target-file 108255570StraszVARDEP_FLAG_FILE := $(VARDEP_DIR)/flag-file 109255570Strasz 110255570Strasz$(VARDEP_DIR)/src-file: 111288310Smav $(MKDIR) -p $(@D) 112255570Strasz $(ECHO) "some string XXX" > $@ 113255570Strasz 114255570Strasz$(VARDEP_TARGET_FILE): $(VARDEP_DIR)/src-file \ 115255570Strasz $(call DependOnVariable, VARDEP_TEST_VAR) 116278037Smav $(MKDIR) -p $(@D) 117255570Strasz $(SED) -e 's/XXX/$(VARDEP_TEST_VAR)/g' $< > $@ 118255570Strasz $(TOUCH) $(VARDEP_FLAG_FILE) 119255570Strasz 120255570Strasztest-vardep: 121268291Smav $(RM) $(VARDEP_SRC_FILE) $(VARDEP_TARGET_FILE) $(VARDEP_FLAG_FILE) 122268291Smav # 123288061Smav # Simply create the target file and verify that it has the correct value 124278354Smav # 125284765Smav $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value1 $(VARDEP_TARGET_FILE) 126284765Smav $(PRINTF) "Expecting value1: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" 127278322Smav test "some string value1" = "`$(CAT) $(VARDEP_DIR)/target-file`" 128268291Smav test -e $(VARDEP_FLAG_FILE) 129268291Smav # 130278322Smav # Make the target file again and verify that the value is updated with 131268291Smav # the new value 132268291Smav # 133268291Smav $(SLEEP_ON_MAC) 134268291Smav $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value2 $(VARDEP_TARGET_FILE) 135255570Strasz $(PRINTF) "Expecting value2: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" 136255570Strasz test "some string value2" = "`$(CAT) $(VARDEP_DIR)/target-file`" 137255570Strasz test -e $(VARDEP_FLAG_FILE) 138255570Strasz # 139268291Smav # Make the target again with the same value and verify that the recipe 140268291Smav # was never run by checking that the flag file was not recreated 141268291Smav # 142255570Strasz $(SLEEP_ON_MAC) 143255570Strasz $(RM) $(VARDEP_FLAG_FILE) 144255570Strasz $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=value2 $(VARDEP_TARGET_FILE) 145255570Strasz $(PRINTF) "Expecting value2: %s\n" "`$(CAT) $(VARDEP_DIR)/target-file`" 146255570Strasz test "some string value2" = "`$(CAT) $(VARDEP_DIR)/target-file`" 147255570Strasz test ! -e $(VARDEP_FLAG_FILE) 148255570Strasz # 149255570Strasz # Test running with spaces at the end and the middle of the value 150255570Strasz # and verify that the file isn't rewritten the second time 151255570Strasz # 152255570Strasz $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="value3 foo " $(VARDEP_TARGET_FILE) 153255570Strasz $(RM) $(VARDEP_FLAG_FILE) 154255570Strasz $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR="value3 foo" $(VARDEP_TARGET_FILE) 155255570Strasz test ! -e $(VARDEP_FLAG_FILE) 156256189Strasz $(MAKE) -f $(THIS_FILE) VARDEP_TEST_VAR=" value3 foo" $(VARDEP_TARGET_FILE) 157255570Strasz test ! -e $(VARDEP_FLAG_FILE) 158255570Strasz 159255570Strasz# Test specifying a specific value file to store variable in 160255570StraszVARDEP_VALUE_FILE := $(VARDEP_DIR)/value-file 161255570StraszVARDEP_TEST_VAR2 := value3 162255570Strasz 163255570StraszVARDEP_RETURN_VALUE := $(call DependOnVariable, VARDEP_TEST_VAR2, $(VARDEP_VALUE_FILE)) 164255570Straszifneq ($(VARDEP_VALUE_FILE), $(VARDEP_RETURN_VALUE)) 165255570Strasz $(error Expected: $(VARDEP_VALUE_FILE) - DependOnVariable: $(VARDEP_RETURN_VALUE)) 166255570Straszendif 167255570StraszVARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE)) 168255570Straszifneq ($(VARDEP_TEST_VAR2), $(VARDEP_FILE_CONTENTS)) 169255570Strasz $(error Expected: $(VARDEP_TEST_VAR2) - DependOnVariable file contained: \ 170255570Strasz $(VARDEP_FILE_CONTENTS)) 171255570Straszendif 172255570Strasz 173255570Strasz# Test with a variable value containing some problematic characters 174255570StraszVARDEP_TEST_VAR3 := foo '""' "''" bar 175255570StraszVARDEP_VALUE_FILE := $(call DependOnVariable, VARDEP_TEST_VAR3) 176255570StraszVARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE)) 177255570Straszifneq ($(VARDEP_TEST_VAR3), $(VARDEP_FILE_CONTENTS)) 178255570Strasz $(error Expected: >$(VARDEP_TEST_VAR3)< - DependOnVariable file contained: \ 179255570Strasz >$(VARDEP_FILE_CONTENTS)<) 180255570Straszendif 181255570Strasz 182255570StraszTEST_TARGETS += test-vardep 183255570Strasz 184255570Strasz################################################################################ 185255570Strasz 186255570Straszall: $(TEST_TARGETS) 187255570Strasz