summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngmar Vanhassel <ingmar@gentoo.org>2008-01-16 22:47:45 +0000
committerIngmar Vanhassel <ingmar@gentoo.org>2008-01-16 22:47:45 +0000
commit54355a0a975213367307017be0a607540249a842 (patch)
treec256c8036d653b56cf866f48602e7e782dc9d73a /eclass/kde4-functions.eclass
parentAdd some ~sparc love. (diff)
downloadhistorical-54355a0a975213367307017be0a607540249a842.tar.gz
historical-54355a0a975213367307017be0a607540249a842.tar.bz2
historical-54355a0a975213367307017be0a607540249a842.zip
Added kde4-functions.eclass - Common ebuild functions for monolithic and split KDE 4 packages.
Diffstat (limited to 'eclass/kde4-functions.eclass')
-rw-r--r--eclass/kde4-functions.eclass484
1 files changed, 484 insertions, 0 deletions
diff --git a/eclass/kde4-functions.eclass b/eclass/kde4-functions.eclass
new file mode 100644
index 000000000000..e63cbe5ece5d
--- /dev/null
+++ b/eclass/kde4-functions.eclass
@@ -0,0 +1,484 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/eclass/kde4-functions.eclass,v 1.1 2008/01/16 22:47:45 ingmar Exp $
+
+# @ECLASS: kde4-functions.eclass
+# @MAINTAINER:
+# kde@gentoo.org
+# @BLURB: Common ebuild functions for monolithic and split KDE 4 packages
+# @DESCRIPTION:
+# This eclass contains all functions shared by the different eclasses,
+# for KDE 4 monolithic and split ebuilds.
+#
+# NOTE: This eclass uses the SLOT dependencies from EAPI="1" or compatible,
+# hence you must define EAPI="1" in the ebuild, before inheriting any eclasses.
+
+# @ECLASS-VARIABLE: KDEBASE
+# @DESCRIPTION:
+# This gets set to a non-zero value when a package is considered a kde or
+# koffice ebuild.
+
+if [[ "${CATEGORY}" == "kde-base" ]]; then
+ debug-print "${ECLASS}: KDEBASE ebuild recognized"
+ KDEBASE="kde-base"
+fi
+
+# is this a koffice ebuild?
+if [[ "${KMNAME}" == "koffice" || "${PN}" == "koffice" ]]; then
+ debug-print "${ECLASS}: KOFFICE ebuild recognized"
+ KDEBASE="koffice"
+fi
+
+# @ECLASS-VARIABLE: KDE_DERIVATION_MAP
+# @DESCRIPTION:
+# Map of the monolithic->split ebuild derivation.
+# Used to build dependencies describing the relationships between them:
+# Monolithic ebuilds block their split counterparts in the same slot, and vice versa.
+#
+# Also see get-parent-package(), get-child-packages(), is-parent-package()
+KDE_DERIVATION_MAP='
+kde-base/kdeaccessibility kde-base/kdeaccessibility-colorschemes
+kde-base/kdeaccessibility kde-base/kdeaccessibility-iconthemes
+kde-base/kdeaccessibility kde-base/kmag
+kde-base/kdeaccessibility kde-base/kmousetool
+kde-base/kdeaccessibility kde-base/kmouth
+kde-base/kdeaccessibility kde-base/kttsd
+kde-base/kdeadmin kde-base/kcron
+kde-base/kdeadmin kde-base/kdat
+kde-base/kdeadmin kde-base/knetworkconf
+kde-base/kdeadmin kde-base/ksysv
+kde-base/kdeadmin kde-base/kuser
+kde-base/kdeadmin kde-base/lilo-config
+kde-base/kdeadmin kde-base/secpolicy
+kde-base/kdeartwork kde-base/kdeartwork-colorschemes
+kde-base/kdeartwork kde-base/kdeartwork-emoticons
+kde-base/kdeartwork kde-base/kdeartwork-icewm-themes
+kde-base/kdeartwork kde-base/kdeartwork-iconthemes
+kde-base/kdeartwork kde-base/kdeartwork-kscreensaver
+kde-base/kdeartwork kde-base/kdeartwork-kworldclock
+kde-base/kdeartwork kde-base/kdeartwork-sounds
+kde-base/kdeartwork kde-base/kdeartwork-styles
+kde-base/kdeartwork kde-base/kdeartwork-wallpapers
+kde-base/kdebase kde-base/dolphin
+kde-base/kdebase kde-base/kappfinder
+kde-base/kdebase kde-base/kdepasswd
+kde-base/kdebase kde-base/kdialog
+kde-base/kdebase kde-base/keditbookmarks
+kde-base/kdebase kde-base/kfind
+kde-base/kdebase kde-base/konqueror
+kde-base/kdebase kde-base/konsole
+kde-base/kdebase kde-base/kwrite
+kde-base/kdebase kde-base/libkonq
+kde-base/kdebase kde-base/nsplugins
+kde-base/kdebase kde-base/drkonqi
+kde-base/kdebase kde-base/kcmshell
+kde-base/kdebase kde-base/kcontrol
+kde-base/kdebase kde-base/kdebase-data
+kde-base/kdebase kde-base/kdebase-kioslaves
+kde-base/kdebase kde-base/kdebugdialog
+kde-base/kdebase kde-base/kde-menu
+kde-base/kdebase kde-base/kdesu
+kde-base/kdebase kde-base/kfile
+kde-base/kdebase kde-base/khelpcenter
+kde-base/kdebase kde-base/kioclient
+kde-base/kdebase kde-base/kmimetypefinder
+kde-base/kdebase kde-base/knetattach
+kde-base/kdebase kde-base/knewstuff
+kde-base/kdebase kde-base/knotify
+kde-base/kdebase kde-base/kpasswdserver
+kde-base/kdebase kde-base/kquitapp
+kde-base/kdebase kde-base/kreadconfig
+kde-base/kdebase kde-base/kstart
+kde-base/kdebase kde-base/kstyles
+kde-base/kdebase kde-base/ktimezoned
+kde-base/kdebase kde-base/ktraderclient
+kde-base/kdebase kde-base/kuiserver
+kde-base/kdebase kde-base/kurifilter-plugins
+kde-base/kdebase kde-base/nepomuk
+kde-base/kdebase kde-base/phonon
+kde-base/kdebase kde-base/soliduiserver
+kde-base/kdebase kde-base/kcheckpass
+kde-base/kdebase kde-base/kcminit
+kde-base/kdebase kde-base/kdebase-startkde
+kde-base/kdebase kde-base/kstartupconfig
+kde-base/kdebase kde-base/kde-menu-icons
+kde-base/kdebase kde-base/kde-wallpapers
+kde-base/kdebase kde-base/kdm
+kde-base/kdebase kde-base/khotkeys
+kde-base/kdebase kde-base/klipper
+kde-base/kdebase kde-base/kmenuedit
+kde-base/kdebase kde-base/krunner
+kde-base/kdebase kde-base/kscreensaver
+kde-base/kdebase kde-base/ksmserver
+kde-base/kdebase kde-base/ksplash
+kde-base/kdebase kde-base/ksysguard
+kde-base/kdebase kde-base/ksystraycmd
+kde-base/kdebase kde-base/ktip
+kde-base/kdebase kde-base/kwin
+kde-base/kdebase kde-base/libkworkspace
+kde-base/kdebase kde-base/libplasma
+kde-base/kdebase kde-base/libtaskmanager
+kde-base/kdebase kde-base/plasma
+kde-base/kdebase kde-base/solid
+kde-base/kdebase kde-base/systemsettings
+kde-base/kdebindings kde-base/kalyptus
+kde-base/kdebindings kde-base/kdejava
+kde-base/kdebindings kde-base/kimono
+kde-base/kdebindings kde-base/kjsembed
+kde-base/kdebindings kde-base/korundum
+kde-base/kdebindings kde-base/krosspython
+kde-base/kdebindings kde-base/krossruby
+kde-base/kdebindings kde-base/pykde4
+kde-base/kdebindings kde-base/qyoto
+kde-base/kdebindings kde-base/qtjava
+kde-base/kdebindings kde-base/qtruby
+kde-base/kdebindings kde-base/qtsharp
+kde-base/kdebindings kde-base/smoke
+kde-base/kdebindings kde-base/xparts
+kde-base/kdeedu kde-base/blinken
+kde-base/kdeedu kde-base/kalgebra
+kde-base/kdeedu kde-base/kalzium
+kde-base/kdeedu kde-base/kanagram
+kde-base/kdeedu kde-base/kbruch
+kde-base/kdeedu kde-base/kgeography
+kde-base/kdeedu kde-base/khangman
+kde-base/kdeedu kde-base/kig
+kde-base/kdeedu kde-base/kiten
+kde-base/kdeedu kde-base/klettres
+kde-base/kdeedu kde-base/kmplot
+kde-base/kdeedu kde-base/kpercentage
+kde-base/kdeedu kde-base/kstars
+kde-base/kdeedu kde-base/ktouch
+kde-base/kdeedu kde-base/kturtle
+kde-base/kdeedu kde-base/kwordquiz
+kde-base/kdeedu kde-base/libkdeedu
+kde-base/kdeedu kde-base/marble
+kde-base/kdeedu kde-base/parley
+kde-base/kdegames kde-base/bovo
+kde-base/kdegames kde-base/katomic
+kde-base/kdegames kde-base/kbattleship
+kde-base/kdegames kde-base/kblackbox
+kde-base/kdegames kde-base/kbounce
+kde-base/kdegames kde-base/kfourinline
+kde-base/kdegames kde-base/kgoldrunner
+kde-base/kdegames kde-base/kiriki
+kde-base/kdegames kde-base/kjumpingcube
+kde-base/kdegames kde-base/klines
+kde-base/kdegames kde-base/kmahjongg
+kde-base/kdegames kde-base/kmines
+kde-base/kdegames kde-base/knetwalk
+kde-base/kdegames kde-base/kolf
+kde-base/kdegames kde-base/konquest
+kde-base/kdegames kde-base/kpat
+kde-base/kdegames kde-base/kreversi
+kde-base/kdegames kde-base/ksame
+kde-base/kdegames kde-base/kshisen
+kde-base/kdegames kde-base/kspaceduel
+kde-base/kdegames kde-base/ksquares
+kde-base/kdegames kde-base/ksudoku
+kde-base/kdegames kde-base/ktuberling
+kde-base/kdegames kde-base/libkdegames
+kde-base/kdegames kde-base/libkmahjongg
+kde-base/kdegames kde-base/lskat
+kde-base/kdegraphics kde-base/gwenview
+kde-base/kdegraphics kde-base/kamera
+kde-base/kdegraphics kde-base/kcolorchooser
+kde-base/kdegraphics kde-base/kgamma
+kde-base/kdegraphics kde-base/kghostview
+kde-base/kdegraphics kde-base/kolourpaint
+kde-base/kdegraphics kde-base/kruler
+kde-base/kdegraphics kde-base/ksnapshot
+kde-base/kdegraphics kde-base/libkscan
+kde-base/kdegraphics kde-base/okular
+kde-base/kdegraphics kde-base/svgpart
+kde-base/kdemultimedia kde-base/juk
+kde-base/kdemultimedia kde-base/kdemultimedia-kioslaves
+kde-base/kdemultimedia kde-base/kmix
+kde-base/kdemultimedia kde-base/kscd
+kde-base/kdemultimedia kde-base/libkcddb
+kde-base/kdemultimedia kde-base/libkcompactdisc
+kde-base/kdenetwork kde-base/kdenetwork-filesharing
+kde-base/kdenetwork kde-base/kdnssd
+kde-base/kdenetwork kde-base/kget
+kde-base/kdenetwork kde-base/knewsticker
+kde-base/kdenetwork kde-base/kopete
+kde-base/kdenetwork kde-base/kppp
+kde-base/kdenetwork kde-base/krdc
+kde-base/kdenetwork kde-base/krfb
+kde-base/kdepim kde-base/akonadi
+kde-base/kdepim kde-base/akregator
+kde-base/kdepim kde-base/certmanager
+kde-base/kdepim kde-base/kabc2mutt
+kde-base/kdepim kde-base/kabcclient
+kde-base/kdepim kde-base/kaddressbook
+kde-base/kdepim kde-base/kalarm
+kde-base/kdepim kde-base/kdemaildir
+kde-base/kdepim kde-base/kdepim-kioslaves
+kde-base/kdepim kde-base/kdepim-kresources
+kde-base/kdepim kde-base/kdepim-wizards
+kde-base/kdepim kde-base/kfeed
+kde-base/kdepim kde-base/kitchensync
+kde-base/kdepim kde-base/kleopatra
+kde-base/kdepim kde-base/kmail
+kde-base/kdepim kde-base/kmailcvt
+kde-base/kdepim kde-base/kmobiletools
+kde-base/kdepim kde-base/knode
+kde-base/kdepim kde-base/knotes
+kde-base/kdepim kde-base/kode
+kde-base/kdepim kde-base/konsolekalendar
+kde-base/kdepim kde-base/kontact
+kde-base/kdepim kde-base/kontact-specialdates
+kde-base/kdepim kde-base/korganizer
+kde-base/kdepim kde-base/korn
+kde-base/kdepim kde-base/kpilot
+kde-base/kdepim kde-base/ktimetracker
+kde-base/kdepim kde-base/ktnef
+kde-base/kdepim kde-base/libkdepim
+kde-base/kdepim kde-base/libkholidays
+kde-base/kdepim kde-base/libkleo
+kde-base/kdepim kde-base/libkpgp
+kde-base/kdepim kde-base/libksieve
+kde-base/kdepim kde-base/mailtransport
+kde-base/kdepim kde-base/mimelib
+kde-base/kdepim kde-base/networkstatus
+kde-base/kdesdk kde-base/cervisia
+kde-base/kdesdk kde-base/kdeaccounts-plugin
+kde-base/kdesdk kde-base/kapptemplate
+kde-base/kdesdk kde-base/kate
+kde-base/kdesdk kde-base/kbabel
+kde-base/kdesdk kde-base/kbugbuster
+kde-base/kdesdk kde-base/kcachegrind
+kde-base/kdesdk kde-base/kdesdk-kioslaves
+kde-base/kdesdk kde-base/kdesdk-misc
+kde-base/kdesdk kde-base/kdesdk-scripts
+kde-base/kdesdk kde-base/kmtrace
+kde-base/kdesdk kde-base/kompare
+kde-base/kdesdk kde-base/kspy
+kde-base/kdesdk kde-base/kstartperf
+kde-base/kdesdk kde-base/strigi-analyzer
+kde-base/kdesdk kde-base/kuiviewer
+kde-base/kdesdk kde-base/poxml
+kde-base/kdesdk kde-base/umbrello
+kde-base/kdetoys kde-base/amor
+kde-base/kdetoys kde-base/kteatime
+kde-base/kdetoys kde-base/ktux
+kde-base/kdetoys kde-base/kweather
+kde-base/kdetoys kde-base/kworldclock
+kde-base/kdeutils kde-base/ark
+kde-base/kdeutils kde-base/kcalc
+kde-base/kdeutils kde-base/kcharselect
+kde-base/kdeutils kde-base/kdessh
+kde-base/kdeutils kde-base/kdf
+kde-base/kdeutils kde-base/kedit
+kde-base/kdeutils kde-base/kfloppy
+kde-base/kdeutils kde-base/kgpg
+kde-base/kdeutils kde-base/khexedit
+kde-base/kdeutils kde-base/kjots
+kde-base/kdeutils kde-base/kmilo
+kde-base/kdeutils kde-base/kregexpeditor
+kde-base/kdeutils kde-base/kdessh
+kde-base/kdeutils kde-base/ktimer
+kde-base/kdeutils kde-base/kwallet
+kde-base/kdeutils kde-base/superkaramba
+kde-base/kdeutils kde-base/sweeper
+kde-base/kdewebdev kde-base/kfilereplace
+kde-base/kdewebdev kde-base/kimagemapeditor
+kde-base/kdewebdev kde-base/klinkstatus
+kde-base/kdewebdev kde-base/kxsldbg
+kde-base/kdewebdev kde-base/quanta
+app-office/koffice app-office/karbon
+app-office/koffice app-office/kchart
+app-office/koffice app-office/kexi
+app-office/koffice app-office/kformula
+app-office/koffice app-office/kivio
+app-office/koffice app-office/koffice-data
+app-office/koffice app-office/koffice-libs
+app-office/koffice app-office/koshell
+app-office/koffice app-office/kplato
+app-office/koffice app-office/kpresenter
+app-office/koffice app-office/krita
+app-office/koffice app-office/kspread
+app-office/koffice app-office/kugar
+app-office/koffice app-office/kword
+'
+
+# @FUNCTION: get-parent-package
+# @USAGE: <split ebuild>
+# @DESCRIPTION:
+# Echoes the name of the monolithic package that a given split ebuild was derived from.
+get-parent-package() {
+ local parent child
+ while read parent child; do
+ if [[ "${child}" == "$1" ]]; then
+ echo ${parent}
+ return 0
+ fi
+ done <<< "$KDE_DERIVATION_MAP"
+ die "Package $target not found in KDE_DERIVATION_MAP, please report bug"
+}
+
+# @FUNCTION: get-child-packages
+# @USAGE: <monolithic ebuild>
+# @DESCRIPTION:
+# Echoes the names of all (split) ebuilds derived from a given monolithic ebuild.
+get-child-packages() {
+ local parent child
+ while read parent child; do
+ [[ "${parent}" == "$1" ]] && echo -n "${child} "
+ done <<< "$KDE_DERIVATION_MAP"
+}
+
+# @FUNCTION: is-parent-package
+# @USAGE: <$CATEGORY/$PN>
+# @DESCRIPTION:
+# Returns zero exit-status if the given package is a parent (monolithic) ebuild.
+# Returns non-zero exit-status if it's not.
+is-parent-package() {
+ local parent child
+ while read parent child; do
+ [[ "${parent}" == "$1" ]] && return 0
+ done <<< "$KDE_DERIVATION_MAP"
+ return 1
+}
+
+# @FUNCTION: buildsycoca
+# @DESCRIPTION:
+# Function to rebuild the KDE System Configuration Cache.
+# All KDE ebuilds should run this in pkg_postinst and pkg_postrm.
+#
+# Note that kde4-base.eclass already does this.
+buildsycoca() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ if [[ -x ${KDEDIR}/bin/kbuildsycoca4 ]] && [[ -z "${ROOT}" || "${ROOT}" == "/" ]]; then
+ # First of all, make sure that the /usr/share/services directory exists
+ # and it has the right permissions
+ mkdir -p /usr/share/services
+ chown root:0 /usr/share/services
+ chmod 0755 /usr/share/services
+
+ # kbuildsycoca4 needs a running dbus session to work correctly.
+ # We have to start a new dbus session, because the DBUS_SESSION_BUS_ADDRESS in the environment
+ # could from from the user's environment (through su [without '-']), causing kbuildsycoca4 to hang.
+
+ einfo "Starting dbus session for kbuildsycoca4"
+ local _i
+ for _i in $(dbus-launch); do
+ # We export both the ADDRESS _and_ the PID. We need the latter only to kill our session.
+ debug-print "Exporting: ${_i}"
+ export "${_i}";
+ done
+ debug-print "kbuildsycoca4 is using ${DBUS_SESSION_BUS_ADDRESS}"
+
+ ebegin "Running kbuildsycoca4 to build global database"
+ # This is needed because we support multiple kde versions installed together.
+ XDG_DATA_DIRS="/usr/share:${KDEDIRS}/share:/usr/local/share"
+ ${KDEDIR}/bin/kbuildsycoca4 --global --noincremental &> /dev/null
+ eend $?
+
+ einfo "Killing dbus session for kbuildsycoca4"
+ debug-print "ADDRES ${DBUS_SESSION_BUS_ADDRESS}"
+ debug-print "PID: ${DBUS_SESSION_BUS_PID}"
+ kill ${DBUS_SESSION_BUS_PID}
+ eend $?
+ unset DBUS_SESSION_BUS_ADDRES DBUS_SESSION_BUS_PID
+ fi
+}
+
+# @FUNCTION: comment_all_add_subdirectory
+# @USAGE: [list of directory names]
+# @DESCRIPTION:
+# recursively comment all add_subdirectory instructions in listed directories
+# except the ones in cmake/.
+comment_all_add_subdirectory() {
+ find "$@" -name CMakeLists.txt -print0 | grep -vFzZ "./cmake" | \
+ xargs -0 sed -i -e '/add_subdirectory/s/^/#DONOTCOMPILE /' || \
+ die "${LINENO}: Initial sed died"
+}
+
+# @ECLASS-VARIABLE: QT4_BUILT_WITH_USE_CHECK
+# @DESCRIPTION:
+# A list of USE flags that x11-libs/qt:4 needs to be built with.
+#
+# This list is automatically appended to KDE4_BUILT_WITH_USE_CHECK,
+# so don't call qt4_pkg_setup manually.
+
+# @ECLASS-VARIABLE: KDE4_BUILT_WITH_USE_CHECK
+# @DESCRIPTION:
+# The contents of $KDE4_BUILT_WITH_USE_CHECK gets fed to built_with_use
+# (eutils.eclass), line per line.
+#
+# Example:
+# @CODE
+# pkg_setup() {
+# KDE4_BUILT_WITH_USE_CHECK="--missing true sys-apps/dbus X"
+# use alsa && KDE4_BUILT_WITH_USE_CHECK="${KDE4_BUILT_WITH_USE_CHECK}
+# --missing true media-libs/alsa-lib midi"
+# kde4-base_pkg_setup
+# }
+# @CODE
+
+# run built_with_use on each flag and print appropriate error messages if any
+# flags are missing
+_kde4-functions_built_with_use() {
+ local missing opt pkg flag flags
+
+ if [[ ${1} = "--missing" ]]; then
+ missing="${1} ${2}" && shift 2
+ fi
+ if [[ ${1:0:1} = "-" ]]; then
+ opt=${1} && shift
+ fi
+
+ pkg=${1} && shift
+
+ for flag in "${@}"; do
+ flags="${flags} ${flag}"
+ if ! built_with_use ${missing} ${opt} ${pkg} ${flag}; then
+ flags="${flags}*"
+ else
+ [[ ${opt} = "-o" ]] && return 0
+ fi
+ done
+ if [[ "${flags# }" = "${@}" ]]; then
+ return 0
+ fi
+ if [[ ${opt} = "-o" ]]; then
+ eerror "This package requires '${pkg}' to be built with any of the following USE flags: '$*'."
+ else
+ eerror "This package requires '${pkg}' to be built with the following USE flags: '${flags# }'."
+ fi
+ return 1
+}
+
+# @FUNCTION: kde4-functions_check_use
+# @DESCRIPTION:
+# Check if the Qt4 libraries are built with the USE flags listed in
+# $QT4_BUILT_WITH_USE_CHECK.
+#
+# Check if a list of packages are built with certain USE flags, as listed in
+# $KDE4_BUILT_WITH_USE_CHECK.
+#
+# If any of the required USE flags are missing, an eerror will be printed for
+# each package with missing USE flags.
+kde4-functions_check_use() {
+ # I like to keep flags sorted
+ QT4_BUILT_WITH_USE_CHECK=$(echo "${QT4_BUILT_WITH_USE_CHECK}" | \
+ tr '[:space:]' '\n' | sort | xargs)
+
+ KDE4_BUILT_WITH_USE_CHECK="x11-libs/qt:4 ${QT4_BUILT_WITH_USE_CHECK}
+ ${KDE4_BUILT_WITH_USE_CHECK}"
+
+ local line missing
+ while read line; do
+ [[ -z ${line} ]] && continue
+ if ! _kde4-functions_built_with_use ${line}; then
+ missing=true
+ fi
+ done <<< "${KDE4_BUILT_WITH_USE_CHECK}"
+ if [[ -n ${missing} ]]; then
+ echo
+ eerror "Flags marked with an * are missing."
+ die "Missing USE flags found"
+ fi
+}