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

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

    # AccessBridge is compiled separately below.
    EXFILES += AccessBridge.java \
        AccessBridgeLoader.java \
        com/sun/java/accessibility/util/java/awt/ChoiceTranslator.java
    # This seems to never be built
    EXCLUDES += com/sun/java/accessibility/extensions
  endif

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

# TODO: Fix when converting NIO
# Exclude *-linux-arm.java and *-linux-ppc.java from closed.
EXFILES += -linux-arm.java \
    -linux-ppc.java

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

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


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

ifndef OPENJDK
  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))

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

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

      $(BUILD_ACCESSBRIDGE_64): $(BUILD_JDK)

    endif
  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
