You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
6.4 KiB
240 lines
6.4 KiB
# 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>
|
|
# @SUPPORTED_EAPIS: 5 6
|
|
# @BLURB: Eclass for installing libreoffice/openoffice extensions
|
|
# @DESCRIPTION:
|
|
# Eclass for easing maintenance of libreoffice/openoffice extensions.
|
|
|
|
case "${EAPI:-0}" in
|
|
5|6) 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
|