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

# Setup the java compilers for the JDK build.
include Setup.gmk

# Prepare the find cache. Only used if running on windows.
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/src))

# Append demo goals to this variable.
BUILD_DEMOS =

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

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

define SetupAppletDemo
  $$(eval $$(call SetupJavaCompilation,BUILD_DEMO_APPLET_$1, \
      SETUP := GENERATE_USINGJDKBYTECODE, \
      SRC := $(JDK_TOPDIR)/src/$3share/demo/applets/$1, \
      BIN := $(JDK_OUTPUTDIR)/demo/applets/$1, \
      COPY := .html .java .xyz .obj .au .gif, \
      DISABLE_SJAVAC := $2))
      BUILD_DEMOS += $$(BUILD_DEMO_APPLET_$1)
endef

$(eval $(call SetupAppletDemo,ArcTest))
$(eval $(call SetupAppletDemo,BarChart))
$(eval $(call SetupAppletDemo,Blink))
$(eval $(call SetupAppletDemo,CardTest))
$(eval $(call SetupAppletDemo,Clock))
$(eval $(call SetupAppletDemo,DitherTest))
$(eval $(call SetupAppletDemo,DrawTest))
$(eval $(call SetupAppletDemo,Fractal))
$(eval $(call SetupAppletDemo,GraphicsTest))
$(eval $(call SetupAppletDemo,NervousText))
$(eval $(call SetupAppletDemo,SimpleGraph))
$(eval $(call SetupAppletDemo,SortDemo))
$(eval $(call SetupAppletDemo,SpreadSheet))

ifndef OPENJDK
  $(eval $(call SetupAppletDemo,Animator,,closed/))
  $(eval $(call SetupAppletDemo,GraphLayout,true,closed/))
  $(eval $(call SetupAppletDemo,JumpingBox,,closed/))
  $(eval $(call SetupAppletDemo,TicTacToe,,closed/))
endif

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

PATTERNS_TO_COPY = .html .txt .properties .js .gif .jpg .theme .data .opt README .c .h .png .ttf .xyz .obj

define SetupDemo
  # Param 1 = Name of the demo
  # Param 2 = Subdirectory of the demo below the demo directory.
  # Param 3 = Additional javac flags.
  # Param 4 = The main class for the jar.
  # Param 5 = Additional source directory.
  # Param 6 = Extra dir below $(JDK_TOPDIR)/src (closed)
  # Param 7 = List of files to copy
  # Param 8 = Base name of jar file. Defaults to $1
  # Param 9 = Exclude list
  # Param 10 = Extra copy patterns
  # Param 11 = Extra manifest attribute
  # Param 12 = Suffix for compiler setup name

  # In some demos the source is found in a subdir called src.
  $1_MAIN_SRC := $$(wildcard $(JDK_TOPDIR)/src/$6share/demo/$2/$1/src)
  ifeq ($$($1_MAIN_SRC), )
    $1_MAIN_SRC := $(JDK_TOPDIR)/src/$6share/demo/$2/$1
  endif

  ifneq ($8, )
    $1_JARFILE := $8.jar
  else
    $1_JARFILE := $1.jar
  endif

  ifeq ($(findstring $1,Laffy SwingSet3), )
    $$(eval $$(call SetupJavaCompilation,BUILD_DEMO_$1, \
        SETUP := GENERATE_USINGJDKBYTECODE, \
        ADD_JAVAC_FLAGS := $3, \
        SRC := $$($1_MAIN_SRC) $5, \
        BIN := $(JDK_OUTPUTDIR)/democlasses/$2/$1, \
        COPY := $(PATTERNS_TO_COPY) $(10), \
        JAR := $(JDK_OUTPUTDIR)/demo/$2/$1/$$($1_JARFILE), \
        JARMAIN := $4, \
        MANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf, \
        EXTRA_MANIFEST_ATTR := $(11), \
        SRCZIP := $(JDK_OUTPUTDIR)/demo/$2/$1/src.zip, \
        EXCLUDE_FILES := $9, \
        DISABLE_SJAVAC := $(12)))

    BUILD_DEMOS += $$(BUILD_DEMO_$1) \
        $(JDK_OUTPUTDIR)/demo/$2/$1/$$($1_JARFILE) \
        $(JDK_OUTPUTDIR)/demo/$2/$1/src.zip
  endif

  # Copy files.
  $1_COPY_TARGETS := $$(patsubst $(JDK_TOPDIR)/src/$6share/demo/$2/$1/%, \
      $(JDK_OUTPUTDIR)/demo/$2/$1/%, \
      $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/$6share/demo/$2/$1/, $7)))
  ifneq ($7, )
    $(JDK_OUTPUTDIR)/demo/$2/$1/%: $(JDK_TOPDIR)/src/$6share/demo/$2/$1/%
	$$(call install-file)
	$(CHMOD) -f ug+w $$@

    BUILD_DEMOS += $$($1_COPY_TARGETS)
  endif

endef

$(eval $(call SetupDemo,CodePointIM,jfc,,CodePointIM,,,*.html))
$(JDK_OUTPUTDIR)/demo/jfc/CodePointIM/_the.services: \
    $(JDK_OUTPUTDIR)/demo/jfc/CodePointIM/CodePointIM.jar \
    $(JDK_TOPDIR)/src/share/demo/jfc/CodePointIM/java.awt.im.spi.InputMethodDescriptor
	(cd $(JDK_OUTPUTDIR)/demo/jfc/CodePointIM && \
	$(MKDIR) -p _the.tmp/META-INF/services && \
	$(CP) $(JDK_TOPDIR)/src/share/demo/jfc/CodePointIM/java.awt.im.spi.InputMethodDescriptor _the.tmp/META-INF/services && \
	cd _the.tmp && \
	$(JAR) uf $(JDK_OUTPUTDIR)/demo/jfc/CodePointIM/CodePointIM.jar META-INF/services/java.awt.im.spi.InputMethodDescriptor && \
	cd META-INF/services && \
	$(JAR) uf $(JDK_OUTPUTDIR)/demo/jfc/CodePointIM/CodePointIM.jar java.awt.im.spi.InputMethodDescriptor)
	$(RM) -r $(JDK_OUTPUTDIR)/demo/jfc/CodePointIM/_the.tmp
	$(TOUCH) $@

BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/jfc/CodePointIM/_the.services

$(eval $(call SetupDemo,MoleculeViewer,applets,,XYZChemModel,,,example*.html *.java))
$(eval $(call SetupDemo,WireFrame,applets,,ThreeD,,,example*.html *.java))
$(eval $(call SetupDemo,FileChooserDemo,jfc,,FileChooserDemo,,,README*))
$(eval $(call SetupDemo,Font2DTest,jfc,,Font2DTest,,,*.html *.txt))
$(eval $(call SetupDemo,Metalworks,jfc,,Metalworks,,,README*))
$(eval $(call SetupDemo,Notepad,jfc,,Notepad,,,README*))
$(eval $(call SetupDemo,SampleTree,jfc,,SampleTree,,,README*))
$(eval $(call SetupDemo,SwingApplet,jfc,,SwingApplet,,,README* *.html))
$(eval $(call SetupDemo,TableExample,jfc,,TableExample,,,README*))
$(eval $(call SetupDemo,TransparentRuler,jfc,,transparentruler.Ruler,,,README*))
$(eval $(call SetupDemo,jconsole-plugin,scripting,,,,,*.xml *.txt,,,,Main-Class: \n))
$(eval $(call SetupDemo,FullThreadDump,management,,FullThreadDump,,,README*))
$(eval $(call SetupDemo,JTop,management,,JTop,,,README*))
$(eval $(call SetupDemo,MemoryMonitor,management,,MemoryMonitor,,,README*))
$(eval $(call SetupDemo,VerboseGC,management,,VerboseGC,,,README*))
$(eval $(call SetupDemo,zipfs,nio,,,,,README* *.java,,,,Main-Class: \n))

ifndef OPENJDK
  $(eval $(call SetupDemo,Laffy,jfc,,,,closed/,*))
  $(eval $(call SetupDemo,SwingSet3,jfc,,,,closed/,*))

  $(eval $(call SetupDemo,Java2D,jfc,,java2d.Java2Demo,,closed/,*.html README*,Java2Demo))
  $(eval $(call SetupDemo,Stylepad,jfc,,Stylepad, \
      $(JDK_TOPDIR)/src/share/demo/jfc/Notepad,closed/,*.txt,,$(JDK_TOPDIR)/src/share/demo/jfc/Notepad/README.txt))
  $(eval $(call SetupDemo,SwingSet2,jfc,,SwingSet2,,closed/,README* *.html,,,.java COPYRIGHT, \
      SplashScreen-Image: resources/images/splash.png,true))

  BUILD_DEMOS += $(patsubst $(JDK_TOPDIR)/src/closed/share/demo/nbproject/%, \
      $(JDK_OUTPUTDIR)/demo/nbproject/%, \
      $(call CacheFind, $(JDK_TOPDIR)/src/closed/share/demo/nbproject))

  $(JDK_OUTPUTDIR)/demo/nbproject/%: $(JDK_TOPDIR)/src/closed/share/demo/nbproject/%
	$(call install-file)
	$(CHMOD) -f ug+w $@
endif

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

# In the old makefiles, j2dbench was not compiled.
#$(eval $(call SetupDemo,J2DBench, java2d, /src, , j2dbench/J2DBench))

# JVMTI demos are a bit strange and share some files, but be careful the
# shared files are just the *.c and *.h files, not the README or sample
# makefiles. So we always exclude the README.txt and sample.makefile.txt
# from the extra sources.
define SetupJVMTIDemo
  # Param 1 = Name of the demo
  # Param 2 = add these directories to the includes, default is agent_util
  # Param 3 = extra CFLAGS
  # Param 4 = C or C++ (defaults to C)
  # Param 5 = libs for posix
  # Param 6 = libs for windows
  # Param 7 = libs for solaris
  # Param 8 = libs for linux
  # Param 9 = extra directories with required sources
  BUILD_DEMO_JVMTI_$1_EXTRA_SRC := \
      $$(wildcard $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/demo/jvmti/$1) \
      $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)) \
      $9
  BUILD_DEMO_JVMTI_$1_EXTRA_SRC_EXCLUDE := \
      $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)/README.txt) \
      $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)/sample.makefile.txt)
  BUILD_DEMO_JVMTI_$1_EXTRA_INC := $$(addprefix -I, $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC))
  BUILD_DEMO_JVMTI_$1_LANG := C
  ifneq (, $4)
    BUILD_DEMO_JVMTI_$1_LANG := $4
  endif
  ifeq (C++, $4)
    $1_EXTRA_CXX := $(LDFLAGS_CXX_JDK) $(LIBCXX)
  endif

  $1_CXXFLAGS := $(CXXFLAGS_JDKLIB) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 \
      $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3 \
      $(CXXFLAGS_DEBUG_SYMBOLS)
  ifeq ($1-$(OPENJDK_TARGET_CPU_ARCH), waiters-sparc)
    $1_FILTER := -xregs=no%appl
    $1_CXXFLAGS := $$(filter-out $$($1_FILTER), $$($1_CXXFLAGS))
  endif

  # Workaround for CFLAGS_JDKLIB containing ',' on solaris. If this is added as 'CFLAGS' to the
  # eval call below, the comma gets expanded too early.
  BUILD_DEMO_JVMTI_$1_CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_DEBUG_SYMBOLS) \
      -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3

  # Remove the -incremental:no setting to get .ilk-files like in the old build.
  $$(eval $$(call SetupNativeCompilation,BUILD_DEMO_JVMTI_$1, \
      SRC := $(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC), \
      LANG := $$(BUILD_DEMO_JVMTI_$1_LANG), \
      OPTIMIZATION := LOW, \
      CXXFLAGS := $$($1_CXXFLAGS), \
      LDFLAGS := $(filter-out -incremental:no -opt:ref, $(LDFLAGS_JDKLIB)), \
      LDFLAGS_macosx := $(call SET_EXECUTABLE_ORIGIN), \
      LDFLAGS_SUFFIX := $$($1_EXTRA_CXX), \
      LDFLAGS_SUFFIX_posix := $5, \
      LDFLAGS_SUFFIX_windows := $6, \
      LDFLAGS_SUFFIX_solaris := $7 -lc, \
      LDFLAGS_SUFFIX_linux := $8, \
      VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
      RC_FLAGS := $$(RC_FLAGS) \
          -D "JDK_FNAME=$1.dll" \
          -D "JDK_INTERNAL_NAME=$1" \
          -D "JDK_FTYPE=0x2L", \
      OBJECT_DIR := $(JDK_OUTPUTDIR)/demoobjs/jvmti/$1, \
      OUTPUT_DIR := $(JDK_OUTPUTDIR)/demo/jvmti/$1/lib, \
      LIBRARY := $1))

  $$(eval $$(call SetupZipArchive,BUILD_DEMO_JVMTI_SRC_$1, \
      SRC := $(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC), \
      EXCLUDE_FILES := $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC_EXCLUDE), \
      ZIP := $(JDK_OUTPUTDIR)/demo/jvmti/$1/src.zip))

  $(JDK_OUTPUTDIR)/demo/jvmti/$1/README.txt: $(JDK_TOPDIR)/src/share/demo/jvmti/$1/README.txt
	$$(call install-file)
	$(CHMOD) -f ug+w $$@

  ifneq (, $$(wildcard $(JDK_TOPDIR)/src/share/demo/jvmti/$1/*.java))
    $$(eval $$(call SetupJavaCompilation,BUILD_DEMO_JVMTI_$1_JAVA, \
        SETUP := GENERATE_USINGJDKBYTECODE, \
        SRC := $(JDK_TOPDIR)/src/share/demo/jvmti/$1, \
        BIN := $(JDK_OUTPUTDIR)/democlasses/jvmti/$1, \
        COPY := $(PATTERNS_TO_COPY), \
        JAR := $(JDK_OUTPUTDIR)/demo/jvmti/$1/$1.jar, \
        EXTRA_MANIFEST_ATTR := Main-Class: \n, \
        MANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf))

    BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/jvmti/$1/$1.jar
  endif

  BUILD_DEMOS += $$(BUILD_DEMO_JVMTI_$1) \
      $(JDK_OUTPUTDIR)/demo/jvmti/$1/src.zip \
      $(JDK_OUTPUTDIR)/demo/jvmti/$1/README.txt

  ifeq ($(OPENJDK_TARGET_OS), windows)
    # These files normally end up in OBJECT_DIR but for demos they
    # are supposed to be included in the distro.
    $(JDK_OUTPUTDIR)/demo/jvmti/$1/lib/$1.lib: $$(BUILD_DEMO_JVMTI_$1)
	$(CP) $(JDK_OUTPUTDIR)/demoobjs/jvmti/$1/$1.lib $$@

    $(JDK_OUTPUTDIR)/demo/jvmti/$1/lib/$1.exp: $$(BUILD_DEMO_JVMTI_$1)
	$(CP) $(JDK_OUTPUTDIR)/demoobjs/jvmti/$1/$1.exp $$@

    BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/jvmti/$1/lib/$1.lib \
        $(JDK_OUTPUTDIR)/demo/jvmti/$1/lib/$1.exp
  endif
endef

$(eval $(call SetupJVMTIDemo,compiledMethodLoad, agent_util))
$(eval $(call SetupJVMTIDemo,gctest, agent_util))
$(eval $(call SetupJVMTIDemo,heapTracker, agent_util java_crw_demo))
$(eval $(call SetupJVMTIDemo,heapViewer, agent_util))

# On AIX, hprof requires 'dladdr' from src/aix/porting/porting_aix.cpp
BUILD_LIBHPROF_AIX_EXTRA_SRC :=
BUILD_LIBHPROF_AIX_EXTRA_CFLAGS :=
ifeq ($(OPENJDK_TARGET_OS), aix)
  BUILD_LIBHPROF_AIX_EXTRA_SRC += $(JDK_TOPDIR)/src/aix/porting
  BUILD_LIBHPROF_AIX_EXTRA_CFLAGS += -I$(JDK_TOPDIR)/src/aix/porting
endif

$(eval $(call SetupJVMTIDemo,hprof, java_crw_demo, \
    -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \
    $(BUILD_LIBHPROF_AIX_EXTRA_CFLAGS), C, \
    -ldl, ws2_32.lib winmm.lib, -lsocket -lnsl, -lpthread, $(BUILD_LIBHPROF_AIX_EXTRA_SRC)))

$(eval $(call SetupJVMTIDemo,minst, agent_util java_crw_demo))
$(eval $(call SetupJVMTIDemo,mtrace, agent_util java_crw_demo))
$(eval $(call SetupJVMTIDemo,waiters, agent_util, , C++))
$(eval $(call SetupJVMTIDemo,versionCheck, agent_util))

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

# The jpda demo (com/sun/tools/example) is oddly enough stored in src/share/classes.
# At least, we do not need to compile the jpda demo, just jar/zip up the sources.
JPDA_SOURCES := $(call CacheFind, $(JDK_TOPDIR)/src/share/classes/com/sun/tools/example)
# The number of files are few enough so that we can use echo safely below to list them.
JPDA_FILES := $(subst $(JDK_TOPDIR)/src/share/classes/,,$(JPDA_SOURCES))

$(JDK_OUTPUTDIR)/demo/jpda/src.zip: $(JPDA_SOURCES)
	$(MKDIR) -p $(@D)
	(cd $(JDK_TOPDIR)/src/share/classes && $(ZIP) -qru $@ com -i "com/sun/tools/example/*")

$(JDK_OUTPUTDIR)/demo/jpda/examples.jar: $(JPDA_SOURCES)
	$(MKDIR) -p $(@D)
	$(RM) $(@D)/_the.sources
	$(call ListPathsSafely,JPDA_FILES,\n, >> $(@D)/_the.sources)
	$(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \
	    -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" $(JDK_TOPDIR)/make/tools/manifest.mf > $(@D)/_the.manifest
	$(ECHO) "Main-Class: " >> $(@D)/_the.manifest
	(cd $(JDK_TOPDIR)/src/share/classes && $(JAR) cfm $@ $(@D)/_the.manifest @$(@D)/_the.sources)
	(cd $(JDK_TOPDIR)/src/share/classes/com/sun/tools/example && $(JAR) uf $@ README)

$(JDK_OUTPUTDIR)/demo/jpda/com/sun/tools/example/README: $(JDK_TOPDIR)/src/share/classes/com/sun/tools/example/README
	$(call install-file)
	$(CHMOD) -f ug+w $@

BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/jpda/src.zip $(JDK_OUTPUTDIR)/demo/jpda/examples.jar \
    $(JDK_OUTPUTDIR)/demo/jpda/com/sun/tools/example/README

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

$(JDK_OUTPUTDIR)/demo/management/index.html: $(JDK_TOPDIR)/src/share/demo/management/index.html
	$(call install-file)
	$(CHMOD) -f ug+w $@

$(JDK_OUTPUTDIR)/demo/jvmti/index.html: $(JDK_TOPDIR)/src/share/demo/jvmti/index.html
	$(call install-file)
	$(CHMOD) -f ug+w $@

BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/management/index.html \
    $(JDK_OUTPUTDIR)/demo/jvmti/index.html

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

# The netbeans project files are copied into the demo directory.
BUILD_DEMOS += $(patsubst $(JDK_TOPDIR)/src/share/demo/nbproject/%, \
    $(JDK_OUTPUTDIR)/demo/nbproject/%, \
    $(call CacheFind, $(JDK_TOPDIR)/src/share/demo/nbproject))

$(JDK_OUTPUTDIR)/demo/nbproject/%: $(JDK_TOPDIR)/src/share/demo/nbproject/%
	$(call install-file)
	$(CHMOD) -f ug+w $@

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

$(JDK_OUTPUTDIR)/demo/README: $(JDK_TOPDIR)/src/share/demo/README
	$(call install-file)

BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/README

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

ifeq ($(OPENJDK_TARGET_OS), solaris)

  $(JDK_OUTPUTDIR)/democlasses/jni/Poller/%: $(JDK_TOPDIR)/src/solaris/demo/jni/Poller/%
	$(call install-file)
	$(CHMOD) -f ug+w $@

  $(JDK_OUTPUTDIR)/demo/jni/Poller/README.txt: $(JDK_TOPDIR)/src/solaris/demo/jni/Poller/README.txt
	$(call install-file)
	$(CHMOD) -f ug+w $@

  $(JDK_OUTPUTDIR)/demo/jni/Poller/Poller.jar: \
      $(JDK_OUTPUTDIR)/democlasses/jni/Poller/README.txt $(JDK_OUTPUTDIR)/democlasses/jni/Poller/Poller.c

  $(eval $(call SetupJavaCompilation,BUILD_DEMO_POLLER_JAR, \
      SETUP := GENERATE_USINGJDKBYTECODE, \
      SRC := $(JDK_TOPDIR)/src/solaris/demo/jni/Poller, \
      BIN := $(JDK_OUTPUTDIR)/democlasses/jni/Poller, \
      HEADERS := $(JDK_OUTPUTDIR)/democlasses/jni/Poller, \
      JAR := $(JDK_OUTPUTDIR)/demo/jni/Poller/Poller.jar, \
      MANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf, \
      SRCZIP := $(JDK_OUTPUTDIR)/demo/jni/Poller/src.zip, \
      COPY := README.txt Poller.c, \
      JARMAIN := Client))



  BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/jni/Poller/Poller.jar $(JDK_OUTPUTDIR)/demo/jni/Poller/src.zip \
      $(JDK_OUTPUTDIR)/demo/jni/Poller/README.txt

  $(eval $(call SetupNativeCompilation,BUILD_LIBPOLLER, \
      SRC := $(JDK_TOPDIR)/src/solaris/demo/jni/Poller, \
      LANG := C, \
      OPTIMIZATION := LOW, \
      CFLAGS := $(CFLAGS_JDKLIB) $(SHARED_LIBRARY_FLAGS) \
          -I$(JDK_OUTPUTDIR)/democlasses/jni/Poller, \
      LDFLAGS := $(LDFLAGS_JDKLIB), \
      LDFLAGS_SUFFIX_solaris := -lc, \
      OBJECT_DIR := $(JDK_OUTPUTDIR)/demoobjs/jni/Poller, \
      OUTPUT_DIR := $(JDK_OUTPUTDIR)/demoobjs, \
      LIBRARY := Poller))

  #
  # We can only compile native code after jar has been build (since we depend on generated .h files)
  #
  $(JDK_OUTPUTDIR)/demoobjs/jni/Poller/Poller.o: $(JDK_OUTPUTDIR)/demo/jni/Poller/Poller.jar

  $(JDK_OUTPUTDIR)/demo/jni/Poller/lib/$(LIBRARY_PREFIX)Poller$(SHARED_LIBRARY_SUFFIX): \
      $(JDK_OUTPUTDIR)/demoobjs/$(LIBRARY_PREFIX)Poller$(SHARED_LIBRARY_SUFFIX)
	$(call install-file)

  BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/jni/Poller/lib/$(LIBRARY_PREFIX)Poller$(SHARED_LIBRARY_SUFFIX)

endif

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

ifndef OPENJDK
  DB_DEMO_ZIPFILE := $(wildcard $(JDK_TOPDIR)/src/closed/share/db/*.zip)

  $(JDK_OUTPUTDIR)/demo/_the.db.unzipped: $(DB_DEMO_ZIPFILE)
	$(MKDIR) -p $(@D)
	$(RM) -r $(JDK_OUTPUTDIR)/demo/db $(JDK_OUTPUTDIR)/demo/demo
	$(CD) $(JDK_OUTPUTDIR)/demo && $(UNZIP) -q -o $<
	$(MV) $(JDK_OUTPUTDIR)/demo/db-derby-*-bin/demo $(JDK_OUTPUTDIR)/demo/db
	$(CD) $(JDK_OUTPUTDIR)/demo && $(RM) -r db-derby-*-bin
	$(TOUCH) $@

  # Copy this after the unzip above to avoid race with directory creation and mv command.
  $(JDK_OUTPUTDIR)/demo/db/README-JDK-DEMOS.html: \
      $(JDK_TOPDIR)/src/closed/share/db/README-JDK-DEMOS.html \
      | $(JDK_OUTPUTDIR)/demo/_the.db.unzipped
	$(MKDIR) -p $(@D)
	$(CAT) $< | $(SED) "s/XXXX/$(shell cat $(JDK_TOPDIR)/src/closed/share/db/COPYRIGHTYEAR)/" > $@

  BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/_the.db.unzipped $(JDK_OUTPUTDIR)/demo/db/README-JDK-DEMOS.html
endif

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

all: $(BUILD_DEMOS)

.PHONY: all
