summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorUlrich Müller <ulm@gentoo.org>2008-10-25 12:17:23 +0000
committerUlrich Müller <ulm@gentoo.org>2008-10-25 12:17:23 +0000
commit0d661dde29ec4746c0a3fb110dc81268b80eb915 (patch)
tree90292c913aeff090612436a3356790f8097ad45b /eclass
parentVersion bump (diff)
downloadgentoo-2-0d661dde29ec4746c0a3fb110dc81268b80eb915.tar.gz
gentoo-2-0d661dde29ec4746c0a3fb110dc81268b80eb915.tar.bz2
gentoo-2-0d661dde29ec4746c0a3fb110dc81268b80eb915.zip
Initial import.
Diffstat (limited to 'eclass')
-rw-r--r--eclass/bzr.eclass246
1 files changed, 246 insertions, 0 deletions
diff --git a/eclass/bzr.eclass b/eclass/bzr.eclass
new file mode 100644
index 000000000000..340b01037a05
--- /dev/null
+++ b/eclass/bzr.eclass
@@ -0,0 +1,246 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/eclass/bzr.eclass,v 1.1 2008/10/25 12:17:23 ulm Exp $
+#
+# @ECLASS: bzr.eclass
+# @MAINTAINER:
+# Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>,
+# Ulrich Mueller <ulm@gentoo.org>,
+# and anyone who wants to help
+# @BLURB: This eclass provides support to use the Bazaar DSCM
+# @DESCRIPTION:
+# The bzr.eclass provides support for apps using the bazaar DSCM
+# (distributed source control management system).
+# The eclass was originally derived from the git eclass.
+#
+# Note: Just set EBZR_REPO_URI to the url of the branch and the src_unpack
+# this eclass provides will put an export of the branch in ${WORKDIR}/${PN}.
+
+inherit eutils
+
+EBZR="bzr.eclass"
+
+EXPORT_FUNCTIONS src_unpack
+
+HOMEPAGE="http://bazaar-vcs.org/"
+DESCRIPTION="Based on the ${EBZR} eclass"
+
+DEPEND=">=dev-util/bzr-1.5"
+
+# @ECLASS-VARIABLE: EBZR_STORE_DIR
+# @DESCRIPTION:
+# The dir to store the bzr sources.
+EBZR_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/bzr-src"
+
+# @ECLASS-VARIABLE: EBZR_FETCH_CMD
+# @DESCRIPTION:
+# The bzr command to fetch the sources.
+EBZR_FETCH_CMD="bzr branch"
+
+# @ECLASS-VARIABLE: EBZR_UPDATE_CMD
+# @DESCRIPTION:
+# The bzr command to update the sources.
+EBZR_UPDATE_CMD="bzr pull"
+
+# @ECLASS-VARIABLE: EBZR_DIFFSTAT_CMD
+# @DESCRIPTION:
+# The bzr command to get the diffstat output.
+EBZR_DIFFSTAT_CMD="bzr diff"
+
+# @ECLASS-VARIABLE: EBZR_EXPORT_CMD
+# @DESCRIPTION:
+# The bzr command to export a branch.
+EBZR_EXPORT_CMD="bzr export"
+
+# @ECLASS-VARIABLE: EBZR_REVNO_CMD
+# @DESCRIPTION:
+# The bzr command to list revision number of the branch.
+EBZR_REVNO_CMD="bzr revno"
+
+# @ECLASS-VARIABLE: EBZR_OPTIONS
+# @DESCRIPTION:
+# The options passed to the fetch and update commands.
+EBZR_OPTIONS="${EBZR_OPTIONS:-}"
+
+# @ECLASS-VARIABLE: EBZR_REPO_URI
+# @DESCRIPTION:
+# The repository uri for the source package.
+#
+# @CODE
+# Supported protocols:
+# - http://
+# - https://
+# - sftp://
+# - rsync://
+# - lp://
+# @CODE
+#
+# Note: lp = https://launchpad.net
+EBZR_REPO_URI="${EBZR_REPO_URI:-}"
+
+# @ECLASS-VARIABLE: EBZR_BOOTSTRAP
+# @DESCRIPTION:
+# Bootstrap script or command like autogen.sh or etc.
+EBZR_BOOTSTRAP="${EBZR_BOOTSTRAP:-}"
+
+# @ECLASS-VARIABLE: EBZR_PATCHES
+# @DESCRIPTION:
+# bzr eclass can apply patches in bzr_bootstrap().
+# you can use regexp in this valiable like *.diff or *.patch or etc.
+# NOTE: this patches will applied before EBZR_BOOTSTRAP is processed.
+#
+# Patches are searched both in ${PWD} and ${FILESDIR}, if not found in either
+# location, the installation dies.
+EBZR_PATCHES="${EBZR_PATCHES:-}"
+
+# @ECLASS-VARIABLE: EBZR_BRANCH
+# @DESCRIPTION:
+# The branch to fetch in bzr_fetch().
+#
+# default: trunk
+EBZR_BRANCH="${EBZR_BRANCH:-trunk}"
+
+# @ECLASS-VARIABLE: EBZR_REVISION
+# @DESCRIPTION:
+# Revision to get, if not latest (see http://bazaar-vcs.org/BzrRevisionSpec)
+EBZR_REVISION="${EBZR_REVISION:-}"
+
+# @ECLASS-VARIABLE: EBZR_CACHE_DIR
+# @DESCRIPTION:
+# The dir to store the source for the package, relative to EBZR_STORE_DIR.
+#
+# default: ${PN}
+EBZR_CACHE_DIR="${EBZR_CACHE_DIR:-${PN}}"
+
+# @FUNCTION: bzr_fetch
+# @DESCRIPTION:
+# Wrapper function to fetch sources from bazaar via bzr fetch or bzr update,
+# depending on whether there is an existing working copy in ${EBZR_BRANCH_DIR}.
+bzr_fetch() {
+ local EBZR_BRANCH_DIR
+
+ # EBZR_REPO_URI is empty.
+ [[ ${EBZR_REPO_URI} ]] || die "${EBZR}: EBZR_REPO_URI is empty."
+
+ # check for the protocol or pull from a local repo.
+ if [[ -z ${EBZR_REPO_URI%%:*} ]] ; then
+ case ${EBZR_REPO_URI%%:*} in
+ # lp:// is https://launchpad.net
+ http|https|rsync|sftp|lp)
+ ;;
+ *)
+ die "${EBZR}: fetch from ${EBZR_REPO_URI%:*} is not yet implemented."
+ ;;
+ esac
+ fi
+
+ if [[ ! -d ${EBZR_STORE_DIR} ]] ; then
+ debug-print "${FUNCNAME}: initial branch. creating bzr directory"
+ addwrite /
+ mkdir -p "${EBZR_STORE_DIR}" \
+ || die "${EBZR}: can't mkdir ${EBZR_STORE_DIR}."
+ export SANDBOX_WRITE="${SANDBOX_WRITE%%:/}"
+ fi
+
+ cd -P "${EBZR_STORE_DIR}" || die "${EBZR}: can't chdir to ${EBZR_STORE_DIR}"
+
+ EBZR_BRANCH_DIR="${EBZR_STORE_DIR}/${EBZR_CACHE_DIR}"
+
+ addwrite "${EBZR_STORE_DIR}"
+ addwrite "${EBZR_BRANCH_DIR}"
+
+ debug-print "${FUNCNAME}: EBZR_OPTIONS = ${EBZR_OPTIONS}"
+
+ local repository
+
+ if [[ ${EBZR_REPO_URI} == */* ]]; then
+ repository="${EBZR_REPO_URI}${EBZR_BRANCH}"
+ else
+ repository="${EBZR_REPO_URI}"
+ fi
+
+ if [[ ! -d ${EBZR_BRANCH_DIR} ]] ; then
+ # fetch branch
+ einfo "bzr branch start -->"
+ einfo " repository: ${repository} => ${EBZR_BRANCH_DIR}"
+
+ ${EBZR_FETCH_CMD} ${EBZR_OPTIONS} "${repository}" "${EBZR_BRANCH_DIR}" \
+ || die "${EBZR}: can't branch from ${repository}."
+
+ else
+ # update branch
+ einfo "bzr pull start -->"
+ einfo " repository: ${repository}"
+
+ cd "${EBZR_BRANCH_DIR}"
+ ${EBZR_UPDATE_CMD} ${EBZR_OPTIONS} "${repository}" \
+ || die "${EBZR}: can't merge from ${repository}."
+ ${EBZR_DIFFSTAT_CMD}
+ fi
+
+ cd "${EBZR_BRANCH_DIR}"
+
+ einfo "exporting ..."
+ ${EBZR_EXPORT_CMD} ${EBZR_REVISION:+-r ${EBZR_REVISION}} "${WORKDIR}/${P}" \
+ || die "${EBZR}: export failed"
+
+ local revision
+ if [[ -n "${EBZR_REVISION}" ]]; then
+ revision="${EBZR_REVISION}"
+ else
+ revision=$(${EBZR_REVNO_CMD} "${EBZR_BRANCH_DIR}")
+ fi
+
+ einfo "Revision ${revision} is now in ${WORKDIR}/${P}"
+
+ cd "${WORKDIR}"
+}
+
+# @FUNCTION: bzr_bootstrap
+# @DESCRIPTION:
+# Apply patches in ${EBZR_PATCHES} and run ${EBZR_BOOTSTRAP} if specified
+bzr_bootstrap() {
+ local patch lpatch
+
+ cd "${S}"
+
+ if [[ -n ${EBZR_PATCHES} ]] ; then
+ einfo "apply patches -->"
+
+ for patch in ${EBZR_PATCHES} ; do
+ if [[ -f ${patch} ]] ; then
+ epatch ${patch}
+ else
+ for lpatch in "${FILESDIR}"/${patch} ; do
+ if [[ -f ${lpatch} ]] ; then
+ epatch ${lpatch}
+ else
+ die "${EBZR}: ${patch} is not found"
+ fi
+ done
+ fi
+ done
+ fi
+
+ if [[ -n ${EBZR_BOOTSTRAP} ]] ; then
+ einfo "begin bootstrap -->"
+
+ if [[ -f ${EBZR_BOOTSTRAP} ]] && [[ -x ${EBZR_BOOTSTRAP} ]] ; then
+ einfo " bootstrap with a file: ${EBZR_BOOTSTRAP}"
+ "./${EBZR_BOOTSTRAP}" \
+ || die "${EBZR}: can't execute EBZR_BOOTSTRAP."
+ else
+ einfo " bootstrap with commands: ${EBZR_BOOTSTRAP}"
+ "${EBZR_BOOTSTRAP}" \
+ || die "${EBZR}: can't eval EBZR_BOOTSTRAP."
+ fi
+ fi
+}
+
+# @FUNCTION: bzr_src_unpack
+# @DESCRIPTION:
+# default src_unpack. fetch and bootstrap.
+bzr_src_unpack() {
+ bzr_fetch || die "${EBZR}: unknown problem in bzr_fetch()."
+ bzr_bootstrap || die "${EBZR}: unknown problem in bzr_bootstrap()."
+}