/[gentoo-x86]/eclass/kde4-functions.eclass
Gentoo

Contents of /eclass/kde4-functions.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.10 - (show annotations) (download)
Mon Jan 12 17:25:59 2009 UTC (5 years, 8 months ago) by scarabeus
Branch: MAIN
Changes since 1.9: +213 -460 lines
Update of kde4 eclasses with ones which understand 4.2 and live :]
Report all broken  (in meaning with kde4.2) things, i will be revbumping and
fixing all packages using these eclasses but i might miss something.
Such package could became blocker for 4.2 so bumb if you maintain such thing
(i will write note on dev-ml today when i am done and if i wont forget).

1 # Copyright 1999-2008 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: $
4
5 # @ECLASS: kde4-functions.eclass
6 # @MAINTAINER:
7 # kde@gentoo.org
8 # @BLURB: Common ebuild functions for KDE 4 packages
9 # @DESCRIPTION:
10 # This eclass contains all functions shared by the different eclasses,
11 # for KDE 4 ebuilds.
12
13 # @ECLASS-VARIABLE: EAPI
14 # @DESCRIPTION:
15 # By default kde eclass wants eapi 2 which might be redefinable.
16 case ${EAPI} in
17 2) : ;;
18 *) die "No way! EAPI older than 2 is not supported." ;;
19 esac
20
21 # @ECLASS-VARIABLE: KDEBASE
22 # @DESCRIPTION:
23 # This gets set to a non-zero value when a package is considered a kde or
24 # koffice ebuild.
25
26 if [[ $CATEGORY = kde-base ]]; then
27 debug-print "${ECLASS}: KDEBASE ebuild recognized"
28 KDEBASE=kde-base
29 fi
30
31 # is this a koffice ebuild?
32 if [[ $KMNAME = koffice || $PN = koffice ]]; then
33 debug-print "${ECLASS}: KOFFICE ebuild recognized"
34 KDEBASE=koffice
35 fi
36
37 # @ECLASS-VARIABLE: KDE_SLOTS
38 # @DESCRIPTION:
39 # The slots used by all KDE versions later than 4.0. The live-ebuilds use
40 # KDE_LIVE_SLOTS instead.
41 KDE_SLOTS=( kde-4 4.1 4.2 )
42
43 # @ECLASS-VARIABLE: KDE_LIVE_SLOTS
44 # @DESCRIPTION:
45 # The slots used by all KDE live versions.
46 KDE_LIVE_SLOTS=( live )
47
48 # @FUNCTION: buildsycoca
49 # @DESCRIPTION:
50 # Function to rebuild the KDE System Configuration Cache.
51 # All KDE ebuilds should run this in pkg_postinst and pkg_postrm.
52 #
53 # Note that kde4-base.eclass already does this.
54 buildsycoca() {
55 debug-print-function ${FUNCNAME} "$@"
56
57 if [[ -z ${ROOT%%/} && -x ${KDEDIR}/bin/kbuildsycoca4 ]]; then
58 # Make sure tha cache file exists, or kbuildsycoca4 will fail
59 touch "${KDEDIR}/share/kde4/services/ksycoca4"
60
61 # We have to unset DISPLAY and DBUS_SESSION_BUS_ADDRESS, the ones
62 # in the user's environment (through su [without '-']) may cause
63 # kbuildsycoca4 to hang.
64
65 ebegin "Running kbuildsycoca4 to build global database"
66 # This is needed because we support multiple kde versions installed together.
67 XDG_DATA_DIRS="/usr/share:${KDEDIRS//:/\/share:}/share:/usr/local/share" \
68 DISPLAY="" DBUS_SESSION_BUS_ADDRESS="" \
69 ${KDEDIR}/bin/kbuildsycoca4 --global --noincremental &> /dev/null
70 eend $?
71 fi
72 }
73
74 # @FUNCTION: comment_all_add_subdirectory
75 # @USAGE: [list of directory names]
76 # @DESCRIPTION:
77 # Recursively comment all add_subdirectory instructions in listed directories,
78 # except those in cmake/.
79 comment_all_add_subdirectory() {
80 find "$@" -name CMakeLists.txt -print0 | grep -vFzZ "./cmake" | \
81 xargs -0 sed -i -e '/add_subdirectory/s/^/#DONOTCOMPILE /' -e '/ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' || \
82 die "${LINENO}: Initial sed died"
83 }
84
85 # @ECLASS-VARIABLE: KDE_LINGUAS
86 # @DESCRIPTION:
87 # This is a whitespace-separated list of translations this ebuild supports.
88 # These translations are automatically added to IUSE. Therefore ebuilds must set
89 # this variable before inheriting any eclasses. To enable only selected
90 # translations, ebuilds must call enable_selected_linguas(). kde4-base.eclass does
91 # this for you.
92 #
93 # Example: KDE_LINGUAS="en_GB de nl"
94 for _lingua in ${KDE_LINGUAS}; do
95 IUSE="${IUSE} linguas_${_lingua}"
96 done
97
98 # @FUNCTION: enable_selected_linguas
99 # @DESCRIPTION:
100 # Enable translations based on LINGUAS settings and translations supported by
101 # the package (see KDE_LINGUAS). By default, translations are found in "${S}"/po
102 # but this default can be overridden by defining KDE_LINGUAS_DIR.
103 enable_selected_linguas() {
104 local lingua sr_mess wp
105 # inform user about kde-l10n for full translation.
106 if ! has_version kde-base/kde-l10n; then
107 echo
108 elog "For fully translated application you should also emerge"
109 elog "kde-base/kde-l10n package which ships translated kde core"
110 elog "strings."
111 echo
112 fi
113
114 # ebuild overridable linguas directory definition
115 KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:=${S}/po}
116 cd "$KDE_LINGUAS_DIR" || die "wrong linguas dir specified"
117
118 # fix all various crazy sr@Latn variations
119 # this part is only ease for ebuilds, so there wont be any die when this
120 # fail at any point
121 sr_mess="sr@latn sr@latin sr@Latin"
122 for wp in ${sr_mess}; do
123 [[ -e "$wp.po" ]] && mv "$wp.po" "sr@Latn.po"
124 if [[ -d "$wp" ]]; then
125 # move dir and fix cmakelists
126 mv "$wp" "sr@Latn"
127 sed -i \
128 -e "s:$wp:sr@Latin:g" \
129 CMakeLists.txt
130 fi
131 done
132
133 for lingua in ${KDE_LINGUAS}; do
134 if [[ -e "$lingua.po" ]]; then
135 mv "$lingua.po" "$lingua.po.old"
136 fi
137 done
138 comment_all_add_subdirectory "${KDE_LINGUAS_DIR}"
139 for lingua in ${LINGUAS}; do
140 ebegin "Enabling LANGUAGE: ${lingua}"
141 if [[ -d "$lingua" ]]; then
142 sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
143 -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
144 -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed."
145 fi
146 if [[ -e "$lingua.po.old" ]]; then
147 mv "$lingua.po.old" "$lingua.po"
148 fi
149 eend $?
150 done
151 }
152
153 # @FUNCTION: koffice_fix_libraries
154 # @DESCRIPTION:
155 # replace the weird koffice lib search with hardcoded one, so it
156 # actually builds and works.
157 koffice_fix_libraries() {
158 local LIB_ARRAY R_QT_kostore R_BAS_kostore R_BAS_koodf R_KROSS_kokross R_QT_komain
159 local R_CMS_pigmentcms R_BAS_pigmentcms R_BAS_koresources R_BAS_flake R_BAS_koguiutils
160 local R_BAS_kopageapp R_BAS_kotext R_BAS_kowmf libname R
161 case ${PN} in
162 koffice-data|koffice-libs)
163 ;;
164 *)
165 ### basic array
166 LIB_ARRAY="kostore koodf kokross komain pigmentcms koresources flake koguiutils kopageapp kotext kowmf"
167 ### dep array
168 R_QT_kostore="\"/usr/$(get_libdir)/qt4/libQtCore.so\"
169 \"/usr/$(get_libdir)/qt4/libQtXml.so\"
170 \"${KDEDIR}/$(get_libdir)/libkdecore.so\""
171 R_BAS_kostore="libkostore ${R_QT_kostore}"
172 R_BAS_koodf="libkoodf ${R_BAS_kostore}"
173 R_KROSS_kokross="
174 \"${KDEDIR}/$(get_libdir)/libkrossui.so\"
175 \"${KDEDIR}/$(get_libdir)/libkrosscore.so\""
176 R_BAS_kokross="libkokross ${R_BAS_koodf} ${R_KROSS_kokross}"
177 R_QT_komain="\"/usr/$(get_libdir)/qt4/libQtGui.so\""
178 R_BAS_komain="libkomain ${R_BAS_koodf} ${R_QT_komain}"
179 R_CMS_pigmentcms="\"/usr/$(get_libdir)/liblcms.so\""
180 R_BAS_pigmentcms="libpigmentcms ${R_BAS_komain} ${R_CMS_pigmentcms}"
181 R_BAS_koresources="libkoresources ${R_BAS_pigmentcms}"
182 R_BAS_flake="libflake ${R_BAS_pigmentcms}"
183 R_BAS_koguiutils="libkoguiutils libkoresources libflake ${R_BAS_pigmentcms}"
184 R_BAS_kopageapp="libkopageapp ${R_BAS_koguitls}"
185 R_BAS_kotext="libkotext libkoresources libflake ${R_BAS_pigmentcms}"
186 ### additional unmentioned stuff
187 R_BAS_kowmf="libkowmf"
188 for libname in ${LIB_ARRAY}; do
189 ebegin "Fixing library ${libname} with hardcoded path"
190 for libpath in $(eval "echo \$R_BAS_${libname}"); do
191 if [[ "${libpath}" != "\"/usr/"* ]]; then
192 R="${R} \"${KDEDIR}/$(get_libdir)/${libpath}.so\""
193 else
194 R="${R} ${libpath}"
195 fi
196 done
197 find "${S}" -name CMakeLists.txt -print| xargs -i \
198 sed -i \
199 -e "s: ${libname} : ${R} :g" \
200 -e "s: ${libname}): ${R}):g" \
201 -e "s:(${libname} :(${R} :g" \
202 -e "s:(${libname}):(${R}):g" \
203 -e "s: ${libname}$: ${R}:g" \
204 {} || die "Fixing library names failed."
205 eend $?
206 done
207 ;;
208 esac
209 }
210 # @FUNCTION: get_build_type
211 # @DESCRIPTION:
212 # Determine whether we are using live ebuild or tbzs.
213 get_build_type() {
214 if [[ $SLOT = live || $PV = 9999* ]]; then
215 BUILD_TYPE="live"
216 else
217 BUILD_TYPE="release"
218 fi
219 export BUILD_TYPE
220 }
221
222 # @FUNCTION: get_latest_kdedir
223 # @DESCRIPTION:
224 # We set up KDEDIR according to the latest KDE version installed; installing our
225 # package for all available installs is just insane.
226 # We can check for kdelibs because it is the most basic package; no KDE package
227 # working without it. This might be changed in future.
228 get_latest_kdedir() {
229 if [[ $NEED_KDE = latest && $KDEBASE != kde-base ]]; then
230 case ${KDE_WANTED} in
231 # note this will need to be updated as stable moves and so on
232 live)
233 _versions="9999 4.1.69 4.1.0"
234 ;;
235 snapshot)
236 _versions="4.1.69 4.1.0 9999"
237 ;;
238 testing)
239 _versions="4.1.0 4.1.69 9999"
240 ;;
241 stable)
242 _versions="4.1.0 4.1.69 9999"
243 ;;
244 *) die "KDE_WANTED=${KDE_WANTED} not supported here." ;;
245 esac
246 # check if exists and fallback as we go
247 for X in ${_versions}; do
248 if has_version ">=kde-base/kdelibs-${X}"; then
249 # figure out which X we are in and set it into _kdedir
250 case ${X} in
251 # also keep track here same for kde_wanted
252 9999)
253 _kdedir="live"
254 break
255 ;;
256 4.1.69)
257 _kdedir="4.2"
258 break
259 ;;
260 4.1.0)
261 _kdedir="4.1"
262 break
263 ;;
264 esac
265 fi
266 done
267 fi
268 }
269
270 # Functions handling KMLOADLIBS and KMSAVELIBS
271
272 # @FUNCTION: save_library_dependencies
273 # @DESCRIPTION:
274 # Add exporting CMake dependencies for current package
275 save_library_dependencies() {
276 local depsfile="${T}/${PN}:${SLOT}"
277
278 ebegin "Saving library dependendencies in ${depsfile##*/}"
279 echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || \
280 die "Failed to save the library dependencies."
281 eend $?
282 }
283
284 # @FUNCTION: install_library_dependencies
285 # @DESCRIPTION:
286 # Install generated CMake library dependencies to /var/lib/kde
287 install_library_dependencies() {
288 local depsfile="$T/$PN:$SLOT"
289 ebegin "Installing library dependendencies as ${depsfile##*/}"
290 insinto /var/lib/kde
291 doins "${depsfile}" || die "Failed to install library dependencies."
292 eend $?
293 }
294
295 # @FUNCTION: load_library_dependencies
296 # @DESCRIPTION:
297 # Inject specified library dependencies in current package
298 load_library_dependencies() {
299 local pn i depsfile
300 ebegin "Injecting library dependendencies from '${KMLOADLIBS}'"
301
302 i=0
303 for pn in ${KMLOADLIBS} ; do
304 ((i++))
305 depsfile="/var/lib/kde/${pn}:${SLOT}"
306 [[ -r "${depsfile}" ]] || die "Depsfile '${depsfile}' not accessible. You probably need to reinstall ${pn}."
307 sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \
308 die "Failed to include library dependencies for ${pn}"
309 done
310 eend $?
311 }

  ViewVC Help
Powered by ViewVC 1.1.20