#
# Copyright (c) 2011, 2015, 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.
#

default: all

include $(SPEC)
include MakeBase.gmk
include JavaCompilation.gmk

# Setup the java compilers for the JDK build.
include Setup.gmk

JARS :=
EXFILES :=
EXCLUDES :=

##########################################################################################
# Include the corresponding custom file, if present.

-include $(CUSTOM_MAKE_DIR)/CompileJavaClasses.gmk

##########################################################################################

EXCLUDES += com/sun/pept \
    com/sun/tools/example/trace \
    com/sun/tools/example/debug/bdi \
    com/sun/tools/example/debug/event \
    com/sun/tools/example/debug/gui

ifdef OPENJDK
  EXCLUDES += sun/dc \
      com/sun/jmx/snmp \
      sun/management/snmp \
      com/sun/script
endif

ifndef OPENJDK
  # There exists two versions of these files...
  EXFILES += $(JDK_TOPDIR)/src/share/classes/javax/crypto/JarVerifier.java

  ifeq ($(OPENJDK_TARGET_OS), windows)
    # This gets built on unix platforms implicitly in the old build even though
    # it's excluded in the closed build.
    EXCLUDES += sun/java2d/pisces
  endif
endif

ifeq ($(OPENJDK_TARGET_OS), windows)
    # AccessBridge is compiled separately below.
    EXFILES += AccessBridge.java \
        AccessBridgeLoader.java
  endif

ifneq ($(OPENJDK_TARGET_OS), solaris)
  # Exclude Solaris nio and two security related files in src/share/classes
  EXFILES += SolarisAclFileAttributeView.java \
      SolarisFileStore.java \
      SolarisFileSystem.java \
      SolarisFileSystemProvider.java \
      SolarisNativeDispatcher.java \
      SolarisUserDefinedFileAttributeView.java \
      SolarisWatchService.java \
      SolarisAclFileAttributeView.java \
      SolarisLoginModule.java \
      SolarisSystem.java \
      sun/nio/ch/DevPollArrayWrapper.java \
      sun/nio/ch/DevPollSelectorImpl.java \
      sun/nio/ch/DevPollSelectorProvider.java \
      sun/nio/ch/EventPortSelectorImpl.java \
      sun/nio/ch/EventPortSelectorProvider.java \
      sun/nio/ch/EventPortWrapper.java \
      sun/nio/ch/SolarisAsynchronousChannelProvider.java \
      sun/nio/ch/SolarisEventPort.java \
      sun/tools/attach/SolarisAttachProvider.java \
      sun/tools/attach/SolarisVirtualMachine.java

  EXCLUDES += com/oracle/security
endif

EXFILES += WrapperGenerator.java

ifneq ($(OPENJDK_TARGET_OS), windows)
  # Exclude Window security related files in src/share/classes
  EXFILES += NTLoginModule.java \
      NTSystem.java
else
  EXFILES += UnixLoginModule.java \
      UnixSystem.java
endif

ifeq ($(OPENJDK_TARGET_OS), windows)
  # Don't build GTK L&F on Windows
  EXCLUDES += com/sun/java/swing/plaf/gtk
endif

ifneq ($(OPENJDK_TARGET_OS), linux)
  EXFILES += sun/tools/attach/LinuxAttachProvider.java \
      sun/tools/attach/LinuxVirtualMachine.java \
      sun/nio/ch/EPoll.java \
      sun/nio/ch/EPollArrayWrapper.java \
      sun/nio/ch/EPollPort.java \
      sun/nio/ch/EPollSelectorImpl.java \
      sun/nio/ch/EPollSelectorProvider.java \
      sun/nio/ch/LinuxAsynchronousChannelProvider.java \
      sun/nio/fs/LinuxDosFileAttributeView.java \
      sun/nio/fs/LinuxFileStore.java \
      sun/nio/fs/LinuxFileSystem.java \
      sun/nio/fs/LinuxFileSystemProvider.java \
      sun/nio/fs/MagicFileTypeDetector.java \
      sun/nio/fs/LinuxNativeDispatcher.java \
      sun/nio/fs/LinuxUserDefinedFileAttributeView.java \
      sun/nio/fs/LinuxWatchService.java
endif

ifneq ($(OPENJDK_TARGET_OS), macosx)
  EXFILES += sun/nio/ch/BsdAsynchronousChannelProvider.java \
      sun/nio/ch/KQueue.java \
      sun/nio/ch/KQueuePort.java \
      sun/nio/fs/BsdFileStore.java \
      sun/nio/fs/BsdFileSystem.java \
      sun/nio/fs/BsdFileSystemProvider.java \
      sun/nio/fs/BsdNativeDispatcher.java \
      sun/nio/fs/MacOSXFileSystemProvider.java \
      sun/nio/fs/MacOSXFileSystem.java \
      sun/nio/fs/MacOSXNativeDispatcher.java \
      sun/tools/attach/BsdAttachProvider.java \
      sun/tools/attach/BsdVirtualMachine.java
endif

ifneq ($(OPENJDK_TARGET_OS),aix)
    EXFILES+=sun/nio/ch/AixAsynchronousChannelProvider.java \
             sun/nio/ch/AixPollPort.java \
             sun/nio/fs/AixFileStore.java \
             sun/nio/fs/AixFileSystem.java \
             sun/nio/fs/AixFileSystemProvider.java \
             sun/nio/fs/AixNativeDispatcher.java \
             sun/tools/attach/AixAttachProvider.java \
             sun/tools/attach/AixVirtualMachine.java
endif

# Exclude BreakIterator classes that are just used in compile process to generate
# data files and shouldn't go in the product
EXFILES += sun/text/resources/BreakIteratorRules.java \
    sun/text/resources/BreakIteratorRules_th.java

# TODO: Add BUILD_HEADLESS_ONLY to configure?
ifdef BUILD_HEADLESS_ONLY
  EXCLUDES += sun/applet
endif

ifdef OPENJDK
  EXCLUDES += sun/java2d/cmm/kcms
endif

# Used on windows and macosx
ifeq (, $(filter $(OPENJDK_TARGET_OS), windows macosx))
  EXFILES += sun/awt/AWTCharset.java
endif

ifeq ($(OPENJDK_TARGET_OS), macosx)
  # exclude all X11 on Mac, we can't exclude some like below or we'll have compilation errors
  EXCLUDES += sun/awt/X11
else
  # TBD: figure out how to eliminate this long list
  EXFILES += sun/awt/X11/ScreenFormat.java \
      sun/awt/X11/XArc.java \
      sun/awt/X11/XChar2b.java \
      sun/awt/X11/XCharStruct.java \
      sun/awt/X11/XClassHint.java \
      sun/awt/X11/XComposeStatus.java \
      sun/awt/X11/XExtCodes.java \
      sun/awt/X11/XFontProp.java \
      sun/awt/X11/XFontSetExtents.java \
      sun/awt/X11/XFontStruct.java \
      sun/awt/X11/XGCValues.java \
      sun/awt/X11/XHostAddress.java \
      sun/awt/X11/XIMCallback.java \
      sun/awt/X11/XIMHotKeyTrigger.java \
      sun/awt/X11/XIMHotKeyTriggers.java \
      sun/awt/X11/XIMPreeditCaretCallbackStruct.java \
      sun/awt/X11/XIMPreeditDrawCallbackStruct.java \
      sun/awt/X11/XIMPreeditStateNotifyCallbackStruct.java \
      sun/awt/X11/XIMStatusDrawCallbackStruct.java \
      sun/awt/X11/XIMStringConversionCallbackStruct.java \
      sun/awt/X11/XIMStringConversionText.java \
      sun/awt/X11/XIMStyles.java \
      sun/awt/X11/XIMText.java \
      sun/awt/X11/XIMValuesList.java \
      sun/awt/X11/XImage.java \
      sun/awt/X11/XKeyboardControl.java \
      sun/awt/X11/XKeyboardState.java \
      sun/awt/X11/XOMCharSetList.java \
      sun/awt/X11/XOMFontInfo.java \
      sun/awt/X11/XOMOrientation.java \
      sun/awt/X11/XPoint.java \
      sun/awt/X11/XRectangle.java \
      sun/awt/X11/XSegment.java \
      sun/awt/X11/XStandardColormap.java \
      sun/awt/X11/XTextItem.java \
      sun/awt/X11/XTextItem16.java \
      sun/awt/X11/XTextProperty.java \
      sun/awt/X11/XTimeCoord.java \
      sun/awt/X11/XWindowChanges.java \
      sun/awt/X11/XdbeSwapInfo.java \
      sun/awt/X11/XmbTextItem.java \
      sun/awt/X11/XwcTextItem.java
endif

# Exclude another implicitly not included file.
EXFILES += sun/util/locale/AsciiUtil.java

ifeq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx aix))
  #
  # only solaris, macosx and aix
  #
  EXFILES += sun/nio/fs/PollingWatchService.java
endif

ifeq ($(OPENJDK_TARGET_OS), windows)
  EXFILES += sun/nio/ch/AbstractPollSelectorImpl.java \
      sun/nio/ch/PollSelectorProvider.java \
      sun/nio/ch/SimpleAsynchronousFileChannelImpl.java
endif

# These files do not appear in the build result of the old build. This
# is because they are generated sources, but the AUTO_JAVA_FILES won't
# pick them up since they aren't generated when the source dirs are
# searched and they aren't referenced by any other classes so they won't
# be picked up by implicit compilation. On a rebuild, they are picked up
# and compiled. Exclude them here to produce the same rt.jar as the old
# build does when building just once.
EXFILES += javax/swing/plaf/nimbus/InternalFrameTitlePanePainter.java \
    javax/swing/plaf/nimbus/OptionPaneMessageAreaPainter.java \
    javax/swing/plaf/nimbus/ScrollBarPainter.java \
    javax/swing/plaf/nimbus/SliderPainter.java \
    javax/swing/plaf/nimbus/SpinnerPainter.java \
    javax/swing/plaf/nimbus/SplitPanePainter.java \
    javax/swing/plaf/nimbus/TabbedPanePainter.java

# Acquire a list of files that should be copied straight over to the classes.
include CopyIntoClasses.gmk
# Now we have COPY_PATTERNS, COPY_FILES and COPY_EXTRA

ifndef OPENJDK
  CLOSED_SRC_DIRS := $(JDK_TOPDIR)/src/closed/share/classes \
      $(wildcard $(JDK_TOPDIR)/src/closed/$(OPENJDK_TARGET_OS_API_DIR)/classes)
endif

MACOSX_SRC_DIRS :=
ifeq ($(OPENJDK_TARGET_OS), macosx)
  MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/classes

  # this files are duplicated in MACOSX_SRC_DIRS
  EXFILES += $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java \
      $(JDK_TOPDIR)/src/solaris/classes/sun/java2d/BackBufferCapsProvider.java \
      $(JDK_TOPDIR)/src/solaris/classes/java/net/DefaultInterface.java \
      $(JDK_TOPDIR)/src/solaris/classes/java/lang/ClassLoaderHelper.java \
      $(JDK_TOPDIR)/src/solaris/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java \
      $(JDK_TOPDIR)/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java \
      $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java \
      $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java \
      $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java

endif

# The security classes should not end up in the classes directory as that will prevent them
# from working when running the exploded jdk image. Compile them separately to a different
# directory from where the jars can be created.
SECURITY_PKGS := \
    com/oracle/security/ucrypto \
    com/sun/crypto/provider \
    javax/crypto \
    sun/security/ec \
    sun/security/internal \
    sun/security/mscapi \
    sun/security/pkcs11 \
    #

AIX_SRC_DIRS :=
ifeq ($(OPENJDK_TARGET_OS),aix)
     AIX_SRC_DIRS += $(JDK_TOPDIR)/src/aix/classes

  # these files are duplicated in AIX_SRC_DIRS
  EXFILES += $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java \
      $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java \
      $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java
endif

# The exception handling of swing beaninfo
# These resources violates the convention of having code and resources together under
# $(JDK_TOPDIR)/src/.../classes directories
$(JDK_OUTPUTDIR)/classes/javax/swing/beaninfo/images/%.gif: $(JDK_TOPDIR)/make/data/swingbeaninfo/images/%.gif
	$(call install-file)

# The JDK_USER_DEFINED_FILTER is a poor man's incremental build: by specifying
# JDK_FILTER at the make command line, only a subset of the JDK java files will
# be recompiled. If multiple paths are separated by comma, convert that into a
# space separated list.
JDK_USER_DEFINED_FILTER := $(strip $(subst $(COMMA),$(SPACE), $(JDK_FILTER)))

ifeq ($(ENABLE_SJAVAC),yes)
  # With sjavac enabled, excluded sources are not even considered for linking. 
  # Explicitly add the security sources to sourcepath for linking.
  BUILD_JDK_SOURCEPATH:=$(patsubst %,-i$(SPACE)%.*,$(subst /,.,$(SECURITY_PKGS))) \
      -sourcepath $(JDK_TOPDIR)/src/share/classes
endif

$(eval $(call SetupJavaCompilation,BUILD_JDK,\
    SETUP:=GENERATE_JDKBYTECODE,\
    SRC:=$(JDK_TOPDIR)/src/share/classes \
        $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes \
        $(MACOSX_SRC_DIRS) \
        $(AIX_SRC_DIRS) \
        $(JDK_OUTPUTDIR)/gensrc \
        $(JDK_OUTPUTDIR)/gensrc_no_srczip \
        $(CLOSED_SRC_DIRS),\
    INCLUDES:=$(JDK_USER_DEFINED_FILTER),\
    EXCLUDES:=$(EXCLUDES) $(SECURITY_PKGS),\
    EXCLUDE_FILES:=$(EXFILES),\
    BIN:=$(JDK_OUTPUTDIR)/classes,\
    COPY:=$(COPY_PATTERNS),\
    COPY_FILES:=$(COPY_FILES),\
    HEADERS:=$(JDK_OUTPUTDIR)/gensrc_headers,\
    ADD_JAVAC_FLAGS:=$(BUILD_JDK_SOURCEPATH)))

##########################################################################################

$(eval $(call SetupJavaCompilation,BUILD_SECURITY, \
    SETUP := GENERATE_JDKBYTECODE, \
    SRC := $(JDK_TOPDIR)/src/share/classes \
        $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes \
        $(MACOSX_SRC_DIRS) \
        $(CLOSED_SRC_DIRS), \
    INCLUDES := $(SECURITY_PKGS), \
    EXCLUDES := $(EXCLUDES), \
    EXCLUDE_FILES := $(EXFILES), \
    BIN := $(JDK_OUTPUTDIR)/classes_security, \
    HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))

$(BUILD_SECURITY): $(BUILD_JDK)

##########################################################################################

$(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin:
	$(MKDIR) -p $(@D)
	$(TOUCH) $@

##########################################################################################


##########################################################################################

  ifeq ($(OPENJDK_TARGET_OS), windows)
    ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
      $(eval $(call SetupJavaCompilation,BUILD_ACCESSBRIDGE_32, \
          SETUP := GENERATE_JDKBYTECODE, \
          JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
          SRC := $(JDK_OUTPUTDIR)/gensrc_ab/32bit, \
          BIN := $(JDK_OUTPUTDIR)/classes_ab/32bit, \
          HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers_ab/32))

      $(BUILD_ACCESSBRIDGE_32): $(BUILD_JDK)

      $(eval $(call SetupJavaCompilation,BUILD_ACCESSBRIDGE_LEGACY, \
          SETUP := GENERATE_JDKBYTECODE, \
          JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
          SRC := $(JDK_OUTPUTDIR)/gensrc_ab/legacy, \
          BIN := $(JDK_OUTPUTDIR)/classes_ab/legacy, \
          HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers_ab/LEGACY))

      $(BUILD_ACCESSBRIDGE_LEGACY): $(BUILD_JDK)

    else

      $(eval $(call SetupJavaCompilation,BUILD_ACCESSBRIDGE_64, \
          SETUP := GENERATE_JDKBYTECODE, \
          JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
          SRC := $(JDK_OUTPUTDIR)/gensrc_ab/64bit, \
          BIN := $(JDK_OUTPUTDIR)/classes_ab/64bit, \
          HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers_ab/64))

      $(BUILD_ACCESSBRIDGE_64): $(BUILD_JDK)

    endif
  endif

##########################################################################################

all: $(BUILD_JDK) $(BUILD_SECURITY) $(COPY_EXTRA) \
    $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin \
    $(BUILD_ACCESSBRIDGE_32) $(BUILD_ACCESSBRIDGE_64) \
    $(BUILD_ACCESSBRIDGE_LEGACY)

.PHONY: all
