kde-plasma/breeze-gtk: x86 stable wrt bug #613144
[gentoo.git] / eclass / kde4-base.eclass
1 # Copyright 1999-2016 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3
4 # @ECLASS: kde4-base.eclass
5 # @MAINTAINER:
6 # kde@gentoo.org
7 # @BLURB: This eclass provides functions for kde 4.X ebuilds
8 # @DESCRIPTION:
9 # The kde4-base.eclass provides support for building KDE4 based ebuilds
10 # and KDE4 applications.
11 #
12 # NOTE: KDE 4 ebuilds currently support EAPI 5. This will be
13 # reviewed over time as new EAPI versions are approved.
14
15 if [[ -z ${_KDE4_BASE_ECLASS} ]]; then
16 _KDE4_BASE_ECLASS=1
17
18 # @ECLASS-VARIABLE: KDE_SELINUX_MODULE
19 # @DESCRIPTION:
20 # If set to "none", do nothing.
21 # For any other value, add selinux to IUSE, and depending on that useflag
22 # add a dependency on sec-policy/selinux-${KDE_SELINUX_MODULE} to (R)DEPEND
23 : ${KDE_SELINUX_MODULE:=none}
24
25 # @ECLASS-VARIABLE: VIRTUALDBUS_TEST
26 # @DESCRIPTION:
27 # If defined, launch and use a private dbus session during src_test.
28
29 # @ECLASS-VARIABLE: VIRTUALX_REQUIRED
30 # @DESCRIPTION:
31 # For proper description see virtualx.eclass manpage.
32 # Here we redefine default value to be manual, if your package needs virtualx
33 # for tests you should proceed with setting VIRTUALX_REQUIRED=test.
34 : ${VIRTUALX_REQUIRED:=manual}
35
36 inherit kde4-functions toolchain-funcs fdo-mime flag-o-matic gnome2-utils virtualx versionator eutils multilib
37
38 if [[ ${KDE_BUILD_TYPE} = live ]]; then
39         case ${KDE_SCM} in
40                 svn) inherit subversion ;;
41                 git) inherit git-r3 ;;
42         esac
43 fi
44
45 # @ECLASS-VARIABLE: CMAKE_REQUIRED
46 # @DESCRIPTION:
47 # Specify if cmake buildsystem is being used. Possible values are 'always' and 'never'.
48 # Please note that if it's set to 'never' you need to explicitly override following phases:
49 # src_configure, src_compile, src_test and src_install.
50 # Defaults to 'always'.
51 : ${CMAKE_REQUIRED:=always}
52 if [[ ${CMAKE_REQUIRED} = always ]]; then
53         buildsystem_eclass="cmake-utils"
54         export_fns="src_configure src_compile src_test src_install"
55 fi
56
57 # @ECLASS-VARIABLE: KDE_MINIMAL
58 # @DESCRIPTION:
59 # This variable is used when KDE_REQUIRED is set, to specify required KDE minimal
60 # version for apps to work. Currently defaults to 4.4
61 # One may override this variable to raise version requirements.
62 # Note that it is fixed to ${PV} for kde-base packages.
63 KDE_MINIMAL="${KDE_MINIMAL:-4.4}"
64
65 # Set slot for KDEBASE known packages
66 case ${KDEBASE} in
67         kde-base)
68                 SLOT=4/$(get_version_component_range 1-2)
69                 KDE_MINIMAL="${PV}"
70                 ;;
71         kdevelop)
72                 if [[ ${KDE_BUILD_TYPE} = live ]]; then
73                         # @ECLASS-VARIABLE: KDEVELOP_VERSION
74                         # @DESCRIPTION:
75                         # Specifies KDevelop version. Default is 4.0.0 for tagged packages and 9999 for live packages.
76                         # Applies to KDEBASE=kdevelop only.
77                         KDEVELOP_VERSION="${KDEVELOP_VERSION:-4.9999}"
78                         # @ECLASS-VARIABLE: KDEVPLATFORM_VERSION
79                         # @DESCRIPTION:
80                         # Specifies KDevplatform version. Default is 1.0.0 for tagged packages and 9999 for live packages.
81                         # Applies to KDEBASE=kdevelop only.
82                         KDEVPLATFORM_VERSION="${KDEVPLATFORM_VERSION:-4.9999}"
83                 else
84                         case ${PN} in
85                                 kdevelop)
86                                         KDEVELOP_VERSION=${PV}
87                                         KDEVPLATFORM_VERSION="$(($(get_major_version)-3)).$(get_after_major_version)"
88                                         ;;
89                                 kdevplatform|kdevelop-php*|kdevelop-python)
90                                         KDEVELOP_VERSION="$(($(get_major_version)+3)).$(get_after_major_version)"
91                                         KDEVPLATFORM_VERSION=${PV}
92                                         ;;
93                                 *)
94                                         KDEVELOP_VERSION="${KDEVELOP_VERSION:-4.0.0}"
95                                         KDEVPLATFORM_VERSION="${KDEVPLATFORM_VERSION:-1.0.0}"
96                         esac
97                 fi
98                 SLOT="4"
99                 ;;
100 esac
101
102 inherit ${buildsystem_eclass}
103
104 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare ${export_fns} pkg_preinst pkg_postinst pkg_postrm
105
106 unset buildsystem_eclass
107 unset export_fns
108
109 # @ECLASS-VARIABLE: DECLARATIVE_REQUIRED
110 # @DESCRIPTION:
111 # Is qtdeclarative required? Possible values are 'always', 'optional' and 'never'.
112 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
113 DECLARATIVE_REQUIRED="${DECLARATIVE_REQUIRED:-never}"
114
115 # @ECLASS-VARIABLE: QTHELP_REQUIRED
116 # @DESCRIPTION:
117 # Is qthelp required? Possible values are 'always', 'optional' and 'never'.
118 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
119 QTHELP_REQUIRED="${QTHELP_REQUIRED:-never}"
120
121 # @ECLASS-VARIABLE: OPENGL_REQUIRED
122 # @DESCRIPTION:
123 # Is qtopengl required? Possible values are 'always', 'optional' and 'never'.
124 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
125 OPENGL_REQUIRED="${OPENGL_REQUIRED:-never}"
126
127 # @ECLASS-VARIABLE: MULTIMEDIA_REQUIRED
128 # @DESCRIPTION:
129 # Is qtmultimedia required? Possible values are 'always', 'optional' and 'never'.
130 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
131 MULTIMEDIA_REQUIRED="${MULTIMEDIA_REQUIRED:-never}"
132
133 # @ECLASS-VARIABLE: WEBKIT_REQUIRED
134 # @DESCRIPTION:
135 # Is qtwebkit required? Possible values are 'always', 'optional' and 'never'.
136 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
137 WEBKIT_REQUIRED="${WEBKIT_REQUIRED:-never}"
138
139 # @ECLASS-VARIABLE: CPPUNIT_REQUIRED
140 # @DESCRIPTION:
141 # Is cppunit required for tests? Possible values are 'always', 'optional' and 'never'.
142 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
143 CPPUNIT_REQUIRED="${CPPUNIT_REQUIRED:-never}"
144
145 # @ECLASS-VARIABLE: KDE_REQUIRED
146 # @DESCRIPTION:
147 # Is kde required? Possible values are 'always', 'optional' and 'never'.
148 # This variable must be set before inheriting any eclasses. Defaults to 'always'
149 # If set to 'always' or 'optional', KDE_MINIMAL may be overriden as well.
150 # Note that for kde-base packages this variable is fixed to 'always'.
151 KDE_REQUIRED="${KDE_REQUIRED:-always}"
152
153 # @ECLASS-VARIABLE: KDE_HANDBOOK
154 # @DESCRIPTION:
155 # Set to enable handbook in application. Possible values are 'always', 'optional'
156 # (handbook USE flag) and 'never'.
157 # This variable must be set before inheriting any eclasses. Defaults to 'never'.
158 # It adds default handbook dirs for kde-base packages to KMEXTRA and in any case it
159 # ensures buildtime and runtime dependencies.
160 KDE_HANDBOOK="${KDE_HANDBOOK:-never}"
161
162 # @ECLASS-VARIABLE: KDE_LINGUAS_LIVE_OVERRIDE
163 # @DESCRIPTION:
164 # Set this varible if you want your live package to manage its
165 # translations. (Mostly all kde ebuilds does not ship documentation
166 # and translations in live ebuilds)
167 if [[ ${KDE_BUILD_TYPE} == live && -z ${KDE_LINGUAS_LIVE_OVERRIDE} ]]; then
168         # Kdebase actually provides the handbooks even for live stuff
169         [[ ${KDEBASE} == kde-base ]] || KDE_HANDBOOK=never
170         KDE_LINGUAS=""
171 fi
172
173 # Setup packages inheriting this eclass
174 case ${KDEBASE} in
175         kde-base)
176                 HOMEPAGE="https://www.kde.org/"
177                 LICENSE="GPL-2"
178                 if [[ ${KDE_BUILD_TYPE} = live && -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
179                         # Disable tests for live ebuilds by default
180                         RESTRICT+=" test"
181                 fi
182
183                 # This code is to prevent portage from searching GENTOO_MIRRORS for
184                 # packages that will never be mirrored. (As they only will ever be in
185                 # the overlay).
186                 case ${PV} in
187                         *9999* | 4.?.[6-9]? | 4.??.[6-9]? | ??.?.[6-9]? | ??.??.[6-9]?)
188                                 RESTRICT+=" mirror"
189                                 ;;
190                 esac
191                 ;;
192         kdevelop)
193                 HOMEPAGE="https://www.kdevelop.org/"
194                 LICENSE="GPL-2"
195                 ;;
196 esac
197
198 # @ECLASS-VARIABLE: QT_MINIMAL
199 # @DESCRIPTION:
200 # Determine version of qt we enforce as minimal for the package.
201 QT_MINIMAL="${QT_MINIMAL:-4.8.5}"
202
203 # Declarative dependencies
204 qtdeclarativedepend="
205         >=dev-qt/qtdeclarative-${QT_MINIMAL}:4
206 "
207 case ${DECLARATIVE_REQUIRED} in
208         always)
209                 COMMONDEPEND+=" ${qtdeclarativedepend}"
210                 ;;
211         optional)
212                 IUSE+=" declarative"
213                 COMMONDEPEND+=" declarative? ( ${qtdeclarativedepend} )"
214                 ;;
215         *) ;;
216 esac
217 unset qtdeclarativedepend
218
219 # QtHelp dependencies
220 qthelpdepend="
221         >=dev-qt/qthelp-${QT_MINIMAL}:4
222 "
223 case ${QTHELP_REQUIRED} in
224         always)
225                 COMMONDEPEND+=" ${qthelpdepend}"
226                 ;;
227         optional)
228                 IUSE+=" qthelp"
229                 COMMONDEPEND+=" qthelp? ( ${qthelpdepend} )"
230                 ;;
231 esac
232 unset qthelpdepend
233
234 # OpenGL dependencies
235 qtopengldepend="
236         >=dev-qt/qtopengl-${QT_MINIMAL}:4
237 "
238 case ${OPENGL_REQUIRED} in
239         always)
240                 COMMONDEPEND+=" ${qtopengldepend}"
241                 ;;
242         optional)
243                 IUSE+=" opengl"
244                 COMMONDEPEND+=" opengl? ( ${qtopengldepend} )"
245                 ;;
246         *) ;;
247 esac
248 unset qtopengldepend
249
250 # MultiMedia dependencies
251 qtmultimediadepend="
252         >=dev-qt/qtmultimedia-${QT_MINIMAL}:4
253 "
254 case ${MULTIMEDIA_REQUIRED} in
255         always)
256                 COMMONDEPEND+=" ${qtmultimediadepend}"
257                 ;;
258         optional)
259                 IUSE+=" multimedia"
260                 COMMONDEPEND+=" multimedia? ( ${qtmultimediadepend} )"
261                 ;;
262         *) ;;
263 esac
264 unset qtmultimediadepend
265
266 # WebKit dependencies
267 qtwebkitdepend="
268         >=dev-qt/qtwebkit-${QT_MINIMAL}:4
269 "
270 case ${WEBKIT_REQUIRED} in
271         always)
272                 COMMONDEPEND+=" ${qtwebkitdepend}"
273                 ;;
274         optional)
275                 IUSE+=" +webkit"
276                 COMMONDEPEND+=" webkit? ( ${qtwebkitdepend} )"
277                 ;;
278         *) ;;
279 esac
280 unset qtwebkitdepend
281
282 # CppUnit dependencies
283 cppuintdepend="
284         dev-util/cppunit
285 "
286 case ${CPPUNIT_REQUIRED} in
287         always)
288                 DEPEND+=" ${cppuintdepend}"
289                 ;;
290         optional)
291                 IUSE+=" test"
292                 DEPEND+=" test? ( ${cppuintdepend} )"
293                 ;;
294         *) ;;
295 esac
296 unset cppuintdepend
297
298 # KDE dependencies
299 # Qt accessibility classes are needed in various places, bug 325461
300 kdecommondepend="
301         dev-lang/perl
302         >=dev-qt/qt3support-${QT_MINIMAL}:4[accessibility]
303         >=dev-qt/qtcore-${QT_MINIMAL}:4[qt3support,ssl]
304         >=dev-qt/qtdbus-${QT_MINIMAL}:4
305         >=dev-qt/designer-${QT_MINIMAL}:4
306         >=dev-qt/qtgui-${QT_MINIMAL}:4[accessibility,dbus(+)]
307         >=dev-qt/qtscript-${QT_MINIMAL}:4
308         >=dev-qt/qtsql-${QT_MINIMAL}:4[qt3support]
309         >=dev-qt/qtsvg-${QT_MINIMAL}:4
310         >=dev-qt/qttest-${QT_MINIMAL}:4
311 "
312
313 if [[ ${PN} != kdelibs ]]; then
314         local _kdelibsuse
315         case ${WEBKIT_REQUIRED} in
316                 always) _kdelibsuse="[webkit]" ;;
317                 optional) _kdelibsuse="[webkit?]" ;;
318                 *) ;;
319         esac
320         kdecommondepend+=" >=kde-frameworks/kdelibs-4.14.22:4${_kdelibsuse}"
321         unset _kdelibsuse
322         if [[ ${KDEBASE} = kdevelop ]]; then
323                 if [[ ${PN} != kdevplatform ]]; then
324                         # @ECLASS-VARIABLE: KDEVPLATFORM_REQUIRED
325                         # @DESCRIPTION:
326                         # Specifies whether kdevplatform is required. Possible values are 'always' (default) and 'never'.
327                         # Applies to KDEBASE=kdevelop only.
328                         KDEVPLATFORM_REQUIRED="${KDEVPLATFORM_REQUIRED:-always}"
329                         case ${KDEVPLATFORM_REQUIRED} in
330                                 always)
331                                         kdecommondepend+="
332                                                 >=dev-util/kdevplatform-${KDEVPLATFORM_VERSION}:4
333                                         "
334                                         ;;
335                                 *) ;;
336                         esac
337                 fi
338         fi
339 fi
340
341 kdedepend="
342         dev-util/automoc
343         virtual/pkgconfig
344         !aqua? (
345                 >=x11-libs/libXtst-1.1.0
346                 x11-proto/xf86vidmodeproto
347         )
348 "
349
350 kderdepend=""
351
352 if [[ ${CATEGORY} == kde-apps ]]; then
353         kderdepend+=" !kde-base/${PN}:4"
354 fi
355
356 # all packages needs oxygen icons for basic iconset
357 if [[ ${PN} != oxygen-icons ]]; then
358         kderdepend+=" kde-frameworks/oxygen-icons"
359 fi
360
361 # add a dependency over kde4-l10n
362 if [[ ${KDEBASE} != "kde-base" && -n ${KDE_LINGUAS} ]]; then
363         for _lingua in $(kde4_lingua_to_l10n ${KDE_LINGUAS}); do
364                 # if our package has linguas, pull in kde4-l10n with selected lingua enabled,
365                 # but only for selected ones.
366                 # this can't be done on one line because if user doesn't use any localisation
367                 # then he is probably not interested in kde4-l10n at all.
368                 kderdepend+="
369                 l10n_${_lingua}? ( $(add_kdeapps_dep kde4-l10n "l10n_${_lingua}(+)") )
370                 "
371         done
372         unset _lingua
373 fi
374
375 kdehandbookdepend="
376         app-text/docbook-xml-dtd:4.2
377         app-text/docbook-xsl-stylesheets
378 "
379 kdehandbookrdepend="
380         kde-frameworks/kdelibs:4[handbook]
381 "
382 case ${KDE_HANDBOOK} in
383         always)
384                 kdedepend+=" ${kdehandbookdepend}"
385                 [[ ${PN} != kdelibs ]] && kderdepend+=" ${kdehandbookrdepend}"
386                 ;;
387         optional)
388                 case ${PN} in
389                         kcontrol | kdesu | knetattach)
390                                 IUSE+=" handbook"
391                                 ;;
392                         *)
393                                 IUSE+=" +handbook"
394                                 ;;
395                 esac
396                 kdedepend+=" handbook? ( ${kdehandbookdepend} )"
397                 [[ ${PN} != kdelibs ]] && kderdepend+=" handbook? ( ${kdehandbookrdepend} )"
398                 ;;
399         *) ;;
400 esac
401 unset kdehandbookdepend kdehandbookrdepend
402
403 case ${KDE_SELINUX_MODULE} in
404         none)   ;;
405         *)
406                 IUSE+=" selinux"
407                 kderdepend+=" selinux? ( sec-policy/selinux-${KDE_SELINUX_MODULE} )"
408                 ;;
409 esac
410
411 # We always need the aqua useflag because otherwise we cannot = refer to it inside
412 # add_kdebase_dep. This was always kind of a bug, but came to light with EAPI=5
413 # (where referring to a use flag not in IUSE masks the ebuild).
414 # The only alternative would be to prohibit using add_kdebase_dep if KDE_REQUIRED=never
415 IUSE+=" aqua"
416
417 case ${KDE_REQUIRED} in
418         always)
419                 [[ -n ${kdecommondepend} ]] && COMMONDEPEND+=" ${kdecommondepend}"
420                 [[ -n ${kdedepend} ]] && DEPEND+=" ${kdedepend}"
421                 [[ -n ${kderdepend} ]] && RDEPEND+=" ${kderdepend}"
422                 ;;
423         optional)
424                 IUSE+=" kde"
425                 [[ -n ${kdecommondepend} ]] && COMMONDEPEND+=" kde? ( ${kdecommondepend} )"
426                 [[ -n ${kdedepend} ]] && DEPEND+=" kde? ( ${kdedepend} )"
427                 [[ -n ${kderdepend} ]] && RDEPEND+=" kde? ( ${kderdepend} )"
428                 ;;
429         *) ;;
430 esac
431
432 unset kdecommondepend kdedepend kderdepend
433
434 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: COMMONDEPEND is ${COMMONDEPEND}"
435 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: DEPEND (only) is ${DEPEND}"
436 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: RDEPEND (only) is ${RDEPEND}"
437
438 # Accumulate dependencies set by this eclass
439 DEPEND+=" ${COMMONDEPEND}"
440 RDEPEND+=" ${COMMONDEPEND}"
441 unset COMMONDEPEND
442
443 # Fetch section - If the ebuild's category is not 'kde-base' and if it is not a
444 # kdevelop ebuild, the URI should be set in the ebuild itself
445 _calculate_src_uri() {
446         debug-print-function ${FUNCNAME} "$@"
447
448         local _kmname _kmname_pv
449
450         # we calculate URI only for known KDEBASE modules
451         [[ -n ${KDEBASE} ]] || return
452
453         # calculate tarball module name
454         if [[ -n ${KMNAME} ]]; then
455                 _kmname="${KMNAME}"
456         else
457                 _kmname=${PN}
458         fi
459         _kmname_pv="${_kmname}-${PV}"
460         case ${KDEBASE} in
461                 kde-base)
462                         case ${PV} in
463                                 4.4.20*)
464                                         # KDEPIM 4.4 no-akonadi branch, special case
465                                         # TODO: Remove this part when KDEPIM 4.4 gets out of the tree
466                                         SRC_URI="https://dev.gentoo.org/~dilfridge/distfiles/${_kmname_pv}.tar.xz" ;;
467                                 4.?.[6-9]? | 4.??.[6-9]?)
468                                         # Unstable KDE SC releases
469                                         SRC_URI="mirror://kde/unstable/${PV}/src/${_kmname_pv}.tar.xz" ;;
470                                 4.11.22)
471                                         # Part of 15.08.0 actually, sigh. Not stable for next release!
472                                         SRC_URI="mirror://kde/Attic/applications/15.08.0/src/${_kmname_pv}.tar.xz" ;;
473                                 4.14.3)
474                                         # Last SC release
475                                         SRC_URI="mirror://kde/stable/${PV}/src/${_kmname_pv}.tar.xz" ;;
476                                 4.14.10)
477                                         # Part of 15.04.3 actually, sigh. Used by last version of KDE PIM 4.
478                                         SRC_URI="mirror://kde/Attic/applications/15.04.3/src/${_kmname_pv}.tar.xz" ;;
479                                 ??.?.[6-9]? | ??.??.[4-9]?)
480                                         # Unstable KDE Applications releases
481                                         SRC_URI="mirror://kde/unstable/applications/${PV}/src/${_kmname}-${PV}.tar.xz" ;;
482                                 *)
483                                         # Stable KDE Applications releases
484                                         SRC_URI="mirror://kde/stable/applications/${PV}/src/${_kmname}-${PV}.tar.xz"
485                                 ;;
486                         esac
487                         ;;
488                 kdevelop|kdevelop-php*|kdevplatform)
489                         case ${KDEVELOP_VERSION} in
490                                 4.[123].[6-9]*) SRC_URI="mirror://kde/unstable/kdevelop/${KDEVELOP_VERSION}/src/${P}.tar.xz" ;;
491                                 4.7.3) SRC_URI="mirror://kde/stable/kdevelop/${KDEVELOP_VERSION}/src/${P}.tar.bz2" ;;
492                                 4.7.4) SRC_URI="mirror://kde/stable/kdevelop/${KDEVELOP_VERSION}/${P}.tar.xz" ;;
493                                 *) SRC_URI="mirror://kde/stable/kdevelop/${KDEVELOP_VERSION}/src/${P}.tar.xz" ;;
494                         esac
495                         ;;
496         esac
497 }
498
499 _calculate_live_repo() {
500         debug-print-function ${FUNCNAME} "$@"
501
502         SRC_URI=""
503         case ${KDE_SCM} in
504                 svn)
505                         # Determine branch URL based on live type
506                         local branch_prefix
507                         case ${PV} in
508                                 9999*)
509                                         # trunk
510                                         branch_prefix="trunk/KDE"
511                                         ;;
512                                 *)
513                                         # branch
514                                         branch_prefix="branches/KDE/$(get_kde_version)"
515
516                                         if [[ ${PV} == ??.??.49.9999 && ${CATEGORY} = kde-apps ]]; then
517                                                 branch_prefix="branches/Applications/$(get_kde_version)"
518                                         fi
519
520                                         # @ECLASS-VARIABLE: ESVN_PROJECT_SUFFIX
521                                         # @DESCRIPTION
522                                         # Suffix appended to ESVN_PROJECT depending on fetched branch.
523                                         # Defaults is empty (for -9999 = trunk), and "-${PV}" otherwise.
524                                         ESVN_PROJECT_SUFFIX="-${PV}"
525                                         ;;
526                         esac
527                         # @ECLASS-VARIABLE: ESVN_MIRROR
528                         # @DESCRIPTION:
529                         # This variable allows easy overriding of default kde mirror service
530                         # (anonsvn) with anything else you might want to use.
531                         ESVN_MIRROR=${ESVN_MIRROR:=svn://anonsvn.kde.org/home/kde}
532                         # Split ebuild, or extragear stuff
533                         if [[ -n ${KMNAME} ]]; then
534                                 ESVN_PROJECT="${KMNAME}${ESVN_PROJECT_SUFFIX}"
535                                 if [[ -z ${KMNOMODULE} ]] && [[ -z ${KMMODULE} ]]; then
536                                         KMMODULE="${PN}"
537                                 fi
538                                 # Split kde-base/ ebuilds: (they reside in trunk/KDE)
539                                 case ${KMNAME} in
540                                         kdebase-*)
541                                                 ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/kdebase/${KMNAME#kdebase-}"
542                                                 ;;
543                                         kdelibs-*)
544                                                 ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/kdelibs/${KMNAME#kdelibs-}"
545                                                 ;;
546                                         kdereview*)
547                                                 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
548                                                 ;;
549                                         kdesupport)
550                                                 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
551                                                 ESVN_PROJECT="${PN}${ESVN_PROJECT_SUFFIX}"
552                                                 ;;
553                                         kde*)
554                                                 ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/${KMNAME}"
555                                                 ;;
556                                         extragear*|playground*)
557                                                 # Unpack them in toplevel dir, so that they won't conflict with kde4-meta
558                                                 # build packages from same svn location.
559                                                 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
560                                                 ESVN_PROJECT="${PN}${ESVN_PROJECT_SUFFIX}"
561                                                 ;;
562                                         *)
563                                                 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"
564                                                 ;;
565                                 esac
566                         else
567                                 # kdelibs, kdepimlibs
568                                 ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/${PN}"
569                                 ESVN_PROJECT="${PN}${ESVN_PROJECT_SUFFIX}"
570                         fi
571                         # @ECLASS-VARIABLE: ESVN_UP_FREQ
572                         # @DESCRIPTION:
573                         # This variable is used for specifying the timeout between svn synces
574                         # for kde-base modules. Does not affect misc apps.
575                         # Default value is 1 hour.
576                         [[ ${KDEBASE} = kde-base ]] && ESVN_UP_FREQ=${ESVN_UP_FREQ:-1}
577                         ;;
578                 git)
579                         local _kmname
580                         # @ECLASS-VARIABLE: EGIT_MIRROR
581                         # @DESCRIPTION:
582                         # This variable allows easy overriding of default kde mirror service
583                         # (anongit) with anything else you might want to use.
584                         EGIT_MIRROR=${EGIT_MIRROR:=https://anongit.kde.org}
585
586                         # @ECLASS-VARIABLE: EGIT_REPONAME
587                         # @DESCRIPTION:
588                         # This variable allows overriding of default repository
589                         # name. Specify only if this differ from PN and KMNAME.
590                         if [[ -n ${EGIT_REPONAME} ]]; then
591                                 # the repository and kmname different
592                                 _kmname=${EGIT_REPONAME}
593                         elif [[ -n ${KMNAME} ]]; then
594                                 _kmname=${KMNAME}
595                         else
596                                 _kmname=${PN}
597                         fi
598
599                         # default branching
600                         [[ ${PV} != 4.9999* && ${PV} != 9999 && ${KDEBASE} == kde-base ]] && \
601                                 EGIT_BRANCH="KDE/$(get_kde_version)"
602
603                         # Applications branching
604                         [[ ${PV} == ??.??.49.9999 && ${KDEBASE} == kde-base ]] && \
605                                 EGIT_BRANCH="Applications/$(get_kde_version)"
606
607                         # default repo uri
608                         EGIT_REPO_URI+=( "${EGIT_MIRROR}/${_kmname}" )
609
610                         debug-print "${FUNCNAME}: Repository: ${EGIT_REPO_URI}"
611                         debug-print "${FUNCNAME}: Branch: ${EGIT_BRANCH}"
612                         ;;
613         esac
614 }
615
616 case ${KDE_BUILD_TYPE} in
617         live) _calculate_live_repo ;;
618         *) _calculate_src_uri ;;
619 esac
620
621 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: SRC_URI is ${SRC_URI}"
622
623 # @ECLASS-VARIABLE: PREFIX
624 # @DESCRIPTION:
625 # Set the installation PREFIX for non kde-base applications. It defaults to /usr.
626 # kde-base packages go into KDE4 installation directory (/usr).
627 # No matter the PREFIX, package will be built against KDE installed in /usr.
628
629 # @FUNCTION: kde4-base_pkg_setup
630 # @DESCRIPTION:
631 # Do some basic settings
632 kde4-base_pkg_setup() {
633         debug-print-function ${FUNCNAME} "$@"
634
635         if has handbook ${IUSE} || has "+handbook" ${IUSE} && [ "${KDE_HANDBOOK}" != optional ] ; then
636                 eqawarn "Handbook support is enabled via KDE_HANDBOOK=optional in the ebuild."
637                 eqawarn "Please do not just set IUSE=handbook, as this leads to dependency errors."
638         fi
639
640         # Don't set KDEHOME during compilation, it will cause access violations
641         unset KDEHOME
642
643         # Check if gcc compiler is fresh enough.
644         # In theory should be in pkg_pretend but we check it only for kdelibs there
645         # and for others we do just quick scan in pkg_setup because pkg_pretend
646         # executions consume quite some time (ie. when merging 300 packages at once will cause 300 checks)
647         if [[ ${MERGE_TYPE} != binary ]] && tc-is-gcc; then
648                 [[ $(gcc-major-version) -lt 4 ]] || \
649                                 ( [[ $(gcc-major-version) -eq 4 && $(gcc-minor-version) -le 6 ]] ) \
650                         && die "Sorry, but gcc-4.6 and earlier wont work for some KDE packages."
651         fi
652
653         KDEDIR=/usr
654         : ${PREFIX:=/usr}
655         EKDEDIR=${EPREFIX}/usr
656
657         # Point to correct QT plugins path
658         QT_PLUGIN_PATH="${EPREFIX}/usr/$(get_libdir)/kde4/plugins/"
659
660         # Fix XDG collision with sandbox
661         export XDG_CONFIG_HOME="${T}"
662 }
663
664 # @FUNCTION: kde4-base_src_unpack
665 # @DESCRIPTION:
666 # This function unpacks the source tarballs for KDE4 applications.
667 kde4-base_src_unpack() {
668         debug-print-function ${FUNCNAME} "$@"
669
670         if [[ ${KDE_BUILD_TYPE} = live ]]; then
671                 case ${KDE_SCM} in
672                         svn)
673                                 subversion_src_unpack
674                                 ;;
675                         git)
676                                 git-r3_src_unpack
677                                 ;;
678                 esac
679         else
680                 unpack ${A}
681         fi
682 }
683
684 # @FUNCTION: kde4-base_src_prepare
685 # @DESCRIPTION:
686 # General pre-configure and pre-compile function for KDE4 applications.
687 # It also handles translations if KDE_LINGUAS is defined. See KDE_LINGUAS and
688 # enable_selected_linguas() and enable_selected_doc_linguas()
689 # in kde4-functions.eclass(5) for further details.
690 kde4-base_src_prepare() {
691         debug-print-function ${FUNCNAME} "$@"
692
693         # enable handbook and linguas only when not using live ebuild
694
695         # Only enable selected languages, used for KDE extragear apps.
696         if [[ -n ${KDE_LINGUAS} ]]; then
697                 enable_selected_linguas
698         fi
699
700         # Enable/disable handbooks for kde4-base packages
701         # kde4-l10n inherits kde4-base but is metapackage, so no check for doc
702         # kdelibs inherits kde4-base but handle installing the handbook itself
703         if ! has kde4-meta ${INHERITED} && in_iuse handbook; then
704                 if [[ ${KDEBASE} == kde-base ]]; then
705                         if [[ ${PN} != kde4-l10n && ${PN} != kdepim-l10n && ${PN} != kdelibs ]] && use !handbook; then
706                                 # documentation in kde4-functions
707                                 : ${KDE_DOC_DIRS:=doc}
708                                 local dir
709                                 for dir in ${KDE_DOC_DIRS}; do
710                                         sed -e "\!^[[:space:]]*add_subdirectory[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" \
711                                                 -e "\!^[[:space:]]*ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" \
712                                                 -e "\!^[[:space:]]*macro_optional_add_subdirectory[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" \
713                                                 -e "\!^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" \
714                                                 -i CMakeLists.txt || die "failed to comment out handbook"
715                                 done
716                         fi
717                 else
718                         enable_selected_doc_linguas
719                 fi
720         fi
721
722         # SCM bootstrap
723         if [[ ${KDE_BUILD_TYPE} = live ]]; then
724                 case ${KDE_SCM} in
725                         svn) subversion_src_prepare ;;
726                 esac
727         fi
728
729         # Apply patches, cmake-utils does the job already
730         cmake-utils_src_prepare
731
732         # Save library dependencies
733         if [[ -n ${KMSAVELIBS} ]] ; then
734                 save_library_dependencies
735         fi
736
737         # Inject library dependencies
738         if [[ -n ${KMLOADLIBS} ]] ; then
739                 load_library_dependencies
740         fi
741
742         # Hack for manuals relying on outdated DTD, only outside kde-base/...
743         if [[ -z ${KDEBASE} ]]; then
744                 find "${S}" -name "*.docbook" \
745                         -exec sed -i -r \
746                                 -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' {} + \
747                         || die 'failed to fix DocBook variant version'
748         fi
749 }
750
751 # @FUNCTION: kde4-base_src_configure
752 # @DESCRIPTION:
753 # Function for configuring the build of KDE4 applications.
754 kde4-base_src_configure() {
755         debug-print-function ${FUNCNAME} "$@"
756
757         # Build tests in src_test only, where we override this value
758         local cmakeargs=(-DKDE4_BUILD_TESTS=OFF)
759
760         if use_if_iuse debug; then
761                 # Set "real" debug mode
762                 CMAKE_KDE_BUILD_TYPE="Debugfull"
763         else
764                 # Handle common release builds
765                 append-cppflags -DQT_NO_DEBUG
766         fi
767
768         # Set distribution name
769         [[ ${PN} = kdelibs ]] && cmakeargs+=(-DKDE_DISTRIBUTION_TEXT=Gentoo)
770
771         # Here we set the install prefix
772         tc-is-cross-compiler || cmakeargs+=(-DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX}")
773
774         # Use colors
775         QTEST_COLORED=1
776
777         # Shadow existing installations
778         unset KDEDIRS
779
780         #qmake -query QT_INSTALL_LIBS unavailable when cross-compiling
781         tc-is-cross-compiler && cmakeargs+=(-DQT_LIBRARY_DIR=${ROOT}/usr/$(get_libdir)/qt4)
782         #kde-config -path data unavailable when cross-compiling
783         tc-is-cross-compiler && cmakeargs+=(-DKDE4_DATA_DIR=${ROOT}/usr/share/apps/)
784
785         # sysconf needs to be /etc, not /usr/etc
786         cmakeargs+=(-DSYSCONF_INSTALL_DIR="${EPREFIX}"/etc)
787
788         if [[ $(declare -p mycmakeargs 2>&-) != "declare -a mycmakeargs="* ]]; then
789                 if [[ ${mycmakeargs} ]]; then
790                         eqawarn "mycmakeargs should always be declared as an array, not a string"
791                 fi
792                 mycmakeargs=(${mycmakeargs})
793         fi
794
795         mycmakeargs=("${cmakeargs[@]}" "${mycmakeargs[@]}")
796
797         cmake-utils_src_configure
798 }
799
800 # @FUNCTION: kde4-base_src_compile
801 # @DESCRIPTION:
802 # General function for compiling KDE4 applications.
803 kde4-base_src_compile() {
804         debug-print-function ${FUNCNAME} "$@"
805
806         cmake-utils_src_compile "$@"
807 }
808
809 # @FUNCTION: kde4-base_src_test
810 # @DESCRIPTION:
811 # Function for testing KDE4 applications.
812 kde4-base_src_test() {
813         debug-print-function ${FUNCNAME} "$@"
814
815         local kded4_pid
816
817         _test_runner() {
818                 if [[ -n "${VIRTUALDBUS_TEST}" ]]; then
819                         export $(dbus-launch)
820                         kded4 2>&1 > /dev/null &
821                         kded4_pid=$!
822                 fi
823
824                 cmake-utils_src_test
825         }
826
827         # When run as normal user during ebuild development with the ebuild command, the
828         # kde tests tend to access the session DBUS. This however is not possible in a real
829         # emerge or on the tinderbox.
830         # > make sure it does not happen, so bad tests can be recognized and disabled
831         unset DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID
832
833         # Override this value, set in kde4-base_src_configure()
834         mycmakeargs+=(-DKDE4_BUILD_TESTS=ON)
835         cmake-utils_src_configure
836         kde4-base_src_compile
837
838         if [[ ${VIRTUALX_REQUIRED} == always || ${VIRTUALX_REQUIRED} == test ]]; then
839                 # check for sanity if anyone already redefined VIRTUALX_COMMAND from the default
840                 if [[ ${VIRTUALX_COMMAND} != emake ]]; then
841                         # surprise- we are already INSIDE virtualmake!!!
842                         debug-print "QA Notice: This version of kde4-base.eclass includes the virtualx functionality."
843                         debug-print "           You may NOT set VIRTUALX_COMMAND or call virtualmake from the ebuild."
844                         debug-print "           Setting VIRTUALX_REQUIRED is completely sufficient. See the"
845                         debug-print "           kde4-base.eclass docs for details... Applying workaround."
846                         _test_runner
847                 else
848                         virtx _test_runner
849                 fi
850         else
851                 _test_runner
852         fi
853
854         if [ -n "${kded4_pid}" ] ; then
855                 kill ${kded4_pid}
856         fi
857
858         if [ -n "${DBUS_SESSION_BUS_PID}" ] ; then
859                 kill ${DBUS_SESSION_BUS_PID}
860         fi
861 }
862
863 # @FUNCTION: kde4-base_src_install
864 # @DESCRIPTION:
865 # Function for installing KDE4 applications.
866 kde4-base_src_install() {
867         debug-print-function ${FUNCNAME} "$@"
868
869         if [[ -n ${KMSAVELIBS} ]] ; then
870                 install_library_dependencies
871         fi
872
873         # Install common documentation of KDE4 applications
874         local doc
875         if ! has kde4-meta ${INHERITED}; then
876                 for doc in "${S}"/{AUTHORS,CHANGELOG,ChangeLog*,README*,NEWS,TODO,HACKING}; do
877                         [[ -f ${doc} && -s ${doc} ]] && dodoc "${doc}"
878                 done
879                 for doc in "${S}"/*/{AUTHORS,CHANGELOG,ChangeLog*,README*,NEWS,TODO,HACKING}; do
880                         [[ -f ${doc} && -s ${doc} ]] && newdoc "${doc}" "$(basename $(dirname ${doc})).$(basename ${doc})"
881                 done
882         fi
883
884         cmake-utils_src_install
885
886         # We don't want ${PREFIX}/share/doc/HTML to be compressed,
887         # because then khelpcenter can't find the docs
888         [[ -d ${ED}/${PREFIX}/share/doc/HTML ]] &&
889                 docompress -x ${PREFIX}/share/doc/HTML
890 }
891
892 # @FUNCTION: kde4-base_pkg_preinst
893 # @DESCRIPTION:
894 # Function storing icon caches
895 kde4-base_pkg_preinst() {
896         debug-print-function ${FUNCNAME} "$@"
897
898         gnome2_icon_savelist
899         if [[ ${KDE_BUILD_TYPE} == live && ${KDE_SCM} == svn ]]; then
900                 subversion_pkg_preinst
901         fi
902 }
903
904 # @FUNCTION: kde4-base_pkg_postinst
905 # @DESCRIPTION:
906 # Function to rebuild the KDE System Configuration Cache after an application has been installed.
907 kde4-base_pkg_postinst() {
908         debug-print-function ${FUNCNAME} "$@"
909
910         gnome2_icon_cache_update
911         fdo-mime_desktop_database_update
912         fdo-mime_mime_database_update
913         buildsycoca
914
915         if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
916                 if [[ ${KDE_BUILD_TYPE} = live ]]; then
917                         echo
918                         einfo "WARNING! This is an experimental live ebuild of ${CATEGORY}/${PN}"
919                         einfo "Use it at your own risk."
920                         einfo "Do _NOT_ file bugs at bugs.gentoo.org because of this ebuild!"
921                         echo
922                 fi
923         fi
924 }
925
926 # @FUNCTION: kde4-base_pkg_postrm
927 # @DESCRIPTION:
928 # Function to rebuild the KDE System Configuration Cache after an application has been removed.
929 kde4-base_pkg_postrm() {
930         debug-print-function ${FUNCNAME} "$@"
931
932         gnome2_icon_cache_update
933         fdo-mime_desktop_database_update
934         fdo-mime_mime_database_update
935         buildsycoca
936 }
937
938 fi