pullup 3232
[pkgsrcv2.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 #               jdk14 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} 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}}
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-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
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-jdk6= \
125         Darwin-9.*-* \
126         Darwin-10.*-* \
127         DragonFly-*-i386 \
128         FreeBSD-6.*-i386 \
129         Linux-*-i[3-6]86 \
130         NetBSD-*-i386 NetBSD-*-x86_64 \
131         SunOS-5.11-i386
132 _ONLY_FOR_PLATFORMS.openjdk7= \
133         NetBSD-[4-9]*-i386 \
134         NetBSD-[5-9]*-x86_64
135 _ONLY_FOR_PLATFORMS.openjdk7-bin= \
136         NetBSD-[5-9]*-i386 \
137         NetBSD-[5-9]*-x86_64
138
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_}}
144 .    endif
145 .  endfor
146 .endfor
147
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
155
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
163
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              \
169                 ${ECHO} yes;                                            \
170         else                                                            \
171                 ${ECHO} no;                                             \
172         fi
173 .endfor
174
175 # Use one of the installed JVMs,...
176 #
177 .if !defined(_PKG_JVM)
178 .  for _jvm_ in ${_PKG_JVMS_ACCEPTED}
179 .    if !empty(_PKG_JVM_INSTALLED.${_jvm_}:M[yY][eE][sS])
180 _PKG_JVM?=      ${_jvm_}
181 .    else
182 _PKG_JVM_FIRSTACCEPTED?= ${_jvm_}
183 .    endif
184 .  endfor
185 #
186 # ...otherwise, prefer the default one if it's accepted,...
187 #
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}
191 .  endif
192 .endif
193 #
194 # ...otherwise, just use the first accepted JVM.
195 #
196 .if !defined(_PKG_JVM)
197 .  if defined(_PKG_JVM_FIRSTACCEPTED)
198 _PKG_JVM=       ${_PKG_JVM_FIRSTACCEPTED}
199 .  endif
200 .endif
201 #
202 # If there are no acceptable JVMs, then generate an error.
203 #
204 .if !defined(_PKG_JVM)
205 # force an error
206 PKG_FAIL_REASON=        "no acceptable JVM found"
207 _PKG_JVM=               "none"
208 .endif
209
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]*
218
219 _JRE.jdk=               jdk
220 _JRE.jdk14=             jdk14
221 _JRE.jdk15=             jdk15
222 _JRE.kaffe=             kaffe
223 _JRE.openjdk7=          openjdk7
224 _JRE.openjdk7-bin=      openjdk7-bin
225 _JRE.sun-jdk6=          sun-jre6
226
227 _JAVA_BASE_CLASSES=     classes.zip
228
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
258 .endif
259
260 .if defined(_JAVA_HOME_DEFAULT)
261 _JAVA_HOME=             ${_JAVA_HOME_DEFAULT}
262 .else
263 EVAL_PREFIX+=           _JAVA_HOME=${_JAVA_PKGBASE.${_PKG_JVM}}
264 .endif
265
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
272 .    endif
273 .    include "${_JRE_PKGSRCDIR}/buildlink3.mk"
274 .  endif
275 .endif
276
277 # If we are building Java software, then we need a build-time dependency on
278 # the JDK.
279 #
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"
284 .    endif
285 .  endif
286 .endif
287
288 PKG_JVM:=               ${_PKG_JVM}
289 .if defined(BUILDLINK_JAVA_PREFIX.${_PKG_JVM})
290 PKG_JAVA_HOME?=         ${BUILDLINK_JAVA_PREFIX.${_PKG_JVM}}
291 .else
292 PKG_JAVA_HOME?=         ${_JAVA_HOME}
293 .endif
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`                  \
299                         . | ${TR} ' ' :
300 CLASSPATH?=             ${CLASSPATH_cmd:sh}
301 .endif
302
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}}
310
311 PLIST_SUBST+=           PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}
312 FILES_SUBST+=           PKG_JAVA_HOME=${PKG_JAVA_HOME:Q}
313
314 .endif  # JAVA_VM_MK