-# Copyright 1999-2016 Gentoo Foundation
+# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-# $Id$
# @ECLASS: kde5.eclass
# @MAINTAINER:
# kde@gentoo.org
-# @BLURB: Support eclass for KDE 5-related packages.
+# @SUPPORTED_EAPIS: 7
+# @BLURB: Support eclass for packages that follow KDE packaging conventions.
# @DESCRIPTION:
-# The kde5.eclass provides support for building KDE 5-related packages.
+# This eclass is intended to streamline the creation of ebuilds for packages
+# that follow KDE upstream packaging conventions. It's primarily intended for
+# the three upstream release groups (Frameworks, Plasma, Applications) but
+# is also for any package that follows similar conventions.
+#
+# This eclass unconditionally inherits kde5-functions.eclass and all its public
+# functions and variables may be considered as part of this eclass's API.
+#
+# This eclass unconditionally inherits cmake-utils.eclass and all its public
+# variables and helper functions (not phase functions) may be considered as part
+# of this eclass's API.
+#
+# This eclass's phase functions are not intended to be mixed and matched, so if
+# any phase functions are overridden the version here should also be called.
if [[ -z ${_KDE5_ECLASS} ]]; then
_KDE5_ECLASS=1
# for tests you should proceed with setting VIRTUALX_REQUIRED=test.
: ${VIRTUALX_REQUIRED:=manual}
-inherit cmake-utils eutils flag-o-matic gnome2-utils kde5-functions versionator virtualx xdg
+inherit cmake-utils flag-o-matic kde5-functions virtualx xdg
if [[ ${KDE_BUILD_TYPE} = live ]]; then
- case ${KDE_SCM} in
- git) inherit git-r3 ;;
- esac
+ inherit git-r3
fi
if [[ -v KDE_GCC_MINIMAL ]]; then
EXPORT_FUNCTIONS pkg_pretend
fi
-EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_test src_install pkg_preinst pkg_postinst pkg_postrm
+EXPORT_FUNCTIONS pkg_setup pkg_nofetch src_unpack src_prepare src_configure src_compile src_test src_install pkg_preinst pkg_postinst pkg_postrm
-# @ECLASS-VARIABLE: QT_MINIMAL
+# @ECLASS-VARIABLE: ECM_KDEINSTALLDIRS
# @DESCRIPTION:
-# Minimal Qt version to require for the package.
-: ${QT_MINIMAL:=5.6.1}
+# If set to "false", do nothing.
+# For any other value, assume the package is using KDEInstallDirs macro and switch
+# KDE_INSTALL_USE_QT_SYS_PATHS to ON.
+: ${ECM_KDEINSTALLDIRS:=true}
# @ECLASS-VARIABLE: KDE_AUTODEPS
# @DESCRIPTION:
# If set to "false", do nothing.
-# For any other value, add a dependency on dev-qt/qtcore:5 and kde-frameworks/extra-cmake-modules:5.
+# For any other value, add dependencies on dev-qt/qtcore:5, kde-frameworks/kf-env
+# and kde-frameworks/extra-cmake-modules:5. Additionally, required blockers may
+# be set depending on the value of CATEGORY.
: ${KDE_AUTODEPS:=true}
-# @ECLASS-VARIABLE: KDE_BLOCK_SLOT4
-# @DESCRIPTION:
-# This variable is used when KDE_AUTODEPS is set.
-# If set to "true", add RDEPEND block on kde-apps/${PN}:4
-: ${KDE_BLOCK_SLOT4:=true}
-
# @ECLASS-VARIABLE: KDE_DEBUG
# @DESCRIPTION:
-# If set to "false", unconditionally build with -DNDEBUG.
-# Otherwise, add debug to IUSE to control building with that flag.
+# If set to "false", add -DNDEBUG (via cmake-utils_src_configure) and -DQT_NO_DEBUG
+# to CPPFLAGS.
+# Otherwise, add debug to IUSE.
: ${KDE_DEBUG:=true}
# @ECLASS-VARIABLE: KDE_DESIGNERPLUGIN
# @ECLASS-VARIABLE: KDE_DOC_DIR
# @DESCRIPTION:
-# Defaults to "doc". Otherwise, use alternative KDE handbook path.
+# Specifies the location of the KDE handbook if not the default.
: ${KDE_DOC_DIR:=doc}
+# @ECLASS-VARIABLE: KDE_PO_DIRS
+# @DESCRIPTION:
+# Specifies the possible locations of KDE l10n files if not the default.
+: ${KDE_PO_DIRS:="po poqm"}
+
+# @ECLASS-VARIABLE: KDE_QTHELP
+# @DESCRIPTION:
+# If set to "false", do nothing.
+# Otherwise, add "doc" to IUSE, add the appropriate dependency, generate
+# and install Qt compressed help files with -DBUILD_QCH=ON when USE=doc.
+if [[ ${CATEGORY} = kde-frameworks ]]; then
+ : ${KDE_QTHELP:=true}
+fi
+: ${KDE_QTHELP:=false}
+
# @ECLASS-VARIABLE: KDE_TEST
# @DESCRIPTION:
# If set to "false", do nothing.
# when USE=!test.
# If set to "forceoptional", remove a Qt5Test dependency and comment test
# subdirs from the root CMakeLists.txt in addition to the above.
-# If set to "forceoptional-recursive", remove a Qt5Test dependency and comment
-# test subdirs from *any* CMakeLists.txt in addition to the above.
+# If set to "forceoptional-recursive", remove Qt5Test dependencies and make
+# autotest(s), unittest(s) and test(s) subdirs from *any* CMakeLists.txt in ${S}
+# and below conditional on BUILD_TESTING. This is always meant as a short-term
+# fix and creates ${T}/${P}-tests-optional.patch to refine and submit upstream.
if [[ ${CATEGORY} = kde-frameworks ]]; then
: ${KDE_TEST:=true}
-else
- : ${KDE_TEST:=false}
-fi
-
-# @ECLASS-VARIABLE: KDE_L10N
-# @DESCRIPTION:
-# This is an array of translations this ebuild supports. These translations
-# are automatically added to IUSE.
-if [[ ${KDEBASE} = kdel10n ]]; then
- if [[ -n ${KDE_L10N} ]]; then
- IUSE="${IUSE} $(printf 'l10n_%s ' ${KDE_L10N[@]})"
- fi
fi
+: ${KDE_TEST:=false}
# @ECLASS-VARIABLE: KDE_SELINUX_MODULE
# @DESCRIPTION:
# add a dependency on sec-policy/selinux-${KDE_SELINUX_MODULE} to (R)DEPEND.
: ${KDE_SELINUX_MODULE:=none}
-if [[ ${KDEBASE} = kdevelop ]]; then
- HOMEPAGE="https://www.kdevelop.org/"
-elif [[ ${KDEBASE} = kdel10n ]]; then
- HOMEPAGE="http://l10n.kde.org"
-elif [[ ${KMNAME} = kdepim ]]; then
- HOMEPAGE="https://www.kde.org/applications/office/kontact/"
-else
- HOMEPAGE="https://www.kde.org/"
-fi
-
+# @ECLASS-VARIABLE: KDE_SUBSLOT
+# @DESCRIPTION:
+# If set to "false", do nothing.
+# If set to "true", add a subslot to the package, where subslot is either
+# defined as major.minor version for kde-*/ categories or ${PV} if other.
+# For any other value, that value will be used as subslot.
+: ${KDE_SUBSLOT:=false}
+
+# @ECLASS-VARIABLE: KDE_UNRELEASED
+# @INTERNAL
+# @DESCRIPTION
+# An array of $CATEGORY-$PV pairs of packages that are unreleased upstream.
+# Any package matching this will have fetch restriction enabled, and receive
+# a proper error message via pkg_nofetch.
+KDE_UNRELEASED=( )
+
+HOMEPAGE="https://kde.org/"
LICENSE="GPL-2"
+SLOT=5
+
if [[ ${CATEGORY} = kde-frameworks ]]; then
- SLOT=5/$(get_version_component_range 1-2)
-else
- SLOT=5
+ KDE_SUBSLOT=true
fi
-case ${KDE_AUTODEPS} in
- false) ;;
- *)
- if [[ ${KDE_BUILD_TYPE} = live ]]; then
- case ${CATEGORY} in
- kde-frameworks)
- FRAMEWORKS_MINIMAL=9999
+case ${KDE_SUBSLOT} in
+ false) ;;
+ true)
+ case ${CATEGORY} in
+ kde-frameworks | \
+ kde-plasma | \
+ kde-apps)
+ SLOT+="/$(ver_cut 1-2)"
;;
- kde-plasma)
- FRAMEWORKS_MINIMAL=9999
+ *)
+ SLOT+="/${PV}"
;;
- *) ;;
- esac
- fi
-
- if [[ ${CATEGORY} = kde-plasma ]]; then
- if ! [[ $(get_version_component_range 2) -le 7 && $(get_version_component_range 3) -lt 50 ]]; then
- FRAMEWORKS_MINIMAL=5.26.0
- fi
- fi
+ esac
+ ;;
+ *)
+ SLOT+="/${KDE_SUBSLOT}"
+ ;;
+esac
- DEPEND+=" $(add_frameworks_dep extra-cmake-modules)"
- RDEPEND+=" >=kde-frameworks/kf-env-3"
+case ${KDE_AUTODEPS} in
+ false) ;;
+ *)
+ BDEPEND+=" $(add_frameworks_dep extra-cmake-modules)"
+ RDEPEND+=" >=kde-frameworks/kf-env-4"
COMMONDEPEND+=" $(add_qt_dep qtcore)"
- if [[ ${CATEGORY} = kde-frameworks || ${CATEGORY} = kde-plasma && ${PN} != polkit-kde-agent ]]; then
- RDEPEND+=" !<kde-apps/kde4-l10n-15.12.3-r1"
- fi
-
- if [[ ${KDE_BLOCK_SLOT4} = true && ${CATEGORY} = kde-apps ]]; then
- RDEPEND+=" !kde-apps/${PN}:4"
+ # all packages need breeze/oxygen icons for basic iconset, bug #564838
+ if [[ ${PN} != breeze-icons && ${PN} != oxygen-icons ]]; then
+ RDEPEND+=" || ( $(add_frameworks_dep breeze-icons) kde-frameworks/oxygen-icons:* )"
fi
;;
esac
false) ;;
*)
IUSE+=" designer"
- DEPEND+=" designer? (
- $(add_frameworks_dep kdesignerplugin)
- $(add_qt_dep designer)
- )"
- ;;
+ if [[ ${CATEGORY} = kde-apps && ${PV} = 19.0[48]* ]]; then
+ BDEPEND+=" designer? ( $(add_frameworks_dep kdesignerplugin) )"
+ else
+ BDEPEND+=" designer? ( $(add_qt_dep designer) )"
+ fi
esac
case ${KDE_EXAMPLES} in
false) ;;
*)
IUSE+=" +handbook"
- DEPEND+=" handbook? ( $(add_frameworks_dep kdoctools) )"
+ BDEPEND+=" handbook? ( $(add_frameworks_dep kdoctools) )"
+ ;;
+esac
+
+case ${KDE_QTHELP} in
+ false) ;;
+ *)
+ IUSE+=" doc"
+ COMMONDEPEND+=" doc? ( $(add_qt_dep qt-docs) )"
+ BDEPEND+=" doc? (
+ $(add_qt_dep qthelp)
+ >=app-doc/doxygen-1.8.13-r1
+ )"
;;
esac
;;
esac
-DEPEND+=" ${COMMONDEPEND} dev-util/desktop-file-utils"
+DEPEND+=" ${COMMONDEPEND}"
RDEPEND+=" ${COMMONDEPEND}"
unset COMMONDEPEND
S=${WORKDIR}/${KMNAME}-${PV}
fi
-# FIXME: Drop this when kdepim-16.08.x is no more
-if [[ -n ${KMNAME} && ${KMNAME} != ${PN} && ${KMNAME} = kdepim ]]; then
- S="${S}/${PN}"
-fi
+_kde_is_unreleased() {
+ local pair
+ for pair in "${KDE_UNRELEASED[@]}" ; do
+ if [[ "${pair}" = "${CATEGORY}-${PV}" ]]; then
+ return 0
+ fi
+ done
-if [[ -n ${KDEBASE} && ${KDEBASE} = kdevelop && ${KDE_BUILD_TYPE} = release ]]; then
- if [[ -n ${KMNAME} ]]; then
- S=${WORKDIR}/${KMNAME}-${PV%.0} # kdevelop missing trailing .0 in first release
- else
- S=${WORKDIR}/${PN}-${PV%.0} # kdevelop missing trailing .0 in first release
- fi
-fi
+ return 1
+}
# Determine fetch location for released tarballs
_calculate_src_uri() {
case ${PN} in
kdelibs4support | \
+ kdewebkit | \
khtml | \
kjs | \
kjsembed | \
kross)
_kmname="portingAids/${_kmname}"
;;
+ kdesignerplugin)
+ [[ ${PV} = 5.6[01].* ]] || _kmname="portingAids/${_kmname}"
+ ;;
esac
- DEPEND+=" app-arch/xz-utils"
-
case ${CATEGORY} in
kde-apps)
case ${PV} in
kde-frameworks)
SRC_URI="mirror://kde/stable/frameworks/${PV%.*}/${_kmname}-${PV}.tar.xz" ;;
kde-plasma)
- local plasmapv=$(get_version_component_range 1-3)
+ local plasmapv=$(ver_cut 1-3)
case ${PV} in
- 5.?.[6-9]? )
+ 5.?.[6-9]? | 5.??.[6-9]? )
# Plasma 5 beta releases
SRC_URI="mirror://kde/unstable/plasma/${plasmapv}/${_kmname}-${PV}.tar.xz"
RESTRICT+=" mirror"
;;
esac
- if [[ -z ${SRC_URI} && -n ${KDEBASE} ]] ; then
- local _kdebase
- case ${PN} in
- kdevelop-pg-qt)
- _kdebase=${PN} ;;
- *)
- _kdebase=${KDEBASE} ;;
- esac
+ if [[ ${PN} = kdevelop* ]]; then
case ${PV} in
*.*.[6-9]? )
- SRC_URI="mirror://kde/unstable/${_kdebase}/${PV}/src/${_kmname}-${PV}.tar.xz"
+ SRC_URI="mirror://kde/unstable/kdevelop/${PV}/src/${_kmname}-${PV}.tar.xz"
RESTRICT+=" mirror"
;;
*)
- SRC_URI="mirror://kde/stable/${_kdebase}/${PV}/src/${_kmname}-${PV%.0}.tar.xz" ;;
+ SRC_URI="mirror://kde/stable/kdevelop/${PV}/src/${_kmname}-${PV}.tar.xz" ;;
esac
- unset _kdebase
fi
- if [[ ${KDEBASE} = kdel10n ]] ; then
- local uri_base="${SRC_URI/${_kmname}-${PV}.tar.xz/}kde-l10n/kde-l10n"
- SRC_URI=""
- for my_l10n in ${KDE_L10N[@]} ; do
- case ${my_l10n} in
- sr | sr-ijekavsk | sr-Latn-ijekavsk | sr-Latn)
- SRC_URI="${SRC_URI} l10n_${my_l10n}? ( ${uri_base}-sr-${PV}.tar.xz )"
- ;;
- *)
- SRC_URI="${SRC_URI} l10n_${my_l10n}? ( ${uri_base}-$(kde_l10n2lingua ${my_l10n})-${PV}.tar.xz )"
- ;;
- esac
- done
+ if _kde_is_unreleased ; then
+ RESTRICT+=" fetch"
fi
}
SRC_URI=""
- case ${KDE_SCM} in
- git)
- # @ECLASS-VARIABLE: EGIT_MIRROR
- # @DESCRIPTION:
- # This variable allows easy overriding of default kde mirror service
- # (anongit) with anything else you might want to use.
- EGIT_MIRROR=${EGIT_MIRROR:=https://anongit.kde.org}
-
- local _kmname
-
- # @ECLASS-VARIABLE: EGIT_REPONAME
- # @DESCRIPTION:
- # This variable allows overriding of default repository
- # name. Specify only if this differ from PN and KMNAME.
- if [[ -n ${EGIT_REPONAME} ]]; then
- # the repository and kmname different
- _kmname=${EGIT_REPONAME}
- elif [[ -n ${KMNAME} ]]; then
- _kmname=${KMNAME}
- else
- _kmname=${PN}
- fi
+ # @ECLASS-VARIABLE: EGIT_MIRROR
+ # @DESCRIPTION:
+ # This variable allows easy overriding of default kde mirror service
+ # (anongit) with anything else you might want to use.
+ EGIT_MIRROR=${EGIT_MIRROR:=https://anongit.kde.org}
- if [[ ${PV} == ??.??.49.9999 && ${CATEGORY} = kde-apps ]]; then
- EGIT_BRANCH="Applications/$(get_version_component_range 1-2)"
- fi
+ local _kmname
- if [[ ${PV} != 9999 && ${CATEGORY} = kde-plasma ]]; then
- EGIT_BRANCH="Plasma/$(get_version_component_range 1-2)"
- fi
+ # @ECLASS-VARIABLE: EGIT_REPONAME
+ # @DESCRIPTION:
+ # This variable allows overriding of default repository
+ # name. Specify only if this differ from PN and KMNAME.
+ if [[ -n ${EGIT_REPONAME} ]]; then
+ # the repository and kmname different
+ _kmname=${EGIT_REPONAME}
+ elif [[ -n ${KMNAME} ]]; then
+ _kmname=${KMNAME}
+ else
+ _kmname=${PN}
+ fi
- EGIT_REPO_URI="${EGIT_MIRROR}/${_kmname}"
- ;;
- esac
+ if [[ ${PV} == ??.??.49.9999 && ${CATEGORY} = kde-apps ]]; then
+ EGIT_BRANCH="Applications/$(ver_cut 1-2)"
+ fi
+
+ if [[ ${PV} != 9999 && ${CATEGORY} = kde-plasma ]]; then
+ EGIT_BRANCH="Plasma/$(ver_cut 1-2)"
+ fi
+
+ if [[ ${PV} != 9999 && ${PN} = kdevelop* ]]; then
+ EGIT_BRANCH="$(ver_cut 1-2)"
+ fi
+
+ EGIT_REPO_URI="${EGIT_MIRROR}/${_kmname}"
}
case ${KDE_BUILD_TYPE} in
# @FUNCTION: kde5_pkg_pretend
# @DESCRIPTION:
-# Do some basic settings
+# Checks if the active compiler meets the minimum version requirements.
+# phase function is only exported if KDE_GCC_MINIMAL is defined.
kde5_pkg_pretend() {
debug-print-function ${FUNCNAME} "$@"
_check_gcc_version
# @FUNCTION: kde5_pkg_setup
# @DESCRIPTION:
-# Do some basic settings
+# Checks if the active compiler meets the minimum version requirements.
kde5_pkg_setup() {
debug-print-function ${FUNCNAME} "$@"
_check_gcc_version
}
+# @FUNCTION: kde5_pkg_nofetch
+# @DESCRIPTION:
+# Intended for use in the KDE overlay. If this package matches something in
+# KDE_UNRELEASED, display a giant warning that the package has not yet been
+# released upstream and should not be used.
+kde5_pkg_nofetch() {
+ if ! _kde_is_unreleased ; then
+ return
+ fi
+
+ eerror " _ _ _ _ ____ _____ _ _____ _ ____ _____ ____ "
+ eerror "| | | | \ | | _ \| ____| | | ____| / \ / ___|| ____| _ \ "
+ eerror "| | | | \| | |_) | _| | | | _| / _ \ \___ \| _| | | | |"
+ eerror "| |_| | |\ | _ <| |___| |___| |___ / ___ \ ___) | |___| |_| |"
+ eerror " \___/|_| \_|_| \_\_____|_____|_____/_/ \_\____/|_____|____/ "
+ eerror " "
+ eerror " ____ _ ____ _ __ _ ____ _____ "
+ eerror "| _ \ / \ / ___| |/ / / \ / ___| ____|"
+ eerror "| |_) / _ \| | | ' / / _ \| | _| _| "
+ eerror "| __/ ___ \ |___| . \ / ___ \ |_| | |___ "
+ eerror "|_| /_/ \_\____|_|\_\/_/ \_\____|_____|"
+ eerror
+ eerror "${CATEGORY}/${P} has not been released to the public yet"
+ eerror "and is only available to packagers right now."
+ eerror ""
+ eerror "This is not a bug. Please do not file bugs or contact upstream about this."
+ eerror ""
+ eerror "Please consult the upstream release schedule to see when this "
+ eerror "package is scheduled to be released:"
+ eerror "https://community.kde.org/Schedules"
+}
+
# @FUNCTION: kde5_src_unpack
# @DESCRIPTION:
-# Function for unpacking KDE 5.
+# Unpack the sources, automatically handling both release and live ebuilds.
kde5_src_unpack() {
debug-print-function ${FUNCNAME} "$@"
if [[ ${KDE_BUILD_TYPE} = live ]]; then
- case ${KDE_SCM} in
- git)
- git-r3_src_unpack
- ;;
- esac
- elif [[ ${KDEBASE} = kdel10n ]]; then
- local l10npart=5
- [[ ${PN} = kde4-l10n ]] && l10npart=4
- mkdir -p "${S}" || die "Failed to create source dir ${S}"
- cd "${S}"
- for my_tar in ${A}; do
- tar -xpf "${DISTDIR}/${my_tar}" --xz \
- "${my_tar/.tar.xz/}/CMakeLists.txt" "${my_tar/.tar.xz/}/${l10npart}" 2> /dev/null ||
- elog "${my_tar}: tar extract command failed at least partially - continuing"
- done
+ git-r3_src_unpack
else
default
fi
# @FUNCTION: kde5_src_prepare
# @DESCRIPTION:
-# Function for preparing the KDE 5 sources.
+# Wrapper for cmake-utils_src_prepare with lots of extra logic for magic
+# handling of linguas, tests, handbook etc.
kde5_src_prepare() {
debug-print-function ${FUNCNAME} "$@"
- if [[ ${KDEBASE} = kdel10n ]]; then
- local l10npart=5
- [[ ${PN} = kde4-l10n ]] && l10npart=4
- # move known variant subdirs to root dir, currently sr@*
- use_if_iuse l10n_sr-ijekavsk && _l10n_variant_subdir2root sr-ijekavsk sr
- use_if_iuse l10n_sr-Latn-ijekavsk && _l10n_variant_subdir2root sr-Latn-ijekavsk sr
- use_if_iuse l10n_sr-Latn && _l10n_variant_subdir2root sr-Latn sr
- if use_if_iuse l10n_sr; then
- rm -rf kde-l10n-sr-${PV}/${l10npart}/sr/sr@* || die "Failed to cleanup L10N=sr"
- _l10n_variant_subdir_buster sr
- elif [[ -d kde-l10n-sr-${PV} ]]; then
- # having any variant selected means parent lingua will be unpacked as well
- rm -r kde-l10n-sr-${PV} || die "Failed to remove sr parent lingua"
- fi
-
- # add all l10n directories to cmake
- cat <<-EOF > CMakeLists.txt || die
-project(${PN})
-cmake_minimum_required(VERSION 2.8.12)
-$(printf "add_subdirectory( %s )\n" \
- `find . -mindepth 1 -maxdepth 1 -type d | sed -e "s:^\./::"`)
-EOF
-
- # for KF5: drop KDE4-based part; for KDE4: drop KF5-based part
- case ${l10npart} in
- 5) find -maxdepth 2 -type f -name CMakeLists.txt -exec \
- sed -i -e "/add_subdirectory(4)/ s/^/#DONT/" {} + || die ;;
- 4) find -maxdepth 2 -type f -name CMakeLists.txt -exec \
- sed -i -e "/add_subdirectory(5)/ s/^/#DONT/" {} + || die ;;
- esac
- fi
-
cmake-utils_src_prepare
# only build examples when required
- if ! use_if_iuse examples || ! use examples ; then
+ if ! { in_iuse examples && use examples; } ; then
cmake_comment_add_subdirectory examples
fi
# only enable handbook when required
- if ! use_if_iuse handbook ; then
+ if in_iuse handbook && ! use handbook ; then
cmake_comment_add_subdirectory ${KDE_DOC_DIR}
if [[ ${KDE_HANDBOOK} = forceoptional ]] ; then
punt_bogus_dep KF5 DocTools
+ sed -i -e "/kdoctools_install/ s/^/#DONT/" CMakeLists.txt || die
fi
fi
# drop translations when nls is not wanted
- if [[ -d po ]] && in_iuse nls && ! use nls ; then
- rm -r po || die
+ if in_iuse nls && ! use nls ; then
+ local po
+ for po in ${KDE_PO_DIRS}; do
+ if [[ -d ${po} ]] ; then
+ rm -r ${po} || die
+ fi
+ done
fi
- # enable only the requested translations
- # when required
- if [[ -d po && -v LINGUAS ]] ; then
- pushd po > /dev/null || die
- local lang
- for lang in *; do
- if [[ -d ${lang} ]] && ! has ${lang} ${LINGUAS} ; then
- rm -r ${lang} || die
- if [[ -e CMakeLists.txt ]] ; then
- cmake_comment_add_subdirectory ${lang}
- fi
- elif ! has ${lang/.po/} ${LINGUAS} ; then
- if [[ ${lang} != CMakeLists.txt && ${lang} != ${PN}.pot ]] ; then
- rm ${lang} || die
+ # enable only the requested translations when required
+ # always install unconditionally for kconfigwidgets - if you use language
+ # X as system language, and there is a combobox with language names, the
+ # translated language name for language Y is taken from /usr/share/locale/Y/kf5_entry.desktop
+ if [[ -v LINGUAS && ${PN} != kconfigwidgets ]] ; then
+ local po
+ for po in ${KDE_PO_DIRS}; do
+ if [[ -d ${po} ]] ; then
+ pushd ${po} > /dev/null || die
+ local lang
+ for lang in *; do
+ if [[ -e ${lang} ]] && ! has ${lang/.po/} ${LINGUAS} ; then
+ case ${lang} in
+ cmake_modules | \
+ CMakeLists.txt | \
+ ${PN}.pot) ;;
+ *) rm -r ${lang} || die ;;
+ esac
+ if [[ -e CMakeLists.txt ]] ; then
+ cmake_comment_add_subdirectory ${lang}
+ sed -e "/add_subdirectory([[:space:]]*${lang}\/.*[[:space:]]*)/d" \
+ -i CMakeLists.txt || die
+ fi
fi
- fi
+ done
+ popd > /dev/null || die
+ fi
done
- popd > /dev/null || die
fi
if [[ ${KDE_BUILD_TYPE} = release && ${CATEGORY} != kde-apps ]] ; then
fi
fi
- # in frameworks, tests = manual tests so never build them
- if [[ ${CATEGORY} = kde-frameworks ]] && [[ ${PN} != extra-cmake-modules ]]; then
- cmake_comment_add_subdirectory tests
- fi
-
# only build unit tests when required
- if ! use_if_iuse test ; then
+ if ! { in_iuse test && use test; } ; then
if [[ ${KDE_TEST} = forceoptional ]] ; then
punt_bogus_dep Qt5 Test
# if forceoptional, also cover non-kde categories
cmake_comment_add_subdirectory autotests test tests
elif [[ ${KDE_TEST} = forceoptional-recursive ]] ; then
punt_bogus_dep Qt5 Test
- local d
- for d in $(find . -type d -name "autotests" -or -name "tests" -or -name "test" -or -name "unittests"); do
- pushd ${d%/*} > /dev/null || die
+ local f pf="${T}/${P}"-tests-optional.patch
+ touch ${pf} || die "Failed to touch patch file"
+ for f in $(find . -type f -name "CMakeLists.txt" -exec \
+ grep -l "^\s*add_subdirectory\s*\(\s*.*\(auto|unit\)\?tests\?\s*)\s*\)" {} \;); do
+ cp ${f} ${f}.old || die "Failed to prepare patch origfile"
+ pushd ${f%/*} > /dev/null || die
punt_bogus_dep Qt5 Test
- cmake_comment_add_subdirectory autotests test tests
+ sed -i CMakeLists.txt -e \
+ "/^#/! s/add_subdirectory\s*\(\s*.*\(auto|unit\)\?tests\?\s*)\s*\)/if(BUILD_TESTING)\n&\nendif()/" \
+ || die
popd > /dev/null || die
+ diff -Naur ${f}.old ${f} 1>>${pf}
+ rm ${f}.old || die "Failed to clean up"
done
+ einfo "Build system was modified by KDE_TEST=forceoptional-recursive."
+ einfo "Unified diff file ready for pickup in:"
+ einfo " ${pf}"
+ einfo "Push it upstream to make this message go away."
elif [[ ${CATEGORY} = kde-frameworks || ${CATEGORY} = kde-plasma || ${CATEGORY} = kde-apps ]] ; then
cmake_comment_add_subdirectory autotests test tests
fi
fi
+
+ # in frameworks, tests = manual tests so never build them
+ if [[ ${CATEGORY} = kde-frameworks ]] && [[ ${PN} != extra-cmake-modules ]]; then
+ cmake_comment_add_subdirectory tests
+ fi
}
# @FUNCTION: kde5_src_configure
# @DESCRIPTION:
-# Function for configuring the build of KDE 5.
+# Wrapper for cmake-utils_src_configure with extra logic for magic handling of
+# handbook, tests etc.
kde5_src_configure() {
debug-print-function ${FUNCNAME} "$@"
# we rely on cmake-utils.eclass to append -DNDEBUG too
- if ! use_if_iuse debug; then
+ if in_iuse debug && ! use debug; then
append-cppflags -DQT_NO_DEBUG
fi
local cmakeargs
- if ! use_if_iuse test ; then
+ if in_iuse test && ! use test ; then
cmakeargs+=( -DBUILD_TESTING=OFF )
if [[ ${KDE_TEST} = optional ]] ; then
fi
fi
- if ! use_if_iuse handbook && [[ ${KDE_HANDBOOK} = optional ]] ; then
+ if in_iuse handbook && ! use handbook && [[ ${KDE_HANDBOOK} = optional ]] ; then
cmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_KF5DocTools=ON )
fi
- if ! use_if_iuse designer && [[ ${KDE_DESIGNERPLUGIN} != false ]] ; then
- cmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Designer=ON )
+ if in_iuse designer && [[ ${KDE_DESIGNERPLUGIN} != false ]] ; then
+ if [[ ${CATEGORY} = kde-frameworks ]]; then
+ cmakeargs+=( -DBUILD_DESIGNERPLUGIN=$(usex designer) )
+ else
+ cmakeargs+=( $(cmake-utils_use_find_package designer KF5DesignerPlugin) )
+ fi
+ fi
+
+ if [[ ${KDE_QTHELP} != false ]]; then
+ cmakeargs+=( -DBUILD_QCH=$(usex doc) )
fi
- # install mkspecs in the same directory as qt stuff
- cmakeargs+=(-DKDE_INSTALL_USE_QT_SYS_PATHS=ON)
+ if [[ ${ECM_KDEINSTALLDIRS} != false ]] ; then
+ cmakeargs+=(
+ # install mkspecs in the same directory as qt stuff
+ -DKDE_INSTALL_USE_QT_SYS_PATHS=ON
+ # move handbook outside of doc dir, bug 667138
+ -DKDE_INSTALL_DOCBUNDLEDIR="${EPREFIX}/usr/share/help"
+ )
+ fi
# allow the ebuild to override what we set here
mycmakeargs=("${cmakeargs[@]}" "${mycmakeargs[@]}")
# @FUNCTION: kde5_src_compile
# @DESCRIPTION:
-# Function for compiling KDE 5.
+# Wrapper for cmake-utils_src_compile. Currently doesn't do anything extra, but
+# is included as part of the API just in case it's needed in the future.
kde5_src_compile() {
debug-print-function ${FUNCNAME} "$@"
# @FUNCTION: kde5_src_test
# @DESCRIPTION:
-# Function for testing KDE 5.
+# Wrapper for cmake-utils_src_test with extra logic for magic handling of dbus
+# and virtualx.
kde5_src_test() {
debug-print-function ${FUNCNAME} "$@"
# @FUNCTION: kde5_src_install
# @DESCRIPTION:
-# Function for installing KDE 5.
+# Wrapper for cmake-utils_src_install. Currently doesn't do anything extra.
kde5_src_install() {
debug-print-function ${FUNCNAME} "$@"
cmake-utils_src_install
-
- # We don't want ${PREFIX}/share/doc/HTML to be compressed,
- # because then khelpcenter can't find the docs
- if [[ -d ${ED}/${PREFIX}/share/doc/HTML ]]; then
- docompress -x ${PREFIX}/share/doc/HTML
- fi
}
# @FUNCTION: kde5_pkg_preinst
# @DESCRIPTION:
-# Function storing icon caches
+# Sets up environment variables required in kde5_pkg_postinst.
kde5_pkg_preinst() {
debug-print-function ${FUNCNAME} "$@"
- gnome2_icon_savelist
xdg_pkg_preinst
}
# @FUNCTION: kde5_pkg_postinst
# @DESCRIPTION:
-# Function to rebuild the KDE System Configuration Cache after an application has been installed.
+# Updates the various XDG caches (icon, desktop, mime) if necessary.
kde5_pkg_postinst() {
debug-print-function ${FUNCNAME} "$@"
- gnome2_icon_cache_update
xdg_pkg_postinst
if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
einfo "Use it at your own risk."
einfo "Do _NOT_ file bugs at bugs.gentoo.org because of this ebuild!"
fi
- # for kf5-based applications tell user that he SHOULD NOT be using kde-base/plasma-workspace
- if [[ ${KDEBASE} != kde-base || ${CATEGORY} = kde-apps ]] && \
- has_version 'kde-base/plasma-workspace'; then
- echo
- ewarn "WARNING! Your system configuration still contains \"kde-base/plasma-workspace\","
- ewarn "indicating a Plasma 4 setup. With this setting you are unsupported by KDE team."
- ewarn "Please consider upgrading to Plasma 5."
- fi
fi
}
# @FUNCTION: kde5_pkg_postrm
# @DESCRIPTION:
-# Function to rebuild the KDE System Configuration Cache after an application has been removed.
+# Updates the various XDG caches (icon, desktop, mime) if necessary.
kde5_pkg_postrm() {
debug-print-function ${FUNCNAME} "$@"
- gnome2_icon_cache_update
xdg_pkg_postrm
}
-_l10n_variant_subdir2root() {
- local l10npart=5
- [[ ${PN} = kde4-l10n ]] && l10npart=4
- local lingua=$(kde_l10n2lingua ${1})
- local src=kde-l10n-${2}-${PV}
- local dest=kde-l10n-${lingua}-${PV}/${l10npart}
-
- # create variant rootdir structure from parent lingua and adapt it
- mkdir -p ${dest} || die "Failed to create ${dest}"
- mv ${src}/${l10npart}/${2}/${lingua} ${dest}/${lingua} || die "Failed to create ${dest}/${lingua}"
- cp -f ${src}/CMakeLists.txt kde-l10n-${lingua}-${PV} || die "Failed to prepare L10N=${1} subdir"
- echo "add_subdirectory(${lingua})" > ${dest}/CMakeLists.txt ||
- die "Failed to prepare ${dest}/CMakeLists.txt"
- cp -f ${src}/${l10npart}/${2}/CMakeLists.txt ${dest}/${lingua} ||
- die "Failed to create ${dest}/${lingua}/CMakeLists.txt"
- sed -e "s/${2}/${lingua}/" -i ${dest}/${lingua}/CMakeLists.txt ||
- die "Failed to prepare ${dest}/${lingua}/CMakeLists.txt"
-
- _l10n_variant_subdir_buster ${1}
-}
-
-_l10n_variant_subdir_buster() {
- local l10npart=5
- [[ ${PN} = kde4-l10n ]] && l10npart=4
- local dir=kde-l10n-$(kde_l10n2lingua ${1})-${PV}/${l10npart}/$(kde_l10n2lingua ${1})
-
- case ${l10npart} in
- 5) sed -e "/^add_subdirectory(/d" -i ${dir}/CMakeLists.txt || die "Failed to cleanup ${dir} subdir" ;;
- 4) sed -e "/^macro.*subdirectory(/d" -i ${dir}/CMakeLists.txt || die "Failed to cleanup ${dir} subdir" ;;
- esac
-
- for subdir in $(find ${dir} -mindepth 1 -maxdepth 1 -type d | sed -e "s:^\./::"); do
- echo "add_subdirectory(${subdir##*/})" >> ${dir}/CMakeLists.txt
- done
-}
-
fi