--- old/makefiles/CreateJars.gmk 2013-01-08 02:19:35.446544993 -0500 +++ new/makefiles/CreateJars.gmk 2013-01-08 02:19:34.034465455 -0500 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -35,16 +35,19 @@ include Tools.gmk +include Profiles.gmk + # # This makefile...so that altering will trigger rebuilding include/exclude-lists => jars # MAKEFILE=$(JDK_TOPDIR)/makefiles/CreateJars.gmk +# +# And similarly for the Profiles +PROFILE_MAKEFILES=$(JDK_TOPDIR)/makefiles/Profiles.gmk $(JDK_TOPDIR)/makefiles/profile-rtjar-includes.txt MAINMANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf BEANMANIFEST := $(JDK_TOPDIR)/make/javax/swing/beaninfo/manifest -JARS:= - $(eval $(call MakeDir,$(IMAGES_OUTPUTDIR)/lib)) ########################################################################################## @@ -57,7 +60,6 @@ JAR:=$(IMAGES_OUTPUTDIR)/lib/jconsole.jar,\ SKIP_METAINF:=true)) -JARS+=$(IMAGES_OUTPUTDIR)/lib/jconsole.jar ########################################################################################## @@ -68,7 +70,6 @@ JAR:=$(IMAGES_OUTPUTDIR)/lib/ext/dnsns.jar,\ SKIP_METAINF:=true)) -JARS+=$(IMAGES_OUTPUTDIR)/lib/ext/dnsns.jar ########################################################################################## @@ -120,15 +121,20 @@ JAR:=$(IMAGES_OUTPUTDIR)/lib/ext/localedata.jar,\ SKIP_METAINF:=true)) -JARS+=$(IMAGES_OUTPUTDIR)/lib/ext/localedata.jar - ########################################################################################## -# rt.jar and resources.jar are being built in the same way as in the old build. They require -# the files to be in a certain order and converting that is not easy and will not be needed -# in jigsaw anyway. +# +# Different variants of rt.jar are built based on the current profile. The output +# directory is augmented with the profile name so that the final jar file and all the +# intermediary list files will be in directory. This has the form lib$PROFILE rather than +# lib/$PROFILE so that it won't get copied as part of the image generation process. +# Each profile customizes the RT_JAR_EXCLUDES variable. +# +########################################################################################## -# Exclude list for rt.jar and resources.jar -RT_JAR_EXCLUDES := \ +# Full JRE exclude list for rt.jar and resources.jar +# This value should exclude types destined for jars other than rt.jar and resources.jar. +# When building a Profile this value augments the profile specific exclusions +RT_JAR_EXCLUDES += \ com/oracle/security \ com/sun/codemodel \ com/sun/crypto/provider \ @@ -250,24 +256,9 @@ sun/tools/util \ sun/util/cldr/CLDRLocaleDataMetaInfo.class \ sun/util/resources/cldr \ - $(LOCALEDATA_INCLUDES) - -# These files should never be put into rt.jar -# but due to a misstake...some are put there if embedded -# -ifneq ($(JAVASE_EMBEDDED), true) -# normal (correct) case -RT_JAR_EXCLUDES += \ + $(LOCALEDATA_INCLUDES) \ com/oracle/jrockit/jfr \ oracle/jrockit/jfr -else -# embedded (broken) case -RT_JAR_EXCLUDES += \ - oracle/jrockit/jfr/parser \ - oracle/jrockit/jfr/tools \ - oracle/jrockit/jfr/NativeOptions.class \ - oracle/jrockit/jfr/RepositoryChunkHandler.class -endif ifeq ($(OPENJDK_TARGET_OS), macosx) RT_JAR_EXCLUDES += com/sun/nio/sctp \ @@ -278,8 +269,8 @@ ALL_FILES_IN_CLASSES := $(call not-containing,_the.,$(filter-out %javac_state,\ $(call CacheFind,$(JDK_OUTPUTDIR)/classes))) -RT_JAR_MANIFEST_FILE := $(IMAGES_OUTPUTDIR)/lib/_the.rt.jar_manifest -RESOURCE_JAR_MANIFEST_FILE := $(IMAGES_OUTPUTDIR)/lib/_the.resources.jar_manifest +RT_JAR_MANIFEST_FILE := $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.rt.jar_manifest +RESOURCE_JAR_MANIFEST_FILE := $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.resources.jar_manifest $(RT_JAR_MANIFEST_FILE): $(MAINMANIFEST) $(BEANMANIFEST) $(MKDIR) -p $(@D) @@ -299,7 +290,7 @@ $(MAINMANIFEST) >> $@.tmp $(MV) $@.tmp $@ -$(IMAGES_OUTPUTDIR)/lib/_the.jars.exclude: $(MAKEFILE) +$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.jars.exclude: $(MAKEFILE) $(PROFILE_MAKEFILES) $(MKDIR) -p $(@D) $(RM) $@ $@.tmp $(call ListPathsSafely,RT_JAR_EXCLUDES,\n, >> $@.tmp) @@ -312,55 +303,115 @@ $(TOOL_ADDJSUM) $< $@.tmp $(MV) $@.tmp $@ -$(IMAGES_OUTPUTDIR)/lib/_the.jars.contents: $(BUILD_TOOLS) $(IMAGES_OUTPUTDIR)/lib/_the.jars.exclude \ +$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.jars.contents: $(BUILD_TOOLS) $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.jars.exclude \ $(ALL_FILES_IN_CLASSES) $(IMAGES_OUTPUTDIR)/lib/classlist $(MKDIR) -p $(@D) $(RM) $@ $@.tmp ($(CD) $(JDK_OUTPUTDIR)/classes && \ $(TOOL_JARREORDER) \ - -o $@.tmp $(IMAGES_OUTPUTDIR)/lib/classlist $(IMAGES_OUTPUTDIR)/lib/_the.jars.exclude . ) + -o $@.tmp $(IMAGES_OUTPUTDIR)/lib/classlist $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.jars.exclude . ) $(MV) $@.tmp $@ -$(IMAGES_OUTPUTDIR)/lib/_the.rt.jar.contents: $(IMAGES_OUTPUTDIR)/lib/_the.jars.contents +$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.rt.jar.contents: $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.jars.contents $(MKDIR) -p $(@D) $(RM) $@ $@.tmp - $(GREP) -e '\.class$$' $(IMAGES_OUTPUTDIR)/lib/_the.jars.contents > $@.tmp + $(GREP) -e '\.class$$' $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.jars.contents > $@.tmp +ifneq ($(PROFILE),) +# # Add back classes from excluded packages (fixing the $ substitution in the process) + for type in $(subst \$$,\, $(RT_JAR_INCLUDE_TYPES)) ; do \ + $(ECHO) $$type >> $@.tmp ; \ + done +endif $(MV) $@.tmp $@ -$(IMAGES_OUTPUTDIR)/lib/_the.resources.jar.contents: $(IMAGES_OUTPUTDIR)/lib/_the.jars.contents +$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.resources.jar.contents: $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.jars.contents $(MKDIR) -p $(@D) $(RM) $@ $@.tmp $(GREP) -v -e '\.class$$' \ -e '/_the\.*' -e '^_the\.*' -e '\\_the\.*' -e 'javac_state' \ - $(IMAGES_OUTPUTDIR)/lib/_the.jars.contents > $@.tmp + $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.jars.contents > $@.tmp +ifneq ($(PROFILE),) +# # Strip out all META-INF/services/ entries + $(GREP) -v -e 'META-INF/services/' $@.tmp > $@.tmp2 +# # Add back the required services +# # FIXME: On Solaris if PROFILE_INCLUDE_METAINF_SERVICES is not defined +# # we get a syntax error from sh. That doesn't happen on linux + for service in $(PROFILE_INCLUDE_METAINF_SERVICES) ; do \ + $(ECHO) $$service >> $@.tmp2; \ + done + $(MV) $@.tmp2 $@.tmp +endif $(MV) $@.tmp $@ +# This is a hack but I don't know how to make this fit into the existing scheme +$(PROFILE_VERSION_CLASS_TARGETS) : $(PROFILE_VERSION_JAVA_TARGETS) + @$(JAVAC) -d $(@D)/../../ $(@D)/$(VERSION_JAVA_FILE) + + +# Support for removing the addPropertyChangeListener and removePropertyChangeListener +# methods from classes that only go into the profile builds. For now the Pack200.Packer +# and Packer200.Unpacker classes have special handling because of the $ in the file +# name. +BEANLESS_CLASSES = $(IMAGES_OUTPUTDIR)/beanless + +$(BEANLESS_CLASSES)/%: $(JDK_OUTPUTDIR)/classes/% + $(MKDIR) -p $(@D) + $(TOOL_REMOVEMETHODS) $< $@ addPropertyChangeListener removePropertyChangeListener + +CLASSES_TO_DEBEAN = \ + java/util/logging/LogManager.class \ + com/sun/java/util/jar/pack/PackerImpl.class \ + com/sun/java/util/jar/pack/UnpackerImpl.class + +BEANLESS_CLASSES_TARGETS = +ifneq ($(PROFILE),) + BEANLESS_CLASSES_TARGETS := $(foreach c, $(CLASSES_TO_DEBEAN), $(BEANLESS_CLASSES)/$c) +endif + + RT_JAR_CREATE_OPTIONS := c0fm +RT_JAR_UPDATE_OPTIONS := u0f ifeq ($(COMPRESS_JARS), true) RT_JAR_CREATE_OPTIONS := cfm + RT_JAR_UPDATE_OPTIONS := uf endif -$(IMAGES_OUTPUTDIR)/lib/rt.jar: $(IMAGES_OUTPUTDIR)/lib/_the.rt.jar.contents $(RT_JAR_MANIFEST_FILE) - $(ECHO) Creating rt.jar +# This defines a target-specific variables to make the shell logic easier to see. +# We need to find the Version.class file for the profile currently being built +$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/rt.jar: \ + CLASS_FILE = $(if $(PROFILE),$(strip $(foreach class,$(PROFILE_VERSION_CLASS_TARGETS),$(if $(findstring $(PROFILE),$(class)),$(class)))), NO_SUCH_FILE) +# This is the real target +$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/rt.jar: $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.rt.jar.contents $(RT_JAR_MANIFEST_FILE) $(PROFILE_VERSION_CLASS_TARGETS) $(BEANLESS_CLASSES_TARGETS) + $(ECHO) Creating rt.jar $(PROFILE) Compressed=$(COMPRESS_JARS) $(MKDIR) -p $(@D) $(RM) $@ $@.tmp $(CD) $(JDK_OUTPUTDIR)/classes && \ $(JAR) $(RT_JAR_CREATE_OPTIONS) $@.tmp $(RT_JAR_MANIFEST_FILE) \ - @$(IMAGES_OUTPUTDIR)/lib/_the.rt.jar.contents + @$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.rt.jar.contents && \ + if [ -f $(CLASS_FILE) ]; then \ + $(ECHO) Updating rt.jar $(PROFILE) && \ + $(CD) $(patsubst %$(VERSION_CLASS_PATH),%,$(CLASS_FILE)) && \ + $(JAR) $(RT_JAR_UPDATE_OPTIONS) $@.tmp $(VERSION_CLASS_PATH); \ + $(MKDIR) -p $(BEANLESS_CLASSES)/java/util/jar; \ + $(TOOL_REMOVEMETHODS) $(JDK_OUTPUTDIR)/classes/java/util/jar/Pack200\$$Packer.class \ + $(BEANLESS_CLASSES)/java/util/jar/Pack200\$$Packer.class addPropertyChangeListener removePropertyChangeListener; \ + $(TOOL_REMOVEMETHODS) $(JDK_OUTPUTDIR)/classes/java/util/jar/Pack200\$$Unpacker.class \ + $(BEANLESS_CLASSES)/java/util/jar/Pack200\$$Unpacker.class addPropertyChangeListener removePropertyChangeListener; \ + $(CD) $(BEANLESS_CLASSES) && \ + $(JAR) $(RT_JAR_UPDATE_OPTIONS) $@.tmp $(CLASSES_TO_DEBEAN) java/util/jar/* ; \ + fi $(MV) $@.tmp $@ -$(IMAGES_OUTPUTDIR)/lib/resources.jar: $(IMAGES_OUTPUTDIR)/lib/_the.resources.jar.contents \ +$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/resources.jar: $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.resources.jar.contents \ $(RESOURCE_JAR_MANIFEST_FILE) $(ECHO) Creating resources.jar $(MKDIR) -p $(@D) $(RM) $@ $@.tmp $(CD) $(JDK_OUTPUTDIR)/classes && \ $(JAR) $(RT_JAR_CREATE_OPTIONS) $@.tmp $(RESOURCE_JAR_MANIFEST_FILE) \ - @$(IMAGES_OUTPUTDIR)/lib/_the.resources.jar.contents + @$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.resources.jar.contents $(MV) $@.tmp $@ -JARS+=$(IMAGES_OUTPUTDIR)/lib/rt.jar $(IMAGES_OUTPUTDIR)/lib/resources.jar - ########################################################################################## ifneq ($(OPENJDK_TARGET_OS), windows) @@ -385,8 +436,6 @@ SKIP_METAINF := true, \ CHECK_COMPRESS_JAR:=true)) -JARS+=$(IMAGES_OUTPUTDIR)/lib/charsets.jar - ########################################################################################## ifndef OPENJDK @@ -400,7 +449,6 @@ MANIFEST:=$(MAINMANIFEST), \ CHECK_COMPRESS_JAR:=true)) - JARS+=$(IMAGES_OUTPUTDIR)/lib/jfr.jar endif endif @@ -417,8 +465,6 @@ MANIFEST:=$(MAINMANIFEST), \ CHECK_COMPRESS_JAR:=true)) -JARS+=$(IMAGES_OUTPUTDIR)/lib/jsse.jar - ########################################################################################## # Create manifest for security jars @@ -438,7 +484,8 @@ ########################################################################################## # For all security jars, always build the jar, but for closed, install the prebuilt signed -# version instead of the newly built jar. For open, signing is not needed. See SignJars.gmk +# version instead of the newly built jar. Unsigned jars are treated as intermediate targets +# and explicitly added to the JARS list. For open, signing is not needed. See SignJars.gmk # for more information. SUNPKCS11_JAR_DST := $(IMAGES_OUTPUTDIR)/lib/ext/sunpkcs11.jar @@ -464,7 +511,7 @@ $(install-file) endif -JARS += $(SUNPKCS11_JAR_DST) $(SUNPKCS11_JAR_UNSIGNED) +JARS += $(SUNPKCS11_JAR_UNSIGNED) ########################################################################################## @@ -491,7 +538,7 @@ $(install-file) endif -JARS += $(SUNEC_JAR_DST) $(SUNEC_JAR_UNSIGNED) +JARS += $(SUNEC_JAR_UNSIGNED) ########################################################################################## @@ -504,8 +551,6 @@ JAR:=$(IMAGES_OUTPUTDIR)/lib/dt.jar,\ SKIP_METAINF:=true)) -JARS+=$(IMAGES_OUTPUTDIR)/lib/dt.jar - ########################################################################################## SUNJCE_PROVIDER_JAR_DST := $(IMAGES_OUTPUTDIR)/lib/ext/sunjce_provider.jar @@ -531,7 +576,7 @@ $(install-file) endif -JARS += $(SUNJCE_PROVIDER_JAR_DST) $(SUNJCE_PROVIDER_JAR_UNSIGNED) +JARS += $(SUNJCE_PROVIDER_JAR_UNSIGNED) ########################################################################################## @@ -558,7 +603,7 @@ $(install-file) endif -JARS += $(JCE_JAR_DST) $(JCE_JAR_UNSIGNED) +JARS += $(JCE_JAR_UNSIGNED) ########################################################################################## @@ -596,7 +641,7 @@ $(install-file) endif -JARS += $(US_EXPORT_POLICY_JAR_DST) $(US_EXPORT_POLICY_JAR_UNSIGNED) +JARS += $(US_EXPORT_POLICY_JAR_UNSIGNED) ########################################################################################## @@ -639,7 +684,7 @@ $(install-file) endif -JARS += $(LOCAL_POLICY_JAR_DST) $(LOCAL_POLICY_JAR_UNSIGNED) +JARS += $(LOCAL_POLICY_JAR_UNSIGNED) ########################################################################################## @@ -665,7 +710,7 @@ $(install-file) endif -JARS += $(SUNMSCAPI_JAR_DST) $(SUNMSCAPI_JAR_UNSIGNED) +JARS += $(SUNMSCAPI_JAR_UNSIGNED) endif @@ -692,7 +737,7 @@ @$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt OracleUcrypto provider..." $(install-file) -JARS += $(UCRYPTO_JAR_DST) $(UCRYPTO_JAR_UNSIGNED) +JARS += $(UCRYPTO_JAR_UNSIGNED) endif endif @@ -715,8 +760,6 @@ EXTRA_MANIFEST_ATTR:=CLDR-Version: $(CLDRVERSION),\ SKIP_METAINF:=true)) -JARS += $(CLDRDATA_JAR_DST) - ########################################################################################## TOOLS_JAR_INCLUDES := \ @@ -788,7 +831,6 @@ SKIP_METAINF:=true, \ CHECK_COMPRESS_JAR:=true)) -JARS+=$(IMAGES_OUTPUTDIR)/lib/tools.jar ########################################################################################## @@ -829,6 +871,7 @@ -processor com.sun.tools.javac.sym.CreateSymbols \ -Acom.sun.tools.javac.sym.Jar=$(IMAGES_OUTPUTDIR)/lib/rt.jar \ -Acom.sun.tools.javac.sym.Dest=$(IMAGES_OUTPUTDIR)/symbols/META-INF/sym/rt.jar \ + -Acom.sun.tools.javac.sym.Profiles=profile-rtjar-includes.txt \ $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) $(EXPORTED_PRIVATE_PKGS) $(TOUCH) $@ @@ -839,7 +882,6 @@ JAR:=$(IMAGES_OUTPUTDIR)/lib/ct.sym, \ CHECK_COMPRESS_JAR:=true)) -JARS+=$(IMAGES_OUTPUTDIR)/lib/ct.sym ########################################################################################## @@ -925,8 +967,6 @@ ZIP:=$(IMAGES_OUTPUTDIR)/src.zip,\ EXTRA_DEPS:=$(LAUNCHER_ZIP_SRC))) -JARS+=$(IMAGES_OUTPUTDIR)/src.zip - ########################################################################################## # @@ -936,15 +976,11 @@ $(IMAGES_OUTPUTDIR)/lib/management-agent.jar : $(JDK_TOPDIR)/src/share/classes/sun/management/manifest $(JAR) cfm $@ $< -JARS += $(IMAGES_OUTPUTDIR)/lib/management-agent.jar - ########################################################################################## $(IMAGES_OUTPUTDIR)/lib/ext/zipfs.jar : $(JDK_OUTPUTDIR)/demo/nio/zipfs/zipfs.jar $(install-file) -JARS += $(IMAGES_OUTPUTDIR)/lib/ext/zipfs.jar - ########################################################################################## ifeq ($(OPENJDK_TARGET_OS),macosx) @@ -952,8 +988,6 @@ SRCS:=$(JDK_OUTPUTDIR)/jobjc_classes,\ JAR:=$(IMAGES_OUTPUTDIR)/lib/JObjC.jar, \ JARINDEX:=true)) - - JARS += $(IMAGES_OUTPUTDIR)/lib/JObjC.jar endif ########################################################################################## @@ -963,7 +997,6 @@ SRCS:=$(JDK_OUTPUTDIR)/altclasses_classes,\ JAR:=$(IMAGES_OUTPUTDIR)/lib/alt-rt.jar)) - JARS += $(IMAGES_OUTPUTDIR)/lib/alt-rt.jar endif ########################################################################################## @@ -974,8 +1007,6 @@ $(IMAGES_OUTPUTDIR)/lib/sa-jdi.jar: $(JDK_OUTPUTDIR)/lib/sa-jdi.jar $(install-file) -JARS += $(IMAGES_OUTPUTDIR)/lib/sa-jdi.jar - ########################################################################################## # # sec-bin.zip is used by builds where the corresponding sources are not available