/[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.43 Revision 1.45
1# Copyright 1999-2012 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.43 2012/06/11 19:46:32 sera Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/java-vm-2.eclass,v 1.45 2012/07/18 16:54:55 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 pax-utils prefix 13inherit eutils fdo-mime multilib pax-utils prefix
14
15EXPORT_FUNCTIONS pkg_setup pkg_postinst pkg_prerm pkg_postrm
16 16
17RDEPEND=" 17RDEPEND="
18 =dev-java/java-config-2* 18 =dev-java/java-config-2*
19 || ( app-admin/eselect-java <dev-java/java-config-2.2 )" 19 || ( app-admin/eselect-java <dev-java/java-config-2.2 )"
20DEPEND="${RDEPEND}" 20DEPEND="${RDEPEND}"
21has "${EAPI}" 0 1 && DEPEND="${DEPEND} >=sys-apps/portage-2.1" 21has "${EAPI}" 0 1 && DEPEND="${DEPEND} >=sys-apps/portage-2.1"
22 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
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 in_iuse nsplugin && 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 [[ "$(GENTOO_VM="" 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
173 dodir "${JAVA_VM_DIR}" 246 dodir "${JAVA_VM_DIR}"
174 dosym ${java_home#${EPREFIX}} ${JAVA_VM_DIR}/${VMHANDLE} \ 247 dosym ${java_home#${EPREFIX}} ${JAVA_VM_DIR}/${VMHANDLE} \
175 || die "Failed to make VM symlink at ${JAVA_VM_DIR}/${VMHANDLE}" 248 || die "Failed to make VM symlink at ${JAVA_VM_DIR}/${VMHANDLE}"
176} 249}
177 250
178# ----------------------------------------------------------------------------- 251
179# @ebuild-function java-vm_set-pax-markings 252# @FUNCTION: java-vm_set-pax-markings
180# 253# @DESCRIPTION:
181# Set PaX markings on all JDK/JRE executables to allow code-generation on 254# Set PaX markings on all JDK/JRE executables to allow code-generation on
182# the heap by the JIT compiler. 255# the heap by the JIT compiler.
183# 256#
184# The markings need to be set prior to the first invocation of the the freshly 257# The markings need to be set prior to the first invocation of the the freshly
185# built / installed VM. Be it before creating the Class Data Sharing archive or 258# built / installed VM. Be it before creating the Class Data Sharing archive or
186# generating cacerts. Otherwise a PaX enabled kernel will kill the VM. 259# generating cacerts. Otherwise a PaX enabled kernel will kill the VM.
187# Bug #215225 #389751 260# Bug #215225 #389751
188# 261#
189# @example 262# @CODE
263# Parameters:
264# $1 - JDK/JRE base directory.
265#
266# Examples:
190# java-vm_set-pax-markings "${S}" 267# java-vm_set-pax-markings "${S}"
191# java-vm_set-pax-markings "${ED}"/opt/${P} 268# java-vm_set-pax-markings "${ED}"/opt/${P}
192# 269# @CODE
193# @param $1 - JDK/JRE base directory. 270
194# -----------------------------------------------------------------------------
195java-vm_set-pax-markings() { 271java-vm_set-pax-markings() {
196 debug-print-function ${FUNCNAME} "$*" 272 debug-print-function ${FUNCNAME} "$*"
197 [[ $# -ne 1 ]] && die "${FUNCNAME}: takes exactly one argument" 273 [[ $# -ne 1 ]] && die "${FUNCNAME}: takes exactly one argument"
198 [[ ! -f "${1}"/bin/java ]] \ 274 [[ ! -f "${1}"/bin/java ]] \
199 && die "${FUNCNAME}: argument needs to be JDK/JRE base directory" 275 && die "${FUNCNAME}: argument needs to be JDK/JRE base directory"
207 use x86 && pax_markings="msp" 283 use x86 && pax_markings="msp"
208 284
209 pax-mark ${pax_markings} $(list-paxables "${executables[@]}") 285 pax-mark ${pax_markings} $(list-paxables "${executables[@]}")
210} 286}
211 287
212# ----------------------------------------------------------------------------- 288
213# @ebuild-function java-vm_revdep-mask 289# @FUNCTION: java-vm_revdep-mask
214# 290# @DESCRIPTION:
215# 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
216# where the VM is installed. Prevents pointless rebuilds - see bug #177925. 292# where the VM is installed. Prevents pointless rebuilds - see bug #177925.
217# Also gives a notice to the user. 293# Also gives a notice to the user.
218# 294#
219# @example 295# @CODE
220# java-vm_revdep-mask 296# Parameters:
221# java-vm_revdep-mask /path/to/jdk/
222#
223# @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)
224# ------------------------------------------------------------------------------ 298#
299# Examples:
300# java-vm_revdep-mask
301# java-vm_revdep-mask /path/to/jdk/
302#
303# @CODE
304
225java-vm_revdep-mask() { 305java-vm_revdep-mask() {
226 if has ${EAPI:-0} 0 1 2 && ! use prefix; then 306 if has ${EAPI:-0} 0 1 2 && ! use prefix; then
227 ED="${D}" 307 ED="${D}"
228 EPREFIX= 308 EPREFIX=
229 fi 309 fi
232 312
233 dodir /etc/revdep-rebuild/ 313 dodir /etc/revdep-rebuild/
234 echo "SEARCH_DIRS_MASK=\"${VMROOT}\""> "${ED}/etc/revdep-rebuild/61-${VMHANDLE}" 314 echo "SEARCH_DIRS_MASK=\"${VMROOT}\""> "${ED}/etc/revdep-rebuild/61-${VMHANDLE}"
235} 315}
236 316
237# ----------------------------------------------------------------------------- 317
238# @ebuild-function java-vm_sandbox-predict 318# @FUNCTION: java-vm_sandbox-predict
239# 319# @DESCRIPTION:
240# Install a sandbox control file. Specified paths won't cause a sandbox 320# Install a sandbox control file. Specified paths won't cause a sandbox
241# violation if opened read write but no write takes place. See bug 388937#c1 321# violation if opened read write but no write takes place. See bug 388937#c1
242# 322#
243# @example 323# @CODE
324# Examples:
244# java-vm_sandbox-predict /dev/random /proc/self/coredump_filter 325# java-vm_sandbox-predict /dev/random /proc/self/coredump_filter
245# ----------------------------------------------------------------------------- 326# @CODE
327
246java-vm_sandbox-predict() { 328java-vm_sandbox-predict() {
247 debug-print-function ${FUNCNAME} "$*" 329 debug-print-function ${FUNCNAME} "$*"
248 [[ -z "${1}" ]] && die "${FUNCNAME} takes at least one argument" 330 [[ -z "${1}" ]] && die "${FUNCNAME} takes at least one argument"
249 331
250 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}" 332 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
256 dodir /etc/sandbox.d 338 dodir /etc/sandbox.d
257 echo "SANDBOX_PREDICT=\"${path}\"" > "${ED}/etc/sandbox.d/20${VMHANDLE}" \ 339 echo "SANDBOX_PREDICT=\"${path}\"" > "${ED}/etc/sandbox.d/20${VMHANDLE}" \
258 || die "Failed to write sandbox control file" 340 || die "Failed to write sandbox control file"
259} 341}
260 342
343
344# @FUNCTION: java_get_plugin_dir_
345# @INTERNAL
346# @DESCRIPTION:
347# Get the java plugin dir.
348
261java_get_plugin_dir_() { 349java_get_plugin_dir_() {
262 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX= 350 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX=
263 echo "${EPREFIX}"/usr/$(get_libdir)/nsbrowser/plugins 351 echo "${EPREFIX}"/usr/$(get_libdir)/nsbrowser/plugins
264} 352}
265 353
354
355# @FUNCTION: install_mozilla_plugin
356# @DESCRIPTION:
357# Register a netscape java-plugin.
358
266install_mozilla_plugin() { 359install_mozilla_plugin() {
267 local plugin="${1}" 360 local plugin="${1}"
268 local variant="${2}" 361 local variant="${2}"
269 362
270 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}" 363 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
279 local plugin_dir="/usr/share/java-config-2/nsplugin" 372 local plugin_dir="/usr/share/java-config-2/nsplugin"
280 dodir "${plugin_dir}" 373 dodir "${plugin_dir}"
281 dosym "${plugin}" "${plugin_dir}/${VMHANDLE}${variant}-javaplugin.so" 374 dosym "${plugin}" "${plugin_dir}/${VMHANDLE}${variant}-javaplugin.so"
282} 375}
283 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
284java_mozilla_clean_() { 385java_mozilla_clean_() {
285 # Because previously some ebuilds installed symlinks outside of pkg_install
286 # and are left behind, which forces you to manualy remove them to select the
287 # jdk/jre you want to use for java
288 local plugin_dir=$(java_get_plugin_dir_) 386 local plugin_dir=$(java_get_plugin_dir_)
289 for file in ${plugin_dir}/javaplugin_*; do 387 for file in ${plugin_dir}/javaplugin_*; do
290 rm -f ${file} 388 rm -f ${file}
291 done 389 done
292 for file in ${plugin_dir}/libjavaplugin*; do 390 for file in ${plugin_dir}/libjavaplugin*; do
293 rm -f ${file} 391 rm -f ${file}
294 done 392 done
295} 393}
296
297# ------------------------------------------------------------------------------
298# @eclass-end
299# ------------------------------------------------------------------------------

Legend:
Removed from v.1.43  
changed lines
  Added in v.1.45

  ViewVC Help
Powered by ViewVC 1.1.20