#
# Copyright (c) 2012, 2014, 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

#######

IMPORT_TARGET_FILES :=

IMPORT_CLASSES := CORBA JAXP JAXWS LANGTOOLS
IMPORT_SOURCES := CORBA JAXP JAXWS LANGTOOLS
# Only Corba has binaries
IMPORT_BINARIES := CORBA

#######

# Put the libraries here. Different locations for different target apis.
ifeq ($(OPENJDK_TARGET_OS_API), posix)
  INSTALL_LIBRARIES_HERE := $(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)
  HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)
else
  INSTALL_LIBRARIES_HERE := $(JDK_OUTPUTDIR)/bin
  HOTSPOT_LIB_DIR := $(HOTSPOT_DIST)/jre/bin
endif

#######

#
# jar xf/unzip fails when executing them all in parallel
# introduce artificial dependency (_DEP) buuhhh

define ImportClasses
  $1_CLASSES_DEP := $$(IMPORT_TARGET_CLASSES)
  IMPORT_TARGET_CLASSES += $(JDK_OUTPUTDIR)/classes/_the.$1.classes.imported

  $(JDK_OUTPUTDIR)/classes/_the.$1.classes.imported: $$($1_DIST)/lib/classes.jar $$($1_CLASSES_DEP)
	$(ECHO) Importing $1 classes.jar
	$(MKDIR) -p $$(@D)
	$(RM) $$@ $$@.tmp
	($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp)
	$(MV) $$@.tmp $$@
endef

define ImportSources
  $1_SOURCES_DEP := $$(IMPORT_TARGET_SOURCES)
  IMPORT_TARGET_SOURCES += $(JDK_OUTPUTDIR)/impsrc/_the.$1.src.imported

  $(JDK_OUTPUTDIR)/impsrc/_the.$1.src.imported: $$($1_DIST)/lib/src.zip $$($1_SOURCES_DEP)
	$(ECHO) Importing $1 src.zip
	$(MKDIR) -p $$(@D)
	$(RM) $$@ $$@.tmp
	($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp)
	$(MV) $$@.tmp $$@
endef

define ImportBinaries
  $1_BINARIES_DEP := $$(IMPORT_TARGET_BINARIES)
  IMPORT_TARGET_BINARIES += $(JDK_OUTPUTDIR)/_the.$1.binaries.imported

  $(JDK_OUTPUTDIR)/_the.$1.binaries.imported: $$($1_DIST)/lib/bin.zip $$($1_BINARIES_DEP)
	$(ECHO) Importing $1 bin.zip
	$(MKDIR) -p $$(@D)
	$(RM) $$@ $$@.tmp
	($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp)
	$(MV) $$@.tmp $$@
endef

#######

$(foreach I, $(IMPORT_CLASSES), $(eval $(call ImportClasses,$I)))
$(foreach I, $(IMPORT_SOURCES), $(eval $(call ImportSources,$I)))
$(foreach I, $(IMPORT_BINARIES), $(eval $(call ImportBinaries,$I)))

IMPORT_TARGET_FILES += $(IMPORT_TARGET_CLASSES) $(IMPORT_TARGET_SOURCES) $(IMPORT_TARGET_BINARIES)

#######

define CopyDir
  $1_SRC_FILES := $(shell $(FIND) $2 -type f -a \( -name DUMMY $(addprefix -o$(SPACE)-name$(SPACE),$4) \))
  $1_DST_FILES := $$(patsubst $2/%,$3/%,$$($1_SRC_FILES))
  IMPORT_TARGET_FILES += $$($1_DST_FILES)
  $3/%: $2/%
	$(ECHO) $(LOG_INFO) Copying $$(@F)
	$$(install-file)
endef

#######

#
# Import hotspot
#
HOTSPOT_IMPORT_FILES := $(addprefix $(LIBRARY_PREFIX), jvm.* saproc.* jsig.* sawindbg.* jvm_db.* jvm_dtrace.*) \
    Xusage.txt sa-jdi.jar

ifeq ($(OPENJDK_TARGET_OS), macosx)
    # additional debug file
    HOTSPOT_IMPORT_FILES += Info.plist
endif

$(eval $(call CopyDir,HOTSPOT0, $(HOTSPOT_LIB_DIR), $(INSTALL_LIBRARIES_HERE), $(HOTSPOT_IMPORT_FILES)))
$(eval $(call CopyDir,HOTSPOT1, $(HOTSPOT_DIST)/lib, $(JDK_OUTPUTDIR)/lib, $(HOTSPOT_IMPORT_FILES)))

ifeq ($(OPENJDK_TARGET_OS), macosx)
  JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig$(SHARED_LIBRARY_SUFFIX).dSYM) \
      $(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
else
  JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.debuginfo) \
      $(wildcard $(HOTSPOT_DIST)/jre/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) )
endif

ifneq ($(OPENJDK_TARGET_OS), windows)
  ifeq ($(JVM_VARIANT_SERVER), true)
    IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/server/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX)
    ifneq (, $(JSIG_DEBUGINFO))
      IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/server/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I))
    endif
  endif
  ifeq ($(JVM_VARIANT_CLIENT), true)
    IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/client/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX)
    ifneq (, $(JSIG_DEBUGINFO))
      IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/client/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I))
    endif
  endif
  ifneq ($(OPENJDK_TARGET_OS), macosx)
    ifeq ($(JVM_VARIANT_MINIMAL1), true)
      IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/minimal/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX)
      ifneq (,$(JSIG_DEBUGINFO))
        IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/minimal/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I))
      endif
    endif
  endif
endif

$(INSTALL_LIBRARIES_HERE)/server/%$(SHARED_LIBRARY_SUFFIX): $(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX)
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(LN) -s ../$(@F) $@

ifeq ($(OPENJDK_TARGET_OS), macosx)
  $(INSTALL_LIBRARIES_HERE)/server/%.dSYM : $(INSTALL_LIBRARIES_HERE)/%.dSYM
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(LN) -s ../$(@F) $@

  $(INSTALL_LIBRARIES_HERE)/server/%.diz : $(INSTALL_LIBRARIES_HERE)/%.diz
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(RM) $@.tmp $(basename $@)$(SHARED_LIBRARY_SUFFIX).dSYM
	$(LN) -s ../$(basename $(@F))$(SHARED_LIBRARY_SUFFIX).dSYM $(basename $@)$(SHARED_LIBRARY_SUFFIX).dSYM
	$(CD) $(@D) && $(ZIP) -q -y $@.tmp $(basename $(@F))$(SHARED_LIBRARY_SUFFIX).dSYM
	$(RM) $(basename $@)$(SHARED_LIBRARY_SUFFIX).dSYM
	$(MV) $@.tmp $@
else
  $(INSTALL_LIBRARIES_HERE)/server/%.debuginfo: $(INSTALL_LIBRARIES_HERE)/%.debuginfo
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(LN) -s ../$(@F) $@

  $(INSTALL_LIBRARIES_HERE)/server/%.diz: $(INSTALL_LIBRARIES_HERE)/%.diz
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(RM) $@.tmp $(basename $@).debuginfo
	$(LN) -s ../$(basename $(@F)).debuginfo $(basename $@).debuginfo
	$(CD) $(@D) && $(ZIP) -q -y $@.tmp $(basename $(@F)).debuginfo
	$(RM) $(basename $@).debuginfo
	$(MV) $@.tmp $@
endif

$(INSTALL_LIBRARIES_HERE)/client/%$(SHARED_LIBRARY_SUFFIX): $(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX)
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(LN) -s ../$(@F) $@

ifeq ($(OPENJDK_TARGET_OS), macosx)
  $(INSTALL_LIBRARIES_HERE)/client/%.dSYM : $(INSTALL_LIBRARIES_HERE)/%.dSYM
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(LN) -s ../$(@F) $@

  $(INSTALL_LIBRARIES_HERE)/client/%.diz : $(INSTALL_LIBRARIES_HERE)/%.diz
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(RM) $@.tmp $(basename $@)$(SHARED_LIBRARY_SUFFIX).dSYM
	$(LN) -s ../$(basename $(@F))$(SHARED_LIBRARY_SUFFIX).dSYM $(basename $@)$(SHARED_LIBRARY_SUFFIX).dSYM
	$(CD) $(@D) && $(ZIP) -q -y $@.tmp $(basename $(@F))$(SHARED_LIBRARY_SUFFIX).dSYM
	$(RM) $(basename $@)$(SHARED_LIBRARY_SUFFIX).dSYM
	$(MV) $@.tmp $@
else
  $(INSTALL_LIBRARIES_HERE)/client/%.debuginfo: $(INSTALL_LIBRARIES_HERE)/%.debuginfo
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(LN) -s ../$(@F) $@

  $(INSTALL_LIBRARIES_HERE)/client/%.diz: $(INSTALL_LIBRARIES_HERE)/%.diz
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(RM) $@.tmp $(basename $@).debuginfo
	$(LN) -s ../$(basename $(@F)).debuginfo $(basename $@).debuginfo
	$(CD) $(@D) && $(ZIP) -q -y $@.tmp $(basename $(@F)).debuginfo
	$(RM) $(basename $@).debuginfo
	$(MV) $@.tmp $@
endif

$(INSTALL_LIBRARIES_HERE)/minimal/%$(SHARED_LIBRARY_SUFFIX): $(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX)
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(LN) -s ../$(@F) $@

ifneq ($(OPENJDK_TARGET_OS), macosx)
  $(INSTALL_LIBRARIES_HERE)/minimal/%.debuginfo: $(INSTALL_LIBRARIES_HERE)/%.debuginfo
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(LN) -s ../$(@F) $@

  $(INSTALL_LIBRARIES_HERE)/minimal/%.diz: $(INSTALL_LIBRARIES_HERE)/%.diz
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(RM) $@.tmp $(basename $@).debuginfo
	$(LN) -s ../$(basename $(@F)).debuginfo $(basename $@).debuginfo
	$(CD) $(@D) && $(ZIP) -q -y $@.tmp $(basename $(@F)).debuginfo
	$(RM) $(basename $@).debuginfo
	$(MV) $@.tmp $@
endif

##########################################################################################
# Unpack the binary distributions of the crypto classes if they exist.
SEC_FILES_ZIP := $(JDK_TOPDIR)/make/tools/crypto/sec-bin.zip
SEC_FILES_WIN_ZIP := $(JDK_TOPDIR)/make/tools/crypto/sec-windows-bin.zip
JGSS_WIN32_FILES_ZIP := $(JDK_TOPDIR)/make/tools/crypto/jgss-windows-i586-bin.zip
JGSS_WIN64_FILES_ZIP := $(JDK_TOPDIR)/make/tools/crypto/jgss-windows-x64-bin.zip

define unzip-sec-file
	$(ECHO) Unzipping $(<F)
	$(MKDIR) -p $(@D)
	$(RM) $@
	($(CD) $(JDK_OUTPUTDIR) && $(UNZIP) -q -o $< > $@.tmp)
	$(MV) $@.tmp $@
endef

$(JDK_OUTPUTDIR)/classes/_the.sec-bin.unzipped: $(SEC_FILES_ZIP)
	$(call unzip-sec-file)

$(JDK_OUTPUTDIR)/classes/_the.sec-windows-bin.unzipped: $(SEC_FILES_WIN_ZIP)
	$(call unzip-sec-file)

$(JDK_OUTPUTDIR)/classes/_the.jgss-windows-i586-bin.unzipped: $(JGSS_WIN32_FILES_ZIP)
	$(call unzip-sec-file)

$(JDK_OUTPUTDIR)/classes/_the.jgss-windows-x64-bin.unzipped: $(JGSS_WIN64_FILES_ZIP)
	$(call unzip-sec-file)

ifneq ($(wildcard $(SEC_FILES_ZIP)), )
  IMPORT_TARGET_FILES += $(JDK_OUTPUTDIR)/classes/_the.sec-bin.unzipped
  ifeq ($(OPENJDK_TARGET_OS), windows)
    IMPORT_TARGET_FILES += $(JDK_OUTPUTDIR)/classes/_the.sec-windows-bin.unzipped
    ifeq ($(OPENJDK_TARGET_CPU), x86)
      IMPORT_TARGET_FILES += $(JDK_OUTPUTDIR)/classes/_the.jgss-windows-i586-bin.unzipped
    endif
    ifeq ($(OPENJDK_TARGET_CPU), x86_64)
      IMPORT_TARGET_FILES += $(JDK_OUTPUTDIR)/classes/_the.jgss-windows-x64-bin.unzipped
    endif
  endif
endif

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

all: $(IMPORT_TARGET_FILES)
