commit:     d3597bc14c65849fde63ca9d96be1e579e297146
Author:     Doug Goldstein <cardoe <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 29 14:30:02 2016 +0000
Commit:     Doug Goldstein <cardoe <AT> gentoo <DOT> org>
CommitDate: Wed Jun 29 21:59:11 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d3597bc1

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 <AT> gentoo.org>

 eclass/cargo.eclass | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)

diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass
new file mode 100644
index 0000000..8c5e00c
--- /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:
+# r...@gentoo.org
+# @AUTHOR:
+# Doug Goldstein <car...@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

Reply via email to