/[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.21 - (hide annotations) (download)
Mon Jul 7 16:48:45 2008 UTC (5 years, 9 months ago) by betelgeuse
Branch: MAIN
Changes since 1.20: +96 -6 lines
Always put junit to gentoo.classpath when ANT_TASKS has ant-junit. Fixes bug #225981.

1 nichoj 1.1 # Copyright 1999-2004 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 betelgeuse 1.20 # $Header: /var/cvsroot/gentoo-x86/eclass/java-vm-2.eclass,v 1.19 2007/12/16 17:11:01 caster 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.21 EXPORT_FUNCTIONS pkg_setup src_install pkg_postinst pkg_prerm pkg_postrm
30 betelgeuse 1.17
31     java-vm-2_pkg_setup() {
32     if [[ "${SLOT}" != "0" ]]; then
33     VMHANDLE=${PN}-${SLOT}
34     else
35     VMHANDLE=${PN}
36     fi
37 betelgeuse 1.21 debug-print "set VMHANDLE to ${VMHANDLE}"
38     }
39    
40     java-vm_2_src_install() {
41     local dirs="${JAVA_VM_SUBDIRS:-bin include jre lib man}"
42     local dest="/opt/${P}"
43     local ddest="${D}/opt/${P}"
44    
45     # Set PaX markings on all JDK/JRE executables to allow code-generation on
46     # the heap by the JIT compiler.
47     if hasq hardened $IUSE; then
48     use hardeded && pax-mark m $(list-paxables ${S}{,/jre}/bin/*)
49     fi
50    
51     cp -pPR $i "${ddest}" || die "failed to copy"
52    
53     if [[ -e COPYRIGHT ]]; then
54     dodoc COPYRIGHT || die
55     fi
56    
57     if [[ -e README.html ]]; then
58     dohtml README.html || die
59     fi
60    
61     cp -pP src.zip "${D}/opt/${P}/" || die "src.zip doesn't exist"
62    
63     if use examples; then
64     local edest="${ddest}/share"
65     dodir "${edest}"
66     cp -pPR demo sample "${edest}" || die
67     fi
68    
69     if hasq jce $IUSE && use jce; then
70     cd "${ddest}/jre/lib/security"
71     dodir ${dest}/jre/lib/security/strong-jce
72     mv "${ddest}/jre/lib/security/US_export_policy.jar" "${ddest}"/jre/lib/security/strong-jce
73     mv "${ddest}"/jre/lib/security/local_policy.jar \
74     "${ddest}/jre/lib/security/strong-jce"
75     local jcedir=/opt/sun-jce-bin-${JAVA_VM_JCE_VERSION}/jre/lib/security/unlimited-jce
76     dosym ${jcedir}/US_export_policy.jar ${dest}/jre/lib/security/ || die
77     dosym ${jcedir}/local_policy.jar ${dest}/jre/lib/security/ || die
78     fi
79    
80     if use nsplugin; then
81     local plugin_dir="ns7-gcc29"
82    
83     if use x86 ; then
84     install_mozilla_plugin ${dest}/jre/plugin/i386/${plugin_dir}/libjavaplugin_oji.so
85     else
86     eerror "No plugin available for amd64 arch"
87     fi
88     fi
89    
90     # create dir for system preferences
91     dodir /opt/${P}/jre/.systemPrefs
92     # Create files used as storage for system preferences.
93     touch ${D}/opt/${P}/jre/.systemPrefs/.system.lock
94     chmod 644 ${D}/opt/${P}/jre/.systemPrefs/.system.lock
95     touch ${D}/opt/${P}/jre/.systemPrefs/.systemRootModFile
96     chmod 644 ${D}/opt/${P}/jre/.systemPrefs/.systemRootModFile
97    
98     if [[ -f ${D}/opt/${P}/jre/plugin/desktop/sun_java.desktop ]]; then
99     # install control panel for Gnome/KDE
100     # The jre also installs these so make sure that they do not have the same
101     # Name
102     sed -e "s/\(Name=\)Java/\1 Java Control Panel for Sun JDK ${SLOT}/" \
103     -e "s#Exec=.*#Exec=/opt/${P}/jre/bin/ControlPanel#" \
104     -e "s#Icon=.*#Icon=/opt/${P}/jre/plugin/desktop/sun_java.png#" \
105     ${D}/opt/${P}/jre/plugin/desktop/sun_java.desktop > \
106     ${T}/sun_jdk-${SLOT}.desktop
107    
108     domenu ${T}/sun_jdk-${SLOT}.desktop
109     fi
110    
111     # bug #56444
112     insinto /opt/${P}/jre/lib/
113     newins "${FILESDIR}"/fontconfig.Gentoo.properties fontconfig.properties
114    
115     set_java_env
116 betelgeuse 1.17 }
117 nichoj 1.1
118     java-vm-2_pkg_postinst() {
119     # Set the generation-2 system VM, if it isn't set
120     if [[ -z "$(java-config-2 -f)" ]]; then
121     java_set_default_vm_
122     fi
123    
124 nichoj 1.9 # support both variables for now
125     if [[ ${JAVA_SUPPORTS_GENERATION_1} == 'true' && ${JAVA_VM_NO_GENERATION1} != 'true' ]]; then
126 nichoj 1.8 local systemvm1="$(java-config-1 -f 2>/dev/null)"
127 nichoj 1.9 # no generation-1 system-vm was previously set
128 nichoj 1.1 if [[ -z "${systemvm1}" ]]; then
129 nichoj 1.8 # if 20java exists, must be using old VM
130     if [[ -f /etc/env.d/20java ]]; then
131     ewarn "The current generation-1 system-vm is using an out-of-date VM,"
132     ewarn "as in, it hasn't been updated for use with the new Java sytem."
133     # othewise, it must not have been set before
134     else
135     ewarn "No generation-1 system-vm previously set."
136     fi
137     ewarn "Setting generation-1 system-vm to ${VMHANDLE}"
138     java-config-1 --set-system-vm=${P} 2>/dev/null
139 nichoj 1.1 # dirty check to see if we are upgrading current generation-1 system vm
140 nichoj 1.8 elif [[ "${systemvm1}" = ${VMHANDLE}* ]]; then
141 swegener 1.13 einfo "Emerging the current generation-1 system-vm..."
142 nichoj 1.8 einfo "Updating its config files."
143 swegener 1.13 java-config-1 --set-system-vm=${P} 2>/dev/null
144 nichoj 1.8 # dirty check to see if current system vm is a jre - replace it with
145     elif [[ "${systemvm1}" = *jre* ]]; then
146 swegener 1.13 ewarn "Current generation-1 system-vm is a JRE"
147 nichoj 1.8 ewarn "For the new and old Java systems to coexist,"
148     ewarn "the generation-1 system-vm must be a JDK."
149     ewarn "Setting generation-1 system-vm to ${VMHANDLE}"
150 swegener 1.13 java-config-1 --set-system-vm=${P} 2>/dev/null
151 nichoj 1.1 fi
152     # else... some other VM is being updated, so we don't have to worry
153 nichoj 1.9 else
154     einfo "JREs and 1.5+ JDKs are not supported for use with generation-1."
155     einfo "This is because generation-1 is only for use for building packages."
156     einfo "Only generation-2 should be used by end-users,"
157     einfo "where all JREs and JDKs will be available"
158 nichoj 1.1 fi
159    
160 nichoj 1.15 echo
161    
162     java-vm_check-nsplugin
163     java_mozilla_clean_
164 betelgeuse 1.16 fdo-mime_desktop_database_update
165 nichoj 1.15 }
166    
167     java-vm_check-nsplugin() {
168     local libdir
169     if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then
170     libdir=lib32
171     else
172     libdir=lib
173     fi
174 nichoj 1.9 # Install a default nsplugin if we don't already have one
175 nichoj 1.3 if has nsplugin ${IUSE} && use nsplugin; then
176 nichoj 1.15 if [[ ! -f /usr/${libdir}/nsbrowser/plugins/javaplugin.so ]]; then
177     einfo "No system nsplugin currently set."
178     java-vm_set-nsplugin
179 caster 1.12 else
180     einfo "System nsplugin is already set, not changing it."
181 nichoj 1.3 fi
182 caster 1.12 einfo "You can change nsplugin with eselect java-nsplugin."
183 nichoj 1.3 fi
184 nichoj 1.15 }
185 nichoj 1.3
186 nichoj 1.15 java-vm_set-nsplugin() {
187     local extra_args
188     if use amd64; then
189     if [[ ${VMHANDLE} =~ emul-linux-x86 ]]; then
190     extra_args="32bit"
191     else
192     extra_args="64bit"
193     fi
194     einfo "Setting ${extra_args} nsplugin to ${VMHANDLE}"
195     else
196     einfo "Setting nsplugin to ${VMHANDLE}..."
197     fi
198     eselect java-nsplugin set ${extra_args} ${VMHANDLE}
199 nichoj 1.1 }
200    
201     java-vm-2_pkg_prerm() {
202 betelgeuse 1.21 true # used to have the system vm removing here but can't remove to keep API
203 nichoj 1.1 }
204    
205 betelgeuse 1.16 java-vm-2_pkg_postrm() {
206 betelgeuse 1.21 debug-print-function ${FUNCNAME} "${@}"
207 betelgeuse 1.16 fdo-mime_desktop_database_update
208 betelgeuse 1.21
209     atom=${CATEGORY}/${PN}
210     [[ ${SLOT} != 0 ]] && atom="=${atom}-${SLOT}*"
211    
212     if ! has_version ${atom}; then
213     debug-print "We don't have ${atom} installed so this is not an upgrade."
214     if [[ "$(java-config -f 2>/dev/null)" == "${VMHANDLE}" ]]; then
215     ewarn "It appears you are removing your system-vm!"
216     ewarn "Please run java-config -L to list available VMs,"
217     ewarn "then use java-config -S to set a new system-vm!"
218     fi
219     else
220     elog "We have ${atom} installed."
221     fi
222 betelgeuse 1.16 }
223    
224 nichoj 1.1 java_set_default_vm_() {
225     java-config-2 --set-system-vm="${VMHANDLE}"
226    
227 nichoj 1.9 einfo " ${P} set as the default system-vm."
228 nichoj 1.1 }
229    
230     get_system_arch() {
231     local sarch
232     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/)
233     if [ -z "${sarch}" ]; then
234     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/)
235     fi
236     echo ${sarch}
237     }
238    
239     # TODO rename to something more evident, like install_env_file
240     set_java_env() {
241 betelgeuse 1.20 debug-print-function ${FUNCNAME} $*
242 nichoj 1.1 local platform="$(get_system_arch)"
243     local env_file="${D}${JAVA_VM_CONFIG_DIR}/${VMHANDLE}"
244     local old_env_file="${D}/etc/env.d/java/20${P}"
245 betelgeuse 1.20 if [[ ${1} ]]; then
246     local source_env_file="${1}"
247     else
248     local source_env_file="${FILESDIR}/${VMHANDLE}.env"
249     fi
250 nichoj 1.1
251     if [[ ! -f ${source_env_file} ]]; then
252     die "Unable to find the env file: ${source_env_file}"
253     fi
254    
255     dodir ${JAVA_VM_CONFIG_DIR}
256     sed \
257     -e "s/@P@/${P}/g" \
258     -e "s/@PN@/${PN}/g" \
259     -e "s/@PV@/${PV}/g" \
260     -e "s/@PF@/${PF}/g" \
261     -e "s/@PLATFORM@/${platform}/g" \
262     -e "/^LDPATH=.*lib\\/\\\"/s|\"\\(.*\\)\"|\"\\1${platform}/:\\1${platform}/server/\"|" \
263     < ${source_env_file} \
264     > ${env_file} || die "sed failed"
265    
266     echo "VMHANDLE=\"${VMHANDLE}\"" >> ${env_file}
267 swegener 1.13
268 nichoj 1.1 # generation-1 compatibility
269 nichoj 1.9 # respect both variables for now...
270     if [[ ${JAVA_SUPPORTS_GENERATION_1} == 'true' && ${JAVA_VM_NO_GENERATION1} != 'true' ]]; then
271     einfo "Enabling generation-1 compatibility..."
272     dodir /etc/env.d/java # generation-1 compatibility
273 nichoj 1.1 # We need to strip some things out of the new style env,
274     # because these end up going in the env
275     sed -e 's/.*CLASSPATH.*//' \
276     -e 's/.*PROVIDES.*//' \
277     ${env_file} \
278 nichoj 1.9 > ${old_env_file} || die "failed to create generation-1 env file"
279     else
280     ewarn "Disabling generation-1 compatibility..."
281 nichoj 1.1 fi
282    
283     [[ -n ${JAVA_PROVIDE} ]] && echo "PROVIDES=\"${JAVA_PROVIDE}\"" >> ${env_file}
284    
285     local java_home=$(source ${env_file}; echo ${JAVA_HOME})
286     [[ -z ${java_home} ]] && die "No JAVA_HOME defined in ${env_file}"
287    
288     # Make the symlink
289     dosym ${java_home} ${JAVA_VM_DIR}/${VMHANDLE} \
290 nichoj 1.10 || die "Failed to make VM symlink at ${JAVA_VM_DIR}/${VMHANDLE}"
291 nichoj 1.1 }
292    
293 caster 1.19 # -----------------------------------------------------------------------------
294     # @ebuild-function java-vm_revdep-mask
295     #
296     # Installs a revdep-rebuild control file which SEARCH_DIR_MASK set to the path
297     # where the VM is installed. Prevents pointless rebuilds - see bug #177925.
298     # Also gives a notice to the user.
299     #
300     # @example
301     # java-vm_revdep-mask
302     # java-vm_revdep-mask /path/to/jdk/
303     #
304     # @param $1 - Path of the VM (defaults to /opt/${P} if not set)
305     # ------------------------------------------------------------------------------
306     java-vm_revdep-mask() {
307     local VMROOT="${1-/opt/${P}}"
308    
309     dodir /etc/revdep-rebuild/
310     echo "SEARCH_DIRS_MASK=\"${VMROOT}\""> "${D}/etc/revdep-rebuild/61-${VMHANDLE}"
311    
312     elog "A revdep-rebuild control file was installed to prevent reinstalls due to"
313     elog "missing dependencies (see bug #177925 for more info). Note that some parts"
314     elog "of the JVM may require dependencies that are pulled only through respective"
315     elog "USE flags (typically X, alsa, odbc) and some Java code may fail without them."
316     }
317 nichoj 1.1
318     java_get_plugin_dir_() {
319     echo /usr/$(get_libdir)/nsbrowser/plugins
320     }
321    
322     install_mozilla_plugin() {
323     local plugin=${1}
324    
325     if [ ! -f "${D}/${plugin}" ] ; then
326     die "Cannot find mozilla plugin at ${D}/${plugin}"
327     fi
328    
329 nichoj 1.3 local plugin_dir=/usr/share/java-config-2/nsplugin
330 nichoj 1.1 dodir ${plugin_dir}
331 nichoj 1.3 dosym ${plugin} ${plugin_dir}/${VMHANDLE}-javaplugin.so
332 nichoj 1.1 }
333    
334     java_mozilla_clean_() {
335     # Because previously some ebuilds installed symlinks outside of pkg_install
336     # and are left behind, which forces you to manualy remove them to select the
337     # jdk/jre you want to use for java
338     local plugin_dir=$(java_get_plugin_dir_)
339     for file in ${plugin_dir}/javaplugin_*; do
340     rm -f ${file}
341     done
342     for file in ${plugin_dir}/libjavaplugin*; do
343     rm -f ${file}
344     done
345     }
346    
347 nichoj 1.9 # ------------------------------------------------------------------------------
348     # @eclass-end
349     # ------------------------------------------------------------------------------

  ViewVC Help
Powered by ViewVC 1.1.20