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 # sun-jdk14 jdk14 sun-jdk15 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} sun-jdk15 jdk15
76 _PKG_JVMS.1.4= ${_PKG_JVMS.1.5} sun-jdk14 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-jdk
102 . elif !empty(MACHINE_PLATFORM:MDarwin-*-*)
103 _PKG_JVM_DEFAULT?= sun-jdk
104 . elif !empty(MACHINE_PLATFORM:MSunOS-5.11-i386)
105 _PKG_JVM_DEFAULT?= sun-jdk
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-jdk14= \
130 _ONLY_FOR_PLATFORMS.sun-jdk15= \
135 NetBSD-*-i386 NetBSD-*-x86_64
136 _ONLY_FOR_PLATFORMS.sun-jdk6= \
142 NetBSD-*-i386 NetBSD-*-x86_64 \
144 _ONLY_FOR_PLATFORMS.openjdk7= \
147 _ONLY_FOR_PLATFORMS.openjdk7-bin= \
151 # Set the accepted JVMs for this platform.
152 .for _jvm_ in ${_PKG_JVMS}
153 . for _pattern_ in ${_ONLY_FOR_PLATFORMS.${_jvm_}}
154 . if !empty(MACHINE_PLATFORM:M${_pattern_})
155 _PKG_JVMS_ACCEPTED+= ${PKG_JVMS_ACCEPTED:M${_jvm_}}
160 _JAVA_PKGBASE.jdk= jdk
161 _JAVA_PKGBASE.jdk14= jdk14
162 _JAVA_PKGBASE.jdk15= jdk15
163 _JAVA_PKGBASE.kaffe= kaffe
164 _JAVA_PKGBASE.openjdk7= openjdk7
165 _JAVA_PKGBASE.openjdk7-bin= openjdk7-bin
166 _JAVA_PKGBASE.sun-jdk14= sun-jre14
167 _JAVA_PKGBASE.sun-jdk15= sun-jre15
168 _JAVA_PKGBASE.sun-jdk6= sun-jre6
170 # The following is copied from the respective JVM Makefiles.
171 _JAVA_NAME.jdk= jdk11
172 _JAVA_NAME.jdk14= jdk14
173 _JAVA_NAME.kaffe= kaffe
174 _JAVA_NAME.openjdk7= openjdk7
175 _JAVA_NAME.openjdk7-bin= openjdk7-bin
176 _JAVA_NAME.sun-jdk14= sun14
177 _JAVA_NAME.sun-jdk15= sun15
178 _JAVA_NAME.sun-jdk6= sun6
180 # Mark the acceptable JVMs and check which JVM packages are installed.
181 .for _jvm_ in ${_PKG_JVMS_ACCEPTED}
182 _PKG_JVM_OK.${_jvm_}= yes
183 _PKG_JVM_INSTALLED.${_jvm_}!= \
184 if ${PKG_INFO} -qe ${_JAVA_PKGBASE.${_jvm_}}; then \
191 # Convert "sun-jdk" into "sun-jdk1[45]" depending on the
192 # platform. Recent versions of NetBSD and Linux can use the 1.4-1.5
193 # versions of the Sun JDK, so default to the newer installed one.
195 .if ${_PKG_JVM_DEFAULT} == "sun-jdk"
196 . if !empty(MACHINE_PLATFORM:MNetBSD-1.6[M-Z]*-i386) || \
197 !empty(MACHINE_PLATFORM:MNetBSD-[2-9].*-i386) || \
198 !empty(MACHINE_PLATFORM:MNetBSD-[2-9].*-x86_64) || \
199 !empty(MACHINE_PLATFORM:MLinux-*-i[3456]86) || \
200 !empty(MACHINE_PLATFORM:MDarwin-[8-9].*-*) || \
201 !empty(MACHINE_PLATFORM:MDarwin-10.*-*) || \
202 !empty(MACHINE_PLATFORM:MSunOS-5.11-i386)
203 . if defined(_PKG_JVM_INSTALLED.sun-jdk6) && \
204 (${_PKG_JVM_INSTALLED.sun-jdk6} == "yes")
205 _PKG_JVM_DEFAULT= sun-jdk6
206 . elif defined(_PKG_JVM_INSTALLED.sun-jdk15) && \
207 (${_PKG_JVM_INSTALLED.sun-jdk15} == "yes")
208 _PKG_JVM_DEFAULT= sun-jdk15
209 . elif defined(_PKG_JVM_INSTALLED.sun-jdk14) && \
210 (${_PKG_JVM_INSTALLED.sun-jdk14} == "yes")
211 _PKG_JVM_DEFAULT= sun-jdk14
213 _PKG_JVM_DEFAULT= sun-jdk6
218 # Use one of the installed JVMs,...
220 .if !defined(_PKG_JVM)
221 . for _jvm_ in ${_PKG_JVMS_ACCEPTED}
222 . if !empty(_PKG_JVM_INSTALLED.${_jvm_}:M[yY][eE][sS])
225 _PKG_JVM_FIRSTACCEPTED?= ${_jvm_}
229 # ...otherwise, prefer the default one if it's accepted,...
231 . if defined(_PKG_JVM_OK.${_PKG_JVM_DEFAULT}) && \
232 !empty(_PKG_JVM_OK.${_PKG_JVM_DEFAULT}:M[yY][eE][sS])
233 _PKG_JVM= ${_PKG_JVM_DEFAULT}
237 # ...otherwise, just use the first accepted JVM.
239 .if !defined(_PKG_JVM)
240 . if defined(_PKG_JVM_FIRSTACCEPTED)
241 _PKG_JVM= ${_PKG_JVM_FIRSTACCEPTED}
245 # If there are no acceptable JVMs, then generate an error.
247 .if !defined(_PKG_JVM)
249 PKG_FAIL_REASON= "no acceptable JVM found"
253 BUILDLINK_API_DEPENDS.jdk?= jdk-[0-9]*
254 BUILDLINK_API_DEPENDS.jdk14?= jdk14-[0-9]*
255 BUILDLINK_API_DEPENDS.jdk15?= jdk15-[0-9]*
256 BUILDLINK_API_DEPENDS.kaffe?= kaffe>=1.1.4
257 BUILDLINK_API_DEPENDS.openjdk7?= openjdk7-[0-9]*
258 BUILDLINK_API_DEPENDS.openjdk7-bin?= openjdk7-bin-[0-9]*
259 BUILDLINK_API_DEPENDS.sun-jdk14?= sun-jdk14-[0-9]*
260 BUILDLINK_API_DEPENDS.sun-jre14?= sun-jre14-[0-9]*
261 BUILDLINK_API_DEPENDS.sun-jdk15?= sun-jdk15-[0-9]*
262 BUILDLINK_API_DEPENDS.sun-jre15?= sun-jre15-[0-9]*
263 BUILDLINK_API_DEPENDS.sun-jdk6?= sun-jdk6-[0-9]*
264 BUILDLINK_API_DEPENDS.sun-jre6?= sun-jre6-[0-9]*
270 _JRE.openjdk7= openjdk7
271 _JRE.openjdk7-bin= openjdk7-bin
272 _JRE.sun-jdk14= sun-jre14
273 _JRE.sun-jdk15= sun-jre15
274 _JRE.sun-jdk6= sun-jre6
276 _JAVA_BASE_CLASSES= classes.zip
278 .if ${_PKG_JVM} == "jdk"
279 _JDK_PKGSRCDIR= ../../lang/jdk
280 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
281 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/jdk-1.1.8
282 .elif ${_PKG_JVM} == "jdk14"
283 _JDK_PKGSRCDIR= ../../wip/jdk14
284 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
285 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/jdk-1.4.2
286 .elif ${_PKG_JVM} == "jdk15"
287 _JDK_PKGSRCDIR= ../../wip/jdk15
288 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
289 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/jdk-1.5.0
290 .elif ${_PKG_JVM} == "kaffe"
291 _JDK_PKGSRCDIR= ../../lang/kaffe
292 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
293 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/kaffe
294 .elif ${_PKG_JVM} == "openjdk7"
295 _JDK_PKGSRCDIR= ../../lang/openjdk7
296 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
297 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/openjdk7
298 .elif ${_PKG_JVM} == "openjdk7-bin"
299 _JDK_PKGSRCDIR= ../../lang/openjdk7-bin
300 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
301 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/openjdk7-bin
302 .elif ${_PKG_JVM} == "sun-jdk14"
303 _JDK_PKGSRCDIR= ../../lang/sun-jdk14
304 _JRE_PKGSRCDIR= ../../lang/sun-jre14
305 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/sun-1.4
306 .elif ${_PKG_JVM} == "sun-jdk15"
307 _JDK_PKGSRCDIR= ../../lang/sun-jdk15
308 _JRE_PKGSRCDIR= ../../lang/sun-jre15
309 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/sun-1.5
310 UNLIMIT_RESOURCES+= datasize
311 .elif ${_PKG_JVM} == "sun-jdk6"
312 _JDK_PKGSRCDIR= ../../lang/sun-jdk6
313 _JRE_PKGSRCDIR= ../../lang/sun-jre6
314 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/sun-6
315 UNLIMIT_RESOURCES+= datasize
318 .if defined(_JAVA_HOME_DEFAULT)
319 _JAVA_HOME= ${_JAVA_HOME_DEFAULT}
321 EVAL_PREFIX+= _JAVA_HOME=${_JAVA_PKGBASE.${_PKG_JVM}}
324 # If we are not using Java for building, then we need a run-time dependency on
325 # the JRE, otherwise, build-time dependency on the JRE.
326 .if defined(_JRE_PKGSRCDIR)
327 . if exists(${_JRE_PKGSRCDIR}/buildlink3.mk)
328 . if !empty(USE_JAVA:M[bB][uU][iI][lL][dD])
329 BUILDLINK_DEPMETHOD.${_JRE.${_PKG_JVM}}= build
331 . include "${_JRE_PKGSRCDIR}/buildlink3.mk"
335 # If we are building Java software, then we need a build-time dependency on
338 .if !empty(USE_JAVA:M[yE][eE][sS])
339 . if defined(_JDK_PKGSRCDIR)
340 . if exists(${_JDK_PKGSRCDIR}/buildlink3.mk)
341 . include "${_JDK_PKGSRCDIR}/buildlink3.mk"
346 PKG_JVM:= ${_PKG_JVM}
347 .if defined(BUILDLINK_JAVA_PREFIX.${_PKG_JVM})
348 PKG_JAVA_HOME?= ${BUILDLINK_JAVA_PREFIX.${_PKG_JVM}}
350 PKG_JAVA_HOME?= ${_JAVA_HOME}
352 .if !defined(CLASSPATH)
353 CLASSPATH_cmd= ${ECHO} `for p in \
354 ${PKG_JAVA_HOME}/lib/${_JAVA_BASE_CLASSES} \
355 ${PKG_JAVA_HOME}/lib/tools.jar; do \
356 ${TEST} ! -f $$p || ${ECHO} $$p; done` \
358 CLASSPATH?= ${CLASSPATH_cmd:sh}
361 ALL_ENV+= CLASSPATH=${CLASSPATH:Q}
362 ALL_ENV+= JAVA_HOME=${PKG_JAVA_HOME}
363 BUILD_DEFS+= ${_USER_VARS.java}
364 BUILD_DEFS_EFFECTS+= ${_SYS_VARS.java}
365 MAKEFLAGS+= PKG_JVM=${PKG_JVM:Q}
366 PREPEND_PATH+= ${PKG_JAVA_HOME}/bin
367 JAVA_BINPREFIX= ${LOCALBASE}/bin/${_JAVA_NAME.${_PKG_JVM}}
369 PLIST_SUBST+= PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}
370 FILES_SUBST+= PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}