update Tue May 18 00:37:00 PDT 2010
[pkgsrc.git] / mk / java-vm.mk
1 # $NetBSD: java-vm.mk,v 1.72 2010/02/03 00:49:58 minskim Exp $
2 #
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.
6 #
7 # User-settable variables:
8 #
9 # PKG_JVM_DEFAULT
10 #       The JVM that should be used if nothing particular is specified.
11 #
12 #       Possible values: jdk kaffe openjdk7 openjdk7-bin
13 #               sun-jdk14 jdk14 sun-jdk15 sun-jdk6 jdk15
14 #       Default value: (platform-dependent)
15 #
16 # Package-settable variables:
17 #
18 # USE_JAVA
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.
23 #
24 #       Possible values: yes run build
25 #       Default value: yes
26 #
27 # USE_JAVA2
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.
31 #
32 #       Possible values: yes no 1.4 1.5 6
33 #       Default value: no
34 #
35 # PKG_JVMS_ACCEPTED
36 #       The list of JVMs that may be used as possible implementations.
37 #
38 # Variables set by this file:
39 #
40 # JAVA_BINPREFIX
41 #       The prefix for the Java binaries. The path to the real binaries
42 #       is constructed by appending -${program} to it.
43 #
44 #       Examples:
45 #       * ${JAVA_BINPREFIX}-java is the path to the Java interpreter.
46 #       * ${JAVA_BINPREFIX}-javac is the path to the Java compiler.
47 #
48 # PKG_JVM
49 #       The name of the selected Java implementation.
50 #
51 # PKG_JAVA_HOME
52 #       The directory where the JVM is installed.
53 #
54
55 .if !defined(JAVA_VM_MK)
56 JAVA_VM_MK=     # defined
57
58 _VARGROUPS+=            java
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
62
63 .include "../../mk/bsd.prefs.mk"
64
65 USE_JAVA?=      yes
66 USE_JAVA2?=     no
67
68 PKG_JVM_DEFAULT?=       # empty
69 PKG_JVMS_ACCEPTED?=     ${_PKG_JVMS}
70
71 # This is a list of all of the JDKs that may be used.
72 #
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}}
80
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.
83 #
84 .if defined(PKG_JVM)
85 .  if !empty(PKG_JVM)
86 _PKG_JVM_DEFAULT:=      ${PKG_JVM}
87 .  endif
88 .endif
89
90 # Set the default JVM for this platform.
91 #
92 .if !empty(PKG_JVM_DEFAULT)
93 _PKG_JVM_DEFAULT=       ${PKG_JVM_DEFAULT}
94 .endif
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
106 .  else
107 _PKG_JVM_DEFAULT?=      kaffe
108 .  endif
109 .endif
110
111 # These lists are copied from the JVM package Makefiles.
112 _ONLY_FOR_PLATFORMS.jdk= \
113         DragonFly-*-i386 \
114         Linux-*-i[3-6]86 \
115         NetBSD-*-i386
116 _ONLY_FOR_PLATFORMS.jdk14= \
117         DragonFly-*-i386 \
118         NetBSD-[2-9].*-i386
119 _ONLY_FOR_PLATFORMS.jdk15= \
120         DragonFly-*-i386 \
121         NetBSD-[2-9].*-i386
122 _ONLY_FOR_PLATFORMS.kaffe= \
123         *-*-alpha *-*-arm *-*-arm32 *-*-i386 *-*-m68k *-*-mips* *-*-sparc *-*-powerpc
124 _ONLY_FOR_PLATFORMS.sun-jdk14= \
125         Darwin-[678].*-* \
126         DragonFly-*-i386 \
127         FreeBSD-6.*-i386 \
128         Linux-*-i[3-6]86 \
129         NetBSD-*-i386
130 _ONLY_FOR_PLATFORMS.sun-jdk15= \
131         Darwin-[8-9].*-* \
132         DragonFly-*-i386 \
133         FreeBSD-6.*-i386 \
134         Linux-*-i[3-6]86 \
135         NetBSD-*-i386 NetBSD-*-x86_64
136 _ONLY_FOR_PLATFORMS.sun-jdk6= \
137         Darwin-9.*-* \
138         Darwin-10.*-* \
139         DragonFly-*-i386 \
140         FreeBSD-6.*-i386 \
141         Linux-*-i[3-6]86 \
142         NetBSD-*-i386 NetBSD-*-x86_64 \
143         SunOS-5.11-i386
144 _ONLY_FOR_PLATFORMS.openjdk7= \
145         NetBSD-[4-9]*-i386 \
146         NetBSD-[5-9]*-x86_64
147 _ONLY_FOR_PLATFORMS.openjdk7-bin= \
148         NetBSD-[5-9]*-i386 \
149         NetBSD-[5-9]*-x86_64
150
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_}}
156 .    endif
157 .  endfor
158 .endfor
159
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
169
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
179
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              \
185                 ${ECHO} yes;                                            \
186         else                                                            \
187                 ${ECHO} no;                                             \
188         fi
189 .endfor
190
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.
194 #
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
212 .    else
213 _PKG_JVM_DEFAULT=       sun-jdk6
214 .    endif
215 .  endif
216 .endif
217
218 # Use one of the installed JVMs,...
219 #
220 .if !defined(_PKG_JVM)
221 .  for _jvm_ in ${_PKG_JVMS_ACCEPTED}
222 .    if !empty(_PKG_JVM_INSTALLED.${_jvm_}:M[yY][eE][sS])
223 _PKG_JVM?=      ${_jvm_}
224 .    else
225 _PKG_JVM_FIRSTACCEPTED?= ${_jvm_}
226 .    endif
227 .  endfor
228 #
229 # ...otherwise, prefer the default one if it's accepted,...
230 #
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}
234 .  endif
235 .endif
236 #
237 # ...otherwise, just use the first accepted JVM.
238 #
239 .if !defined(_PKG_JVM)
240 .  if defined(_PKG_JVM_FIRSTACCEPTED)
241 _PKG_JVM=       ${_PKG_JVM_FIRSTACCEPTED}
242 .  endif
243 .endif
244 #
245 # If there are no acceptable JVMs, then generate an error.
246 #
247 .if !defined(_PKG_JVM)
248 # force an error
249 PKG_FAIL_REASON=        "no acceptable JVM found"
250 _PKG_JVM=               "none"
251 .endif
252
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]*
265
266 _JRE.jdk=               jdk
267 _JRE.jdk14=             jdk14
268 _JRE.jdk15=             jdk15
269 _JRE.kaffe=             kaffe
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
275
276 _JAVA_BASE_CLASSES=     classes.zip
277
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
316 .endif
317
318 .if defined(_JAVA_HOME_DEFAULT)
319 _JAVA_HOME=             ${_JAVA_HOME_DEFAULT}
320 .else
321 EVAL_PREFIX+=           _JAVA_HOME=${_JAVA_PKGBASE.${_PKG_JVM}}
322 .endif
323
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
330 .    endif
331 .    include "${_JRE_PKGSRCDIR}/buildlink3.mk"
332 .  endif
333 .endif
334
335 # If we are building Java software, then we need a build-time dependency on
336 # the JDK.
337 #
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"
342 .    endif
343 .  endif
344 .endif
345
346 PKG_JVM:=               ${_PKG_JVM}
347 .if defined(BUILDLINK_JAVA_PREFIX.${_PKG_JVM})
348 PKG_JAVA_HOME?=         ${BUILDLINK_JAVA_PREFIX.${_PKG_JVM}}
349 .else
350 PKG_JAVA_HOME?=         ${_JAVA_HOME}
351 .endif
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`                  \
357                         . | ${TR} ' ' :
358 CLASSPATH?=             ${CLASSPATH_cmd:sh}
359 .endif
360
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}}
368
369 PLIST_SUBST+=           PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}
370 FILES_SUBST+=           PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}
371
372 .endif  # JAVA_VM_MK