/[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.46
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.46 2012/07/23 19:06:20 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 "${ROOT}${JAVA_VM_SYSTEM}" ]]; then
46 java_set_default_vm_ 77 java_set_default_vm_
47 else 78 else
48 local current_vm_path="$(readlink "${JAVA_VM_SYSTEM}")" 79 local current_vm_path=$(readlink "${ROOT}${JAVA_VM_SYSTEM}")
49 local current_vm="$(basename "${current_vm_path}")" 80 local current_vm=$(basename "${ROOT}${current_vm_path}")
50 if [[ ! -L "${JAVA_VM_DIR}/${current_vm}" ]]; then 81 if [[ ! -L "${ROOT}${JAVA_VM_DIR}/${current_vm}" ]]; then
51 java_set_default_vm_ 82 java_set_default_vm_
52 fi 83 fi
53 fi 84 fi
54 85
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}
90
91
92# @FUNCTION: java-vm_check-nsplugin
93# @INTERNAL
94# @DESCRIPTION:
95# Check if the nsplugin needs updating
59 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
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 "${ROOT}${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 # Ensure a PaX header is created.
281 local pax_markings="C"
282 # Usally disabeling MPROTECT is sufficent.
283 local pax_markings+="m"
284 # On x86 for heap sizes over 700MB disable SEGMEXEC and PAGEEXEC as well.
285 use x86 && pax_markings+="sp"
286
287 pax-mark ${pax_markings} $(list-paxables "${executables[@]}")
288}
289
290
291# @FUNCTION: java-vm_revdep-mask
292# @DESCRIPTION:
180# Installs a revdep-rebuild control file which SEARCH_DIR_MASK set to the path 293# 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. 294# where the VM is installed. Prevents pointless rebuilds - see bug #177925.
182# Also gives a notice to the user. 295# Also gives a notice to the user.
183# 296#
184# @example 297# @CODE
185# java-vm_revdep-mask 298# Parameters:
186# java-vm_revdep-mask /path/to/jdk/
187#
188# @param $1 - Path of the VM (defaults to /opt/${P} if not set) 299# $1 - Path of the VM (defaults to /opt/${P} if not set)
189# ------------------------------------------------------------------------------ 300#
301# Examples:
302# java-vm_revdep-mask
303# java-vm_revdep-mask /path/to/jdk/
304#
305# @CODE
306
190java-vm_revdep-mask() { 307java-vm_revdep-mask() {
191 if has ${EAPI:-0} 0 1 2 && ! use prefix; then 308 if has ${EAPI:-0} 0 1 2 && ! use prefix; then
192 ED="${D}" 309 ED="${D}"
193 EPREFIX= 310 EPREFIX=
194 fi 311 fi
195 312
196 local VMROOT="${1-"${EPREFIX}"/opt/${P}}" 313 local VMROOT="${1-"${EPREFIX}"/opt/${P}}"
197 314
198 dodir /etc/revdep-rebuild/ 315 dodir /etc/revdep-rebuild/
199 echo "SEARCH_DIRS_MASK=\"${VMROOT}\""> "${ED}/etc/revdep-rebuild/61-${VMHANDLE}" 316 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} 317}
318
319
320# @FUNCTION: java-vm_sandbox-predict
321# @DESCRIPTION:
322# Install a sandbox control file. Specified paths won't cause a sandbox
323# violation if opened read write but no write takes place. See bug 388937#c1
324#
325# @CODE
326# Examples:
327# java-vm_sandbox-predict /dev/random /proc/self/coredump_filter
328# @CODE
329
330java-vm_sandbox-predict() {
331 debug-print-function ${FUNCNAME} "$*"
332 [[ -z "${1}" ]] && die "${FUNCNAME} takes at least one argument"
333
334 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
335
336 local path path_arr=("$@")
337 # subshell this to prevent IFS bleeding out dependant on bash version.
338 # could use local, which *should* work, but that requires a lot of testing.
339 path=$(IFS=":"; echo "${path_arr[*]}")
340 dodir /etc/sandbox.d
341 echo "SANDBOX_PREDICT=\"${path}\"" > "${ED}/etc/sandbox.d/20${VMHANDLE}" \
342 || die "Failed to write sandbox control file"
343}
344
345
346# @FUNCTION: java_get_plugin_dir_
347# @INTERNAL
348# @DESCRIPTION:
349# Get the java plugin dir.
206 350
207java_get_plugin_dir_() { 351java_get_plugin_dir_() {
208 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX= 352 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX=
209 echo "${EPREFIX}"/usr/$(get_libdir)/nsbrowser/plugins 353 echo "${EPREFIX}"/usr/$(get_libdir)/nsbrowser/plugins
210} 354}
211 355
356
357# @FUNCTION: install_mozilla_plugin
358# @DESCRIPTION:
359# Register a netscape java-plugin.
360
212install_mozilla_plugin() { 361install_mozilla_plugin() {
213 local plugin="${1}" 362 local plugin="${1}"
214 local variant="${2}" 363 local variant="${2}"
215 364
216 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}" 365 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
225 local plugin_dir="/usr/share/java-config-2/nsplugin" 374 local plugin_dir="/usr/share/java-config-2/nsplugin"
226 dodir "${plugin_dir}" 375 dodir "${plugin_dir}"
227 dosym "${plugin}" "${plugin_dir}/${VMHANDLE}${variant}-javaplugin.so" 376 dosym "${plugin}" "${plugin_dir}/${VMHANDLE}${variant}-javaplugin.so"
228} 377}
229 378
379
380# @FUNCTION: java_mozilla_clean_
381# @INTERNAL
382# @DESCRIPTION:
383# Because previously some ebuilds installed symlinks outside of pkg_install
384# and are left behind, which forces you to manualy remove them to select the
385# jdk/jre you want to use for java
386
230java_mozilla_clean_() { 387java_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_) 388 local plugin_dir=$(java_get_plugin_dir_)
235 for file in ${plugin_dir}/javaplugin_*; do 389 for file in ${plugin_dir}/javaplugin_*; do
236 rm -f ${file} 390 rm -f ${file}
237 done 391 done
238 for file in ${plugin_dir}/libjavaplugin*; do 392 for file in ${plugin_dir}/libjavaplugin*; do
239 rm -f ${file} 393 rm -f ${file}
240 done 394 done
241} 395}
242
243# ------------------------------------------------------------------------------
244# @eclass-end
245# ------------------------------------------------------------------------------

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

  ViewVC Help
Powered by ViewVC 1.1.20