# Copyright 1999-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: kde5-functions.eclass # @MAINTAINER: # kde@gentoo.org # @SUPPORTED_EAPIS: 7 # @BLURB: Common ebuild functions for packages based on KDE Frameworks 5. # @DESCRIPTION: # This eclass contains functions shared by the other KDE eclasses and forms # part of their public API. # # This eclass must not be inherited directly by an ebuild. if [[ -z ${_KDE5_FUNCTIONS_ECLASS} ]]; then _KDE5_FUNCTIONS_ECLASS=1 case ${EAPI} in 7) ;; *) die "EAPI=${EAPI:-0} is not supported" ;; esac # @ECLASS-VARIABLE: QT_MINIMAL # @DESCRIPTION: # Minimum version of Qt to require. This affects add_qt_dep. : ${QT_MINIMAL:=5.12.3} # @ECLASS-VARIABLE: FRAMEWORKS_MINIMAL # @DESCRIPTION: # Minimum version of Frameworks to require. This affects add_frameworks_dep. : ${FRAMEWORKS_MINIMAL:=5.60.0} # @ECLASS-VARIABLE: PLASMA_MINIMAL # @DESCRIPTION: # Minimum version of Plasma to require. This affects add_plasma_dep. : ${PLASMA_MINIMAL:=5.15.5} # @ECLASS-VARIABLE: KDE_APPS_MINIMAL # @DESCRIPTION: # Minimum version of KDE Applications to require. This affects add_kdeapps_dep. : ${KDE_APPS_MINIMAL:=19.04.3} # @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="-${version}" fi if [[ -n ${slot} ]] ; then slot=":${slot}" elif [[ ${SLOT%\/*} = 5 ]] ; then slot=":${SLOT%\/*}" fi echo " ${operator}${category}/${package}${version}${slot}${use}" } # @FUNCTION: add_frameworks_dep # @USAGE: [USE flags] [minimum version] [slot + operator] # @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). # PORTING: no replacement 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=$(ver_cut 1-2) elif [[ -z ${3} ]] ; then version=${FRAMEWORKS_MINIMAL} fi _add_category_dep kde-frameworks "${1}" "${2}" "${version}" "${4}" } # @FUNCTION: add_plasma_dep # @USAGE: [USE flags] [minimum version] [slot + operator] # @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). # PORTING: no replacement 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=$(ver_cut 1-3) elif [[ -z ${3} ]] ; then version=${PLASMA_MINIMAL} fi _add_category_dep kde-plasma "${1}" "${2}" "${version}" "${4}" } # @FUNCTION: add_kdeapps_dep # @USAGE: [USE flags] [minimum version] [slot + operator] # @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). # PORTING: no replacement 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=$(ver_cut 1-3) elif [[ -z ${3} ]] ; then version=${KDE_APPS_MINIMAL} fi _add_category_dep kde-apps "${1}" "${2}" "${version}" "${4}" } # @FUNCTION: add_qt_dep # @USAGE: [USE flags] [minimum version] [slot + operator] # @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). # PORTING: no replacement add_qt_dep() { debug-print-function ${FUNCNAME} "$@" if [[ $# -gt 4 ]]; then die "${FUNCNAME} was called with too many arguments" fi local version=${3} local slot=${4} if [[ -z ${version} ]]; then version=${QT_MINIMAL} fi if [[ -z ${slot} ]]; then slot="5" fi _add_category_dep dev-qt "${1}" "${2}" "${version}" "${slot}" } # @FUNCTION: punt_bogus_dep # @USAGE: # @DESCRIPTION: # Removes a specified dependency from a find_package call with multiple components. # PORTING: Use ecm_punt_bogus_dep from ecm.eclass instead. 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