/[gentoo-x86]/eclass/office-ext-r1.eclass
Gentoo

Contents of /eclass/office-ext-r1.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Sat Mar 23 10:16:57 2013 UTC (17 months ago) by scarabeus
Branch: MAIN
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).

1 # Copyright 1999-2013 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/office-ext.eclass,v 1.7 2012/09/27 16:35:41 axs Exp $
4
5 # @ECLASS: office-ext-r1.eclass
6 # @MAINTAINER:
7 # The office team <openoffice@gentoo.org>
8 # @AUTHOR:
9 # Tomáš Chvátal <scarabeus@gentoo.org>
10 # @BLURB: Eclass for installing libreoffice/openoffice extensions
11 # @DESCRIPTION:
12 # Eclass for easing maitenance of libreoffice/openoffice extensions.
13
14 case "${EAPI:-0}" in
15 5) OEXT_EXPORTED_FUNCTIONS="src_unpack src_install pkg_postinst pkg_prerm" ;;
16 *) die "EAPI=${EAPI} is not supported" ;;
17 esac
18
19 inherit eutils multilib
20
21 # @ECLASS-VARIABLE: OFFICE_REQ_USE
22 # @DESCRIPTION:
23 # Useflags required on office implementation for the extension.
24 #
25 # Example:
26 # @CODE
27 # OFFICE_REQ_USE="java,jemalloc(-)?"
28 # @CODE
29 if [[ ${OFFICE_REQ_USE} ]]; then
30 # Append the brackets for the depend bellow
31 PYTHON_REQ_USE="[${OFFICE_REQ_USE}]"
32 fi
33
34 # @ECLASS-VARIABLE: OFFICE_IMPLEMENTATIONS
35 # @DESCRIPTION:
36 # List of implementations supported by the extension.
37 # Some work only for libreoffice and vice versa.
38 # Default value is all implementations.
39 #
40 # Example:
41 # @CODE
42 # OFFICE_IMPLEMENTATIONS=( "libreoffice" "openoffice" )
43 # @CODE
44 [[ -z ${OFFICE_IMPLEMENTATIONS} ]] && OFFICE_IMPLEMENTATIONS=( "libreoffice" "openoffice" )
45
46 # @ECLASS-VARIABLE: OFFICE_EXTENSIONS
47 # @REQUIRED
48 # @DESCRIPTION:
49 # Array containing list of extensions to install.
50 #
51 # Example:
52 # @CODE
53 # OFFICE_EXTENSIONS=( ${PN}_${PV}.oxt )
54 # @CODE
55 [[ -z ${OFFICE_EXTENSIONS} ]] && die "OFFICE_EXTENSIONS variable is unset."
56 if [[ "$(declare -p OFFICE_EXTENSIONS 2>/dev/null 2>&1)" != "declare -a"* ]]; then
57 die "OFFICE_EXTENSIONS variable is not an array."
58 fi
59
60 IUSE=""
61 RDEPEND=""
62
63 for i in ${OFFICE_IMPLEMENTATIONS[@]}; do
64 # Set default on for the libreoffice implementation.
65 # Or if we have just one impl set it also on enabled.
66 if [[ ${i} == libreoffice || ${#OFFICE_IMPLEMENTATIONS[@]} == 1 ]]; then
67 IUSE+=" +office_implementation_${i}"
68 else
69 IUSE+=" office_implementation_${i}"
70 fi
71 RDEPEND+="
72 office_implementation_${i}? (
73 || (
74 app-office/${i}${OFFICE_REQ_USE}
75 app-office/${i}-bin${OFFICE_REQ_USE}
76 )
77 )
78 "
79 done
80
81 REQUIRED_USE="|| ( "
82 for i in ${OFFICE_IMPLEMENTATIONS[@]}; do
83 REQUIRED_USE+=" office_implementation_${i} "
84 done
85 REQUIRED_USE+=" )"
86
87 DEPEND="${RDEPEND}
88 app-arch/unzip
89 "
90
91 # Most projects actually do not provide any relevant sourcedir as they are oxt.
92 S="${WORKDIR}"
93
94 # @FUNCTION: office-ext-r1_src_unpack
95 # @DESCRIPTION:
96 # Flush the cache after removal of an extension.
97 office-ext-r1_src_unpack() {
98 debug-print-function ${FUNCNAME} "$@"
99 local i
100
101 default
102
103 for i in ${OFFICE_EXTENSIONS[@]}; do
104 # Unpack the extensions where required and add case for oxt
105 # which should be most common case for the extensions.
106 if [[ -f "${DISTDIR}/${i}" ]] ; then
107 case ${i} in
108 *.oxt)
109 echo ">>> Unpacking "${DISTDIR}/${i}" to ${PWD}"
110 unzip -qo ${DISTDIR}/${i}
111 assert "failed unpacking ${DISTDIR}/${i}"
112 ;;
113 *) unpack ${i} ;;
114 esac
115 fi
116 done
117 }
118
119 # @FUNCTION: office-ext-r1_src_install
120 # @DESCRIPTION:
121 # Install the extension source to the proper location.
122 office-ext-r1_src_install() {
123 debug-print-function ${FUNCNAME} "$@"
124 debug-print "Extensions: ${OFFICE_EXTENSIONS[@]}"
125
126 local i j
127
128 for i in ${OFFICE_IMPLEMENTATIONS[@]}; do
129 if use office_implementation_${i}; then
130 if [[ ${i} == openoffice ]]; then
131 # OOO needs to use uno because direct deployment segfaults.
132 # This is bug by their side, but i don't want to waste time
133 # fixing it myself.
134 insinto /usr/$(get_libdir)/${i}/share/extension/install
135 for j in ${OFFICE_EXTENSIONS[@]}; do
136 doins ${DISTDIR}/${j}
137 done
138 else
139 insinto /usr/$(get_libdir)/${i}/share/extensions/${PN}
140 doins -r *
141 fi
142 fi
143 done
144 }
145
146 #### OPENOFFICE COMPAT CODE
147
148 UNOPKG_BINARY="/usr/lib64/openoffice/program/unopkg"
149
150 # @FUNCTION: office-ext-r1_add_extension
151 # @DESCRIPTION:
152 # Install the extension into the libreoffice/openoffice.
153 office-ext-r1_add_extension() {
154 debug-print-function ${FUNCNAME} "$@"
155 local ext=$1
156 local tmpdir=$(mktemp -d --tmpdir="${T}")
157
158 debug-print "${FUNCNAME}: ${UNOPKG_BINARY} add --shared \"${ext}\""
159 ebegin "Adding office extension: \"${ext}\""
160 ${UNOPKG_BINARY} add --suppress-license \
161 --shared "${ext}" \
162 "-env:UserInstallation=file:///${tmpdir}" \
163 "-env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY=1"
164 eend $?
165 ${UNOPKG_BINARY} list --shared > /dev/null
166 rm -rf "${tmpdir}"
167 }
168
169 # @FUNCTION: office-ext-r1_remove_extension
170 # @DESCRIPTION:
171 # Remove the extension from the libreoffice/openoffice.
172 office-ext-r1_remove_extension() {
173 debug-print-function ${FUNCNAME} "$@"
174 local ext=$1
175 local tmpdir=$(mktemp -d --tmpdir="${T}")
176
177 debug-print "${FUNCNAME}: ${UNOPKG_BINARY} remove --shared \"${ext}\""
178 ebegin "Removing office extension: \"${ext}\""
179 ${UNOPKG_BINARY} remove --suppress-license \
180 --shared "${ext}" \
181 "-env:UserInstallation=file:///${tmpdir}" \
182 "-env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY=1"
183 eend $?
184 ${UNOPKG_BINARY} list --shared > /dev/null
185 rm -rf "${tmpdir}"
186 }
187
188 # @FUNCTION: office-ext-r1_pkg_postinst
189 # @DESCRIPTION:
190 # Add the extensions to the openoffice.
191 office-ext-r1_pkg_postinst() {
192 if in_iuse office_implementation_openoffice && use office_implementation_openoffice; then
193 debug-print-function ${FUNCNAME} "$@"
194 debug-print "Extensions: ${OFFICE_EXTENSIONS[@]}"
195 local i
196
197 for i in ${OFFICE_EXTENSIONS[@]}; do
198 office-ext-r1_add_extension "/usr/lib64/openoffice/share/extension/install/${i}"
199 done
200 fi
201 }
202
203 # @FUNCTION: office-ext-r1_pkg_prerm
204 # @DESCRIPTION:
205 # Remove the extensions from the openoffice.
206 office-ext-r1_pkg_prerm() {
207 if in_iuse office_implementation_openoffice && use office_implementation_openoffice; then
208 debug-print-function ${FUNCNAME} "$@"
209 debug-print "Extensions: ${OFFICE_EXTENSIONS[@]}"
210 local i
211
212 for i in ${OFFICE_EXTENSIONS[@]}; do
213 office-ext-r1_remove_extension "${i}"
214 done
215 fi
216 }
217
218 EXPORT_FUNCTIONS ${OEXT_EXPORTED_FUNCTIONS}
219 unset OEXT_EXPORTED_FUNCTIONS

  ViewVC Help
Powered by ViewVC 1.1.20