#
# 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)


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)
	$(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); \
	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
