summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Armak <danarmak@gentoo.org>2001-12-23 21:35:16 +0000
committerDan Armak <danarmak@gentoo.org>2001-12-23 21:35:16 +0000
commit1c972c5365a6e0773d3bf96d3a5145d0c6bf8853 (patch)
tree250ee40fe0f6b1aed3b6c863e308f78dac7811e8 /eclass/kde.eclass
parenttiny bootstrap update to be super-sure bootstrap works. (diff)
downloadgentoo-2-1c972c5365a6e0773d3bf96d3a5145d0c6bf8853.tar.gz
gentoo-2-1c972c5365a6e0773d3bf96d3a5145d0c6bf8853.tar.bz2
gentoo-2-1c972c5365a6e0773d3bf96d3a5145d0c6bf8853.zip
eclasses v5 and ebuilds to match :-) see the gentoo-dev message; do not edit any inheriting ebuilds
before reading the changelog.
Diffstat (limited to 'eclass/kde.eclass')
-rw-r--r--eclass/kde.eclass306
1 files changed, 301 insertions, 5 deletions
diff --git a/eclass/kde.eclass b/eclass/kde.eclass
index a3cdce6ed62d..044d2a612e1b 100644
--- a/eclass/kde.eclass
+++ b/eclass/kde.eclass
@@ -1,9 +1,9 @@
# Copyright 1999-2000 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# Author Dan Armak <danarmak@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/eclass/kde.eclass,v 1.21 2001/12/23 14:25:28 danarmak Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/kde.eclass,v 1.22 2001/12/23 21:35:15 danarmak Exp $
# The kde eclass is inherited by all kde-* eclasses. Few ebuilds inherit straight from here.
-inherit autoconf base depend || die
+inherit autoconf base || die
ECLASS=kde
DESCRIPTION="Based on the $ECLASS eclass"
@@ -14,6 +14,26 @@ DEPEND="$DEPEND kde-base/kdelibs
objprelink? ( >=dev-util/objprelink-0-r1 )"
RDEPEND="$RDEPEND kde-base/kdelibs"
+# resolution function: kde version -> qt version
+# wish we had something like python dictionaries here :-)
+# gets kde version in $1 and returns matching qt version in $matching_qt_ver
+# if none matches, returns -1
+qtver-from-kdever() {
+
+ debug-print-function $FUNCNAME $*
+
+ case "$1" in
+ 2_* | 2 | 2.0*) matching_qt_ver=2;;
+ 2.1*) matching_qt_ver=2.1;;
+ 2.2*) matching_qt_ver=2.3.1;;
+ 3_* | 3 | 3.0*) matching_qt_ver=3.0.1;;
+ *) matching_qt_ver=-1
+ esac
+
+ debug-print "$FUNCNAME: resolved KDE version $1 to QT version $matching_qt_ver"
+
+}
+
kde-objprelink-patch() {
debug-print-function $FUNCNAME $*
if [ "`use objprelink`" ]; then
@@ -48,8 +68,6 @@ kde_src_compile() {
case $1 in
myconf)
debug-print-section myconf
- set-kdedir $kde_version
- set-qtdir $qt_version
myconf="$myconf --host=${CHOST} --with-x --enable-mitshm --with-xinerama --prefix=/usr --with-qt-dir=${QTDIR}"
use qtmt && myconf="$myconf --enable-mt"
use objprelink && myconf="$myconf --enable-objprelink" || myconf="$myconf --disable-objprelink"
@@ -57,7 +75,7 @@ kde_src_compile() {
;;
configure)
debug-print-section configure
- debug-print "configure: myconf=$myconf"
+ debug-print "$FUNCNAME::configure: myconf=$myconf"
./configure ${myconf} || die
;;
make)
@@ -104,7 +122,285 @@ kde_src_install() {
EXPORT_FUNCTIONS src_compile src_install
+# This used to be depend.eclass. At some point I realized it might as well be called kd-depend.eclass. And then
+# because functions fom there needed functions from here and vice versa I merged them.
+
+#---------------
+
+# This provides the need-kde and need-qt functions, which handle setting KDEDIR
+# and QTDIR for the multi-qt and multi-kdelibs schemes. The functions set-kdedir and
+# set-qtdir are called from kde.eclass; the need-* functions from the ebuild.
+
+# A helper function that takes a dot-separated string and builds an array from its parts.
+# We need this for version comparisons becaus bash can't compare e.g. 2.2.2 and 2.12.3.
+# array created is called version_parts
+# 1st parameter: string to separate
+# 2nd parameter: separator char(s) (optional, defaults to "._" dot and underscore)
+# 3rd parameter: name of array to create (optional, defaults to "version")
+# 4th parameter: minimal number of version parts (optional, defaults to 0). If after
+# separation this number is not reached, the necessary amount of parts is added with value 0.
+# This is a very ugly kludge as there is also a 0th element of the array which isn't counted on
+# purpose, because that's how we want it to be. In short, you shouldn't use this outside depend.eclass :-)
+separate-string() {
+
+ debug-print-function $FUNCNAME $*
+
+ [ -n "$3" ] && arr="$3" || arr="version"
+ [ -n "$2" ] && sep="$2" || sep="._"
+ [ -n "$4" ] && min="$4" || min=0
+ IFSBACKUP=$IFS
+ IFS=$sep
+
+ local index
+ index=0
+ for x in $1
+ do
+ eval $arr[$index]=$x
+ debug-print "$FUNCNAME: adding to array, index = $index, value = $x"
+ let "index+=1"
+ done
+
+ while [ "$index" -le "$min" ] # <= not < because $index ends up being larger by 1 than the amount of elements in the array
+ do
+ eval $arr[$index]=0
+ debug-print "$FUNCNAME: adding to array, index = $index, value = 0"
+ let "index+=1"
+ done
+
+ debug-print
+
+ IFS=$IFSBACKUP
+
+}
+
+# The version comparison/selection function. Uses separate-string() to break down
+# version numbers into their components and selects the one to use. Assumes *some*
+# good version is installed, as we add the requirment to DEPEND/RDEPEND. Is used for
+# both qt and kdelibs.
+# 1st parameter: required (minimal) version
+# 2nd parameter: list of space-separated versions to choose from
+select-version() {
+
+ debug-print-function $FUNCNAME $*
+
+ # 2d arrays in bash are troublesome, so we do this:
+ # sanity check - make sure we've got all parameters
+ if [ $# != 2 ]; then
+ echo "!!! Error: $FUNCNAME did not get all required parameters.
+!!! You can check what it did get with eclass debug output."
+ exit 1
+ fi
+
+ # to facilitate handling of release types (alpha,beta,pre,rc) we replace them with numbers
+ local needed list
+ needed="`echo $1 | sed -e 's/alpha/-4./' \
+ -e 's/beta/-3./' \
+ -e 's/pre/-2./' \
+ -e 's/rc/-1./' `"
+ list="`echo $2 | sed -e 's/alpha/-4./' \
+ -e 's/beta/-3./' \
+ -e 's/pre/-2./' \
+ -e 's/rc/-1./' `"
+
+ # because we're going to separate each version number into its components,
+ # once we've selected one it'll be difficult to "unseparate" it, recreatg e.g.
+ # beta/alpha/underscores etc. So we prepend a ser. number to each. Since we
+ # don't know the length/number of parts in a version number at this stage,
+ # we can't append the index but must prepend it. Then it'll live as part 0
+ # of the separated version number, while we'll deal with parts 1 through 5.
+ local index templist
+ index=1
+ templist="$list"
+ list=""
+ for x in $templist; do
+ list="${list} ${index}.${x}"
+ let "index+=1"
+ done
+
+ debug-print "$FUNCNAME: after parsing, list = $list"
+
+ # parse required version number $1 -> array "req"
+ separate-string 0.$1 ._ req 5
+ debug-print "$FUNCNAME: for \$1 = $1, we've got back a req with contents = ${req[*]}"
+
+ # init array "best" to major,-1,-1 so that any alternative is better (major is
+ # major version number of needed). give it a nonexistent index.
+ declare -a best
+ best=( 0 ${req[1]} -10 -10 -10 -10 -10 )
+
+ # for each version number in $list:
+ local x ver
+ for ver in $list
+ do
+ # parse version number -> array "cur"
+ separate-string $ver ._ cur 5
+ debug-print "$FUNCNAME: for ver = $ver, we've got back a cur with contents = ${cur[*]}"
+
+ # check if it satisfies the requirements. if not, pass to the next x.
+ # 1. major version numer is = to that of req
+ [ ${cur[1]} -eq ${req[1]} ] || continue
+
+ # 2. check whether minor version and revision of cur are >= those of best
+ # if = continue checking (lower levels), if > select right away, if < break
+ # we typically have upto 5 levels: major, minor, revision,
+ # release type (alpha, beta...), release type number (beta1, beta2...)
+ for x in 2 3 4 5
+ do
+ debug-print "$FUNCNAME: will compare place $x. in cur: ${cur[$x]}, in best: ${best[$x]}"
+ if [ "${cur[$x]}" -gt "${best[$x]}" ]; then
+ debug-print "$FUNCNAME: comparison result is >"
+ # set best to equal cur
+ best=( "${cur[@]}" )
+ continue 2 # next iteration of outer loop
+ elif [ "${cur[$x]}" -lt "${best[$x]}" ]; then
+ debug-print "$FUNCNAME: comparison result is <"
+ continue 2 # next iteration of outer loop
+ # this is all implicitly done
+ else # [ ${cur[2]} -eq ${best[2]} ]
+ debug-print "$FUNCNAME: comparison result is ="
+ # # see if we've reached the last iteration
+ # if [ "$x" = "5" ]; then
+ # # this is exactly the version we need, i.e. req = cur.
+ # # so we don't have to do anything at all :-)
+ # fi
+ # continue # next iteration of this loop
+ #fi
+ fi
+ done
+
+ done
+
+ # find the coresponding "unseparated" version number in the orig. $list using
+ # the indexes we planted
+ local result count
+ index=${best[0]}
+ debug-print "$FUNCNAME: best has index number $index \
+compare with $list \
+search for it in $2"
+ count=1
+ for x in $2; do
+ if [ "$count" = "$index" ]; then
+ result=$x
+ break
+ fi
+ let "count+=1"
+ done
+
+ if [ -z "$result" ]; then
+ # we're in serious troble
+ echo "!!! Error: $FUNCNAME could not find/select a satisfying version number!
+!!! If this surprises you, it shouldn't have happened. If you're using
+!!! the prerelease kde3 ebuilds make sure you have the latest kdelibs3
+!!! and qt3 emerged. If you do have them, or don't know what i'm talking
+!!! about, report this as a bug."
+ exit 1
+ fi
+
+ # strip all spaces
+ result="${result// }"
+ # return, tired but satisfied
+ selected_version=$result
+ debug-print "$FUNCNAME: final result: returning selected_version = $selected_version"
+
+}
+
+set-kdedir() {
+
+ debug-print-function $FUNCNAME $*
+
+ biglist="`ls -d1 /usr/lib/kdelibs-*`"
+ debug-print "$FUNCNAME: \$biglist:
+${biglist}"
+
+ # filter $biglist to create $list
+ list=""
+ for x in $biglist; do
+ # strip path, leave version number
+ x="`echo $x | sed -e 's:/usr/lib/kdelibs-::'`"
+ list="$list $x"
+ done
+
+ debug-print "$FUNCNAME: filtered \$biglist and got this \$list:
+$list"
+
+ # select version
+ select-version $KDEVER "$list"
+
+ # check and set
+ if [ -z "$selected_version" ]; then
+ echo "!!! $FUNCNAME: no match returned by select-version! Please report."
+ else
+ export KDEDIR="/usr/lib/kdelibs-$selected_version"
+ fi
+
+}
+
+need-kde() {
+
+ KDEVER="$1"
+ debug-print-function $FUNCNAME $*
+ debug-print "$FUNCNAME: version number is $KDEVER"
+
+ separate-string $KDEVER ._ KDEVER 5
+
+ KDEMAJORVER=KDEVER[0]
+
+ newdepend ">=kde-base/kdelibs-$KDEVER"
+
+ set-kdedir
+
+ qtver-from-kdever $KDEVER
+ need-qt $matching_qt_ver
+
+}
+
+set-qtdir() {
+
+ debug-print-function $FUNCNAME $*
+
+ biglist="`ls -d1 /usr/lib/qt-x11-*`"
+ debug-print "$FUNCNAME: \$biglist:
+${biglist}"
+
+ # filter $biglist to create $list
+ list=""
+ for x in $biglist; do
+ # strip path, leave version number
+ x="`echo $x | sed -e 's:/usr/lib/qt-x11-::'`"
+ list="$list $x"
+ done
+
+ debug-print "$FUNCNAME: filtered \$biglist and got this \$list:
+$list"
+
+ # select version
+ select-version $QTVER "$list"
+
+ # check and set
+ if [ -z "$selected_version" ]; then
+ echo "!!! $FUNCNAME: no match returned by select-version! Please report."
+ else
+ export QTDIR="/usr/lib/qt-x11-$selected_version"
+ fi
+
+}
+
+need-qt() {
+
+ QTVER="$1"
+ debug-print-function $FUNCNAME $*
+ debug-print "$FUNCNAME: version number is $QTVER"
+
+ separate-string $QTVER ._ QTVER 5
+
+ QTMAJORVER=QTVER[0]
+
+ newdepend ">=x11-libs/qt-x11-$QTVER"
+
+ set-qtdir
+
+}