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

Contents of /eclass/kde4-base.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.35 - (show annotations) (download)
Wed Apr 15 11:09:50 2009 UTC (5 years, 4 months ago) by scarabeus
Branch: MAIN
Changes since 1.34: +5 -1 lines
Document ESVN_MIRROR variable for kde eclasses. Requested on irc.

1 # Copyright 2007-2009 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.34 2009/04/13 00:02:45 scarabeus Exp $
4
5 # @ECLASS: kde4-base.eclass
6 # @MAINTAINER:
7 # kde@gentoo.org
8 # @BLURB: This eclass provides functions for kde 4.X ebuilds
9 # @DESCRIPTION:
10 # The kde4-base.eclass provides support for building KDE4 based ebuilds
11 # and KDE4 applications.
12 #
13 # NOTE: KDE 4 ebuilds by default define EAPI="2", this can be redefined but
14 # eclass will fail with version older than 2.
15
16 inherit base cmake-utils eutils kde4-functions
17
18 get_build_type
19 if [[ ${BUILD_TYPE} = live ]]; then
20 inherit subversion
21 fi
22
23 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_test src_install pkg_postinst pkg_postrm
24
25 # @ECLASS-VARIABLE: OPENGL_REQUIRED
26 # @DESCRIPTION:
27 # Is qt-opengl required? Possible values are 'always', 'optional' and 'never'.
28 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
29 OPENGL_REQUIRED="${OPENGL_REQUIRED:-never}"
30
31 # @ECLASS-VARIABLE: WEBKIT_REQUIRED
32 # @DESCRIPTION:
33 # Is qt-webkit requred? Possible values are 'always', 'optional' and 'never'.
34 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
35 WEBKIT_REQUIRED="${WEBKIT_REQUIRED:-never}"
36
37 # @ECLASS-VARIABLE: CPPUNIT_REQUIRED
38 # @DESCRIPTION:
39 # Is cppunit required for tests? Possible values are 'always', 'optional' and 'never'.
40 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
41 CPPUNIT_REQUIRED="${CPPUNIT_REQUIRED:-never}"
42
43 # @ECLASS-VARIABLE: KDE_REQUIRED
44 # @DESCRIPTION:
45 # Is kde required? Possible values are 'always', 'optional' and 'never'.
46 # This variable must be set before inheriting any eclasses. Defaults to 'always'
47 # If set to always or optional, KDE_MINIMAL may be overriden as well.
48 # Note that for kde-base packages this variable is fixed to 'always'.
49 KDE_REQUIRED="${KDE_REQUIRED:-always}"
50
51 # Verify KDE_MINIMAL (display QA notice in pkg_setup, still we need to fix it here)
52 if [[ -n ${KDE_MINIMAL} ]]; then
53 for slot in ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
54 [[ ${KDE_MINIMAL} = ${slot} ]] && KDE_MINIMAL_VALID=1 && break
55 done
56 [[ -z ${KDE_MINIMAL_VALID} ]] && unset KDE_MINIMAL
57 else
58 KDE_MINIMAL_VALID=1
59 fi
60
61 # @ECLASS-VARIABLE: KDE_MINIMAL
62 # @DESCRIPTION:
63 # This wariable is used when KDE_REQUIRED is set, to specify required KDE minimal
64 # version for apps to work. Currently defaults to 4.2
65 # One may override this variable to raise version requirements.
66 # For possible values look at KDE_SLOTS and KDE_LIVE_SLOTS variables.
67 # Note that for kde-base packages is fixed to ${SLOT}.
68 KDE_MINIMAL="${KDE_MINIMAL:-4.2}"
69
70 # Fallback behaviour (for now)
71 # TODO Remove when tree is clean
72 if [[ -n ${NEED_KDE} ]]; then
73 case ${NEED_KDE} in
74 none)
75 KDE_REQUIRED="never"
76 ;;
77 *)
78 KDE_REQUIRED="always"
79 KDE_MINIMAL="${NEED_KDE}"
80 ;;
81 esac
82 fi
83
84 # OpenGL dependencies
85 qtopengldepend="
86 x11-libs/qt-opengl:4
87 "
88 case ${OPENGL_REQUIRED} in
89 always)
90 COMMONDEPEND="${COMMONDEPEND} ${qtopengldepend}"
91 ;;
92 optional)
93 IUSE="${IUSE} opengl"
94 COMMONDEPEND="${COMMONDEPEND}
95 opengl? ( ${qtopengldepend} )
96 "
97 ;;
98 *) ;;
99 esac
100 unset qtopengldepend
101
102 # WebKit dependencies
103 qtwebkitdepend="
104 x11-libs/qt-webkit:4
105 "
106 case ${WEBKIT_REQUIRED} in
107 always)
108 COMMONDEPEND="${COMMONDEPEND} ${qtwebkitdepend}"
109 ;;
110 optional)
111 IUSE="${IUSE} webkit"
112 COMMONDEPEND="${COMMONDEPEND}
113 webkit? ( ${qtwebkitdepend} )
114 "
115 ;;
116 *) ;;
117 esac
118 unset qtwebkitdepend
119
120 # CppUnit dependencies
121 cppuintdepend="
122 dev-util/cppunit
123 "
124 case ${CPPUNIT_REQUIRED} in
125 always)
126 DEPEND="${DEPEND} ${cppuintdepend}"
127 ;;
128 optional)
129 IUSE="${IUSE} test"
130 DEPEND="${DEPEND}
131 test? ( ${cppuintdepend} )
132 "
133 ;;
134 *) ;;
135 esac
136 unset cppuintdepend
137
138 # DEPRECATED block
139 if [[ ${NEED_KDE} != "none" ]]; then
140 # localization deps
141 # DISABLED UNTIL PMS decide correct approach :(
142 if [[ -n ${KDE_LINGUAS} ]]; then
143 LNG_DEP=""
144 for _lng in ${KDE_LINGUAS}; do
145 # there must be or due to issue if lingua is not present in kde-l10n so
146 # it wont die but pick kde-l10n as-is.
147 LNG_DEP="${LNG_DEP}
148 || (
149 kde-base/kde-l10n[linguas_${_lng},kdeprefix=]
150 kde-base/kde-l10n[kdeprefix=]
151 )
152 "
153 done
154 fi
155 fi # NEED_KDE != NONE block
156
157 # Setup packages inheriting this eclass
158 case ${KDEBASE} in
159
160 kde-base)
161 if [[ $BUILD_TYPE = live ]]; then
162 # Disable tests for live ebuilds
163 RESTRICT="${RESTRICT} test"
164 # Live ebuilds in kde-base default to kdeprefix by default
165 IUSE="${IUSE} +kdeprefix"
166 else
167 # All other ebuild types default to -kdeprefix as before
168 IUSE="${IUSE} kdeprefix"
169 fi
170 # Determine SLOT from PV
171 case ${PV} in
172 4.3* | 4.2.9* | 4.2.8* | 4.2.7* | 4.2.6*) SLOT="4.3" ;;
173 4.2* | 4.1.9* | 4.1.8* | 4.1.7* | 4.1.6*) SLOT="4.2" ;;
174 *9999*) SLOT="live" ;;
175 *) die "Unsupported ${PV}" ;;
176 esac
177 _kdedir="${SLOT}"
178 _pv="-${PV}:${SLOT}"
179 _pvn="-${PV}"
180
181 # Block installation of other SLOTS unless kdeprefix
182 for slot in ${KDE_SLOTS[@]}; do
183 # Block non kdeprefix ${PN} on other slots
184 if [[ ${SLOT} != ${slot} ]]; then
185 RDEPEND="${RDEPEND}
186 !kdeprefix? ( !kde-base/${PN}:${slot}[-kdeprefix] )
187 "
188 fi
189 done
190 ;;
191
192 koffice)
193 SLOT="2"
194 _pv="-${KDE_MINIMAL}"
195 _pvn="${_pv}"
196 ;;
197
198 *)
199 _pv="-${KDE_MINIMAL}"
200 _pvn="${_pv}"
201 ;;
202
203 esac
204
205 # KDE dependencies
206 kdecommondepend="
207 dev-lang/perl
208 x11-libs/libXext
209 x11-libs/libXt
210 x11-libs/libXxf86vm
211 x11-libs/qt-core:4[qt3support,ssl]
212 x11-libs/qt-gui:4[accessibility,dbus]
213 x11-libs/qt-qt3support:4[accessibility]
214 x11-libs/qt-script:4
215 x11-libs/qt-sql:4[qt3support]
216 x11-libs/qt-svg:4
217 x11-libs/qt-test:4
218 "
219 if [[ ${PN} != kdelibs ]]; then
220 if [[ ${KDEBASE} = kde-base ]]; then
221 kdecommondepend="${kdecommondepend}
222 kdeprefix? ( >=kde-base/kdelibs${_pv}[kdeprefix] )
223 !kdeprefix? ( >=kde-base/kdelibs${_pvn}[-kdeprefix] )
224 "
225 else
226 kdecommondepend="${kdecommondepend}
227 >=kde-base/kdelibs${_pv}
228 "
229 fi
230 fi
231 unset _pv _pvn
232 kdedepend="
233 >=dev-util/cmake-2.6.2
234 dev-util/pkgconfig
235 >=sys-apps/sandbox-1.3.2
236 "
237 case ${KDE_REQUIRED} in
238 always)
239 COMMONDEPEND="${COMMONDEPEND} ${kdecommondepend}"
240 DEPEND="${DEPEND} ${kdedepend}"
241 ;;
242 optional)
243 IUSE="${IUSE} kde"
244 COMMONDEPEND="${COMMONDEPEND}
245 kde? ( ${kdecommondepend} )"
246 DEPEND="${DEPEND}
247 kde? ( ${kdedepend} )"
248 ;;
249 *) ;;
250 esac
251 unset kdecommondepend kdedepend
252
253 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: COMMONDEPEND is ${COMMONDEPEND}"
254 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: DEPEND (only) is ${DEPEND}"
255 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: RDEPEND (only) is ${RDEPEND}"
256
257 # Accumulate dependencies set by this eclass
258 DEPEND="${DEPEND} ${COMMONDEPEND}"
259 RDEPEND="${RDEPEND} ${COMMONDEPEND}"
260
261 # Fetch section - If the ebuild's category is not 'kde-base' and if it is not a
262 # koffice ebuild, the URI should be set in the ebuild itself
263 case ${BUILD_TYPE} in
264 live)
265 SRC_URI=""
266 # @ECLASS-VARIABLE: ESVN_MIRROR
267 # @DESCRIPTION:
268 # This variable allows easy overriding of default kde mirror service
269 # (anonsvn) with anything else you might want to use.
270 ESVN_MIRROR=${ESVN_MIRROR:=svn://anonsvn.kde.org/home/kde}
271 # Split ebuild, or extragear stuff
272 if [[ -n ${KMNAME} ]]; then
273 ESVN_PROJECT="${KMNAME}"
274 if [[ -z ${KMNOMODULE} ]] && [[ -z ${KMMODULE} ]]; then
275 KMMODULE="${PN}"
276 fi
277 # Split kde-base/ ebuilds: (they reside in trunk/KDE)
278 case ${KMNAME} in
279 kdebase-*)
280 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/KDE/kdebase/${KMNAME#kdebase-}"
281 ;;
282 kdereview)
283 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
284 ;;
285 kdesupport)
286 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
287 ESVN_PROJECT="${PN}"
288 ;;
289 kde*)
290 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/KDE/${KMNAME}"
291 ;;
292 extragear*|playground*)
293 # Unpack them in toplevel dir, so that they won't conflict with kde4-meta
294 # build packages from same svn location.
295 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
296 ESVN_PROJECT="${PN}"
297 ;;
298 koffice)
299 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}"
300 ;;
301 *)
302 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
303 ;;
304 esac
305 else
306 # kdelibs, kdepimlibs
307 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/KDE/${PN}"
308 ESVN_PROJECT="${PN}"
309 fi
310 # limit syncing to 1 hour.
311 ESVN_UP_FREQ=${ESVN_UP_FREQ:-1}
312 ;;
313 *)
314 if [[ -n ${KDEBASE} ]]; then
315 if [[ -n ${KMNAME} ]]; then
316 case ${KMNAME} in
317 kdebase-apps)
318 _kmname="kdebase" ;;
319 *)
320 _kmname="${KMNAME}" ;;
321 esac
322 else
323 _kmname=${PN}
324 fi
325 _kmname_pv="${_kmname}-${PV}"
326 if [[ $NEED_KDE != live ]]; then
327 case ${KDEBASE} in
328 kde-base)
329 case ${PV} in
330 4.2.9* | 4.2.8* | 4.2.7* | 4.2.6*)
331 SRC_URI="http://dev.gentooexperimental.org/~alexxy/kde/${PV}/${_kmname_pv}.tar.lzma" ;;
332 4.1.9* | 4.1.8* | 4.1.7* | 4.1.6* | 4.0.9* | 4.0.8*)
333 SRC_URI="mirror://kde/unstable/${PV}/src/${_kmname_pv}.tar.bz2" ;;
334 *) SRC_URI="mirror://kde/stable/${PV}/src/${_kmname_pv}.tar.bz2" ;;
335 esac
336 ;;
337 koffice)
338 SRC_URI="mirror://kde/unstable/${_kmname_pv}/src/${_kmname_pv}.tar.bz2"
339 ;;
340 esac
341 fi
342 unset _kmname _kmname_pv
343 fi
344 ;;
345 esac
346
347 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: SRC_URI is ${SRC_URI}"
348
349 # @ECLASS-VARIABLE: PREFIX
350 # @DESCRIPTION:
351 # Set the installation PREFIX for non kde-base applications. It defaults to /usr.
352 # kde-base packages go into KDE4 installation directory (KDEDIR) by default.
353 # No matter the PREFIX, package will be built agains KDE installed in KDEDIR.
354
355 # @FUNCTION: kde4-base_pkg_setup
356 # @DESCRIPTION:
357 # Do the basic kdeprefix KDEDIR settings and determine with which kde should
358 # optional applications link
359 kde4-base_pkg_setup() {
360 debug-print-function ${FUNCNAME} "$@"
361
362 # QA ebuilds
363 case ${NEED_KDE} in
364 none) ewarn "QA Notice: using deprecated NEED_KDE variable, use KDE_REQUIRED=\"never\" or KDE_REQUIRED=\"optional\" instead. You may want to override KDE_MINIMAL as well (default is KDE_MINIMAL=\"${KDE_MINIMAL}\")." ;;
365 *) [[ -n ${NEED_KDE} ]] && ewarn "QA Notice: using deprecated NEED_KDE variable, use KDE_MINIMAL instead (default is KDE_MINIMAL=\"${KDE_MINIMAL}\")." ;;
366 esac
367 [[ -z ${KDE_MINIMAL_VALID} ]] && ewarn "QA Notice: ignoring invalid KDE_MINIMAL (defaulting to ${KDE_MINIMAL})."
368
369 # Don't set KDEHOME during compilation, it will cause access violations
370 unset KDEHOME
371
372 if [[ ${KDEBASE} = kde-base ]]; then
373 if use kdeprefix; then
374 KDEDIR="/usr/kde/${_kdedir}"
375 else
376 KDEDIR="/usr"
377 fi
378 PREFIX="${PREFIX:-${KDEDIR}}"
379 else
380 # Determine KDEDIR by loooking for the closest match with KDE_MINIMAL
381 KDEDIR=
382 local kde_minimal_met
383 for slot in ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
384 [[ -z ${kde_minimal_met} ]] && [[ ${slot} = ${KDE_MINIMAL} ]] && kde_minimal_met=1
385 if [[ -n ${kde_minimal_met} ]] && has_version "kde-base/kdelibs:${slot}"; then
386 if has_version "kde-base/kdelibs:${slot}[kdeprefix]"; then
387 KDEDIR="/usr/kde/${slot}"
388 else
389 KDEDIR="/usr"
390 fi
391 break;
392 fi
393 done
394 [[ -z KDEDIR ]] && die "Failed to determine KDEDIR!"
395 PREFIX="${PREFIX:-/usr}"
396 fi
397
398 # Not needed anymore
399 unset _kdedir
400
401 if [[ ${BUILD_TYPE} = live ]] && [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
402 echo
403 elog "WARNING! This is an experimental live ebuild of ${KMNAME:-${PN}}"
404 elog "Use it at your own risk."
405 elog "Do _NOT_ file bugs at bugs.gentoo.org because of this ebuild!"
406 echo
407 fi
408 }
409
410 # @FUNCTION: kde4-base_src_unpack
411 # @DESCRIPTION:
412 # This function unpacks the source tarballs for KDE4 applications.
413 kde4-base_src_unpack() {
414 debug-print-function ${FUNCNAME} "$@"
415
416 if [[ ${BUILD_TYPE} = live ]]; then
417 migrate_store_dir
418 subversion_src_unpack
419 else
420 base_src_unpack
421 fi
422 }
423
424 # @FUNCTION: kde4-base_src_compile
425 # @DESCRIPTION:
426 # General pre-configure and pre-compile function for KDE4 applications.
427 # It also handles translations if KDE_LINGUAS is defined. See KDE_LINGUAS and
428 # enable_selected_linguas() in kde4-functions.eclass(5) for further details.
429 kde4-base_src_prepare() {
430 debug-print-function ${FUNCNAME} "$@"
431
432 # Only enable selected languages, used for KDE extragear apps.
433 if [[ -n ${KDE_LINGUAS} ]]; then
434 enable_selected_linguas
435 fi
436
437 base_src_prepare
438
439 # Save library dependencies
440 if [[ -n ${KMSAVELIBS} ]] ; then
441 save_library_dependencies
442 fi
443
444 # Inject library dependencies
445 if [[ -n ${KMLOADLIBS} ]] ; then
446 load_library_dependencies
447 fi
448 }
449
450 # @FUNCTION: kde4-base_src_configure
451 # @DESCRIPTION:
452 # Function for configuring the build of KDE4 applications.
453 kde4-base_src_configure() {
454 debug-print-function ${FUNCNAME} "$@"
455
456 # Handle common release builds
457 if ! has debug ${IUSE//+} || ! use debug; then
458 append-cppflags -DQT_NO_DEBUG
459 fi
460
461 # Build tests in src_test only, where we override this value
462 local cmakeargs="-DKDE4_BUILD_TESTS=OFF"
463
464 # Set distribution name
465 [[ ${PN} = kdelibs ]] && cmakeargs="${cmakeargs} -DKDE_DISTRIBUTION_TEXT=Gentoo"
466
467 # Here we set the install prefix
468 cmakeargs="${cmakeargs} -DCMAKE_INSTALL_PREFIX=${PREFIX}"
469
470 # Set environment
471 QTEST_COLORED=1
472 QT_PLUGIN_PATH="${KDEDIR}/$(get_libdir)/kde4/plugins/"
473
474 # Hardcode path to *.pc KDE files
475 export PKG_CONFIG_PATH="${PKG_CONFIG_PATH:+${PKG_CONFIG_PATH}:}${KDEDIR}/$(get_libdir)/pkgconfig"
476
477 # Shadow existing /usr installations
478 unset KDEDIRS
479
480 # Override some environment variables - only when kdeprefix is different,
481 # to not break ccache/distcc
482 if [[ ${KDEDIR} != /usr ]]; then
483 PATH="${KDEDIR}/bin:${PATH}"
484 LDPATH="${KDEDIR}/$(get_libdir):${LDPATH}"
485 fi
486
487 if has kdeprefix ${IUSE//+} && use kdeprefix; then
488 # Set cmake prefixes to allow buildsystem to localize valid KDE installation
489 # when more are present
490 cmakeargs="${cmakeargs} -DCMAKE_SYSTEM_PREFIX_PATH=${KDEDIR}"
491 else
492 # If prefix is /usr, sysconf needs to be /etc, not /usr/etc
493 cmakeargs="${cmakeargs} -DSYSCONF_INSTALL_DIR=/etc"
494 fi
495
496 mycmakeargs="${cmakeargs} ${mycmakeargs}"
497
498 cmake-utils_src_configure
499 }
500
501 # @FUNCTION: kde4-base_src_compile
502 # @DESCRIPTION:
503 # General function for compiling KDE4 applications.
504 kde4-base_src_compile() {
505 debug-print-function ${FUNCNAME} "$@"
506
507 cmake-utils_src_compile
508 }
509
510 # @FUNCTION: kde4-base_src_test
511 # @DESCRIPTION:
512 # Function for testing KDE4 applications.
513 kde4-base_src_test() {
514 debug-print-function ${FUNCNAME} "$@"
515
516 # Override this value, set in kde4-base_src_configure()
517 mycmakeargs="${mycmakeargs} -DKDE4_BUILD_TESTS=ON"
518 cmake-utils_src_configure
519 kde4-base_src_compile
520
521 cmake-utils_src_test
522 }
523
524 # @FUNCTION: kde4-base_src_install
525 # @DESCRIPTION:
526 # Function for installing KDE4 applications.
527 kde4-base_src_install() {
528 debug-print-function ${FUNCNAME} "$@"
529
530 if [[ -n ${KMSAVELIBS} ]] ; then
531 install_library_dependencies
532 fi
533
534 kde4-base_src_make_doc
535 cmake-utils_src_install
536 }
537
538 # @FUNCTION: kde4-base_src_make_doc
539 # @DESCRIPTION:
540 # Function for installing the documentation of KDE4 applications.
541 kde4-base_src_make_doc() {
542 debug-print-function ${FUNCNAME} "$@"
543
544 local doc
545 for doc in AUTHORS ChangeLog* README* NEWS TODO; do
546 [[ -s ${doc} ]] && dodoc ${doc}
547 done
548
549 if [[ -z ${KMNAME} ]]; then
550 for doc in {apps,runtime,workspace,.}/*/{AUTHORS,README*}; do
551 if [[ -s ${doc} ]]; then
552 local doc_complete=${doc}
553 doc="${doc#*/}"
554 newdoc "$doc_complete" "${doc%/*}.${doc##*/}"
555 fi
556 done
557 fi
558
559 if [[ -n ${KDEBASE} ]] && [[ -d "${D}/usr/share/doc/${PF}" ]]; then
560 # work around bug #97196
561 dodir /usr/share/doc/KDE4 && \
562 mv "${D}/usr/share/doc/${PF}" "${D}"/usr/share/doc/KDE4/ || \
563 die "Failed to move docs to KDE4/."
564 fi
565 }
566
567 # @FUNCTION: kde4-base_pkg_postinst
568 # @DESCRIPTION:
569 # Function to rebuild the KDE System Configuration Cache after an application has been installed.
570 kde4-base_pkg_postinst() {
571 debug-print-function ${FUNCNAME} "$@"
572
573 buildsycoca
574 }
575
576 # @FUNCTION: kde4-base_pkg_postrm
577 # @DESCRIPTION:
578 # Function to rebuild the KDE System Configuration Cache after an application has been removed.
579 kde4-base_pkg_postrm() {
580 debug-print-function ${FUNCNAME} "$@"
581
582 buildsycoca
583 }

  ViewVC Help
Powered by ViewVC 1.1.20