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