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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.37 - (show annotations) (download)
Sat Nov 12 13:05:33 2011 UTC (2 years, 9 months ago) by sera
Branch: MAIN
Changes since 1.36: +24 -2 lines
Add java-vm_sandbox-predict for installing a sandbox control file along with any JVM that needs it. Bug 388937#c1

1 # Copyright 1999-2011 Gentoo Foundation
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.36 2011/10/30 11:06:38 caster Exp $
4
5 # -----------------------------------------------------------------------------
6 # @eclass-begin
7 # @eclass-shortdesc Java Virtual Machine eclass
8 # @eclass-maintainer java@gentoo.org
9 #
10 # This eclass provides functionality which assists with installing
11 # virtual machines, and ensures that they are recognized by java-config.
12 #
13 # -----------------------------------------------------------------------------
14
15 inherit eutils fdo-mime multilib prefix
16
17 DEPEND="=dev-java/java-config-2*"
18 has "${EAPI}" 0 1 && DEPEND="${DEPEND} >=sys-apps/portage-2.1"
19
20 RDEPEND="
21 =dev-java/java-config-2*"
22
23 export WANT_JAVA_CONFIG=2
24
25 JAVA_VM_CONFIG_DIR="/usr/share/java-config-2/vm"
26 JAVA_VM_DIR="/usr/lib/jvm"
27 JAVA_VM_SYSTEM="/etc/java-config-2/current-system-vm"
28 JAVA_VM_BUILD_ONLY="${JAVA_VM_BUILD_ONLY:-FALSE}"
29
30 EXPORT_FUNCTIONS pkg_setup pkg_postinst pkg_prerm pkg_postrm
31
32 java-vm-2_pkg_setup() {
33 if [[ "${SLOT}" != "0" ]]; then
34 VMHANDLE=${PN}-${SLOT}
35 else
36 VMHANDLE=${PN}
37 fi
38 }
39
40 java-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
43 # e.g. icedtea6-bin as valid system VM if icedtea6 is set but invalid (e.g. due
44 # to the migration to icedtea-6)
45 if [[ ! -L "${JAVA_VM_SYSTEM}" ]]; then
46 java_set_default_vm_
47 else
48 local current_vm_path="$(readlink "${JAVA_VM_SYSTEM}")"
49 local current_vm="$(basename "${current_vm_path}")"
50 if [[ ! -L "${JAVA_VM_DIR}/${current_vm}" ]]; then
51 java_set_default_vm_
52 fi
53 fi
54
55 java-vm_check-nsplugin
56 java_mozilla_clean_
57 fdo-mime_desktop_database_update
58 }
59
60 java-vm_check-nsplugin() {
61 local libdir
62 if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then
63 libdir=lib32
64 else
65 libdir=lib
66 fi
67
68 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX=
69
70 # Install a default nsplugin if we don't already have one
71 if has nsplugin ${IUSE} && use nsplugin; then
72 if [[ ! -f "${EPREFIX}"/usr/${libdir}/nsbrowser/plugins/javaplugin.so ]]; then
73 einfo "No system nsplugin currently set."
74 java-vm_set-nsplugin
75 else
76 einfo "System nsplugin is already set, not changing it."
77 fi
78 einfo "You can change nsplugin with eselect java-nsplugin."
79 fi
80 }
81
82 java-vm_set-nsplugin() {
83 local extra_args
84 if use amd64; then
85 if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then
86 extra_args="32bit"
87 else
88 extra_args="64bit"
89 fi
90 einfo "Setting ${extra_args} nsplugin to ${VMHANDLE}"
91 else
92 einfo "Setting nsplugin to ${VMHANDLE}..."
93 fi
94 eselect java-nsplugin set ${extra_args} ${VMHANDLE}
95 }
96
97 java-vm-2_pkg_prerm() {
98 # 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
100 ewarn "It appears you are removing your system-vm!"
101 ewarn "Please run java-config -L to list available VMs,"
102 ewarn "then use java-config -S to set a new system-vm!"
103 fi
104 }
105
106 java-vm-2_pkg_postrm() {
107 fdo-mime_desktop_database_update
108 }
109
110 java_set_default_vm_() {
111 java-config-2 --set-system-vm="${VMHANDLE}"
112
113 einfo " ${P} set as the default system-vm."
114 }
115
116 get_system_arch() {
117 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/)
119 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/)
121 fi
122 echo ${sarch}
123 }
124
125 # TODO rename to something more evident, like install_env_file
126 set_java_env() {
127 debug-print-function ${FUNCNAME} $*
128
129 if has ${EAPI:-0} 0 1 2 && ! use prefix ; then
130 ED="${D}"
131 EPREFIX=""
132 fi
133
134 local platform="$(get_system_arch)"
135 local env_file="${ED}${JAVA_VM_CONFIG_DIR}/${VMHANDLE}"
136 local old_env_file="${ED}/etc/env.d/java/20${P}"
137 if [[ ${1} ]]; then
138 local source_env_file="${1}"
139 else
140 local source_env_file="${FILESDIR}/${VMHANDLE}.env"
141 fi
142
143 if [[ ! -f ${source_env_file} ]]; then
144 die "Unable to find the env file: ${source_env_file}"
145 fi
146
147 dodir ${JAVA_VM_CONFIG_DIR}
148 sed \
149 -e "s/@P@/${P}/g" \
150 -e "s/@PN@/${PN}/g" \
151 -e "s/@PV@/${PV}/g" \
152 -e "s/@PF@/${PF}/g" \
153 -e "s/@PLATFORM@/${platform}/g" \
154 -e "s/@LIBDIR@/$(get_libdir)/g" \
155 -e "/^LDPATH=.*lib\\/\\\"/s|\"\\(.*\\)\"|\"\\1${platform}/:\\1${platform}/server/\"|" \
156 < "${source_env_file}" \
157 > "${env_file}" || die "sed failed"
158
159 (
160 echo "VMHANDLE=\"${VMHANDLE}\""
161 echo "BUILD_ONLY=\"${JAVA_VM_BUILD_ONLY}\""
162 ) >> "${env_file}"
163
164 eprefixify ${env_file}
165
166 [[ -n ${JAVA_PROVIDE} ]] && echo "PROVIDES=\"${JAVA_PROVIDE}\"" >> ${env_file}
167
168 local java_home=$(source "${env_file}"; echo ${JAVA_HOME})
169 [[ -z ${java_home} ]] && die "No JAVA_HOME defined in ${env_file}"
170
171 # Make the symlink
172 dodir "${JAVA_VM_DIR}"
173 dosym ${java_home#${EPREFIX}} ${JAVA_VM_DIR}/${VMHANDLE} \
174 || die "Failed to make VM symlink at ${JAVA_VM_DIR}/${VMHANDLE}"
175 }
176
177 # -----------------------------------------------------------------------------
178 # @ebuild-function java-vm_revdep-mask
179 #
180 # 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.
182 # Also gives a notice to the user.
183 #
184 # @example
185 # java-vm_revdep-mask
186 # java-vm_revdep-mask /path/to/jdk/
187 #
188 # @param $1 - Path of the VM (defaults to /opt/${P} if not set)
189 # ------------------------------------------------------------------------------
190 java-vm_revdep-mask() {
191 if has ${EAPI:-0} 0 1 2 && ! use prefix; then
192 ED="${D}"
193 EPREFIX=
194 fi
195
196 local VMROOT="${1-"${EPREFIX}"/opt/${P}}"
197
198 dodir /etc/revdep-rebuild/
199 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 }
206
207 # -----------------------------------------------------------------------------
208 # @ebuild-function java-vm_sandbox-predict
209 #
210 # Install a sandbox control file. Specified paths won't cause a sandbox
211 # violation if opened read write but no write takes place. See bug 388937#c1
212 #
213 # @example
214 # java-vm_sandbox-predict /dev/random /proc/self/coredump_filter
215 # -----------------------------------------------------------------------------
216 java-vm_sandbox-predict() {
217 debug-print-function ${FUNCNAME} "$*"
218 [[ -z "${1}" ]] && die "${FUNCNAME} takes at least one argument"
219
220 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
221
222 local path path_arr=("$@")
223 IFS=":" path="${path_arr[*]}"
224 dodir /etc/sandbox.d
225 echo "SANDBOX_PREDICT=\"${path}\"" > "${ED}/etc/sandbox.d/20${VMHANDLE}" \
226 || die "Failed to write sandbox control file"
227 }
228
229 java_get_plugin_dir_() {
230 has ${EAPI:-0} 0 1 2 && ! use prefix && EPREFIX=
231 echo "${EPREFIX}"/usr/$(get_libdir)/nsbrowser/plugins
232 }
233
234 install_mozilla_plugin() {
235 local plugin="${1}"
236 local variant="${2}"
237
238 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
239 if [[ ! -f "${ED}/${plugin}" ]]; then
240 die "Cannot find mozilla plugin at ${ED}/${plugin}"
241 fi
242
243 if [[ -n "${variant}" ]]; then
244 variant="-${variant}"
245 fi
246
247 local plugin_dir="/usr/share/java-config-2/nsplugin"
248 dodir "${plugin_dir}"
249 dosym "${plugin}" "${plugin_dir}/${VMHANDLE}${variant}-javaplugin.so"
250 }
251
252 java_mozilla_clean_() {
253 # Because previously some ebuilds installed symlinks outside of pkg_install
254 # and are left behind, which forces you to manualy remove them to select the
255 # jdk/jre you want to use for java
256 local plugin_dir=$(java_get_plugin_dir_)
257 for file in ${plugin_dir}/javaplugin_*; do
258 rm -f ${file}
259 done
260 for file in ${plugin_dir}/libjavaplugin*; do
261 rm -f ${file}
262 done
263 }
264
265 # ------------------------------------------------------------------------------
266 # @eclass-end
267 # ------------------------------------------------------------------------------

  ViewVC Help
Powered by ViewVC 1.1.20