diff options
author | Ryan Phillips <rphillips@gentoo.org> | 2003-11-21 17:39:58 +0000 |
---|---|---|
committer | Ryan Phillips <rphillips@gentoo.org> | 2003-11-21 17:39:58 +0000 |
commit | a983f0bdea311b8cf19d9ae779712c52b612a2a6 (patch) | |
tree | f98578efbfb7954a15dfad44d7c502b93c57c13d /eclass | |
parent | RESTRICT="nomirror" (diff) | |
download | gentoo-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.eclass | 205 |
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 |