123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- # Copyright 1999-2016 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 ! [[ $(get_version_component_range 2) -le 8 && $(get_version_component_range 3) -lt 50 ]]; then
- : ${QT_MINIMAL:=5.7.1}
- fi
- if [[ ${KDE_BUILD_TYPE} = live ]]; then
- : ${FRAMEWORKS_MINIMAL:=9999}
- : ${QT_MINIMAL:=5.7.1}
- fi
- ;;
- esac
- # @ECLASS-VARIABLE: QT_MINIMAL
- # @DESCRIPTION:
- # Minimal Qt version to require for the package.
- : ${QT_MINIMAL:=5.6.1}
- # @ECLASS-VARIABLE: FRAMEWORKS_MINIMAL
- # @DESCRIPTION:
- # Minimal Frameworks version to require for the package.
- : ${FRAMEWORKS_MINIMAL:=5.29.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
- # @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
- 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
|