1 #
2 # Copyright (c) 2005, 2011, 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 # Definitions for all platforms.
28 #
29 # Normally the convention is that these alternate definitions of
30 # primary make variables are never defined inside the Makefiles anywhere
31 # but are defined via environment variables or set on the make command
32 # line. So you should never see an ALT_* variable defined in any
33 # makefiles, just used. This is the convention and there are some
34 # exceptions, either mistakes or unusual circumstances.
35 #
36 # The naming convention for the default value of one of these variables
37 # that has an ALT_* override capability is to name the default value with a
38 # leading underscore (_). So for XXX you would have:
39 # _XXX default value
40 # ALT_XXX any override the user is providing if any
41 # XXX the final value, either the default _XXX or the ALT_XXX value.
42 #
43
44 # On Directory names. In very rare cases should the Windows directory
45 # names use the backslash, please use the C:/ style of windows paths.
46 # Avoid duplicating the // characters in paths, this has known to cause
47 # strange problems with jar and other utilities, e.g. /a//b/ != /a/b/.
48 # Some of these variables have an explicit trailing / character, but in
49 # general, they should NOT have the trailing / character.
50
51 # Get shared system utilities macros defined
52 include $(JDK_MAKE_SHARED_DIR)/Defs-utils.gmk
53
54 # Assumes ARCH, PLATFORM, ARCH_VM_SUBDIR, JDK_TOPDIR, etc. have been defined.
55
56 # Simple pwd path
57 # NOTE: Just use the shell's cd and pwd here, more reliable at sanity time.
58 define PwdPath
59 $(shell cd $1 2> $(DEV_NULL) && pwd)
60 endef
61 define AbsPwdPathCheck
62 $(shell cd .. 2> $(DEV_NULL) && cd $1 2> $(DEV_NULL) && pwd)
63 endef
64
65 # Checks an ALT value for spaces (should be one word),
66 # warns and returns Check_ALT_$1 if spaces
67 define AltCheckSpaces
68 $(if $(word 2,$($1)),$(warning "WARNING: Value of $1 contains a space: '$($1)', check or set ALT_$1")Check_ALT_$1,$($1))
69 endef
70
71 # Checks an ALT value for empty, warns and returns Check_ALT_$1 if empty
72 define AltCheckValue
73 $(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, check or set ALT_$1")Check_ALT_$1)
74 endef
75
76 # Checks any value for empty, warns and returns $2 if empty
77 define CheckValue
78 $(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, will use '$2'")$2)
79 endef
80
81 # Prefix for a utility prefix path, if empty leave alone, otherwise end with a /
82 define PrefixPath
83 $(if $1,$(subst //,/,$1/),)
84 endef
85
86 # Select a directory if it exists, or the alternate 2 or the alternate 3
87 define DirExists
88 $(shell \
89 if [ -d "$1" ]; then \
90 echo "$1"; \
91 elif [ -d "$2" ]; then \
92 echo "$2"; \
93 else \
94 echo "$3"; \
95 fi)
96 endef
97
98 # Select a directory if it exists, or the alternate 2, or the alternate 3, or the alternate 4
99 define DirExists4
100 $(shell \
101 if [ -d "$1" ]; then \
102 echo "$1"; \
103 elif [ -d "$2" ]; then \
104 echo "$2"; \
105 elif [ -d "$3" ]; then \
106 echo "$3"; \
107 else \
108 echo "$4"; \
109 fi)
110 endef
111
112
113 # Select a writable directory if it exists and is writable, or the alternate
114 define WriteDirExists
115 $(shell \
116 if [ -d "$1" -a -w "$1" ]; then \
117 echo "$1"; \
118 else \
119 echo "$2"; \
120 fi)
121 endef
122
123 # Select a file if it exists, or the alternate 1, or the alternate 2
124 define FileExists
125 $(shell \
126 if [ -r "$1" ]; then \
127 echo "$1"; \
128 elif [ -r "$2" ]; then \
129 echo "$2"; \
130 else \
131 echo "NO_FILE_EXISTS"; \
132 fi)
133 endef
134
135 # Given a line of text, get the version number from it
136 define GetVersion
137 $(shell echo $1 | sed -e 's@[^0-9]*\([0-9][0-9]*\.[0-9][.0-9]*\).*@\1@' )
138 endef
139
140 # Return one part of the version numbers, watch out for non digits.
141 define VersionWord # Number Version
142 $(word $1,$(subst ., ,$(subst -, ,$2)))
143 endef
144
145 # Given a major.minor.micro version, return the major, minor, or micro number
146 define MajorVersion
147 $(if $(call VersionWord,1,$1),$(call VersionWord,1,$1),0)
148 endef
149 define MinorVersion
150 $(if $(call VersionWord,2,$1),$(call VersionWord,2,$1),0)
151 endef
152 define MicroVersion
153 $(if $(call VersionWord,3,$1),$(call VersionWord,3,$1),0)
154 endef
155
156 # Macro that returns missing, same, newer, or older $1=version $2=required
157 define CheckVersions
158 $(shell \
159 if [ "$1" = "" -o "$2" = "" ]; then \
160 echo missing; \
161 elif [ "$1" = "$2" ]; then \
162 echo same; \
163 elif [ $(call MajorVersion,$1) -lt $(call MajorVersion,$2) ] ; then \
164 echo older; \
165 elif [ $(call MajorVersion,$1) -gt $(call MajorVersion,$2) ] ; then \
166 echo newer; \
167 elif [ $(call MinorVersion,$1) -lt $(call MinorVersion,$2) ]; then \
168 echo older; \
169 elif [ $(call MinorVersion,$1) -gt $(call MinorVersion,$2) ]; then \
170 echo newer; \
171 elif [ $(call MicroVersion,$1) -lt $(call MicroVersion,$2) ]; then \
172 echo older; \
173 elif [ $(call MicroVersion,$1) -gt $(call MicroVersion,$2) ]; then \
174 echo newer; \
175 else \
176 echo same; \
177 fi)
178 endef
179
180 # Expand SRCDIR_LIST, which is used to automatically include various
181 # platform and shared sources/headers. This is mainly useful for the
182 # Mac OS X build, which pulls its platform sources from the solaris and/or
183 # macosx trees, depending on the component.
184 ifeq ($(PLATFORM), macosx)
185 define JavaSrcDirList
186 $(JAVA_SRCDIR_LIST:%=$1$(JDK_TOPDIR)/%/$2)
187 endef
188 define NativeSrcDirList
189 $(NATIVE_SRCDIR_LIST:%=$1$(JDK_TOPDIR)/%/$2)
190 endef
191 endif
192
193 # Make sure certain variables are non-empty at this point
194 _check_values:=\
195 $(call CheckValue,ARCH,),\
196 $(call CheckValue,ARCH_DATA_MODEL,),\
197 $(call CheckValue,ARCH_VM_SUBDIR,),\
198 $(call CheckValue,JDK_TOPDIR,),\
199 $(call CheckValue,JDK_MAKE_SHARED_DIR,),\
200 $(call CheckValue,VARIANT,),\
201 $(call CheckValue,PLATFORM,)
202
203 # Misc common settings for all workspaces
204 # This determines the version of the product, and the previous version or boot
205 ifndef JDK_MAJOR_VERSION
206 JDK_MAJOR_VERSION = 1
207 PREVIOUS_MAJOR_VERSION = 1
208 endif
209
210 ifndef JDK_MINOR_VERSION
211 JDK_MINOR_VERSION = 8
212 PREVIOUS_MINOR_VERSION = 7
213 endif
214
215 ifndef JDK_MICRO_VERSION
216 JDK_MICRO_VERSION = 0
217 PREVIOUS_MICRO_VERSION = 0
218 endif
219
220 ifndef MILESTONE
221 MILESTONE = internal
222 endif
223
224 # Default names
225 ifdef OPENJDK
226 LAUNCHER_NAME = openjdk
227 PRODUCT_NAME = OpenJDK
228 PRODUCT_SUFFIX = Runtime Environment
229 JDK_RC_PLATFORM_NAME = Platform
230 COMPANY_NAME = N/A
231 else
232 LAUNCHER_NAME = java
233 PRODUCT_NAME = Java(TM)
234 PRODUCT_SUFFIX = SE Runtime Environment
235 JDK_RC_PLATFORM_NAME = Platform SE
236 COMPANY_NAME = Oracle Corporation
237 endif
238
239 RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX)
240
241 ifndef BUILD_NUMBER
242 JDK_BUILD_NUMBER = b00
243 else
244 ifndef JDK_BUILD_NUMBER
245 JDK_BUILD_NUMBER = $(BUILD_NUMBER)
246 endif
247 endif
248
249 # Default variant is the optimized version of everything
250 # can be OPT or DBG, default is OPT
251 # Determine the extra pattern to add to the release name for debug/fastdebug.
252 # Determine the JDK_IMPORT_VARIANT, so we get the right VM files copied over.
253 # Determine suffix for obj directory or OBJDIR, for .o files.
254 # (by keeping .o files separate, just .o files, they don't clobber each
255 # other, however, the library files will clobber each other).
256 #
257 ifeq ($(VARIANT), DBG)
258 BUILD_VARIANT_RELEASE=-debug
259 OBJDIRNAME_SUFFIX=_g
260 else
261 BUILD_VARIANT_RELEASE=
262 OBJDIRNAME_SUFFIX=
263 endif
264 ifeq ($(FASTDEBUG), true)
265 VARIANT=DBG
266 BUILD_VARIANT_RELEASE=-fastdebug
267 OBJDIRNAME_SUFFIX=_gO
268 _JDK_IMPORT_VARIANT=/fastdebug
269 endif
270
271 # Depending on the flavor of the build, add a -debug or -fastdebug to the name
272 ifdef DEBUG_NAME
273 BUILD_VARIANT_RELEASE=-$(DEBUG_NAME)
274 endif
275
276 # These default values are redefined during a release build.
277 # CTE can set JDK_UPDATE_VERSION during the update release
278 ifdef JDK_UPDATE_VERSION
279 JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)_$(JDK_UPDATE_VERSION)
280 MARKETING_NUMBER := $(shell \
281 $(ECHO) $(JDK_UPDATE_VERSION) | $(NAWK) '{if (substr($$0,1,1)=="0") print substr($$0, 2); else print $$0;}')
282 MARKET_NAME= $(shell $(ECHO) " Update $(MARKETING_NUMBER)")
283 JDK_MKTG_VERSION = $(JDK_MINOR_VERSION)u$(MARKETING_NUMBER)
284 else
285 JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)
286 JDK_MKTG_VERSION = $(JDK_MINOR_VERSION)
287 MARKET_NAME=
288 endif
289 JDK_UNDERSCORE_VERSION = $(subst .,_,$(JDK_VERSION))
290 JDK_MKTG_UNDERSCORE_VERSION = $(subst .,_,$(JDK_MKTG_VERSION))
291
292 # RELEASE is JDK_VERSION and -MILESTONE if MILESTONE is set
293 ifneq ($(MILESTONE),fcs)
294 RELEASE = $(JDK_VERSION)-$(MILESTONE)$(BUILD_VARIANT_RELEASE)
295 else
296 RELEASE = $(JDK_VERSION)$(BUILD_VARIANT_RELEASE)
297 endif
298
299 # FULL_VERSION is RELEASE and -BUILD_NUMBER if BUILD_NUMBER is set
300 ifdef BUILD_NUMBER
301 FULL_VERSION = $(RELEASE)-$(BUILD_NUMBER)
302 else
303 BUILD_NUMBER = b00
304 ifndef USER_RELEASE_SUFFIX
305 BUILD_DATE := $(shell $(DATE) '+%Y_%m_%d_%H_%M')
306 CLEAN_USERNAME := $(shell $(ECHO) "$(USER)" | $(TR) -d -c '[:alnum:]')
307 USER_RELEASE_SUFFIX := $(shell $(ECHO) "$(CLEAN_USERNAME)_$(BUILD_DATE)" | $(TR) '[:upper:]' '[:lower:]' )
308 endif
309 export USER_RELEASE_SUFFIX
310 FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER)
311 endif
312
313 # Promoted build location
314 PROMOTED_RE_AREA = $(SLASH_JAVA)/re/jdk/$(JDK_VERSION)/promoted
315 PROMOTED_BUILD_LATEST = latest
316 PROMOTED_BUILD_BASEDIR = $(PROMOTED_RE_AREA)/$(PROMOTED_BUILD_LATEST)
317 PROMOTED_BUILD_DISTDIR = $(PROMOTED_BUILD_BASEDIR)/dist/$(PLATFORM)-$(ARCH)
318 PROMOTED_BUILD_BINARIES = $(PROMOTED_BUILD_BASEDIR)/binaries
319
320 # PARALLEL_COMPILE_JOBS: is the number of compiles done in parallel.
321 # If the user sets ALT_PARALLEL_COMPILE_JOBS, then COMPILE_APPROACH is set
322 # to parallel.
323 #
324 # Recommended setting: 2 seems to be ideal for single cpu machines,
325 # 2 times the number of CPU's is a basic formula,
326 # but probably not more than 4 if the machine is
327 # being shared by others, or the machine is limited
328 # in RAM or swap.
329 #
330 ifdef ALT_PARALLEL_COMPILE_JOBS
331 PARALLEL_COMPILE_JOBS=$(ALT_PARALLEL_COMPILE_JOBS)
332 else
333 PARALLEL_COMPILE_JOBS=2
334 endif
335
336 # Previous JDK release (version of BOOTDIR version)
337 ifdef ALT_PREVIOUS_JDK_VERSION
338 PREVIOUS_JDK_VERSION = $(ALT_PREVIOUS_JDK_VERSION)
339 else
340 PREVIOUS_JDK_VERSION = $(PREVIOUS_MAJOR_VERSION).$(PREVIOUS_MINOR_VERSION).$(PREVIOUS_MICRO_VERSION)
341 endif
342 export PREVIOUS_JDK_VERSION
343 PREVIOUS_JDK_VERSION:=$(call AltCheckSpaces,PREVIOUS_JDK_VERSION)
344 PREVIOUS_JDK_VERSION:=$(call AltCheckValue,PREVIOUS_JDK_VERSION)
345
346 # Version with _ instead of . in number
347 ifeq ($(PREVIOUS_MINOR_VERSION),5)
348 PREVIOUS_JDK_UNDERSCORE_VERSION = $(subst .,_,$(PREVIOUS_JDK_VERSION))
349 else
350 PREVIOUS_JDK_UNDERSCORE_VERSION = $(PREVIOUS_MINOR_VERSION)
351 endif
352
353 # Include any private definitions for this set of workspaces
354 _PRIVATE_DEFS_FILE=$(JDK_MAKE_SHARED_DIR)/PrivateDefs.gmk
355 ifeq ($(USING_PRIVATE_DEFS),)
356 USING_PRIVATE_DEFS:=$(shell if [ -f $(_PRIVATE_DEFS_FILE) ]; then echo true; else echo false; fi)
357 endif
358 ifeq ($(USING_PRIVATE_DEFS),true)
359 dummy:=$(warning "WARNING: Using definitions from $(_PRIVATE_DEFS_FILE)")
360 include $(_PRIVATE_DEFS_FILE)
361 endif
362
363 # OUTPUTDIR: Location of all output for the build
364 ifdef ALT_OUTPUTDIR
365 OUTPUTDIR:=$(subst \,/,$(ALT_OUTPUTDIR))
366 # Assumes this is absolute (checks later)
367 ABS_OUTPUTDIR:=$(OUTPUTDIR)
368 else
369 ifndef _OUTPUTDIR
370 # Default: Get "build" parent directory, which should always exist
371 ifndef BUILD_PARENT_DIRECTORY
372 BUILD_PARENT_DIRECTORY=$(BUILDDIR)/..
373 endif
374 ifdef OPENJDK
375 _OUTPUTDIRNAME=$(PLATFORM)-$(ARCH)$(OPENJDK_SUFFIX)
376 else
377 _OUTPUTDIRNAME=$(PLATFORM)-$(ARCH)
378 endif
379 _OUTPUTDIR=$(BUILD_PARENT_DIRECTORY)/build/$(_OUTPUTDIRNAME)
380 endif
381 OUTPUTDIR:=$(_OUTPUTDIR)
382 endif
383 # Check for spaces and null value
384 OUTPUTDIR:=$(call AltCheckSpaces,OUTPUTDIR)
385 OUTPUTDIR:=$(call AltCheckValue,OUTPUTDIR)
386
387 # Get platform specific settings
388 # NB: OUTPUTDIR must be defined. Otherwise hotspot import detection will not work correctly
389 # On other hand this must be included early as it provides platform specific defines such as FullPath
390 include $(JDK_MAKE_SHARED_DIR)/Defs-versions.gmk
391
392 # Get platform specific settings (defines COMPILER_PATH)
393 include $(JDK_MAKE_SHARED_DIR)/Defs-$(PLATFORM).gmk
394
395 # Components
396 ifdef ALT_LANGTOOLS_DIST
397 LANGTOOLS_DIST :=$(call FullPath,$(ALT_LANGTOOLS_DIST))
398 else
399 LANGTOOLS_DIST =
400 endif
401 ifdef ALT_CORBA_DIST
402 CORBA_DIST :=$(call FullPath,$(ALT_CORBA_DIST))
403 else
404 CORBA_DIST =
405 endif
406 ifdef ALT_JAXP_DIST
407 JAXP_DIST :=$(call FullPath,$(ALT_JAXP_DIST))
408 else
409 JAXP_DIST =
410 endif
411 ifdef ALT_JAXWS_DIST
412 JAXWS_DIST :=$(call FullPath,$(ALT_JAXWS_DIST))
413 else
414 JAXWS_DIST =
415 endif
416
417 # HOTSPOT_DOCS_IMPORT_PATH: Path to hotspot docs files to import into the docs generation
418 ifdef ALT_HOTSPOT_DOCS_IMPORT_PATH
419 HOTSPOT_DOCS_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_DOCS_IMPORT_PATH))
420 else
421 HOTSPOT_DOCS_IMPORT_PATH :=$(call DirExists,$(HOTSPOT_IMPORT_PATH)/docs,$(PROMOTED_BUILD_BASEDIR)/docs,/NO_DOCS_DIR)
422 endif
423
424 # These are the same on all platforms but require the above platform include 1st
425
426 # BOOTDIR: Bootstrap JDK, previous released JDK.
427 # _BOOTDIR1 and _BOOTDIR2 picked by platform
428 # Platform may optionally define _BOOTDIR3 as well.
429 ifdef ALT_BOOTDIR
430 BOOTDIR =$(ALT_BOOTDIR)
431 else
432 ifdef _BOOTDIR3
433 BOOTDIR :=$(call DirExists4,$(_BOOTDIR1),$(_BOOTDIR2),$(_BOOTDIR3),/NO_BOOTDIR)
434 else
435 BOOTDIR :=$(call DirExists,$(_BOOTDIR1),$(_BOOTDIR2),/NO_BOOTDIR)
436 endif
437 endif
438 export BOOTDIR
439 BOOTDIR:=$(call AltCheckSpaces,BOOTDIR)
440 BOOTDIR:=$(call AltCheckValue,BOOTDIR)
441
442 # PREVIOUS_FCS_RE_AREA: re path to where previous release binaries/bundles are
443 PREVIOUS_FCS_RE_AREA = $(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs
444
445 # PREVIOUS_RELEASE_IMAGE: Previous install image to compare against
446 ifdef ALT_PREVIOUS_RELEASE_IMAGE
447
448 # Explicit image provided, no bundle access needed
449 PREVIOUS_RELEASE_IMAGE :=$(call FullPath,$(ALT_PREVIOUS_RELEASE_IMAGE))
450
451 else
452
453 # PREVIOUS_RELEASE_PATH: path to where previous release bundles are
454 ifdef ALT_PREVIOUS_RELEASE_PATH
455 PREVIOUS_RELEASE_PATH :=$(call OptFullPath,$(ALT_PREVIOUS_RELEASE_PATH))
456 else
457 PREVIOUS_RELEASE_PATH := \
458 $(call DirExists,$(PREVIOUS_FCS_RE_AREA)/bundles/$(PLATFORM)-$(ARCH),,)
459 endif
460
461 # Depending on if we have access to these bundles
462 ifeq ($(PREVIOUS_RELEASE_PATH),)
463 # Use images in re area or BOOTDIR (which is normally the previous release)
464 PREVIOUS_RELEASE_IMAGE := \
465 $(call DirExists,$(PREVIOUS_FCS_RE_AREA)/binaries/$(PLATFORM)-$(ARCH),$(BOOTDIR),)
466 else
467 # Get names of and paths to bundles
468 PREVIOUS_RELEASE_PATH:=$(call AltCheckSpaces,PREVIOUS_RELEASE_PATH)
469 PREVIOUS_RELEASE_PATH:=$(call AltCheckValue,PREVIOUS_RELEASE_PATH)
470 export PREVIOUS_RELEASE_PATH
471
472 # PREVIOUS_JDK_FILE: filename of install bundle for previous JDK
473 ifdef ALT_PREVIOUS_JDK_FILE
474 PREVIOUS_JDK_FILE =$(ALT_PREVIOUS_JDK_FILE)
475 else
476 PREVIOUS_JDK_FILE = \
477 jdk-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX)
478 endif
479 export PREVIOUS_JDK_FILE
480 PREVIOUS_JDK_FILE:=$(call AltCheckSpaces,PREVIOUS_JDK_FILE)
481 PREVIOUS_JDK_FILE:=$(call AltCheckValue,PREVIOUS_JDK_FILE)
482
483 # PREVIOUS_JRE_FILE: filename of install bundle for previous JRE
484 ifdef ALT_PREVIOUS_JRE_FILE
485 PREVIOUS_JRE_FILE =$(ALT_PREVIOUS_JRE_FILE)
486 else
487 PREVIOUS_JRE_FILE = \
488 jre-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX)
489 endif
490 export PREVIOUS_JRE_FILE
491 PREVIOUS_JRE_FILE:=$(call AltCheckSpaces,PREVIOUS_JRE_FILE)
492 PREVIOUS_JRE_FILE:=$(call AltCheckValue,PREVIOUS_JRE_FILE)
493
494 # Paths to these bundles
495 PREVIOUS_JRE_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JRE_FILE)
496 PREVIOUS_JDK_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JDK_FILE)
497 endif
498
499 endif
500
501 # Indicate we are using an image comparison
502 ifneq ($(PREVIOUS_RELEASE_IMAGE),)
503 PREVIOUS_RELEASE_PATH = USING-PREVIOUS_RELEASE_IMAGE
504 PREVIOUS_JRE_BUNDLE = USING-PREVIOUS_RELEASE_IMAGE
505 PREVIOUS_JDK_BUNDLE = USING-PREVIOUS_RELEASE_IMAGE
506 endif
507
508 # CACERTS_FILE: if OPENJDK is false and the internal version of the file
509 # (that is, non-empty) is available, use it, otherwise use an
510 # empty keystore.
511 #
512 # We put this variable here for sanity checks and in case another
513 # components will need to know which cacerts file is being used.
514 #
515 ifdef ALT_CACERTS_FILE
516 CACERTS_FILE = $(ALT_CACERTS_FILE)
517 else
518 CACERTS_EXT = $(SHARE_SRC)/lib/security/cacerts
519 ifdef OPENJDK
520 CACERTS_FILE :=$(CACERTS_EXT)
521 else # (!OPENJDK)
522 CACERTS_INT = $(CLOSED_SHARE_SRC)/lib/security/cacerts.internal
523 CACERTS_FILE :=$(call FileExists,$(CACERTS_INT),$(CACERTS_EXT))
524 endif # (OPENJDK)
525 endif
526 CACERTS_FILE:=$(call AltCheckSpaces,CACERTS_FILE)
527 CACERTS_FILE:=$(call AltCheckValue,CACERTS_FILE)
528
529 #
530 # When signing the JCE framework and provider, we could be using built
531 # bits on a read-only filesystem. If so, this test will fail and crash
532 # the build.
533 #
534 ifndef IGNORE_WRITABLE_OUTPUTDIR_TEST
535 # Create the output directory and make sure it exists and is writable
536 _create_outputdir:=$(shell $(MKDIR) -p "$(OUTPUTDIR)" > $(DEV_NULL) 2>&1)
537 ifeq ($(call WriteDirExists,$(OUTPUTDIR),/dev/null),/dev/null)
538 _outputdir_error:=$(error "ERROR: OUTPUTDIR '$(OUTPUTDIR)' not created or not writable")
539 endif
540 endif
541
542 # Define absolute path if needed and check for spaces and null value
543 ifndef ABS_OUTPUTDIR
544 ifdef _OUTPUTDIRNAME
545 #Could not define this at the same time as _OUTPUTDIRNAME as FullPath is not defined at that point
546 ABS_BUILD_PARENT_DIRECTORY:=$(call FullPath,$(BUILD_PARENT_DIRECTORY))
547 ABS_OUTPUTDIR:=$(ABS_BUILD_PARENT_DIRECTORY)/build/$(_OUTPUTDIRNAME)
548 else
549 ABS_OUTPUTDIR:=$(call FullPath,$(OUTPUTDIR))
550 endif
551 endif
552 ABS_OUTPUTDIR:=$(call AltCheckSpaces,ABS_OUTPUTDIR)
553 ABS_OUTPUTDIR:=$(call AltCheckValue,ABS_OUTPUTDIR)
554 # Make doubly sure this is a full path
555 ifeq ($(call AbsPwdPathCheck,$(ABS_OUTPUTDIR)), )
556 ifdef ALT_OUTPUTDIR
557 _outputdir_error:=$(error "ERROR: Trouble with the absolute path for OUTPUTDIR '$(OUTPUTDIR)', was ALT_OUTPUTDIR '$(ALT_OUTPUTDIR)' an absolute path?")
558 else
559 _outputdir_error:=$(error "ERROR: Trouble with the absolute path for OUTPUTDIR '$(OUTPUTDIR)'")
560 endif
561 endif
562 _dir1:=$(call FullPath,$(ABS_OUTPUTDIR))
563 _dir2:=$(call FullPath,$(OUTPUTDIR))
564 ifneq ($(_dir1),$(_dir2))
565 _outputdir_error:=$(error "ERROR: ABS_OUTPUTDIR '$(ABS_OUTPUTDIR)' is not the same directory as OUTPUTDIR '$(OUTPUTDIR)', '$(_dir1)'!='$(_dir2)'")
566 endif
567
568 # Bin directory
569 # NOTE: ISA_DIR is usually empty, on Solaris it might be /sparcv9 or /amd64
570 BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR)
571
572 # JDK_HOST_PATH: the default location of the latest JDK that can run
573 # on the host system and supports the target class file version
574 # generated in this JDK build. This variable should only be
575 # used after the launchers are built (i.e. make/launchers).
576 #
577 # By default, it is the OUTPUTDIR. If the target architecture
578 # is different that the host system doing the build (e.g. cross-compilation),
579 # ALT_JDK_HOST_PATH should be set.
580 #
581 ifdef ALT_JDK_HOST_PATH
582 _HOST_VERSION :=$(shell $(ALT_JDK_HOST_PATH)/bin/java -version 2>&1 | $(HEAD) -n 1)
583 ALT_JDK_HOST_PATH_VERSION :=$(call GetVersion,"$(_HOST_VERSION)")
584 ALT_JDK_HOST_PATH_CHECK :=$(call CheckVersions,$(ALT_JDK_HOST_PATH_VERSION),$(JDK_VERSION))
585 JDK_HOST_PATH =$(ALT_JDK_HOST_PATH)
586 JDK_HOST_PATH:=$(call AltCheckSpaces,JDK_HOST_PATH)
587 JDK_HOST_PATH:=$(call AltCheckValue,JDK_HOST_PATH)
588 else
589 JDK_HOST_PATH =$(ABS_OUTPUTDIR)
590 endif
591
592 # MOZILLA_HEADERS_PATH: path to mozilla header files for plugin
593 ifdef ALT_MOZILLA_HEADERS_PATH
594 MOZILLA_HEADERS_PATH :=$(call FullPath,$(ALT_MOZILLA_HEADERS_PATH))
595 else
596 MOZILLA_HEADERS_PATH =$(JDK_DEVTOOLS_DIR)/share/plugin
597 endif
598 MOZILLA_HEADERS_PATH:=$(call AltCheckSpaces,MOZILLA_HEADERS_PATH)
599 MOZILLA_HEADERS_PATH:=$(call AltCheckValue,MOZILLA_HEADERS_PATH)
600
601 # CUPS_HEADERS_PATH: path to Cups headers files for Unix printing
602 ifneq ($(PLATFORM), windows)
603 JDK_CUPS_HEADERS_PATH=$(JDK_DEVTOOLS_DIR)/share/cups/include
604 ifdef ALT_CUPS_HEADERS_PATH
605 CUPS_HEADERS_PATH:=$(call FullPath,$(ALT_CUPS_HEADERS_PATH))
606 CUPS_HEADERS_PATH:=$(call AltCheckValue,CUPS_HEADERS_PATH)
607 else
608 CUPS_HEADERS_PATH:= \
609 $(shell if [ -d "$(JDK_CUPS_HEADERS_PATH)" ]; then \
610 echo "$(JDK_CUPS_HEADERS_PATH)"; \
611 else \
612 echo "$(_CUPS_HEADERS_PATH)";\
613 fi)
614 endif
615 endif
616
617 # BDB_HEADERS_PATH: path to libdb headers files for PersistentTreeMap
618 ifdef USE_SYSTEM_BDB
619 ifneq ($(PLATFORM), windows)
620 ifdef ALT_BDB_HEADERS_PATH
621 BDB_HEADERS_PATH:=$(call FullPath,$(ALT_BDB_HEADERS_PATH))
622 BDB_HEADERS_PATH:=$(call AltCheckValue,BDB_HEADERS_PATH)
623 else
624 BDB_HEADERS_PATH="$(_BDB_HEADERS_PATH)"
625 endif
626 endif
627 endif
628
629 # Utilities ant
630 ifeq ($(PLATFORM), windows)
631 ifeq ($(ANT_HOME),)
632 ANT_HOME := $(call DirExists,$(JDK_DEVTOOLS_DIR)/share/ant/latest,,)
633 endif
634 endif
635
636 # There are few problems with ant we need to workaround:
637 # 1) ant is using temporary directory java.io.tmpdir
638 # However, this directory is not unique enough and two separate ant processes
639 # can easily end up using the exact same temp directory. This may lead to weird build failures
640 # To workaround this we will define tmp dir explicitly
641 # 2) ant attempts to detect JDK location based on java.exe location
642 # This is fragile as developer may have JRE first on the PATH.
643 # To workaround this we will specify JAVA_HOME explicitly
644
645 ANT_TMPDIR = $(ABS_OUTPUTDIR)/tmp
646 ANT_WORKAROUNDS = ANT_OPTS=-Djava.io.tmpdir='$(ANT_TMPDIR)' JAVA_HOME='$(BOOTDIR)'
647
648 ifeq ($(ANT_HOME),)
649 ANT = $(ANT_WORKAROUNDS) ant
650 else
651 ANT = $(ANT_WORKAROUNDS) $(ANT_HOME)/bin/ant
652 endif
653
654 ifdef ALT_COPYRIGHT_YEAR
655 COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR)
656 else
657 COPYRIGHT_YEAR = $(shell $(DATE) '+%Y')
658 endif
659
660 # Create file with source information
661 SOURCE_TIPS=$(ABS_OUTPUTDIR)/source_tips
662
663 # The source tips can come from the Mercurial repository, or in the files
664 # $(HGTIP_FILENAME) which contains the tip but is also positioned in the same
665 # directory as the original $(HGDIR) directory.
666 # These should not be := assignments, only used from the root Makefile.
667 HG_VERSION = $(shell $(HG) version 2> $(DEV_NULL))
668 HG_DIRECTORY=.hg
669 HGTIP_FILENAME=.hgtip
670 HG_SEARCH = ./REPO ./*/REPO ./*/*/REPO ./*/*/*/REPO
671 REPO_LIST = $(patsubst ./%,%,$(patsubst %/,%,$(sort $(dir \
672 $(shell ( $(LS) -d $(HG_SEARCH:%/REPO=%/$(HG_DIRECTORY)) ; \
673 $(LS) $(HG_SEARCH:%/REPO=%/$(HGTIP_FILENAME)) ) \
674 2> $(DEV_NULL))))))
675
676 # Emit the repo:tip pairs to $@
677 define GetSourceTips
678 for i in $(REPO_LIST) IGNORE ; do \
679 if [ "$${i}" = "IGNORE" ] ; then \
680 continue; \
681 elif [ -d $${i}/$(HG_DIRECTORY) -a "$(HG_VERSION)" != "" ] ; then \
682 $(PRINTF) " %s:%s" \
683 "$${i}" `$(HG) tip --repository $${i} --template '{node|short}\n'` ; \
684 elif [ -f $${i}/$(HGTIP_FILENAME) ] ; then \
685 $(PRINTF) " %s:%s" \
686 "$${i}" `$(CAT) $${i}/$(HGTIP_FILENAME)` ; \
687 fi; \
688 done >> $@
689 $(PRINTF) "\n" >> $@
690 endef
691
692 # Create the HGTIP_FILENAME file
693 define CreateHgTip
694 $(HG) tip --repository $1 --template '{node|short}\n' > $1/$(HGTIP_FILENAME);\
695 $(ECHO) $1/$(HGTIP_FILENAME)
696 endef
697
698 # Get the compiler specific settings (will run the compiler to find out)
699 # NOTE: COMPILER_PATH must be set by this time.
700 # Up until we include this file, we don't know what specific compiler
701 # version is actually being used (i.e. what is in PATH or COMPILER_PATH).
702 include $(JDK_MAKE_SHARED_DIR)/Compiler-$(CC_VERSION).gmk
703
--- EOF ---