summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorRyan Phillips <rphillips@gentoo.org>2003-11-21 17:39:58 +0000
committerRyan Phillips <rphillips@gentoo.org>2003-11-21 17:39:58 +0000
commita983f0bdea311b8cf19d9ae779712c52b612a2a6 (patch)
treef98578efbfb7954a15dfad44d7c502b93c57c13d /eclass
parentRESTRICT="nomirror" (diff)
downloadgentoo-2-a983f0bdea311b8cf19d9ae779712c52b612a2a6.tar.gz
gentoo-2-a983f0bdea311b8cf19d9ae779712c52b612a2a6.tar.bz2
gentoo-2-a983f0bdea311b8cf19d9ae779712c52b612a2a6.zip
Added Jeffrey Yasskin's TLA eclass
Diffstat (limited to 'eclass')
-rw-r--r--eclass/tla.eclass205
1 files changed, 205 insertions, 0 deletions
diff --git a/eclass/tla.eclass b/eclass/tla.eclass
new file mode 100644
index 000000000000..606897a85dd4
--- /dev/null
+++ b/eclass/tla.eclass
@@ -0,0 +1,205 @@
+# Copyright 2003 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/eclass/tla.eclass,v 1.1 2003/11/21 17:39:58 rphillips Exp $
+#
+# Original Author: Jeffrey Yasskin <jyasskin@mail.utexas.edu>
+#
+# Originally derived from the cvs eclass.
+#
+# This eclass provides the generic tla fetching functions.
+# to use from an ebuild, set the 'ebuild-configurable settings' below in your
+# ebuild before inheriting. then either leave the default src_unpack or extend
+# over tla_src_unpack.
+
+# Most of the time, you will define only $ETLA_VERSION and $ETLA_ARCHIVES in
+# your ebuild.
+
+# TODO:
+# Make it support particular revisions.
+
+ECLASS=tla
+INHERITED="$INHERITED $ECLASS"
+
+# Don't download anything other than the tla archive
+SRC_URI=""
+
+# You shouldn't change these settings yourself! The ebuild/eclass inheriting
+# this eclass will take care of that.
+
+# --- begin ebuild-configurable settings
+
+# tla command to run. Theoretically, substituting any arch derivative should be
+# relatively easy.
+[ -z "$ETLA_TLA_CMD" ] && ETLA_TLA_CMD="tla"
+
+# tla commands with options
+[ -z "$ETLA_GET_CMD" ] && ETLA_GET_CMD="get"
+[ -z "$ETLA_UPDATE_CMD" ] && ETLA_UPDATE_CMD="replay"
+
+# Where the tla modules are stored/accessed
+[ -z "$ETLA_TOP_DIR" ] && ETLA_TOP_DIR="${DISTDIR}/tla-src"
+
+# Name of tla version in the format
+# user@example.com--archive-name/category--branch--version
+# (in other words, an argument to tla get, update, or replay)
+[ -z "$ETLA_VERSION" ] && ETLA_VERSION=""
+
+# A space-separated list of significant archive URLs. You should definitely
+# include the URL for the archive your version is stored in, and if it refers
+# to any other archives, also list them.
+[ -z "$ETLA_ARCHIVES" ] && ETLA_ARCHIVES=""
+
+# The location in which to cache the version, relative to $ETLA_TOP_DIR.
+[ -z "$ETLA_CACHE_DIR" ] && ETLA_CACHE_DIR="${ETLA_VERSION}"
+
+# ETLA_CLEAN: set this to something to get a clean copy when updating (removes
+# the working directory, then uses $ETLA_GET_CMD to re-download it.)
+
+# --- end ebuild-configurable settings ---
+
+# add tla to deps
+newdepend "dev-util/tla"
+
+# registers archives mentioned in $ETLA_ARCHIVES
+tla_register_archives() {
+ debug-print-function $FUNCNAME $* $ETLA_ARCHIVES
+
+ for archive in $ETLA_ARCHIVES; do
+ $ETLA_TLA_CMD register-archive $archive || die "Could not register archive $archive"
+ done
+}
+
+# checks that configuration variables have rational values.
+tla_check_vars() {
+ [ -z "$ETLA_VERSION" ] && die "ETLA_VERSION must be set by the ebuild. Please fix this ebuild."
+ $ETLA_TLA_CMD valid-package-name --archive --vsn $ETLA_VERSION || \
+ die "ETLA_VERSION has an invalid format. Please fix this ebuild."
+}
+
+# is called from tla_src_unpack
+tla_fetch() {
+
+ debug-print-function $FUNCNAME $*
+
+ if [ -n "$ETLA_CLEAN" ]; then
+ rm -rf $ETLA_TOP_DIR/$ETLA_CACHE_DIR
+ fi
+
+ # create the top dir if needed
+ if [ ! -d "$ETLA_TOP_DIR" ]; then
+ # note that the addwrite statements in this block are only there to allow creating ETLA_TOP_DIR;
+ # we've already allowed writing inside it
+ # this is because it's simpler than trying to find out the parent path of the directory, which
+ # would need to be the real path and not a symlink for things to work (so we can't just remove
+ # the last path element in the string)
+ debug-print "$FUNCNAME: checkout mode. creating tla directory"
+ addwrite /foobar
+ addwrite /
+ mkdir -p "$ETLA_TOP_DIR"
+ export SANDBOX_WRITE="${SANDBOX_WRITE//:\/foobar:\/}"
+ fi
+
+ # in case ETLA_TOP_DIR is a symlink to a dir, get the real dir's path,
+ # otherwise addwrite() doesn't work.
+ cd -P "$ETLA_TOP_DIR" > /dev/null
+ ETLA_TOP_DIR="`/bin/pwd`"
+
+ # disable the sandbox for this dir
+ addwrite "$ETLA_TOP_DIR"
+
+ # break $ETLA_VERSION into pieces
+ local tla_archive=`$ETLA_TLA_CMD parse-package-name --arch $ETLA_VERSION`
+ local tla_version=`$ETLA_TLA_CMD parse-package-name --package-version $ETLA_VERSION`
+ #local tla_revision=`$ETLA_TLA_CMD parse-package-name --lvl $ETLA_VERSION`
+
+ # determine checkout or update mode and change to the right directory.
+ if [ ! -d "$ETLA_TOP_DIR/$ETLA_CACHE_DIR/{arch}" ]; then
+ mode=get
+ mkdir -p "$ETLA_TOP_DIR/$ETLA_CACHE_DIR"
+ cd "$ETLA_TOP_DIR/$ETLA_CACHE_DIR/.."
+ rmdir "`basename "$ETLA_CACHE_DIR"`"
+ else
+ mode=update
+ cd "$ETLA_TOP_DIR/$ETLA_CACHE_DIR"
+ fi
+
+ # switch versions automagically if needed
+ if [ "$mode" == "update" ]; then
+ local oldversion="`$ETLA_TLA_CMD tree-version`"
+ if [ "$tla_archive/$tla_version" != "$oldversion" ]; then
+
+ einfo "Changing TLA version from $oldversion to $tla_archive/$tla_version:"
+ debug-print "$FUNCNAME: Changing TLA version from $oldversion to $tla_archive/$tla_version:"
+
+ $ETLA_TLA_CMD set-tree-version $tla_archive/$tla_version
+
+ fi
+ fi
+
+ # commands to run
+ local cmdget="${ETLA_TLA_CMD} ${ETLA_GET_CMD} ${ETLA_VERSION} `basename $ETLA_CACHE_DIR`"
+ local cmdupdate="${ETLA_TLA_CMD} ${ETLA_UPDATE_CMD} ${ETLA_VERSION}"
+
+ if [ "${mode}" == "get" ]; then
+ einfo "Running $cmdget"
+ eval $cmdget || die "tla get command failed"
+ elif [ "${mode}" == "update" ]; then
+ einfo "Running $cmdupdate"
+ eval $cmdupdate || die "tla update command failed"
+ fi
+
+}
+
+
+tla_src_unpack() {
+
+ debug-print-function $FUNCNAME $*
+
+ debug-print "$FUNCNAME: init:
+ ETLA_TLA_CMD=$ETLA_TLA_CMD
+ ETLA_GET_CMD=$ETLA_GET_CMD
+ ETLA_UPDATE_CMD=$ETLA_UPDATE_CMD
+ ETLA_TOP_DIR=$ETLA_TOP_DIR
+ ETLA_VERSION=$ETLA_VERSION
+ ETLA_ARCHIVES=$ETLA_ARCHIVES
+ ETLA_CACHE_DIR=$ETLA_CACHE_DIR
+ ETLA_CLEAN=$ETLA_CLEAN"
+
+ einfo "Registering Archives..."
+ tla_register_archives
+
+ einfo "Checking that passed-in variables are rational..."
+ tla_check_vars
+
+ einfo "Fetching tla version $ETLA_VERSION into $ETLA_TOP_DIR..."
+ tla_fetch
+
+ einfo "Copying $ETLA_CACHE_DIR from $ETLA_TOP_DIR..."
+ debug-print "Copying $ETLA_CACHE_DIR from $ETLA_TOP_DIR..."
+
+ # probably redundant, but best to make sure
+ # Use ${WORKDIR}/${P} rather than ${S} so user can point ${S} to something inside.
+ mkdir -p "${WORKDIR}/${P}"
+
+ shopt -s dotglob # get any dotfiles too.
+ cp -Rf "$ETLA_TOP_DIR/$ETLA_CACHE_DIR"/* "${WORKDIR}/${P}"
+
+ # implement some of base_src_unpack's functionality;
+ # note however that base.eclass may not have been inherited!
+ #if [ -n "$PATCHES" ]; then
+ # debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching"
+ # cd "$S"
+ # for x in $PATCHES; do
+ # debug-print "patching from $x"
+ # patch -p0 < "$x"
+ # done
+ # # make sure we don't try to apply patches more than once, since
+ # # tla_src_unpack may be called several times
+ # export PATCHES=""
+ #fi
+
+ einfo "Version ${ETLA_VERSION} is now in ${WORKDIR}/${P}"
+
+}
+
+EXPORT_FUNCTIONS src_unpack