diff options
author | Tomas Chvatal <scarabeus@gentoo.org> | 2013-03-23 10:16:57 +0000 |
---|---|---|
committer | Tomas Chvatal <scarabeus@gentoo.org> | 2013-03-23 10:16:57 +0000 |
commit | 2e5aa8b645784e0536363883d4d21593c9c5d502 (patch) | |
tree | 2054e966be4095112cfe7a95526919c957c254b5 /eclass/office-ext-r1.eclass | |
parent | Version bump; removed unused erroneous file in 1.0.7.16-r1 (closing #459430) (diff) | |
download | historical-2e5aa8b645784e0536363883d4d21593c9c5d502.tar.gz historical-2e5aa8b645784e0536363883d4d21593c9c5d502.tar.bz2 historical-2e5aa8b645784e0536363883d4d21593c9c5d502.zip |
Add next version of office-ext eclass. This time we can directly deploy libreoffice exts, but ooo crashes so keep backcompat over crashy uno interface for them (it is oo bug and they should fix it).
Diffstat (limited to 'eclass/office-ext-r1.eclass')
-rw-r--r-- | eclass/office-ext-r1.eclass | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/eclass/office-ext-r1.eclass b/eclass/office-ext-r1.eclass new file mode 100644 index 000000000000..f01d5b34d23b --- /dev/null +++ b/eclass/office-ext-r1.eclass @@ -0,0 +1,219 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/eclass/office-ext-r1.eclass,v 1.1 2013/03/23 10:16:57 scarabeus Exp $ + +# @ECLASS: office-ext-r1.eclass +# @MAINTAINER: +# The office team <openoffice@gentoo.org> +# @AUTHOR: +# Tomáš Chvátal <scarabeus@gentoo.org> +# @BLURB: Eclass for installing libreoffice/openoffice extensions +# @DESCRIPTION: +# Eclass for easing maitenance of libreoffice/openoffice extensions. + +case "${EAPI:-0}" in + 5) OEXT_EXPORTED_FUNCTIONS="src_unpack src_install pkg_postinst pkg_prerm" ;; + *) die "EAPI=${EAPI} is not supported" ;; +esac + +inherit eutils multilib + +# @ECLASS-VARIABLE: OFFICE_REQ_USE +# @DESCRIPTION: +# Useflags required on office implementation for the extension. +# +# Example: +# @CODE +# OFFICE_REQ_USE="java,jemalloc(-)?" +# @CODE +if [[ ${OFFICE_REQ_USE} ]]; then + # Append the brackets for the depend bellow + PYTHON_REQ_USE="[${OFFICE_REQ_USE}]" +fi + +# @ECLASS-VARIABLE: OFFICE_IMPLEMENTATIONS +# @DESCRIPTION: +# List of implementations supported by the extension. +# Some work only for libreoffice and vice versa. +# Default value is all implementations. +# +# Example: +# @CODE +# OFFICE_IMPLEMENTATIONS=( "libreoffice" "openoffice" ) +# @CODE +[[ -z ${OFFICE_IMPLEMENTATIONS} ]] && OFFICE_IMPLEMENTATIONS=( "libreoffice" "openoffice" ) + +# @ECLASS-VARIABLE: OFFICE_EXTENSIONS +# @REQUIRED +# @DESCRIPTION: +# Array containing list of extensions to install. +# +# Example: +# @CODE +# OFFICE_EXTENSIONS=( ${PN}_${PV}.oxt ) +# @CODE +[[ -z ${OFFICE_EXTENSIONS} ]] && die "OFFICE_EXTENSIONS variable is unset." +if [[ "$(declare -p OFFICE_EXTENSIONS 2>/dev/null 2>&1)" != "declare -a"* ]]; then + die "OFFICE_EXTENSIONS variable is not an array." +fi + +IUSE="" +RDEPEND="" + +for i in ${OFFICE_IMPLEMENTATIONS[@]}; do + # Set default on for the libreoffice implementation. + # Or if we have just one impl set it also on enabled. + if [[ ${i} == libreoffice || ${#OFFICE_IMPLEMENTATIONS[@]} == 1 ]]; then + IUSE+=" +office_implementation_${i}" + else + IUSE+=" office_implementation_${i}" + fi + RDEPEND+=" + office_implementation_${i}? ( + || ( + app-office/${i}${OFFICE_REQ_USE} + app-office/${i}-bin${OFFICE_REQ_USE} + ) + ) + " +done + +REQUIRED_USE="|| ( " +for i in ${OFFICE_IMPLEMENTATIONS[@]}; do + REQUIRED_USE+=" office_implementation_${i} " +done +REQUIRED_USE+=" )" + +DEPEND="${RDEPEND} + app-arch/unzip +" + +# Most projects actually do not provide any relevant sourcedir as they are oxt. +S="${WORKDIR}" + +# @FUNCTION: office-ext-r1_src_unpack +# @DESCRIPTION: +# Flush the cache after removal of an extension. +office-ext-r1_src_unpack() { + debug-print-function ${FUNCNAME} "$@" + local i + + default + + for i in ${OFFICE_EXTENSIONS[@]}; do + # Unpack the extensions where required and add case for oxt + # which should be most common case for the extensions. + if [[ -f "${DISTDIR}/${i}" ]] ; then + case ${i} in + *.oxt) + echo ">>> Unpacking "${DISTDIR}/${i}" to ${PWD}" + unzip -qo ${DISTDIR}/${i} + assert "failed unpacking ${DISTDIR}/${i}" + ;; + *) unpack ${i} ;; + esac + fi + done +} + +# @FUNCTION: office-ext-r1_src_install +# @DESCRIPTION: +# Install the extension source to the proper location. +office-ext-r1_src_install() { + debug-print-function ${FUNCNAME} "$@" + debug-print "Extensions: ${OFFICE_EXTENSIONS[@]}" + + local i j + + for i in ${OFFICE_IMPLEMENTATIONS[@]}; do + if use office_implementation_${i}; then + if [[ ${i} == openoffice ]]; then + # OOO needs to use uno because direct deployment segfaults. + # This is bug by their side, but i don't want to waste time + # fixing it myself. + insinto /usr/$(get_libdir)/${i}/share/extension/install + for j in ${OFFICE_EXTENSIONS[@]}; do + doins ${DISTDIR}/${j} + done + else + insinto /usr/$(get_libdir)/${i}/share/extensions/${PN} + doins -r * + fi + fi + done +} + +#### OPENOFFICE COMPAT CODE + +UNOPKG_BINARY="/usr/lib64/openoffice/program/unopkg" + +# @FUNCTION: office-ext-r1_add_extension +# @DESCRIPTION: +# Install the extension into the libreoffice/openoffice. +office-ext-r1_add_extension() { + debug-print-function ${FUNCNAME} "$@" + local ext=$1 + local tmpdir=$(mktemp -d --tmpdir="${T}") + + debug-print "${FUNCNAME}: ${UNOPKG_BINARY} add --shared \"${ext}\"" + ebegin "Adding office extension: \"${ext}\"" + ${UNOPKG_BINARY} add --suppress-license \ + --shared "${ext}" \ + "-env:UserInstallation=file:///${tmpdir}" \ + "-env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY=1" + eend $? + ${UNOPKG_BINARY} list --shared > /dev/null + rm -rf "${tmpdir}" +} + +# @FUNCTION: office-ext-r1_remove_extension +# @DESCRIPTION: +# Remove the extension from the libreoffice/openoffice. +office-ext-r1_remove_extension() { + debug-print-function ${FUNCNAME} "$@" + local ext=$1 + local tmpdir=$(mktemp -d --tmpdir="${T}") + + debug-print "${FUNCNAME}: ${UNOPKG_BINARY} remove --shared \"${ext}\"" + ebegin "Removing office extension: \"${ext}\"" + ${UNOPKG_BINARY} remove --suppress-license \ + --shared "${ext}" \ + "-env:UserInstallation=file:///${tmpdir}" \ + "-env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY=1" + eend $? + ${UNOPKG_BINARY} list --shared > /dev/null + rm -rf "${tmpdir}" +} + +# @FUNCTION: office-ext-r1_pkg_postinst +# @DESCRIPTION: +# Add the extensions to the openoffice. +office-ext-r1_pkg_postinst() { + if in_iuse office_implementation_openoffice && use office_implementation_openoffice; then + debug-print-function ${FUNCNAME} "$@" + debug-print "Extensions: ${OFFICE_EXTENSIONS[@]}" + local i + + for i in ${OFFICE_EXTENSIONS[@]}; do + office-ext-r1_add_extension "/usr/lib64/openoffice/share/extension/install/${i}" + done + fi +} + +# @FUNCTION: office-ext-r1_pkg_prerm +# @DESCRIPTION: +# Remove the extensions from the openoffice. +office-ext-r1_pkg_prerm() { + if in_iuse office_implementation_openoffice && use office_implementation_openoffice; then + debug-print-function ${FUNCNAME} "$@" + debug-print "Extensions: ${OFFICE_EXTENSIONS[@]}" + local i + + for i in ${OFFICE_EXTENSIONS[@]}; do + office-ext-r1_remove_extension "${i}" + done + fi +} + +EXPORT_FUNCTIONS ${OEXT_EXPORTED_FUNCTIONS} +unset OEXT_EXPORTED_FUNCTIONS |