summaryrefslogtreecommitdiff
path: root/eclass/kde5-functions.eclass
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /eclass/kde5-functions.eclass
reinit the tree, so we can have metadata
Diffstat (limited to 'eclass/kde5-functions.eclass')
-rw-r--r--eclass/kde5-functions.eclass346
1 files changed, 346 insertions, 0 deletions
diff --git a/eclass/kde5-functions.eclass b/eclass/kde5-functions.eclass
new file mode 100644
index 000000000000..2e6b85bbc811
--- /dev/null
+++ b/eclass/kde5-functions.eclass
@@ -0,0 +1,346 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# @ECLASS: kde5-functions.eclass
+# @MAINTAINER:
+# kde@gentoo.org
+# @BLURB: Common ebuild functions for KDE 5 packages
+# @DESCRIPTION:
+# This eclass contains all functions shared by the different eclasses,
+# for KDE 5 ebuilds.
+
+if [[ -z ${_KDE5_FUNCTIONS_ECLASS} ]]; then
+_KDE5_FUNCTIONS_ECLASS=1
+
+inherit toolchain-funcs versionator
+
+# @ECLASS-VARIABLE: EAPI
+# @DESCRIPTION:
+# Currently EAPI 6 is supported.
+case ${EAPI} in
+ 6) ;;
+ *) die "EAPI=${EAPI:-0} is not supported" ;;
+esac
+
+# determine the build type
+if [[ ${PV} = *9999* ]]; then
+ KDE_BUILD_TYPE="live"
+else
+ KDE_BUILD_TYPE="release"
+fi
+export KDE_BUILD_TYPE
+
+case ${CATEGORY} in
+ kde-frameworks)
+ [[ ${KDE_BUILD_TYPE} = live ]] && : ${FRAMEWORKS_MINIMAL:=9999}
+ ;;
+ kde-plasma)
+ if [[ ${KDE_BUILD_TYPE} = live ]]; then
+ : ${FRAMEWORKS_MINIMAL:=9999}
+ fi
+ ;;
+esac
+
+# @ECLASS-VARIABLE: QT_MINIMAL
+# @DESCRIPTION:
+# Minimal Qt version to require for the package.
+: ${QT_MINIMAL:=5.7.1}
+
+# @ECLASS-VARIABLE: FRAMEWORKS_MINIMAL
+# @DESCRIPTION:
+# Minimal Frameworks version to require for the package.
+: ${FRAMEWORKS_MINIMAL:=5.37.0}
+
+# @ECLASS-VARIABLE: PLASMA_MINIMAL
+# @DESCRIPTION:
+# Minimal Plasma version to require for the package.
+: ${PLASMA_MINIMAL:=5.10.5}
+
+# @ECLASS-VARIABLE: KDE_APPS_MINIMAL
+# @DESCRIPTION:
+# Minimal KDE Applications version to require for the package.
+: ${KDE_APPS_MINIMAL:=14.12.0}
+
+# @ECLASS-VARIABLE: KDE_GCC_MINIMAL
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Minimal GCC version to require for the package.
+
+# @ECLASS-VARIABLE: KDEBASE
+# @DESCRIPTION:
+# This gets set to a non-zero value when a package is considered a
+# kdevelop ebuild.
+if [[ ${KMNAME-${PN}} = kdevelop ]]; then
+ KDEBASE=kdevelop
+fi
+
+debug-print "${ECLASS}: ${KDEBASE} ebuild recognized"
+
+# @ECLASS-VARIABLE: KDE_SCM
+# @DESCRIPTION:
+# SCM to use if this is a live ebuild.
+: ${KDE_SCM:=git}
+
+case ${KDE_SCM} in
+ git) ;;
+ *) die "KDE_SCM: ${KDE_SCM} is not supported" ;;
+esac
+
+# @FUNCTION: _check_gcc_version
+# @INTERNAL
+# @DESCRIPTION:
+# Determine if the current GCC version is acceptable, otherwise die.
+_check_gcc_version() {
+ if [[ ${MERGE_TYPE} != binary && -v KDE_GCC_MINIMAL ]] && tc-is-gcc; then
+
+ local version=$(gcc-version)
+ local major=${version%.*}
+ local minor=${version#*.}
+ local min_major=${KDE_GCC_MINIMAL%.*}
+ local min_minor=${KDE_GCC_MINIMAL#*.}
+
+ debug-print "GCC version check activated"
+ debug-print "Version detected:"
+ debug-print " - Full: ${version}"
+ debug-print " - Major: ${major}"
+ debug-print " - Minor: ${minor}"
+ debug-print "Version required:"
+ debug-print " - Major: ${min_major}"
+ debug-print " - Minor: ${min_minor}"
+
+ [[ ${major} -lt ${min_major} ]] || \
+ ( [[ ${major} -eq ${min_major} && ${minor} -lt ${min_minor} ]] ) \
+ && die "Sorry, but gcc-${KDE_GCC_MINIMAL} or later is required for this package (found ${version})."
+ fi
+}
+
+# @FUNCTION: _add_category_dep
+# @INTERNAL
+# @DESCRIPTION:
+# Implementation of add_plasma_dep, add_frameworks_dep, add_kdeapps_dep,
+# and finally, add_qt_dep.
+_add_category_dep() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ local category=${1}
+ local package=${2}
+ local use=${3}
+ local version=${4}
+ local slot=${5}
+
+ if [[ -n ${use} ]] ; then
+ local use="[${use}]"
+ fi
+
+ if [[ -n ${version} ]] ; then
+ local operator=">="
+ local version="-$(get_version_component_range 1-3 ${version})"
+ fi
+
+ if [[ -n ${slot} ]] ; then
+ slot=":${slot}"
+ elif [[ ${SLOT%\/*} = 4 || ${SLOT%\/*} = 5 ]] && ! has kde5-meta-pkg ${INHERITED} ; then
+ slot=":${SLOT%\/*}"
+ fi
+
+ echo " ${operator}${category}/${package}${version}${slot}${use}"
+}
+
+# @FUNCTION: add_frameworks_dep
+# @USAGE: <package> [USE flags] [minimum version]
+# @DESCRIPTION:
+# Create proper dependency for kde-frameworks/ dependencies.
+# This takes 1 to 4 arguments. The first being the package name, the optional
+# second is additional USE flags to append, and the optional third is the
+# version to use instead of the automatic version (use sparingly). In addition,
+# the optional fourth argument defines slot+operator instead of automatic slot
+# (use even more sparingly).
+# The output of this should be added directly to DEPEND/RDEPEND, and may be
+# wrapped in a USE conditional (but not an || conditional without an extra set
+# of parentheses).
+add_frameworks_dep() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ if [[ $# -gt 4 ]]; then
+ die "${FUNCNAME} was called with too many arguments"
+ fi
+
+ local version
+
+ if [[ -n ${3} ]]; then
+ version=${3}
+ elif [[ ${CATEGORY} = kde-frameworks ]]; then
+ version=$(get_version_component_range 1-2)
+ elif [[ -z "${version}" ]] ; then
+ version=${FRAMEWORKS_MINIMAL}
+ fi
+
+ _add_category_dep kde-frameworks "${1}" "${2}" "${version}" "${4}"
+}
+
+# @FUNCTION: add_plasma_dep
+# @USAGE: <package> [USE flags] [minimum version]
+# @DESCRIPTION:
+# Create proper dependency for kde-plasma/ dependencies.
+# This takes 1 to 4 arguments. The first being the package name, the optional
+# second is additional USE flags to append, and the optional third is the
+# version to use instead of the automatic version (use sparingly). In addition,
+# the optional fourth argument defines slot+operator instead of automatic slot
+# (use even more sparingly).
+# The output of this should be added directly to DEPEND/RDEPEND, and may be
+# wrapped in a USE conditional (but not an || conditional without an extra set
+# of parentheses).
+add_plasma_dep() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ if [[ $# -gt 4 ]]; then
+ die "${FUNCNAME} was called with too many arguments"
+ fi
+
+ local version
+
+ if [[ -n ${3} ]]; then
+ version=${3}
+ elif [[ ${CATEGORY} = kde-plasma ]]; then
+ version=${PV}
+ elif [[ -z "${version}" ]] ; then
+ version=${PLASMA_MINIMAL}
+ fi
+
+ _add_category_dep kde-plasma "${1}" "${2}" "${version}" "${4}"
+}
+
+# @FUNCTION: add_kdeapps_dep
+# @USAGE: <package> [USE flags] [minimum version]
+# @DESCRIPTION:
+# Create proper dependency for kde-apps/ dependencies.
+# This takes 1 to 4 arguments. The first being the package name, the optional
+# second is additional USE flags to append, and the optional third is the
+# version to use instead of the automatic version (use sparingly). In addition,
+# the optional fourth argument defines slot+operator instead of automatic slot
+# (use even more sparingly).
+# The output of this should be added directly to DEPEND/RDEPEND, and may be
+# wrapped in a USE conditional (but not an || conditional without an extra set
+# of parentheses).
+add_kdeapps_dep() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ if [[ $# -gt 4 ]]; then
+ die "${FUNCNAME} was called with too many arguments"
+ fi
+
+ local version
+
+ if [[ -n ${3} ]]; then
+ version=${3}
+ elif [[ ${CATEGORY} = kde-apps ]]; then
+ version=${PV}
+ elif [[ -z "${version}" ]] ; then
+ version=${KDE_APPS_MINIMAL}
+ fi
+
+ _add_category_dep kde-apps "${1}" "${2}" "${version}" "${4}"
+}
+
+# @FUNCTION: add_qt_dep
+# @USAGE: <package> [USE flags] [minimum version]
+# @DESCRIPTION:
+# Create proper dependency for dev-qt/ dependencies.
+# This takes 1 to 4 arguments. The first being the package name, the optional
+# second is additional USE flags to append, and the optional third is the
+# version to use instead of the automatic version (use sparingly). In addition,
+# the optional fourth argument defines slot+operator instead of automatic slot
+# (use even more sparingly).
+# The output of this should be added directly to DEPEND/RDEPEND, and may be
+# wrapped in a USE conditional (but not an || conditional without an extra set
+# of parentheses).
+add_qt_dep() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ if [[ $# -gt 4 ]]; then
+ die "${FUNCNAME} was called with too many arguments"
+ fi
+
+ local version
+ local slot=${4}
+
+ if [[ -n ${3} ]]; then
+ version=${3}
+ elif [[ -z "${version}" ]]; then
+ version=${QT_MINIMAL}
+ fi
+
+ if [[ -z ${slot} ]]; then
+ slot="5"
+ fi
+
+ _add_category_dep dev-qt "${1}" "${2}" "${version}" "${slot}"
+}
+
+# @FUNCTION: get_kde_version
+# @DESCRIPTION:
+# Translates an ebuild version into a major.minor KDE SC
+# release version. If no version is specified, ${PV} is used.
+get_kde_version() {
+ local ver=${1:-${PV}}
+ local major=$(get_major_version ${ver})
+ local minor=$(get_version_component_range 2 ${ver})
+ local micro=$(get_version_component_range 3 ${ver})
+ if [[ ${ver} == 9999 ]]; then
+ echo live
+ else
+ (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1))
+ fi
+}
+
+# @FUNCTION: kde_l10n2lingua
+# @USAGE: <l10n>...
+# @INTERNAL
+# @DESCRIPTION:
+# Output KDE lingua flag name(s) (without prefix(es)) appropriate for
+# given l10n(s).
+kde_l10n2lingua() {
+ local l
+ for l; do
+ case ${l} in
+ ca-valencia) echo ca@valencia;;
+ sr-ijekavsk) echo sr@ijekavian;;
+ sr-Latn-ijekavsk) echo sr@ijekavianlatin;;
+ sr-Latn) echo sr@latin;;
+ uz-Cyrl) echo uz@cyrillic;;
+ *) echo "${l/-/_}";;
+ esac
+ done
+}
+
+# @FUNCTION: punt_bogus_dep
+# @USAGE: <prefix> <dependency>
+# @DESCRIPTION:
+# Removes a specified dependency from a find_package call with multiple components.
+punt_bogus_dep() {
+ local prefix=${1}
+ local dep=${2}
+
+ if [[ ! -e "CMakeLists.txt" ]]; then
+ return
+ fi
+
+ pcregrep -Mni "(?s)find_package\s*\(\s*${prefix}[^)]*?${dep}.*?\)" CMakeLists.txt > "${T}/bogus${dep}"
+
+ # pcregrep returns non-zero on no matches/error
+ if [[ $? != 0 ]] ; then
+ return
+ fi
+
+ local length=$(wc -l "${T}/bogus${dep}" | cut -d " " -f 1)
+ local first=$(head -n 1 "${T}/bogus${dep}" | cut -d ":" -f 1)
+ local last=$(( ${length} + ${first} - 1))
+
+ sed -e "${first},${last}s/${dep}//" -i CMakeLists.txt || die
+
+ if [[ ${length} = 1 ]] ; then
+ sed -e "/find_package\s*(\s*${prefix}\(\s\+\(REQUIRED\|CONFIG\|COMPONENTS\|\${[A-Z0-9_]*}\)\)\+\s*)/Is/^/# removed by kde5-functions.eclass - /" -i CMakeLists.txt || die
+ fi
+}
+
+fi