diff options
Diffstat (limited to 'eclass/kde.eclass')
-rw-r--r-- | eclass/kde.eclass | 316 |
1 files changed, 264 insertions, 52 deletions
diff --git a/eclass/kde.eclass b/eclass/kde.eclass index 38d7caaaba4a..470451239db0 100644 --- a/eclass/kde.eclass +++ b/eclass/kde.eclass @@ -1,68 +1,280 @@ -# Copyright 1999-2000 Gentoo Technologies, Inc. -# Distributed under the terms of the GNU General Public License, v2 or later +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/eclass/kde.eclass,v 1.1.1.1 2005/11/30 09:59:18 chriswhite Exp $ +# # Author Dan Armak <danarmak@gentoo.org> -# $Header: /var/cvsroot/gentoo-x86/eclass/kde.eclass,v 1.1 2001/09/28 19:25:33 danarmak Exp $ -# This is the kde ebuild for std. kde-dependant apps which follow configure/make/make install -# procedures and have std. configure options. -. /usr/portage/inherit.eclass || die -inherit c autoconf base || die -ECLASS=kde +# +# Revisions Caleb Tennis <caleb@gentoo.org> +# The kde eclass is inherited by all kde-* eclasses. Few ebuilds inherit straight from here. +inherit base eutils kde-functions flag-o-matic DESCRIPTION="Based on the $ECLASS eclass" HOMEPAGE="http://www.kde.org/" +IUSE="debug arts xinerama kdeenablefinal" -DEPEND="${DEPEND} kde-base/kdelibs dev-util/objprelink x11-libs/qt-x11" -RDEPEND="${RDEPEND} kde-base/kdelibs x11-libs/qt-x11" +DEPEND=">=sys-devel/automake-1.7.0 + sys-devel/autoconf + sys-devel/make + dev-util/pkgconfig + dev-lang/perl + ~kde-base/kde-env-3" + +RDEPEND="~kde-base/kde-env-3" + +# overridden in other places like kde-dist, kde-source and some individual ebuilds +SLOT="0" + +kde_pkg_setup() { + if [ "${PN}" != "arts" ] && [ "${PN}" != "kdelibs" ] ; then + use arts && if ! built_with_use kde-base/kdelibs arts ; then + eerror "You are trying to compile ${CATEGORY}/${P} with the \"arts\" USE flag enabled." + eerror "However, $(best_version kde-base/kdelibs) was compiled with this flag disabled." + eerror + eerror "You must either disable this use flag, or recompile" + eerror "$(best_version kde-base/kdelibs) with this use flag enabled." + die + fi + fi + + # Let filter visibility flags that will *really* hurt your KDE + filter-flags -fvisibility=hidden -fvisibility-inlines-hidden +} + +kde_src_unpack() { + debug-print-function $FUNCNAME $* + + # call base_src_unpack, which implements most of the functionality and has sections, + # unlike this function. The change from base_src_unpack to kde_src_unpack is thus + # wholly transparent for ebuilds. + base_src_unpack $* + + # kde-specific stuff stars here + + # fix the 'languageChange undeclared' bug group: touch all .ui files, so that the + # makefile regenerate any .cpp and .h files depending on them. + cd $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 +} kde_src_compile() { - - while [ "$1" ]; do - - case $1 in - myconf) - use qtmt && myconf="$myconf --enable-mt" - use mitshm && myconf="$myconf --enable-mitshm" - use objprelink && myconf="$myconf --enable-objprelink" - ;; - configure) - ./configure --host=${CHOST} --with-x \ - ${myconf} --with-xinerama || die - ;; - make) - make || die - ;; - all) - kde_src_compile myconf configure make - ;; - esac - - shift - done + + debug-print-function $FUNCNAME $* + [ -z "$1" ] && kde_src_compile all + + cd ${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/" + [ -n "$UNSERMAKE" ] && addwrite "/usr/kde/unsermake" + + while [ "$1" ]; do + + case $1 in + myconf) + debug-print-section myconf + myconf="$myconf --with-x --enable-mitshm $(use_with xinerama) --with-qt-dir=${QTDIR} --enable-mt --with-qt-libraries=${QTDIR}/$(get_libdir)" + # calculate dependencies separately from compiling, enables ccache to work on kde compiles + [ -z "$UNSERMAKE" ] && 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 useq kdeenablefinal && [ -n "$KDEBASE" ]; then + myconf="$myconf --enable-final" + else + myconf="$myconf --disable-final" + fi + [ -z "$KDEBASE" ] && myconf="$myconf $(use_with arts)" + [ -n "$KDEBASE" -a "$KDEMINORVER" -ge 3 ] && myconf="$myconf $(use_with arts)" + debug-print "$FUNCNAME: myconf: set to ${myconf}" + ;; + configure) + debug-print-section configure + debug-print "$FUNCNAME::configure: myconf=$myconf" + + # rebuild configure script, etc + # This can happen with e.g. a cvs snapshot + if [ ! -f "./configure" ] || [ -n "$UNSERMAKE" ]; then + 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" + make -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}" + + cd $S + + # Visiblity stuff is broken. Just disable it when it's present. + export kde_cv_prog_cxx_fvisibility_hidden=no + + # If we're in a kde-base ebuild, set the prefixed directories to + # override the ones set by econf. + if [[ ${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 + + econf \ + ${myconf} \ + || die "died running ./configure, $FUNCNAME:configure" + + # Seems ./configure add -O2 by default but hppa don't want that but we need -ffunction-sections + if [[ "${ARCH}" = "hppa" ]] + then + einfo Fixating Makefiles + find ${S} -name Makefile | while read a; do sed -e s/-O2/-ffunction-sections/ -i "${a}" ; done + fi + ;; + make) + export PATH="${KDEDIR}/bin:${PATH}" + debug-print-section make + emake || die "died running emake, $FUNCNAME:make" + ;; + all) + debug-print-section all + kde_src_compile myconf configure make + ;; + esac + + shift + done } kde_src_install() { - - while [ "$1" ]; do - - case $1 in - make) - make install DESTDIR=${D} || die - ;; - dodoc) - dodoc AUTHORS ChangeLog README* - ;; - all) - kde_src_install make dodoc - ;; - esac - - shift - done - + + debug-print-function $FUNCNAME $* + [[ -z "$1" ]] && kde_src_install all + + cd ${S} + + while [[ "$1" ]]; do + + case $1 in + make) + debug-print-section make + make 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 + } +# slot rebuild function, thanks to Carsten Lohrke in bug 98425. +slot_rebuild() { + local VDB_PATH="$(portageq vdb_path)" + local KDE_PREFIX="$(kde-config --prefix)" + local REBUILD_LIST="" + local BROKEN_PKGS="" + + echo + einfo "Scan for possible needed slot related rebuilds.\n" + echo + for i in ${*} ; do + local temp="$(ls -1d ${VDB_PATH}/${i}*)" + for j in ${temp} ; do + if ! [[ -f ${j}/CONTENTS ]] ; then + eerror "The package db entry for ${j/${VDB_PATH}\//} is broken." + BROKEN_PKGS="${BROKEN_PKGS} ${j/${VDB_PATH}\//}" + continue + fi -EXPORT_FUNCTIONS + k="$(grep -o /.*/lib.*\.la ${j}/CONTENTS)" + m="" + for l in ${k} ; do [[ -e ${l} ]] && m="${m} ${l}"; done + l="$(echo ${k} ${m} | fmt -w 1 | sort | uniq -u)" + if [[ ${l} != "" ]] || [[ ${m} == "" ]] ; then + eerror "Installation of ${j/${VDB_PATH}\//} is broken." + BROKEN_PKGS="${BROKEN_PKGS} ${j/${VDB_PATH}\//}" + else + if [[ $(cat ${m} | grep -co "${KDE_PREFIX}") = 0 ]] ; then + REBUILD_LIST="${REBUILD_LIST} =${j/${VDB_PATH}\//}" + fi + fi + done + done + echo + if [[ -n "${BROKEN_PKGS}" ]] ; then + eerror "Anomalies were found. Please do \"emerge ${BROKEN_PKGS}\"." + return 1 + fi + + + if [[ -n "${REBUILD_LIST}" ]] ; then + local temp="" + cd ${VDB_PATH} + for i in ${REBUILD_LIST} ; do + i="$(echo ${i%-*} | cut -d= -f2)" + temp="${temp} $(find . -iname "DEPEND" -exec grep -H ${i} '{}' \; | cut -f2-3 -d/ | grep -v ${CATEGORY}/${PN})" + done + temp="$(echo ${temp} | fmt -w 1 | sort -u)" + for i in ${temp} ; do + REBUILD_LIST="${REBUILD_LIST} =${i}" + done + fi + + if [[ -n "${REBUILD_LIST}" ]] ; then + einfo "Please run \"emerge --oneshot ${REBUILD_LIST}\" before continuing.\n" + else + einfo "Done :), continuing...\n" + return 1 + fi + echo +} +EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install |