1 #
   2 # Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 ################################################################################
  27 # Build demos for the JDK into $(SUPPORT_OUTPUTDIR)/demos/image.
  28 ################################################################################
  29 
  30 default: all
  31 
  32 include $(SPEC)
  33 include MakeBase.gmk
  34 include JavaCompilation.gmk
  35 include NativeCompilation.gmk
  36 include SetupJavaCompilers.gmk
  37 include TextFileProcessing.gmk
  38 include ZipArchive.gmk
  39 
  40 # Prepare the find cache.
  41 $(eval $(call FillCacheFind, $(wildcard $(JDK_TOPDIR)/src/demo \
  42     $(JDK_TOPDIR)/src/*/demo)))
  43 
  44 # Append demo goals to this variable.
  45 TARGETS =
  46 
  47 # The demo structure and contents should really be cleaned up.
  48 # Now every other demo has its own quirks where to put the
  49 # READMEs and other files.
  50 
  51 DEMO_SHARE_SRC := $(JDK_TOPDIR)/src/demo/share
  52 GLOBAL_VERSION_INFO_RESOURCE := $(JDK_TOPDIR)/src/java.base/windows/native/common/version.rc
  53 
  54 DEMO_MANIFEST := $(SUPPORT_OUTPUTDIR)/demos/java-main-manifest.mf
  55 
  56 # This rule will be depended on due to the MANIFEST line in SetupBuildDemo
  57 # and SetupBuildJvmtiDemo.
  58 $(eval $(call SetupTextFileProcessing, BUILD_JAVA_MANIFEST, \
  59   SOURCE_FILES := $(JDK_TOPDIR)/make/data/mainmanifest/manifest.mf, \
  60   OUTPUT_FILE := $(DEMO_MANIFEST), \
  61   REPLACEMENTS := \
  62       @@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION) ; \
  63       @@VERSION_SHORT@@ => $(VERSION_SHORT) ; \
  64       @@COMPANY_NAME@@ => $(COMPANY_NAME) , \
  65 ))
  66 
  67 ################################################################################
  68 # Build applet demos.
  69 
  70 # Setup make rules for building a demo applet.
  71 #
  72 # Parameter 1 is the name of the rule. This name is used as variable prefix,
  73 # and the targets generated are listed in a variable by that name. It is also
  74 # used to locate the name of the applet subdir, and to determine the name
  75 # of the output directory.
  76 #
  77 # Remaining parameters are named arguments. These include:
  78 # SRC_DIR   Alternative source directory to use for the demos.
  79 # DISABLE_SJAVAC   Passed to SetupJavaCompilation
  80 
  81 SetupBuildAppletDemo = $(NamedParamsMacroTemplate)
  82 define SetupBuildAppletDemoBody
  83   ifeq ($$($1_SRC_DIR), )
  84     $1_SRC_DIR := $(DEMO_SHARE_SRC)/applets
  85   endif
  86 
  87   $$(eval $$(call SetupJavaCompilation, BUILD_DEMO_APPLET_$1, \
  88       SETUP := GENERATE_USINGJDKBYTECODE, \
  89       SRC := $$($1_SRC_DIR)/$1, \
  90       BIN := $(SUPPORT_OUTPUTDIR)/demos/image/applets/$1, \
  91       COPY := .html .java .xyz .obj .au .gif, \
  92       DISABLE_SJAVAC := $$($1_DISABLE_SJAVAC), \
  93   ))
  94 
  95   $1 := $$(BUILD_DEMO_APPLET_$1)
  96 
  97   TARGETS += $$($1)
  98 endef
  99 
 100 ifneq ($(OPENJDK_TARGET_OS), solaris)
 101   $(eval $(call SetupBuildAppletDemo, ArcTest))
 102   $(eval $(call SetupBuildAppletDemo, BarChart))
 103   $(eval $(call SetupBuildAppletDemo, Blink))
 104   $(eval $(call SetupBuildAppletDemo, CardTest))
 105   $(eval $(call SetupBuildAppletDemo, Clock))
 106   $(eval $(call SetupBuildAppletDemo, DitherTest))
 107   $(eval $(call SetupBuildAppletDemo, DrawTest))
 108   $(eval $(call SetupBuildAppletDemo, Fractal))
 109   $(eval $(call SetupBuildAppletDemo, GraphicsTest))
 110   $(eval $(call SetupBuildAppletDemo, NervousText))
 111   $(eval $(call SetupBuildAppletDemo, SimpleGraph))
 112   $(eval $(call SetupBuildAppletDemo, SortDemo))
 113   $(eval $(call SetupBuildAppletDemo, SpreadSheet))
 114 endif
 115 
 116 ################################################################################
 117 # Build normal demos.
 118 
 119 COPY_TO_JAR := .html .txt .properties .js .gif .jpg .theme .data .opt .c .h \
 120     .png .ttf .xyz .obj README COPYRIGHT
 121 
 122 COPY_TO_IMAGE := *.html *.txt *.png *.xml README*
 123 
 124 # Setup make rules for building a demo.
 125 #
 126 # Parameter 1 is the name of the rule. This name is used as variable prefix,
 127 # and the targets generated are listed in a variable by that name.
 128 #
 129 # Remaining parameters are named arguments. These include:
 130 # DEMO_SUBDIR   The name of the subdir of the demo, below the demo top dir.
 131 # EXTRA_SRC_DIR   Additional source directory.
 132 # SRC_SUB_DIR   Optional subdir to locate source code in
 133 # SRC_DIR   Alternative source directory to use for the demos.
 134 # EXCLUDE_FILES   Exclude file list
 135 # JAR_NAME   Base name of jar file. Defaults to $1.
 136 # MAIN_CLASS   The main class for the jar. Defaults to $1.
 137 # EXTRA_COPY_TO_JAR   Additional files to copy to jar (as patterns)
 138 # EXTRA_COPY_TO_IMAGE   Additional files to copy to images (as wildcards)
 139 # EXTRA_MANIFEST_ATTR   Extra manifest attribute
 140 # SKIP_COMPILATION   Skip Java compilation iff true
 141 # DISABLE_SJAVAC   Passed to SetupJavaCompilation
 142 SetupBuildDemo = $(NamedParamsMacroTemplate)
 143 define SetupBuildDemoBody
 144   ifeq ($$($1_SRC_DIR), )
 145     $1_SRC_DIR := $(DEMO_SHARE_SRC)
 146   endif
 147 
 148   $1_SRC_BASE := $$($1_SRC_DIR)/$$($1_DEMO_SUBDIR)/$1
 149 
 150   # In some demos the source is found in a subdir
 151   ifneq ($$($1_SRC_SUB_DIR), )
 152     $1_MAIN_SRC := $$($1_SRC_BASE)/$$($1_SRC_SUB_DIR)
 153   else
 154     # for allmost all
 155     $1_MAIN_SRC := $$($1_SRC_BASE)
 156   endif
 157 
 158   # Default is to use demo name as jar file name.
 159   ifeq ($$($1_JAR_NAME), )
 160     $1_JAR_NAME := $1
 161   endif
 162 
 163   # Default is to use demo name as jar main class.
 164   ifeq ($$($1_MAIN_CLASS), )
 165     $1_MAIN_CLASS := $1
 166   else ifeq ($$($1_MAIN_CLASS), NONE)
 167     $1_MAIN_CLASS :=
 168     $1_EXTRA_MANIFEST_ATTR += Main-Class: \n
 169   endif
 170 
 171   ifneq ($$($1_SKIP_COMPILATION), true)
 172     $$(eval $$(call SetupJavaCompilation, BUILD_DEMO_$1, \
 173         SETUP := GENERATE_USINGJDKBYTECODE, \
 174         SRC := $$($1_MAIN_SRC) $$($1_EXTRA_SRC_DIR), \
 175         BIN := $(SUPPORT_OUTPUTDIR)/demos/classes/$$($1_DEMO_SUBDIR)/$1, \
 176         COPY := $(COPY_TO_JAR) $$($1_EXTRA_COPY_TO_JAR), \
 177         JAR := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1/$$($1_JAR_NAME).jar, \
 178         JARMAIN := $$($1_MAIN_CLASS), \
 179         MANIFEST := $(DEMO_MANIFEST), \
 180         EXTRA_MANIFEST_ATTR := $$($1_EXTRA_MANIFEST_ATTR), \
 181         SRCZIP := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1/src.zip, \
 182         EXCLUDE_FILES := $$($1_EXCLUDE_FILES), \
 183         DISABLE_SJAVAC := $$($1_DISABLE_SJAVAC), \
 184     ))
 185 
 186     $1 += $$(BUILD_DEMO_$1)
 187   endif
 188 
 189   # Copy files. Sort is needed to remove duplicates.
 190   $1_COPY_FILES := $$(sort $$(wildcard $$(addprefix $$($1_SRC_BASE)/, \
 191       $(COPY_TO_IMAGE) $$($1_EXTRA_COPY_TO_IMAGE))))
 192   $$(eval $$(call SetupCopyFiles, COPY_DEMO_$1, \
 193       SRC :=  $$($1_SRC_BASE), \
 194       DEST := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1, \
 195       FILES := $$($1_COPY_FILES), \
 196   ))
 197 
 198   $1 += $$(COPY_DEMO_$1)
 199 
 200   TARGETS += $$($1)
 201 endef
 202 
 203 CODEPOINT_SERVICE := java.awt.im.spi.InputMethodDescriptor
 204 CODEPOINT_METAINF_SERVICE_FILE := \
 205     $(SUPPORT_OUTPUTDIR)/demos/classes/jfc/CodePointIM/META-INF/services/$(CODEPOINT_SERVICE)
 206 
 207 $(eval $(call SetupBuildDemo, CodePointIM, \
 208     DEMO_SUBDIR := jfc, \
 209     EXTRA_COPY_TO_JAR := $(CODEPOINT_SERVICE), \
 210 ))
 211 
 212 # We also need to copy the CODEPOINT_SERVICE file to the META-INF/services
 213 # location, and make sure the jar depends on that file to get it included.
 214 $(CODEPOINT_METAINF_SERVICE_FILE): $(DEMO_SHARE_SRC)/jfc/CodePointIM/$(CODEPOINT_SERVICE)
 215         $(call install-file)
 216 
 217 $(BUILD_DEMO_CodePointIM_JAR): $(CODEPOINT_METAINF_SERVICE_FILE)
 218 
 219 ifneq ($(OPENJDK_TARGET_OS), solaris)
 220   $(eval $(call SetupBuildDemo, MoleculeViewer, \
 221       DEMO_SUBDIR := applets, \
 222       MAIN_CLASS := XYZChemModel, \
 223       EXTRA_COPY_TO_IMAGE := *.java, \
 224   ))
 225 
 226   $(eval $(call SetupBuildDemo, WireFrame, \
 227       DEMO_SUBDIR := applets, \
 228       MAIN_CLASS := ThreeD, \
 229       EXTRA_COPY_TO_IMAGE := *.java, \
 230   ))
 231 
 232   $(eval $(call SetupBuildDemo, SwingApplet, \
 233       DEMO_SUBDIR := jfc, \
 234   ))
 235 endif
 236 
 237 $(eval $(call SetupBuildDemo, FileChooserDemo, \
 238     DEMO_SUBDIR := jfc, \
 239 ))
 240 
 241 $(eval $(call SetupBuildDemo, Font2DTest, \
 242     DEMO_SUBDIR := jfc, \
 243 ))
 244 
 245 $(eval $(call SetupBuildDemo, Metalworks, \
 246     DEMO_SUBDIR := jfc, \
 247 ))
 248 
 249 $(eval $(call SetupBuildDemo, Notepad, \
 250     DEMO_SUBDIR := jfc, \
 251 ))
 252 
 253 $(eval $(call SetupBuildDemo, SampleTree, \
 254     DEMO_SUBDIR := jfc, \
 255 ))
 256 
 257 $(eval $(call SetupBuildDemo, TableExample, \
 258     DEMO_SUBDIR := jfc, \
 259 ))
 260 
 261 $(eval $(call SetupBuildDemo, TransparentRuler, \
 262     DEMO_SUBDIR := jfc, \
 263     MAIN_CLASS := transparentruler.Ruler, \
 264 ))
 265 
 266 $(eval $(call SetupBuildDemo, jconsole-plugin, \
 267     DEMO_SUBDIR := scripting, \
 268     SRC_SUB_DIR := src, \
 269     MAIN_CLASS := NONE, \
 270 ))
 271 
 272 $(eval $(call SetupBuildDemo, FullThreadDump, \
 273     DEMO_SUBDIR := management, \
 274 ))
 275 
 276 $(eval $(call SetupBuildDemo, JTop, \
 277     DEMO_SUBDIR := management, \
 278 ))
 279 
 280 $(eval $(call SetupBuildDemo, MemoryMonitor, \
 281     DEMO_SUBDIR := management, \
 282 ))
 283 
 284 $(eval $(call SetupBuildDemo, VerboseGC, \
 285     DEMO_SUBDIR := management, \
 286 ))
 287 
 288 ################################################################################
 289 # Build JVMTI demos.
 290 
 291 # Setup make rules for building a JVMTI demo.
 292 #
 293 # Parameter 1 is the name of the rule. This name is used as variable prefix,
 294 # and the targets generated are listed in a variable by that name.
 295 #
 296 # Remaining parameters are named arguments. These include:
 297 # EXTRA_SRC_SUBDIR   Also include these subdirectories
 298 # TOOLCHAIN   Optionally specify toolchain to use
 299 SetupBuildJvmtiDemo = $(NamedParamsMacroTemplate)
 300 define SetupBuildJvmtiDemoBody
 301   $1_SRC := \
 302       $(DEMO_SHARE_SRC)/jvmti/$1 \
 303       $$(wildcard $$(addprefix $(DEMO_SHARE_SRC)/jvmti/, \
 304           agent_util $$($1_EXTRA_SRC_SUBDIR)))
 305 
 306   ### Build the native lib
 307   $1_CFLAGS_INCLUDE := $$(addprefix -I, $$($1_SRC))
 308 
 309   $1_CXXFLAGS := $$($1_CFLAGS_INCLUDE) $(CXXFLAGS_JDKLIB) $(CXXFLAGS_DEBUG_SYMBOLS)
 310 
 311   ifeq ($$($1_TOOLCHAIN), TOOLCHAIN_LINK_CXX)
 312     # For C++, we also need some special treatment.
 313     $1_LDFLAGS := $$(LDFLAGS_CXX_JDK)
 314     $1_LIBS := $(LIBCXX)
 315 
 316     ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
 317       $1_CXXFLAGS := $$(filter-out -xregs=no%appl, $$($1_CXXFLAGS))
 318     endif
 319   endif
 320 
 321   # Remove the -incremental:no setting to get .ilk-files like in the old build.
 322   $$(eval $$(call SetupNativeCompilation, BUILD_DEMO_JVMTI_NATIVE_$1, \
 323       SRC := $$($1_SRC), \
 324       TOOLCHAIN := $$($1_TOOLCHAIN), \
 325       OPTIMIZATION := LOW, \
 326       CFLAGS := $$($1_CFLAGS_INCLUDE) $$(CFLAGS_JDKLIB) $$(CFLAGS_DEBUG_SYMBOLS), \
 327       CXXFLAGS := $$($1_CXXFLAGS), \
 328       LDFLAGS := $(filter-out -incremental:no -opt:ref, $$(LDFLAGS_JDKLIB)) \
 329           $$($1_LDFLAGS), \
 330       LDFLAGS_macosx := $$(call SET_EXECUTABLE_ORIGIN), \
 331       LIBS := $$($1_LIBS), \
 332       LIBS_solaris := -lc, \
 333       VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \
 334       RC_FLAGS := $$(RC_FLAGS) \
 335           -D "JDK_FNAME=$1.dll" \
 336           -D "JDK_INTERNAL_NAME=$1" \
 337           -D "JDK_FTYPE=0x2L", \
 338       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/demos/native/jvmti/$1, \
 339       OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/demos/image/jvmti/$1/lib, \
 340       LIBRARY := $1, \
 341   ))
 342 
 343   $1 += $$(BUILD_DEMO_JVMTI_NATIVE_$1)
 344 
 345   ### Build the jar, if we have java sources
 346   ifneq ($$(wildcard $(DEMO_SHARE_SRC)/jvmti/$1/*.java), )
 347     $$(eval $$(call SetupJavaCompilation, BUILD_DEMO_JVMTI_JAVA_$1, \
 348         SETUP := GENERATE_USINGJDKBYTECODE, \
 349         SRC := $(DEMO_SHARE_SRC)/jvmti/$1, \
 350         BIN := $(SUPPORT_OUTPUTDIR)/demos/classes/jvmti/$1, \
 351         COPY := $(COPY_TO_JAR), \
 352         JAR := $(SUPPORT_OUTPUTDIR)/demos/image/jvmti/$1/$1.jar, \
 353         EXTRA_MANIFEST_ATTR := Main-Class: \n, \
 354         MANIFEST := $(DEMO_MANIFEST), \
 355     ))
 356 
 357     $1 += $$(BUILD_DEMO_JVMTI_JAVA_$1_JAR)
 358   endif
 359 
 360   ### Build the source zip
 361   $1_EXCLUDE_FILES := \
 362       $$(wildcard $$(patsubst %, $(DEMO_SHARE_SRC)/jvmti/%/README.txt, \
 363           agent_util $$($1_EXTRA_SRC_SUBDIR))) \
 364       $$(wildcard $$(patsubst %, $(DEMO_SHARE_SRC)/jvmti/%/sample.makefile.txt, \
 365           agent_util $$($1_EXTRA_SRC_SUBDIR)))
 366 
 367   $$(eval $$(call SetupZipArchive, BUILD_DEMO_JVMTI_SRC_$1, \
 368       SRC := $$($1_SRC), \
 369       EXCLUDE_FILES := $$($1_EXCLUDE_FILES), \
 370       ZIP := $(SUPPORT_OUTPUTDIR)/demos/image/jvmti/$1/src.zip, \
 371   ))
 372 
 373   $1 += $$(BUILD_DEMO_JVMTI_SRC_$1)
 374 
 375   # Copy files to image
 376   $(SUPPORT_OUTPUTDIR)/demos/image/jvmti/$1/README.txt: $(DEMO_SHARE_SRC)/jvmti/$1/README.txt
 377         $$(call install-file)
 378         $(CHMOD) -f ug+w $$@
 379 
 380   $1 += $(SUPPORT_OUTPUTDIR)/demos/image/jvmti/$1/README.txt
 381 
 382   ifeq ($(OPENJDK_TARGET_OS), windows)
 383     # These lib and exp files normally end up in OBJECT_DIR but for demos they
 384     # are supposed to be included in the distro. Since they are created as
 385     # a side-effect of the library compilation, make does not know about them.
 386     $1_SUPPORT_OUTPUTDIR := $(SUPPORT_OUTPUTDIR)/demos/native/jvmti/$1
 387     $1_IMAGE_OUTPUTDIR := $(SUPPORT_OUTPUTDIR)/demos/image/jvmti/$1/lib
 388 
 389     $$($1_SUPPORT_OUTPUTDIR)/$1.lib: $$(BUILD_DEMO_JVMTI_NATIVE_$1)
 390 
 391     $$($1_SUPPORT_OUTPUTDIR)/$1.exp: $$(BUILD_DEMO_JVMTI_NATIVE_$1)
 392 
 393     $$($1_IMAGE_OUTPUTDIR)/$1.lib: $$($1_SUPPORT_OUTPUTDIR)/$1.lib
 394         $$(call install-file)
 395 
 396     $$($1_IMAGE_OUTPUTDIR)/$1.exp: $$($1_SUPPORT_OUTPUTDIR)/$1.exp
 397         $$(call install-file)
 398 
 399     $1 += $$($1_IMAGE_OUTPUTDIR)/$1.lib $$($1_IMAGE_OUTPUTDIR)/$1.exp
 400   endif
 401 
 402   TARGETS += $$($1)
 403 endef
 404 
 405 $(eval $(call SetupBuildJvmtiDemo, compiledMethodLoad))
 406 $(eval $(call SetupBuildJvmtiDemo, gctest))
 407 $(eval $(call SetupBuildJvmtiDemo, heapViewer))
 408 $(eval $(call SetupBuildJvmtiDemo, versionCheck))
 409 
 410 $(eval $(call SetupBuildJvmtiDemo, heapTracker, \
 411     EXTRA_SRC_SUBDIR := java_crw_demo, \
 412 ))
 413 
 414 $(eval $(call SetupBuildJvmtiDemo, minst, \
 415     EXTRA_SRC_SUBDIR := java_crw_demo, \
 416 ))
 417 
 418 $(eval $(call SetupBuildJvmtiDemo, mtrace, \
 419     EXTRA_SRC_SUBDIR := java_crw_demo, \
 420 ))
 421 
 422 $(eval $(call SetupBuildJvmtiDemo, waiters, \
 423     TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
 424 ))
 425 
 426 ################################################################################
 427 # Build the Poller demo (on Solaris only).
 428 
 429 ifeq ($(OPENJDK_TARGET_OS), solaris)
 430   DEMO_SOLARIS_SRC := $(JDK_TOPDIR)/src/demo/solaris
 431 
 432   $(eval $(call SetupJavaCompilation, BUILD_DEMO_JAVA_Poller, \
 433       SETUP := GENERATE_USINGJDKBYTECODE, \
 434       SRC := $(DEMO_SOLARIS_SRC)/jni/Poller, \
 435       BIN := $(SUPPORT_OUTPUTDIR)/demos/classes/jni/Poller, \
 436       HEADERS := $(SUPPORT_OUTPUTDIR)/demos/classes/jni/Poller, \
 437       JAR := $(SUPPORT_OUTPUTDIR)/demos/image/jni/Poller/Poller.jar, \
 438       MANIFEST := $(SUPPORT_OUTPUTDIR)/demos/java-main-manifest.mf, \
 439       SRCZIP := $(SUPPORT_OUTPUTDIR)/demos/image/jni/Poller/src.zip, \
 440       COPY := README.txt Poller.c, \
 441       JARMAIN := Client, \
 442   ))
 443 
 444   TARGETS += $(BUILD_DEMO_JAVA_Poller)
 445 
 446   $(eval $(call SetupNativeCompilation, BUILD_DEMO_NATIVE_Poller, \
 447       SRC := $(DEMO_SOLARIS_SRC)/jni/Poller, \
 448       OPTIMIZATION := LOW, \
 449       CFLAGS := $(CFLAGS_JDKLIB) \
 450           -I$(SUPPORT_OUTPUTDIR)/demos/classes/jni/Poller, \
 451       LDFLAGS := $(LDFLAGS_JDKLIB), \
 452       LIBS_solaris := -lc, \
 453       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/demos/native/jni/Poller, \
 454       OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/demos/native, \
 455       LIBRARY := Poller, \
 456   ))
 457 
 458   TARGETS += $(BUILD_DEMO_NATIVE_Poller)
 459 
 460   # We can only compile native code after java has been compiled (since we
 461   # depend on generated .h files)
 462   $(SUPPORT_OUTPUTDIR)/demos/native/jni/Poller/Poller.o: \
 463       $(BUILD_DEMO_JAVA_Poller)
 464 
 465   # Copy to image
 466   $(SUPPORT_OUTPUTDIR)/demos/image/jni/Poller/README.txt: \
 467       $(DEMO_SOLARIS_SRC)/jni/Poller/README.txt
 468         $(call install-file)
 469         $(CHMOD) -f ug+w $@
 470 
 471   TARGETS += $(SUPPORT_OUTPUTDIR)/demos/image/jni/Poller/README.txt
 472 
 473   $(SUPPORT_OUTPUTDIR)/demos/image/jni/Poller/lib/libPoller.so: \
 474       $(SUPPORT_OUTPUTDIR)/demos/native/libPoller.so
 475         $(call install-file)
 476 
 477   TARGETS += $(SUPPORT_OUTPUTDIR)/demos/image/jni/Poller/lib/libPoller.so
 478 endif
 479 
 480 ################################################################################
 481 # Copy html and README files.
 482 
 483 $(SUPPORT_OUTPUTDIR)/demos/image/management/index.html: $(DEMO_SHARE_SRC)/management/index.html
 484         $(call install-file)
 485         $(CHMOD) -f ug+w $@
 486 
 487 $(SUPPORT_OUTPUTDIR)/demos/image/jvmti/index.html: $(DEMO_SHARE_SRC)/jvmti/index.html
 488         $(call install-file)
 489         $(CHMOD) -f ug+w $@
 490 
 491 $(SUPPORT_OUTPUTDIR)/demos/image/README: $(DEMO_SHARE_SRC)/README
 492         $(call install-file)
 493 
 494 TARGETS += $(SUPPORT_OUTPUTDIR)/demos/image/management/index.html \
 495     $(SUPPORT_OUTPUTDIR)/demos/image/jvmti/index.html \
 496     $(SUPPORT_OUTPUTDIR)/demos/image/README
 497 
 498 ################################################################################
 499 # Copy netbeans project files.
 500 
 501 $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%: $(DEMO_SHARE_SRC)/nbproject/%
 502         $(call install-file)
 503         $(CHMOD) -f ug+w $@
 504 
 505 ifeq ($(OPENJDK_TARGET_OS), solaris)
 506   TARGETS += $(patsubst $(DEMO_SHARE_SRC)/nbproject/%, \
 507     $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%, \
 508     $(filter-out $(DEMO_SHARE_SRC)/nbproject/jfc/SwingApplet%, \
 509     $(call CacheFind, $(DEMO_SHARE_SRC)/nbproject)))
 510 else
 511   TARGETS += $(patsubst $(DEMO_SHARE_SRC)/nbproject/%, \
 512     $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%, \
 513     $(call CacheFind, $(DEMO_SHARE_SRC)/nbproject))
 514 endif
 515 
 516 ################################################################################
 517 
 518 # Hook to include the corresponding custom file, if present.
 519 $(eval $(call IncludeCustomExtension, jdk, CompileDemos.gmk))
 520 
 521 all: $(TARGETS)
 522 
 523 .PHONY: all