From 4f4e80c1f2d226e7ea6e0a6ed061e78740eeed8d Mon Sep 17 00:00:00 2001 From: Dan Armak Date: Sat, 25 Dec 2004 14:47:44 +0000 Subject: [PATCH] merge changes from berlios svn: add deprange() and call it from need-kde, but only when KM_DEPRANGE is set, so monolithic ebuilds aren't affected. also, use rather than 'is kde-dist in ' as a more correct test for kde-base ebuilds, as discussed on kde@g.o. --- eclass/kde-functions.eclass | 194 +++++++++++++++++++++++++++++++++--- eclass/kde-meta.eclass | 92 ++++++++++++----- 2 files changed, 247 insertions(+), 39 deletions(-) diff --git a/eclass/kde-functions.eclass b/eclass/kde-functions.eclass index 1e27ed83ff06..b1134fa3bc9f 100644 --- a/eclass/kde-functions.eclass +++ b/eclass/kde-functions.eclass @@ -1,6 +1,6 @@ # Copyright 1999-2004 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/kde-functions.eclass,v 1.76 2004/12/13 00:43:01 motaboy Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/kde-functions.eclass,v 1.77 2004/12/25 14:47:44 danarmak Exp $ # # Author Dan Armak # @@ -45,6 +45,173 @@ need-autoconf() { } +# Usage: deprange minver maxver package [...] +# For minver, a -rN part is supported. For both minver and maxver, _alpha/beta/pre/rc suffixes +# are supported, but not _p suffixes or teminating letters (eg 3.3.1a). +# This function echoes a string of the form (for package="kde-base/kdelibs") +# || ( =kde-base/kdelibs-3.3.1-r1 ~kde-base/kdelibs-3.3.2 ~kde-base/kdelibs-3.3.3 ) +# This dep means versions of package from maxver through minver will be acceptable. +# Note that only the kde versioning scheme is supported - ie x.y, and we only iterate through y +# (i.e. x can contain more . separators). +deprange() { + + # Assign, parse params + local MINVER=$1 + local MAXVER=$2 + shift; shift + + local BASEVER=${MINVER%.*} + local MINMINOR=${MINVER##*.} + local MAXMINOR=${MAXVER##*.} + + while [ -n "$1" ]; do + local PACKAGE=$1 + shift + + # If min version has -rN component, separate it + if [ "$MINMINOR" != "${MINMINOR/-r}" ]; then + local MINREV=${MINMINOR##*-r} + MINMINOR=${MINMINOR%-r*} + fi + + # If min or max version has a _alpha/beta/pre/rc suffix, separate it. + # To understand why we initialize MINALPHA etc the way we do, see the loops + # that use them as bounds. + local MINALPHA=11 + local MINBETA=11 + local MINPRE=11 + local MINRC=11 + if [ "$MINMINOR" != "${MINMINOR/_}" ]; then + local MINSUFFIX="${MINMINOR##*_}" + MINMINOR="${MINMINOR%_*}" + if [ "$MINSUFFIX" != "${MINSUFFIX/alpha}" ]; then + MINALPHA="${MINSUFFIX##alpha}" + MINBETA=1 + MINPRE=1 + MINRC=1 + elif [ "$MINSUFFIX" != "${MINSUFFIX/beta}" ]; then + MINBETA="${MINSUFFIX##beta}" + MINPRE=1 + MINRC=1 + elif [ "$MINSUFFIX" != "${MINSUFFIX/pre}" ]; then + MINPRE="${MINSUFFIX##pre}" + MINRC=1 + elif [ "$MINSUFFIX" != "${MINSUFFIX/rc}" ]; then + MINRC="${MINSUFFIX##rc}" + else + eerror "deprange(): version suffix $MINSUFFIX (probably _pN) not supported" + return + fi + fi + + local MAXALPHA=0 + local MAXBETA=0 + local MAXPRE=0 + local MAXRC=0 + if [ "$MAXMINOR" != "${MAXMINOR/_}" ]; then + local MAXSUFFIX="${MAXMINOR##*_}" + MAXMINOR="${MAXMINOR%_*}" + if [ "$MAXSUFFIX" != "${MAXSUFFIX/alpha}" ]; then + MAXALPHA="${MAXSUFFIX##alpha}" + elif [ "$MAXSUFFIX" != "${MAXSUFFIX/beta}" ]; then + MAXBETA="${MAXSUFFIX##beta}" + MAXALPHA=10 + elif [ "$MAXSUFFIX" != "${MAXSUFFIX/pre}" ]; then + MAXPRE="${MAXSUFFIX##pre}" + MAXALPHA=10 + MAXBETA=10 + elif [ "$MAXSUFFIX" != "${MAXSUFFIX/rc}" ]; then + MAXRC="${MAXSUFFIX##rc}" + MAXALPHA=10 + MAXBETA=10 + MAXPRE=10 + else + eerror "deprange(): version suffix $MAXSUFFIX (probably _pN) not supported" + return + fi + fi + + # If we stripped a revision number from MINMINOR earlier, increase the main loop's lower bound, + # as we don't want to include a ~$PACKAGE-$BASEVER.$MINMINOR option. + # If the lower bound has a suffix, we want to increase the suffix and not MINMINOR itself. + if [ -n "$MINREV" ]; then + if [ -z "$MINSUFFIX" ]; then + let MINMINOR++ + elif [ -n "$MINRC" ]; then + let MINRC++ + elif [ -n "$MINPRE" ]; then + let MINPRE++ + elif [ -n "$MINBETA" ]; then + let MINBETA++ + elif [ -n "$MINALPHA" ]; then + let MINALPHA++ + fi + fi + + # If we stripped a suffix from MAXMINOR, decrease it, since MAXMINOR without a suffix + # is outside the requested range + if [ -n "$MAXSUFFIX" ]; then + let MAXMINOR-- + fi + + # Build list of versions in descending order: + # from upper suffix to highest normal (suffixless) version, then just normal versions, + # then from lowest normal version to lowest suffix. + # Cf. the blocks that initialize MAXALPHA, MINBETA etc above to understand why + # the loops below work. + local NEWDEP="|| ( " + local i + + # max version's allowed suffixes + for (( i=$MAXRC ; $i > 0 ; i-- )) ; do + NEWDEP="$NEWDEP =$PACKAGE-$BASEVER.${MAXMINOR}_rc$i" + done + for (( i=$MAXPRE ; $i > 0 ; i-- )) ; do + NEWDEP="$NEWDEP =$PACKAGE-$BASEVER.${MAXMINOR}_pre$i" + done + for (( i=$MAXBETA ; $i > 0 ; i-- )) ; do + NEWDEP="$NEWDEP =$PACKAGE-$BASEVER.${MAXMINOR}_beta$i" + done + for (( i=$MAXALPHA ; $i > 0 ; i-- )) ; do + NEWDEP="$NEWDEP =$PACKAGE-$BASEVER.${MAXMINOR}_alpha$i" + done + + # allowed normal versions + for (( i=$MAXMINOR ; $i >= $MINMINOR ; i-- )) ; do + NEWDEP="$NEWDEP ~$PACKAGE-$BASEVER.$i" + done + + # min version's allowed suffixes + for (( i=10 ; $i >= $MINRC ; i-- )) ; do + NEWDEP="$NEWDEP =$PACKAGE-$BASEVER.${MINMINOR}_rc$i" + done + for (( i=10 ; $i >= $MINPRE ; i-- )) ; do + NEWDEP="$NEWDEP =$PACKAGE-$BASEVER.${MINMINOR}_pre$i" + done + for (( i=10 ; $i >= $MINBETA ; i-- )) ; do + NEWDEP="$NEWDEP =$PACKAGE-$BASEVER.${MINMINOR}_beta$i" + done + for (( i=10 ; $i >= $MINALPHA ; i-- )) ; do + NEWDEP="$NEWDEP =$PACKAGE-$BASEVER.${MINMINOR}_alpha$i" + done + + # If min verson had -rN component, add all revisions from r99 to it in descending order + if [ -n "$MINREV" ]; then + let MINMINOR-- + if [ -n "$MINSUFFIX" ]; then + BASEMINVER="$PACKAGE-$BASEVER.${MINMINOR}_$MINSUFFIX" + else + BASEMINVER="$PACKAGE-$BASEVER.${MINMINOR}" + fi + for (( i=99 ; $i >= $MINREV ; i-- )) ; do + NEWDEP="$NEWDEP =$BASEMINVER-r$i" + done + fi + + NEWDEP="$NEWDEP ) " + echo -n $NEWDEP + done +} # --------------------------------------------------------------- # kde/qt directory management etc. functions, was kde-dirs.ebuild @@ -87,18 +254,21 @@ need-kde() { if [ -n "$NEED_KDE_DONT_ADD_KDELIBS_DEP" ]; then # do nothing debug-print "$FUNCNAME: NEED_KDE_DONT_ADD_KDELIBS_DEP set, complying with request" - elif [ "${INHERITED//kde-dist}" != "$INHERITED" ]; then - # if we're a kde-base package, we need an exact version of kdelibs - # to compile correctly. - # all kinds of special cases live here. - # goes to show this code is awfully inflexible, i guess. - # maybe i should look at relocating it... - - RDEPEND="${RDEPEND} ~kde-base/kdelibs-${KDEVER}" - DEPEND="${DEPEND} ~kde-base/kdelibs-${KDEVER}" - + elif [ -n "$KDEBASE" ]; then + # If we're a kde-base package, we need at least our own version of kdelibs. + # Also, split kde-base ebuilds are not updated with every KDE release, and so + # can require support of different versions of kdelibs. + # KM_DEPRANGE should contain 2nd and 3rd parameter to deprange: + # max and min KDE versions. E.g. KM_DEPRANGE="3.3.4 $PV". + if [ -n "$KM_DEPRANGE" ]; then + DEPEND="$DEPEND $(deprange $KM_DEPRANGE kde-base/kdelibs)" + RDEPEND="$RDEPEND $(deprange $KM_DEPRANGE kde-base/kdelibs)" + else + DEPEND="${DEPEND} ~kde-base/kdelibs-$PV" + RDEPEND="${RDEPEND} ~kde-base/kdelibs-$PV" + fi else - # everything else only needs a minimum version + # Things outside kde-base only need a minimum version min-kde-ver $KDEVER RDEPEND="${RDEPEND} >=kde-base/kdelibs-${selected_version}" DEPEND="${DEPEND} >=kde-base/kdelibs-${selected_version}" diff --git a/eclass/kde-meta.eclass b/eclass/kde-meta.eclass index 148c6a7eec0c..66c1b975c67d 100644 --- a/eclass/kde-meta.eclass +++ b/eclass/kde-meta.eclass @@ -1,6 +1,6 @@ # Copyright 1999-2004 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/kde-meta.eclass,v 1.6 2004/11/28 12:12:21 motaboy Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/kde-meta.eclass,v 1.7 2004/12/25 14:47:44 danarmak Exp $ # # Author Dan Armak # Simone Gotti @@ -18,8 +18,13 @@ if [ -z "$KMNAME" ]; then fi myPN="$KMNAME" -myP="$myPN-$PV" -myPV="$PV" +case "$PV" in + 3.4.0_alpha1) myPV="${PV/3.4.0_alpha1/3.3.90}" ;; + 3.4.0_alpha2) myPV="${PV/3.4.0_alpha1/3.3.91}" ;; + *) myPV="$PV" ;; +esac +myP="$myPN-$myPV" + # is this a kde-base ebuild, vs eg koffice case "$myPN" in kde-i18n|arts|kdeaccessibility|kdeaddons|kdeadmin|kdeartwork|kdebase|kdebindings|kdeedu|kdegames|kdegraphics|kdelibs|kdemultimedia|kdenetwork|kdepim|kdesdk|kdetoys|kdeutils|kdewebdev|kdelibs-apidocs) debug-print "$ECLASS: KDEBASE ebuild recognized" @@ -31,15 +36,16 @@ esac if [ "$KDEBASE" = "true" ]; then unset SRC_URI - need-kde $myPV + need-kde $PV - DESCRIPTION="KDE ${myPV} - " + DESCRIPTION="KDE ${PV} - " HOMEPAGE="http://www.kde.org/" LICENSE="GPL-2" SLOT="$KDEMAJORVER.$KDEMINORVER" # Main tarball for normal downloading style case "$myPV" in + 3.3.9?) SRC_PATH="unstable/${myPV}/src/${myPN}-${myPV}.tar.bz2" ;; 3.3.0) SRC_PATH="stable/3.3/src/${myP}.tar.bz2" ;; 3*) SRC_PATH="stable/${myPV}/src/${myP}.tar.bz2" ;; 5) SRC_URI="" # cvs ebuilds, no SRC_URI needed @@ -57,8 +63,10 @@ if [ "$KDEBASE" = "true" ]; then 3.3.1) XDELTA_BASE="stable/3.3/src/${myPN}-3.3.0.tar.bz2" XDELTA_DELTA="stable/3.3.1/src/${myPN}-3.3.0-3.3.1.tar.xdelta" ;; - *) die "$ECLASS: Error: unrecognized version ${myPV}, could not set SRC_URI" + 3.3.2) XDELTA_BASE="stable/3.3/src/${myPN}-3.3.0.tar.bz2" + XDELTA_DELTA="stable/3.3.1/src/${myPN}-3.3.0-3.3.1.tar.xdelta stable/3.3.2/src/${myPN}-3.3.1-3.3.2.tar.xdelta" ;; + *) ;; esac elif [ "$KMNAME" == "koffice" ]; then @@ -83,6 +91,8 @@ if [ -n "$XDELTA_BASE" ]; then # depends on $PV only, so is safe to modify SRC_U SRC_URI="$SRC_URI mirror://kde/$x" done SRC_URI="$SRC_URI ) !kdexdeltas? ( mirror://kde/$SRC_PATH )" +else # xdelta don't available, for example with kde 3.4 alpha/beta/rc ebuilds. + SRC_URI="$SRC_URI mirror://kde/$SRC_PATH" fi debug-print "$ECLASS: finished, SRC_URI=$SRC_URI" @@ -93,10 +103,17 @@ DEPEND="$DEPEND kdexdeltas? ( dev-util/xdelta )" # END adapted from kde-dist.eclass -# prepackaged makefiles for broken-up ebuilds. Ebuild can define KM_MAKEFILESREV to be >=1 to -# use a newer tarball without increasing the ebuild revision. -MAKEFILESTARBALL="$PN-$PVR-${KM_MAKEFILESREV:-0}-makefiles.tar.bz2" -SRC_URI="$SRC_URI usepackagedmakefiles? ( mirror://gentoo/$MAKEFILESTARBALL )" +# Don't support prepackaged Makefiles with alpha/beta/rc version. +case $myPV in + 3.3.0 | 3.3.1 | 3.3.2) + # prepackaged makefiles for broken-up ebuilds. Ebuild can define KM_MAKEFILESREV to be >=1 to + # use a newer tarball without increasing the ebuild revision. + MAKEFILESTARBALL="$PN-$PVR-${KM_MAKEFILESREV:-0}-makefiles.tar.bz2" + SRC_URI="$SRC_URI usepackagedmakefiles? ( mirror://gentoo/$MAKEFILESTARBALL )" + ;; + + *) ;; +esac # TODO FIX: Temporary place for code common to all ebuilds derived from any one metapackage. @@ -230,27 +247,33 @@ function change_makefiles() { fi } +function set_common_variables() { + # Overridable module (subdirectory) name, with default value + if [ "$KMNOMODULE" != "true" ] && [ -z "$KMMODULE" ]; then + KMMODULE=$PN + fi + + # Unless disabled, docs are also extracted, compiled and installed + DOCS="" + if [ "$KMNOMODULE" != "true" ] && [ "$KMNODOCS" != "true" ]; then + DOCS="doc/$KMMODULE" + fi +} + # This has function sections now. Call unpack, apply any patches not in $PATCHES, # then call makefiles. function kde-meta_src_unpack() { debug-print-function $FUNCNAME $* + set_common_variables + sections="$@" [ -z "$sections" ] && sections="unpack makefiles" for section in $sections; do case $section in unpack) - # Overridable module (subdirectory) name, with default value - if [ "$KMNOMODULE" != "true" ] && [ -z "$KMMODULE" ]; then - KMMODULE=$PN - fi - - # Unless disabled, docs are also extracted, compiled and installed - DOCS="" - if [ "$KMNOMODULE" != "true" ] && [ "$KMNODOCS" != "true" ]; then - DOCS="doc/$KMMODULE" - fi + # Create final list of stuff to extract extractlist="" @@ -279,6 +302,7 @@ function kde-meta_src_unpack() { KMTARPARAMS="$KMTARPARAMS -j" fi cd $WORKDIR + echo ">>> Extracting from tarball..." # Note that KMTARPARAMS is also used by an ebuild tar -xpf $TARFILE $KMTARPARAMS $extractlist @@ -293,20 +317,30 @@ function kde-meta_src_unpack() { libname="" for x in $KMCOPYLIB; do if [ "$libname" == "" ]; then - libname=$x + libname=$x else - dirname=$x - cd $S - mkdir -p ${dirname} - cd ${dirname} - ln -s ${PREFIX}/lib/${libname}* . - libname="" + dirname=$x + cd $S + mkdir -p ${dirname} + cd ${dirname} + if [ ! "$(find ${PREFIX}/lib/ -name "${libname}*")" == "" ]; then + echo "Symlinking library ${libname} under ${PREFIX}/lib/ in source dir" + ln -s ${PREFIX}/lib/${libname}* . + else + die "Can't find library ${libname} under ${PREFIX}/lib/" + fi + libname="" fi done # apply any patches kde_src_unpack autopatch + # kdebase: Remove the installation of the "startkde" script. + if [ "$KMNAME" == "kdebase" ]; then + sed -i -e s:"bin_SCRIPTS = startkde"::g ${S}/Makefile.am.in + fi + # for ebuilds with extended src_unpack cd $S @@ -349,6 +383,8 @@ function kde-meta_src_unpack() { function kde-meta_src_compile() { debug-print-function $FUNCNAME $* + + set_common_variables # kdebase: all configure.in's talk about java. Need to investigate which ones # actually need it. @@ -388,6 +424,8 @@ function kde-meta_src_compile() { function kde-meta_src_install() { debug-print-function $FUNCNAME $* + set_common_variables + if [ "$1" == "" ]; then kde-meta_src_install make dodoc fi -- 2.26.2