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

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

default: images

# Prepare the find cache. Only used if running on windows.
$(eval $(call FillCacheFind, \
    $(wildcard $(JDK_OUTPUTDIR)/bin \
        $(JDK_OUTPUTDIR)/lib \
        $(IMAGES_OUTPUTDIR)/lib \
        $(JDK_OUTPUTDIR)/include \
        $(JDK_OUTPUTDIR)/sample \
        $(JDK_OUTPUTDIR)/demo)))

include Tools.gmk

include Profiles.gmk

# Note: This double-colon rule is intentional, to support
# custom make file integration.
images:: jre-image jdk-image

overlay-images: jre-overlay-image jdk-overlay-image



# Processing license files from source area to image area
# These will be modified to have the platform specific EOL chars.
define process-doc-file
	$(ECHO) $(LOG_INFO) Processing $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(MKDIR) -p $(@D)
	$(RM) $@
	LC_ALL=C $(SED) 's/$$//g' $< > $@
	$(CHMOD) 444 $@
endef

define AddFileToCopy
  # Param 1 - src root dir
  # Param 2 - dest root dir
  # Param 3 - src file
  # Param 4 - variable to add targets to

  # Remove src dir root from src file
  $2_$3_FILE := $$(patsubst $1/%,%,$3)

  $2/$$($2_$3_FILE): $3
	$(ECHO) $(LOG_INFO) Copying $$(patsubst $(OUTPUT_ROOT)/%,%,$$@)
	$$(install-file)

  $4 += $2/$$($2_$3_FILE)
endef

################################################################################
#
# JRE and JDK build rules
#
################################################################################
#
# Variable prefixes explained:
# JRE_ refers to files in the j2re-*-image.
# JDK_ refers to files in the j2sdk-image outside of the jre subdir.
# JDKJRE_ refers to files in the j2sdk-image inside the jre subdir.
#

################################################################################
# /bin dir

ifeq ($(PROFILE), )
  NOT_JRE_BIN_FILES := \
      appletviewer$(EXE_SUFFIX) \
      extcheck$(EXE_SUFFIX) \
      idlj$(EXE_SUFFIX) \
      jar$(EXE_SUFFIX) \
      jarsigner$(EXE_SUFFIX) \
      java-rmi.cgi \
      javac$(EXE_SUFFIX) \
      javadoc$(EXE_SUFFIX) \
      javah$(EXE_SUFFIX) \
      javap$(EXE_SUFFIX) \
      jdeps$(EXE_SUFFIX) \
      jcmd$(EXE_SUFFIX) \
      jdb$(EXE_SUFFIX) \
      jps$(EXE_SUFFIX) \
      jrunscript$(EXE_SUFFIX) \
      jstat$(EXE_SUFFIX) \
      jstatd$(EXE_SUFFIX) \
      jstack$(EXE_SUFFIX) \
      packagebean$(SCRIPT_SUFFIX) \
      rmic$(EXE_SUFFIX) \
      serialver$(EXE_SUFFIX) \
      unregbean$(EXE_SUFFIX) \
      jconsole$(EXE_SUFFIX) \
      jinfo$(EXE_SUFFIX) \
      jmap$(EXE_SUFFIX) \
      native2ascii$(EXE_SUFFIX) \
      xjc$(EXE_SUFFIX) \
      wsgen$(EXE_SUFFIX) \
      wsimport$(EXE_SUFFIX) \
      schemagen$(EXE_SUFFIX) \
      jsadebugd$(EXE_SUFFIX) \
      jhat$(EXE_SUFFIX)
endif

WINDOWS_JDK_BIN_FILES = \
    $(EXE_SUFFIX) \
    $(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) \
    $(notdir $(MSVCR_DLL))

WINDOWS_JDKJRE_BIN_FILES := \
    $(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX) \
    $(SALIB_NAME)

# Find all files in bin dir
ALL_BIN_LIST := $(call CacheFind, $(JDK_OUTPUTDIR)/bin)

# Prevent sjavac from entering the images.
ALL_BIN_LIST := $(filter-out %/sjavac, $(ALL_BIN_LIST))

# For unknown reason the debuginfo files for executables are not put into images
# e.g filter them out
ifneq ($(OPENJDK_TARGET_OS), windows)
  ALL_BIN_LIST := $(filter-out %.debuginfo %.diz, $(ALL_BIN_LIST))
else
  # On windows, the libraries are in the bin dir, only filter out debuginfo files
  # for executables. "java" is both a library and executable.
  ALL_BIN_EXEC_FILES := $(filter-out java.exe, $(notdir $(filter %.exe, $(ALL_BIN_LIST))))
  ALL_BIN_DEBUG_FILTER := $(addprefix %, $(patsubst %.exe, %.debuginfo, $(ALL_BIN_EXEC_FILES)) \
      $(patsubst %.exe, %.diz, $(ALL_BIN_EXEC_FILES))) %.pdb
  ALL_BIN_LIST := $(filter-out $(ALL_BIN_DEBUG_FILTER), $(ALL_BIN_LIST))
endif

JDKJRE_BIN_LIST := $(filter-out $(addprefix %, $(NOT_JRE_BIN_FILES)), $(ALL_BIN_LIST))
JRE_BIN_LIST := $(filter-out $(addprefix %, $(WINDOWS_JDKJRE_BIN_FILES)), $(JDKJRE_BIN_LIST))

ifeq ($(OPENJDK_TARGET_OS), windows)
  JDK_BIN_LIST := $(filter $(addprefix %, $(WINDOWS_JDK_BIN_FILES)), $(ALL_BIN_LIST))
  # On windows x86, the server jvm is filtered out from the j2re image. This is historical
  # and is not applied to compact profiles. If no client jvm is built, leave server in.
  ifeq ($(OPENJDK_TARGET_CPU), x86)
    ifeq ($(JVM_VARIANT_CLIENT), true)
      ifeq ($(PROFILE), )
        JRE_BIN_LIST := $(filter-out $(JDK_OUTPUTDIR)/bin/server/%, $(JRE_BIN_LIST))
      endif
    endif
  endif
else
  JDK_BIN_LIST := $(ALL_BIN_LIST)
endif

ifneq ($(OPENJDK_TARGET_CPU_ISADIR), )
  OVERLAY_FILTER := $(JDK_OUTPUTDIR)/bin$(OPENJDK_TARGET_CPU_ISADIR)%
endif

$(foreach f,$(filter-out $(OVERLAY_FILTER),$(JRE_BIN_LIST)), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JRE_IMAGE_DIR),$f,JRE_BIN_TARGETS)))
$(foreach f,$(filter-out $(OVERLAY_FILTER),$(JDK_BIN_LIST)), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_IMAGE_DIR),$f,JDK_BIN_TARGETS)))
$(foreach f,$(filter-out $(OVERLAY_FILTER),$(JDKJRE_BIN_LIST)), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_IMAGE_DIR)/jre,$f,JDKJRE_BIN_TARGETS)))

$(foreach f,$(filter $(OVERLAY_FILTER),$(JRE_BIN_LIST)), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JRE_OVERLAY_IMAGE_DIR),$f,JRE_BIN_TARGETS)))
$(foreach f,$(filter $(OVERLAY_FILTER),$(JDK_BIN_LIST)), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_OVERLAY_IMAGE_DIR),$f,JDK_BIN_TARGETS)))
$(foreach f,$(filter $(OVERLAY_FILTER),$(JDKJRE_BIN_LIST)), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_OVERLAY_IMAGE_DIR)/jre,$f,JDKJRE_BIN_TARGETS)))

ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_BITS),solaris-64)
  define AddIsadirLink
    # Param 1 - src file
    # Param 2 - variable to add targets to

    $1_LINK := $$(dir $1)$(OPENJDK_TARGET_CPU_ISADIR)/$$(notdir $1)

    $$($1_LINK):
	$(ECHO) $(LOG_INFO) Creating link $$(patsubst $(OUTPUT_ROOT)/%,%,$$@)
	$(MKDIR) -p $$(@D)
	$(LN) -s ../$$(@F) $$@

    $2 += $$($1_LINK)
  endef

  $(foreach f,$(JRE_BIN_TARGETS),$(eval $(call AddIsadirLink,$f,JRE_BIN_ISADIR_LINK_TARGETS)))
  $(foreach f,$(JDK_BIN_TARGETS),$(eval $(call AddIsadirLink,$f,JDK_BIN_ISADIR_LINK_TARGETS)))
  $(foreach f,$(JDKJRE_BIN_TARGETS),$(eval $(call AddIsadirLink,$f,JDKJRE_BIN_ISADIR_LINK_TARGETS)))
endif

################################################################################
# /lib dir
ifneq ($(OPENJDK_TARGET_OS), macosx)
  JDKJRE_LIB_FILES := \
      $(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX) \
      $(SALIB_NAME)
endif

ifeq ($(PROFILE), )
  NOT_JRE_LIB_FILES := \
      tools.jar \
      jconsole.jar \
      sa-jdi.jar \
      dt.jar \
      orb.idl \
      ir.idl \
      ct.sym

  ifeq ($(OPENJDK_TARGET_OS), windows)
    NOT_JRE_LIB_FILES += jawt.lib jvm.lib
  endif
endif

JDK_LIB_FILES := $(NOT_JRE_LIB_FILES)
ifeq ($(OPENJDK_TARGET_OS), linux)
  JDK_LIB_FILES += jexec
endif

ifneq ($(findstring $(OPENJDK_TARGET_OS), linux solaris),) # If Linux or Solaris
    JDK_LIB_FILES += $(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) \
		     $(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX)
endif

# Find all files to copy from $(JDK_OUTPUTDIR)/lib
# Jar files are not expected to be here
ALL_JDKOUT_LIB_LIST := $(call not-containing,_the., $(filter-out %.jar, \
    $(call CacheFind, $(JDK_OUTPUTDIR)/lib)))
# Find all files to copy from $(IMAGES_OUTPUTDIR)/lib
# This is were the jar files are and might not exist if building overlay-images
ifneq ($(wildcard $(IMAGES_OUTPUTDIR)/lib), )
  ALL_IMAGES_LIB_LIST := $(call not-containing,_the., \
      $(call CacheFind, $(IMAGES_OUTPUTDIR)/lib))
endif

# Filter files to copy for each destination
JRE_JDKOUT_LIB_LIST := $(filter-out $(addprefix %, $(NOT_JRE_LIB_FILES) $(JDKJRE_LIB_FILES)), \
    $(ALL_JDKOUT_LIB_LIST))
JDKJRE_JDKOUT_LIB_LIST := $(filter-out $(addprefix %, $(NOT_JRE_LIB_FILES)), $(ALL_JDKOUT_LIB_LIST))
JDK_JDKOUT_LIB_LIST := $(filter $(addprefix %, $(JDK_LIB_FILES)), $(ALL_JDKOUT_LIB_LIST))

JRE_IMAGES_LIB_LIST := $(filter-out $(addprefix %, $(NOT_JRE_LIB_FILES) $(JDKJRE_LIB_FILES)), \
    $(ALL_IMAGES_LIB_LIST))
JDKJRE_IMAGES_LIB_LIST := $(filter-out $(addprefix %, $(NOT_JRE_LIB_FILES)), $(ALL_IMAGES_LIB_LIST))
JDK_IMAGES_LIB_LIST := $(filter $(addprefix %, $(JDK_LIB_FILES)), $(ALL_IMAGES_LIB_LIST))

# Iterate over files to copy to create rules for each one
$(foreach f,$(JRE_JDKOUT_LIB_LIST), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JRE_IMAGE_DIR),$f,JRE_LIB_TARGETS)))
$(foreach f,$(JDK_JDKOUT_LIB_LIST), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_IMAGE_DIR),$f,JDK_LIB_TARGETS)))
$(foreach f,$(JDKJRE_JDKOUT_LIB_LIST), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_IMAGE_DIR)/jre,$f,JDKJRE_LIB_TARGETS)))

$(foreach f,$(JRE_IMAGES_LIB_LIST), \
    $(eval $(call AddFileToCopy,$(IMAGES_OUTPUTDIR),$(JRE_IMAGE_DIR),$f,JRE_LIB_TARGETS)))
$(foreach f,$(JDK_IMAGES_LIB_LIST), \
    $(eval $(call AddFileToCopy,$(IMAGES_OUTPUTDIR),$(JDK_IMAGE_DIR),$f,JDK_LIB_TARGETS)))
$(foreach f,$(JDKJRE_IMAGES_LIB_LIST), \
    $(eval $(call AddFileToCopy,$(IMAGES_OUTPUTDIR),$(JDK_IMAGE_DIR)/jre,$f,JDKJRE_LIB_TARGETS)))

$(foreach f,$(filter $(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_ISADIR)/%,$(JRE_JDKOUT_LIB_LIST)), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JRE_OVERLAY_IMAGE_DIR),$f,JRE_OVERLAY_LIB_TARGETS)))
$(foreach f,$(filter $(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_ISADIR)/%,$(JDK_JDKOUT_LIB_LIST)), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_OVERLAY_IMAGE_DIR),$f,JDK_OVERLAY_LIB_TARGETS)))
$(foreach f,$(filter $(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_ISADIR)/%,$(JDKJRE_JDKOUT_LIB_LIST)), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_OVERLAY_IMAGE_DIR)/jre,$f,JDKJRE_OVERLAY_LIB_TARGETS)))

ifneq ($(PROFILE), )
  # Files in lib$(PROFILE) are excluded from the generic copying routines so
  # we have to add them back in here
  $(foreach f,$(CUSTOM_PROFILE_JARS), \
      $(eval $(call AddFileToCopy,$(IMAGES_OUTPUTDIR)/lib$(PROFILE),$(JRE_IMAGE_DIR)/lib,$f,JRE_LIB_TARGETS)))
endif

# CTE plugin security change require new empty directory lib/applet
$(JRE_IMAGE_DIR)/lib/applet:
	$(ECHO) $(LOG_INFO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(MKDIR) -p $@

$(JDK_IMAGE_DIR)/jre/lib/applet:
	$(ECHO) $(LOG_INFO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(MKDIR) -p $@

$(JRE_IMAGE_DIR)/lib/meta-index: $(JRE_LIB_TARGETS)
	$(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(CD) $(@D) && $(TOOL_BUILDMETAINDEX) -o meta-index *.jar

$(JDK_IMAGE_DIR)/jre/lib/meta-index: $(JDKJRE_LIB_TARGETS)
	$(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(CD) $(@D) && $(TOOL_BUILDMETAINDEX) -o meta-index *.jar

$(JRE_IMAGE_DIR)/lib/ext/meta-index: $(JRE_LIB_TARGETS)
	$(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(CD) $(@D) && $(TOOL_BUILDMETAINDEX) -o meta-index *.jar

$(JDK_IMAGE_DIR)/jre/lib/ext/meta-index: $(JDKJRE_LIB_TARGETS)
	$(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(CD) $(@D) && $(TOOL_BUILDMETAINDEX) -o meta-index *.jar

################################################################################
# /man dir
#
# All variables in this section are assigned with simple =, without :, to enable
# more selective overriding from the custom version of this file.
#
# Avoid evaluating this whole section on windows for speed and stability
ifneq ($(OPENJDK_TARGET_OS), windows)
  JRE_MAN_PAGES = \
      java.1 \
      jjs.1 \
      keytool.1 \
      orbd.1 \
      pack200.1 \
      policytool.1 \
      rmid.1 \
      rmiregistry.1 \
      servertool.1 \
      tnameserv.1 \
      unpack200.1

  ifndef OPENJDK
    ifneq ($(OPENJDK_TARGET_OS), solaris)
      JRE_MAN_PAGES += javaws.1
    endif
  endif

  JDK_MAN_PAGES = \
      $(JRE_MAN_PAGES) \
      appletviewer.1 \
      extcheck.1 \
      idlj.1 \
      jar.1 \
      jarsigner.1 \
      javac.1 \
      javadoc.1 \
      javah.1 \
      javap.1 \
      jconsole.1 \
      jcmd.1 \
      jdb.1 \
      jdeps.1 \
      jhat.1 \
      jinfo.1 \
      jmap.1 \
      jps.1 \
      jrunscript.1 \
      jsadebugd.1 \
      jstack.1 \
      jstat.1 \
      jstatd.1 \
      native2ascii.1 \
      rmic.1 \
      schemagen.1 \
      serialver.1 \
      wsgen.1 \
      wsimport.1 \
      xjc.1

  # This variable is potentially overridden in the closed makefile.
  MAN_SRC_BASEDIR ?= $(JDK_TOPDIR)/src

  ifeq ($(OPENJDK_TARGET_OS), linux)
    MAN_SRC_DIR = $(MAN_SRC_BASEDIR)/linux/doc
    MAN1_SUBDIR = man
  endif
  ifeq ($(OPENJDK_TARGET_OS), solaris)
    MAN_SRC_DIR = $(MAN_SRC_BASEDIR)/solaris/doc
    MAN1_SUBDIR = sun/man/man1
  endif
  ifeq ($(OPENJDK_TARGET_OS), macosx)
    MAN_SRC_DIR = $(MAN_SRC_BASEDIR)/bsd/doc
    MAN1_SUBDIR = man
  endif

  $(JRE_IMAGE_DIR)/man/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/%
	$(ECHO) $(LOG_INFO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(install-file)

  $(JDK_IMAGE_DIR)/man/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/%
	$(ECHO) $(LOG_INFO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(install-file)

  $(JRE_IMAGE_DIR)/man/man1/%: $(JDK_OUTPUTDIR)/impdoc/$(MAN1_SUBDIR)/%
	$(ECHO) $(LOG_INFO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(install-file)

  $(JDK_IMAGE_DIR)/man/man1/%: $(JDK_OUTPUTDIR)/impdoc/$(MAN1_SUBDIR)/%
	$(ECHO) $(LOG_INFO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(install-file)

  define install-ja-manpage
	$(MKDIR) -p $(@D)
	$(CAT) $< \
	    | $(NATIVE2ASCII) -encoding eucJP \
	    | $(SED) 's/@@VERSION@@/$(THIS_JDK_VERSION)/g' \
	    | $(NATIVE2ASCII) -reverse -encoding $1 \
	    > $@
  endef

  $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/%
	$(ECHO) $(LOG_INFO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(call install-ja-manpage, UTF-8)

  $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/%
	$(ECHO) $(LOG_INFO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(call install-ja-manpage, UTF-8)

  $(JRE_IMAGE_DIR)/man/ja_JP.PCK/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/%
	$(ECHO) $(LOG_INFO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(call install-ja-manpage, PCK)

  $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/%
	$(ECHO) $(LOG_INFO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(call install-ja-manpage, PCK)

  ifeq ($(OPENJDK_TARGET_OS), solaris)
    $(JRE_IMAGE_DIR)/man/ja/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/%
	$(ECHO) $(LOG_INFO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(install-file)

    $(JDK_IMAGE_DIR)/man/ja/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/%
	$(ECHO) $(LOG_INFO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(install-file)
  endif

  ifeq ($(OPENJDK_TARGET_OS), linux)
    $(JRE_IMAGE_DIR)/man/ja:
	$(ECHO) $(LOG_INFO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja

    $(JDK_IMAGE_DIR)/man/ja:
	$(ECHO) $(LOG_INFO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja
  endif

  ifeq ($(OPENJDK_TARGET_OS), macosx)
    $(JRE_IMAGE_DIR)/man/ja:
	$(ECHO) $(LOG_INFO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja

    $(JDK_IMAGE_DIR)/man/ja:
	$(ECHO) $(LOG_INFO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja
  endif

  ifeq ($(OPENJDK_TARGET_OS), linux)
    JRE_MAN_PAGE_LIST = $(addprefix $(JRE_IMAGE_DIR)/man/man1/, $(JRE_MAN_PAGES)) \
        $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JRE_MAN_PAGES)) \
        $(JRE_IMAGE_DIR)/man/ja

    JDK_MAN_PAGE_LIST = $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \
        $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JDK_MAN_PAGES)) \
        $(JDK_IMAGE_DIR)/man/ja
  endif

  ifeq ($(OPENJDK_TARGET_OS), solaris)
    JRE_MAN_PAGE_LIST = $(addprefix $(JRE_IMAGE_DIR)/man/man1/, $(JRE_MAN_PAGES)) \
        $(addprefix $(JRE_IMAGE_DIR)/man/ja/man1/, $(JRE_MAN_PAGES)) \
        $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JRE_MAN_PAGES)) \
        $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.PCK/man1/, $(JRE_MAN_PAGES))

    JDK_MAN_PAGE_LIST = $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \
        $(addprefix $(JDK_IMAGE_DIR)/man/ja/man1/, $(JDK_MAN_PAGES)) \
        $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JDK_MAN_PAGES)) \
        $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/, $(JDK_MAN_PAGES))
  endif

  ifeq ($(OPENJDK_TARGET_OS), macosx)
    JRE_MAN_PAGE_LIST = $(addprefix $(JRE_IMAGE_DIR)/man/man1/, $(JRE_MAN_PAGES)) \
        $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JRE_MAN_PAGES)) \
        $(JRE_IMAGE_DIR)/man/ja

    JDK_MAN_PAGE_LIST = $(addprefix $(JDK_IMAGE_DIR)/man/man1/, $(JDK_MAN_PAGES)) \
        $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/, $(JDK_MAN_PAGES)) \
        $(JDK_IMAGE_DIR)/man/ja
  endif

endif # Windows

################################################################################
# /demo dir

# FIXME: demo/applets/GraphLayout/GraphPanel$2.class is sometimes not copied.

# The db demo contains an empty dir that needs to be copied. The other
# directories will always trigger the rule for recompile since
# _the.list_of_packages files are touched.
$(JDK_IMAGE_DIR)/demo/%: $(JDK_OUTPUTDIR)/demo/%
	if [ ! -d "$@" ]; then \
	  $(ECHO) $(LOG_INFO) Copying '$(patsubst $(OUTPUT_ROOT)/%,%,$@)'; \
	  $(MKDIR) -p $(@D); \
	  if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) '$<' '$@'; fi \
	fi

# Find all files including directories
JDK_DEMO_TARGETS := $(patsubst $(JDK_OUTPUTDIR)/demo/%, $(JDK_IMAGE_DIR)/demo/%, \
    $(shell $(FIND) $(JDK_OUTPUTDIR)/demo ! \( -name "_the*" -o -name "javac_state" \) ))



# Param 1 is source file
define CreateOverlayDemoRule
  $1_TARGET := $$(subst $(JDK_OUTPUTDIR),$(JDK_OVERLAY_IMAGE_DIR), \
      $$(dir $1)$(OPENJDK_TARGET_CPU_ISADIR)/$$(notdir $1))
  $$($1_TARGET): $1
	$(ECHO) $(LOG_INFO) Copying '$$(patsubst $(OUTPUT_ROOT)/%,%,$$@)'
	$$(call install-file)

  JDK_OVERLAY_DEMO_TARGETS += $$($1_TARGET)
endef
JDK_OVERLAY_DEMO_SOURCES := $(filter %$(SHARED_LIBRARY_SUFFIX), $(call CacheFind, $(JDK_OUTPUTDIR)/demo))
$(foreach lib, $(JDK_OVERLAY_DEMO_SOURCES), $(eval $(call CreateOverlayDemoRule, $(lib))))

################################################################################
# /sample dir

$(foreach f,$(call CacheFind,$(JDK_OUTPUTDIR)/sample), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_IMAGE_DIR),$f,JDK_SAMPLE_TARGETS)))

################################################################################
# /include dir

$(foreach f,$(call CacheFind,$(JDK_OUTPUTDIR)/include), \
    $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_IMAGE_DIR),$f,JDK_INCLUDE_TARGETS)))

################################################################################
# doc files

ifdef OPENJDK
  JRE_DOC_FILES := LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README
  JDK_DOC_FILES := LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README
  JRE_DOC_LOCATION := $(JDK_TOPDIR)
  JDK_DOC_LOCATION := $(JDK_TOPDIR)
else
  JRE_DOC_FILES := COPYRIGHT Welcome.html LICENSE THIRDPARTYLICENSEREADME.txt
  JDK_DOC_FILES := COPYRIGHT README.html LICENSE THIRDPARTYLICENSEREADME.txt
  ifeq ($(OPENJDK_TARGET_OS), windows)
    JRE_DOC_FILES += README.txt
  else
    JRE_DOC_FILES += README
  endif
  JDK_DOC_FILES += demo/DEMOS_LICENSE sample/SAMPLES_LICENSE
  JRE_DOC_LOCATION := $(JDK_TOPDIR)/src/closed/share/doc/jre
  JDK_DOC_LOCATION := $(JDK_TOPDIR)/src/closed/share/doc/jdk
endif
JRE_DOC_TARGETS := $(addprefix $(JRE_IMAGE_DIR)/, $(JRE_DOC_FILES))
JDKJRE_DOC_TARGETS := $(addprefix $(JDK_IMAGE_DIR)/jre/, $(JRE_DOC_FILES))
JDK_DOC_TARGETS := $(addprefix $(JDK_IMAGE_DIR)/, $(JDK_DOC_FILES))

$(JRE_IMAGE_DIR)/%: $(JRE_DOC_LOCATION)/%
	$(process-doc-file)

$(JDK_IMAGE_DIR)/jre/%: $(JRE_DOC_LOCATION)/%
	$(process-doc-file)

$(JRE_IMAGE_DIR)/README.txt: $(JRE_DOC_LOCATION)/README
	$(process-doc-file)

$(JDK_IMAGE_DIR)/jre/README.txt: $(JRE_DOC_LOCATION)/README
	$(process-doc-file)

$(JDK_IMAGE_DIR)/%: $(JDK_DOC_LOCATION)/%
	$(process-doc-file)

$(JDK_IMAGE_DIR)/demo/%: $(JDK_DOC_LOCATION)/%
	$(process-doc-file)

$(JDK_IMAGE_DIR)/sample/%: $(JDK_DOC_LOCATION)/%
	$(process-doc-file)

JRE_INFO_FILE := $(JRE_IMAGE_DIR)/release
JDK_INFO_FILE := $(JDK_IMAGE_DIR)/release

JRE_OVERLAY_INFO_FILE := $(JRE_OVERLAY_IMAGE_DIR)/release
JDK_OVERLAY_INFO_FILE := $(JDK_OVERLAY_IMAGE_DIR)/release

# Common way to emit a line into the release or info file
define info-file-item # name value
	$(PRINTF) '%s="%s"\n' $1 $2 >> $@
endef

define create-info-file
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(call info-file-item, "JAVA_VERSION", "$(JDK_VERSION)")
	$(call info-file-item, "OS_NAME", "$(REQUIRED_OS_NAME)")
	$(call info-file-item, "OS_VERSION", "$(REQUIRED_OS_VERSION)")
	$(call info-file-item, "OS_ARCH", "$(OPENJDK_TARGET_CPU_LEGACY)")
	if [ -n "$(JDK_ARCH_ABI_PROP_NAME)" ]; then $(call info-file-item, "SUN_ARCH_ABI", "$(JDK_ARCH_ABI_PROP_NAME)"); fi
	$(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)")
endef

ALL_SOURCE_TIPS = $(shell \
    if [ -f $(OUTPUT_ROOT)/source_tips ] ; then \
      $(CAT) $(OUTPUT_ROOT)/source_tips ; \
    fi)

$(JRE_INFO_FILE): $(OUTPUT_ROOT)/spec.gmk $(OUTPUT_ROOT)/source_tips
	$(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(call create-info-file)
        ifneq ($(PROFILE), )
	  $(call info-file-item, "JAVA_PROFILE", "$(call profile_name, $(call profile_number, $(PROFILE)))")
        endif

$(JDK_INFO_FILE): $(OUTPUT_ROOT)/spec.gmk $(OUTPUT_ROOT)/source_tips
	$(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(call create-info-file)

$(JRE_OVERLAY_INFO_FILE): $(OUTPUT_ROOT)/spec.gmk $(OUTPUT_ROOT)/source_tips
	$(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(call create-info-file)

$(JDK_OVERLAY_INFO_FILE): $(OUTPUT_ROOT)/spec.gmk $(OUTPUT_ROOT)/source_tips
	$(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(call create-info-file)

$(JDK_IMAGE_DIR)/src.zip: $(IMAGES_OUTPUTDIR)/src.zip
	$(ECHO) $(LOG_INFO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@)
	$(install-file)

################################################################################
# Post processing (strip etc)

ifneq ($(POST_STRIP_CMD), )
  ifeq ($(OPENJDK_TARGET_OS), windows)
    EXEC_LIST_BIN := $(filter-out %$(notdir $(MSVCR_DLL)), $(filter %.exe %.dll, $(ALL_BIN_LIST)))
  else
    # Find all executables in JDK_OUTPUTDIR since they exist when this makefile is parsed
    EXEC_LIST_BIN := $(shell $(FILE) `$(FIND) $(JDK_OUTPUTDIR)/bin -type f -name \*$(EXE_SUFFIX) ! -name \*.debuginfo` \
        | $(EGREP) 'ELF' | $(CUT) -d':' -f1)
    # On mac, the old build searches for static libraries for stripping instead of shared.
    # Not clear if it's intentional.
    ifneq ($(OPENJDK_TARGET_OS), macosx)
      EXEC_LIST_LIB := $(shell $(FIND) $(JDK_OUTPUTDIR)/lib -type f -name \*$(SHARED_LIBRARY_SUFFIX))
    endif
  endif
  # Filter out sjavac
  EXEC_LIST_BIN := $(filter-out %sjavac$(EXE_SUFFIX), $(EXEC_LIST_BIN))

  # Filter out the overlay specific bin files
  EXEC_LIST := $(filter-out $(OVERLAY_FILTER), $(EXEC_LIST_BIN)) $(EXEC_LIST_LIB)
  EXEC_LIST_OVERLAY := $(filter $(OVERLAY_FILTER), $(EXEC_LIST_BIN)) $(EXEC_LIST_LIB)

  # Filter out non JRE files and convert to unique touch files to depend on
  JRE_STRIP_LIST := $(patsubst $(JDK_OUTPUTDIR)/%, $(IMAGES_OUTPUTDIR)/_strip_jre$(PROFILE)/%.stripped, \
      $(filter-out $(addprefix %, $(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES) $(JDKJRE_LIB_FILES)), \
      $(EXEC_LIST)))

  JDKJRE_STRIP_LIST := $(patsubst $(JDK_OUTPUTDIR)/%, \
      $(IMAGES_OUTPUTDIR)/_strip_jdk/jre/%.stripped, \
      $(filter-out $(addprefix %, $(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES)), $(EXEC_LIST)))

  JDK_BIN_STRIP_LIST := $(patsubst $(JDK_OUTPUTDIR)/%, \
      $(IMAGES_OUTPUTDIR)/_strip_jdk/%.stripped, \
      $(filter-out $(JDK_OUTPUTDIR)/lib/%, $(EXEC_LIST)))

  # Do the same for overlay image
  JRE_OVERLAY_STRIP_LIST := $(patsubst $(JDK_OUTPUTDIR)/%, $(IMAGES_OUTPUTDIR)/_strip_jre_overlay/%.stripped, \
      $(filter-out $(addprefix %, $(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES) $(JDKJRE_LIB_FILES)), \
      $(EXEC_LIST_OVERLAY)))

  JDKJRE_OVERLAY_STRIP_LIST := $(patsubst $(JDK_OUTPUTDIR)/%, \
      $(IMAGES_OUTPUTDIR)/_strip_jdk_overlay/jre/%.stripped, \
      $(filter-out $(addprefix %, $(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES)), $(EXEC_LIST_OVERLAY)))

  JDK_OVERLAY_BIN_STRIP_LIST := $(patsubst $(JDK_OUTPUTDIR)/%, \
      $(IMAGES_OUTPUTDIR)/_strip_jdk_overlay/%.stripped, \
      $(filter-out $(JDK_OUTPUTDIR)/lib/%, $(EXEC_LIST_OVERLAY)))

  define mcs-file
	$(if $(POST_MCS_CMD), $(POST_MCS_CMD) $<)
  endef

  define strip-file
	$(ECHO) Stripping $(LOG_INFO) $(patsubst $(OUTPUT_ROOT)/%,%,$<)
	$(CHMOD) u+w $<
	$(POST_STRIP_CMD) $<
	$(call mcs-file)
	$(CHMOD) go-w $<
	$(MKDIR) -p $(@D)
	$(TOUCH) $@
  endef

  # Setup a rule for stripping files based on touch files
  $(IMAGES_OUTPUTDIR)/_strip_jre$(PROFILE)/%.stripped: $(JRE_IMAGE_DIR)/%
	$(call strip-file)

  $(IMAGES_OUTPUTDIR)/_strip_jdk/%.stripped: $(JDK_IMAGE_DIR)/%
	$(call strip-file)

  $(IMAGES_OUTPUTDIR)/_strip_jre_overlay/%.stripped: $(JRE_OVERLAY_IMAGE_DIR)/%
	$(call strip-file)

  $(IMAGES_OUTPUTDIR)/_strip_jdk_overlay/%.stripped: $(JDK_OVERLAY_IMAGE_DIR)/%
	$(call strip-file)

endif

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

# Include the custom makefile right here, after all variables have been defined
# so that they may be overridden, but before the main targets are declared, so 
# that overriding has an effect.
-include $(CUSTOM_MAKE_DIR)/Images.gmk

################################################################################
# Main targets

jre-image: $(JRE_BIN_TARGETS) $(JRE_LIB_TARGETS) $(JRE_IMAGE_DIR)/lib/applet \
    $(JRE_IMAGE_DIR)/lib/meta-index $(JRE_IMAGE_DIR)/lib/ext/meta-index \
    $(JRE_MAN_PAGE_LIST) $(JRE_DOC_TARGETS) $(JRE_INFO_FILE) $(JRE_STRIP_LIST) \
    $(JRE_BIN_ISADIR_LINK_TARGETS)

jdk-image: $(JDK_BIN_TARGETS) $(JDKJRE_BIN_TARGETS) \
    $(JDK_LIB_TARGETS) $(JDKJRE_LIB_TARGETS) \
    $(JDK_IMAGE_DIR)/jre/lib/applet \
    $(JDK_DEMO_TARGETS) \
    $(JDK_IMAGE_DIR)/jre/lib/meta-index $(JDK_IMAGE_DIR)/jre/lib/ext/meta-index \
    $(JDK_MAN_PAGE_LIST) $(JDK_SAMPLE_TARGETS) \
    $(JDK_DB_TARGETS) $(JDK_INCLUDE_TARGETS) \
    $(JDKJRE_DOC_TARGETS) $(JDK_DOC_TARGETS) \
    $(JDK_INFO_FILE) $(JDKJRE_STRIP_LIST) $(JDK_BIN_STRIP_LIST) \
    $(JDK_IMAGE_DIR)/src.zip \
    $(JDK_BIN_ISADIR_LINK_TARGETS) $(JDKJRE_BIN_ISADIR_LINK_TARGETS)

jre-overlay-image: $(JRE_OVERLAY_BIN_TARGETS) $(JRE_OVERLAY_LIB_TARGETS) \
    $(JRE_OVERLAY_INFO_FILE) $(JRE_OVERLAY_STRIP_LIST)

jdk-overlay-image: $(JDK_OVERLAY_BIN_TARGETS) $(JDKJRE_OVERLAY_BIN_TARGETS) \
    $(JDK_OVERLAY_LIB_TARGETS) $(JDKJRE_OVERLAY_LIB_TARGETS) \
    $(JDK_OVERLAY_DEMO_TARGETS) $(JDK_OVERLAY_INFO_FILE) \
    $(JDKJRE_OVERLAY_STRIP_LIST) $(JDK_OVERLAY_BIN_STRIP_LIST)

ifneq ($(PROFILE), )
  PROFILE_IMAGE_JARS := $(filter %.jar, $(JRE_LIB_TARGETS))

  PROFILE_IMAGE_JARS_CHECKED := $(IMAGES_OUTPUTDIR)/lib$(PROFILE)/_jars_checked

  $(PROFILE_IMAGE_JARS_CHECKED) : $(PROFILE_IMAGE_JARS)
	$(TOOL_CHECKDEPS) $(JRE_IMAGE_DIR) \
	    $(call profile_name, $(call profile_number, $(PROFILE)))
	$(TOUCH) $@

  profile-image: $(JRE_BIN_TARGETS) $(JRE_LIB_TARGETS) \
	$(JRE_IMAGE_DIR)/lib/meta-index $(JRE_IMAGE_DIR)/lib/ext/meta-index \
	$(JRE_INFO_FILE) $(JRE_STRIP_LIST) $(PROFILE_IMAGE_JARS_CHECKED)

  .PHONY: profile-image

endif # Profile

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

.PHONY: default images jre-image jdk-image

