/[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.19 - (hide annotations) (download)
Sun Dec 16 17:11:01 2007 UTC (6 years, 10 months ago) by caster
Branch: MAIN
Changes since 1.18: +25 -1 lines
Add a java-vm_revdep-mask() function for bug #177925.

1 nichoj 1.1 # Copyright 1999-2004 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 caster 1.19 # $Header: /var/cvsroot/gentoo-x86/eclass/java-vm-2.eclass,v 1.18 2007/10/09 10:18:14 ali_bush Exp $
4 nichoj 1.9
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 nichoj 1.1 #
13 nichoj 1.9 # -----------------------------------------------------------------------------
14 nichoj 1.1
15 betelgeuse 1.16 inherit eutils fdo-mime
16 nichoj 1.1
17     DEPEND="
18 ali_bush 1.18 =dev-java/java-config-2*
19 nichoj 1.4 >=sys-apps/portage-2.1"
20 nichoj 1.1 RDEPEND="
21 ali_bush 1.18 =dev-java/java-config-2*
22 nichoj 1.14 =dev-java/java-config-1.3*"
23 nichoj 1.1
24     export WANT_JAVA_CONFIG=2
25    
26     JAVA_VM_CONFIG_DIR="/usr/share/java-config-2/vm"
27     JAVA_VM_DIR="/usr/lib/jvm"
28    
29 betelgeuse 1.17 EXPORT_FUNCTIONS pkg_setup pkg_postinst pkg_prerm pkg_postrm
30    
31     java-vm-2_pkg_setup() {
32     if [[ "${SLOT}" != "0" ]]; then
33     VMHANDLE=${PN}-${SLOT}
34     else
35     VMHANDLE=${PN}
36     fi
37     }
38 nichoj 1.1
39     java-vm-2_pkg_postinst() {
40     # Set the generation-2 system VM, if it isn't set
41     if [[ -z "$(java-config-2 -f)" ]]; then
42     java_set_default_vm_
43     fi
44    
45 nichoj 1.9 # support both variables for now
46     if [[ ${JAVA_SUPPORTS_GENERATION_1} == 'true' && ${JAVA_VM_NO_GENERATION1} != 'true' ]]; then
47 nichoj 1.8 local systemvm1="$(java-config-1 -f 2>/dev/null)"
48 nichoj 1.9 # no generation-1 system-vm was previously set
49 nichoj 1.1 if [[ -z "${systemvm1}" ]]; then
50 nichoj 1.8 # if 20java exists, must be using old VM
51     if [[ -f /etc/env.d/20java ]]; then
52     ewarn "The current generation-1 system-vm is using an out-of-date VM,"
53     ewarn "as in, it hasn't been updated for use with the new Java sytem."
54     # othewise, it must not have been set before
55     else
56     ewarn "No generation-1 system-vm previously set."
57     fi
58     ewarn "Setting generation-1 system-vm to ${VMHANDLE}"
59     java-config-1 --set-system-vm=${P} 2>/dev/null
60 nichoj 1.1 # dirty check to see if we are upgrading current generation-1 system vm
61 nichoj 1.8 elif [[ "${systemvm1}" = ${VMHANDLE}* ]]; then
62 swegener 1.13 einfo "Emerging the current generation-1 system-vm..."
63 nichoj 1.8 einfo "Updating its config files."
64 swegener 1.13 java-config-1 --set-system-vm=${P} 2>/dev/null
65 nichoj 1.8 # dirty check to see if current system vm is a jre - replace it with
66     elif [[ "${systemvm1}" = *jre* ]]; then
67 swegener 1.13 ewarn "Current generation-1 system-vm is a JRE"
68 nichoj 1.8 ewarn "For the new and old Java systems to coexist,"
69     ewarn "the generation-1 system-vm must be a JDK."
70     ewarn "Setting generation-1 system-vm to ${VMHANDLE}"
71 swegener 1.13 java-config-1 --set-system-vm=${P} 2>/dev/null
72 nichoj 1.1 fi
73     # else... some other VM is being updated, so we don't have to worry
74 nichoj 1.9 else
75     einfo "JREs and 1.5+ JDKs are not supported for use with generation-1."
76     einfo "This is because generation-1 is only for use for building packages."
77     einfo "Only generation-2 should be used by end-users,"
78     einfo "where all JREs and JDKs will be available"
79 nichoj 1.1 fi
80    
81 nichoj 1.15 echo
82    
83     java-vm_check-nsplugin
84     java_mozilla_clean_
85 betelgeuse 1.16 fdo-mime_desktop_database_update
86 nichoj 1.15 }
87    
88     java-vm_check-nsplugin() {
89     local libdir
90     if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then
91     libdir=lib32
92     else
93     libdir=lib
94     fi
95 nichoj 1.9 # Install a default nsplugin if we don't already have one
96 nichoj 1.3 if has nsplugin ${IUSE} && use nsplugin; then
97 nichoj 1.15 if [[ ! -f /usr/${libdir}/nsbrowser/plugins/javaplugin.so ]]; then
98     einfo "No system nsplugin currently set."
99     java-vm_set-nsplugin
100 caster 1.12 else
101     einfo "System nsplugin is already set, not changing it."
102 nichoj 1.3 fi
103 caster 1.12 einfo "You can change nsplugin with eselect java-nsplugin."
104 nichoj 1.3 fi
105 nichoj 1.15 }
106 nichoj 1.3
107 nichoj 1.15 java-vm_set-nsplugin() {
108     local extra_args
109     if use amd64; then
110     if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then
111     extra_args="32bit"
112     else
113     extra_args="64bit"
114     fi
115     einfo "Setting ${extra_args} nsplugin to ${VMHANDLE}"
116     else
117     einfo "Setting nsplugin to ${VMHANDLE}..."
118     fi
119     eselect java-nsplugin set ${extra_args} ${VMHANDLE}
120 nichoj 1.1 }
121    
122     java-vm-2_pkg_prerm() {
123 nichoj 1.9 if [[ "$(java-config -f 2>/dev/null)" == "${VMHANDLE}" ]]; then
124     ewarn "It appears you are removing your system-vm!"
125     ewarn "Please run java-config -L to list available VMs,"
126     ewarn "then use java-config -S to set a new system-vm!"
127 nichoj 1.1 fi
128     }
129    
130 betelgeuse 1.16 java-vm-2_pkg_postrm() {
131     fdo-mime_desktop_database_update
132     }
133    
134 nichoj 1.1 java_set_default_vm_() {
135     java-config-2 --set-system-vm="${VMHANDLE}"
136    
137 nichoj 1.9 einfo " ${P} set as the default system-vm."
138 nichoj 1.1 }
139    
140     get_system_arch() {
141     local sarch
142     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/)
143     if [ -z "${sarch}" ]; then
144     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/)
145     fi
146     echo ${sarch}
147     }
148    
149     # TODO rename to something more evident, like install_env_file
150     set_java_env() {
151     local platform="$(get_system_arch)"
152     local env_file="${D}${JAVA_VM_CONFIG_DIR}/${VMHANDLE}"
153     local old_env_file="${D}/etc/env.d/java/20${P}"
154 nichoj 1.2 local source_env_file="${FILESDIR}/${VMHANDLE}.env"
155 nichoj 1.1
156     if [[ ! -f ${source_env_file} ]]; then
157     die "Unable to find the env file: ${source_env_file}"
158     fi
159    
160     dodir ${JAVA_VM_CONFIG_DIR}
161     sed \
162     -e "s/@P@/${P}/g" \
163     -e "s/@PN@/${PN}/g" \
164     -e "s/@PV@/${PV}/g" \
165     -e "s/@PF@/${PF}/g" \
166     -e "s/@PLATFORM@/${platform}/g" \
167     -e "/^LDPATH=.*lib\\/\\\"/s|\"\\(.*\\)\"|\"\\1${platform}/:\\1${platform}/server/\"|" \
168     < ${source_env_file} \
169     > ${env_file} || die "sed failed"
170    
171     echo "VMHANDLE=\"${VMHANDLE}\"" >> ${env_file}
172 swegener 1.13
173 nichoj 1.1 # generation-1 compatibility
174 nichoj 1.9 # respect both variables for now...
175     if [[ ${JAVA_SUPPORTS_GENERATION_1} == 'true' && ${JAVA_VM_NO_GENERATION1} != 'true' ]]; then
176     einfo "Enabling generation-1 compatibility..."
177     dodir /etc/env.d/java # generation-1 compatibility
178 nichoj 1.1 # We need to strip some things out of the new style env,
179     # because these end up going in the env
180     sed -e 's/.*CLASSPATH.*//' \
181     -e 's/.*PROVIDES.*//' \
182     ${env_file} \
183 nichoj 1.9 > ${old_env_file} || die "failed to create generation-1 env file"
184     else
185     ewarn "Disabling generation-1 compatibility..."
186 nichoj 1.1 fi
187    
188     [[ -n ${JAVA_PROVIDE} ]] && echo "PROVIDES=\"${JAVA_PROVIDE}\"" >> ${env_file}
189    
190     local java_home=$(source ${env_file}; echo ${JAVA_HOME})
191     [[ -z ${java_home} ]] && die "No JAVA_HOME defined in ${env_file}"
192    
193     # Make the symlink
194     dosym ${java_home} ${JAVA_VM_DIR}/${VMHANDLE} \
195 nichoj 1.10 || die "Failed to make VM symlink at ${JAVA_VM_DIR}/${VMHANDLE}"
196 nichoj 1.1 }
197    
198 caster 1.19 # -----------------------------------------------------------------------------
199     # @ebuild-function java-vm_revdep-mask
200     #
201     # Installs a revdep-rebuild control file which SEARCH_DIR_MASK set to the path
202     # where the VM is installed. Prevents pointless rebuilds - see bug #177925.
203     # Also gives a notice to the user.
204     #
205     # @example
206     # java-vm_revdep-mask
207     # java-vm_revdep-mask /path/to/jdk/
208     #
209     # @param $1 - Path of the VM (defaults to /opt/${P} if not set)
210     # ------------------------------------------------------------------------------
211     java-vm_revdep-mask() {
212     local VMROOT="${1-/opt/${P}}"
213    
214     dodir /etc/revdep-rebuild/
215     echo "SEARCH_DIRS_MASK=\"${VMROOT}\""> "${D}/etc/revdep-rebuild/61-${VMHANDLE}"
216    
217     elog "A revdep-rebuild control file was installed to prevent reinstalls due to"
218     elog "missing dependencies (see bug #177925 for more info). Note that some parts"
219     elog "of the JVM may require dependencies that are pulled only through respective"
220     elog "USE flags (typically X, alsa, odbc) and some Java code may fail without them."
221     }
222 nichoj 1.1
223     java_get_plugin_dir_() {
224     echo /usr/$(get_libdir)/nsbrowser/plugins
225     }
226    
227     install_mozilla_plugin() {
228     local plugin=${1}
229    
230     if [ ! -f "${D}/${plugin}" ] ; then
231     die "Cannot find mozilla plugin at ${D}/${plugin}"
232     fi
233    
234 nichoj 1.3 local plugin_dir=/usr/share/java-config-2/nsplugin
235 nichoj 1.1 dodir ${plugin_dir}
236 nichoj 1.3 dosym ${plugin} ${plugin_dir}/${VMHANDLE}-javaplugin.so
237 nichoj 1.1 }
238    
239     java_mozilla_clean_() {
240     # Because previously some ebuilds installed symlinks outside of pkg_install
241     # and are left behind, which forces you to manualy remove them to select the
242     # jdk/jre you want to use for java
243     local plugin_dir=$(java_get_plugin_dir_)
244     for file in ${plugin_dir}/javaplugin_*; do
245     rm -f ${file}
246     done
247     for file in ${plugin_dir}/libjavaplugin*; do
248     rm -f ${file}
249     done
250     }
251    
252 nichoj 1.9 # ------------------------------------------------------------------------------
253     # @eclass-end
254     # ------------------------------------------------------------------------------

  ViewVC Help
Powered by ViewVC 1.1.20