diff options
Diffstat (limited to 'gentoo/eclass/kde.eclass')
-rw-r--r-- | gentoo/eclass/kde.eclass | 608 |
1 files changed, 608 insertions, 0 deletions
diff --git a/gentoo/eclass/kde.eclass b/gentoo/eclass/kde.eclass new file mode 100644 index 000000000..b85a9bb89 --- /dev/null +++ b/gentoo/eclass/kde.eclass @@ -0,0 +1,608 @@ +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/eclass/kde.eclass,v 1.223 2009/05/12 12:55:46 tampakrap Exp $ + +# @ECLASS: kde.eclass +# @MAINTAINER: +# kde@gentoo.org +# +# original author Dan Armak <danarmak@gentoo.org> +# +# Revisions Caleb Tennis <caleb@gentoo.org> +# @BLURB: The kde eclass is inherited by all kde-* eclasses. +# @DESCRIPTION: +# This eclass is inherited by all kde-* eclasses. Few ebuilds inherit straight from here. + +[[ -z ${WANT_AUTOMAKE} ]] && WANT_AUTOMAKE="1.9" + +inherit base eutils kde-functions flag-o-matic libtool autotools + +DESCRIPTION="Based on the $ECLASS eclass" +HOMEPAGE="http://www.kde.org/" +IUSE="debug elibc_FreeBSD" + + +if [[ ${CATEGORY} == "kde-base" ]]; then + if [[ ${PV##*.} -lt 10 ]] ; then + # Keep old ebuilds as is + IUSE="${IUSE} kdeenablefinal" + else + # Don't use --enable-final anymore. Does only cause problems for users and + # as an unwelcome extra invalid bug reports, without any reasonable benefit. + + # Get the aRts dependencies right - finally. + case "${PN}" in + blinken|juk|kalarm|kanagram|kbounce|kcontrol|konq-plugins|kscd|kscreensaver|kttsd|kwifimanager|kdelibs) ARTS_REQUIRED="" ;; + artsplugin-*|kaboodle|kasteroids|kdemultimedia-arts|kolf|krec|ksayit|noatun*) ARTS_REQUIRED="yes" ;; + *) ARTS_REQUIRED="never" ;; + esac + fi +fi + +if [[ ${ARTS_REQUIRED} != "yes" && ${ARTS_REQUIRED} != "never" && ${PN} != "arts" ]]; then + IUSE="${IUSE} arts" +fi + +# @ECLASS-VARIABLE: KDE_S +# @DESCRIPTION: +# Like the 'normal' ${S} this variable takes the path to the temporary build +# directory. If unset ${S} will be used. + +# @ECLASS-VARIABLE: USE_KEG_PACKAGING +# @DESCRIPTION: +# Set USE_KEG_PACKAGING=1 before inheriting if the package use extragear-like +# packaging and then supports ${LANGS} and ${LANGS_DOC} variables. By default +# translations are found in the po subdirectory of ${S}. Set KEG_PO_DIR to +# override this default. +if [[ -n ${USE_KEG_PACKAGING} && -n "${LANGS}${LANGS_DOC}" ]]; then + for lang in ${LANGS} ${LANGS_DOC}; do + IUSE="${IUSE} linguas_${lang}" + done +fi + +DEPEND="sys-devel/make + dev-util/pkgconfig + dev-lang/perl" + +if [[ ${CATEGORY} != "kde-base" ]] || [[ ${CATEGORY} == "kde-base" && ${PV##*.} -lt 10 ]] ; then + DEPEND="${DEPEND} + x11-libs/libXt + x11-proto/xf86vidmodeproto + xinerama? ( x11-proto/xineramaproto )" + RDEPEND="xinerama? ( x11-libs/libXinerama )" + IUSE="${IUSE} xinerama" +else + RDEPEND="" +fi + +if [[ ${ARTS_REQUIRED} == "yes" ]]; then + DEPEND="${DEPEND} kde-base/arts" + RDEPEND="${RDEPEND} kde-base/arts" +elif [[ ${ARTS_REQUIRED} != "never" && ${PN} != "arts" ]]; then + DEPEND="${DEPEND} arts? ( kde-base/arts )" + RDEPEND="${RDEPEND} arts? ( kde-base/arts )" +fi + +# overridden in other places like kde-dist, kde-source and some individual ebuilds +SLOT="0" + +# @ECLASS-VARIABLE: ARTS_REQUIRED +# @DESCRIPTION: +# Is aRTs-support required or not? Possible values are 'yes', 'never'. Otherwise +# leave this variable unset. This results in an arts USE flag. + +# @FUNCTION: kde_pkg_setup +# @DESCRIPTION: +# Some basic test about arts-support. It also filters some compiler flags +kde_pkg_setup() { + if [[ ${PN} != "arts" ]] && [[ ${PN} != "kdelibs" ]] ; then + if [[ ${ARTS_REQUIRED} == 'yes' ]] || \ + ( [[ ${ARTS_REQUIRED} != "never" ]] && use arts ) ; then + if ! built_with_use =kde-base/kdelibs-3.5* arts ; then + if has arts ${IUSE} && use arts; then + eerror "You are trying to compile ${CATEGORY}/${PF} with the \"arts\" USE flag enabled." + else + eerror "The package ${CATEGORY}/${PF} you're trying to merge requires aRTs." + fi + eerror "However, $(best_version =kde-base/kdelibs-3.5*) was compiled with the arts USE flag disabled." + eerror + if has arts ${IUSE} && use arts; then + eerror "You must either disable this USE flag, or recompile" + else + eerror "To build this package you have to recompile" + fi + eerror "$(best_version =kde-base/kdelibs-3.5*) with the arts USE flag enabled." + die "kdelibs missing arts" + fi + fi + fi + + if [[ "${PN}" = "kdelibs" ]]; then + use doc && if ! built_with_use =dev-qt/qt-meta-3* doc ; then + eerror "Building kdelibs with the doc USE flag requires qt to be built with the doc USE flag." + eerror "Please re-emerge qt-3 with this USE flag enabled." + fi + fi + + # Let filter visibility flags that will *really* hurt your KDE + # _experimental_ support for this is enabled by kdehiddenvisibility useflag + filter-flags -fvisibility=hidden -fvisibility-inlines-hidden +} + +# @FUNCTION: kde_src_unpack +# @DESCRIPTION: +# This function unpacks the sources. +# For EAPI 0 and 1 it allso runs kde_src_prepare. +kde_src_unpack() { + debug-print-function $FUNCNAME "$@" + [[ -z "$*" ]] || die "$FUNCNAME no longer supports stages." + [[ -z "${KDE_S}" ]] && KDE_S="${S}" + # Don't use base_src_unpack, as that will call base_src_prepare + # in the wrong place + [[ -d "${KDE_S}" ]] || unpack ${A} + case ${EAPI:-0} in + 0|1) kde_src_prepare ;; + esac +} + +# @FUNCTION: kde_src_prepare +# @DESCRIPTION: +# This function patches the sources. The patches need to be named +# $PN-$PV-*{diff,patch} +# +# This function also handles the linguas if extragear-like packaging is enabled. +# (See USE_KEG_PACKAGING) +kde_src_prepare() { + debug-print-function $FUNCNAME "$@" + local PATCHDIR="${WORKDIR}/patches/" + + # Unpack first and deal with KDE patches after examing possible patch sets. + # To be picked up, patches need to be named $PN-$PV-*{diff,patch} and be + # placed in $PATCHDIR. Monolithic ebuilds will use the split ebuild patches. + if [[ -d "${PATCHDIR}" ]] ; then + local packages p f + if is-parent-package ${CATEGORY}/${PN} ; then + packages="$(get-child-packages ${CATEGORY}/${PN})" + packages="${packages//${CATEGORY}\//} ${PN}" + else + packages="${PN}" + fi + if [[ -n ${PATCHES[@]} && $(declare -p PATCHES) != 'declare -a '* ]]; then + PATCHES=(${PATCHES}) + fi + for p in ${packages}; do + for f in "${PATCHDIR}"/${p}-${PV}-*{diff,patch}; do + [[ -e ${f} ]] && PATCHES+=("${f}") + done + if [[ -n "${KDEBASE}" ]]; then + for f in "${PATCHDIR}"/${p}-${SLOT}-*{diff,patch}; do + [[ -e ${f} ]] && PATCHES+=("${f}") + done + fi + done + fi + + base_src_prepare + + # if extragear-like packaging is enabled, set the translations and the + # documentation depending on LINGUAS settings + if [[ -n ${USE_KEG_PACKAGING} ]]; then + if [[ -z ${LINGUAS} ]]; then + einfo "You can drop some of the translations of the interface and" + einfo "documentation by setting the \${LINGUAS} variable to the" + einfo "languages you want installed." + einfo + einfo "Enabling all languages" + else + # we sanitise LINGUAS to avoid issues when a user specifies the same + # linguas twice. bug #215016. + local sanitised_linguas=$(echo "${LINGUAS}" | tr '[[:space:]]' '\n' | sort | uniq) + if [[ -n ${LANGS} ]]; then + MAKE_PO=$(echo "${sanitised_linguas} ${LANGS}" | tr '[[:space:]]' '\n' | sort | uniq -d | tr '\n' ' ') + einfo "Enabling translations for: ${MAKE_PO}" + sed -i -e "s:^SUBDIRS[ \t]*=.*:SUBDIRS = ${MAKE_PO}:" "${KDE_S}/${KEG_PO_DIR:-po}/Makefile.am" \ + || die "sed for locale failed" + rm -f "${KDE_S}/configure" + fi + + if [[ -n ${LANGS_DOC} ]]; then + MAKE_DOC=$(echo "${sanitised_linguas} ${LANGS_DOC}" | tr '[[:space:]]' '\n' | sort | uniq -d | tr '\n' ' ') + einfo "Enabling documentation for: ${MAKE_DOC}" + [[ -n ${MAKE_DOC} ]] && [[ -n ${DOC_DIR_SUFFIX} ]] && MAKE_DOC=$(echo "${MAKE_DOC}" | tr '\n' ' ') && MAKE_DOC="${MAKE_DOC// /${DOC_DIR_SUFFIX} }" + sed -i -e "s:^SUBDIRS[ \t]*=.*:SUBDIRS = ${MAKE_DOC} ${PN}:" \ + "${KDE_S}/doc/Makefile.am" || die "sed for locale failed" + rm -f "${KDE_S}/configure" + fi + fi + fi + + # fix the 'languageChange undeclared' bug group: touch all .ui files, so that the + # makefile regenerate any .cpp and .h files depending on them. + cd "${KDE_S}" + debug-print "$FUNCNAME: Searching for .ui files in ${PWD}" + UIFILES="$(find . -name '*.ui' -print)" + debug-print "$FUNCNAME: .ui files found:" + debug-print "$UIFILES" + # done in two stages, because touch doens't have a silent/force mode + if [[ -n "$UIFILES" ]]; then + debug-print "$FUNCNAME: touching .ui files..." + touch $UIFILES + fi + + if [[ -d "${WORKDIR}/admin" ]] && [[ -d "${KDE_S}/admin" ]]; then + ebegin "Updating admin/ directory..." + rm -rf "${KDE_S}/admin" "${KDE_S}/configure" || die "Unable to remove old admin/ directory" + ln -s "${WORKDIR}/admin" "${KDE_S}/admin" || die "Unable to symlink the new admin/ directory" + eend 0 + fi +} + +# @FUNCTION: kde_src_configure +# @USAGE: [ myconf ] [ configure ] [ all ] +# @DESCRIPTION: +# This function compiles the sources. It takes care of "cannot write to .kde +# or .qt"-problem due to sandbox and some other sandbox issues. +# +# If no argument is given, all is assumed. +kde_src_configure() { + debug-print-function $FUNCNAME "$@" + + [[ -z "$1" ]] && kde_src_configure all + + [[ -z "${KDE_S}" ]] && KDE_S="${S}" + cd "${KDE_S}" + + export kde_widgetdir="$KDEDIR/$(get_libdir)/kde3/plugins/designer" + + # fix the sandbox errors "can't writ to .kde or .qt" problems. + # this is a fake homedir that is writeable under the sandbox, so that the build process + # can do anything it wants with it. + REALHOME="$HOME" + mkdir -p "${T}"/fakehome/.kde + mkdir -p "${T}"/fakehome/.qt + export HOME="${T}"/fakehome + addwrite "${QTDIR}/etc/settings" + + # Fix bug 96177: if KDEROOTHOME is defined, the ebuild accesses the real homedir via it, and not our exported $HOME + unset KDEHOME + unset KDEROOTHOME + + # things that should access the real homedir + [[ -d "$REALHOME/.ccache" ]] && ln -sf "$REALHOME/.ccache" "$HOME/" + + while [[ "$1" ]]; do + + case $1 in + myconf) + debug-print-section myconf + if [[ ${CATEGORY} != "kde-base" ]] || [[ ${CATEGORY} == "kde-base" && ${PV##*.} -lt 10 ]] ; then + myconf+=" --with-x --enable-mitshm $(use_with xinerama) --with-qt-dir=${QTDIR} --enable-mt --with-qt-libraries=${QTDIR}/$(get_libdir)" + else + myconf+=" --with-qt-dir=${QTDIR} --enable-mt --with-qt-libraries=${QTDIR}/$(get_libdir)" + fi + # calculate dependencies separately from compiling, enables ccache to work on kde compiles + myconf="$myconf --disable-dependency-tracking" + if use debug ; then + myconf="$myconf --enable-debug=full --with-debug" + else + myconf="$myconf --disable-debug --without-debug" + fi + if hasq kdeenablefinal ${IUSE}; then + myconf="$myconf $(use_enable kdeenablefinal final)" + fi + if [[ ${ARTS_REQUIRED} == "never" ]]; then + myconf="$myconf --without-arts" + elif [[ ${ARTS_REQUIRED} != 'yes' && ${PN} != "arts" ]]; then + # This might break some external package until + # ARTS_REQUIRED="yes" is set on them, KDE 3.2 is no more + # supported anyway. + myconf="$myconf $(use_with arts)" + fi + debug-print "$FUNCNAME: myconf: set to ${myconf}" + ;; + configure) + debug-print-section configure + debug-print "$FUNCNAME::configure: myconf=$myconf" + + export WANT_AUTOMAKE + + # rebuild configure script, etc + # This can happen with e.g. a cvs snapshot + if [[ ! -f "./configure" ]]; then + # This is needed to fix building with autoconf 2.60. + # Many thanks to who preferred such a stupid check rather + # than a working arithmetic comparison. + if [[ -f admin/cvs.sh ]]; then + sed -i -e '/case $AUTO\(CONF\|HEADER\)_VERSION in/,+1 s/2\.5/2.[56]/g' \ + admin/cvs.sh + fi + + # Replace the detection script with a dummy, let our wrappers do the work + if [[ -f admin/detect-autoconf.sh ]]; then + cat - > admin/detect-autoconf.sh <<EOF +#!/bin/sh +export AUTOCONF="autoconf" +export AUTOHEADER="autoheader" +export AUTOM4TE="autom4te" +export AUTOMAKE="automake" +export ACLOCAL="aclocal" +export WHICH="which" +EOF + fi + + # Make build succeed with >=autoconf-2.65, see http://tinyurl.com/yc4nbhq + if [[ -f admin/acinclude.m4.in ]] && \ + [[ ! -f ${T}/acinclude.m4.in ]]; then + cp admin/acinclude.m4.in "${T}" + einfo "Patching admin/acinclude.m4.in" + patch -f --ignore-whitespace admin/acinclude.m4.in <<'EOF' +--- admin/acinclude.m4.in ++++ admin/acinclude.m4.in +@@ -3081,6 +3081,13 @@ + fi + ]) + ++AC_DEFUN([GENTOO_DUMMY_CFLAGS], ++[ ++ dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS ++ CFLAGS=" $CFLAGS" ++]) ++AC_BEFORE([GENTOO_DUMMY_CFLAGS],[AC_PROG_CC]) ++ + AC_DEFUN([AC_CHECK_COMPILERS], + [ + AC_ARG_ENABLE(debug, +@@ -3141,12 +3148,10 @@ + [kde_use_profiling="no"] + ) + +- dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS +- CFLAGS=" $CFLAGS" +- +- AC_PROG_CC ++ AC_REQUIRE([GENTOO_DUMMY_CFLAGS]) ++ AC_REQUIRE([AC_PROG_CC]) + +- AC_PROG_CPP ++ AC_REQUIRE([AC_PROG_CPP]) + + if test "$GCC" = "yes"; then + if test "$kde_use_debug_code" != "no"; then +@@ -3176,7 +3181,7 @@ + + CXXFLAGS=" $CXXFLAGS" + +- AC_PROG_CXX ++ AC_REQUIRE([AC_PROG_CXX]) + + KDE_CHECK_FOR_BAD_COMPILER + +EOF + if [[ $? != 0 ]]; then + ewarn "Failed to patch admin/acinclude.m4.in" + cp "${T}/acinclude.m4.in" admin/acinclude.m4.in + fi + fi + for x in Makefile.cvs admin/Makefile.common; do + if [[ -f "$x" && -z "$makefile" ]]; then makefile="$x"; fi + done + if [[ -f "$makefile" ]]; then + debug-print "$FUNCNAME: configure: generating configure script, running make -f $makefile" + emake -f $makefile + fi + [[ -f "./configure" ]] || die "no configure script found, generation unsuccessful" + fi + + export PATH="${KDEDIR}/bin:${PATH}" + + # configure doesn't need to know about the other KDEs installed. + # in fact, if it does, it sometimes tries to use the wrong dcopidl, etc. + # due to the messed up way configure searches for things + export KDEDIRS="${PREFIX}:${KDEDIR}" + + # Visiblity stuff is broken. Just disable it when it's present. + export kde_cv_prog_cxx_fvisibility_hidden=no + + if hasq kdehiddenvisibility ${IUSE} && use kdehiddenvisibility; then + if [[ $(gcc-major-version)$(gcc-minor-version) -ge 41 ]]; then + if [[ ${PN} != "kdelibs" && ${PN} != "arts" ]] && \ + ! fgrep -q "#define __KDE_HAVE_GCC_VISIBILITY" "${KDEDIR}/include/kdemacros.h"; then + + eerror "You asked to enable hidden visibility, but your kdelibs was" + eerror "built without its support. Please rebuild kdelibs with the" + eerror "kdehiddenvisibility useflag enabled." + die "kdelibs without hidden visibility" + else + unset kde_cv_prog_cxx_fvisibility_hidden + myconf="$myconf $(use_enable kdehiddenvisibility gcc-hidden-visibility)" + fi + else + eerror "You're trying to enable hidden visibility, but" + eerror "you are using an old GCC version. Hidden visibility" + eerror "can be enabled only with GCC 4.1 and later." + fi + fi + + # If we're in a kde-base ebuild, set the prefixed directories to + # override the ones set by econf. + if [[ -n ${PREFIX} && ${PREFIX} != "/usr" ]]; then + myconf="${myconf} --prefix=${PREFIX} + --mandir=${PREFIX}/share/man + --infodir=${PREFIX}/share/info + --datadir=${PREFIX}/share + --sysconfdir=${PREFIX}/etc" + fi + + # Use libsuffix to keep KDE happy, the --libdir parameter get + # still honored. + if [[ $(get_libdir) != "lib" ]] ; then + myconf="${myconf} --enable-libsuffix=$(get_libdir | sed s/lib//)" + fi + + export PATH="${KDEDIR}/bin:${PATH}" + + # The configure checks for kconfig_compiler do not respect PATH + export KCONFIG_COMPILER="${KDEDIR}/bin/kconfig_compiler" + + # Sometimes it doesn't get the include and library paths right, + # so hints them. + if [[ -z ${PREFIX} || ${PREFIX} != ${KDEDIR} ]]; then + myconf="${myconf} --with-extra-includes=${KDEDIR}/include + --with-extra-libs=${KDEDIR}/$(get_libdir)" + fi + + if grep "cope with newer libtools" "${KDE_S}/admin/ltconfig" &> /dev/null; then + einfo "Removing the dummy ltconfig file." + rm "${KDE_S}/admin/ltconfig" + fi + + use elibc_FreeBSD && myconf="${myconf} --disable-pie" + + elibtoolize + econf ${myconf} + + # Seems ./configure add -O2 by default but hppa don't want that but we need -ffunction-sections + if [[ "${ARCH}" = "hppa" ]] + then + einfo "Fixing Makefiles" + find "${KDE_S}" -name Makefile -print0 | xargs -0 sed -i -e \ + 's:-O2:-ffunction-sections:g' + fi + ;; + all) + debug-print-section all + kde_src_configure myconf configure + ;; + esac + + shift + done + +} +# @FUNCTION: kde_src_compile +# @USAGE: [ myconf ] [ configure ] [ make ] [ all ] +# @DESCRIPTION: +# This function compiles the sources. It takes care of "cannot write to .kde +# or .qt"-problem due to sandbox and some other sandbox issues. +# +# If no argument is given, all is assumed. +kde_src_compile() { + debug-print-function $FUNCNAME "$@" + + [[ -z "$1" ]] && kde_src_compile all + + [[ -z "${KDE_S}" ]] && KDE_S="${S}" + cd "${KDE_S}" + while [[ "$1" ]]; do + case $1 in + make) + debug-print-section make + emake || die "died running emake, $FUNCNAME:make" + ;; + all) + case ${EAPI:-0} in + 0|1) kde_src_configure all ;; + esac + kde_src_compile make + ;; + *) + case ${EAPI:-0} in + 0|1) kde_src_configure $1 ;; + esac + ;; + esac + + shift + done +} + +# @FUNCTION: kde_src_install +# @USAGE: [ make ] [ dodoc ] [ all ] +# @DESCRIPTION: +# This installs the software, including the right handling of the +# "/usr/share/doc/kde"-dir, but it only installs AUTHORS, ChangeLog*, README*, +# NEWS, and TODO (if available) as docs. +# +# If no argument is given, all is assumed +kde_src_install() { + debug-print-function $FUNCNAME "$@" + + [[ -z "$1" ]] && kde_src_install all + + [[ -z ${KDE_S} ]] && KDE_S="${S}" + cd "${KDE_S}" + + # Ensure that KDE binaries take precedence + export PATH="${KDEDIR}/bin:${PATH}" + + while [[ "$1" ]]; do + + case $1 in + make) + debug-print-section make + emake install DESTDIR="${D}" destdir="${D}" || die "died running make install, $FUNCNAME:make" + ;; + dodoc) + debug-print-section dodoc + for doc in AUTHORS ChangeLog* README* NEWS TODO; do + [[ -s "$doc" ]] && dodoc $doc + done + ;; + all) + debug-print-section all + kde_src_install make dodoc + ;; + esac + + shift + done + + if [[ -n ${KDEBASE} && "${PN}" != "arts" && -d "${D}"/usr/share/doc/${PF} ]]; then + # work around bug #97196 + dodir /usr/share/doc/kde && \ + mv "${D}"/usr/share/doc/${PF} "${D}"/usr/share/doc/kde/ || \ + die "Failed to move docs to kde/ failed." + fi +} + +# @FUNCTION: slot_rebuild +# @USAGE: [ list_of_packages_to_check ] +# @RETURN: False, if no rebuild is required +# @DESCRIPTION: +# Unneeded and therefore deprecated for a long, long time now. Ebuilds are still +# referencing it, so replacing with a stub. +# Looks for packages in the supplied list of packages which have not been linked +# against this kde SLOT. It does this by looking for lib*.la files that doesn't +# contain the current ${KDEDIR}. If it finds any thus broken packages it prints +# eerrors and return True. +# +# Thanks to Carsten Lohrke in bug 98425. +slot_rebuild() { + : +} + +# @FUNCTION: kde_pkg_preinst +# @DESCRIPTION: +# Calls postprocess_desktop_entries +kde_pkg_preinst() { + postprocess_desktop_entries +} + +# @FUNCTION: kde_pkg_postinst +# @DESCRIPTION: +# Calls buildsycoca +kde_pkg_postinst() { + buildsycoca +} + +# @FUNCTION: kde_pkg_postrm +# @DESCRIPTION: +# Calls buildsycoca +kde_pkg_postrm() { + buildsycoca +} + +case ${EAPI:-0} in + 0|1) EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postinst pkg_postrm pkg_preinst;; + 2) EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postinst pkg_postrm pkg_preinst;; +esac |