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 include JavaCompilation.gmk
  31 
  32 THIS_FILE := $(SRC_ROOT)/test/make/TestJavaCompilation.gmk
  33 DEPS := $(THIS_FILE) \
  34     $(SRC_ROOT)/make/common/MakeBase.gmk \
  35     $(SRC_ROOT)/make/common/JavaCompilation.gmk \
  36     #
  37 
  38 OUTPUT_DIR := $(TESTMAKE_OUTPUTDIR)/java-compilation
  39 
  40 ################################################################################
  41 # Test: jar1
  42 # Creates a simple jar file and unzips it to verify that the files have not
  43 # changed.
  44 
  45 JAR1_SRC_ROOT := $(OUTPUT_DIR)/jar1src
  46 JAR1_UNZIP := $(OUTPUT_DIR)/jar1unzip
  47 JAR1_FILE := $(OUTPUT_DIR)/jar1.jar
  48 JAR1_MANIFEST := $(OUTPUT_DIR)/jar1_manifest
  49 
  50 clean-jar1:
  51         $(RM) -r $(OUTPUT_DIR)/_jar1* $(OUTPUT_DIR)/jar1*
  52 
  53 $(JAR1_MANIFEST): | $(OUTPUT_DIR)/_jar1_created
  54         $(ECHO) "Test-Attribute: value" > $(JAR1_MANIFEST)
  55 
  56 $(OUTPUT_DIR)/_jar1_created: $(DEPS)
  57         $(RM) -r $(JAR1_SRC_ROOT)
  58         $(RM) $(JAR1_FILE)
  59         $(RM) -r $(JAR1_UNZIP)
  60         $(MKDIR) -p $(JAR1_SRC_ROOT)
  61         $(MKDIR) -p $(JAR1_SRC_ROOT)/dir1
  62         $(MKDIR) -p $(JAR1_SRC_ROOT)/dir2
  63         $(MKDIR) -p $(JAR1_SRC_ROOT)/META-INF
  64         $(TOUCH) $(JAR1_SRC_ROOT)/dir1/file1.class
  65         $(TOUCH) $(JAR1_SRC_ROOT)/dir2/file2.class
  66         $(TOUCH) $(JAR1_SRC_ROOT)/META-INF/metafile
  67         $(TOUCH) $@
  68 
  69 $(eval $(call SetupArchive,BUILD_JAR1, \
  70     DEPSENDENCIES := $(OUTPUT_DIR)/_jar1_created, \
  71     SRCS := $(JAR1_SRC_ROOT), \
  72     MANIFEST := $(JAR1_MANIFEST), \
  73     JAR := $(JAR1_FILE)))
  74 
  75 $(OUTPUT_DIR)/_jar1_verified: $(BUILD_JAR1)
  76         $(RM) -r $(JAR1_UNZIP)
  77         $(MKDIR) -p $(JAR1_UNZIP)
  78         $(CD) $(JAR1_UNZIP) && $(UNZIP) $(JAR1_FILE) $(LOG_DEBUG)
  79         $(DIFF) -r $(JAR1_SRC_ROOT)/dir1 $(JAR1_UNZIP)/dir1
  80         $(DIFF) -r $(JAR1_SRC_ROOT)/dir2 $(JAR1_UNZIP)/dir2
  81         $(DIFF) -r $(JAR1_SRC_ROOT)/META-INF/metafile $(JAR1_UNZIP)/META-INF/metafile
  82         if [ "`$(GREP) 'Test-Attribute: value' $(JAR1_UNZIP)/META-INF/MANIFEST.MF`" = "" ]; then \
  83           $(ECHO) "Could not find Test-Attribute in manifest of $(JAR1_FILE)"; \
  84           exit 1; \
  85         fi
  86         $(TOUCH) $@
  87 
  88 create-jar2: $(OUTPUT_DIR)/_jar1_verified
  89 TEST_TARGETS += $(OUTPUT_DIR)/_jar1_verified
  90 
  91 # Change a source file and call this makefile again to force the jar to be 
  92 # updated. 
  93 $(OUTPUT_DIR)/_jar1_updated: $(OUTPUT_DIR)/_jar1_verified
  94         $(ECHO) updated > $(JAR1_SRC_ROOT)/dir1/file1.class
  95         $(ECHO) updated > $(JAR1_SRC_ROOT)/META-INF/metafile
  96         $(TOUCH) $(OUTPUT_DIR)/_jar1_created
  97         +$(MAKE) -f $(THIS_FILE) $(OUTPUT_DIR)/_jar1_verified
  98         $(TOUCH) $@
  99 
 100 update-jar1: $(OUTPUT_DIR)_jar1_updated
 101 
 102 # Change the manifest file and call this makefile again to force the jar
 103 # to be updated
 104 $(OUTPUT_DIR)/_jar1_updated_manifest: $(OUTPUT_DIR)/_jar1_updated
 105         $(ECHO) "Test-Attribute: foobar" > $(JAR1_MANIFEST)
 106         +$(MAKE) -f $(THIS_FILE) $(BUILD_JAR1)
 107         $(RM) -r $(JAR1_UNZIP)
 108         $(MKDIR) -p $(JAR1_UNZIP)
 109         $(CD) $(JAR1_UNZIP) && $(UNZIP) $(JAR1_FILE) $(LOG_DEBUG)
 110         if [ "`$(GREP) 'Test-Attribute: foobar' $(JAR1_UNZIP)/META-INF/MANIFEST.MF`" = "" ]; then \
 111           $(ECHO) "Could not find Test-Attribute in manifest of $(JAR1_FILE)"; \
 112           exit 1; \
 113         fi
 114         $(TOUCH) $@
 115 
 116 update-jar1-manifest: $(OUTPUT_DIR)/_jar1_updated_manifest
 117 
 118 TEST_TARGETS += $(OUTPUT_DIR)/_jar1_updated $(OUTPUT_DIR)/_jar1_updated_manifest
 119 
 120 .PHONY: clean-jar1 create-jar1 update-jar1 update-jar1-manifest
 121 
 122 ################################################################################
 123 # Test: jar2
 124 # Creates a jar file based on 2 source roots
 125 
 126 JAR2_SRC_ROOT1 := $(OUTPUT_DIR)/jar2src1
 127 JAR2_SRC_ROOT2 := $(OUTPUT_DIR)/jar2src2
 128 JAR2_UNZIP := $(OUTPUT_DIR)/jar2unzip
 129 JAR2_FILE := $(OUTPUT_DIR)/jar2.jar
 130 
 131 clean-jar2:
 132         $(RM) -r $(OUTPUT_DIR)/_jar2* $(OUTPUT_DIR)/jar2*
 133 
 134 $(OUTPUT_DIR)/_jar2_created: $(DEPS)
 135         $(RM) -r $(JAR2_SRC_ROOT1)
 136         $(RM) -r $(JAR2_SRC_ROOT2)
 137         $(RM) $(JAR2_FILE)
 138         $(RM) -r $(JAR2_UNZIP)
 139         $(MKDIR) -p $(JAR2_SRC_ROOT1)/dir1
 140         $(MKDIR) -p $(JAR2_SRC_ROOT2)/dir2
 141         $(TOUCH) $(JAR2_SRC_ROOT1)/dir1/file1.class
 142         $(TOUCH) $(JAR2_SRC_ROOT2)/dir2/file2.class
 143         $(TOUCH) $@
 144 
 145 $(eval $(call SetupArchive,BUILD_JAR2, \
 146     DEPENDENCIES := $(OUTPUT_DIR)/_jar2_created, \
 147     SRCS := $(JAR2_SRC_ROOT1) $(JAR2_SRC_ROOT2), \
 148     JAR := $(JAR2_FILE)))
 149 
 150 $(OUTPUT_DIR)/_jar2_verified: $(BUILD_JAR2)
 151         $(RM) -r $(JAR2_UNZIP)
 152         $(MKDIR) -p $(JAR2_UNZIP)
 153         $(CD) $(JAR2_UNZIP) && $(UNZIP) $(JAR2_FILE) $(LOG_DEBUG)
 154         $(DIFF) -r $(JAR2_SRC_ROOT1)/dir1 $(JAR2_UNZIP)/dir1
 155         $(DIFF) -r $(JAR2_SRC_ROOT2)/dir2 $(JAR2_UNZIP)/dir2
 156         $(TOUCH) $@
 157 
 158 create-jar2: $(OUTPUT_DIR)/_jar2_verified
 159 TEST_TARGETS += $(OUTPUT_DIR)/_jar2_verified
 160 
 161 $(OUTPUT_DIR)/_jar2_updated: $(OUTPUT_DIR)/_jar2_verified
 162         $(ECHO) updated > $(JAR2_SRC_ROOT1)/dir1/file1.class
 163         $(TOUCH) $(OUTPUT_DIR)/_jar2_created
 164         +$(MAKE) -f $(THIS_FILE) $(OUTPUT_DIR)/_jar2_verified
 165         $(TOUCH) $@
 166 
 167 update-jar2: $(OUTPUT_DIR)/_jar2_updated
 168 TEST_TARGETS += $(OUTPUT_DIR)/_jar2_updated
 169 
 170 .PHONY: clean-jar2 create-jar2 update-jar2
 171 
 172 ################################################################################
 173 # Test: jar3
 174 # Creates a jar file based on 2 source roots with an extra file
 175 
 176 JAR3_SRC_ROOT1 := $(OUTPUT_DIR)/jar3src1
 177 JAR3_SRC_ROOT2 := $(OUTPUT_DIR)/jar3src2
 178 JAR3_UNZIP := $(OUTPUT_DIR)/jar3unzip
 179 JAR3_FILE := $(OUTPUT_DIR)/jar3.jar
 180 
 181 clean-jar3:
 182         $(RM) -r $(OUTPUT_DIR)/_jar3* $(OUTPUT_DIR)/jar3*
 183 
 184 $(OUTPUT_DIR)/_jar3_created: $(DEPS)
 185         $(RM) -r $(JAR3_SRC_ROOT1)
 186         $(RM) -r $(JAR3_SRC_ROOT2)
 187         $(RM) $(JAR3_FILE)
 188         $(RM) -r $(JAR3_UNZIP)
 189         $(MKDIR) -p $(JAR3_SRC_ROOT1)/dir1
 190         $(MKDIR) -p $(JAR3_SRC_ROOT2)/dir2
 191         $(TOUCH) $(JAR3_SRC_ROOT1)/dir1/file1\$$foo.class
 192         $(TOUCH) $(JAR3_SRC_ROOT2)/dir2/file2.class
 193         $(TOUCH) $(JAR3_SRC_ROOT2)/extra-file
 194         $(TOUCH) $(JAR3_SRC_ROOT2)/extra-file-abs
 195         $(TOUCH) $(JAR3_SRC_ROOT2)/dir2/file\$$foo.dollar
 196         $(TOUCH) $@
 197 
 198 $(eval $(call SetupArchive,BUILD_JAR3, \
 199     DEPENDENCIES := $(OUTPUT_DIR)/_jar3_created, \
 200     SRCS := $(JAR3_SRC_ROOT1) $(JAR3_SRC_ROOT2), \
 201     EXTRA_FILES := extra-file \
 202         dir2/file$$$$foo.dollar \
 203         $(JAR3_SRC_ROOT2)/extra-file-abs, \
 204     EXCLUDE_FILES := dir1/file1$$$$foo.class, \
 205     JAR := $(JAR3_FILE)))
 206 
 207 $(OUTPUT_DIR)/_jar3_verified: $(BUILD_JAR3)
 208         $(RM) -r $(JAR3_UNZIP)
 209         $(MKDIR) -p $(JAR3_UNZIP)
 210         $(CD) $(JAR3_UNZIP) && $(UNZIP) $(JAR3_FILE) $(LOG_DEBUG)
 211         if [ -d "$(JAR3_UNZIP)/dir1" ]; then \
 212           echo Should not be included $(JAR3_UNZIP)/dir1; \
 213           exit 1; \
 214         fi
 215         $(DIFF) -r $(JAR3_SRC_ROOT2)/dir2 $(JAR3_UNZIP)/dir2
 216         $(DIFF) -r $(JAR3_SRC_ROOT2)/extra-file $(JAR3_UNZIP)/extra-file
 217         $(TOUCH) $@
 218 
 219 create-jar3: $(OUTPUT_DIR)/_jar3_verified
 220 TEST_TARGETS += $(OUTPUT_DIR)/_jar3_verified
 221 
 222 $(OUTPUT_DIR)/_jar3_updated: $(OUTPUT_DIR)/_jar3_verified
 223         $(ECHO) updated > $(JAR3_SRC_ROOT2)/extra-file
 224         $(TOUCH) $(OUTPUT_DIR)/_jar3_created
 225         +$(MAKE) -f $(THIS_FILE) $(OUTPUT_DIR)/_jar3_verified
 226         $(TOUCH) $@
 227 
 228 update-jar3: $(OUTPUT_DIR)/_jar3_updated
 229 TEST_TARGETS += $(OUTPUT_DIR)/_jar3_updated
 230 
 231 .PHONY: clean-jar3 create-jar3 update-jar3
 232 
 233 ################################################################################
 234 
 235 all: $(TEST_TARGETS)
 236 
 237 .PHONY: default all