1 #
   2 # Copyright (c) 2011, 2020, 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 TextFileProcessing.gmk
  37 include ZipArchive.gmk
  38 
  39 # Hook to include the corresponding custom file, if present.
  40 $(eval $(call IncludeCustomExtension, CompileDemos-pre.gmk))
  41 
  42 # Prepare the find cache.
  43 DEMO_SRC_DIRS += $(TOPDIR)/src/demo
  44 
  45 $(call FillFindCache, $(DEMO_SRC_DIRS))
  46 
  47 # Append demo goals to this variable.
  48 TARGETS =
  49 
  50 # The demo structure and contents should really be cleaned up.
  51 # Now every other demo has its own quirks where to put the
  52 # READMEs and other files.
  53 
  54 DEMO_SHARE_SRC := $(TOPDIR)/src/demo/share
  55 GLOBAL_VERSION_INFO_RESOURCE := $(TOPDIR)/src/java.base/windows/native/common/version.rc
  56 
  57 DEMO_MANIFEST := $(SUPPORT_OUTPUTDIR)/demos/java-main-manifest.mf
  58 
  59 # This rule will be depended on due to the MANIFEST line in SetupBuildDemo
  60 # and SetupBuildJvmtiDemo.
  61 $(eval $(call SetupTextFileProcessing, BUILD_JAVA_MANIFEST, \
  62   SOURCE_FILES := $(TOPDIR)/make/data/mainmanifest/manifest.mf, \
  63   OUTPUT_FILE := $(DEMO_MANIFEST), \
  64   REPLACEMENTS := \
  65       @@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION) ; \
  66       @@VERSION_SHORT@@ => $(VERSION_SHORT) ; \
  67       @@COMPANY_NAME@@ => $(COMPANY_NAME) , \
  68 ))
  69 
  70 ################################################################################
  71 # Build normal demos.
  72 
  73 COPY_TO_JAR := .html .txt .properties .js .gif .jpg .theme .data .opt .c .h \
  74     .png .ttf .xyz .obj README COPYRIGHT
  75 
  76 COPY_TO_IMAGE := *.html *.txt *.png *.xml README*
  77 
  78 # Setup make rules for building a demo.
  79 #
  80 # Parameter 1 is the name of the rule. This name is used as variable prefix,
  81 # and the targets generated are listed in a variable by that name.
  82 #
  83 # Remaining parameters are named arguments. These include:
  84 # DEMO_SUBDIR   The name of the subdir of the demo, below the demo top dir.
  85 # EXTRA_SRC_DIR   Additional source directory.
  86 # SRC_SUB_DIR   Optional subdir to locate source code in
  87 # SRC_DIR   Alternative source directory to use for the demos.
  88 # EXCLUDE_FILES   Exclude file list
  89 # JAR_NAME   Base name of jar file. Defaults to $1.
  90 # MAIN_CLASS   The main class for the jar. Defaults to $1.
  91 # EXTRA_COPY_TO_JAR   Additional files to copy to jar (as patterns)
  92 # EXTRA_COPY_TO_IMAGE   Additional files to copy to images (as wildcards)
  93 # EXTRA_MANIFEST_ATTR   Extra manifest attribute
  94 # SKIP_COMPILATION   Skip Java compilation iff true
  95 # DISABLED_WARNINGS Additional disabled warnings
  96 SetupBuildDemo = $(NamedParamsMacroTemplate)
  97 define SetupBuildDemoBody
  98   ifeq ($$($1_SRC_DIR), )
  99     $1_SRC_DIR := $(DEMO_SHARE_SRC)
 100   endif
 101 
 102   $1_SRC_BASE := $$($1_SRC_DIR)/$$($1_DEMO_SUBDIR)/$1
 103 
 104   # In some demos the source is found in a subdir
 105   ifneq ($$($1_SRC_SUB_DIR), )
 106     $1_MAIN_SRC := $$($1_SRC_BASE)/$$($1_SRC_SUB_DIR)
 107   else
 108     # for allmost all
 109     $1_MAIN_SRC := $$($1_SRC_BASE)
 110   endif
 111 
 112   # Default is to use demo name as jar file name.
 113   ifeq ($$($1_JAR_NAME), )
 114     $1_JAR_NAME := $1
 115   endif
 116 
 117   # Default is to use demo name as jar main class.
 118   ifeq ($$($1_MAIN_CLASS), )
 119     $1_MAIN_CLASS := $1
 120   else ifeq ($$($1_MAIN_CLASS), NONE)
 121     $1_MAIN_CLASS :=
 122     $1_EXTRA_MANIFEST_ATTR += Main-Class: \n
 123   endif
 124 
 125   ifneq ($$($1_SKIP_COMPILATION), true)
 126     $$(eval $$(call SetupJavaCompilation, BUILD_DEMO_$1, \
 127         TARGET_RELEASE := $(TARGET_RELEASE_NEWJDK_UPGRADED), \
 128         SRC := $$($1_MAIN_SRC) $$($1_EXTRA_SRC_DIR), \
 129         BIN := $(SUPPORT_OUTPUTDIR)/demos/classes/$$($1_DEMO_SUBDIR)/$1, \
 130         COPY := $(COPY_TO_JAR) $$($1_EXTRA_COPY_TO_JAR), \
 131         JAR := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1/$$($1_JAR_NAME).jar, \
 132         JARMAIN := $$($1_MAIN_CLASS), \
 133         MANIFEST := $(DEMO_MANIFEST), \
 134         EXTRA_MANIFEST_ATTR := $$($1_EXTRA_MANIFEST_ATTR), \
 135         SRCZIP := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1/src.zip, \
 136         EXCLUDE_FILES := $$($1_EXCLUDE_FILES), \
 137         DISABLED_WARNINGS := $$($1_DISABLED_WARNINGS), \
 138     ))
 139 
 140     $1 += $$(BUILD_DEMO_$1)
 141   endif
 142 
 143   # Copy files. Sort is needed to remove duplicates.
 144   $1_COPY_FILES := $$(sort $$(wildcard $$(addprefix $$($1_SRC_BASE)/, \
 145       $(COPY_TO_IMAGE) $$($1_EXTRA_COPY_TO_IMAGE))))
 146   $$(eval $$(call SetupCopyFiles, COPY_DEMO_$1, \
 147       SRC :=  $$($1_SRC_BASE), \
 148       DEST := $(SUPPORT_OUTPUTDIR)/demos/image/$$($1_DEMO_SUBDIR)/$1, \
 149       FILES := $$($1_COPY_FILES), \
 150   ))
 151 
 152   $1 += $$(COPY_DEMO_$1)
 153 
 154   TARGETS += $$($1)
 155 endef
 156 
 157 CODEPOINT_SERVICE := java.awt.im.spi.InputMethodDescriptor
 158 CODEPOINT_METAINF_SERVICE_FILE := \
 159     $(SUPPORT_OUTPUTDIR)/demos/classes/jfc/CodePointIM/META-INF/services/$(CODEPOINT_SERVICE)
 160 
 161 $(eval $(call SetupBuildDemo, CodePointIM, \
 162     DEMO_SUBDIR := jfc, \
 163     EXTRA_COPY_TO_JAR := $(CODEPOINT_SERVICE), \
 164 ))
 165 
 166 # We also need to copy the CODEPOINT_SERVICE file to the META-INF/services
 167 # location, and make sure the jar depends on that file to get it included.
 168 $(CODEPOINT_METAINF_SERVICE_FILE): $(DEMO_SHARE_SRC)/jfc/CodePointIM/$(CODEPOINT_SERVICE)
 169         $(call install-file)
 170 
 171 $(BUILD_DEMO_CodePointIM_JAR): $(CODEPOINT_METAINF_SERVICE_FILE)
 172 
 173 $(eval $(call SetupBuildDemo, FileChooserDemo, \
 174     DEMO_SUBDIR := jfc, \
 175     DISABLED_WARNINGS := rawtypes deprecation unchecked, \
 176 ))
 177 
 178 $(eval $(call SetupBuildDemo, SwingSet2, \
 179     DEMO_SUBDIR := jfc, \
 180     EXTRA_COPY_TO_JAR := .java, \
 181     EXTRA_MANIFEST_ATTR := SplashScreen-Image: resources/images/splash.png, \
 182     DISABLED_WARNINGS := rawtypes deprecation unchecked static serial cast, \
 183 ))
 184 
 185 $(eval $(call SetupBuildDemo, Font2DTest, \
 186     DISABLED_WARNINGS := rawtypes deprecation unchecked serial cast, \
 187     DEMO_SUBDIR := jfc, \
 188 ))
 189 
 190 $(eval $(call SetupBuildDemo, J2Ddemo, \
 191     DEMO_SUBDIR := jfc, \
 192     MAIN_CLASS := java2d.J2Ddemo, \
 193     DISABLED_WARNINGS := rawtypes deprecation unchecked cast, \
 194     JAR_NAME := J2Ddemo, \
 195 ))
 196 
 197 $(eval $(call SetupBuildDemo, Metalworks, \
 198     DISABLED_WARNINGS := rawtypes unchecked, \
 199     DEMO_SUBDIR := jfc, \
 200 ))
 201 
 202 $(eval $(call SetupBuildDemo, Notepad, \
 203     DISABLED_WARNINGS := rawtypes, \
 204     DEMO_SUBDIR := jfc, \
 205 ))
 206 
 207 $(eval $(call SetupBuildDemo, Stylepad, \
 208     DEMO_SUBDIR := jfc, \
 209     DISABLED_WARNINGS := rawtypes unchecked, \
 210     EXTRA_SRC_DIR := $(DEMO_SHARE_SRC)/jfc/Notepad, \
 211     EXCLUDE_FILES := $(DEMO_SHARE_SRC)/jfc/Notepad/README.txt, \
 212 ))
 213 
 214 $(eval $(call SetupBuildDemo, SampleTree, \
 215     DEMO_SUBDIR := jfc, \
 216 ))
 217 
 218 $(eval $(call SetupBuildDemo, TableExample, \
 219     DISABLED_WARNINGS := rawtypes unchecked deprecation, \
 220     DEMO_SUBDIR := jfc, \
 221 ))
 222 
 223 $(eval $(call SetupBuildDemo, TransparentRuler, \
 224     DEMO_SUBDIR := jfc, \
 225     MAIN_CLASS := transparentruler.Ruler, \
 226 ))
 227 
 228 ################################################################################
 229 # Copy html and README files.
 230 
 231 $(SUPPORT_OUTPUTDIR)/demos/image/README: $(DEMO_SHARE_SRC)/README
 232         $(call install-file)
 233 
 234 TARGETS += $(SUPPORT_OUTPUTDIR)/demos/image/README
 235 
 236 ################################################################################
 237 # Copy netbeans project files.
 238 
 239 $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%: $(DEMO_SHARE_SRC)/nbproject/%
 240         $(call install-file)
 241         $(CHMOD) -f ug+w $@
 242 
 243 TARGETS += $(patsubst $(DEMO_SHARE_SRC)/nbproject/%, \
 244   $(SUPPORT_OUTPUTDIR)/demos/image/nbproject/%, \
 245   $(call FindFiles, $(DEMO_SHARE_SRC)/nbproject))
 246 
 247 ################################################################################
 248 
 249 ifneq ($(filter images, $(MAKECMDGOALS)), )
 250   $(eval $(call SetupCopyFiles, COPY_TO_TEST_IMAGE, \
 251       SRC := $(SUPPORT_OUTPUTDIR)/demos/image, \
 252       DEST := $(TEST_IMAGE_DIR)/jdk/demos, \
 253       FILES := $(call FindFiles, $(SUPPORT_OUTPUTDIR)/demos/image), \
 254   ))
 255 
 256   IMAGES_TARGETS := $(COPY_TO_TEST_IMAGE)
 257 endif
 258 
 259 ################################################################################
 260 # Hook to include the corresponding custom file, if present.
 261 $(eval $(call IncludeCustomExtension, CompileDemos-post.gmk))
 262 
 263 all: $(TARGETS)
 264 images: $(IMAGES_TARGETS)
 265 
 266 .PHONY: all