net-fs/openafs-kernel: remove vulnerable versions
[gentoo.git] / eclass / kde5.eclass
1 # Copyright 1999-2015 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Id$
4
5 # @ECLASS: kde5.eclass
6 # @MAINTAINER:
7 # kde@gentoo.org
8 # @BLURB: Support eclass for KDE 5-related packages.
9 # @DESCRIPTION:
10 # The kde5.eclass provides support for building KDE 5-related packages.
11
12 if [[ -z ${_KDE5_ECLASS} ]]; then
13 _KDE5_ECLASS=1
14
15 # @ECLASS-VARIABLE: VIRTUALX_REQUIRED
16 # @DESCRIPTION:
17 # For proper description see virtualx.eclass manpage.
18 # Here we redefine default value to be manual, if your package needs virtualx
19 # for tests you should proceed with setting VIRTUALX_REQUIRED=test.
20 : ${VIRTUALX_REQUIRED:=manual}
21
22 inherit kde5-functions fdo-mime flag-o-matic gnome2-utils versionator virtualx eutils cmake-utils
23
24 if [[ ${KDE_BUILD_TYPE} = live ]]; then
25         case ${KDE_SCM} in
26                 svn) inherit subversion ;;
27                 git) inherit git-r3 ;;
28         esac
29 fi
30
31 EXPORT_FUNCTIONS pkg_pretend pkg_setup src_unpack src_prepare src_configure src_compile src_test src_install pkg_preinst pkg_postinst pkg_postrm
32
33 # @ECLASS-VARIABLE: QT_MINIMAL
34 # @DESCRIPTION:
35 # Minimal Qt version to require for the package.
36 : ${QT_MINIMAL:=5.4.2}
37
38 # @ECLASS-VARIABLE: KDE_AUTODEPS
39 # @DESCRIPTION:
40 # If set to "false", do nothing.
41 # For any other value, add a dependency on dev-qt/qtcore:5 and kde-frameworks/extra-cmake-modules:5.
42 : ${KDE_AUTODEPS:=true}
43
44 # @ECLASS-VARIABLE: KDE_BLOCK_SLOT4
45 # @DESCRIPTION:
46 # This variable is used when KDE_AUTODEPS is set.
47 # If set to "true", add RDEPEND block on kde-{base,apps}/${PN}:4
48 : ${KDE_BLOCK_SLOT4:=true}
49
50 # @ECLASS-VARIABLE: KDE_DEBUG
51 # @DESCRIPTION:
52 # If set to "false", unconditionally build with -DNDEBUG.
53 # Otherwise, add debug to IUSE to control building with that flag.
54 : ${KDE_DEBUG:=true}
55
56 # @ECLASS-VARIABLE: KDE_DOXYGEN
57 # @DESCRIPTION:
58 # If set to "false", do nothing.
59 # Otherwise, add "doc" to IUSE, add appropriate dependencies, and generate and
60 # install API documentation.
61 if [[ ${CATEGORY} = kde-frameworks ]]; then
62         : ${KDE_DOXYGEN:=true}
63 else
64         : ${KDE_DOXYGEN:=false}
65 fi
66
67 # @ECLASS-VARIABLE: KDE_DOX_DIR
68 # @DESCRIPTION:
69 # Defaults to ".". Otherwise, use alternative KDE doxygen path.
70 : ${KDE_DOX_DIR:=.}
71
72 # @ECLASS-VARIABLE: KDE_EXAMPLES
73 # @DESCRIPTION:
74 # If set to "false", unconditionally ignore a top-level examples subdirectory.
75 # Otherwise, add "examples" to IUSE to toggle adding that subdirectory.
76 : ${KDE_EXAMPLES:=false}
77
78 # @ECLASS-VARIABLE: KDE_HANDBOOK
79 # @DESCRIPTION:
80 # If set to "false", do nothing.
81 # Otherwise, add "+handbook" to IUSE, add the appropriate dependency, and
82 # generate and install KDE handbook.
83 : ${KDE_HANDBOOK:=false}
84
85 # @ECLASS-VARIABLE: KDE_DOC_DIR
86 # @DESCRIPTION:
87 # Defaults to "doc". Otherwise, use alternative KDE handbook path.
88 : ${KDE_DOC_DIR:=doc}
89
90 # @ECLASS-VARIABLE: KDE_TEST
91 # @DESCRIPTION:
92 # If set to "false", do nothing.
93 # For any other value, add test to IUSE and add a dependency on dev-qt/qttest:5.
94 if [[ ${CATEGORY} = kde-frameworks ]]; then
95         : ${KDE_TEST:=true}
96 else
97         : ${KDE_TEST:=false}
98 fi
99
100 # @ECLASS-VARIABLE: KDE_PUNT_BOGUS_DEPS
101 # @DESCRIPTION:
102 # If set to "false", do nothing.
103 # For any other value, do black magic to make hardcoded-but-optional dependencies
104 # optional again. An upstream solution is preferable and this is a last resort.
105 : ${KDE_PUNT_BOGUS_DEPS:=false}
106
107 # @ECLASS-VARIABLE: KDE_SELINUX_MODULE
108 # @DESCRIPTION:
109 # If set to "none", do nothing.
110 # For any other value, add selinux to IUSE, and depending on that useflag
111 # add a dependency on sec-policy/selinux-${KDE_SELINUX_MODULE} to (R)DEPEND.
112 : ${KDE_SELINUX_MODULE:=none}
113
114 if [[ ${KDEBASE} = kdevelop ]]; then
115         HOMEPAGE="https://www.kdevelop.org/"
116 else
117         HOMEPAGE="https://www.kde.org/"
118 fi
119
120 LICENSE="GPL-2"
121
122 if [[ ${CATEGORY} = kde-frameworks ]]; then
123         SLOT=5/$(get_version_component_range 1-2)
124 else
125         SLOT=5
126 fi
127
128 case ${KDE_AUTODEPS} in
129         false)  ;;
130         *)
131                 if [[ ${KDE_BUILD_TYPE} = live ]]; then
132                         case ${CATEGORY} in
133                                 kde-frameworks)
134                                         FRAMEWORKS_MINIMAL=9999
135                                 ;;
136                                 kde-plasma)
137                                         FRAMEWORKS_MINIMAL=9999
138                                 ;;
139                                 *) ;;
140                         esac
141                 fi
142
143                 DEPEND+=" $(add_frameworks_dep extra-cmake-modules)"
144                 RDEPEND+=" >=kde-frameworks/kf-env-3"
145                 COMMONDEPEND+=" >=dev-qt/qtcore-${QT_MINIMAL}:5"
146
147                 if [[ ${CATEGORY} = kde-frameworks || ${CATEGORY} = kde-plasma && ${PN} != polkit-kde-agent ]]; then
148                         RDEPEND+="
149                                 !kde-apps/kde4-l10n[-minimal(-)]
150                                 !<kde-apps/kde4-l10n-15.08.0-r1
151                         "
152                 fi
153
154                 if [[ ${KDE_BLOCK_SLOT4} = true && ${CATEGORY} = kde-apps ]]; then
155                         RDEPEND+=" !kde-apps/${PN}:4"
156                 fi
157                 ;;
158 esac
159
160 case ${KDE_DOXYGEN} in
161         false)  ;;
162         *)
163                 IUSE+=" doc"
164                 DEPEND+=" doc? (
165                                 $(add_frameworks_dep kapidox)
166                                 app-doc/doxygen
167                         )"
168                 ;;
169 esac
170
171 case ${KDE_DEBUG} in
172         false)  ;;
173         *)
174                 IUSE+=" debug"
175                 ;;
176 esac
177
178 case ${KDE_EXAMPLES} in
179         false)  ;;
180         *)
181                 IUSE+=" examples"
182                 ;;
183 esac
184
185 case ${KDE_HANDBOOK} in
186         false)  ;;
187         *)
188                 IUSE+=" +handbook"
189                 DEPEND+=" handbook? ( $(add_frameworks_dep kdoctools) )"
190                 ;;
191 esac
192
193 case ${KDE_TEST} in
194         false)  ;;
195         *)
196                 IUSE+=" test"
197                 DEPEND+=" test? ( >=dev-qt/qttest-${QT_MINIMAL}:5 )"
198                 ;;
199 esac
200
201 case ${KDE_SELINUX_MODULE} in
202         none)   ;;
203         *)
204                 IUSE+=" selinux"
205                 RDEPEND+=" selinux? ( sec-policy/selinux-${KDE_SELINUX_MODULE} )"
206                 ;;
207 esac
208
209 DEPEND+=" ${COMMONDEPEND} dev-util/desktop-file-utils"
210 RDEPEND+=" ${COMMONDEPEND}"
211 unset COMMONDEPEND
212
213 if [[ -n ${KMNAME} && ${KMNAME} != ${PN} && ${KDE_BUILD_TYPE} = release ]]; then
214         S=${WORKDIR}/${KMNAME}-${PV}
215 fi
216
217 # Determine fetch location for released tarballs
218 _calculate_src_uri() {
219         debug-print-function ${FUNCNAME} "$@"
220
221         local _kmname
222
223         if [[ -n ${KMNAME} ]]; then
224                 _kmname=${KMNAME}
225         else
226                 _kmname=${PN}
227         fi
228
229         case ${PN} in
230                 kdelibs4support | \
231                 khtml | \
232                 kjs | \
233                 kjsembed | \
234                 kmediaplayer | \
235                 kross | \
236                 krunner)
237                         _kmname="portingAids/${_kmname}"
238                         ;;
239         esac
240
241         DEPEND+=" app-arch/xz-utils"
242
243         case ${CATEGORY} in
244                 kde-apps)
245                         case ${PV} in
246                                 ??.?.[6-9]? | ??.??.[6-9]? )
247                                         SRC_URI="mirror://kde/unstable/applications/${PV}/src/${_kmname}-${PV}.tar.xz"
248                                         RESTRICT+=" mirror"
249                                         ;;
250                                 *)
251                                         SRC_URI="mirror://kde/stable/applications/${PV}/src/${_kmname}-${PV}.tar.xz" ;;
252                         esac
253                         ;;
254                 kde-frameworks)
255                         SRC_URI="mirror://kde/stable/frameworks/${PV%.*}/${_kmname}-${PV}.tar.xz" ;;
256                 kde-plasma)
257                         case ${PV} in
258                                 5.?.[6-9]? )
259                                         # Plasma 5 beta releases
260                                         SRC_URI="mirror://kde/unstable/plasma/${PV}/${_kmname}-${PV}.tar.xz"
261                                         RESTRICT+=" mirror"
262                                         ;;
263                                 *)
264                                         # Plasma 5 stable releases
265                                         SRC_URI="mirror://kde/stable/plasma/${PV}/${_kmname}-${PV}.tar.xz" ;;
266                         esac
267                         ;;
268         esac
269 }
270
271 # Determine fetch location for live sources
272 _calculate_live_repo() {
273         debug-print-function ${FUNCNAME} "$@"
274
275         SRC_URI=""
276
277         case ${KDE_SCM} in
278                 svn)
279                         # @ECLASS-VARIABLE: ESVN_MIRROR
280                         # @DESCRIPTION:
281                         # This variable allows easy overriding of default kde mirror service
282                         # (anonsvn) with anything else you might want to use.
283                         ESVN_MIRROR=${ESVN_MIRROR:=svn://anonsvn.kde.org/home/kde}
284
285                         local branch_prefix="trunk/KDE"
286
287                         if [[ ${PV} == ??.??.49.9999 && ${CATEGORY} = kde-apps ]]; then
288                                 branch_prefix="branches/Applications/$(get_version_component_range 1-2)"
289                         fi
290
291                         if [[ ${PV} != 9999 && ${CATEGORY} = kde-plasma ]]; then
292                                 branch_prefix="branches/plasma/$(get_version_component_range 1-2)"
293                         fi
294
295                         local _kmname
296
297                         if [[ -n ${KMNAME} ]]; then
298                                 _kmname=${KMNAME}
299                         else
300                                 _kmname=${PN}
301                         fi
302
303                         ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/${_kmname}"
304                         ;;
305                 git)
306                         # @ECLASS-VARIABLE: EGIT_MIRROR
307                         # @DESCRIPTION:
308                         # This variable allows easy overriding of default kde mirror service
309                         # (anongit) with anything else you might want to use.
310                         EGIT_MIRROR=${EGIT_MIRROR:=git://anongit.kde.org}
311
312                         local _kmname
313
314                         # @ECLASS-VARIABLE: EGIT_REPONAME
315                         # @DESCRIPTION:
316                         # This variable allows overriding of default repository
317                         # name. Specify only if this differ from PN and KMNAME.
318                         if [[ -n ${EGIT_REPONAME} ]]; then
319                                 # the repository and kmname different
320                                 _kmname=${EGIT_REPONAME}
321                         elif [[ -n ${KMNAME} ]]; then
322                                 _kmname=${KMNAME}
323                         else
324                                 _kmname=${PN}
325                         fi
326
327                         if [[ ${PV} == ??.??.49.9999 && ${CATEGORY} = kde-apps ]]; then
328                                 EGIT_BRANCH="Applications/$(get_version_component_range 1-2)"
329                         fi
330
331                         if [[ ${PV} != 9999 && ${CATEGORY} = kde-plasma ]]; then
332                                 EGIT_BRANCH="Plasma/$(get_version_component_range 1-2)"
333                         fi
334
335                         EGIT_REPO_URI="${EGIT_MIRROR}/${_kmname}"
336                         ;;
337         esac
338 }
339
340 case ${KDE_BUILD_TYPE} in
341         live) _calculate_live_repo ;;
342         *) _calculate_src_uri ;;
343 esac
344
345 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: SRC_URI is ${SRC_URI}"
346
347 # @FUNCTION: kde5_pkg_pretend
348 # @DESCRIPTION:
349 # Do some basic settings
350 kde5_pkg_pretend() {
351         debug-print-function ${FUNCNAME} "$@"
352         if [[ ${MERGE_TYPE} != binary ]]; then
353                 _check_gcc_version
354         fi
355 }
356
357 # @FUNCTION: kde5_pkg_setup
358 # @DESCRIPTION:
359 # Do some basic settings
360 kde5_pkg_setup() {
361         debug-print-function ${FUNCNAME} "$@"
362         if [[ ${MERGE_TYPE} != binary ]]; then
363                 _check_gcc_version
364         fi
365 }
366
367 # @FUNCTION: kde5_src_unpack
368 # @DESCRIPTION:
369 # Function for unpacking KDE 5.
370 kde5_src_unpack() {
371         debug-print-function ${FUNCNAME} "$@"
372
373         if [[ ${KDE_BUILD_TYPE} = live ]]; then
374                 case ${KDE_SCM} in
375                         svn)
376                                 subversion_src_unpack
377                                 ;;
378                         git)
379                                 git-r3_src_unpack
380                                 ;;
381                 esac
382         else
383                 default
384         fi
385 }
386
387 # @FUNCTION: kde5_src_prepare
388 # @DESCRIPTION:
389 # Function for preparing the KDE 5 sources.
390 kde5_src_prepare() {
391         debug-print-function ${FUNCNAME} "$@"
392
393         # only build examples when required
394         if ! use_if_iuse examples || ! use examples ; then
395                 comment_add_subdirectory examples
396         fi
397
398         # only enable handbook when required
399         if ! use_if_iuse handbook ; then
400                 comment_add_subdirectory ${KDE_DOC_DIR}
401         fi
402
403         # enable only the requested translations
404         # when required
405         if [[ ${KDE_BUILD_TYPE} = release ]] ; then
406                 if [[ -d po ]] ; then
407                         pushd po > /dev/null || die
408                         for lang in *; do
409                                 if ! has ${lang} ${LINGUAS} ; then
410                                         if [[ ${lang} != CMakeLists.txt ]] ; then
411                                                 rm -rf ${lang}
412                                         fi
413                                         if [[ -e CMakeLists.txt ]] ; then
414                                                 comment_add_subdirectory ${lang}
415                                         fi
416                                 fi
417                         done
418                         popd > /dev/null || die
419                 fi
420
421                 if [[ ${KDE_HANDBOOK} = true && -d ${KDE_DOC_DIR} && ${CATEGORY} != kde-apps ]] ; then
422                         pushd ${KDE_DOC_DIR} > /dev/null || die
423                         for lang in *; do
424                                 if ! has ${lang} ${LINGUAS} ; then
425                                         comment_add_subdirectory ${lang}
426                                 fi
427                         done
428                         popd > /dev/null || die
429                 fi
430         else
431                 rm -rf po
432         fi
433
434         # in frameworks, tests = manual tests so never
435         # build them
436         if [[ ${CATEGORY} = kde-frameworks ]]; then
437                 comment_add_subdirectory tests
438         fi
439
440         if [[ ${CATEGORY} = kde-frameworks || ${CATEGORY} = kde-plasma || ${CATEGORY} = kde-apps ]] ; then
441                 # only build unit tests when required
442                 if ! use_if_iuse test ; then
443                         comment_add_subdirectory autotests
444                         comment_add_subdirectory test
445                         comment_add_subdirectory tests
446                 fi
447         fi
448
449         case ${KDE_PUNT_BOGUS_DEPS} in
450                 false)  ;;
451                 *)
452                         if ! use_if_iuse test ; then
453                                 punt_bogus_dep Qt5 Test
454                         fi
455                         if ! use_if_iuse handbook ; then
456                                 punt_bogus_dep KF5 DocTools
457                         fi
458                         ;;
459         esac
460
461         cmake-utils_src_prepare
462 }
463
464 # @FUNCTION: kde5_src_configure
465 # @DESCRIPTION:
466 # Function for configuring the build of KDE 5.
467 kde5_src_configure() {
468         debug-print-function ${FUNCNAME} "$@"
469
470         # we rely on cmake-utils.eclass to append -DNDEBUG too
471         if ! use_if_iuse debug; then
472                 append-cppflags -DQT_NO_DEBUG
473         fi
474
475         local cmakeargs
476
477         if ! use_if_iuse test ; then
478                 cmakeargs+=( -DBUILD_TESTING=OFF )
479         fi
480
481         # install mkspecs in the same directory as qt stuff
482         cmakeargs+=(-DKDE_INSTALL_USE_QT_SYS_PATHS=ON)
483
484         # allow the ebuild to override what we set here
485         mycmakeargs=("${cmakeargs[@]}" "${mycmakeargs[@]}")
486
487         cmake-utils_src_configure
488 }
489
490 # @FUNCTION: kde5_src_compile
491 # @DESCRIPTION:
492 # Function for compiling KDE 5.
493 kde5_src_compile() {
494         debug-print-function ${FUNCNAME} "$@"
495
496         cmake-utils_src_compile "$@"
497
498         # Build doxygen documentation if applicable
499         if use_if_iuse doc ; then
500                 kgenapidox ${KDE_DOX_DIR} || die
501         fi
502 }
503
504 # @FUNCTION: kde5_src_test
505 # @DESCRIPTION:
506 # Function for testing KDE 5.
507 kde5_src_test() {
508         debug-print-function ${FUNCNAME} "$@"
509
510         _test_runner() {
511                 if [[ -n "${VIRTUALDBUS_TEST}" ]]; then
512                         export $(dbus-launch)
513                 fi
514
515                 cmake-utils_src_test
516         }
517
518         # When run as normal user during ebuild development with the ebuild command, the
519         # kde tests tend to access the session DBUS. This however is not possible in a real
520         # emerge or on the tinderbox.
521         # > make sure it does not happen, so bad tests can be recognized and disabled
522         unset DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID
523
524         if [[ ${VIRTUALX_REQUIRED} = always || ${VIRTUALX_REQUIRED} = test ]]; then
525                 VIRTUALX_COMMAND="_test_runner" virtualmake
526         else
527                 _test_runner
528         fi
529
530         if [[ -n "${DBUS_SESSION_BUS_PID}" ]] ; then
531                 kill ${DBUS_SESSION_BUS_PID}
532         fi
533 }
534
535 # @FUNCTION: kde5_src_install
536 # @DESCRIPTION:
537 # Function for installing KDE 5.
538 kde5_src_install() {
539         debug-print-function ${FUNCNAME} "$@"
540
541         # Install doxygen documentation if applicable
542         if use_if_iuse doc ; then
543                 dodoc -r apidocs/html
544         fi
545
546         cmake-utils_src_install
547
548         # We don't want ${PREFIX}/share/doc/HTML to be compressed,
549         # because then khelpcenter can't find the docs
550         if [[ -d ${ED}/${PREFIX}/share/doc/HTML ]]; then
551                 docompress -x ${PREFIX}/share/doc/HTML
552         fi
553 }
554
555 # @FUNCTION: kde5_pkg_preinst
556 # @DESCRIPTION:
557 # Function storing icon caches
558 kde5_pkg_preinst() {
559         debug-print-function ${FUNCNAME} "$@"
560
561         gnome2_icon_savelist
562 }
563
564 # @FUNCTION: kde5_pkg_postinst
565 # @DESCRIPTION:
566 # Function to rebuild the KDE System Configuration Cache after an application has been installed.
567 kde5_pkg_postinst() {
568         debug-print-function ${FUNCNAME} "$@"
569
570         gnome2_icon_cache_update
571         fdo-mime_desktop_database_update
572 }
573
574 # @FUNCTION: kde5_pkg_postrm
575 # @DESCRIPTION:
576 # Function to rebuild the KDE System Configuration Cache after an application has been removed.
577 kde5_pkg_postrm() {
578         debug-print-function ${FUNCNAME} "$@"
579
580         gnome2_icon_cache_update
581         fdo-mime_desktop_database_update
582 }
583
584 fi