/[gentoo-x86]/eclass/java-vm-2.eclass
Gentoo

Diff of /eclass/java-vm-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.35 Revision 1.44
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2012 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/java-vm-2.eclass,v 1.35 2011/10/29 14:36:34 caster Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/java-vm-2.eclass,v 1.44 2012/06/12 09:17:33 sera Exp $
4 4
5# ----------------------------------------------------------------------------- 5# @ECLASS: java-vm-2.eclass
6# @eclass-begin 6# @MAINTAINER:
7# @eclass-shortdesc Java Virtual Machine eclass 7# java@gentoo.org
8# @eclass-maintainer java@gentoo.org 8# @BLURB: Java Virtual Machine eclass
9# 9# @DESCRIPTION:
10# This eclass provides functionality which assists with installing 10# This eclass provides functionality which assists with installing
11# virtual machines, and ensures that they are recognized by java-config. 11# virtual machines, and ensures that they are recognized by java-config.
12#
13# -----------------------------------------------------------------------------
14 12
15inherit eutils fdo-mime multilib prefix 13inherit eutils fdo-mime multilib pax-utils prefix
16 14
15EXPORT_FUNCTIONS pkg_setup pkg_postinst pkg_prerm pkg_postrm
16
17RDEPEND="
17DEPEND="=dev-java/java-config-2*" 18 =dev-java/java-config-2*
19 || ( app-admin/eselect-java <dev-java/java-config-2.2 )"
20DEPEND="${RDEPEND}"
18has "${EAPI}" 0 1 && DEPEND="${DEPEND} >=sys-apps/portage-2.1" 21has "${EAPI}" 0 1 && DEPEND="${DEPEND} >=sys-apps/portage-2.1"
19 22
20RDEPEND="
21 =dev-java/java-config-2*"
22
23export WANT_JAVA_CONFIG=2 23export WANT_JAVA_CONFIG=2
24 24
25
26# @ECLASS-VARIABLE: JAVA_VM_CONFIG_DIR
27# @INTERNAL
28# @DESCRIPTION:
29# Where to place the vm env file.
25JAVA_VM_CONFIG_DIR="/usr/share/java-config-2/vm" 30JAVA_VM_CONFIG_DIR="/usr/share/java-config-2/vm"
31
32# @ECLASS-VARIABLE: JAVA_VM_DIR
33# @INTERNAL
34# @DESCRIPTION:
35# Base directory for vm links.
26JAVA_VM_DIR="/usr/lib/jvm" 36JAVA_VM_DIR="/usr/lib/jvm"
37
38# @ECLASS-VARIABLE: JAVA_VM_SYSTEM
39# @INTERNAL
40# @DESCRIPTION:
41# Link for system-vm
27JAVA_VM_SYSTEM="/etc/java-config-2/current-system-vm" 42JAVA_VM_SYSTEM="/etc/java-config-2/current-system-vm"
43
44# @ECLASS-VARIABLE: JAVA_VM_BUILD_ONLY
45# @DESCRIPTION:
46# Set to YES to mark a vm as build-only.
28JAVA_VM_BUILD_ONLY="${JAVA_VM_BUILD_ONLY:-FALSE}" 47JAVA_VM_BUILD_ONLY="${JAVA_VM_BUILD_ONLY:-FALSE}"
29 48
30EXPORT_FUNCTIONS pkg_setup pkg_postinst pkg_prerm pkg_postrm 49
50# @FUNCTION: java-vm-2_pkg_setup
51# @DESCRIPTION:
52# default pkg_setup
53#
54# Initialize vm handle.
31 55
32java-vm-2_pkg_setup() { 56java-vm-2_pkg_setup() {
33 if [[ "${SLOT}" != "0" ]]; then 57 if [[ "${SLOT}" != "0" ]]; then
34 VMHANDLE=${PN}-${SLOT} 58 VMHANDLE=${PN}-${SLOT}
35 else 59 else
36 VMHANDLE=${PN} 60 VMHANDLE=${PN}
37 fi 61 fi
38} 62}
39 63
64
65# @FUNCTION: java-vm-2_pkg_postinst
66# @DESCRIPTION:
67# default pkg_postinst
68#
69# Set the generation-2 system VM and Java plugin, if it isn't set or the
70# setting is invalid. Also update mime database.
71
40java-vm-2_pkg_postinst() { 72java-vm-2_pkg_postinst() {
41 # Set the generation-2 system VM, if it isn't set or the setting is invalid
42 # Note that we cannot rely on java-config here, as it will silently recognize 73 # Note that we cannot rely on java-config here, as it will silently recognize
43 # e.g. icedtea6-bin as valid system VM if icedtea6 is set but invalid (e.g. due 74 # e.g. icedtea6-bin as valid system VM if icedtea6 is set but invalid (e.g. due
44 # to the migration to icedtea-6) 75 # to the migration to icedtea-6)
45 if [[ ! -L "${JAVA_VM_SYSTEM}" ]]; then 76 if [[ ! -L "${JAVA_VM_SYSTEM}" ]]; then
46 java_set_default_vm_ 77 java_set_default_vm_
55 java-vm_check-nsplugin 86 java-vm_check-nsplugin
56 java_mozilla_clean_ 87 java_mozilla_clean_
57 fdo-mime_desktop_database_update 88 fdo-mime_desktop_database_update
58} 89}
59 90
91
92# @FUNCTION: java-vm_check-nsplugin
93# @INTERNAL
94# @DESCRIPTION:
95# Check if the nsplugin needs updating
96
60java-vm_check-nsplugin() { 97java-vm_check-nsplugin() {
61 local libdir 98 local libdir
62 if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then 99 if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then
63 libdir=lib32 100 libdir=lib32
64 else 101 else
66 fi 103 fi
67 104
68 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX= 105 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX=
69 106
70 # Install a default nsplugin if we don't already have one 107 # Install a default nsplugin if we don't already have one
71 if has nsplugin ${IUSE} && use nsplugin; then 108 if in_iuse nsplugin && use nsplugin; then
72 if [[ ! -f "${EPREFIX}"/usr/${libdir}/nsbrowser/plugins/javaplugin.so ]]; then 109 if [[ ! -f "${EPREFIX}"/usr/${libdir}/nsbrowser/plugins/javaplugin.so ]]; then
73 einfo "No system nsplugin currently set." 110 einfo "No system nsplugin currently set."
74 java-vm_set-nsplugin 111 java-vm_set-nsplugin
75 else 112 else
76 einfo "System nsplugin is already set, not changing it." 113 einfo "System nsplugin is already set, not changing it."
77 fi 114 fi
78 einfo "You can change nsplugin with eselect java-nsplugin." 115 einfo "You can change nsplugin with eselect java-nsplugin."
79 fi 116 fi
80} 117}
118
119
120# @FUNCTION: java-vm_set-nsplugin
121# @INTERNAL
122# @DESCRIPTION:
123# Set the nsplugin implemetation.
81 124
82java-vm_set-nsplugin() { 125java-vm_set-nsplugin() {
83 local extra_args 126 local extra_args
84 if use amd64; then 127 if use amd64; then
85 if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then 128 if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then
92 einfo "Setting nsplugin to ${VMHANDLE}..." 135 einfo "Setting nsplugin to ${VMHANDLE}..."
93 fi 136 fi
94 eselect java-nsplugin set ${extra_args} ${VMHANDLE} 137 eselect java-nsplugin set ${extra_args} ${VMHANDLE}
95} 138}
96 139
140
141# @FUNCTION: java-vm-2_pkg_prerm
142# @DESCRIPTION:
143# default pkg_prerm
144#
145# Warn user if removing system-vm.
146
97java-vm-2_pkg_prerm() { 147java-vm-2_pkg_prerm() {
98 # Although REPLACED_BY_VERSION is EAPI=4, we shouldn't need to check EAPI for this use case 148 # Although REPLACED_BY_VERSION is EAPI=4, we shouldn't need to check EAPI for this use case
99 if [[ "$(java-config -f 2>/dev/null)" == "${VMHANDLE}" && -z "${REPLACED_BY_VERSION}" ]]; then 149 if [[ "$(GENTOO_VM="" java-config -f 2>/dev/null)" == "${VMHANDLE}" && -z "${REPLACED_BY_VERSION}" ]]; then
100 ewarn "It appears you are removing your system-vm!" 150 ewarn "It appears you are removing your system-vm!"
101 ewarn "Please run java-config -L to list available VMs," 151 ewarn "Please run java-config -L to list available VMs,"
102 ewarn "then use java-config -S to set a new system-vm!" 152 ewarn "then use java-config -S to set a new system-vm!"
103 fi 153 fi
104} 154}
105 155
156
157# @FUNCTION: java-vm-2_pkg_postrm
158# @DESCRIPTION:
159# default pkg_postrm
160#
161# Update mime database.
162
106java-vm-2_pkg_postrm() { 163java-vm-2_pkg_postrm() {
107 fdo-mime_desktop_database_update 164 fdo-mime_desktop_database_update
108} 165}
109 166
167
168# @FUNCTION: java_set_default_vm_
169# @INTERNAL
170# @DESCRIPTION:
171# Set system-vm.
172
110java_set_default_vm_() { 173java_set_default_vm_() {
111 java-config-2 --set-system-vm="${VMHANDLE}" 174 java-config-2 --set-system-vm="${VMHANDLE}"
112 175
113 einfo " ${P} set as the default system-vm." 176 einfo " ${P} set as the default system-vm."
114} 177}
178
179
180# @FUNCTION: get_system_arch
181# @DESCRIPTION:
182# Get Java specific arch name.
115 183
116get_system_arch() { 184get_system_arch() {
117 local sarch 185 local sarch
118 sarch=$(echo ${ARCH} | sed -e s/[i]*.86/i386/ -e s/x86_64/amd64/ -e s/sun4u/sparc/ -e s/sparc64/sparc/ -e s/arm.*/arm/ -e s/sa110/arm/) 186 sarch=$(echo ${ARCH} | sed -e s/[i]*.86/i386/ -e s/x86_64/amd64/ -e s/sun4u/sparc/ -e s/sparc64/sparc/ -e s/arm.*/arm/ -e s/sa110/arm/)
119 if [ -z "${sarch}" ]; then 187 if [ -z "${sarch}" ]; then
120 sarch=$(uname -m | sed -e s/[i]*.86/i386/ -e s/x86_64/amd64/ -e s/sun4u/sparc/ -e s/sparc64/sparc/ -e s/arm.*/arm/ -e s/sa110/arm/) 188 sarch=$(uname -m | sed -e s/[i]*.86/i386/ -e s/x86_64/amd64/ -e s/sun4u/sparc/ -e s/sparc64/sparc/ -e s/arm.*/arm/ -e s/sa110/arm/)
121 fi 189 fi
122 echo ${sarch} 190 echo ${sarch}
123} 191}
192
193
194# @FUNCTION: set_java_env
195# @DESCRIPTION:
196# Installs a vm env file.
124 197
125# TODO rename to something more evident, like install_env_file 198# TODO rename to something more evident, like install_env_file
126set_java_env() { 199set_java_env() {
127 debug-print-function ${FUNCNAME} $* 200 debug-print-function ${FUNCNAME} $*
128 201
148 sed \ 221 sed \
149 -e "s/@P@/${P}/g" \ 222 -e "s/@P@/${P}/g" \
150 -e "s/@PN@/${PN}/g" \ 223 -e "s/@PN@/${PN}/g" \
151 -e "s/@PV@/${PV}/g" \ 224 -e "s/@PV@/${PV}/g" \
152 -e "s/@PF@/${PF}/g" \ 225 -e "s/@PF@/${PF}/g" \
226 -e "s/@SLOT@/${SLOT}/g" \
153 -e "s/@PLATFORM@/${platform}/g" \ 227 -e "s/@PLATFORM@/${platform}/g" \
154 -e "s/@LIBDIR@/$(get_libdir)/g" \ 228 -e "s/@LIBDIR@/$(get_libdir)/g" \
155 -e "/^LDPATH=.*lib\\/\\\"/s|\"\\(.*\\)\"|\"\\1${platform}/:\\1${platform}/server/\"|" \ 229 -e "/^LDPATH=.*lib\\/\\\"/s|\"\\(.*\\)\"|\"\\1${platform}/:\\1${platform}/server/\"|" \
156 < "${source_env_file}" \ 230 < "${source_env_file}" \
157 > "${env_file}" || die "sed failed" 231 > "${env_file}" || die "sed failed"
172 dodir "${JAVA_VM_DIR}" 246 dodir "${JAVA_VM_DIR}"
173 dosym ${java_home#${EPREFIX}} ${JAVA_VM_DIR}/${VMHANDLE} \ 247 dosym ${java_home#${EPREFIX}} ${JAVA_VM_DIR}/${VMHANDLE} \
174 || die "Failed to make VM symlink at ${JAVA_VM_DIR}/${VMHANDLE}" 248 || die "Failed to make VM symlink at ${JAVA_VM_DIR}/${VMHANDLE}"
175} 249}
176 250
177# ----------------------------------------------------------------------------- 251
178# @ebuild-function java-vm_revdep-mask 252# @FUNCTION: java-vm_set-pax-markings
253# @DESCRIPTION:
254# Set PaX markings on all JDK/JRE executables to allow code-generation on
255# the heap by the JIT compiler.
256#
257# The markings need to be set prior to the first invocation of the the freshly
258# built / installed VM. Be it before creating the Class Data Sharing archive or
259# generating cacerts. Otherwise a PaX enabled kernel will kill the VM.
260# Bug #215225 #389751
179# 261#
262# @CODE
263# Parameters:
264# $1 - JDK/JRE base directory.
265#
266# Examples:
267# java-vm_set-pax-markings "${S}"
268# java-vm_set-pax-markings "${ED}"/opt/${P}
269# @CODE
270
271java-vm_set-pax-markings() {
272 debug-print-function ${FUNCNAME} "$*"
273 [[ $# -ne 1 ]] && die "${FUNCNAME}: takes exactly one argument"
274 [[ ! -f "${1}"/bin/java ]] \
275 && die "${FUNCNAME}: argument needs to be JDK/JRE base directory"
276
277 local executables=( "${1}"/bin/* )
278 [[ -d "${1}"/jre ]] && executables+=( "${1}"/jre/bin/* )
279
280 # Usally disabeling MPROTECT is sufficent
281 local pax_markings="m"
282 # On x86 for heap sizes over 700MB disable SEGMEXEC and PAGEEXEC as well.
283 use x86 && pax_markings="msp"
284
285 pax-mark ${pax_markings} $(list-paxables "${executables[@]}")
286}
287
288
289# @FUNCTION: java-vm_revdep-mask
290# @DESCRIPTION:
180# Installs a revdep-rebuild control file which SEARCH_DIR_MASK set to the path 291# Installs a revdep-rebuild control file which SEARCH_DIR_MASK set to the path
181# where the VM is installed. Prevents pointless rebuilds - see bug #177925. 292# where the VM is installed. Prevents pointless rebuilds - see bug #177925.
182# Also gives a notice to the user. 293# Also gives a notice to the user.
183# 294#
184# @example 295# @CODE
185# java-vm_revdep-mask 296# Parameters:
186# java-vm_revdep-mask /path/to/jdk/
187#
188# @param $1 - Path of the VM (defaults to /opt/${P} if not set) 297# $1 - Path of the VM (defaults to /opt/${P} if not set)
189# ------------------------------------------------------------------------------ 298#
299# Examples:
300# java-vm_revdep-mask
301# java-vm_revdep-mask /path/to/jdk/
302#
303# @CODE
304
190java-vm_revdep-mask() { 305java-vm_revdep-mask() {
191 if has ${EAPI:-0} 0 1 2 && ! use prefix; then 306 if has ${EAPI:-0} 0 1 2 && ! use prefix; then
192 ED="${D}" 307 ED="${D}"
193 EPREFIX= 308 EPREFIX=
194 fi 309 fi
195 310
196 local VMROOT="${1-"${EPREFIX}"/opt/${P}}" 311 local VMROOT="${1-"${EPREFIX}"/opt/${P}}"
197 312
198 dodir /etc/revdep-rebuild/ 313 dodir /etc/revdep-rebuild/
199 echo "SEARCH_DIRS_MASK=\"${VMROOT}\""> "${ED}/etc/revdep-rebuild/61-${VMHANDLE}" 314 echo "SEARCH_DIRS_MASK=\"${VMROOT}\""> "${ED}/etc/revdep-rebuild/61-${VMHANDLE}"
200
201 elog "A revdep-rebuild control file was installed to prevent reinstalls due to"
202 elog "missing dependencies (see bug #177925 for more info). Note that some parts"
203 elog "of the JVM may require dependencies that are pulled only through respective"
204 elog "USE flags (typically X, alsa, odbc) and some Java code may fail without them."
205} 315}
316
317
318# @FUNCTION: java-vm_sandbox-predict
319# @DESCRIPTION:
320# Install a sandbox control file. Specified paths won't cause a sandbox
321# violation if opened read write but no write takes place. See bug 388937#c1
322#
323# @CODE
324# Examples:
325# java-vm_sandbox-predict /dev/random /proc/self/coredump_filter
326# @CODE
327
328java-vm_sandbox-predict() {
329 debug-print-function ${FUNCNAME} "$*"
330 [[ -z "${1}" ]] && die "${FUNCNAME} takes at least one argument"
331
332 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
333
334 local path path_arr=("$@")
335 # subshell this to prevent IFS bleeding out dependant on bash version.
336 # could use local, which *should* work, but that requires a lot of testing.
337 path=$(IFS=":"; echo "${path_arr[*]}")
338 dodir /etc/sandbox.d
339 echo "SANDBOX_PREDICT=\"${path}\"" > "${ED}/etc/sandbox.d/20${VMHANDLE}" \
340 || die "Failed to write sandbox control file"
341}
342
343
344# @FUNCTION: java_get_plugin_dir_
345# @INTERNAL
346# @DESCRIPTION:
347# Get the java plugin dir.
206 348
207java_get_plugin_dir_() { 349java_get_plugin_dir_() {
208 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX= 350 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX=
209 echo "${EPREFIX}"/usr/$(get_libdir)/nsbrowser/plugins 351 echo "${EPREFIX}"/usr/$(get_libdir)/nsbrowser/plugins
210} 352}
211 353
354
355# @FUNCTION: install_mozilla_plugin
356# @DESCRIPTION:
357# Register a netscape java-plugin.
358
212install_mozilla_plugin() { 359install_mozilla_plugin() {
213 local plugin="${1}" 360 local plugin="${1}"
214 local variant="${2}" 361 local variant="${2}"
215 362
216 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}" 363 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
225 local plugin_dir="/usr/share/java-config-2/nsplugin" 372 local plugin_dir="/usr/share/java-config-2/nsplugin"
226 dodir "${plugin_dir}" 373 dodir "${plugin_dir}"
227 dosym "${plugin}" "${plugin_dir}/${VMHANDLE}${variant}-javaplugin.so" 374 dosym "${plugin}" "${plugin_dir}/${VMHANDLE}${variant}-javaplugin.so"
228} 375}
229 376
377
378# @FUNCTION: java_mozilla_clean_
379# @INTERNAL
380# @DESCRIPTION:
381# Because previously some ebuilds installed symlinks outside of pkg_install
382# and are left behind, which forces you to manualy remove them to select the
383# jdk/jre you want to use for java
384
230java_mozilla_clean_() { 385java_mozilla_clean_() {
231 # Because previously some ebuilds installed symlinks outside of pkg_install
232 # and are left behind, which forces you to manualy remove them to select the
233 # jdk/jre you want to use for java
234 local plugin_dir=$(java_get_plugin_dir_) 386 local plugin_dir=$(java_get_plugin_dir_)
235 for file in ${plugin_dir}/javaplugin_*; do 387 for file in ${plugin_dir}/javaplugin_*; do
236 rm -f ${file} 388 rm -f ${file}
237 done 389 done
238 for file in ${plugin_dir}/libjavaplugin*; do 390 for file in ${plugin_dir}/libjavaplugin*; do
239 rm -f ${file} 391 rm -f ${file}
240 done 392 done
241} 393}
242
243# ------------------------------------------------------------------------------
244# @eclass-end
245# ------------------------------------------------------------------------------

Legend:
Removed from v.1.35  
changed lines
  Added in v.1.44

  ViewVC Help
Powered by ViewVC 1.1.20