1 # $NetBSD: java-vm.mk,v 1.68 2009/04/10 09:05:25 abs 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-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 is added.
20 # When set to "run", a run-time dependency on the JRE is added.
22 # Possible values: yes run
26 # When the package needs a Java 2 implementation, this variable
27 # should be set to "yes". It can also be set to "1.4", "1.5",
28 # or "6" require an even more recent implementation.
30 # Possible values: yes no 1.4 1.5 6
34 # The list of JVMs that may be used as possible implementations.
36 # Variables set by this file:
39 # The prefix for the Java binaries. The path to the real binaries
40 # is constructed by appending -${program} to it.
43 # * ${JAVA_BINPREFIX}-java is the path to the Java interpreter.
44 # * ${JAVA_BINPREFIX}-javac is the path to the Java compiler.
47 # The name of the selected Java implementation.
50 # The directory where the JVM is installed.
53 .if !defined(JAVA_VM_MK)
57 _USER_VARS.java= PKG_JVM_DEFAULT
58 _PKG_VARS.java= USE_JAVA USE_JAVA2 PKG_JVMS_ACCEPTED
59 _SYS_VARS.java= PKG_JVM PKG_JAVA_HOME JAVA_BINPREFIX
61 .include "../../mk/bsd.prefs.mk"
66 PKG_JVM_DEFAULT?= # empty
67 PKG_JVMS_ACCEPTED?= ${_PKG_JVMS}
69 # This is a list of all of the JDKs that may be used.
71 _PKG_JVMS.7= openjdk7-bin
72 _PKG_JVMS.6= ${_PKG_JVMS.7} sun-jdk6
73 _PKG_JVMS.1.5= ${_PKG_JVMS.6} sun-jdk15 jdk15
74 _PKG_JVMS.1.4= ${_PKG_JVMS.1.5} sun-jdk14 jdk14
75 _PKG_JVMS.yes= ${_PKG_JVMS.1.4} kaffe
76 _PKG_JVMS.no= ${_PKG_JVMS.yes} jdk
77 _PKG_JVMS= ${_PKG_JVMS.${USE_JAVA2}}
79 # To be deprecated: if PKG_JVM is explicitly set, then use it as the
80 # default JVM. Note that this has lower precedence than PKG_JVM_DEFAULT.
84 _PKG_JVM_DEFAULT:= ${PKG_JVM}
88 # Set the default JVM for this platform.
90 .if !empty(PKG_JVM_DEFAULT)
91 _PKG_JVM_DEFAULT= ${PKG_JVM_DEFAULT}
93 .if !defined(_PKG_JVM_DEFAULT)
94 . if !empty(MACHINE_PLATFORM:MNetBSD-[56789].*-i386)
95 _PKG_JVM_DEFAULT?= openjdk7-bin
96 . elif !empty(MACHINE_PLATFORM:MNetBSD-*-i386) || \
97 !empty(MACHINE_PLATFORM:MLinux-*-i[3456]86)
98 _PKG_JVM_DEFAULT?= sun-jdk
99 . elif !empty(MACHINE_PLATFORM:MDarwin-*-*)
100 _PKG_JVM_DEFAULT?= sun-jdk
101 . elif !empty(MACHINE_PLATFORM:MSunOS-5.11-i386)
102 _PKG_JVM_DEFAULT?= sun-jdk
104 _PKG_JVM_DEFAULT?= kaffe
108 # These lists are copied from the JVM package Makefiles.
109 _ONLY_FOR_PLATFORMS.jdk= \
113 _ONLY_FOR_PLATFORMS.jdk14= \
116 _ONLY_FOR_PLATFORMS.jdk15= \
119 _ONLY_FOR_PLATFORMS.kaffe= \
120 *-*-alpha *-*-arm *-*-arm32 *-*-i386 *-*-m68k *-*-mips* *-*-sparc *-*-powerpc
121 _ONLY_FOR_PLATFORMS.sun-jdk14= \
127 _ONLY_FOR_PLATFORMS.sun-jdk15= \
132 NetBSD-*-i386 NetBSD-*-x86_64
133 _ONLY_FOR_PLATFORMS.sun-jdk6= \
138 NetBSD-*-i386 NetBSD-*-x86_64 \
140 _ONLY_FOR_PLATFORMS.openjdk7-bin= \
144 # Set the accepted JVMs for this platform.
145 .for _jvm_ in ${_PKG_JVMS}
146 . for _pattern_ in ${_ONLY_FOR_PLATFORMS.${_jvm_}}
147 . if !empty(MACHINE_PLATFORM:M${_pattern_})
148 _PKG_JVMS_ACCEPTED+= ${PKG_JVMS_ACCEPTED:M${_jvm_}}
153 _JAVA_PKGBASE.jdk= jdk
154 _JAVA_PKGBASE.jdk14= jdk14
155 _JAVA_PKGBASE.jdk15= jdk15
156 _JAVA_PKGBASE.kaffe= kaffe
157 _JAVA_PKGBASE.openjdk7-bin= openjdk7-bin
158 _JAVA_PKGBASE.sun-jdk14= sun-jre14
159 _JAVA_PKGBASE.sun-jdk15= sun-jre15
160 _JAVA_PKGBASE.sun-jdk6= sun-jre6
162 # The following is copied from the respective JVM Makefiles.
163 _JAVA_NAME.jdk= jdk11
164 _JAVA_NAME.jdk14= jdk14
165 _JAVA_NAME.kaffe= kaffe
166 _JAVA_NAME.openjdk7-bin= openjdk7-bin
167 _JAVA_NAME.sun-jdk14= sun14
168 _JAVA_NAME.sun-jdk15= sun15
169 _JAVA_NAME.sun-jdk6= sun6
171 # Mark the acceptable JVMs and check which JVM packages are installed.
172 .for _jvm_ in ${_PKG_JVMS_ACCEPTED}
173 _PKG_JVM_OK.${_jvm_}= yes
174 _PKG_JVM_INSTALLED.${_jvm_}!= \
175 if ${PKG_INFO} -qe ${_JAVA_PKGBASE.${_jvm_}}; then \
182 # Convert "sun-jdk" into "sun-jdk1[45]" depending on the
183 # platform. Recent versions of NetBSD and Linux can use the 1.4-1.5
184 # versions of the Sun JDK, so default to the newer installed one.
186 .if ${_PKG_JVM_DEFAULT} == "sun-jdk"
187 . if !empty(MACHINE_PLATFORM:MNetBSD-1.6[M-Z]*-i386) || \
188 !empty(MACHINE_PLATFORM:MNetBSD-[2-9].*-i386) || \
189 !empty(MACHINE_PLATFORM:MNetBSD-[2-9].*-x86_64) || \
190 !empty(MACHINE_PLATFORM:MLinux-*-i[3456]86) || \
191 !empty(MACHINE_PLATFORM:MDarwin-[8-9].*-*) || \
192 !empty(MACHINE_PLATFORM:MSunOS-5.11-i386)
193 . if defined(_PKG_JVM_INSTALLED.sun-jdk6) && \
194 (${_PKG_JVM_INSTALLED.sun-jdk6} == "yes")
195 _PKG_JVM_DEFAULT= sun-jdk6
196 . elif defined(_PKG_JVM_INSTALLED.sun-jdk15) && \
197 (${_PKG_JVM_INSTALLED.sun-jdk15} == "yes")
198 _PKG_JVM_DEFAULT= sun-jdk15
199 . elif defined(_PKG_JVM_INSTALLED.sun-jdk14) && \
200 (${_PKG_JVM_INSTALLED.sun-jdk14} == "yes")
201 _PKG_JVM_DEFAULT= sun-jdk14
203 _PKG_JVM_DEFAULT= sun-jdk6
208 # Use one of the installed JVMs,...
210 .if !defined(_PKG_JVM)
211 . for _jvm_ in ${_PKG_JVMS_ACCEPTED}
212 . if !empty(_PKG_JVM_INSTALLED.${_jvm_}:M[yY][eE][sS])
215 _PKG_JVM_FIRSTACCEPTED?= ${_jvm_}
219 # ...otherwise, prefer the default one if it's accepted,...
221 . if defined(_PKG_JVM_OK.${_PKG_JVM_DEFAULT}) && \
222 !empty(_PKG_JVM_OK.${_PKG_JVM_DEFAULT}:M[yY][eE][sS])
223 _PKG_JVM= ${_PKG_JVM_DEFAULT}
227 # ...otherwise, just use the first accepted JVM.
229 .if !defined(_PKG_JVM)
230 . if defined(_PKG_JVM_FIRSTACCEPTED)
231 _PKG_JVM= ${_PKG_JVM_FIRSTACCEPTED}
235 # If there are no acceptable JVMs, then generate an error.
237 .if !defined(_PKG_JVM)
239 PKG_FAIL_REASON= "no acceptable JVM found"
243 BUILDLINK_API_DEPENDS.jdk?= jdk-[0-9]*
244 BUILDLINK_API_DEPENDS.jdk14?= jdk14-[0-9]*
245 BUILDLINK_API_DEPENDS.jdk15?= jdk15-[0-9]*
246 BUILDLINK_API_DEPENDS.kaffe?= kaffe>=1.1.4
247 BUILDLINK_API_DEPENDS.openjdk7-bin?= openjdk7-bin-[0-9]*
248 BUILDLINK_API_DEPENDS.sun-jdk14?= sun-jdk14-[0-9]*
249 BUILDLINK_API_DEPENDS.sun-jre14?= sun-jre14-[0-9]*
250 BUILDLINK_API_DEPENDS.sun-jdk15?= sun-jdk15-[0-9]*
251 BUILDLINK_API_DEPENDS.sun-jre15?= sun-jre15-[0-9]*
252 BUILDLINK_API_DEPENDS.sun-jdk6?= sun-jdk6-[0-9]*
253 BUILDLINK_API_DEPENDS.sun-jre6?= sun-jre6-[0-9]*
259 _JRE.openjdk7-bin= openjdk7-bin
260 _JRE.sun-jdk14= sun-jre14
261 _JRE.sun-jdk15= sun-jre15
262 _JRE.sun-jdk6= sun-jre6
264 _JAVA_BASE_CLASSES= classes.zip
266 .if ${_PKG_JVM} == "jdk"
267 _JDK_PKGSRCDIR= ../../lang/jdk
268 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
269 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/jdk-1.1.8
270 .elif ${_PKG_JVM} == "jdk14"
271 _JDK_PKGSRCDIR= ../../wip/jdk14
272 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
273 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/jdk-1.4.2
274 .elif ${_PKG_JVM} == "jdk15"
275 _JDK_PKGSRCDIR= ../../wip/jdk15
276 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
277 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/jdk-1.5.0
278 .elif ${_PKG_JVM} == "kaffe"
279 _JDK_PKGSRCDIR= ../../lang/kaffe
280 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
281 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/kaffe
282 .elif ${_PKG_JVM} == "openjdk7-bin"
283 _JDK_PKGSRCDIR= ../../lang/openjdk7-bin
284 _JRE_PKGSRCDIR= ${_JDK_PKGSRCDIR}
285 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/openjdk7-bin
286 .elif ${_PKG_JVM} == "sun-jdk14"
287 _JDK_PKGSRCDIR= ../../lang/sun-jdk14
288 _JRE_PKGSRCDIR= ../../lang/sun-jre14
289 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/sun-1.4
290 .elif ${_PKG_JVM} == "sun-jdk15"
291 _JDK_PKGSRCDIR= ../../lang/sun-jdk15
292 _JRE_PKGSRCDIR= ../../lang/sun-jre15
293 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/sun-1.5
294 UNLIMIT_RESOURCES+= datasize
295 .elif ${_PKG_JVM} == "sun-jdk6"
296 _JDK_PKGSRCDIR= ../../lang/sun-jdk6
297 _JRE_PKGSRCDIR= ../../lang/sun-jre6
298 _JAVA_HOME_DEFAULT= ${LOCALBASE}/java/sun-6
299 UNLIMIT_RESOURCES+= datasize
302 .if defined(_JAVA_HOME_DEFAULT)
303 _JAVA_HOME= ${_JAVA_HOME_DEFAULT}
305 EVAL_PREFIX+= _JAVA_HOME=${_JAVA_PKGBASE.${_PKG_JVM}}
308 # We always need a run-time dependency on the JRE.
309 .if defined(_JRE_PKGSRCDIR)
310 . if exists(${_JRE_PKGSRCDIR}/buildlink3.mk)
311 . include "${_JRE_PKGSRCDIR}/buildlink3.mk"
315 # If we are building Java software, then we need a build-time dependency on
318 .if empty(USE_JAVA:M[rR][uU][nN])
319 . if defined(_JDK_PKGSRCDIR)
320 . if exists(${_JDK_PKGSRCDIR}/buildlink3.mk)
321 . include "${_JDK_PKGSRCDIR}/buildlink3.mk"
326 PKG_JVM:= ${_PKG_JVM}
327 .if defined(BUILDLINK_JAVA_PREFIX.${_PKG_JVM})
328 PKG_JAVA_HOME?= ${BUILDLINK_JAVA_PREFIX.${_PKG_JVM}}
330 PKG_JAVA_HOME?= ${_JAVA_HOME}
332 .if !defined(CLASSPATH)
333 CLASSPATH_cmd= ${ECHO} `for p in \
334 ${PKG_JAVA_HOME}/lib/${_JAVA_BASE_CLASSES} \
335 ${PKG_JAVA_HOME}/lib/tools.jar; do \
336 ${TEST} ! -f $$p || ${ECHO} $$p; done` \
338 CLASSPATH?= ${CLASSPATH_cmd:sh}
341 ALL_ENV+= CLASSPATH=${CLASSPATH:Q}
342 ALL_ENV+= JAVA_HOME=${PKG_JAVA_HOME}
343 BUILD_DEFS+= ${_USER_VARS.java}
344 BUILD_DEFS_EFFECTS+= ${_SYS_VARS.java}
345 MAKEFLAGS+= PKG_JVM=${PKG_JVM:Q}
346 PREPEND_PATH+= ${PKG_JAVA_HOME}/bin
347 JAVA_BINPREFIX= ${LOCALBASE}/bin/${_JAVA_NAME.${_PKG_JVM}}
349 PLIST_SUBST+= PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}
350 FILES_SUBST+= PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}