summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Goldstein <cardoe@gentoo.org>2016-06-29 09:30:02 -0500
committerDoug Goldstein <cardoe@gentoo.org>2016-06-29 16:59:11 -0500
commitd3597bc14c65849fde63ca9d96be1e579e297146 (patch)
tree1e6b7a98f7108512dae79861237a536892fed7fe /eclass/cargo.eclass
parentgames-emulation/dboxfe: removed deprecated games/qt4-r2 eclasses (diff)
downloadgentoo-d3597bc14c65849fde63ca9d96be1e579e297146.tar.gz
gentoo-d3597bc14c65849fde63ca9d96be1e579e297146.tar.bz2
gentoo-d3597bc14c65849fde63ca9d96be1e579e297146.zip
eclass: initial cargo support eclass
Base eclass for cargo that handles setting up the cargo registry and provides a way to fetch crates. Signed-off-by: Doug Goldstein <cardoe@gentoo.org>
Diffstat (limited to 'eclass/cargo.eclass')
-rw-r--r--eclass/cargo.eclass85
1 files changed, 85 insertions, 0 deletions
diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass
new file mode 100644
index 000000000000..8c5e00ccb8f6
--- /dev/null
+++ b/eclass/cargo.eclass
@@ -0,0 +1,85 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+# @ECLASS: cargo.eclass
+# @MAINTAINER:
+# rust@gentoo.org
+# @AUTHOR:
+# Doug Goldstein <cardoe@gentoo.org>
+# @BLURB: common functions and variables for cargo builds
+
+if [[ -z ${_CARGO_ECLASS} ]]; then
+_CARGO_ECLASS=1
+
+case ${EAPI} in
+ 6) : ;;
+ *) die "EAPI=${EAPI:-0} is not supported" ;;
+esac
+
+EXPORT_FUNCTIONS src_unpack
+
+ECARGO_HOME="${WORKDIR}/cargo_home"
+ECARGO_REGISTRY="github.com-88ac128001ac3a9a"
+ECARGO_INDEX="${ECARGO_HOME}/registry/index/${ECARGO_REGISTRY}"
+ECARGO_SRC="${ECARGO_HOME}/registry/src/${ECARGO_REGISTRY}"
+ECARGO_CACHE="${ECARGO_HOME}/registry/cache/${ECARGO_REGISTRY}"
+
+# @FUNCTION: cargo_crate_uris
+# @DESCRIPTION:
+# Generates the URIs to put in SRC_URI to help fetch dependencies.
+cargo_crate_uris() {
+ for crate in $*; do
+ local name version url
+ name="${crate%-*}"
+ version="${crate##*-}"
+ url="https://crates.io/api/v1/crates/${name}/${version}/download -> ${crate}.crate"
+ echo $url
+ done
+}
+
+# @FUNCTION: cargo_src_unpack
+# @DESCRIPTION:
+# Unpacks the package and the cargo registry
+cargo_src_unpack() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ mkdir -p "${ECARGO_INDEX}" || die
+ mkdir -p "${ECARGO_CACHE}" || die
+ mkdir -p "${ECARGO_SRC}" || die
+ mkdir -p "${S}" || die
+
+ local archive
+ for archive in ${A}; do
+ case "${archive}" in
+ *.crate)
+ ebegin "Unpacking ${archive}"
+ cp "${DISTDIR}"/${archive} "${ECARGO_CACHE}/" || die
+ tar -xf "${DISTDIR}"/${archive} -C "${ECARGO_SRC}/" || die
+ eend $?
+ ;;
+ cargo-snapshot*)
+ ebegin "Unpacking ${archive}"
+ mkdir -p "${S}"/target/snapshot
+ tar -xzf "${DISTDIR}"/${archive} -C "${S}"/target/snapshot --strip-components 2 || die
+ # cargo's makefile needs this otherwise it will try to
+ # download it
+ touch "${S}"/target/snapshot/bin/cargo || die
+ eend $?
+ ;;
+ cargo-registry*)
+ ebegin "Unpacking ${archive}"
+ tar -xzf "${DISTDIR}"/${archive} -C "${ECARGO_INDEX}" --strip-components 1 || die
+ # prevent cargo from attempting to download this again
+ touch "${ECARGO_INDEX}"/.cargo-index-lock || die
+ eend $?
+ ;;
+ *)
+ unpack ${archive}
+ ;;
+ esac
+ done
+}
+
+
+fi