diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
commit | 4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch) | |
tree | ba5f07bf3f9d22d82e54a462313f5d244036c768 /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.eclass | 346 |
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 |