summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'eclass/cargo.eclass')
-rw-r--r--eclass/cargo.eclass57
1 files changed, 38 insertions, 19 deletions
diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass
index 19c66c8d4aa8..f2b2b12149d1 100644
--- a/eclass/cargo.eclass
+++ b/eclass/cargo.eclass
@@ -22,11 +22,7 @@ EXPORT_FUNCTIONS src_unpack src_compile src_install
IUSE="${IUSE} debug"
ECARGO_HOME="${WORKDIR}/cargo_home"
-#ECARGO_REPO="github.com-88ac128001ac3a9a"
-ECARGO_REPO="github.com-1ecc6299db9ec823"
-ECARGO_INDEX="${ECARGO_HOME}/registry/index/${ECARGO_REPO}"
-ECARGO_SRC="${ECARGO_HOME}/registry/src/${ECARGO_REPO}"
-ECARGO_CACHE="${ECARGO_HOME}/registry/cache/${ECARGO_REPO}"
+ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
# @FUNCTION: cargo_crate_uris
# @DESCRIPTION:
@@ -47,18 +43,29 @@ cargo_crate_uris() {
cargo_src_unpack() {
debug-print-function ${FUNCNAME} "$@"
- mkdir -p "${ECARGO_INDEX}" || die
- mkdir -p "${ECARGO_CACHE}" || die
- mkdir -p "${ECARGO_SRC}" || die
+ mkdir -p "${ECARGO_VENDOR}" || 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
+ ebegin "Loading ${archive} into Cargo registry"
+ tar -xf "${DISTDIR}"/${archive} -C "${ECARGO_VENDOR}/" || die
+ # generate sha256sum of the crate itself as cargo needs this
+ shasum=$(sha256sum "${DISTDIR}"/${archive} | cut -d ' ' -f 1)
+ pkg=$(basename ${archive} .crate)
+ cat <<- EOF > ${ECARGO_VENDOR}/${pkg}/.cargo-checksum.json
+ {
+ "package": "${shasum}",
+ "files": {}
+ }
+ EOF
+ # if this is our target package we need it in ${WORKDIR} too
+ # to make ${S} (and handle any revisions too)
+ if [[ ${P} == ${pkg}* ]]; then
+ tar -xf "${DISTDIR}"/${archive} -C "${WORKDIR}" || die
+ fi
eend $?
;;
cargo-snapshot*)
@@ -70,18 +77,29 @@ cargo_src_unpack() {
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
+
+ cargo_gen_config
+}
+
+# @FUNCTION: cargo_gen_config
+# @DESCRIPTION:
+# Generate the $CARGO_HOME/config necessary to use our local registry
+cargo_gen_config() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ cat <<- EOF > ${ECARGO_HOME}/config
+ [source.gentoo]
+ directory = "${ECARGO_VENDOR}"
+
+ [source.crates-io]
+ replace-with = "gentoo"
+ local-registry = "/nonexistant"
+ EOF
}
# @FUNCTION: cargo_src_compile
@@ -92,7 +110,8 @@ cargo_src_compile() {
export CARGO_HOME="${ECARGO_HOME}"
- cargo build -v $(usex debug "" --release)
+ cargo build -v $(usex debug "" --release) \
+ || die "cargo build failed"
}
# @FUNCTION: cargo_src_install