jdk/make/CreateJars.gmk
changeset 21805 c7d7946239de
parent 21416 7d9198dd107c
child 22336 a5de9b85e983
child 22046 b7163958d6d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/CreateJars.gmk	Thu Nov 14 11:19:32 2013 +0100
@@ -0,0 +1,786 @@
+#
+# 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
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.  Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+include $(SPEC)
+include MakeBase.gmk
+include JavaCompilation.gmk
+include Setup.gmk
+
+default: all
+
+# Prepare the find cache. Only used if running on windows.
+$(eval $(call FillCacheFind, $(JDK_OUTPUTDIR)/classes))
+
+include Tools.gmk
+
+include Profiles.gmk
+
+#
+# This makefile...so that altering will trigger rebuilding include/exclude-lists => jars
+#
+MAKEFILE = $(JDK_TOPDIR)/make/CreateJars.gmk
+#
+# And similarly for the Profiles
+PROFILE_MAKEFILES = $(JDK_TOPDIR)/make/Profiles.gmk $(JDK_TOPDIR)/make/profile-rtjar-includes.txt
+
+MAINMANIFEST := $(JDK_TOPDIR)/make/data/mainmanifest/manifest.mf
+BEANMANIFEST := $(JDK_TOPDIR)/make/data/swingbeaninfo/manifest.mf
+
+$(eval $(call MakeDir, $(IMAGES_OUTPUTDIR)/lib))
+
+##########################################################################################
+
+$(eval $(call SetupArchive,BUILD_JCONSOLE_JAR, , \
+    SRCS := $(JDK_OUTPUTDIR)/classes, \
+    SUFFIXES := .class .gif .png .properties, \
+    INCLUDES := sun/tools/jconsole com/sun/tools/jconsole, \
+    JARMAIN := sun.tools.jconsole.JConsole, \
+    JAR := $(IMAGES_OUTPUTDIR)/lib/jconsole.jar, \
+    SKIP_METAINF := true))
+
+
+##########################################################################################
+
+$(eval $(call SetupArchive,BUILD_DNS_JAR, , \
+    SRCS := $(JDK_OUTPUTDIR)/classes, \
+    INCLUDES := sun/net/spi/nameservice/dns, \
+    EXTRA_FILES := META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor, \
+    JAR := $(IMAGES_OUTPUTDIR)/lib/ext/dnsns.jar, \
+    SKIP_METAINF := true))
+
+
+##########################################################################################
+
+LOCALEDATA_INCLUDE_LOCALES := ar be bg ca cs da de el es et fi fr ga hi hr hu in is it \
+    iw ja ko lt lv mk ms mt nl no pl pt ro ru sk sl sq sr sv \
+    th tr uk vi zh
+
+LOCALEDATA_INCLUDES := $(addprefix sun/text/resources/, $(LOCALEDATA_INCLUDE_LOCALES)) \
+    $(addprefix sun/util/resources/, $(LOCALEDATA_INCLUDE_LOCALES))
+
+$(eval $(call SetupArchive,BUILD_LOCALEDATA_JAR, , \
+    SRCS := $(JDK_OUTPUTDIR)/classes, \
+    SUFFIXES := .class _dict _th, \
+    INCLUDES := $(LOCALEDATA_INCLUDES), \
+    EXCLUDES := sun/text/resources/th/BreakIteratorRules_th.class, \
+    JAR := $(IMAGES_OUTPUTDIR)/lib/ext/localedata.jar, \
+    SKIP_METAINF := true))
+
+##########################################################################################
+#
+# 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.
+#
+##########################################################################################
+
+# 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/sun/codemodel \
+    com/sun/crypto/provider \
+    com/sun/istack/internal/tools \
+    com/sun/jarsigner \
+    com/sun/java/accessibility \
+    com/sun/javadoc \
+    com/sun/jdi \
+    com/sun/net/ssl/internal/ssl \
+    com/sun/source \
+    com/sun/tools \
+    com/sun/xml/internal/dtdparser \
+    com/sun/xml/internal/rngom \
+    com/sun/xml/internal/xsom \
+    javax/crypto \
+    javax/swing/AbstractButtonBeanInfo.class \
+    javax/swing/beaninfo \
+    javax/swing/BoxBeanInfo.class \
+    javax/swing/JAppletBeanInfo.class \
+    javax/swing/JButtonBeanInfo.class \
+    javax/swing/JCheckBoxBeanInfo.class \
+    javax/swing/JCheckBoxMenuItemBeanInfo.class \
+    javax/swing/JColorChooserBeanInfo.class \
+    javax/swing/JComboBoxBeanInfo.class \
+    javax/swing/JComponentBeanInfo.class \
+    javax/swing/JDesktopPaneBeanInfo.class \
+    javax/swing/JDialogBeanInfo.class \
+    javax/swing/JEditorPaneBeanInfo.class \
+    javax/swing/JFileChooserBeanInfo.class \
+    javax/swing/JFormattedTextFieldBeanInfo.class \
+    javax/swing/JFrameBeanInfo.class \
+    javax/swing/JInternalFrameBeanInfo.class \
+    javax/swing/JLabelBeanInfo.class \
+    javax/swing/JLayeredPaneBeanInfo.class \
+    javax/swing/JListBeanInfo.class \
+    javax/swing/JMenuBarBeanInfo.class \
+    javax/swing/JMenuBeanInfo.class \
+    javax/swing/JMenuItemBeanInfo.class \
+    javax/swing/JOptionPaneBeanInfo.class \
+    javax/swing/JPanelBeanInfo.class \
+    javax/swing/JPasswordFieldBeanInfo.class \
+    javax/swing/JPopupMenuBeanInfo.class \
+    javax/swing/JProgressBarBeanInfo.class \
+    javax/swing/JRadioButtonBeanInfo.class \
+    javax/swing/JRadioButtonMenuItemBeanInfo.class \
+    javax/swing/JScrollBarBeanInfo.class \
+    javax/swing/JScrollPaneBeanInfo.class \
+    javax/swing/JSeparatorBeanInfo.class \
+    javax/swing/JSliderBeanInfo.class \
+    javax/swing/JSpinnerBeanInfo.class \
+    javax/swing/JSplitPaneBeanInfo.class \
+    javax/swing/JTabbedPaneBeanInfo.class \
+    javax/swing/JTableBeanInfo.class \
+    javax/swing/JTextAreaBeanInfo.class \
+    javax/swing/JTextFieldBeanInfo.class \
+    javax/swing/JTextPaneBeanInfo.class \
+    javax/swing/JToggleButtonBeanInfo.class \
+    javax/swing/JToolBarBeanInfo.class \
+    javax/swing/JTreeBeanInfo.class \
+    javax/swing/JWindowBeanInfo.class \
+    javax/swing/SwingBeanInfoBase.class \
+    javax/swing/text/JTextComponentBeanInfo.class \
+    META-INF/services/com.sun.jdi.connect.Connector \
+    META-INF/services/com.sun.jdi.connect.spi.TransportService \
+    META-INF/services/com.sun.tools.attach.spi.AttachProvider \
+    META-INF/services/com.sun.tools.xjc.Plugin \
+    META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor \
+    org/relaxng/datatype \
+    sun/awt/HKSCS.class \
+    sun/awt/motif/X11GB2312.class \
+    sun/awt/motif/X11GB2312\$$$$Decoder.class \
+    sun/awt/motif/X11GB2312\$$$$Encoder.class \
+    sun/awt/motif/X11GBK.class \
+    sun/awt/motif/X11GBK\$$$$Encoder.class \
+    sun/awt/motif/X11KSC5601.class \
+    sun/awt/motif/X11KSC5601\$$$$Decoder.class \
+    sun/awt/motif/X11KSC5601\$$$$Encoder.class \
+    sun/jvmstat \
+    sun/net/spi/nameservice/dns \
+    sun/nio/cs/ext \
+    sun/rmi/rmic \
+    sun/security/ec \
+    sun/security/internal \
+    sun/security/mscapi \
+    sun/security/pkcs11 \
+    sun/security/provider/Sun.class \
+    sun/security/rsa/SunRsaSign.class \
+    sun/security/ssl \
+    sun/security/tools/jarsigner \
+    sun/swing/BeanInfoUtils.class \
+    sun/text/resources/cldr \
+    sun/tools/asm \
+    sun/tools/attach \
+    sun/tools/java \
+    sun/tools/javac \
+    sun/tools/jcmd \
+    sun/tools/jconsole \
+    sun/tools/jinfo \
+    sun/tools/jmap \
+    sun/tools/jps \
+    sun/tools/jstack \
+    sun/tools/jstat \
+    sun/tools/jstatd \
+    sun/tools/native2ascii \
+    sun/tools/serialver \
+    sun/tools/tree \
+    sun/tools/util \
+    sun/util/cldr/CLDRLocaleDataMetaInfo.class \
+    sun/util/resources/cldr \
+    $(LOCALEDATA_INCLUDES) \
+    com/oracle/jrockit/jfr \
+    oracle/jrockit/jfr \
+    jdk/jfr
+
+# Find all files in the classes dir to use as dependencies. This could be more fine granular.
+ALL_FILES_IN_CLASSES := $(call not-containing, _the., $(filter-out %javac_state, \
+    $(call CacheFind, $(JDK_OUTPUTDIR)/classes)))
+
+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)
+	$(RM) $@ $@.tmp
+	$(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \
+	    -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \
+	    $(MAINMANIFEST) >> $@.tmp
+	$(ECHO) >> $@.tmp
+	$(CAT) $(BEANMANIFEST) >> $@.tmp
+	$(MV) $@.tmp $@
+
+$(RESOURCE_JAR_MANIFEST_FILE): $(MAINMANIFEST)
+	$(MKDIR) -p $(@D)
+	$(RM) $@ $@.tmp
+	$(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \
+	    -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \
+	    $(MAINMANIFEST) >> $@.tmp
+	$(MV) $@.tmp $@
+
+$(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_the.jars.exclude: $(MAKEFILE) $(PROFILE_MAKEFILES)
+	$(MKDIR) -p $(@D)
+	$(RM) $@ $@.tmp
+	$(call ListPathsSafely,RT_JAR_EXCLUDES,\n, >> $@.tmp)
+	$(MV) $@.tmp $@
+
+$(IMAGES_OUTPUTDIR)/lib/classlist: $(JDK_TOPDIR)/make/data/classlist/classlist.$(OPENJDK_TARGET_OS) \
+    $(MAKEFILE)
+	$(MKDIR) -p $(@D)
+	$(RM) $@ $@.tmp
+	$(TOOL_ADDJSUM) $< $@.tmp
+	$(MV) $@.tmp $@
+
+$(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$(PROFILE)/_the.jars.exclude . )
+	$(MV) $@.tmp $@
+
+$(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$(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$(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$(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.
+BEANLESS_CLASSES = $(IMAGES_OUTPUTDIR)/beanless
+
+# When there are $ characters in filenames we have some very subtle interactions between
+# make expansion and shell expansion. In this particular case $< will contain a single $ while
+# $@ will contain \$. So we have to pass $< in single-quotes to avoid shell expansion
+$(BEANLESS_CLASSES)/%: $(JDK_OUTPUTDIR)/classes/%
+	$(MKDIR) -p $(@D)
+	$(TOOL_REMOVEMETHODS) '$<' $@ addPropertyChangeListener removePropertyChangeListener
+
+CLASSES_TO_DEBEAN = \
+    java/util/logging/LogManager.class \
+    java/util/jar/Pack200\$$Packer.class \
+    java/util/jar/Pack200\$$Unpacker.class \
+    com/sun/java/util/jar/pack/PackerImpl.class \
+    com/sun/java/util/jar/pack/UnpackerImpl.class
+
+ifneq ($(PROFILE), )
+  BEANLESS_CLASSES_TARGETS := $(addprefix $(BEANLESS_CLASSES)/, $(CLASSES_TO_DEBEAN))
+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
+
+# 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$(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); \
+	  $(CD) $(BEANLESS_CLASSES) && \
+	  $(JAR) $(RT_JAR_UPDATE_OPTIONS) $@.tmp $(CLASSES_TO_DEBEAN); \
+	fi
+	$(MV) $@.tmp $@
+
+$(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$(PROFILE)/_the.resources.jar.contents
+	$(MV) $@.tmp $@
+
+##########################################################################################
+
+ifneq ($(OPENJDK_TARGET_OS), windows)
+  CHARSETS_EXTRA_FILES := sun/awt/motif/X11GBK.class \
+      sun/awt/motif/X11GB2312\$$$$Decoder.class \
+      sun/awt/motif/X11GB2312.class \
+      sun/awt/motif/X11KSC5601\$$$$Decoder.class \
+      sun/awt/motif/X11KSC5601\$$$$Encoder.class \
+      sun/awt/motif/X11GB2312\$$$$Encoder.class \
+      sun/awt/motif/X11GBK\$$$$Encoder.class \
+      sun/awt/motif/X11KSC5601.class
+endif
+
+$(eval $(call SetupArchive,BUILD_CHARSETS_JAR, , \
+    SRCS := $(JDK_OUTPUTDIR)/classes, \
+    SUFFIXES := .class .dat, \
+    INCLUDES := sun/nio/cs/ext, \
+    EXTRA_FILES := sun/awt/HKSCS.class \
+        $(CHARSETS_EXTRA_FILES), \
+    JAR := $(IMAGES_OUTPUTDIR)/lib/charsets.jar, \
+    SKIP_METAINF := true, \
+    CHECK_COMPRESS_JAR := true))
+
+##########################################################################################
+
+ifndef OPENJDK
+  ifeq ($(ENABLE_JFR), true)
+    $(eval $(call SetupArchive,BUILD_JFR_JAR, , \
+        SRCS := $(JDK_OUTPUTDIR)/classes, \
+        SUFFIXES := .class .jfc .xsd, \
+        INCLUDES := com/oracle/jrockit/jfr \
+            oracle/jrockit/jfr \
+            jdk/jfr, \
+        JAR := $(IMAGES_OUTPUTDIR)/lib/jfr.jar, \
+        SKIP_METAINF := true, \
+        MANIFEST := $(MAINMANIFEST), \
+        CHECK_COMPRESS_JAR := true))
+
+  endif
+endif
+
+##########################################################################################
+
+$(eval $(call SetupArchive,BUILD_JSSE_JAR, , \
+    SRCS := $(JDK_OUTPUTDIR)/classes, \
+    INCLUDES := sun/security/provider/Sun.class \
+        sun/security/rsa/SunRsaSign.class \
+        sun/security/ssl \
+        com/sun/net/ssl/internal/ssl, \
+    JAR := $(IMAGES_OUTPUTDIR)/lib/jsse.jar, \
+    SKIP_METAINF := true, \
+    MANIFEST := $(MAINMANIFEST), \
+    CHECK_COMPRESS_JAR := true))
+
+##########################################################################################
+
+$(eval $(call SetupArchive,BUILD_SWINGBEANS_JAR, , \
+    SRCS := $(JDK_OUTPUTDIR)/classes, \
+    SUFFIXES := BeanInfo.class .gif, \
+    INCLUDES := javax/swing sun/swing, \
+    EXCLUDES := javax/swing/plaf, \
+    EXTRA_FILES := javax/swing/SwingBeanInfoBase.class sun/swing/BeanInfoUtils.class, \
+    JAR := $(IMAGES_OUTPUTDIR)/lib/dt.jar, \
+    SKIP_METAINF := true))
+
+##########################################################################################
+
+# Get the CLDRVERSION
+include gensrc/GensrcCLDR.gmk
+
+CLDRDATA_JAR_DST := $(IMAGES_OUTPUTDIR)/lib/ext/cldrdata.jar
+
+$(eval $(call SetupArchive,BUILD_CLDRDATA_JAR, , \
+    SRCS := $(JDK_OUTPUTDIR)/classes, \
+    SUFFIXES := .class, \
+    INCLUDES := sun/text/resources/cldr \
+        sun/util/cldr \
+        sun/util/resources/cldr, \
+    EXCLUDES := sun/util/cldr/CLDRLocaleProviderAdapter, \
+    JAR := $(CLDRDATA_JAR_DST), \
+    EXTRA_MANIFEST_ATTR := CLDR-Version: $(CLDRVERSION), \
+    SKIP_METAINF := true))
+
+##########################################################################################
+
+TOOLS_JAR_INCLUDES := \
+    com/sun/codemodel \
+    com/sun/istack/internal/tools \
+    com/sun/jarsigner \
+    com/sun/javadoc \
+    com/sun/jdi \
+    com/sun/source \
+    com/sun/tools/attach \
+    com/sun/tools/classfile \
+    com/sun/tools/corba \
+    com/sun/tools/doclets \
+    com/sun/tools/doclint \
+    com/sun/tools/example/debug/expr \
+    com/sun/tools/example/debug/tty \
+    com/sun/tools/extcheck \
+    com/sun/tools/hat \
+    com/sun/tools/internal/jxc \
+    com/sun/tools/internal/jxc/ap \
+    com/sun/tools/internal/ws \
+    com/sun/tools/internal/ws/wscompile/plugin/at_generated \
+    com/sun/tools/internal/xjc \
+    com/sun/tools/javac \
+    com/sun/tools/javadoc \
+    com/sun/tools/javah \
+    com/sun/tools/javap \
+    com/sun/tools/jdeps \
+    com/sun/tools/jdi \
+    com/sun/tools/script/shell \
+    com/sun/xml/internal/dtdparser \
+    com/sun/xml/internal/rngom \
+    com/sun/xml/internal/xsom \
+    org/relaxng/datatype \
+    sun/applet \
+    sun/jvmstat \
+    sun/rmi/rmic \
+    sun/security/tools/jarsigner \
+    sun/tools/asm \
+    sun/tools/attach \
+    sun/tools/jar \
+    sun/tools/java \
+    sun/tools/javac \
+    sun/tools/jcmd \
+    sun/tools/jinfo \
+    sun/tools/jmap \
+    sun/tools/jps \
+    sun/tools/jstack \
+    sun/tools/jstat \
+    sun/tools/jstatd \
+    sun/tools/native2ascii \
+    sun/tools/serialver \
+    sun/tools/tree \
+    sun/tools/util
+
+# The sjavac tools is not ready for public consumption.
+TOOLS_JAR_EXCLUDES = com/sun/tools/sjavac
+
+$(eval $(call SetupArchive,BUILD_TOOLS_JAR, , \
+    SRCS := $(JDK_OUTPUTDIR)/classes, \
+    SUFFIXES := .class .prp .gif .properties .xml .css .xsd .js .html .txt .java \
+        Tool aliasmap options, \
+    INCLUDES := $(TOOLS_JAR_INCLUDES), \
+    EXCLUDES := $(TOOLS_JAR_EXCLUDES), \
+    EXTRA_FILES := META-INF/services/com.sun.jdi.connect.Connector \
+        META-INF/services/com.sun.jdi.connect.spi.TransportService \
+        META-INF/services/com.sun.tools.attach.spi.AttachProvider \
+        META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \
+        META-INF/services/com.sun.tools.internal.xjc.Plugin, \
+    JAR := $(IMAGES_OUTPUTDIR)/lib/tools.jar, \
+    SKIP_METAINF := true, \
+    CHECK_COMPRESS_JAR := true))
+
+
+##########################################################################################
+
+include CORE_PKGS.gmk
+include NON_CORE_PKGS.gmk
+
+# The compiler should not issue a "Proprietary" warning when compiling
+# classes in the com.sun.java.swing.plaf packages, since we've always
+# allowed, and even advocated, extending them (see bug 6476749).
+#
+# This approach is NOT to be used as a general purpose way to avoid such
+# compiler warnings for non-core packages. The correct way is to document
+# the packages in NON_CORE_PKGS.gmk, and include them in the NON_CORE_PKGS
+# definition.
+#
+# Swing has taken this approach only as a temporary measure to avoid
+# the compiler warnings until we can properly document these packages.
+# This is covered under 6491853.
+EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf.windows \
+    com.sun.java.swing.plaf.motif \
+    com.sun.java.swing.plaf.gtk
+
+#
+# Include the exported private packages in ct.sym.
+# This is an interim solution until the ct.sym is replaced
+# with a new module system (being discussed for JDK 8).
+#
+EXPORTED_PRIVATE_PKGS = com.oracle.net \
+    com.oracle.nio
+
+$(IMAGES_OUTPUTDIR)/symbols/_the.symbols: $(IMAGES_OUTPUTDIR)/lib/rt.jar
+	$(RM) -r $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym
+	$(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym
+	$(JAVA) $(NEW_JAVAC) \
+	    -bootclasspath $(JDK_OUTPUTDIR)/classes \
+	    -XDprocess.packages -proc:only \
+	    -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) $@
+
+$(eval $(call MakeDir, $(IMAGES_OUTPUTDIR)/symbols))
+$(eval $(call SetupArchive,BUILD_CT_SYM, $(IMAGES_OUTPUTDIR)/symbols/_the.symbols, \
+    SRCS := $(IMAGES_OUTPUTDIR)/symbols, \
+    INCLUDES := META-INF/sym, \
+    JAR := $(IMAGES_OUTPUTDIR)/lib/ct.sym, \
+    CHECK_COMPRESS_JAR := true))
+
+
+##########################################################################################
+
+SRC_ZIP_INCLUDES = \
+    com/sun/corba \
+    com/sun/image/codec/jpeg \
+    com/sun/imageio \
+    com/sun/java_cup \
+    com/sun/javadoc \
+    com/sun/java/swing \
+    com/sun/jmx \
+    com/sun/naming \
+    com/sun/org/apache \
+    com/sun/security/auth \
+    com/sun/security/jgss \
+    com/sun/source \
+    java \
+    javax/accessibility \
+    javax/annotation \
+    javax/imageio \
+    javax/lang \
+    javax/management \
+    javax/naming \
+    javax/print \
+    javax/rmi \
+    javax/script \
+    javax/security \
+    javax/sound \
+    javax/sql \
+    javax/swing \
+    javax/tools \
+    javax/xml \
+    org/ietf \
+    org/omg \
+    org/w3c/dom \
+    org/xml/sax \
+    #
+
+SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes
+SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gensrc
+SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/impsrc
+SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gendocsrc_rmic
+ifndef OPENJDK
+  SRC_ZIP_SRCS += $(JDK_TOPDIR)/src/closed/share/classes
+endif
+
+# Need to copy launcher src files into desired directory structure
+# before zipping the sources.
+LAUNCHER_SRC_FILES := $(wildcard $(JDK_TOPDIR)/src/share/bin/*) \
+    $(wildcard $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/bin/java_md*)
+LAUNCHER_ZIP_SRC := $(patsubst $(JDK_TOPDIR)/src/share/bin/%, $(IMAGES_OUTPUTDIR)/src/launcher/%, \
+    $(patsubst $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/bin/%, $(IMAGES_OUTPUTDIR)/src/launcher/%, \
+    $(LAUNCHER_SRC_FILES)))
+
+$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/share/bin/%
+	$(install-file)
+
+$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/bin/%
+	$(install-file)
+
+$(IMAGES_OUTPUTDIR)/src.zip: $(LAUNCHER_ZIP_SRC)
+
+# This dir needs to exist before macro is evaluated to avoid warning from find.
+$(eval $(call MakeDir, $(IMAGES_OUTPUTDIR)/src))
+$(eval $(call SetupZipArchive,BUILD_SRC_ZIP, \
+    SRC := $(SRC_ZIP_SRCS) $(IMAGES_OUTPUTDIR)/src, \
+    INCLUDES := $(SRC_ZIP_INCLUDES) launcher, \
+    EXCLUDES := javax/swing/beaninfo, \
+    SUFFIXES := .java .c .h, \
+    ZIP := $(IMAGES_OUTPUTDIR)/src.zip, \
+    EXTRA_DEPS := $(LAUNCHER_ZIP_SRC)))
+
+##########################################################################################
+
+ifndef OPENJDK
+  ifeq ($(OPENJDK_TARGET_OS), windows)
+
+    $(eval $(call SetupArchive,BUILD_JACCESS_JAR, , \
+        SRCS := $(JDK_OUTPUTDIR)/classes, \
+        INCLUDES := com/sun/java/accessibility/util, \
+        JAR := $(IMAGES_OUTPUTDIR)/lib/ext/jaccess.jar, \
+        SKIP_METAINF := true))
+
+    JARS += $(IMAGES_OUTPUTDIR)/lib/ext/jaccess.jar
+
+    ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
+      $(eval $(call SetupArchive,BUILD_ACCESSBRIDGE_32_JAR, , \
+          SRCS := $(JDK_OUTPUTDIR)/classes_ab/32bit, \
+          INCLUDES := com/sun/java/accessibility, \
+          JAR := $(IMAGES_OUTPUTDIR)/lib/ext/access-bridge-32.jar, \
+          SKIP_METAINF := true))
+
+      $(eval $(call SetupArchive,BUILD_ACCESSBRIDGE_LEGACY_JAR, , \
+          SRCS := $(JDK_OUTPUTDIR)/classes_ab/legacy, \
+          INCLUDES := com/sun/java/accessibility, \
+          JAR := $(IMAGES_OUTPUTDIR)/lib/ext/access-bridge.jar, \
+          SKIP_METAINF := true))
+
+      JARS += $(IMAGES_OUTPUTDIR)/lib/ext/access-bridge-32.jar \
+          $(IMAGES_OUTPUTDIR)/lib/ext/access-bridge.jar
+    else
+      $(eval $(call SetupArchive,BUILD_ACCESSBRIDGE_64_JAR, , \
+          SRCS := $(JDK_OUTPUTDIR)/classes_ab/64bit, \
+          INCLUDES := com/sun/java/accessibility, \
+          JAR := $(IMAGES_OUTPUTDIR)/lib/ext/access-bridge-64.jar, \
+          SKIP_METAINF := true))
+
+      JARS += $(IMAGES_OUTPUTDIR)/lib/ext/access-bridge-64.jar
+    endif
+  endif
+endif
+
+##########################################################################################
+
+#
+# This is an empty jar (only contains manifest) and fits poorly into framework...
+# create simple rule instead
+#
+$(IMAGES_OUTPUTDIR)/lib/management-agent.jar: $(JDK_TOPDIR)/src/share/classes/sun/management/manifest
+	$(JAR) cfm $@ $<
+
+##########################################################################################
+
+$(IMAGES_OUTPUTDIR)/lib/ext/zipfs.jar: $(JDK_OUTPUTDIR)/demo/nio/zipfs/zipfs.jar
+	$(install-file)
+
+##########################################################################################
+
+ifeq ($(OPENJDK_TARGET_OS), macosx)
+  $(eval $(call SetupArchive,BUILD_JOBJC_JAR, , \
+      SRCS := $(JDK_OUTPUTDIR)/jobjc_classes, \
+      JAR := $(IMAGES_OUTPUTDIR)/lib/JObjC.jar, \
+      JARINDEX := true))
+endif
+
+# This file is imported from hotspot in Import.gmk. Copying it into images/lib so that
+# all jars can be found in one place when creating images in Images.gmk. It needs to be
+# done here so that clean targets can be simple and accurate.
+$(IMAGES_OUTPUTDIR)/lib/sa-jdi.jar: $(JDK_OUTPUTDIR)/lib/sa-jdi.jar
+	$(install-file)
+
+##########################################################################################
+#
+# sec-bin.zip is used by builds where the corresponding sources are not available
+#
+$(eval $(call SetupZipArchive,BUILD_SEC_BIN_ZIP, \
+    SRC := $(JDK_OUTPUTDIR), \
+    INCLUDES := classes/javax/net \
+        classes/javax/security/cert \
+        classes/com/sun/net/ssl \
+        classes/com/sun/security/cert \
+        classes/sun/net/www/protocol/https \
+        classes/sun/security/pkcs12 \
+        classes/sun/security/ssl \
+        classes/sun/security/krb5 \
+        classes/sun/security/krb5/internal \
+        classes/sun/security/krb5/internal/ccache \
+        classes/sun/security/krb5/internal/crypto \
+        classes/sun/security/krb5/internal/ktab \
+        classes/sun/security/krb5/internal/rcache \
+        classes/sun/security/krb5/internal/util, \
+    INCLUDE_FILES := classes/sun/security/jgss/spi/GSSContextSpi.class, \
+    EXCLUDES := classes/sun/security/krb5/internal/tools, \
+    ZIP := $(IMAGES_OUTPUTDIR)/sec-bin.zip))
+
+JARS += $(IMAGES_OUTPUTDIR)/sec-bin.zip
+
+##########################################################################################
+#
+# Windows specific binary security packages.
+#
+ifeq ($(OPENJDK_TARGET_OS), windows)
+  # sec-windows-bin.zip is used by builds where the corresponding sources are not available
+  $(eval $(call SetupZipArchive,BUILD_SEC_WINDOWS_BIN_ZIP, \
+      SRC := $(JDK_OUTPUTDIR), \
+      INCLUDES := classes/sun/security/krb5/internal/tools, \
+      ZIP := $(IMAGES_OUTPUTDIR)/sec-windows-bin.zip))
+
+  JARS += $(IMAGES_OUTPUTDIR)/sec-windows-bin.zip
+
+  # JGSS files contain the native Kerberos library
+  ifeq ($(OPENJDK_TARGET_CPU), x86_64)
+    JGSS_ZIP_NAME = jgss-windows-x64-bin.zip
+  else
+    JGSS_ZIP_NAME = jgss-windows-i586-bin.zip
+  endif
+
+  $(eval $(call SetupZipArchive,BUILD_JGSS_BIN_ZIP, \
+      SRC := $(JDK_OUTPUTDIR), \
+      INCLUDE_FILES := bin/w2k_lsa_auth.dll \
+          bin/w2k_lsa_auth.map \
+          bin/w2k_lsa_auth.pdb, \
+      ZIP := $(IMAGES_OUTPUTDIR)/$(JGSS_ZIP_NAME)))
+
+  JARS += $(IMAGES_OUTPUTDIR)/$(JGSS_ZIP_NAME)
+endif
+
+##########################################################################################
+
+# This rule copies all jars from jdk/lib/... to images/lib/... to avoid having to track 
+# which jars are where
+$(IMAGES_OUTPUTDIR)/lib/%: $(JDK_OUTPUTDIR)/lib/%
+	$(install-file)
+
+##########################################################################################
+
+# Import nashorn.jar from nashorn dist dir.
+$(IMAGES_OUTPUTDIR)/lib/ext/nashorn.jar: $(NASHORN_DIST)/nashorn.jar
+	$(install-file)
+
+##########################################################################################
+
+-include $(CUSTOM_MAKE_DIR)/CreateJars.gmk
+
+##########################################################################################
+
+all: $(JARS)
+
+.PHONY: default all