1 # Copyright 1999-2015 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
5 # @ECLASS: kde4-base.eclass
8 # @BLURB: This eclass provides functions for kde 4.X ebuilds
10 # The kde4-base.eclass provides support for building KDE4 based ebuilds
11 # and KDE4 applications.
13 # NOTE: KDE 4 ebuilds currently support EAPI 5. This will be
14 # reviewed over time as new EAPI versions are approved.
16 if [[ -z ${_KDE4_BASE_ECLASS} ]]; then
19 # @ECLASS-VARIABLE: KDE_SELINUX_MODULE
21 # If set to "none", do nothing.
22 # For any other value, add selinux to IUSE, and depending on that useflag
23 # add a dependency on sec-policy/selinux-${KDE_SELINUX_MODULE} to (R)DEPEND
24 : ${KDE_SELINUX_MODULE:=none}
26 # @ECLASS-VARIABLE: VIRTUALDBUS_TEST
28 # If defined, launch and use a private dbus session during src_test.
30 # @ECLASS-VARIABLE: VIRTUALX_REQUIRED
32 # For proper description see virtualx.eclass manpage.
33 # Here we redefine default value to be manual, if your package needs virtualx
34 # for tests you should proceed with setting VIRTUALX_REQUIRED=test.
35 : ${VIRTUALX_REQUIRED:=manual}
37 inherit kde4-functions toolchain-funcs fdo-mime flag-o-matic gnome2-utils virtualx versionator eutils multilib
39 if [[ ${KDE_BUILD_TYPE} = live ]]; then
41 svn) inherit subversion ;;
42 git) inherit git-r3 ;;
46 # @ECLASS-VARIABLE: CMAKE_REQUIRED
48 # Specify if cmake buildsystem is being used. Possible values are 'always' and 'never'.
49 # Please note that if it's set to 'never' you need to explicitly override following phases:
50 # src_configure, src_compile, src_test and src_install.
51 # Defaults to 'always'.
52 : ${CMAKE_REQUIRED:=always}
53 if [[ ${CMAKE_REQUIRED} = always ]]; then
54 buildsystem_eclass="cmake-utils"
55 export_fns="src_configure src_compile src_test src_install"
58 # @ECLASS-VARIABLE: KDE_MINIMAL
60 # This variable is used when KDE_REQUIRED is set, to specify required KDE minimal
61 # version for apps to work. Currently defaults to 4.4
62 # One may override this variable to raise version requirements.
63 # Note that it is fixed to ${PV} for kde-base packages.
64 KDE_MINIMAL="${KDE_MINIMAL:-4.4}"
66 # Set slot for KDEBASE known packages
69 SLOT=4/$(get_version_component_range 1-2)
73 if [[ ${KDE_BUILD_TYPE} = live ]]; then
74 # @ECLASS-VARIABLE: KDEVELOP_VERSION
76 # Specifies KDevelop version. Default is 4.0.0 for tagged packages and 9999 for live packages.
77 # Applies to KDEBASE=kdevelop only.
78 KDEVELOP_VERSION="${KDEVELOP_VERSION:-4.9999}"
79 # @ECLASS-VARIABLE: KDEVPLATFORM_VERSION
81 # Specifies KDevplatform version. Default is 1.0.0 for tagged packages and 9999 for live packages.
82 # Applies to KDEBASE=kdevelop only.
83 KDEVPLATFORM_VERSION="${KDEVPLATFORM_VERSION:-4.9999}"
87 KDEVELOP_VERSION=${PV}
88 KDEVPLATFORM_VERSION="$(($(get_major_version)-3)).$(get_after_major_version)"
90 kdevplatform|kdevelop-php*|kdevelop-python)
91 KDEVELOP_VERSION="$(($(get_major_version)+3)).$(get_after_major_version)"
92 KDEVPLATFORM_VERSION=${PV}
95 KDEVELOP_VERSION="${KDEVELOP_VERSION:-4.0.0}"
96 KDEVPLATFORM_VERSION="${KDEVPLATFORM_VERSION:-1.0.0}"
103 inherit ${buildsystem_eclass}
105 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare ${export_fns} pkg_preinst pkg_postinst pkg_postrm
107 unset buildsystem_eclass
110 # @ECLASS-VARIABLE: DECLARATIVE_REQUIRED
112 # Is qtdeclarative required? Possible values are 'always', 'optional' and 'never'.
113 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
114 DECLARATIVE_REQUIRED="${DECLARATIVE_REQUIRED:-never}"
116 # @ECLASS-VARIABLE: QTHELP_REQUIRED
118 # Is qthelp required? Possible values are 'always', 'optional' and 'never'.
119 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
120 QTHELP_REQUIRED="${QTHELP_REQUIRED:-never}"
122 # @ECLASS-VARIABLE: OPENGL_REQUIRED
124 # Is qtopengl required? Possible values are 'always', 'optional' and 'never'.
125 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
126 OPENGL_REQUIRED="${OPENGL_REQUIRED:-never}"
128 # @ECLASS-VARIABLE: MULTIMEDIA_REQUIRED
130 # Is qtmultimedia required? Possible values are 'always', 'optional' and 'never'.
131 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
132 MULTIMEDIA_REQUIRED="${MULTIMEDIA_REQUIRED:-never}"
134 # @ECLASS-VARIABLE: CPPUNIT_REQUIRED
136 # Is cppunit required for tests? Possible values are 'always', 'optional' and 'never'.
137 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
138 CPPUNIT_REQUIRED="${CPPUNIT_REQUIRED:-never}"
140 # @ECLASS-VARIABLE: KDE_REQUIRED
142 # Is kde required? Possible values are 'always', 'optional' and 'never'.
143 # This variable must be set before inheriting any eclasses. Defaults to 'always'
144 # If set to 'always' or 'optional', KDE_MINIMAL may be overriden as well.
145 # Note that for kde-base packages this variable is fixed to 'always'.
146 KDE_REQUIRED="${KDE_REQUIRED:-always}"
148 # @ECLASS-VARIABLE: KDE_HANDBOOK
150 # Set to enable handbook in application. Possible values are 'always', 'optional'
151 # (handbook USE flag) and 'never'.
152 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
153 # It adds default handbook dirs for kde-base packages to KMEXTRA and in any case it
154 # ensures buildtime and runtime dependencies.
155 KDE_HANDBOOK="${KDE_HANDBOOK:-never}"
157 # @ECLASS-VARIABLE: KDE_LINGUAS_LIVE_OVERRIDE
159 # Set this varible if you want your live package to manage its
160 # translations. (Mostly all kde ebuilds does not ship documentation
161 # and translations in live ebuilds)
162 if [[ ${KDE_BUILD_TYPE} == live && -z ${KDE_LINGUAS_LIVE_OVERRIDE} ]]; then
163 # Kdebase actualy provides the handbooks even for live stuff
164 [[ ${KDEBASE} == kde-base ]] || KDE_HANDBOOK=never
168 # Setup packages inheriting this eclass
171 HOMEPAGE="https://www.kde.org/"
173 if [[ ${KDE_BUILD_TYPE} = live && -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
174 # Disable tests for live ebuilds by default
178 # This code is to prevent portage from searching GENTOO_MIRRORS for
179 # packages that will never be mirrored. (As they only will ever be in
182 *9999* | 4.?.[6-9]? | 4.??.[6-9]? | ??.?.[6-9]? | ??.??.[6-9]?)
188 HOMEPAGE="https://www.kdevelop.org/"
193 # @ECLASS-VARIABLE: QT_MINIMAL
195 # Determine version of qt we enforce as minimal for the package.
196 QT_MINIMAL="${QT_MINIMAL:-4.8.5}"
198 # Declarative dependencies
199 qtdeclarativedepend="
200 >=dev-qt/qtdeclarative-${QT_MINIMAL}:4
202 case ${DECLARATIVE_REQUIRED} in
204 COMMONDEPEND+=" ${qtdeclarativedepend}"
208 COMMONDEPEND+=" declarative? ( ${qtdeclarativedepend} )"
212 unset qtdeclarativedepend
214 # QtHelp dependencies
216 >=dev-qt/qthelp-${QT_MINIMAL}:4
218 case ${QTHELP_REQUIRED} in
220 COMMONDEPEND+=" ${qthelpdepend}"
224 COMMONDEPEND+=" qthelp? ( ${qthelpdepend} )"
229 # OpenGL dependencies
231 >=dev-qt/qtopengl-${QT_MINIMAL}:4
233 case ${OPENGL_REQUIRED} in
235 COMMONDEPEND+=" ${qtopengldepend}"
239 COMMONDEPEND+=" opengl? ( ${qtopengldepend} )"
245 # MultiMedia dependencies
247 >=dev-qt/qtmultimedia-${QT_MINIMAL}:4
249 case ${MULTIMEDIA_REQUIRED} in
251 COMMONDEPEND+=" ${qtmultimediadepend}"
255 COMMONDEPEND+=" multimedia? ( ${qtmultimediadepend} )"
259 unset qtmultimediadepend
261 # CppUnit dependencies
265 case ${CPPUNIT_REQUIRED} in
267 DEPEND+=" ${cppuintdepend}"
271 DEPEND+=" test? ( ${cppuintdepend} )"
278 # Qt accessibility classes are needed in various places, bug 325461
281 >=dev-qt/qt3support-${QT_MINIMAL}:4[accessibility]
282 >=dev-qt/qtcore-${QT_MINIMAL}:4[qt3support,ssl]
283 >=dev-qt/qtdbus-${QT_MINIMAL}:4
284 >=dev-qt/designer-${QT_MINIMAL}:4
285 >=dev-qt/qtgui-${QT_MINIMAL}:4[accessibility,dbus(+)]
286 >=dev-qt/qtscript-${QT_MINIMAL}:4
287 >=dev-qt/qtsql-${QT_MINIMAL}:4[qt3support]
288 >=dev-qt/qtsvg-${QT_MINIMAL}:4
289 >=dev-qt/qttest-${QT_MINIMAL}:4
290 >=dev-qt/qtwebkit-${QT_MINIMAL}:4
293 if [[ ${PN} != kdelibs ]]; then
294 kdecommondepend+=" $(add_kdebase_dep kdelibs)"
295 if [[ ${KDEBASE} = kdevelop ]]; then
296 if [[ ${PN} != kdevplatform ]]; then
297 # @ECLASS-VARIABLE: KDEVPLATFORM_REQUIRED
299 # Specifies whether kdevplatform is required. Possible values are 'always' (default) and 'never'.
300 # Applies to KDEBASE=kdevelop only.
301 KDEVPLATFORM_REQUIRED="${KDEVPLATFORM_REQUIRED:-always}"
302 case ${KDEVPLATFORM_REQUIRED} in
305 >=dev-util/kdevplatform-${KDEVPLATFORM_VERSION}:4
318 >=x11-libs/libXtst-1.1.0
319 x11-proto/xf86vidmodeproto
325 if [[ ${CATEGORY} == kde-apps ]]; then
326 kderdepend+=" !kde-base/${PN}:4"
329 # all packages needs oxygen icons for basic iconset
330 if [[ ${PN} != oxygen-icons ]]; then
331 kderdepend+=" kde-frameworks/oxygen-icons"
334 # add a dependency over kde4-l10n
335 if [[ ${KDEBASE} != "kde-base" && -n ${KDE_LINGUAS} ]]; then
336 for _lingua in ${KDE_LINGUAS}; do
337 # if our package has linguas, pull in kde4-l10n with selected lingua enabled,
338 # but only for selected ones.
339 # this can't be done on one line because if user doesn't use any localisation
340 # then he is probably not interested in kde4-l10n at all.
342 linguas_${_lingua}? ( $(add_kdeapps_dep kde4-l10n "linguas_${_lingua}(+)") )
349 app-text/docbook-xml-dtd:4.2
350 app-text/docbook-xsl-stylesheets
353 $(add_kdebase_dep kdelibs 'handbook')
355 case ${KDE_HANDBOOK} in
357 kdedepend+=" ${kdehandbookdepend}"
358 [[ ${PN} != kdelibs ]] && kderdepend+=" ${kdehandbookrdepend}"
361 if [[ ${PN} == kdesu ]] ; then
366 kdedepend+=" handbook? ( ${kdehandbookdepend} )"
367 [[ ${PN} != kdelibs ]] && kderdepend+=" handbook? ( ${kdehandbookrdepend} )"
371 unset kdehandbookdepend kdehandbookrdepend
373 case ${KDE_SELINUX_MODULE} in
377 kderdepend+=" selinux? ( sec-policy/selinux-${KDE_SELINUX_MODULE} )"
381 # We always need the aqua useflag because otherwise we cannot = refer to it inside
382 # add_kdebase_dep. This was always kind of a bug, but came to light with EAPI=5
383 # (where referring to a use flag not in IUSE masks the ebuild).
384 # The only alternative would be to prohibit using add_kdebase_dep if KDE_REQUIRED=never
387 case ${KDE_REQUIRED} in
389 [[ -n ${kdecommondepend} ]] && COMMONDEPEND+=" ${kdecommondepend}"
390 [[ -n ${kdedepend} ]] && DEPEND+=" ${kdedepend}"
391 [[ -n ${kderdepend} ]] && RDEPEND+=" ${kderdepend}"
395 [[ -n ${kdecommondepend} ]] && COMMONDEPEND+=" kde? ( ${kdecommondepend} )"
396 [[ -n ${kdedepend} ]] && DEPEND+=" kde? ( ${kdedepend} )"
397 [[ -n ${kderdepend} ]] && RDEPEND+=" kde? ( ${kderdepend} )"
402 unset kdecommondepend kdedepend kderdepend
404 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: COMMONDEPEND is ${COMMONDEPEND}"
405 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: DEPEND (only) is ${DEPEND}"
406 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: RDEPEND (only) is ${RDEPEND}"
408 # Accumulate dependencies set by this eclass
409 DEPEND+=" ${COMMONDEPEND}"
410 RDEPEND+=" ${COMMONDEPEND}"
413 # Fetch section - If the ebuild's category is not 'kde-base' and if it is not a
414 # kdevelop ebuild, the URI should be set in the ebuild itself
415 _calculate_src_uri() {
416 debug-print-function ${FUNCNAME} "$@"
418 local _kmname _kmname_pv
420 # we calculate URI only for known KDEBASE modules
421 [[ -n ${KDEBASE} ]] || return
423 # calculate tarball module name
424 if [[ -n ${KMNAME} ]]; then
429 _kmname_pv="${_kmname}-${PV}"
434 # KDEPIM 4.4, special case
435 # TODO: Remove this part when KDEPIM 4.4 gets out of the tree
436 SRC_URI="mirror://kde/stable/kdepim-${PV}/src/${_kmname_pv}.tar.bz2" ;;
438 # KDEPIM 4.4 no-akonadi branch, special case
439 # TODO: Remove this part when KDEPIM 4.4 gets out of the tree
440 SRC_URI="https://dev.gentoo.org/~dilfridge/distfiles/${_kmname_pv}.tar.xz" ;;
441 4.?.[6-9]? | 4.??.[6-9]?)
442 # Unstable KDE SC releases
443 SRC_URI="mirror://kde/unstable/${PV}/src/${_kmname_pv}.tar.xz" ;;
445 # Part of 15.04.1 actually, sigh. Not stable for next release!
446 SRC_URI="mirror://kde/Attic/applications/15.04.1/src/${_kmname_pv}.tar.xz" ;;
448 # Part of 15.08.0 actually, sigh. Not stable for next release!
449 SRC_URI="mirror://kde/stable/applications/15.08.0/src/${_kmname_pv}.tar.xz" ;;
452 SRC_URI="mirror://kde/stable/${PV}/src/${_kmname_pv}.tar.xz" ;;
454 # Part of 15.04.1 actually, sigh. Not stable for next release!
455 SRC_URI="mirror://kde/Attic/applications/15.04.1/src/${_kmname_pv}.tar.xz" ;;
457 # Part of 15.04.3 actually, sigh. Not stable for next release!
458 SRC_URI="mirror://kde/Attic/applications/15.04.3/src/${_kmname_pv}.tar.xz" ;;
460 # Part of 15.08.3 actually, sigh. Not stable for next release!
461 SRC_URI="mirror://kde/stable/applications/15.08.3/src/${_kmname_pv}.tar.xz" ;;
463 # Part of 15.12.0 actually, sigh. Not stable for next release!
464 SRC_URI="mirror://kde/stable/applications/15.12.0/src/${_kmname_pv}.tar.xz" ;;
466 # Part of 15.12.1 actually, sigh. Not stable for next release!
467 SRC_URI="mirror://kde/stable/applications/15.12.1/src/${_kmname_pv}.tar.xz" ;;
468 ??.?.[6-9]? | ??.??.[4-9]?)
469 # Unstable KDE Applications releases
470 SRC_URI="mirror://kde/unstable/applications/${PV}/src/${_kmname}-${PV}.tar.xz" ;;
472 # Stable KDE Applications releases
473 SRC_URI="mirror://kde/stable/applications/${PV}/src/${_kmname}-${PV}.tar.xz"
477 kdevelop|kdevelop-php*|kdevplatform)
478 case ${KDEVELOP_VERSION} in
479 4.[123].[6-9]*) SRC_URI="mirror://kde/unstable/kdevelop/${KDEVELOP_VERSION}/src/${P}.tar.xz" ;;
480 *) SRC_URI="mirror://kde/stable/kdevelop/${KDEVELOP_VERSION}/src/${P}.tar.xz" ;;
486 _calculate_live_repo() {
487 debug-print-function ${FUNCNAME} "$@"
492 # Determine branch URL based on live type
497 branch_prefix="trunk/KDE"
501 branch_prefix="branches/KDE/$(get_kde_version)"
503 if [[ ${PV} == ??.??.49.9999 && ${CATEGORY} = kde-apps ]]; then
504 branch_prefix="branches/Applications/$(get_kde_version)"
507 # @ECLASS-VARIABLE: ESVN_PROJECT_SUFFIX
509 # Suffix appended to ESVN_PROJECT depending on fetched branch.
510 # Defaults is empty (for -9999 = trunk), and "-${PV}" otherwise.
511 ESVN_PROJECT_SUFFIX="-${PV}"
514 # @ECLASS-VARIABLE: ESVN_MIRROR
516 # This variable allows easy overriding of default kde mirror service
517 # (anonsvn) with anything else you might want to use.
518 ESVN_MIRROR=${ESVN_MIRROR:=svn://anonsvn.kde.org/home/kde}
519 # Split ebuild, or extragear stuff
520 if [[ -n ${KMNAME} ]]; then
521 ESVN_PROJECT="${KMNAME}${ESVN_PROJECT_SUFFIX}"
522 if [[ -z ${KMNOMODULE} ]] && [[ -z ${KMMODULE} ]]; then
525 # Split kde-base/ ebuilds: (they reside in trunk/KDE)
528 ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/kdebase/${KMNAME#kdebase-}"
531 ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/kdelibs/${KMNAME#kdelibs-}"
534 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
537 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
538 ESVN_PROJECT="${PN}${ESVN_PROJECT_SUFFIX}"
541 ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/${KMNAME}"
543 extragear*|playground*)
544 # Unpack them in toplevel dir, so that they won't conflict with kde4-meta
545 # build packages from same svn location.
546 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
547 ESVN_PROJECT="${PN}${ESVN_PROJECT_SUFFIX}"
550 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
554 # kdelibs, kdepimlibs
555 ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/${PN}"
556 ESVN_PROJECT="${PN}${ESVN_PROJECT_SUFFIX}"
558 # @ECLASS-VARIABLE: ESVN_UP_FREQ
560 # This variable is used for specifying the timeout between svn synces
561 # for kde-base modules. Does not affect misc apps.
562 # Default value is 1 hour.
563 [[ ${KDEBASE} = kde-base ]] && ESVN_UP_FREQ=${ESVN_UP_FREQ:-1}
567 # @ECLASS-VARIABLE: EGIT_MIRROR
569 # This variable allows easy overriding of default kde mirror service
570 # (anongit) with anything else you might want to use.
571 EGIT_MIRROR=${EGIT_MIRROR:=git://anongit.kde.org}
573 # @ECLASS-VARIABLE: EGIT_REPONAME
575 # This variable allows overriding of default repository
576 # name. Specify only if this differ from PN and KMNAME.
577 if [[ -n ${EGIT_REPONAME} ]]; then
578 # the repository and kmname different
579 _kmname=${EGIT_REPONAME}
580 elif [[ -n ${KMNAME} ]]; then
587 [[ ${PV} != 4.9999* && ${PV} != 9999 && ${KDEBASE} == kde-base ]] && \
588 EGIT_BRANCH="KDE/$(get_kde_version)"
590 # Applications branching
591 [[ ${PV} == ??.??.49.9999 && ${KDEBASE} == kde-base ]] && \
592 EGIT_BRANCH="Applications/$(get_kde_version)"
595 EGIT_REPO_URI+=( "${EGIT_MIRROR}/${_kmname}" )
597 debug-print "${FUNCNAME}: Repository: ${EGIT_REPO_URI}"
598 debug-print "${FUNCNAME}: Branch: ${EGIT_BRANCH}"
603 case ${KDE_BUILD_TYPE} in
604 live) _calculate_live_repo ;;
605 *) _calculate_src_uri ;;
608 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: SRC_URI is ${SRC_URI}"
610 # @ECLASS-VARIABLE: PREFIX
612 # Set the installation PREFIX for non kde-base applications. It defaults to /usr.
613 # kde-base packages go into KDE4 installation directory (/usr).
614 # No matter the PREFIX, package will be built against KDE installed in /usr.
616 # @FUNCTION: kde4-base_pkg_setup
618 # Do some basic settings
619 kde4-base_pkg_setup() {
620 debug-print-function ${FUNCNAME} "$@"
622 if has handbook ${IUSE} || has "+handbook" ${IUSE} && [ "${KDE_HANDBOOK}" != optional ] ; then
623 eqawarn "Handbook support is enabled via KDE_HANDBOOK=optional in the ebuild."
624 eqawarn "Please do not just set IUSE=handbook, as this leads to dependency errors."
627 # Don't set KDEHOME during compilation, it will cause access violations
630 # Check if gcc compiler is fresh enough.
631 # In theory should be in pkg_pretend but we check it only for kdelibs there
632 # and for others we do just quick scan in pkg_setup because pkg_pretend
633 # executions consume quite some time (ie. when merging 300 packages at once will cause 300 checks)
634 if [[ ${MERGE_TYPE} != binary ]]; then
635 [[ $(gcc-major-version) -lt 4 ]] || \
636 ( [[ $(gcc-major-version) -eq 4 && $(gcc-minor-version) -le 6 ]] ) \
637 && die "Sorry, but gcc-4.6 and earlier wont work for some KDE packages."
642 EKDEDIR=${EPREFIX}/usr
644 # Point to correct QT plugins path
645 QT_PLUGIN_PATH="${EPREFIX}/usr/$(get_libdir)/kde4/plugins/"
647 # Fix XDG collision with sandbox
648 export XDG_CONFIG_HOME="${T}"
651 # @FUNCTION: kde4-base_src_unpack
653 # This function unpacks the source tarballs for KDE4 applications.
654 kde4-base_src_unpack() {
655 debug-print-function ${FUNCNAME} "$@"
657 if [[ ${KDE_BUILD_TYPE} = live ]]; then
660 subversion_src_unpack
671 # @FUNCTION: kde4-base_src_prepare
673 # General pre-configure and pre-compile function for KDE4 applications.
674 # It also handles translations if KDE_LINGUAS is defined. See KDE_LINGUAS and
675 # enable_selected_linguas() and enable_selected_doc_linguas()
676 # in kde4-functions.eclass(5) for further details.
677 kde4-base_src_prepare() {
678 debug-print-function ${FUNCNAME} "$@"
680 # enable handbook and linguas only when not using live ebuild
682 # Only enable selected languages, used for KDE extragear apps.
683 if [[ -n ${KDE_LINGUAS} ]]; then
684 enable_selected_linguas
687 # Enable/disable handbooks for kde4-base packages
688 # kde4-l10n inherits kde4-base but is metapackage, so no check for doc
689 # kdelibs inherits kde4-base but handle installing the handbook itself
690 if ! has kde4-meta ${INHERITED} && in_iuse handbook; then
691 if [[ ${KDEBASE} == kde-base ]]; then
692 if [[ ${PN} != kde4-l10n && ${PN} != kdepim-l10n && ${PN} != kdelibs ]] && use !handbook; then
693 # documentation in kde4-functions
694 : ${KDE_DOC_DIRS:=doc}
696 for dir in ${KDE_DOC_DIRS}; do
697 sed -e "\!^[[:space:]]*add_subdirectory[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" \
698 -e "\!^[[:space:]]*ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" \
699 -e "\!^[[:space:]]*macro_optional_add_subdirectory[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" \
700 -e "\!^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" \
701 -i CMakeLists.txt || die "failed to comment out handbook"
705 enable_selected_doc_linguas
710 if [[ ${KDE_BUILD_TYPE} = live ]]; then
712 svn) subversion_src_prepare ;;
716 # Apply patches, cmake-utils does the job already
717 cmake-utils_src_prepare
719 # Save library dependencies
720 if [[ -n ${KMSAVELIBS} ]] ; then
721 save_library_dependencies
724 # Inject library dependencies
725 if [[ -n ${KMLOADLIBS} ]] ; then
726 load_library_dependencies
729 # Hack for manuals relying on outdated DTD, only outside kde-base/...
730 if [[ -z ${KDEBASE} ]]; then
731 find "${S}" -name "*.docbook" \
733 -e 's:-//KDE//DTD DocBook XML V4\.1(\..)?-Based Variant V1\.[01]//EN:-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN:g' {} + \
734 || die 'failed to fix DocBook variant version'
738 # @FUNCTION: kde4-base_src_configure
740 # Function for configuring the build of KDE4 applications.
741 kde4-base_src_configure() {
742 debug-print-function ${FUNCNAME} "$@"
744 # Build tests in src_test only, where we override this value
745 local cmakeargs=(-DKDE4_BUILD_TESTS=OFF)
747 if use_if_iuse debug; then
748 # Set "real" debug mode
749 CMAKE_KDE_BUILD_TYPE="Debugfull"
751 # Handle common release builds
752 append-cppflags -DQT_NO_DEBUG
755 # Set distribution name
756 [[ ${PN} = kdelibs ]] && cmakeargs+=(-DKDE_DISTRIBUTION_TEXT=Gentoo)
758 # Here we set the install prefix
759 tc-is-cross-compiler || cmakeargs+=(-DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX}")
764 # Shadow existing installations
767 #qmake -query QT_INSTALL_LIBS unavailable when cross-compiling
768 tc-is-cross-compiler && cmakeargs+=(-DQT_LIBRARY_DIR=${ROOT}/usr/$(get_libdir)/qt4)
769 #kde-config -path data unavailable when cross-compiling
770 tc-is-cross-compiler && cmakeargs+=(-DKDE4_DATA_DIR=${ROOT}/usr/share/apps/)
772 # sysconf needs to be /etc, not /usr/etc
773 cmakeargs+=(-DSYSCONF_INSTALL_DIR="${EPREFIX}"/etc)
775 if [[ $(declare -p mycmakeargs 2>&-) != "declare -a mycmakeargs="* ]]; then
776 if [[ ${mycmakeargs} ]]; then
777 eqawarn "mycmakeargs should always be declared as an array, not a string"
779 mycmakeargs=(${mycmakeargs})
782 mycmakeargs=("${cmakeargs[@]}" "${mycmakeargs[@]}")
784 cmake-utils_src_configure
787 # @FUNCTION: kde4-base_src_compile
789 # General function for compiling KDE4 applications.
790 kde4-base_src_compile() {
791 debug-print-function ${FUNCNAME} "$@"
793 cmake-utils_src_compile "$@"
796 # @FUNCTION: kde4-base_src_test
798 # Function for testing KDE4 applications.
799 kde4-base_src_test() {
800 debug-print-function ${FUNCNAME} "$@"
805 if [[ -n "${VIRTUALDBUS_TEST}" ]]; then
806 export $(dbus-launch)
807 kded4 2>&1 > /dev/null &
814 # When run as normal user during ebuild development with the ebuild command, the
815 # kde tests tend to access the session DBUS. This however is not possible in a real
816 # emerge or on the tinderbox.
817 # > make sure it does not happen, so bad tests can be recognized and disabled
818 unset DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID
820 # Override this value, set in kde4-base_src_configure()
821 mycmakeargs+=(-DKDE4_BUILD_TESTS=ON)
822 cmake-utils_src_configure
823 kde4-base_src_compile
825 if [[ ${VIRTUALX_REQUIRED} == always || ${VIRTUALX_REQUIRED} == test ]]; then
826 # check for sanity if anyone already redefined VIRTUALX_COMMAND from the default
827 if [[ ${VIRTUALX_COMMAND} != emake ]]; then
828 # surprise- we are already INSIDE virtualmake!!!
829 debug-print "QA Notice: This version of kde4-base.eclass includes the virtualx functionality."
830 debug-print " You may NOT set VIRTUALX_COMMAND or call virtualmake from the ebuild."
831 debug-print " Setting VIRTUALX_REQUIRED is completely sufficient. See the"
832 debug-print " kde4-base.eclass docs for details... Applying workaround."
835 VIRTUALX_COMMAND="_test_runner" virtualmake
841 if [ -n "${kded4_pid}" ] ; then
845 if [ -n "${DBUS_SESSION_BUS_PID}" ] ; then
846 kill ${DBUS_SESSION_BUS_PID}
850 # @FUNCTION: kde4-base_src_install
852 # Function for installing KDE4 applications.
853 kde4-base_src_install() {
854 debug-print-function ${FUNCNAME} "$@"
856 if [[ -n ${KMSAVELIBS} ]] ; then
857 install_library_dependencies
860 # Install common documentation of KDE4 applications
862 if ! has kde4-meta ${INHERITED}; then
863 for doc in "${S}"/{AUTHORS,CHANGELOG,ChangeLog*,README*,NEWS,TODO,HACKING}; do
864 [[ -f ${doc} && -s ${doc} ]] && dodoc "${doc}"
866 for doc in "${S}"/*/{AUTHORS,CHANGELOG,ChangeLog*,README*,NEWS,TODO,HACKING}; do
867 [[ -f ${doc} && -s ${doc} ]] && newdoc "${doc}" "$(basename $(dirname ${doc})).$(basename ${doc})"
871 cmake-utils_src_install
873 # We don't want ${PREFIX}/share/doc/HTML to be compressed,
874 # because then khelpcenter can't find the docs
875 [[ -d ${ED}/${PREFIX}/share/doc/HTML ]] &&
876 docompress -x ${PREFIX}/share/doc/HTML
879 # @FUNCTION: kde4-base_pkg_preinst
881 # Function storing icon caches
882 kde4-base_pkg_preinst() {
883 debug-print-function ${FUNCNAME} "$@"
886 if [[ ${KDE_BUILD_TYPE} == live && ${KDE_SCM} == svn ]]; then
887 subversion_pkg_preinst
891 # @FUNCTION: kde4-base_pkg_postinst
893 # Function to rebuild the KDE System Configuration Cache after an application has been installed.
894 kde4-base_pkg_postinst() {
895 debug-print-function ${FUNCNAME} "$@"
897 gnome2_icon_cache_update
898 fdo-mime_desktop_database_update
899 fdo-mime_mime_database_update
902 if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
903 if [[ ${KDE_BUILD_TYPE} = live ]]; then
905 einfo "WARNING! This is an experimental live ebuild of ${CATEGORY}/${PN}"
906 einfo "Use it at your own risk."
907 einfo "Do _NOT_ file bugs at bugs.gentoo.org because of this ebuild!"
910 # for all 3rd party soft tell user that he SHOULD install kdebase-startkde or kdebase-runtime-meta
911 if [[ ${KDEBASE} != kde-base ]] && \
912 ! has_version 'kde-apps/kdebase-runtime-meta'; then
913 if [[ ${KDE_REQUIRED} == always ]] || ( [[ ${KDE_REQUIRED} == optional ]] && use kde ); then
915 ewarn "WARNING! Your system configuration does not contain \"kde-apps/kdebase-runtime-meta\"."
916 ewarn "With this setting you are unsupported by KDE team."
917 ewarn "All missing features you report for misc packages will be probably ignored or closed as INVALID."
923 # @FUNCTION: kde4-base_pkg_postrm
925 # Function to rebuild the KDE System Configuration Cache after an application has been removed.
926 kde4-base_pkg_postrm() {
927 debug-print-function ${FUNCNAME} "$@"
929 gnome2_icon_cache_update
930 fdo-mime_desktop_database_update
931 fdo-mime_mime_database_update