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

################################################################################
# Build demos for the JDK into $(SUPPORT_OUTPUTDIR)/demos/image.
################################################################################

default: all

include $(SPEC)
include MakeBase.gmk
include JavaCompilation.gmk
include NativeCompilation.gmk
include SetupJavaCompilers.gmk
include TextFileProcessing.gmk
include ZipArchive.gmk

# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, CompileDemos-pre.gmk))

# Prepare the find cache.
DEMO_SRC_DIRS += $(TOPDIR)/src/demo

$(eval $(call FillCacheFind, $(wildcard $(DEMO_SRC_DIRS))))

# Append demo goals to this variable.
TARGETS =

# The demo structure and contents should really be cleaned up.
# Now every other demo has its own quirks where to put the
# READMEs and other files.

DEMO_SHARE_SRC := $(TOPDIR)/src/demo/share
GLOBAL_VERSION_INFO_RESOURCE := $(TOPDIR)/src/java.base/windows/native/common/version.rc

DEMO_MANIFEST := $(SUPPORT_OUTPUTDIR)/demos/java-main-manifest.mf

# This rule will be depended on due to the MANIFEST line in SetupBuildDemo
# and SetupBuildJvmtiDemo.
$(eval $(call SetupTextFileProcessing, BUILD_JAVA_MANIFEST, \
  SOURCE_FILES := $(TOPDIR)/make/data/mainmanifest/manifest.mf, \
  OUTPUT_FILE := $(DEMO_MANIFEST), \
  REPLACEMENTS := \
      @@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION) ; \
      @@VERSION_SHORT@@ => $(VERSION_SHORT) ; \
      @@COMPANY_NAME@@ => $(COMPANY_NAME) , \
))

################################################################################
# Build normal demos.

COPY_TO_JAR := .html .txt .properties .js .gif .jpg .theme .data .opt .c .h \
    .png .ttf .xyz .obj README COPYRIGHT

COPY_TO_IMAGE := *.html *.txt *.png *.xml README*

# Setup make rules for building a demo.
#
# Parameter 1 is the name of the rule. This name is used as variable prefix,
# and the targets generated are listed in a variable by that name.
#
# Remaining parameters are named arguments. These include:
# DEMO_SUBDIR   The name of the subdir of the demo, below the demo top dir.
# EXTRA_SRC_DIR   Additional source directory.
# SRC_SUB_DIR   Optional subdir to locate source code in
# SRC_DIR   Alternative source directory to use for the demos.
# EXCLUDE_FILES   Exclude file list
# JAR_NAME   Base name of jar file. Defaults to $1.
# MAIN_CLASS   The main class for the jar. Defaults to $1.
# EXTRA_COPY_TO_JAR   Additional files to copy to jar (as patterns)
# EXTRA_COPY_TO_IMAGE   Additional files to copy to images (as wildcards)
# EXTRA_MANIFEST_ATTR   Extra manifest attribute
# SKIP_COMPILATION   Skip Java compilation iff true
# DISABLE_SJAVAC   Passed to SetupJavaCompilation
SetupBuildDemo = $(NamedParamsMacroTemplate)
define SetupBuildDemoBody
  ifeq ($$($1_SRC_DIR), )
    $1_SRC_DIR := $(DEMO_SHARE_SRC)
  endif

  $1_SRC_BASE := $$($1_SRC_DIR)/$$($1_DEMO_SUBDIR)/$1

  # In some demos the source is found in a subdir
  ifneq ($$($1_SRC_SUB_DIR), )
    $1_MAIN_SRC := $$($1_SRC_BASE)/$$($1_SRC_SUB_DIR)
  else
    # for allmost all
    $1_MAIN_SRC := $$($1_SRC_BASE)
  endif

  # Default is to use demo name as jar file name.
  ifeq ($$($1_JAR_NAME), )
    $1_JAR_NAME := $1
  endif

  # Default is to use demo name as jar main class.
  ifeq ($$($1_MAIN_CLASS), )
    $1_MAIN_CLASS := $1
  else ifeq ($$($1_MAIN_CLASS), NONE)
    $1_MAIN_CLASS :=
    $1_EXTRA_MANIFEST_ATTR += Main-Class: \n
  endif

  ifneq ($$($1_SKIP_COMPILATION), true)
    $$(eval $$(call SetupJavaCompilation, BUILD_DEMO_$1, \
        SETUP := GENERATE_USINGJDKBYTECODE, \
        SRC := $$($1_MAIN_SRC) $$($1_EXTRA_SRC_DIR), \
        BIN := $(SUPPORT_OUTPUTDIR)/demos/classes/$$($1_DEMO_SUBDIR)/$1, \
        COPY := $(COPY_TO_JAR) $$($1_EXTRA_COPY_TO_JAR), \
        JAR := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1/$$($1_JAR_NAME).jar, \
        JARMAIN := $$($1_MAIN_CLASS), \
        MANIFEST := $(DEMO_MANIFEST), \
        EXTRA_MANIFEST_ATTR := $$($1_EXTRA_MANIFEST_ATTR), \
        SRCZIP := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1/src.zip, \
        EXCLUDE_FILES := $$($1_EXCLUDE_FILES), \
        DISABLE_SJAVAC := $$($1_DISABLE_SJAVAC), \
    ))

    $1 += $$(BUILD_DEMO_$1)
  endif

  # Copy files. Sort is needed to remove duplicates.
  $1_COPY_FILES := $$(sort $$(wildcard $$(addprefix $$($1_SRC_BASE)/, \
      $(COPY_TO_IMAGE) $$($1_EXTRA_COPY_TO_IMAGE))))
  $$(eval $$(call SetupCopyFiles, COPY_DEMO_$1, \
      SRC :=  $$($1_SRC_BASE), \
      DEST := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1, \
      FILES := $$($1_COPY_FILES), \
  ))

  $1 += $$(COPY_DEMO_$1)

  TARGETS += $$($1)
endef

CODEPOINT_SERVICE := java.awt.im.spi.InputMethodDescriptor
CODEPOINT_METAINF_SERVICE_FILE := \
    $(SUPPORT_OUTPUTDIR)/demos/classes/jfc/CodePointIM/META-INF/services/$(CODEPOINT_SERVICE)

$(eval $(call SetupBuildDemo, CodePointIM, \
    DEMO_SUBDIR := jfc, \
    EXTRA_COPY_TO_JAR := $(CODEPOINT_SERVICE), \
))

# We also need to copy the CODEPOINT_SERVICE file to the META-INF/services
# location, and make sure the jar depends on that file to get it included.
$(CODEPOINT_METAINF_SERVICE_FILE): $(DEMO_SHARE_SRC)/jfc/CodePointIM/$(CODEPOINT_SERVICE)
	$(call install-file)

$(BUILD_DEMO_CodePointIM_JAR): $(CODEPOINT_METAINF_SERVICE_FILE)

$(eval $(call SetupBuildDemo, FileChooserDemo, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, SwingSet2, \
    DEMO_SUBDIR := jfc, \
    EXTRA_COPY_TO_JAR := .java, \
    EXTRA_MANIFEST_ATTR := SplashScreen-Image: resources/images/splash.png, \
    DISABLE_SJAVAC := true, \
))

$(eval $(call SetupBuildDemo, Font2DTest, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, J2Ddemo, \
    DEMO_SUBDIR := jfc, \
    MAIN_CLASS := java2d.J2Ddemo, \
    JAR_NAME := J2Ddemo, \
))

$(eval $(call SetupBuildDemo, Metalworks, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, Notepad, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, Stylepad, \
    DEMO_SUBDIR := jfc, \
    EXTRA_SRC_DIR := $(DEMO_SHARE_SRC)/jfc/Notepad, \
    EXCLUDE_FILES := $(DEMO_SHARE_SRC)/jfc/Notepad/README.txt, \
))

$(eval $(call SetupBuildDemo, SampleTree, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, TableExample, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, TransparentRuler, \
    DEMO_SUBDIR := jfc, \
    MAIN_CLASS := transparentruler.Ruler, \
))

################################################################################
# Copy html and README files.

$(SUPPORT_OUTPUTDIR)/demos/image/README: $(DEMO_SHARE_SRC)/README
	$(call install-file)

TARGETS += $(SUPPORT_OUTPUTDIR)/demos/image/README

################################################################################
# Copy netbeans project files.

$(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%: $(DEMO_SHARE_SRC)/nbproject/%
	$(call install-file)
	$(CHMOD) -f ug+w $@

ifeq ($(OPENJDK_TARGET_OS), solaris)
  TARGETS += $(patsubst $(DEMO_SHARE_SRC)/nbproject/%, \
    $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%, \
    $(call CacheFind, $(DEMO_SHARE_SRC)/nbproject))
else
  TARGETS += $(patsubst $(DEMO_SHARE_SRC)/nbproject/%, \
    $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%, \
    $(call CacheFind, $(DEMO_SHARE_SRC)/nbproject))
endif

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

ifneq ($(filter images, $(MAKECMDGOALS)), )
  $(eval $(call SetupCopyFiles, COPY_TO_TEST_IMAGE, \
      SRC := $(SUPPORT_OUTPUTDIR)/demos/image, \
      DEST := $(TEST_IMAGE_DIR)/jdk/demos, \
      FILES := $(call CacheFind, $(SUPPORT_OUTPUTDIR)/demos/image), \
  ))

  IMAGES_TARGETS := $(COPY_TO_TEST_IMAGE)
endif

################################################################################
# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, CompileDemos-post.gmk))

all: $(TARGETS)
images: $(IMAGES_TARGETS)

.PHONY: all
