1 #
   2 # Copyright (c) 2016, 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 default: all
  27 
  28 include $(SPEC)
  29 include MakeBase.gmk
  30 
  31 PRODUCT_TARGETS :=
  32 TEST_TARGETS :=
  33 DOCS_TARGETS :=
  34 
  35 # On Windows tar frequently complains that "file changed as we read it" for
  36 # some random source files. This seems to be cause by anti virus scanners and
  37 # is most likely safe to ignore. When it happens, tar returns '1'.
  38 ifeq ($(OPENJDK_BUILD_OS), windows)
  39   TAR_IGNORE_EXIT_VALUE := || test "$$$$?" = "1"
  40 endif
  41 
  42 # Hook to include the corresponding custom file, if present.
  43 $(eval $(call IncludeCustomExtension, , Bundles-pre.gmk))
  44 ################################################################################
  45 # BUNDLE : Name of bundle to create
  46 # FILES : Files in BASE_DIR to add to bundle
  47 # SPECIAL_INCLUDES : List of directories inside BASE_DIR to look for additional
  48 #     files in. These files will not get proper dependency handling. Use when
  49 #     files or directories may contain spaces.
  50 # BASE_DIR : Base directory for the root dir in the bundle.
  51 # SUBDIR : Optional name of root dir in bundle.
  52 SetupBundleFile = $(NamedParamsMacroTemplate)
  53 define SetupBundleFileBody
  54 
  55   $1_RELATIVE_FILES := $$(patsubst $$($1_BASE_DIR)/%, %, $$($1_FILES))
  56 
  57   ifneq ($$(filter %.tar.gz, $$($1_BUNDLE_NAME)), )
  58     $1_TYPE := tar.gz
  59   else ifneq ($$(filter %.zip, $$($1_BUNDLE_NAME)), )
  60     $1_TYPE := zip
  61   else
  62     $$(error Unknown bundle type $$($1_BUNDLE_NAME))
  63   endif
  64 
  65   $$(call SetIfEmpty, $1_UNZIP_DEBUGINFO, false)
  66 
  67   $(BUNDLES_OUTPUTDIR)/$$($1_BUNDLE_NAME): $$($1_FILES)
  68         $$(eval $$(call ListPathsSafely, \
  69             $1_RELATIVE_FILES, \
  70             $(SUPPORT_OUTPUTDIR)/bundles/_$1_files))
  71         $$(call MakeDir, $$(@D))
  72         ifneq ($$($1_SPECIAL_INCLUDES), )
  73           $$(foreach i, $$($1_SPECIAL_INCLUDES), \
  74               ($(CD) $$($1_BASE_DIR) && $(FIND) $$i \
  75                   >> $(SUPPORT_OUTPUTDIR)/bundles/_$1_files ) ; )
  76         endif
  77         ifneq ($$($1_SUBDIR), )
  78           ifeq ($$($1_TYPE)-$(TAR_SUPPORTS_TRANSFORM)-$$($1_UNZIP_DEBUGINFO), tar.gz-true-false)
  79             $(CD) $$($1_BASE_DIR) \
  80                 && ( $(TAR) cf - $(TAR_CREATE_EXTRA_PARAM) \
  81                     -$(TAR_INCLUDE_PARAM) $(SUPPORT_OUTPUTDIR)/bundles/_$1_files \
  82                     --transform 's|^|$$($1_SUBDIR)/|' $(TAR_IGNORE_EXIT_VALUE) ) \
  83                 | $(GZIP) > $$@
  84           else
  85             # If a subdir has been specified, copy all files into a temporary
  86             # location with this subdir before creating the tar file
  87             $(RM) -r $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR)
  88             $(MKDIR) -p $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR)
  89             ( $(CD) $$($1_BASE_DIR) \
  90                 && $(TAR) cf - -$(TAR_INCLUDE_PARAM) $(SUPPORT_OUTPUTDIR)/bundles/_$1_files \
  91                     $(TAR_IGNORE_EXIT_VALUE) ) \
  92                 | ( $(CD) $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR) && $(TAR) xf - )
  93             # Unzip any zipped debuginfo files
  94             ifeq ($$($1_UNZIP_DEBUGINFO), true)
  95               for f in `$(FIND) $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR) -name "*.diz"`; do \
  96                 $(CD) $$$${f%/*} && $(UNZIP) -q $$$${f} && $(RM) $$$${f}; \
  97               done
  98             endif
  99             ifeq ($$($1_TYPE), tar.gz)
 100               $(CD) $(SUPPORT_OUTPUTDIR)/bundles/$1 && \
 101                   ( $(TAR) cf - $(TAR_CREATE_EXTRA_PARAM) $$($1_SUBDIR) $(TAR_IGNORE_EXIT_VALUE) ) \
 102                   | $(GZIP) > $$@
 103             else ifeq ($$($1_TYPE), zip)
 104               $(CD) $(SUPPORT_OUTPUTDIR)/bundles/$1 && $(ZIPEXE) -qr $$@ .
 105             endif
 106           endif
 107         else
 108           ifeq ($$($1_TYPE), tar.gz)
 109             $(CD) $$($1_BASE_DIR) \
 110                 && ( $(TAR) cf - $(TAR_CREATE_EXTRA_PARAM) \
 111                     -$(TAR_INCLUDE_PARAM) $(SUPPORT_OUTPUTDIR)/bundles/_$1_files \
 112                     $(TAR_IGNORE_EXIT_VALUE) ) \
 113                 | $(GZIP) > $$@
 114           else ifeq ($$($1_TYPE), zip)
 115             $(CD) $$($1_BASE_DIR) \
 116                 && $(ZIPEXE) -qr $$@ . -i@$(SUPPORT_OUTPUTDIR)/bundles/_$1_files
 117           endif
 118         endif
 119 
 120   $1 += $(BUNDLES_OUTPUTDIR)/$$($1_BUNDLE_NAME)
 121 
 122 endef
 123 
 124 ################################################################################
 125 
 126 # On Macosx, we bundle up the macosx specific images which already have the
 127 # correct base directories.
 128 ifeq ($(OPENJDK_TARGET_OS)-$(DEBUG_LEVEL), macosx-release)
 129   JDK_IMAGE_DIR := $(JDK_MACOSX_BUNDLE_DIR)
 130   JRE_IMAGE_DIR := $(JRE_MACOSX_BUNDLE_DIR)
 131   JDK_IMAGE_HOMEDIR := $(JDK_MACOSX_CONTENTS_DIR)/Home
 132   JRE_IMAGE_HOMEDIR := $(JRE_MACOSX_CONTENTS_DIR)/Home
 133   JDK_BUNDLE_SUBDIR :=
 134   JRE_BUNDLE_SUBDIR :=
 135 else
 136   JDK_IMAGE_HOMEDIR := $(JDK_IMAGE_DIR)
 137   JRE_IMAGE_HOMEDIR := $(JRE_IMAGE_DIR)
 138   JDK_BUNDLE_SUBDIR := jdk-$(VERSION_NUMBER)
 139   JRE_BUNDLE_SUBDIR := jre-$(VERSION_NUMBER)
 140   ifneq ($(DEBUG_LEVEL), release)
 141     JDK_BUNDLE_SUBDIR := $(JDK_BUNDLE_SUBDIR)/$(DEBUG_LEVEL)
 142     JRE_BUNDLE_SUBDIR := $(JRE_BUNDLE_SUBDIR)/$(DEBUG_LEVEL)
 143   endif
 144 endif
 145 
 146 ################################################################################
 147 
 148 ifneq ($(filter product-bundles, $(MAKECMDGOALS)), )
 149   $(eval $(call FillCacheFind, $(IMAGES_OUTPUTDIR)))
 150 
 151   SYMBOLS_EXCLUDE_PATTERN := %.debuginfo %.diz %.pdb %.map
 152 
 153   ALL_JDK_FILES := $(call CacheFind, $(JDK_IMAGE_DIR))
 154 
 155   # Create special filter rules when dealing with unzipped .dSYM directories on
 156   # macosx
 157   ifeq ($(OPENJDK_TARGET_OS), macosx)
 158     ifeq ($(ZIP_DEBUGINFO_FILES), false)
 159       JDK_SYMBOLS_EXCLUDE_PATTERN := $(addprefix %, \
 160           $(call containing, .dSYM/, $(patsubst $(JDK_IMAGE_DIR)/%, %, $(ALL_JDK_FILES))))
 161     endif
 162   endif
 163 
 164   JDK_BUNDLE_FILES := \
 165       $(filter-out \
 166           $(JDK_SYMBOLS_EXCLUDE_PATTERN) \
 167           $(JDK_EXTRA_EXCLUDES) \
 168           $(SYMBOLS_EXCLUDE_PATTERN) \
 169           $(JDK_IMAGE_HOMEDIR)/demo/% $(JDK_IMAGE_HOMEDIR)/sample/% \
 170           , \
 171           $(ALL_JDK_FILES) \
 172       )
 173   DEMOS_BUNDLE_FILES := \
 174       $(filter-out \
 175           $(JDK_SYMBOLS_EXCLUDE_PATTERN) \
 176           $(SYMBOLS_EXCLUDE_PATTERN) \
 177           , \
 178           $(filter \
 179                $(JDK_IMAGE_HOMEDIR)/demo/% $(JDK_IMAGE_HOMEDIR)/sample/% \
 180                $(JDK_IMAGE_HOMEDIR)/release \
 181                , \
 182                $(ALL_JDK_FILES) \
 183           ) \
 184       )
 185   JDK_SYMBOLS_BUNDLE_FILES := \
 186       $(filter \
 187           $(JDK_SYMBOLS_EXCLUDE_PATTERN) \
 188           $(SYMBOLS_EXCLUDE_PATTERN) \
 189           , \
 190           $(filter-out \
 191               $(JDK_IMAGE_HOMEDIR)/demo/% $(JDK_IMAGE_HOMEDIR)/sample/% \
 192               , \
 193               $(ALL_JDK_FILES) \
 194           ) \
 195       ) \
 196       $(call CacheFind, $(SYMBOLS_IMAGE_DIR))
 197 
 198   ALL_JRE_FILES := $(call CacheFind, $(JRE_IMAGE_DIR))
 199 
 200   # Create special filter rules when dealing with unzipped .dSYM directories on
 201   # macosx
 202   ifeq ($(OPENJDK_TARGET_OS), macosx)
 203     ifeq ($(ZIP_DEBUGINFO_FILES), false)
 204       JRE_SYMBOLS_EXCLUDE_PATTERN := $(addprefix %, \
 205           $(call containing, .dSYM/, $(patsubst $(JRE_IMAGE_DIR)/%, %, $(ALL_JRE_FILES))))
 206     endif
 207   endif
 208 
 209   JRE_BUNDLE_FILES := $(filter-out \
 210       $(JRE_SYMBOLS_EXCLUDE_PATTERN) \
 211       $(SYMBOLS_EXCLUDE_PATTERN), \
 212       $(ALL_JRE_FILES))
 213   JRE_SYMBOLS_BUNDLE_FILES := $(filter \
 214       $(JRE_SYMBOLS_EXCLUDE_PATTERN) \
 215       $(SYMBOLS_EXCLUDE_PATTERN), \
 216       $(ALL_JRE_FILES))
 217 
 218   $(eval $(call SetupBundleFile, BUILD_JDK_BUNDLE, \
 219       BUNDLE_NAME := $(JDK_BUNDLE_NAME), \
 220       FILES := $(JDK_BUNDLE_FILES), \
 221       SPECIAL_INCLUDES := $(JDK_SPECIAL_INCLUDES), \
 222       BASE_DIR := $(JDK_IMAGE_DIR), \
 223       SUBDIR := $(JDK_BUNDLE_SUBDIR), \
 224   ))
 225 
 226   PRODUCT_TARGETS += $(BUILD_JDK_BUNDLE)
 227 
 228   $(eval $(call SetupBundleFile, BUILD_JRE_BUNDLE, \
 229       BUNDLE_NAME := $(JRE_BUNDLE_NAME), \
 230       FILES := $(JRE_BUNDLE_FILES), \
 231       BASE_DIR := $(JRE_IMAGE_DIR), \
 232       SUBDIR := $(JRE_BUNDLE_SUBDIR), \
 233   ))
 234 
 235   PRODUCT_TARGETS += $(BUILD_JRE_BUNDLE)
 236 
 237   $(eval $(call SetupBundleFile, BUILD_JDK_SYMBOLS_BUNDLE, \
 238       BUNDLE_NAME := $(JDK_SYMBOLS_BUNDLE_NAME), \
 239       FILES := $(JDK_SYMBOLS_BUNDLE_FILES), \
 240       BASE_DIR := $(JDK_IMAGE_DIR), \
 241       SUBDIR := $(JDK_BUNDLE_SUBDIR), \
 242       UNZIP_DEBUGINFO := true, \
 243   ))
 244 
 245   PRODUCT_TARGETS += $(BUILD_JDK_SYMBOLS_BUNDLE)
 246 
 247   $(eval $(call SetupBundleFile, BUILD_JRE_SYMBOLS_BUNDLE, \
 248       BUNDLE_NAME := $(JRE_SYMBOLS_BUNDLE_NAME), \
 249       FILES := $(JRE_SYMBOLS_BUNDLE_FILES), \
 250       BASE_DIR := $(JRE_IMAGE_DIR), \
 251       SUBDIR := $(JRE_BUNDLE_SUBDIR), \
 252       UNZIP_DEBUGINFO := true, \
 253   ))
 254 
 255   PRODUCT_TARGETS += $(BUILD_JRE_SYMBOLS_BUNDLE)
 256 
 257   $(eval $(call SetupBundleFile, BUILD_DEMOS_BUNDLE, \
 258       BUNDLE_NAME := $(DEMOS_BUNDLE_NAME), \
 259       FILES := $(DEMOS_BUNDLE_FILES), \
 260       BASE_DIR := $(JDK_IMAGE_DIR), \
 261       SUBDIR := $(JDK_BUNDLE_SUBDIR), \
 262   ))
 263 
 264   PRODUCT_TARGETS += $(BUILD_DEMOS_BUNDLE)
 265 endif
 266 
 267 ################################################################################
 268 
 269 ifneq ($(filter test-bundles, $(MAKECMDGOALS)), )
 270   TEST_BUNDLE_FILES := $(call CacheFind, $(TEST_IMAGE_DIR))
 271 
 272   $(eval $(call SetupBundleFile, BUILD_TEST_BUNDLE, \
 273       BUNDLE_NAME := $(TEST_BUNDLE_NAME), \
 274       FILES := $(TEST_BUNDLE_FILES), \
 275       BASE_DIR := $(TEST_IMAGE_DIR), \
 276   ))
 277 
 278   TEST_TARGETS += $(BUILD_TEST_BUNDLE)
 279 endif
 280 
 281 ################################################################################
 282 
 283 ifneq ($(filter docs-bundles, $(MAKECMDGOALS)), )
 284   DOCS_BUNDLE_FILES := $(call CacheFind, $(DOCS_IMAGE_DIR))
 285 
 286   $(eval $(call SetupBundleFile, BUILD_DOCS_BUNDLE, \
 287       BUNDLE_NAME := $(DOCS_BUNDLE_NAME), \
 288       FILES := $(DOCS_BUNDLE_FILES), \
 289       BASE_DIR := $(DOCS_IMAGE_DIR), \
 290       SUBDIR := docs, \
 291   ))
 292 
 293   DOCS_TARGETS += $(BUILD_DOCS_BUNDLE)
 294 endif
 295 
 296 ################################################################################
 297 
 298 # Hook to include the corresponding custom file, if present.
 299 $(eval $(call IncludeCustomExtension, , Bundles.gmk))
 300 
 301 ################################################################################
 302 
 303 product-bundles: $(PRODUCT_TARGETS)
 304 test-bundles: $(TEST_TARGETS)
 305 docs-bundles: $(DOCS_TARGETS)
 306 
 307 .PHONY: all default product-bundles test-bundles docs-bundles