| # Copyright 1999-2016 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Id$ |
| |
| # @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 |
| |
| # @ECLASS-VARIABLE: FRAMEWORKS_MINIMAL |
| # @DESCRIPTION: |
| # Minimal Frameworks version to require for the package. |
| : ${FRAMEWORKS_MINIMAL:=5.23.0} |
| |
| # @ECLASS-VARIABLE: PLASMA_MINIMAL |
| # @DESCRIPTION: |
| # Minimal Plasma version to require for the package. |
| : ${PLASMA_MINIMAL:=5.4.1} |
| |
| # @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 |
| elif [[ ${KMNAME} = kde-l10n || ${PN} = kde-l10n ]]; then |
| KDEBASE=kdel10n |
| 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 |
| |
| # determine the build type |
| if [[ ${PV} = *9999* ]]; then |
| KDE_BUILD_TYPE="live" |
| else |
| KDE_BUILD_TYPE="release" |
| fi |
| export KDE_BUILD_TYPE |
| |
| # @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 |
| # In KDE applications world, 5.9999 > yy.mm.x |
| if [[ ${PV} = 5.9999 || ${PV} = 9999 ]]; then |
| version=5.9999 |
| else |
| version=${KDE_APPS_MINIMAL} |
| fi |
| 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 |
| |
| if [[ -n ${3} ]]; then |
| version=${3} |
| elif [[ -z "${version}" ]] ; then |
| version=${QT_MINIMAL} |
| fi |
| |
| _add_category_dep dev-qt "${1}" "${2}" "${version}" "${4}" |
| } |
| |
| # @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 |