Add files from parent branch HEAD:
[pkgsrc.git] / mk / java-vm.mk
1 # $NetBSD: java-vm.mk,v 1.68 2009/04/10 09:05:25 abs 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-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 is added.
20 #       When set to "run", a run-time dependency on the JRE is added.
21 #
22 #       Possible values: yes run
23 #       Default value: yes
24 #
25 # USE_JAVA2
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.
29 #
30 #       Possible values: yes no 1.4 1.5 6
31 #       Default value: no
32 #
33 # PKG_JVMS_ACCEPTED
34 #       The list of JVMs that may be used as possible implementations.
35 #
36 # Variables set by this file:
37 #
38 # JAVA_BINPREFIX
39 #       The prefix for the Java binaries. The path to the real binaries
40 #       is constructed by appending -${program} to it.
41 #
42 #       Examples:
43 #       * ${JAVA_BINPREFIX}-java is the path to the Java interpreter.
44 #       * ${JAVA_BINPREFIX}-javac is the path to the Java compiler.
45 #
46 # PKG_JVM
47 #       The name of the selected Java implementation.
48 #
49 # PKG_JAVA_HOME
50 #       The directory where the JVM is installed.
51 #
52
53 .if !defined(JAVA_VM_MK)
54 JAVA_VM_MK=     # defined
55
56 _VARGROUPS+=            java
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
60
61 .include "../../mk/bsd.prefs.mk"
62
63 USE_JAVA?=      yes
64 USE_JAVA2?=     no
65
66 PKG_JVM_DEFAULT?=       # empty
67 PKG_JVMS_ACCEPTED?=     ${_PKG_JVMS}
68
69 # This is a list of all of the JDKs that may be used.
70 #
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}}
78
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.
81 #
82 .if defined(PKG_JVM)
83 .  if !empty(PKG_JVM)
84 _PKG_JVM_DEFAULT:=      ${PKG_JVM}
85 .  endif
86 .endif
87
88 # Set the default JVM for this platform.
89 #
90 .if !empty(PKG_JVM_DEFAULT)
91 _PKG_JVM_DEFAULT=       ${PKG_JVM_DEFAULT}
92 .endif
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
103 .  else
104 _PKG_JVM_DEFAULT?=      kaffe
105 .  endif
106 .endif
107
108 # These lists are copied from the JVM package Makefiles.
109 _ONLY_FOR_PLATFORMS.jdk= \
110         DragonFly-*-i386 \
111         Linux-*-i[3-6]86 \
112         NetBSD-*-i386
113 _ONLY_FOR_PLATFORMS.jdk14= \
114         DragonFly-*-i386 \
115         NetBSD-[2-9].*-i386
116 _ONLY_FOR_PLATFORMS.jdk15= \
117         DragonFly-*-i386 \
118         NetBSD-[2-9].*-i386
119 _ONLY_FOR_PLATFORMS.kaffe= \
120         *-*-alpha *-*-arm *-*-arm32 *-*-i386 *-*-m68k *-*-mips* *-*-sparc *-*-powerpc
121 _ONLY_FOR_PLATFORMS.sun-jdk14= \
122         Darwin-[678].*-* \
123         DragonFly-*-i386 \
124         FreeBSD-6.*-i386 \
125         Linux-*-i[3-6]86 \
126         NetBSD-*-i386
127 _ONLY_FOR_PLATFORMS.sun-jdk15= \
128         Darwin-[8-9].*-* \
129         DragonFly-*-i386 \
130         FreeBSD-6.*-i386 \
131         Linux-*-i[3-6]86 \
132         NetBSD-*-i386 NetBSD-*-x86_64
133 _ONLY_FOR_PLATFORMS.sun-jdk6= \
134         Darwin-9.*-* \
135         DragonFly-*-i386 \
136         FreeBSD-6.*-i386 \
137         Linux-*-i[3-6]86 \
138         NetBSD-*-i386 NetBSD-*-x86_64 \
139         SunOS-5.11-i386
140 _ONLY_FOR_PLATFORMS.openjdk7-bin= \
141         NetBSD-[5-9]*-i386 \
142         NetBSD-[5-9]*-x86_64
143
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_}}
149 .    endif
150 .  endfor
151 .endfor
152
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
161
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
170
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              \
176                 ${ECHO} yes;                                            \
177         else                                                            \
178                 ${ECHO} no;                                             \
179         fi
180 .endfor
181
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.
185 #
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
202 .    else
203 _PKG_JVM_DEFAULT=       sun-jdk6
204 .    endif
205 .  endif
206 .endif
207
208 # Use one of the installed JVMs,...
209 #
210 .if !defined(_PKG_JVM)
211 .  for _jvm_ in ${_PKG_JVMS_ACCEPTED}
212 .    if !empty(_PKG_JVM_INSTALLED.${_jvm_}:M[yY][eE][sS])
213 _PKG_JVM?=      ${_jvm_}
214 .    else
215 _PKG_JVM_FIRSTACCEPTED?= ${_jvm_}
216 .    endif
217 .  endfor
218 #
219 # ...otherwise, prefer the default one if it's accepted,...
220 #
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}
224 .  endif
225 .endif
226 #
227 # ...otherwise, just use the first accepted JVM.
228 #
229 .if !defined(_PKG_JVM)
230 .  if defined(_PKG_JVM_FIRSTACCEPTED)
231 _PKG_JVM=       ${_PKG_JVM_FIRSTACCEPTED}
232 .  endif
233 .endif
234 #
235 # If there are no acceptable JVMs, then generate an error.
236 #
237 .if !defined(_PKG_JVM)
238 # force an error
239 PKG_FAIL_REASON=        "no acceptable JVM found"
240 _PKG_JVM=               "none"
241 .endif
242
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]*
254
255 _JRE.jdk=               jdk
256 _JRE.jdk14=             jdk14
257 _JRE.jdk15=             jdk15
258 _JRE.kaffe=             kaffe
259 _JRE.openjdk7-bin=      openjdk7-bin
260 _JRE.sun-jdk14=         sun-jre14
261 _JRE.sun-jdk15=         sun-jre15
262 _JRE.sun-jdk6=          sun-jre6
263
264 _JAVA_BASE_CLASSES=     classes.zip
265
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
300 .endif
301
302 .if defined(_JAVA_HOME_DEFAULT)
303 _JAVA_HOME=             ${_JAVA_HOME_DEFAULT}
304 .else
305 EVAL_PREFIX+=           _JAVA_HOME=${_JAVA_PKGBASE.${_PKG_JVM}}
306 .endif
307
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"
312 .  endif
313 .endif
314
315 # If we are building Java software, then we need a build-time dependency on
316 # the JDK.
317 #
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"
322 .    endif
323 .  endif
324 .endif
325
326 PKG_JVM:=               ${_PKG_JVM}
327 .if defined(BUILDLINK_JAVA_PREFIX.${_PKG_JVM})
328 PKG_JAVA_HOME?=         ${BUILDLINK_JAVA_PREFIX.${_PKG_JVM}}
329 .else
330 PKG_JAVA_HOME?=         ${_JAVA_HOME}
331 .endif
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`                  \
337                         . | ${TR} ' ' :
338 CLASSPATH?=             ${CLASSPATH_cmd:sh}
339 .endif
340
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}}
348
349 PLIST_SUBST+=           PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}
350 FILES_SUBST+=           PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}
351
352 .endif  # JAVA_VM_MK