# Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI="2" inherit java-vm-2 multilib versionator multilib-native DESCRIPTION="Java wrappers around GCJ" HOMEPAGE="http://www.gentoo.org/" SRC_URI="" LICENSE="GPL-2" KEYWORDS="" IUSE="nsplugin multislot" # SLOT logic from toolchain.eclass CTARGET=${CTARGET:-${CHOST}} GCC_BRANCH_VER=$(get_version_component_range 1-2 ${PV}) GCC_CONFIG_VER=${GCC_CONFIG_VER:-$(replace_version_separator 3 '-' ${PV})} if use multislot ; then SLOT="${CTARGET}-${GCC_CONFIG_VER}" else SLOT="${GCC_BRANCH_VER}" fi RDEPEND="~sys-devel/gcc-${PV}[gcj,nsplugin?] >=dev-java/eclipse-ecj-3.2.1 >=dev-java/java-config-2 nsplugin? ( || ( www-client/mozilla-firefox net-libs/xulrunner www-client/seamonkey ) )" DEPEND="${RDEPEND}" PDEPEND="dev-java/gjdoc" JAVA_PROVIDE="jdbc-stdext jdbc2-stdext gnu-jaxp" pkg_setup() { if use nsplugin; then if ! ( built_with_use =sys-devel/gcc-${PV} gtk && built_with_use =sys-devel/gcc-${PV} nsplugin ); then eerror "Using gcj as a Mozilla plugin requires that gcc was compiled"; eerror "with the nsplugin AND gtk USE flags."; eerror "Please rebuild sys-devel/gcc-${PV} with USE=\"nsplugin gtk\""; die "Rebuild sys-devel/gcc with nsplugin support" else einfo "Enabling gcjwebplugin" fi fi java-vm-2_pkg_setup } src_unpack() { mkdir -p ${S} } multilib-native_src_install_internal() { # jre lib paths ... local gccbin=$(gcc-config -B ${CTARGET}-${GCC_CONFIG_VER}) local libgcjpath=$(gcc-config -L ${CTARGET}-${GCC_CONFIG_VER}) local abi_suffix="" [[ -x "${gccbin}"/gcj ]] || die "gcj missing for gcc-${PV}" local libgcj_soversion=$(ls -l $(${gccbin}/gcj \ -print-file-name=libgcj.so) | sed -r 's#.*\.so\.([0-9]*).*$#\1#') local GCJ_JAVA_HOME=/usr/"$(get_libdir)"/"${PN}"-"${SLOT}"-"${libgcj_soversion}" local CP_NATIVE_TOOLS=/usr/"$(get_libdir)"/gcj-"${PV/_/-}"-"${libgcj_soversion}" local gcj_java_version=$(LD_LIBRARY_PATH=${libgcjpath} \ ${gccbin}/gij -version|grep "java version" \ | sed -r 's#java version \"(.*)\"#\1#') # links dodir "${GCJ_JAVA_HOME}"/bin dosym "${gccbin}"/gij "${GCJ_JAVA_HOME}"/bin/gij dodir "${GCJ_JAVA_HOME}"/jre/bin dosym "${GCJ_JAVA_HOME}"/bin/java "${GCJ_JAVA_HOME}"/jre/bin/java dosym "${gccbin}"/gjar "${GCJ_JAVA_HOME}"/bin/jar dosym "${gccbin}"/grmic "${GCJ_JAVA_HOME}"/bin/rmic dosym "${gccbin}"/gjavah "${GCJ_JAVA_HOME}"/bin/javah dosym "${gccbin}"/jcf-dump "${GCJ_JAVA_HOME}"/bin/javap dosym "${gccbin}"/gappletviewer "${GCJ_JAVA_HOME}"/bin/appletviewer dosym "${gccbin}"/gjarsigner "${GCJ_JAVA_HOME}"/bin/jarsigner dosym "${gccbin}"/grmiregistry "${GCJ_JAVA_HOME}"/bin/rmiregistry dosym "${gccbin}"/grmiregistry "${GCJ_JAVA_HOME}"/jre/bin/rmiregistry dosym "${gccbin}"/gkeytool "${GCJ_JAVA_HOME}"/bin/keytool dosym "${gccbin}"/gkeytool "${GCJ_JAVA_HOME}"/jre/bin/keytool dodir "${GCJ_JAVA_HOME}"/jre/lib/"${ABI}"/client for nativelibs in $(find ${CP_NATIVE_TOOLS} -name *.so*|grep -v -e 'libjvm.*'); do dosym ${nativelibs} "${GCJ_JAVA_HOME}"/jre/lib/${ABI}/ done dosym ${CP_NATIVE_TOOLS}/libjvm.so "${GCJ_JAVA_HOME}"/jre/lib/"${ABI}"/client/libjvm.so dosym "${GCJ_JAVA_HOME}"/jre/lib/"${ABI}"/client "${GCJ_JAVA_HOME}"/jre/lib/"${ABI}"/server dosym /usr/share/gcc-data/"${CTARGET}"/"${GCC_CONFIG_VER}"/java/libgcj-"${GCC_CONFIG_VER}".jar "${GCJ_JAVA_HOME}"/jre/lib/rt.jar dodir "${GCJ_JAVA_HOME}"/lib dosym /usr/share/gcc-data/"${CTARGET}"/"${GCC_CONFIG_VER}"/java/libgcj-tools-"${GCC_CONFIG_VER}".jar "${GCJ_JAVA_HOME}"/lib/tools.jar # link libgcj.so into GCJ_JAVA_HOME so that linking works for each # SLOT + ABI version (used for rpath in java-utils-2.eclass) dodir "${GCJ_JAVA_HOME}"/lib/${ABI} if is_final_abi; then for gcjlibs in $(find $(echo ${libgcjpath}|sed 's#:# #g') -regex '.*\/${LIBDIR/lib}\/.*' -o \( -name libgcj*.so* -print \)); do dosym ${gcjlibs} "${GCJ_JAVA_HOME}"/lib/${ABI}/ done abi_suffix="" else for gcjlibs in $(find $(echo ${libgcjpath}|sed 's#:# #g') ! -regex '.*\/${LIBDIR/lib}\/.*' -o \( -name libgcj*.so* -print \)); do dosym ${gcjlibs} "${GCJ_JAVA_HOME}"/lib/${ABI}/ done abi_suffix="-${ABI}" fi # the /usr/bin/ecj symlink is managed by eselect-ecj dosym /usr/bin/ecj "${GCJ_JAVA_HOME}"/bin/javac; # use gjdoc for javadoc dosym /usr/bin/gjdoc "${GCJ_JAVA_HOME}"/bin/javadoc mkdir -p "${S}" JAVA_PKG_CLASSMAP="/usr/share/java/gcj/${ABI}/${libgcj_soversion}/classmap.db" # java wrapper sed -e "s:@HOME@:${GCJ_JAVA_HOME}:g" \ -e "s:@JAVA_PKG_CLASSMAP@:${JAVA_PKG_CLASSMAP}:g" \ < "${FILESDIR}"/java.in \ > "${S}"/java \ || die "java wrapper failed" # permissions chmod 755 "${S}"/java # rebuild-classmap-db script sed -e "s:@JAVA_PKG_CLASSMAP@:${JAVA_PKG_CLASSMAP}:g" \ < "${FILESDIR}"/rebuild-classmap-db.in \ > "${S}"/rebuild-classmap-db${abi_suffix} \ || die "rebuild-classmap-db sed failed" # permissions chmod 755 "${S}"/rebuild-classmap-db${abi_suffix} # environment file sed -r -e "s#@GCJ_JAVA_HOME@#${GCJ_JAVA_HOME}#g" \ -e "s#@ABI@#${ABI}#g" \ -e "s#@GCJJAVAVERSION@#${gcj_java_version}#g" \ -e "s#@LIBGCJPATH@#${libgcjpath}#g" \ < ${FILESDIR}/gcj-jdk.env.in \ > ${S}/gcj-jdk${abi_suffix}-${PV}.env || die gcj-jdk${abi_suffix}-"${PV}".env: sed failed VMHANDLE=${PN}${abi_suffix}-${SLOT} set_java_env "${S}"/gcj-jdk${abi_suffix}-"${PV}".env # copy scripts exeinto "${GCJ_JAVA_HOME}"/bin/ doexe "${S}"/java doexe "${S}"/rebuild-classmap-db${abi_suffix} if use nsplugin; then install_mozilla_plugin "${GCJ_JAVA_HOME}/jre/lib/${ABI}/libgcjwebplugin.so" fi } pkg_postinst() { # Set as default VM if none exists java-vm-2_pkg_postinst ewarn "Check if gcj-jdk is set as Java SDK" ewarn " # java-config -L" ewarn ewarn "Set gcj-jdk as Java SDK" ewarn " # java-config -S ${PN}-${SLOT}" ewarn ewarn "Edit /etc/java-config-2/build/jdk.conf" ewarn " *=${PN}-${SLOT}" ewarn ewarn "Install GCJ's javadoc" ewarn " # emerge gjdoc" }