123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- # Copyright 1999-2013 Gentoo Foundation
- # Distributed under the terms of the GNU General Public License v2
- # @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
- OFFICE_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
- # @ECLASS-VARIABLE: OFFICE_EXTENSIONS_LOCATION
- # @DESCRIPTION:
- # Path to the extensions location. Defaults to ${DISTDIR}.
- #
- # Example:
- # @CODE
- # OFFICE_EXTENSIONS_LOCATION="${S}/unpacked/"
- # @CODE
- : ${OFFICE_EXTENSIONS_LOCATION:=${DISTDIR}}
- IUSE=""
- RDEPEND=""
- for i in ${OFFICE_IMPLEMENTATIONS[@]}; do
- IUSE+=" office_implementation_${i}"
- if [[ ${i} == "openoffice" ]]; then
- # special only binary
- RDEPEND+="
- office_implementation_openoffice? (
- app-office/openoffice-bin${OFFICE_REQ_USE}
- )
- "
- else
- RDEPEND+="
- office_implementation_${i}? (
- || (
- app-office/${i}${OFFICE_REQ_USE}
- app-office/${i}-bin${OFFICE_REQ_USE}
- )
- )
- "
- fi
- 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 "${OFFICE_EXTENSIONS_LOCATION}/${i}" ]] ; then
- case ${i} in
- *.oxt)
- mkdir -p "${WORKDIR}/${i}/"
- pushd "${WORKDIR}/${i}/" > /dev/null
- echo ">>> Unpacking "${OFFICE_EXTENSIONS_LOCATION}/${i}" to ${PWD}"
- unzip -qo ${OFFICE_EXTENSIONS_LOCATION}/${i}
- assert "failed unpacking ${OFFICE_EXTENSIONS_LOCATION}/${i}"
- popd > /dev/null
- ;;
- *) 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 ${OFFICE_EXTENSIONS_LOCATION}/${j}
- done
- else
- for j in ${OFFICE_EXTENSIONS[@]}; do
- pushd "${WORKDIR}/${j}/" > /dev/null
- insinto /usr/$(get_libdir)/${i}/share/extensions/${j/.oxt/}
- doins -r *
- popd > /dev/null
- done
- 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=$(emktemp -d)
- 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
|