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)