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

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

include CopyFiles.gmk
include JavaCompilation.gmk
include TextFileProcessing.gmk
include ZipArchive.gmk

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

$(call FillFindCache, $(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

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.template, \
  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
# DISABLED_WARNINGS Additional disabled warnings
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 almost 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, \
        TARGET_RELEASE := $(TARGET_RELEASE_NEWJDK_UPGRADED), \
        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), \
        EXCLUDE_FILES := $$($1_EXCLUDE_FILES), \
        DISABLED_WARNINGS := $$($1_DISABLED_WARNINGS), \
    ))

    $1 += $$(BUILD_DEMO_$1)

    $$(eval $$(call SetupZipArchive, ZIP_SRC_DEMO_$1, \
        SRC := $$($1_MAIN_SRC) $$($1_EXTRA_SRC_DIR), \
        ZIP := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1/src.zip, \
        EXCLUDE_FILES := $$($1_EXCLUDE_FILES), \
    ))

    $1 += $$(ZIP_SRC_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, \
    DISABLED_WARNINGS := rawtypes deprecation unchecked this-escape, \
))

$(eval $(call SetupBuildDemo, SwingSet2, \
    DEMO_SUBDIR := jfc, \
    EXTRA_COPY_TO_JAR := .java, \
    EXTRA_MANIFEST_ATTR := SplashScreen-Image: resources/images/splash.png, \
    DISABLED_WARNINGS := rawtypes deprecation unchecked static serial cast this-escape, \
))

$(eval $(call SetupBuildDemo, Font2DTest, \
    DISABLED_WARNINGS := rawtypes deprecation unchecked serial cast this-escape dangling-doc-comments, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, J2Ddemo, \
    DEMO_SUBDIR := jfc, \
    MAIN_CLASS := java2d.J2Ddemo, \
    DISABLED_WARNINGS := rawtypes deprecation unchecked cast lossy-conversions this-escape, \
    JAR_NAME := J2Ddemo, \
))

$(eval $(call SetupBuildDemo, Metalworks, \
    DISABLED_WARNINGS := rawtypes unchecked this-escape, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, Notepad, \
    DISABLED_WARNINGS := rawtypes this-escape, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, Stylepad, \
    DEMO_SUBDIR := jfc, \
    DISABLED_WARNINGS := rawtypes unchecked this-escape, \
    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, \
    DISABLED_WARNINGS := rawtypes unchecked deprecation this-escape dangling-doc-comments, \
    DEMO_SUBDIR := jfc, \
))

$(eval $(call SetupBuildDemo, TransparentRuler, \
    DISABLED_WARNINGS := this-escape, \
    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 $@

TARGETS += $(patsubst $(DEMO_SHARE_SRC)/nbproject/%, \
  $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%, \
  $(call FindFiles, $(DEMO_SHARE_SRC)/nbproject))

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

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

  IMAGES_TARGETS := $(COPY_TO_TEST_IMAGE)
endif

images: $(IMAGES_TARGETS)

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

include MakeFileEnd.gmk
