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

Contents of /eclass/kde4-base.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (show annotations) (download)
Sat May 17 14:09:03 2008 UTC (6 years, 6 months ago) by zlin
Branch: MAIN
Changes since 1.11: +2 -2 lines
Actually convert to an array... Bug #216863.

1 # Copyright 2007-2008 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/kde4-base.eclass,v 1.11 2008/05/15 19:49:32 ingmar Exp $
4
5 # @ECLASS: kde4-base.eclass
6 # @MAINTAINER:
7 # kde@gentoo.org
8 # @BLURB: This eclass provides functions for kde 4.0 ebuilds
9 # @DESCRIPTION:
10 # The kde4-base.eclass provides support for building KDE4 monolithic ebuilds
11 # and KDE4 applications.
12 #
13 # NOTE: This eclass uses the SLOT dependencies from EAPI="1" or compatible,
14 # hence you must define EAPI="1" in the ebuild, before inheriting any eclasses.
15
16 inherit base eutils multilib cmake-utils kde4-functions
17
18 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_test src_install pkg_postinst pkg_postrm
19
20 kde4-base_set_qt_dependencies() {
21 local qt qtcore qtgui qt3support qtdepend qtopengldepend
22
23 # use dependencies
24 case "${EAPI}" in
25 kdebuild-1)
26 qt="[accessibility][dbus][gif][jpeg][png][qt3support][ssl][zlib]"
27 qtcore="[qt3support][ssl]"
28 qtgui="[accessibility][dbus]"
29 qt3support="[accessibility]"
30 case "${OPENGL_REQUIRED}" in
31 always)
32 qt="${qt}[opengl]"
33 ;;
34 optional)
35 qt="${qt}[opengl?]"
36 ;;
37 esac
38 ;;
39 esac
40
41 # split qt
42 qtdepend="
43 x11-libs/qt-core:4${qtcore}
44 x11-libs/qt-gui:4${qtgui}
45 x11-libs/qt-qt3support:4${qt3support}
46 x11-libs/qt-script:4
47 x11-libs/qt-svg:4
48 x11-libs/qt-test:4"
49 qtopengldepend="x11-libs/qt-opengl:4"
50
51 # allow monolithic qt for PV < 4.1
52 case "${PV}" in
53 scm|9999.4|4.1*) : ;;
54 *)
55 qtdepend="|| ( ( ${qtdepend} ) >=x11-libs/qt-4.3.3:4${qt} )"
56 qtopengldepend="|| ( ${qtopengldepend} >=x11-libs/qt-4.3.3:4 )"
57 ;;
58 esac
59
60 # opengl dependencies
61 case "${OPENGL_REQUIRED}" in
62 always)
63 qtdepend="${qtdepend}
64 ${qtopengldepend}"
65 ;;
66 optional)
67 IUSE="${IUSE} opengl"
68 qtdepend="${qtdepend}
69 opengl? ( ${qtopengldepend} )"
70 ;;
71 *)
72 OPENGL_REQUIRED="never"
73 ;;
74 esac
75
76 COMMONDEPEND="${COMMONDEPEND} ${qtdepend}"
77 }
78 kde4-base_set_qt_dependencies
79
80 DEPEND="${DEPEND} ${COMMONDEPEND}
81 >=dev-util/cmake-2.4.7-r1
82 dev-util/pkgconfig
83 x11-libs/libXt
84 x11-proto/xf86vidmodeproto"
85 RDEPEND="${RDEPEND} ${COMMONDEPEND}"
86
87 # @ECLASS-VARIABLE: OPENGL_REQUIRED
88 # @DESCRIPTION:
89 # Is qt-opengl required? Possible values are 'always', 'optional' and 'never'.
90 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
91 OPENGL_REQUIRED="${OPENGL_REQUIRED:-never}"
92
93 # @ECLASS-VARIABLE: CPPUNIT_REQUIRED
94 # @DESCRIPTION:
95 # Is cppunit required for tests? Possible values are 'always', 'optional' and 'never'.
96 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
97 CPPUNIT_REQUIRED="${CPPUNIT_REQUIRED:-never}"
98
99 case "${CPPUNIT_REQUIRED}" in
100 always)
101 DEPEND="${DEPEND} dev-util/cppunit"
102 ;;
103 optional)
104 IUSE="${IUSE} test"
105 DEPEND="${DEPEND}
106 test? ( dev-util/cppunit )"
107 ;;
108 *)
109 CPPUNIT_REQUIRED="never"
110 ;;
111 esac
112
113 # @ECLASS-VARIABLE: NEED_KDE
114 # @DESCRIPTION:
115 # This variable sets the version of KDE4 which will be used by the eclass.
116 # This variable must be set by the ebuild, for all categories except for "kde-base".
117 # For kde-base packages, if it is not set by the ebuild,
118 # it's assumed that the required KDE4 version is the latest, non-live, available.
119 #
120 # @CODE
121 # Acceptable values are:
122 # - latest - Use latest version in the portage tree
123 # Default for kde-base ebuilds. Banned for ebuilds not part of kde or koffice.
124 # - svn - Use svn release (live ebuilds)
125 # - :SLOT - Use any version in the SLOT specified in the NEED_KDE value.
126 # - VERSION_NUMBER - Use the minimum KDE4 version specified in the NEED_KDE value.
127 # - VERSION_NUMBER:SLOT - Use the minimum KDE4 version and the SLOT specified in the NEED_KDE value.
128 # - none - Let the ebuild handle SLOT, kde dependencies, KDEDIR, ...
129 # @CODE
130 #
131 # Note: There is no default NEED_KDE for ebuilds not in kde-base or part of
132 # koffice, so you must set it explicitly in the ebuild, in all other cases.
133 if [[ -z ${NEED_KDE} ]]; then
134 if [[ -n ${KDEBASE} ]]; then
135 NEED_KDE="latest"
136 else
137 die "kde4-base.eclass inherited but NEED_KDE not defined - broken ebuild"
138 fi
139 fi
140 export NEED_KDE
141
142 case ${NEED_KDE} in
143 latest)
144 # Should only be used by 'kde-base'-ebuilds
145 if [[ "${KDEBASE}" == "kde-base" ]]; then
146 case ${PV} in
147 3.9*) _kdedir="3.9" ;;
148 4*) _kdedir="4.0" ;;
149 *) die "NEED_KDE=latest not supported for PV=${PV}" ;;
150 esac
151 _operator=">="
152 _pv="-${PV}:kde-4"
153 else
154 _kdedir="4.0"
155 _pv=":kde-4"
156 fi
157 ;;
158 scm|svn|9999*|:kde-svn)
159 _kdedir="svn"
160 _pv=":kde-svn"
161 export NEED_KDE="svn"
162 ;;
163 *:kde-svn)
164 _kdedir="svn"
165 _operator=">="
166 _pv="-${NEED_KDE}"
167 export NEED_KDE="svn"
168 ;;
169 # The ebuild handles dependencies, KDEDIR, SLOT.
170 none)
171 :
172 ;;
173 # NEED_KDE=":${SLOT}"
174 :kde-4)
175 _kdedir="4.0"
176 _pv="${NEED_KDE}"
177 ;;
178 # NEED_KDE="${PV}:${SLOT}"
179 *:kde-4)
180 _kdedir="4.0"
181 _operator=">="
182 _pv="-${NEED_KDE}"
183 ;;
184 3.9*)
185 _kdedir="3.9"
186 _operator=">="
187 _pv="-${NEED_KDE}:kde-4"
188 ;;
189 4*)
190 _kdedir="4.0"
191 _operator=">="
192 _pv="-${NEED_KDE}:kde-4"
193 ;;
194 *) die "NEED_KDE=${NEED_KDE} currently not supported."
195 ;;
196 esac
197
198 if [[ ${NEED_KDE} != none ]]; then
199 KDEDIR="/usr/kde/${_kdedir}"
200 KDEDIRS="/usr:/usr/local:${KDEDIR}"
201
202 if [[ -n ${KDEBASE} ]]; then
203 if [[ ${NEED_KDE} = svn ]]; then
204 SLOT="kde-svn"
205 else
206 SLOT="kde-4"
207 fi
208 fi
209
210 # We only need to add the dependencies if ${PN} is not "kdelibs" or "kdepimlibs"
211 if [[ ${PN} != "kdelibs" ]]; then
212 DEPEND="${DEPEND}
213 ${_operator}kde-base/kdelibs${_pv}"
214 RDEPEND="${RDEPEND}
215 ${_operator}kde-base/kdelibs${_pv}"
216 if [[ ${PN} != "kdepimlibs" ]]; then
217 DEPEND="${DEPEND}
218 ${_operator}kde-base/kdepimlibs${_pv}"
219 RDEPEND="${RDEPEND}
220 ${_operator}kde-base/kdepimlibs${_pv}"
221 fi
222 fi
223
224 unset _operator _pv _kdedir
225 fi
226
227 # Fetch section - If the ebuild's category is not 'kde-base' and if it is not a
228 # koffice ebuild, the URI should be set in the ebuild itself
229 if [[ -n ${KDEBASE} ]]; then
230 if [[ -n ${KMNAME} ]]; then
231 _kmname=${KMNAME}
232 else
233 _kmname=${PN}
234 fi
235 _kmname_pv="${_kmname}-${PV}"
236 if [[ ${NEED_KDE} != "svn" ]]; then
237 case ${KDEBASE} in
238 kde-base)
239 case ${PV} in
240 *) SRC_URI="mirror://kde/stable/${PV}/src/${_kmname_pv}.tar.bz2";;
241 esac
242 ;;
243 koffice)
244 SRC_URI="mirror://kde/unstable/${_kmname_pv}/src/${_kmname_pv}.tar.bz2"
245 ;;
246 esac
247 fi
248 unset _kmname _kmname_pv
249 fi
250
251 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: SRC_URI is ${SRC_URI}"
252 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: DEPEND ${DEPEND} - before blockers"
253
254 # Monolithic ebuilds should add blockers for split ebuilds in the same slot.
255 # If KMNAME is not set then this is not a split package
256 if [[ -n ${KDEBASE} && -z ${KMNAME} ]]; then
257 for _x in $(get-child-packages ${CATEGORY}/${PN}); do
258 DEPEND="${DEPEND} !${_x}:${SLOT}"
259 RDEPEND="${RDEPEND} !${_x}:${SLOT}"
260 done
261 unset _x
262 fi
263
264 debug-print "${BASH_SOURCE} ${LINENO} ${ECLASS} ${FUNCNAME}: DEPEND ${DEPEND} - after blockers"
265
266 # @ECLASS-VARIABLE: PREFIX
267 # @DESCRIPTION:
268 # Set the installation PREFIX. All kde-base ebuilds go into the KDE4 installation directory.
269 # Applications installed by the other ebuilds go into /usr/ by default, this value
270 # can be superseded by defining PREFIX before inheriting kde4-base.
271 if [[ -n ${KDEBASE} ]]; then
272 PREFIX=${KDEDIR}
273 else
274 # if PREFIX is not defined we set it to the default value of /usr
275 PREFIX="${PREFIX:-/usr}"
276 fi
277
278 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: SLOT ${SLOT} - KDEDIR ${KDEDIR} - KDEDIRS ${KDEDIRS}- PREFIX ${PREFIX} - NEED_KDE ${NEED_KDE}"
279
280 # @FUNCTION: kde4-base_pkg_setup
281 # @DESCRIPTION:
282 # Adds flags needed by all of KDE 4 to $QT4_BUILT_WITH_USE_CHECK. Uses
283 # kde4-functions_check_use from kde4-functions.eclass to print appropriate
284 # errors and die if any required flags listed in $QT4_BUILT_WITH_USE_CHECK or
285 # $KDE4_BUILT_WITH_USE_CHECK are missing.
286 kde4-base_pkg_setup() {
287 debug-print-function $FUNCNAME "$@"
288
289 case "${EAPI}" in
290 kdebuild-1)
291 [[ -n ${QT4_BUILT_WITH_USE_CHECK} || -n ${KDE4_BUILT_WITH_USE_CHECK[@]} ]] && \
292 die "built_with_use illegal in this EAPI!"
293 ;;
294 *)
295 # Make KDE4_BUILT_WITH_USE_CHECK an array if it isn't already
296 local line kde4_built_with_use_check=()
297 if [[ -n ${KDE4_BUILT_WITH_USE_CHECK[@]} && $(declare -p KDE4_BUILT_WITH_USE_CHECK) != 'declare -a '* ]]; then
298 while read line; do
299 [[ -z ${line} ]] && continue
300 kde4_built_with_use_check+=("${line}")
301 done <<< "${KDE4_BUILT_WITH_USE_CHECK}"
302 KDE4_BUILT_WITH_USE_CHECK=("${kde4_built_with_use_check[@]}")
303 fi
304
305 # KDE4 applications require qt4 compiled with USE="accessibility dbus gif jpeg png qt3support ssl zlib".
306 if has_version '<x11-libs/qt-4.4_alpha:4'; then
307 QT4_BUILT_WITH_USE_CHECK="${QT4_BUILT_WITH_USE_CHECK} accessibility dbus gif jpeg png qt3support ssl zlib"
308 else
309 KDE4_BUILT_WITH_USE_CHECK=("${KDE4_BUILT_WITH_USE_CHECK[@]}"
310 "x11-libs/qt-core qt3support ssl"
311 "x11-libs/qt-gui accessibility dbus"
312 "x11-libs/qt-qt3support accessibility")
313 fi
314
315 if has opengl ${IUSE//+} && use opengl || [[ ${OPENGL_REQUIRED} == always ]]; then
316 if has_version '<x11-libs/qt-4.4.0_alpha:4'; then
317 QT4_BUILT_WITH_USE_CHECK="${QT4_BUILT_WITH_USE_CHECK} opengl"
318 fi
319 fi
320 kde4-functions_check_use
321 ;;
322 esac
323 }
324
325 # @FUNCTION: kde4-base_apply_patches
326 # @DESCRIPTION:
327 # This function applies patches.
328 #
329 # If the directory ${WORKDIR}/patches/ exists, we apply all patches in that
330 # directory, provided they follow this format:
331 # @CODE
332 # - Monolithic ebuilds, (from kde-base)
333 # - $CATEGORY=kde-base:
334 # Apply ${CHILD_EBUILD_NAME}-${SLOT}-*{diff,patch}
335 # - $CATEGORY=!kde-base:
336 # Apply ${CHILD_EBUILD_NAME}-${PV}-*{diff,patch}
337 # - Split ebuilds:
338 # - $CATEGORY=kde-base:
339 # Apply ${PN}-${SLOT}-*{diff,patch}
340 # - $CATEGORY!=kde-base:
341 # Apply ${PN}-${PV}-*{diff,patch}
342 # @CODE
343 #
344 # If ${PATCHES} is non-zero all patches in it get applied. If there is more
345 # than one patch please make ${PATCHES} an array for proper quoting.
346 kde4-base_apply_patches() {
347 local _patchdir _packages _p _f
348 _patchdir="${WORKDIR}/patches/"
349 if [[ -d "${_patchdir}" ]]; then
350 if is-parent-package ${CATEGORY}/${PN} ; then
351 _packages="$(get-child-packages ${CATEGORY}/${PN})"
352 _packages="${_packages//${CATEGORY}\//} ${PN}"
353 else
354 _packages="${PN}"
355 fi
356 if [[ $(declare -p PATCHES) != 'declare -a '* ]]; then
357 PATCHES=(${PATCHES})
358 fi
359 for _p in ${_packages}; do
360 for _f in "${_patchdir}"/${_p}-${PV}-*{diff,patch}; do
361 [[ -e ${_f} ]] && PATCHES+=("${_f}")
362 done
363 if [[ -n "${KDEBASE}" ]]; then
364 for _f in "${_patchdir}"/${_p}-${SLOT}-*{diff,patch}; do
365 [[ -e ${_f} ]] && PATCHES+=("${_f}")
366 done
367 fi
368 done
369 fi
370 [[ -n ${PATCHES[@]} ]] && base_src_unpack autopatch
371 }
372
373 # @FUNCTION: kde4-base_src_unpack
374 # @DESCRIPTION:
375 # This function unpacks the source tarballs for KDE4 applications.
376 #
377 # If no argument is passed to this function, then standard src_unpack is
378 # executed. Otherwise options are passed to base_src_unpack.
379 #
380 # In addition it calls kde4-base_apply_patches when no arguments are passed to
381 # this function.
382 #
383 # It also handles translations if KDE_LINGUAS is defined. See KDE_LINGUAS and
384 # enable_selected_linguas() in kde4-functions.eclass(5) for further details.
385 kde4-base_src_unpack() {
386 debug-print-function $FUNCNAME "$@"
387
388 [[ -z "${KDE_S}" ]] && KDE_S="${S}"
389
390 if [[ -z $* ]]; then
391 # Unpack first and deal with KDE patches after examing possible patch sets.
392 # To be picked up, patches need to conform to the guidelines stated before.
393 # Monolithic ebuilds will use the split ebuild patches.
394 [[ -d "${KDE_S}" ]] || unpack ${A}
395 kde4-base_apply_patches
396 else
397 # Call base_src_unpack, which unpacks and patches
398 # step by step transparently as defined in the ebuild.
399 base_src_unpack $*
400 fi
401
402 # Updated cmake dir
403 if [[ -d "${WORKDIR}/cmake" ]] && [[ -d "${KDE_S}/cmake" ]]; then
404 ebegin "Updating cmake/ directory..."
405 rm -rf "${KDE_S}/cmake" || die "Unable to remove old cmake/ directory"
406 ln -s "${WORKDIR}/cmake" "${KDE_S}/cmake" || die "Unable to symlink the new cmake/ directory"
407 eend 0
408 fi
409
410 # Only enable selected languages, used for KDE extragear apps.
411 if [[ -n ${KDE_LINGUAS} ]]; then
412 enable_selected_linguas
413 fi
414 }
415
416 # @FUNCTION: kde4-base_src_compile
417 # @DESCRIPTION:
418 # General function for compiling KDE4 applications.
419 kde4-base_src_compile() {
420 debug-print-function ${FUNCNAME} "$@"
421
422 kde4-base_src_configure
423 kde4-base_src_make
424 }
425
426 # @FUNCTION: kde4-base_src_configure
427 # @DESCRIPTION:
428 # Function for configuring the build of KDE4 applications.
429 kde4-base_src_configure() {
430 debug-print-function ${FUNCNAME} "$@"
431
432 # Final flag handling
433 if has kdeenablefinal ${IUSE//+} && use kdeenablefinal; then
434 echo "Activating enable-final flag"
435 mycmakeargs="${mycmakeargs} -DKDE4_ENABLE_FINAL=ON"
436 fi
437
438 # Enable generation of HTML handbook
439 if has htmlhandbook ${IUSE//+} && use htmlhandbook; then
440 echo "Enabling building of HTML handbook"
441 mycmakeargs="${mycmakeargs} -DKDE4_ENABLE_HTMLHANDBOOK=ON"
442 fi
443
444 # Build tests in src_test only, where we override this value
445 mycmakeargs="${mycmakeargs} -DKDE4_BUILD_TESTS=OFF"
446
447 # Set distribution name
448 [[ ${PN} == "kdelibs" ]] && mycmakeargs="${mycmakeargs} -DKDE_DISTRIBUTION_TEXT=Gentoo"
449
450 # runpath linking
451 mycmakeargs="${mycmakeargs} -DKDE4_USE_ALWAYS_FULL_RPATH=ON"
452
453 # Here we set the install prefix
454 mycmakeargs="${mycmakeargs} -DCMAKE_INSTALL_PREFIX=${PREFIX}"
455
456 # Set environment
457 QTEST_COLORED=1
458 QT_PLUGIN_PATH=${KDEDIR}/$(get_libdir)/kde4/plugins/
459
460 cmake-utils_src_configureout
461 }
462
463 # @FUNCTION: kde4-base_src_make
464 # @DESCRIPTION:
465 # Function for building KDE4 applications.
466 # Options are passed to cmake-utils_src_make.
467 kde4-base_src_make() {
468 debug-print-function ${FUNCNAME} "$@"
469
470 cmake-utils_src_make "$@"
471 }
472
473 # @FUNCTION: kde4-base_src_test
474 # @DESCRIPTION:
475 # Function for testing KDE4 applications.
476 kde4-base_src_test() {
477 debug-print-function ${FUNCNAME} "$@"
478
479 # Override this value, set in kde4-base_src_configure()
480 mycmakeargs="${mycmakeargs} -DKDE4_BUILD_TESTS=ON"
481 cmake-utils_src_compile
482
483 cmake-utils_src_test
484 }
485
486 # @FUNCTION: kde4-base_src_install
487 # @DESCRIPTION:
488 # Function for installing KDE4 applications.
489 kde4-base_src_install() {
490 debug-print-function ${FUNCNAME} "$@"
491
492 kde4-base_src_make_doc
493 cmake-utils_src_install
494 }
495
496 # @FUNCTION: kde4-base_src_make_doc
497 # @DESCRIPTION:
498 # Function for installing the documentation of KDE4 applications.
499 kde4-base_src_make_doc() {
500 debug-print-function ${FUNCNAME} "$@"
501
502 local doc
503 for doc in AUTHORS ChangeLog* README* NEWS TODO; do
504 [[ -s $doc ]] && dodoc ${doc}
505 done
506
507 if [[ -z ${KMNAME} ]]; then
508 for doc in {apps,runtime,workspace,.}/*/{AUTHORS,README*}; do
509 if [[ -s $doc ]]; then
510 local doc_complete=${doc}
511 doc="${doc#*/}"
512 newdoc "$doc_complete" "${doc%/*}.${doc##*/}"
513 fi
514 done
515 fi
516
517 if [[ -n ${KDEBASE} && -d "${D}"/usr/share/doc/${PF} ]]; then
518 # work around bug #97196
519 dodir /usr/share/doc/kde && \
520 mv "${D}"/usr/share/doc/${PF} "${D}"/usr/share/doc/kde/ || \
521 die "Failed to move docs to kde/ failed."
522 fi
523 }
524
525 # @FUNCTION: kde4-base_pkg_postinst
526 # @DESCRIPTION:
527 # Function to rebuild the KDE System Configuration Cache after an application has been installed.
528 kde4-base_pkg_postinst() {
529 buildsycoca
530 }
531
532 # @FUNCTION: kde4-base_pkg_postrm
533 # @DESCRIPTION:
534 # Function to rebuild the KDE System Configuration Cache after an application has been removed.
535 kde4-base_pkg_postrm() {
536 buildsycoca
537 }

  ViewVC Help
Powered by ViewVC 1.1.20