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

# 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
