TestJavaCompilation.gmk revision 1855:4b01ea6c12c3
1105464Sphk# 2105464Sphk# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3105464Sphk# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4105464Sphk# 5105464Sphk# This code is free software; you can redistribute it and/or modify it 6105464Sphk# under the terms of the GNU General Public License version 2 only, as 7105464Sphk# published by the Free Software Foundation. Oracle designates this 8105464Sphk# particular file as subject to the "Classpath" exception as provided 9105464Sphk# by Oracle in the LICENSE file that accompanied this code. 10105464Sphk# 11105464Sphk# This code is distributed in the hope that it will be useful, but WITHOUT 12105464Sphk# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13105464Sphk# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14105464Sphk# version 2 for more details (a copy is included in the LICENSE file that 15105464Sphk# accompanied this code). 16105464Sphk# 17105464Sphk# You should have received a copy of the GNU General Public License version 18105464Sphk# 2 along with this work; if not, write to the Free Software Foundation, 19105464Sphk# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20105464Sphk# 21105464Sphk# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22105464Sphk# or visit www.oracle.com if you need additional information or have any 23105464Sphk# questions. 24105464Sphk# 25105464Sphk 26105464Sphkdefault: all 27105464Sphk 28105464Sphkinclude $(SPEC) 29105464Sphkinclude MakeBase.gmk 30105464Sphkinclude JarArchive.gmk 31105464Sphkinclude JavaCompilation.gmk 32105464Sphk 33139778SimpTHIS_FILE := $(SRC_ROOT)/test/make/TestJavaCompilation.gmk 34139778SimpDEPS := $(THIS_FILE) \ 35105464Sphk $(SRC_ROOT)/make/common/MakeBase.gmk \ 36105464Sphk $(SRC_ROOT)/make/common/JavaCompilation.gmk \ 37105464Sphk # 38105464Sphk 39105464SphkOUTPUT_DIR := $(TESTMAKE_OUTPUTDIR)/java-compilation 40105464Sphk 41105464Sphk################################################################################ 42105464Sphk# Test: jar1 43113010Sphk# Creates a simple jar file and unzips it to verify that the files have not 44105464Sphk# changed. 45105464Sphk 46105464SphkJAR1_SRC_ROOT := $(OUTPUT_DIR)/jar1src 47105464SphkJAR1_UNZIP := $(OUTPUT_DIR)/jar1unzip 48105464SphkJAR1_FILE := $(OUTPUT_DIR)/jar1.jar 49105464SphkJAR1_MANIFEST := $(OUTPUT_DIR)/jar1_manifest 50106407Sphk 51106407Sphkclean-jar1: 52106407Sphk $(RM) -r $(OUTPUT_DIR)/_jar1* $(OUTPUT_DIR)/jar1* 53105464Sphk 54105464Sphk$(JAR1_MANIFEST): | $(OUTPUT_DIR)/_jar1_created 55105464Sphk $(ECHO) "Test-Attribute: value" > $(JAR1_MANIFEST) 56105464Sphk 57105464Sphk$(OUTPUT_DIR)/_jar1_created: $(DEPS) 58105464Sphk $(RM) -r $(JAR1_SRC_ROOT) 59105464Sphk $(RM) $(JAR1_FILE) 60143418Sume $(RM) -r $(JAR1_UNZIP) 61292782Sallanjude $(MKDIR) -p $(JAR1_SRC_ROOT) 62106407Sphk $(MKDIR) -p $(JAR1_SRC_ROOT)/dir1 63105464Sphk $(MKDIR) -p $(JAR1_SRC_ROOT)/dir2 64105464Sphk $(MKDIR) -p $(JAR1_SRC_ROOT)/META-INF 65105464Sphk $(TOUCH) $(JAR1_SRC_ROOT)/dir1/file1.class 66105464Sphk $(TOUCH) $(JAR1_SRC_ROOT)/dir2/file2.class 67106407Sphk $(TOUCH) $(JAR1_SRC_ROOT)/META-INF/metafile 68105464Sphk $(TOUCH) $@ 69106407Sphk 70106407Sphk$(eval $(call SetupJarArchive, BUILD_JAR1, \ 71106407Sphk DEPENDENCIES := $(OUTPUT_DIR)/_jar1_created, \ 72105464Sphk SRCS := $(JAR1_SRC_ROOT), \ 73106407Sphk MANIFEST := $(JAR1_MANIFEST), \ 74105464Sphk JAR := $(JAR1_FILE), \ 75105464Sphk)) 76105464Sphk 77106407Sphk$(OUTPUT_DIR)/_jar1_verified: $(BUILD_JAR1) 78105464Sphk $(RM) -r $(JAR1_UNZIP) 79106407Sphk $(MKDIR) -p $(JAR1_UNZIP) 80105464Sphk $(CD) $(JAR1_UNZIP) && $(UNZIP) $(JAR1_FILE) $(LOG_DEBUG) 81106407Sphk $(DIFF) -r $(JAR1_SRC_ROOT)/dir1 $(JAR1_UNZIP)/dir1 82106407Sphk $(DIFF) -r $(JAR1_SRC_ROOT)/dir2 $(JAR1_UNZIP)/dir2 83106407Sphk $(DIFF) -r $(JAR1_SRC_ROOT)/META-INF/metafile $(JAR1_UNZIP)/META-INF/metafile 84105464Sphk if [ "`$(GREP) 'Test-Attribute: value' $(JAR1_UNZIP)/META-INF/MANIFEST.MF`" = "" ]; then \ 85105464Sphk $(ECHO) "Could not find Test-Attribute in manifest of $(JAR1_FILE)"; \ 86105464Sphk exit 1; \ 87106407Sphk fi 88105464Sphk $(TOUCH) $@ 89106407Sphk 90105464Sphkcreate-jar2: $(OUTPUT_DIR)/_jar1_verified 91106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar1_verified 92106407Sphk 93106407Sphk# Change a source file and call this makefile again to force the jar to be 94106407Sphk# updated. 95106407Sphk$(OUTPUT_DIR)/_jar1_updated: $(OUTPUT_DIR)/_jar1_verified 96106407Sphk $(ECHO) updated > $(JAR1_SRC_ROOT)/dir1/file1.class 97106407Sphk $(ECHO) updated > $(JAR1_SRC_ROOT)/META-INF/metafile 98106407Sphk $(TOUCH) $(OUTPUT_DIR)/_jar1_created 99106407Sphk +$(MAKE) -f $(THIS_FILE) $(OUTPUT_DIR)/_jar1_verified 100106407Sphk $(TOUCH) $@ 101106407Sphk 102106407Sphkupdate-jar1: $(OUTPUT_DIR)_jar1_updated 103106407Sphk 104106407Sphk# Change the manifest file and call this makefile again to force the jar 105106407Sphk# to be updated 106106407Sphk$(OUTPUT_DIR)/_jar1_updated_manifest: $(OUTPUT_DIR)/_jar1_updated 107106407Sphk $(ECHO) "Test-Attribute: foobar" > $(JAR1_MANIFEST) 108106407Sphk +$(MAKE) -f $(THIS_FILE) $(BUILD_JAR1) 109106407Sphk $(RM) -r $(JAR1_UNZIP) 110106407Sphk $(MKDIR) -p $(JAR1_UNZIP) 111106407Sphk $(CD) $(JAR1_UNZIP) && $(UNZIP) $(JAR1_FILE) $(LOG_DEBUG) 112106407Sphk if [ "`$(GREP) 'Test-Attribute: foobar' $(JAR1_UNZIP)/META-INF/MANIFEST.MF`" = "" ]; then \ 113106407Sphk $(ECHO) "Could not find Test-Attribute in manifest of $(JAR1_FILE)"; \ 114106407Sphk exit 1; \ 115106407Sphk fi 116106407Sphk $(TOUCH) $@ 117106407Sphk 118106407Sphkupdate-jar1-manifest: $(OUTPUT_DIR)/_jar1_updated_manifest 119106407Sphk 120106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar1_updated $(OUTPUT_DIR)/_jar1_updated_manifest 121106407Sphk 122105464Sphk.PHONY: clean-jar1 create-jar1 update-jar1 update-jar1-manifest 123105464Sphk 124106407Sphk################################################################################ 125106407Sphk# Test: jar2 126106407Sphk# Creates a jar file based on 2 source roots 127120876Sphk 128105464SphkJAR2_SRC_ROOT1 := $(OUTPUT_DIR)/jar2src1 129107450SphkJAR2_SRC_ROOT2 := $(OUTPUT_DIR)/jar2src2 130107450SphkJAR2_UNZIP := $(OUTPUT_DIR)/jar2unzip 131105464SphkJAR2_FILE := $(OUTPUT_DIR)/jar2.jar 132106407Sphk 133107450Sphkclean-jar2: 134107450Sphk $(RM) -r $(OUTPUT_DIR)/_jar2* $(OUTPUT_DIR)/jar2* 135106407Sphk 136106407Sphk$(OUTPUT_DIR)/_jar2_created: $(DEPS) 137120876Sphk $(RM) -r $(JAR2_SRC_ROOT1) 138120876Sphk $(RM) -r $(JAR2_SRC_ROOT2) 139120876Sphk $(RM) $(JAR2_FILE) 140106407Sphk $(RM) -r $(JAR2_UNZIP) 141106407Sphk $(MKDIR) -p $(JAR2_SRC_ROOT1)/dir1 142106407Sphk $(MKDIR) -p $(JAR2_SRC_ROOT2)/dir2 143106407Sphk $(TOUCH) $(JAR2_SRC_ROOT1)/dir1/file1.class 144105464Sphk $(TOUCH) $(JAR2_SRC_ROOT2)/dir2/file2.class 145105464Sphk $(TOUCH) $@ 146106407Sphk 147120876Sphk$(eval $(call SetupJarArchive, BUILD_JAR2, \ 148105464Sphk DEPENDENCIES := $(OUTPUT_DIR)/_jar2_created, \ 149106407Sphk SRCS := $(JAR2_SRC_ROOT1) $(JAR2_SRC_ROOT2), \ 150106407Sphk JAR := $(JAR2_FILE), \ 151106407Sphk)) 152106407Sphk 153106407Sphk$(OUTPUT_DIR)/_jar2_verified: $(BUILD_JAR2) 154105464Sphk $(RM) -r $(JAR2_UNZIP) 155106407Sphk $(MKDIR) -p $(JAR2_UNZIP) 156120876Sphk $(CD) $(JAR2_UNZIP) && $(UNZIP) $(JAR2_FILE) $(LOG_DEBUG) 157106407Sphk $(DIFF) -r $(JAR2_SRC_ROOT1)/dir1 $(JAR2_UNZIP)/dir1 158106407Sphk $(DIFF) -r $(JAR2_SRC_ROOT2)/dir2 $(JAR2_UNZIP)/dir2 159106407Sphk $(TOUCH) $@ 160113010Sphk 161106407Sphkcreate-jar2: $(OUTPUT_DIR)/_jar2_verified 162106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar2_verified 163106407Sphk 164113010Sphk$(OUTPUT_DIR)/_jar2_updated: $(OUTPUT_DIR)/_jar2_verified 165106407Sphk $(ECHO) updated > $(JAR2_SRC_ROOT1)/dir1/file1.class 166106407Sphk $(TOUCH) $(OUTPUT_DIR)/_jar2_created 167106407Sphk +$(MAKE) -f $(THIS_FILE) $(OUTPUT_DIR)/_jar2_verified 168113010Sphk $(TOUCH) $@ 169106407Sphk 170106407Sphkupdate-jar2: $(OUTPUT_DIR)/_jar2_updated 171106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar2_updated 172113010Sphk 173106407Sphk.PHONY: clean-jar2 create-jar2 update-jar2 174106407Sphk 175106407Sphk################################################################################ 176113010Sphk# Test: jar3 177106407Sphk# Creates a jar file based on 2 source roots with an extra file 178106407Sphk 179106407SphkJAR3_SRC_ROOT1 := $(OUTPUT_DIR)/jar3src1 180106407SphkJAR3_SRC_ROOT2 := $(OUTPUT_DIR)/jar3src2 181106407SphkJAR3_UNZIP := $(OUTPUT_DIR)/jar3unzip 182106407SphkJAR3_FILE := $(OUTPUT_DIR)/jar3.jar 183113010Sphk 184106407Sphkclean-jar3: 185106407Sphk $(RM) -r $(OUTPUT_DIR)/_jar3* $(OUTPUT_DIR)/jar3* 186106407Sphk 187106407Sphk$(OUTPUT_DIR)/_jar3_created: $(DEPS) 188106407Sphk $(RM) -r $(JAR3_SRC_ROOT1) 189106407Sphk $(RM) -r $(JAR3_SRC_ROOT2) 190106407Sphk $(RM) $(JAR3_FILE) 191106407Sphk $(RM) -r $(JAR3_UNZIP) 192106407Sphk $(MKDIR) -p $(JAR3_SRC_ROOT1)/dir1 193106407Sphk $(MKDIR) -p $(JAR3_SRC_ROOT2)/dir2 194106407Sphk $(TOUCH) $(JAR3_SRC_ROOT1)/dir1/file1\$$foo.class 195106407Sphk $(TOUCH) $(JAR3_SRC_ROOT2)/dir2/file2.class 196106407Sphk $(TOUCH) $(JAR3_SRC_ROOT2)/extra-file 197106407Sphk $(TOUCH) $(JAR3_SRC_ROOT2)/extra-file-abs 198106407Sphk $(TOUCH) $(JAR3_SRC_ROOT2)/dir2/file\$$foo.dollar 199106407Sphk $(TOUCH) $@ 200106407Sphk 201106407Sphk$(eval $(call SetupJarArchive, BUILD_JAR3, \ 202106407Sphk DEPENDENCIES := $(OUTPUT_DIR)/_jar3_created, \ 203106407Sphk SRCS := $(JAR3_SRC_ROOT1) $(JAR3_SRC_ROOT2), \ 204106407Sphk EXTRA_FILES := extra-file \ 205106407Sphk dir2/file$$$$foo.dollar \ 206106407Sphk $(JAR3_SRC_ROOT2)/extra-file-abs, \ 207106407Sphk EXCLUDE_FILES := dir1/file1$$$$foo.class, \ 208106407Sphk JAR := $(JAR3_FILE), \ 209106407Sphk)) 210106407Sphk 211106407Sphk$(OUTPUT_DIR)/_jar3_verified: $(BUILD_JAR3) 212106407Sphk $(RM) -r $(JAR3_UNZIP) 213106407Sphk $(MKDIR) -p $(JAR3_UNZIP) 214105464Sphk $(CD) $(JAR3_UNZIP) && $(UNZIP) $(JAR3_FILE) $(LOG_DEBUG) 215105464Sphk if [ -d "$(JAR3_UNZIP)/dir1" ]; then \ 216106407Sphk echo Should not be included $(JAR3_UNZIP)/dir1; \ 217106407Sphk exit 1; \ 218105464Sphk fi 219106407Sphk $(DIFF) -r $(JAR3_SRC_ROOT2)/dir2 $(JAR3_UNZIP)/dir2 220106407Sphk $(DIFF) -r $(JAR3_SRC_ROOT2)/extra-file $(JAR3_UNZIP)/extra-file 221106407Sphk $(TOUCH) $@ 222106407Sphk 223106407Sphkcreate-jar3: $(OUTPUT_DIR)/_jar3_verified 224105464SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar3_verified 225105464Sphk 226120876Sphk$(OUTPUT_DIR)/_jar3_updated: $(OUTPUT_DIR)/_jar3_verified 227106407Sphk $(ECHO) updated > $(JAR3_SRC_ROOT2)/extra-file 228106407Sphk $(TOUCH) $(OUTPUT_DIR)/_jar3_created 229106407Sphk +$(MAKE) -f $(THIS_FILE) $(OUTPUT_DIR)/_jar3_verified 230113010Sphk $(TOUCH) $@ 231106407Sphk 232106407Sphkupdate-jar3: $(OUTPUT_DIR)/_jar3_updated 233106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar3_updated 234113010Sphk 235106407Sphk.PHONY: clean-jar3 create-jar3 update-jar3 236106407Sphk 237106407Sphk################################################################################ 238113010Sphk# Test SetupJavaCompilation overrides of java files 239106407Sphk 240106407Sphk$(eval $(call SetupJavaCompiler,BOOT_JAVAC, \ 241106407Sphk JAVAC := $(JAVAC), \ 242113010Sphk DISABLE_SJAVAC := true, \ 243106407Sphk)) 244106407Sphk 245106407SphkJAVA_SRC_ROOT1 := $(OUTPUT_DIR)/javaroot1 246113010SphkJAVA_SRC_ROOT2 := $(OUTPUT_DIR)/javaroot2 247106407Sphk 248106407Sphk# Since this makefile calls itself a number of times, protect this macro from 249106407Sphk# being executed more than once. 250106407Sphk# Param 1 - File name 251106407Sphk# Param 2 - Package name 252106407Sphk# Param 3 - Class name 253113010Sphk# Param 4 - Message 254106407SphkCreateJavaSrc = \ 255106407Sphk $(if $(wildcard $1),,$(shell \ 256106407Sphk $(MKDIR) -p $(dir $1); \ 257106407Sphk $(ECHO) "package $2;" > $1; \ 258106407Sphk $(ECHO) "public class $3 {" >> $1; \ 259106407Sphk $(ECHO) " public static void main(String[] args) {" >> $1; \ 260106407Sphk $(ECHO) " System.out.print(\"$4\");" >> $1; \ 261106407Sphk $(ECHO) " }" >> $1; \ 262106407Sphk $(ECHO) "}" >> $1; \ 263106407Sphk )) 264106407Sphk 265106407Sphk# Since this makefile calls itself a number of times, protect this macro from 266106407Sphk# being executed more than once. 267106407Sphk# Param 1 - File name 268106407Sphk# Param 2 - Message 269106407SphkCreateTextFile = \ 270106407Sphk $(if $(wildcard $1),,$(shell \ 271106407Sphk $(MKDIR) -p $(dir $1); \ 272106407Sphk $(PRINTF) '$2' > $1; \ 273106407Sphk )) 274105464Sphk 275106407Sphk$(call CreateJavaSrc,$(JAVA_SRC_ROOT1)/a/A.java,a,A,javaroot1) 276106407Sphk$(call CreateJavaSrc,$(JAVA_SRC_ROOT2)/a/A.java,a,A,javaroot2) 277106407Sphk$(call CreateTextFile,$(JAVA_SRC_ROOT1)/a/b.txt,javaroot1\n) 278106407Sphk$(call CreateTextFile,$(JAVA_SRC_ROOT2)/a/b.txt,javaroot2\n) 279106407Sphk$(call CreateTextFile,$(JAVA_SRC_ROOT1)/a/c.properties,#javaroot1\nname=value1\n) 280106407Sphk$(call CreateTextFile,$(JAVA_SRC_ROOT2)/a/c.properties,#javaroot2\nname=value2\n) 281106407Sphk 282106407Sphk# Due to a bug in gnu make 3.81, need to add the src roots with trailing slash, 283106407Sphk# otherwise $(wildcard ) will not find the directories and the sanity check in 284105464Sphk# SetupJavaCompilation will fail. 285105464Sphk$(eval $(call SetupJavaCompilation, BUILD_ROOT1_FIRST, \ 286105464Sphk SETUP := BOOT_JAVAC, \ 287106407Sphk SRC := $(JAVA_SRC_ROOT1)/ $(JAVA_SRC_ROOT2)/, \ 288106407Sphk COPY := .txt .java, \ 289106407Sphk CLEAN := .properties, \ 290106407Sphk BIN := $(OUTPUT_DIR)/root1first/, \ 291106407Sphk)) 292298808Spfg 293106407Sphk$(BUILD_ROOT1_FIRST): 294106407Sphk 295106407Sphkverify-root1-first: $(BUILD_ROOT1_FIRST) 296106407Sphk $(JAVA_SMALL) -cp $(OUTPUT_DIR)/root1first a.A > $(OUTPUT_DIR)/root1first.output 297106407Sphk if [ "`$(CAT) $(OUTPUT_DIR)/root1first.output`" != "javaroot1" ]; then \ 298106407Sphk $(ECHO) "The wrong class was compiled. Expected >javaroot1<"; \ 299106407Sphk $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root1first.output`<"; \ 300106407Sphk false; \ 301106407Sphk fi 302106407Sphk if [ "`$(CAT) $(OUTPUT_DIR)/root1first/a/b.txt`" != "javaroot1" ]; then \ 303105464Sphk $(ECHO) "The wrong file was copied. Expected >javaroot1<"; \ 304105464Sphk $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root1first/a/b.txt`<"; \ 305105464Sphk false; \ 306120876Sphk fi 307105464Sphk if [ ! -e "$(OUTPUT_DIR)/root1first/a/A.java" ]; then \ 308106407Sphk $(ECHO) "Missed copying $(OUTPUT_DIR)/root1first/a/A.java"; \ 309105464Sphk false; \ 310105464Sphk fi 311105464Sphk if [ "`$(CAT) $(OUTPUT_DIR)/root1first/a/c.properties`" != "name=value1" ]; then \ 312120876Sphk $(ECHO) "The wrong file was cleaned. Expected >name=value1<"; \ 313120876Sphk $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root1first/a/c.properties`<"; \ 314106407Sphk false; \ 315120876Sphk fi 316106407Sphk 317106407Sphk$(eval $(call SetupJavaCompilation, BUILD_ROOT2_FIRST, \ 318105464Sphk SETUP := BOOT_JAVAC, \ 319105512Sphk SRC := $(JAVA_SRC_ROOT2)/ $(JAVA_SRC_ROOT1)/, \ 320105464Sphk COPY := .txt, \ 321105464Sphk CLEAN := .properties, \ 322105464Sphk BIN := $(OUTPUT_DIR)/root2first/, \ 323105464Sphk)) 324120876Sphk 325105464Sphk$(BUILD_ROOT2_FIRST): 326105464Sphk 327105464Sphkverify-root2-first: $(BUILD_ROOT2_FIRST) 328106407Sphk $(JAVA_SMALL) -cp $(OUTPUT_DIR)/root2first a.A > $(OUTPUT_DIR)/root2first.output 329105464Sphk if [ "`$(CAT) $(OUTPUT_DIR)/root2first.output`" != "javaroot2" ]; then \ 330106407Sphk $(ECHO) "The wrong class was compiled. Expected >javaroot2<"; \ 331120876Sphk $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root2first.output`<"; \ 332106407Sphk false; \ 333120876Sphk fi 334106407Sphk if [ "`$(CAT) $(OUTPUT_DIR)/root2first/a/b.txt`" != "javaroot2" ]; then \ 335105464Sphk $(ECHO) "The wrong file was cleaned. Expected >javaroot2<"; \ 336105512Sphk $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root2first/a/b.txt`<"; \ 337120876Sphk false; \ 338105464Sphk fi 339105464Sphk if [ "`$(CAT) $(OUTPUT_DIR)/root2first/a/c.properties`" != "name=value2" ]; then \ 340105464Sphk $(ECHO) "The wrong file was cleaned. Expected >name=value2<"; \ 341106407Sphk $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root2first/a/c.properties`<"; \ 342106407Sphk false; \ 343106407Sphk fi 344106407Sphk 345106407SphkTEST_TARGETS += verify-root1-first verify-root2-first 346106407Sphk 347106407Sphk.PHONY: verify-root1-first verify-root2-first 348106407Sphk 349106407Sphk################################################################################ 350106407Sphk 351105464Sphkall: $(TEST_TARGETS) 352105464Sphk 353105512Sphk.PHONY: default all 354106407Sphk