diff options
author | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 13:49:04 -0700 |
---|---|---|
committer | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 17:38:18 -0700 |
commit | 56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch) | |
tree | 3f91093cdb475e565ae857f1c5a7fd339e2d781e /eclass/kde4-functions.eclass | |
download | gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2 gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip |
proj/gentoo: Initial commit
This commit represents a new era for Gentoo:
Storing the gentoo-x86 tree in Git, as converted from CVS.
This commit is the start of the NEW history.
Any historical data is intended to be grafted onto this point.
Creation process:
1. Take final CVS checkout snapshot
2. Remove ALL ChangeLog* files
3. Transform all Manifests to thin
4. Remove empty Manifests
5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
5.1. Do not touch files with -kb/-ko keyword flags.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests
X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project
X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration
X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn
X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration
X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'eclass/kde4-functions.eclass')
-rw-r--r-- | eclass/kde4-functions.eclass | 413 |
1 files changed, 413 insertions, 0 deletions
diff --git a/eclass/kde4-functions.eclass b/eclass/kde4-functions.eclass new file mode 100644 index 000000000000..f7a3bda221e4 --- /dev/null +++ b/eclass/kde4-functions.eclass @@ -0,0 +1,413 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +# @ECLASS: kde4-functions.eclass +# @MAINTAINER: +# kde@gentoo.org +# @BLURB: Common ebuild functions for KDE 4 packages +# @DESCRIPTION: +# This eclass contains all functions shared by the different eclasses, +# for KDE 4 ebuilds. + +if [[ -z ${_KDE4_FUNCTIONS_ECLASS} ]]; then +_KDE4_FUNCTIONS_ECLASS=1 + +inherit versionator + +# @ECLASS-VARIABLE: EAPI +# @DESCRIPTION: +# Currently kde4 eclasses support EAPI 5. +case ${EAPI} in + 5) : ;; + *) die "EAPI=${EAPI:-0} is not supported" ;; +esac + +# @ECLASS-VARIABLE: KDE_OVERRIDE_MINIMAL +# @DESCRIPTION: +# For use only in very few well-defined cases; normally it should be unset. +# If this variable is set, all calls to add_kdebase_dep return a dependency on +# at least this version, independent of the version of the package itself. +# If you know exactly that one specific NEW KDE component builds and runs fine +# with all the rest of KDE at an OLDER version, you can set this old version here. +# Warning- may lead to general instability and kill your pet targh. + +# @ECLASS-VARIABLE: KDEBASE +# @DESCRIPTION: +# This gets set to a non-zero value when a package is considered a kde or +# kdevelop ebuild. +if [[ ${CATEGORY} = kde-base || ${CATEGORY} = kde-apps ]]; then + debug-print "${ECLASS}: KDEBASE ebuild recognized" + KDEBASE=kde-base +elif [[ ${KMNAME-${PN}} = kdevelop ]]; then + KDEBASE=kdevelop +fi + +debug-print "${ECLASS}: ${KDEBASE} ebuild recognized" + +# determine the build type +if [[ ${PV} = *9999* ]]; then + KDE_BUILD_TYPE="live" +else + KDE_BUILD_TYPE="release" +fi +export KDE_BUILD_TYPE + +# Set reponame and SCM for modules that have fully migrated to git +# (hack - it's here because it needs to be before SCM inherits from kde4-base) +if [[ ${KDE_BUILD_TYPE} == live ]]; then + case "${KMNAME}" in + kdebase-workspace) + EGIT_REPONAME=${EGIT_REPONAME:=kde-workspace} + ;; + kdebase-runtime) + EGIT_REPONAME=${EGIT_REPONAME:=kde-runtime} + ;; + esac +fi + +# @ECLASS-VARIABLE: KDE_SCM +# @DESCRIPTION: +# If this is a live package which scm does it use +# Everything else uses git by default +KDE_SCM="${KDE_SCM:-git}" +case ${KDE_SCM} in + svn|git) ;; + *) die "KDE_SCM: ${KDE_SCM} is not supported" ;; +esac + +# @ECLASS-VARIABLE: KDE_LINGUAS +# @DESCRIPTION: +# This is a whitespace-separated list of translations this ebuild supports. +# These translations are automatically added to IUSE. Therefore ebuilds must set +# this variable before inheriting any eclasses. To enable only selected +# translations, ebuilds must call enable_selected_linguas(). kde4-{base,meta}.eclass does +# this for you. +# +# Example: KDE_LINGUAS="de en_GB nl" +if [[ ${KDE_BUILD_TYPE} != live || -n ${KDE_LINGUAS_LIVE_OVERRIDE} ]]; then + for _lingua in ${KDE_LINGUAS}; do + IUSE="${IUSE} linguas_${_lingua}" + done +fi + +# @FUNCTION: buildsycoca +# @DESCRIPTION: +# Function to rebuild the KDE System Configuration Cache. +# All KDE ebuilds should run this in pkg_postinst and pkg_postrm. +buildsycoca() { + debug-print-function ${FUNCNAME} "$@" + + # We no longer need to run kbuildsycoca4, as kded does that automatically, as needed + + # fix permission for some directories + for x in usr/share/{config,kde4}; do + DIRS=${EROOT}usr + [[ -d "${EROOT}${x}" ]] || break # nothing to do if directory does not exist + # fixes Bug 318237 + if use userland_BSD ; then + [[ $(stat -f %p "${EROOT}${x}") != 40755 ]] + local stat_rtn="$?" + else + [[ $(stat --format=%a "${EROOT}${x}") != 755 ]] + local stat_rtn=$? + fi + if [[ $stat_rtn != 1 ]] ; then + ewarn "QA Notice:" + ewarn "Package ${PN} is breaking ${EROOT}${x} permissions." + ewarn "Please report this issue to gentoo bugzilla." + einfo "Permissions will get adjusted automatically now." + find "${EROOT}${x}" -type d -print0 | xargs -0 chmod 755 + fi + done +} + +# @FUNCTION: comment_all_add_subdirectory +# @USAGE: [list of directory names] +# @DESCRIPTION: +# Recursively comment all add_subdirectory instructions in listed directories, +# except those in cmake/. +comment_all_add_subdirectory() { + find "$@" -name CMakeLists.txt -print0 | grep -vFzZ "./cmake" | \ + xargs -0 sed -i \ + -e '/^[[:space:]]*add_subdirectory/s/^/#DONOTCOMPILE /' \ + -e '/^[[:space:]]*ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' \ + -e '/^[[:space:]]*macro_optional_add_subdirectory/s/^/#DONOTCOMPILE /' \ + -e '/^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' \ + || die "${LINENO}: Initial sed died" +} + +# @FUNCTION: enable_selected_linguas +# @DESCRIPTION: +# Enable translations based on LINGUAS settings and translations supported by +# the package (see KDE_LINGUAS). By default, translations are found in "${S}"/po +# but this default can be overridden by defining KDE_LINGUAS_DIR. +enable_selected_linguas() { + debug-print-function ${FUNCNAME} "$@" + + local x + + # if there is no linguas defined we enable everything + if ! $(env | grep -q "^LINGUAS="); then + return 0 + fi + + # @ECLASS-VARIABLE: KDE_LINGUAS_DIR + # @DESCRIPTION: + # Specified folder where application translations are located. + # Can be defined as array of folders where translations are located. + # Note that space separated list of dirs is not supported. + # Default value is set to "po". + if [[ "$(declare -p KDE_LINGUAS_DIR 2>/dev/null 2>&1)" == "declare -a"* ]]; then + debug-print "$FUNCNAME: we have these subfolders defined: ${KDE_LINGUAS_DIR}" + for x in ${KDE_LINGUAS_DIR[@]}; do + _enable_selected_linguas_dir ${x} + done + else + KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:="po"} + _enable_selected_linguas_dir ${KDE_LINGUAS_DIR} + fi +} + +# @FUNCTION: enable_selected_doc_linguas +# @DESCRIPTION: +# Enable only selected linguas enabled doc folders. +enable_selected_doc_linguas() { + debug-print-function ${FUNCNAME} "$@" + + # @ECLASS-VARIABLE: KDE_DOC_DIRS + # @DESCRIPTION: + # Variable specifying whitespace separated patterns for documentation locations. + # Default is "doc/%lingua" + KDE_DOC_DIRS=${KDE_DOC_DIRS:='doc/%lingua'} + local linguas + for pattern in ${KDE_DOC_DIRS}; do + + local handbookdir=`dirname ${pattern}` + local translationdir=`basename ${pattern}` + # Do filename pattern supplied, treat as directory + [[ ${handbookdir} = '.' ]] && handbookdir=${translationdir} && translationdir= + [[ -d ${handbookdir} ]] || die 'wrong doc dir specified' + + if ! use handbook; then + # Disable whole directory + sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \ + -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \ + -i CMakeLists.txt || die 'failed to comment out all handbooks' + else + # if there is no linguas defined we enable everything (i.e. comment out nothing) + if ! $(env | grep -q "^LINGUAS="); then + return 0 + fi + + # Disable subdirectories recursively + comment_all_add_subdirectory "${handbookdir}" + + # In certain packages, the default handbook is en_US instead of the usual en. Since there is no en_US 'translation', + # it makes no sense to add to KDE_LINGUAS which causes this type of handbook to not be installed. + if [[ -d "${handbookdir}/en_US" && ! -d "${handbookdir}/en" ]]; then + mv "${handbookdir}/en_US" "${handbookdir}/en" || die + sed -e "s/en_US/en/" -i "${handbookdir}/CMakeLists.txt" + fi + + # Add requested translations + local lingua + for lingua in en ${KDE_LINGUAS}; do + if [[ ${lingua} = en ]] || use linguas_${lingua}; then + if [[ -d ${handbookdir}/${translationdir//%lingua/${lingua}} ]]; then + sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \ + -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \ + -i "${handbookdir}"/CMakeLists.txt && ! has ${lingua} ${linguas} && linguas="${linguas} ${lingua}" + fi + fi + done + fi + + done + [[ -n "${linguas}" ]] && einfo "Enabling handbook translations:${linguas}" +} + +# Functions handling KMLOADLIBS and KMSAVELIBS + +# @FUNCTION: save_library_dependencies +# @DESCRIPTION: +# Add exporting CMake dependencies for current package +save_library_dependencies() { + local depsfile="${T}/${PN}" + + ebegin "Saving library dependencies in ${depsfile##*/}" + echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || \ + die "Failed to save the library dependencies." + eend $? +} + +# @FUNCTION: install_library_dependencies +# @DESCRIPTION: +# Install generated CMake library dependencies to /var/lib/kde +install_library_dependencies() { + local depsfile="${T}/${PN}" + + ebegin "Installing library dependencies as ${depsfile##*/}" + insinto /var/lib/kde + doins "${depsfile}" || die "Failed to install library dependencies." + eend $? +} + +# @FUNCTION: load_library_dependencies +# @DESCRIPTION: +# Inject specified library dependencies in current package +load_library_dependencies() { + local pn i depsfile + ebegin "Injecting library dependencies from '${KMLOADLIBS}'" + + i=0 + for pn in ${KMLOADLIBS} ; do + ((i++)) + depsfile="${EPREFIX}/var/lib/kde/${pn}" + [[ -r ${depsfile} ]] || depsfile="${EPREFIX}/var/lib/kde/${pn}:$(get_kde_version)" + [[ -r ${depsfile} ]] || die "Depsfile '${depsfile}' not accessible. You probably need to reinstall ${pn}." + sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \ + die "Failed to include library dependencies for ${pn}" + done + eend $? +} + +# @FUNCTION: add_kdeapps_dep +# @DESCRIPTION: +# Create proper dependency for kde-apps/ dependencies. +# This takes 1 to 3 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). +# 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} "$@" + + local ver + + if [[ -n ${3} ]]; then + ver=${3} + elif [[ -n ${KDE_OVERRIDE_MINIMAL} ]]; then + ver=${KDE_OVERRIDE_MINIMAL} + elif [[ ${KDEBASE} != kde-base ]]; then + ver=${KDE_MINIMAL} + # if building stable-live version depend just on the raw KDE version + # to allow merging packages against more stable basic stuff + elif [[ ${PV} == *.9999 ]]; then + ver=$(get_kde_version) + else + ver=${PV} + fi + + [[ -z ${1} ]] && die "Missing parameter" + + #FIXME + # Drop aqua= from kf5 packages + echo " >=kde-apps/${1}-${ver}:4[aqua=${2:+,${2}}]" +} + +# @FUNCTION: add_kdebase_dep +# @DESCRIPTION: +# Create proper dependency for kde-base/ dependencies. +# This takes 1 to 3 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). +# 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_kdebase_dep() { + debug-print-function ${FUNCNAME} "$@" + + local ver + + if [[ -n ${3} ]]; then + ver=${3} + elif [[ -n ${KDE_OVERRIDE_MINIMAL} ]]; then + ver=${KDE_OVERRIDE_MINIMAL} + elif [[ -n ${KDE_MINIMAL} ]]; then + ver=${KDE_MINIMAL} + # if building live version depend on the final release since there will + # not be any more major development. this solves dep errors as not all + # packages have kde-base live versions now + + # depend on the last sane released version where the normal >=${PV} dep + # is not possible + elif [[ ${CATEGORY} == kde-apps || ${PV} == *9999 ]]; then + ver=4.14.3 + else + ver=${PV} + fi + + [[ -z ${1} ]] && die "Missing parameter" + + echo " >=kde-base/${1}-${ver}:4[aqua=${2:+,${2}}]" +} + +# local function to enable specified translations for specified directory +# used from kde4-functions_enable_selected_linguas function +_enable_selected_linguas_dir() { + local lingua linguas sr_mess wp + local dir=${1} + + [[ -d ${dir} ]] || die "linguas dir \"${dir}\" does not exist" + comment_all_add_subdirectory "${dir}" + pushd "${dir}" > /dev/null + + # fix all various crazy sr@Latn variations + # this part is only ease for ebuilds, so there wont be any die when this + # fail at any point + sr_mess="sr@latn sr@latin sr@Latin" + for wp in ${sr_mess}; do + [[ -e ${wp}.po ]] && mv "${wp}.po" "sr@Latn.po" + if [[ -d ${wp} ]]; then + # move dir and fix cmakelists + mv "${wp}" "sr@Latn" + sed -i \ + -e "s:${wp}:sr@Latn:g" \ + CMakeLists.txt + fi + done + + for lingua in ${KDE_LINGUAS}; do + if [[ -e ${lingua}.po ]]; then + mv "${lingua}.po" "${lingua}.po.old" + fi + done + + for lingua in ${KDE_LINGUAS}; do + if use linguas_${lingua} ; then + if [[ -d ${lingua} ]]; then + linguas="${linguas} ${lingua}" + sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \ + -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \ + -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed." + fi + if [[ -e ${lingua}.po.old ]]; then + linguas="${linguas} ${lingua}" + mv "${lingua}.po.old" "${lingua}.po" + fi + fi + done + [[ -n ${linguas} ]] && echo ">>> Enabling languages: ${linguas}" + + popd > /dev/null +} + +# @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 +} + +fi |