1 # $NetBSD: java-vm.mk,v 1.72 2010/02/03 00:49:58 minskim Exp $
3 # This Makefile fragment handles Java dependencies and make variables,
4 # and is meant to be included by packages that require Java either at
5 # build-time or at run-time.
7 # User-settable variables:
10 # The JVM that should be used if nothing particular is specified.
12 # Possible values: jdk kaffe openjdk7 openjdk7-bin
13 # jdk14 sun-jdk6 jdk15
14 # Default value: (platform-dependent)
16 # Package-settable variables:
19 # When set to "yes", a build-time dependency on the JDK and
20 # a run-time dependency on the JRE are added.
21 # When set to "run", a run-time dependency on the JRE is added.
22 # When set to "build", a build-time dependency on the JRE is added.
24 # Possible values: yes run build
28 # When the package needs a Java 2 implementation, this variable
29 # should be set to "yes". It can also be set to "1.4", "1.5",
30 # or "6" require an even more recent implementation.
32 # Possible values: yes no 1.4 1.5 6
36 # The list of JVMs that may be used as possible implementations.
38 # Variables set by this file:
41 # The prefix for the Java binaries. The path to the real binaries
42 # is constructed by appending -${program} to it.
45 # * ${JAVA_BINPREFIX}-java is the path to the Java interpreter.
46 # * ${JAVA_BINPREFIX}-javac is the path to the Java compiler.
49 # The name of the selected Java implementation.
52 # The directory where the JVM is installed.
55 .if !defined(JAVA_VM_MK)
59 _USER_VARS.java= PKG_JVM_DEFAULT
60 _PKG_VARS.java= USE_JAVA USE_JAVA2 PKG_JVMS_ACCEPTED
61 _SYS_VARS.java= PKG_JVM PKG_JAVA_HOME JAVA_BINPREFIX
63 .include "../../mk/bsd.prefs.mk"
68 PKG_JVM_DEFAULT?= # empty
69 PKG_JVMS_ACCEPTED?= ${_PKG_JVMS}
71 # This is a list of all of the JDKs that may be used.
73 _PKG_JVMS.7= openjdk7 openjdk7-bin
74 _PKG_JVMS.6= ${_PKG_JVMS.7} sun-jdk6
75 _PKG_JVMS.1.5= ${_PKG_JVMS.6} jdk15
76 _PKG_JVMS.1.4= ${_PKG_JVMS.1.5} jdk14
77 _PKG_JVMS.yes= ${_PKG_JVMS.1.4} kaffe
78 _PKG_JVMS.no= ${_PKG_JVMS.yes} jdk
79 _PKG_JVMS= ${_PKG_JVMS.${USE_JAVA2}}
81 # To be deprecated: if PKG_JVM is explicitly set, then use it as the
82 # default JVM. Note that this has lower precedence than PKG_JVM_DEFAULT.
86 _PKG_JVM_DEFAULT:= ${PKG_JVM}
90 # Set the default JVM for this platform.
92 .if !empty(PKG_JVM_DEFAULT)
93 _PKG_JVM_DEFAULT= ${PKG_JVM_DEFAULT}
95 .if !defined(_PKG_JVM_DEFAULT)
96 . if !empty(MACHINE_PLATFORM:MNetBSD-[456789].*-i386) || \
97 !empty(MACHINE_PLATFORM:MNetBSD-[56789].*-x86_64)
98 _PKG_JVM_DEFAULT?= openjdk7
99 . elif !empty(MACHINE_PLATFORM:MNetBSD-*-i386) || \
100 !empty(MACHINE_PLATFORM:MLinux-*-i[3456]86)
101 _PKG_JVM_DEFAULT?= sun-jdk6
102 . elif !empty(MACHINE_PLATFORM:MDarwin-*-*)
103 _PKG_JVM_DEFAULT?= sun-jdk6
104 . elif !empty(MACHINE_PLATFORM:MSunOS-5.11-i386)
105 _PKG_JVM_DEFAULT?= sun-jdk6
107 _PKG_JVM_DEFAULT?= kaffe
111 # These lists are copied from the JVM package Makefiles.
112 _ONLY_FOR_PLATFORMS.jdk= \
116 _ONLY_FOR_PLATFORMS.jdk14= \
119 _ONLY_FOR_PLATFORMS.jdk15= \
122 _ONLY_FOR_PLATFORMS.kaffe= \
123 *-*-alpha *-*-arm *-*-arm32 *-*-i386 *-*-m68k *-*-mips* *-*-sparc *-*-powerpc
124 _ONLY_FOR_PLATFORMS.sun-jdk6= \
130 NetBSD-*-i386 NetBSD-*-x86_64 \
132 _ONLY_FOR_PLATFORMS.openjdk7= \
135 _ONLY_FOR_PLATFORMS.openjdk7-bin= \
139 # Set the accepted JVMs for this platform.
140 .for _jvm_ in ${_PKG_JVMS}
141 . for _pattern_ in ${_ONLY_FOR_PLATFORMS.${_jvm_}}
142 . if !empty(MACHINE_PLATFORM:M${_pattern_})
143 _PKG_JVMS_ACCEPTED+= ${PKG_JVMS_ACCEPTED:M${_jvm_}}
148 _JAVA_PKGBASE.jdk= jdk
149 _JAVA_PKGBASE.jdk14= jdk14
150 _JAVA_PKGBASE.jdk15= jdk15
151 _JAVA_PKGBASE.kaffe= kaffe
152 _JAVA_PKGBASE.openjdk7= openjdk7
153 _JAVA_PKGBASE.openjdk7-bin= openjdk7-bin
154 _JAVA_PKGBASE.sun-jdk6= sun-jre6
156 # The following is copied from the respective JVM Makefiles.
157 _JAVA_NAME.jdk= jdk11
158 _JAVA_NAME.jdk14= jdk14
159 _JAVA_NAME.kaffe= kaffe
160 _JAVA_NAME.openjdk7= openjdk7
161 _JAVA_NAME.openjdk7-bin= openjdk7-bin
162 _JAVA_NAME.sun-jdk6= sun6
164 # Mark the acceptable JVMs and check which JVM packages are installed.
165 .for _jvm_ in ${_PKG_JVMS_ACCEPTED}
166 _PKG_JVM_OK.${_jvm_}= yes
167 _PKG_JVM_INSTALLED.${_jvm_}!= \
168 if ${PKG_INFO} -qe ${_JAVA_PKGBASE.${_jvm_}}; then \
175 # Use one of the installed JVMs,...
177 .if !defined(_PKG_JVM)
178 . for _jvm_ in ${_PKG_JVMS_ACCEPTED}
179 . if !empty(_PKG_JVM_INSTALLED.${_jvm_}:M[yY][eE][sS])
182 _PKG_JVM_FIRSTACCEPTED?= ${_jvm_}
186 # ...otherwise, prefer the default one if it's accepted,...
188 . if defined(_PKG_JVM_OK.${_PKG_JVM_DEFAULT}) && \
189 !empty(_PKG_JVM_OK.${_PKG_JVM_DEFAULT}:M[yY][eE][sS])
190 _PKG_JVM= ${_PKG_JVM_DEFAULT}
194 # ...otherwise, just use the first accepted JVM.
196 .if !defined(_PKG_JVM)
197 . if defined(_PKG_JVM_FIRSTACCEPTED)
198 _PKG_JVM= ${_PKG_JVM_FIRSTACCEPTED}
202 # If there are no acceptable JVMs, then generate an error.
204 .if !defined(_PKG_JVM)
206 PKG_FAIL_REASON= "no acceptable JVM found"
210 BUILDLINK_API_DEPENDS.jdk?= jdk-[0-9]*
211 BUILDLINK_API_DEPENDS.jdk14?= jdk14-[0-9]*
212 BUILDLINK_API_DEPENDS.jdk15?= jdk15-[0-9]*
213 BUILDLINK_API_DEPENDS.kaffe?= kaffe>=1.1.4
214 BUILDLINK_API_DEPENDS.openjdk7?= openjdk7-[0-9]*
215 BUILDLINK_API_DEPENDS.openjdk7-bin?= openjdk7-bin-[0-9]*
216 BUILDLINK_API_DEPENDS.sun-jdk6?= sun-jdk6-[0-9]*
217 BUILDLINK_API_DEPENDS.sun-jre6?= sun-jre6-[0-9]*
223 _JRE.openjdk7= openjdk7
224 _JRE.openjdk7-bin= openjdk7-bin
225 _JRE.sun-jdk6= sun-jre6
227 _JAVA_BASE_CLASSES= classes.zip
229 .if ${_PKG_JVM} == "jdk"
230 _JDK_PKGSRCDIR= ../../lang/jdk
231 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
232 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/jdk-1.1.8
233 .elif ${_PKG_JVM} == "jdk14"
234 _JDK_PKGSRCDIR= ../../wip/jdk14
235 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
236 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/jdk-1.4.2
237 .elif ${_PKG_JVM} == "jdk15"
238 _JDK_PKGSRCDIR= ../../wip/jdk15
239 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
240 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/jdk-1.5.0
241 .elif ${_PKG_JVM} == "kaffe"
242 _JDK_PKGSRCDIR= ../../lang/kaffe
243 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
244 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/kaffe
245 .elif ${_PKG_JVM} == "openjdk7"
246 _JDK_PKGSRCDIR= ../../lang/openjdk7
247 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
248 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/openjdk7
249 .elif ${_PKG_JVM} == "openjdk7-bin"
250 _JDK_PKGSRCDIR= ../../lang/openjdk7-bin
251 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
252 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/openjdk7-bin
253 .elif ${_PKG_JVM} == "sun-jdk6"
254 _JDK_PKGSRCDIR= ../../lang/sun-jdk6
255 _JRE_PKGSRCDIR= ../../lang/sun-jre6
256 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/sun-6
257 UNLIMIT_RESOURCES+= datasize
260 .if defined(_JAVA_HOME_DEFAULT)
261 _JAVA_HOME= ${_JAVA_HOME_DEFAULT}
263 EVAL_PREFIX+= _JAVA_HOME=${_JAVA_PKGBASE.${_PKG_JVM}}
266 # If we are not using Java for building, then we need a run-time dependency on
267 # the JRE, otherwise, build-time dependency on the JRE.
268 .if defined(_JRE_PKGSRCDIR)
269 . if exists(${_JRE_PKGSRCDIR}/buildlink3.mk)
270 . if !empty(USE_JAVA:M[bB][uU][iI][lL][dD])
271 BUILDLINK_DEPMETHOD.${_JRE.${_PKG_JVM}}= build
273 . include "${_JRE_PKGSRCDIR}/buildlink3.mk"
277 # If we are building Java software, then we need a build-time dependency on
280 .if !empty(USE_JAVA:M[yE][eE][sS])
281 . if defined(_JDK_PKGSRCDIR)
282 . if exists(${_JDK_PKGSRCDIR}/buildlink3.mk)
283 . include "${_JDK_PKGSRCDIR}/buildlink3.mk"
288 PKG_JVM:= ${_PKG_JVM}
289 .if defined(BUILDLINK_JAVA_PREFIX.${_PKG_JVM})
290 PKG_JAVA_HOME?= ${BUILDLINK_JAVA_PREFIX.${_PKG_JVM}}
292 PKG_JAVA_HOME?= ${_JAVA_HOME}
294 .if !defined(CLASSPATH)
295 CLASSPATH_cmd= ${ECHO} `for p in \
296 ${PKG_JAVA_HOME}/lib/${_JAVA_BASE_CLASSES} \
297 ${PKG_JAVA_HOME}/lib/tools.jar; do \
298 ${TEST} ! -f $$p || ${ECHO} $$p; done` \
300 CLASSPATH?= ${CLASSPATH_cmd:sh}
303 ALL_ENV+= CLASSPATH=${CLASSPATH:Q}
304 ALL_ENV+= JAVA_HOME=${PKG_JAVA_HOME}
305 BUILD_DEFS+= ${_USER_VARS.java}
306 BUILD_DEFS_EFFECTS+= ${_SYS_VARS.java}
307 MAKEFLAGS+= PKG_JVM=${PKG_JVM:Q}
308 PREPEND_PATH+= ${PKG_JAVA_HOME}/bin
309 JAVA_BINPREFIX= ${LOCALBASE}/bin/${_JAVA_NAME.${_PKG_JVM}}
311 PLIST_SUBST+= PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}
312 FILES_SUBST+= PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}