blob: c2a8278bddf13ce75b88684b98311fed1dc2bd84 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001#
2# Copyright 2005-2007 Sun Microsystems, Inc. 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. Sun designates this
8# particular file as subject to the "Classpath" exception as provided
9# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22# CA 95054 USA or visit www.sun.com if you need additional information or
23# have any 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
52include $(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
57define PwdPath
58$(shell cd $1 2> $(DEV_NULL) && pwd)
59endef
60
61# Checks an ALT value for spaces (should be one word),
62# warns and returns Check_ALT_$1 if spaces
63define AltCheckSpaces
64$(if $(word 2,$($1)),$(warning "WARNING: Value of $1 contains a space: '$($1)', check or set ALT_$1")Check_ALT_$1,$($1))
65endef
66
67# Checks an ALT value for empty, warns and returns Check_ALT_$1 if empty
68define AltCheckValue
69$(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, check or set ALT_$1")Check_ALT_$1)
70endef
71
72# Checks any value for empty, warns and returns $2 if empty
73define CheckValue
74$(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, will use '$2'")$2)
75endef
76
77# Prefix for a utility prefix path, if empty leave alone, otherwise end with a /
78define PrefixPath
79$(if $1,$(subst //,/,$1/),)
80endef
81
82# Select a directory if it exists, or the alternate 2 or the alternate 3
83define DirExists
84$(shell \
85 if [ -d "$1" ]; then \
86 echo "$1"; \
87 elif [ -d "$2" ]; then \
88 echo "$2"; \
89 else \
90 echo "$3"; \
91 fi)
92endef
93
94# Select a writable directory if it exists and is writable, or the alternate
95define WriteDirExists
96$(shell \
97 if [ -d "$1" -a -w "$1" ]; then \
98 echo "$1"; \
99 else \
100 echo "$2"; \
101 fi)
102endef
103
104# Select a file if it exists, or the alternate 1, or the alternate 2
105define FileExists
106$(shell \
107 if [ -r "$1" ]; then \
108 echo "$1"; \
109 elif [ -r "$2" ]; then \
110 echo "$2"; \
111 else \
112 echo "NO_FILE_EXISTS"; \
113 fi)
114endef
115
116# Given a line of text, get the major.minor version number from it
117define GetVersion
118$(shell echo $1 | sed -e 's@[^1-9]*\([1-9][0-9]*\.[0-9][0-9]*\).*@\1@' )
119endef
120
121# Given a major.minor.micro version, return the major, minor, or micro number
122define MajorVersion
123$(if $(word 1, $(subst ., ,$1)),$(word 1, $(subst ., ,$1)),0)
124endef
125define MinorVersion
126$(if $(word 2, $(subst ., ,$1)),$(word 2, $(subst ., ,$1)),0)
127endef
128define MicroVersion
129$(if $(word 3, $(subst ., ,$1)),$(word 3, $(subst ., ,$1)),0)
130endef
131
132# Macro that returns missing, same, newer, or older $1=version $2=required
133# (currently does not check the micro number)
134define CheckVersions
135$(shell \
136 if [ "$1" = "" -o "$2" = "" ]; then \
137 echo missing; \
138 else \
139 if [ "$1" = "$2" ]; then \
140 echo same; \
141 else \
142 if [ $(call MajorVersion,$1) -lt $(call MajorVersion,$2) ] ; then \
143 echo older; \
144 else \
145 if [ $(call MajorVersion,$1) -eq $(call MajorVersion,$2) -a \
146 $(call MinorVersion,$1) -lt $(call MinorVersion,$2) ]; then \
147 echo older; \
148 else \
149 echo newer; \
150 fi; \
151 fi; \
152 fi; \
153 fi)
154endef
155
156# Make sure certain variables are non-empty at this point
157_check_values:=\
158$(call CheckValue,ARCH,),\
159$(call CheckValue,ARCH_DATA_MODEL,),\
160$(call CheckValue,ARCH_VM_SUBDIR,),\
161$(call CheckValue,JDK_TOPDIR,),\
162$(call CheckValue,JDK_MAKE_SHARED_DIR,),\
163$(call CheckValue,VARIANT,),\
164$(call CheckValue,PLATFORM,)
165
166# Misc common settings for all workspaces
167# This determines the version of the product, and the previous version or boot
168ifndef JDK_MAJOR_VERSION
169 JDK_MAJOR_VERSION = 1
170 PREVIOUS_MAJOR_VERSION = 1
171endif
172
173ifndef JDK_MINOR_VERSION
174 JDK_MINOR_VERSION = 7
175 PREVIOUS_MINOR_VERSION = 6
176endif
177
178ifndef JDK_MICRO_VERSION
179 JDK_MICRO_VERSION = 0
180 PREVIOUS_MICRO_VERSION = 0
181endif
182
183ifndef MILESTONE
184 MILESTONE = internal
185endif
186
187# Default names
188LAUNCHER_NAME = java
189PRODUCT_NAME = Java(TM)
190PRODUCT_SUFFIX = SE Runtime Environment
191COMPANY_NAME = Sun Microsystems, Inc.
192
193ifdef OPENJDK
194 LAUNCHER_NAME = openjdk
195 PRODUCT_NAME = OpenJDK
196 PRODUCT_SUFFIX = Runtime Environment
197 COMPANY_NAME =
198endif
199
200RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX)
201
202ifndef BUILD_NUMBER
203 JDK_BUILD_NUMBER = b00
204else
205 ifndef JDK_BUILD_NUMBER
206 JDK_BUILD_NUMBER = $(BUILD_NUMBER)
207 endif
208endif
209
210# Default variant is the optimized version of everything
211# can be OPT or DBG, default is OPT
212# Determine the extra pattern to add to the release name for debug/fastdebug.
213# Determine the JDK_IMPORT_VARIANT, so we get the right VM files copied over.
214# Determine suffix for obj directory or OBJDIR, for .o files.
215# (by keeping .o files separate, just .o files, they don't clobber each
216# other, however, the library files will clobber each other).
217#
218ifeq ($(VARIANT), DBG)
219 BUILD_VARIANT_RELEASE=-debug
220 OBJDIRNAME_SUFFIX=_g
221else
222 BUILD_VARIANT_RELEASE=
223 OBJDIRNAME_SUFFIX=
224endif
225ifeq ($(FASTDEBUG), true)
226 VARIANT=DBG
227 BUILD_VARIANT_RELEASE=-fastdebug
228 OBJDIRNAME_SUFFIX=_gO
229 _JDK_IMPORT_VARIANT=/fastdebug
230endif
231
232# Depending on the flavor of the build, add a -debug or -fastdebug to the name
233ifdef DEBUG_NAME
234 BUILD_VARIANT_RELEASE=-$(DEBUG_NAME)
235endif
236
237# These default values are redefined during a release build.
238# CTE can set JDK_UPDATE_VERSION during the update release
239ifdef JDK_UPDATE_VERSION
240 JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)_$(JDK_UPDATE_VERSION)
241 MARKETING_NUMBER := $(shell \
242 $(ECHO) $(JDK_UPDATE_VERSION) | $(NAWK) '{if (substr($$0,1,1)=="0") print substr($$0, 2); else print $$0;}')
243 MARKET_NAME= $(shell $(ECHO) " Update $(MARKETING_NUMBER)")
244 JDK_MKTG_VERSION = $(JDK_MINOR_VERSION)u$(MARKETING_NUMBER)
245else
246 JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)
247 JDK_MKTG_VERSION = $(JDK_MINOR_VERSION)
248 MARKET_NAME=
249endif
250JDK_UNDERSCORE_VERSION = $(subst .,_,$(JDK_VERSION))
251JDK_MKTG_UNDERSCORE_VERSION = $(subst .,_,$(JDK_MKTG_VERSION))
252
253# RELEASE is JDK_VERSION and -MILESTONE if MILESTONE is set
254ifneq ($(MILESTONE),fcs)
255 RELEASE = $(JDK_VERSION)-$(MILESTONE)$(BUILD_VARIANT_RELEASE)
256else
257 RELEASE = $(JDK_VERSION)$(BUILD_VARIANT_RELEASE)
258endif
259
260# FULL_VERSION is RELEASE and -BUILD_NUMBER if BUILD_NUMBER is set
261ifdef BUILD_NUMBER
262 FULL_VERSION = $(RELEASE)-$(BUILD_NUMBER)
263else
264 BUILD_NUMBER = b00
265 USER_RELEASE_SUFFIX := $(shell echo $(USER)_`date '+%d_%b_%Y_%H_%M' | tr "A-Z" "a-z"`)
266 FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER)
267endif
268
269# Promoted build location
270PROMOTED_RE_AREA = $(SLASH_JAVA)/re/jdk/$(JDK_VERSION)/promoted
271PROMOTED_BUILD_LATEST = latest
272PROMOTED_BUILD_BASEDIR = $(PROMOTED_RE_AREA)/$(PROMOTED_BUILD_LATEST)
273PROMOTED_BUILD_BINARIES = $(PROMOTED_BUILD_BASEDIR)/binaries
274
275# OPT: Changes what the optimizations settings (in _OPT)
276POPT = $(_OPT$(ALT_OPT))$(ALT_OPT)
277
278# PARALLEL_COMPILE_JOBS: is the number of compiles done in parallel.
279# If the user sets ALT_PARALLEL_COMPILE_JOBS, then COMPILE_APPROACH is set
280# to parallel.
281#
282# Recommended setting: 2 seems to be ideal for single cpu machines,
283# 2 times the number of CPU's is a basic formula,
284# but probably not more than 4 if the machine is
285# being shared by others, or the machine is limited
286# in RAM or swap.
287#
288ifdef ALT_PARALLEL_COMPILE_JOBS
289 PARALLEL_COMPILE_JOBS=$(ALT_PARALLEL_COMPILE_JOBS)
290else
291 PARALLEL_COMPILE_JOBS=2
292endif
293
294# Previous JDK release (version of BOOTDIR version)
295ifdef ALT_PREVIOUS_JDK_VERSION
296 PREVIOUS_JDK_VERSION = $(ALT_PREVIOUS_JDK_VERSION)
297else
298 PREVIOUS_JDK_VERSION = $(PREVIOUS_MAJOR_VERSION).$(PREVIOUS_MINOR_VERSION).$(PREVIOUS_MICRO_VERSION)
299endif
300export PREVIOUS_JDK_VERSION
301PREVIOUS_JDK_VERSION:=$(call AltCheckSpaces,PREVIOUS_JDK_VERSION)
302PREVIOUS_JDK_VERSION:=$(call AltCheckValue,PREVIOUS_JDK_VERSION)
303
304# Version with _ instead of . in number
305ifeq ($(PREVIOUS_MINOR_VERSION),5)
306 PREVIOUS_JDK_UNDERSCORE_VERSION = $(subst .,_,$(PREVIOUS_JDK_VERSION))
307else
308 PREVIOUS_JDK_UNDERSCORE_VERSION = $(PREVIOUS_MINOR_VERSION)
309endif
310
311# Include any private definitions for this set of workspaces
312_PRIVATE_DEFS_FILE=$(JDK_MAKE_SHARED_DIR)/PrivateDefs.gmk
313USING_PRIVATE_DEFS:=$(shell if [ -f $(_PRIVATE_DEFS_FILE) ]; then echo true; else echo false; fi)
314ifeq ($(USING_PRIVATE_DEFS),true)
315dummy:=$(warning "WARNING: Using definitions from $(_PRIVATE_DEFS_FILE)")
316include $(_PRIVATE_DEFS_FILE)
317endif
318
319# Get platform specific settings
320include $(JDK_MAKE_SHARED_DIR)/Defs-$(PLATFORM).gmk
321
322# Components
323ifdef ALT_LANGTOOLS_DIST
324 LANGTOOLS_DIST :=$(call FullPath,$(ALT_LANGTOOLS_DIST))
325else
326 LANGTOOLS_DIST =
327endif
328ifdef ALT_CORBA_DIST
329 CORBA_DIST :=$(call FullPath,$(ALT_CORBA_DIST))
330else
331 CORBA_DIST =
332endif
333ifdef ALT_JAXP_DIST
334 JAXP_DIST :=$(call FullPath,$(ALT_JAXP_DIST))
335else
336 JAXP_DIST =
337endif
338ifdef ALT_JAXWS_DIST
339 JAXWS_DIST :=$(call FullPath,$(ALT_JAXWS_DIST))
340else
341 JAXWS_DIST =
342endif
343
344# HOTSPOT_DOCS_IMPORT_PATH: Path to hotspot docs files to import into the docs generation
345ifdef ALT_HOTSPOT_DOCS_IMPORT_PATH
346 HOTSPOT_DOCS_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_DOCS_IMPORT_PATH))
347else
348 HOTSPOT_DOCS_IMPORT_PATH :=$(call DirExists,$(HOTSPOT_IMPORT_PATH)/docs,$(PROMOTED_BUILD_BASEDIR)/docs,/NO_DOCS_DIR)
349endif
350
351# PREVIOUS_JDK_FILE: filename of install bundle for previous JDK
352ifdef ALT_PREVIOUS_JDK_FILE
353 PREVIOUS_JDK_FILE =$(ALT_PREVIOUS_JDK_FILE)
354else
355 PREVIOUS_JDK_FILE = jdk-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX)
356endif
357export PREVIOUS_JDK_FILE
358PREVIOUS_JDK_FILE:=$(call AltCheckSpaces,PREVIOUS_JDK_FILE)
359PREVIOUS_JDK_FILE:=$(call AltCheckValue,PREVIOUS_JDK_FILE)
360
361# PREVIOUS_JRE_FILE: filename of install bundle for previous JRE
362ifdef ALT_PREVIOUS_JRE_FILE
363 PREVIOUS_JRE_FILE =$(ALT_PREVIOUS_JRE_FILE)
364else
365 PREVIOUS_JRE_FILE = jre-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX)
366endif
367export PREVIOUS_JRE_FILE
368PREVIOUS_JRE_FILE:=$(call AltCheckSpaces,PREVIOUS_JRE_FILE)
369PREVIOUS_JRE_FILE:=$(call AltCheckValue,PREVIOUS_JRE_FILE)
370
371# Set here as shared variables
372PREVIOUS_JRE_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JRE_FILE)
373PREVIOUS_JDK_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JDK_FILE)
374
375# These are the same on all platforms but require the above platform include 1st
376
377# BOOTDIR: Bootstrap JDK, previous released JDK.
378# _BOOTDIR1 and _BOOTDIR2 picked by platform
379ifdef ALT_BOOTDIR
380 BOOTDIR =$(ALT_BOOTDIR)
381else
382 BOOTDIR :=$(call DirExists,$(_BOOTDIR1),$(_BOOTDIR2),/NO_BOOTDIR)
383endif
384export BOOTDIR
385BOOTDIR:=$(call AltCheckSpaces,BOOTDIR)
386BOOTDIR:=$(call AltCheckValue,BOOTDIR)
387
388# PREVIOUS_RELEASE_PATH: path to where previous release bundles are
389ifdef ALT_PREVIOUS_RELEASE_PATH
390 PREVIOUS_RELEASE_PATH :=$(call OptFullPath,$(ALT_PREVIOUS_RELEASE_PATH))
391else
392 PREVIOUS_RELEASE_PATH =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/bundles/$(PLATFORM)-$(ARCH)
393endif
394export PREVIOUS_RELEASE_PATH
395PREVIOUS_RELEASE_PATH:=$(call AltCheckSpaces,PREVIOUS_RELEASE_PATH)
396PREVIOUS_RELEASE_PATH:=$(call AltCheckValue,PREVIOUS_RELEASE_PATH)
397
398# PREVIOUS_RELEASE_IMAGE: Previous install image to compare against
399ifdef ALT_PREVIOUS_RELEASE_IMAGE
400 PREVIOUS_RELEASE_IMAGE :=$(call FullPath,$(ALT_PREVIOUS_RELEASE_IMAGE))
401endif
402
403# CACERTS_FILE: if OPENJDK is false and the internal version of the file
404# (that is, non-empty) is available, use it, otherwise use an
405# empty keystore.
406#
407# We put this variable here for sanity checks and in case another
408# components will need to know which cacerts file is being used.
409#
410ifdef ALT_CACERTS_FILE
411 CACERTS_FILE = $(ALT_CACERTS_FILE)
412else
413 CACERTS_EXT = $(SHARE_SRC)/lib/security/cacerts
414 ifdef OPENJDK
415 CACERTS_FILE :=$(CACERTS_EXT)
416 else # (!OPENJDK)
417 CACERTS_INT = $(CLOSED_SHARE_SRC)/lib/security/cacerts.internal
418 CACERTS_FILE :=$(call FileExists,$(CACERTS_INT),$(CACERTS_EXT))
419 endif # (OPENJDK)
420endif
421CACERTS_FILE:=$(call AltCheckSpaces,CACERTS_FILE)
422CACERTS_FILE:=$(call AltCheckValue,CACERTS_FILE)
423
424# OUTPUTDIR: Location of all output for the build
425_BACKUP_OUTPUTDIR = $(TEMP_DISK)/$(USER)/jdk-outputdir
426ifdef ALT_OUTPUTDIR
427 _POSSIBLE_OUTPUTDIR =$(subst \,/,$(ALT_OUTPUTDIR))
428else
429 ifndef _OUTPUTDIR
430 _OUTPUTDIR = $(_BACKUP_OUTPUTDIR)
431 endif
432 _POSSIBLE_OUTPUTDIR =$(_OUTPUTDIR)
433endif
434_create_outputdir1:=$(shell mkdir -p $(_POSSIBLE_OUTPUTDIR) > $(DEV_NULL) 2>&1)
435OUTPUTDIR:=$(call WriteDirExists,$(_POSSIBLE_OUTPUTDIR),$(_BACKUP_OUTPUTDIR))
436_create_outputdir2:=$(shell mkdir -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1)
437ifeq "$(OUTPUTDIR)" "$(_BACKUP_OUTPUTDIR)"
438 _outputdir_warning:=$(warning "WARNING: OUTPUTDIR '$(_POSSIBLE_OUTPUTDIR)' not writable, will use '$(_BACKUP_OUTPUTDIR)'")
439endif
440OUTPUTDIR:=$(call AltCheckSpaces,OUTPUTDIR)
441OUTPUTDIR:=$(call AltCheckValue,OUTPUTDIR)
442
443# Bin directory
444# NOTE: ISA_DIR is usually empty, on Solaris it might be /sparcv9 or /amd64
445BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR)
446
447# MOZILLA_HEADERS_PATH: path to mozilla header files for plugin
448ifdef ALT_MOZILLA_HEADERS_PATH
449 MOZILLA_HEADERS_PATH :=$(call FullPath,$(ALT_MOZILLA_HEADERS_PATH))
450else
451 MOZILLA_HEADERS_PATH =$(JDK_DEVTOOLS_DIR)/share/plugin
452endif
453MOZILLA_HEADERS_PATH:=$(call AltCheckSpaces,MOZILLA_HEADERS_PATH)
454MOZILLA_HEADERS_PATH:=$(call AltCheckValue,MOZILLA_HEADERS_PATH)
455
456# CUPS_HEADERS_PATH: path to Cups headers files for Unix printing
457ifneq ($(PLATFORM), windows)
458JDK_CUPS_HEADERS_PATH=$(JDK_DEVTOOLS_DIR)/share/cups/include
459 ifdef ALT_CUPS_HEADERS_PATH
460 CUPS_HEADERS_PATH:=$(call FullPath,$(ALT_CUPS_HEADERS_PATH))
461 CUP_HEADERS_PATH:=$(call AltCheckValue,CUPS_HEADERS_PATH)
462 else
463 CUPS_HEADERS_PATH:= \
464 $(shell if [ -d "$(JDK_CUPS_HEADERS_PATH)" ]; then \
465 echo "$(JDK_CUPS_HEADERS_PATH)"; \
466 else \
467 echo "$(_CUPS_HEADERS_PATH)";\
468 fi)
469 endif
470endif
471
472ifdef ALT_COPYRIGHT_YEAR
473 COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR)
474else
475 COPYRIGHT_YEAR = $(shell $(DATE) '+%Y')
476endif
477
478# Absolute path to output directory
479ABS_OUTPUTDIR:=$(call FullPath,$(OUTPUTDIR))
480
481# Get shared compiler settings
482include $(JDK_MAKE_SHARED_DIR)/Compiler.gmk
483