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