commit:     772ae1adf22085b5bdb61566c420839525fc7feb
Author:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
AuthorDate: Sat Jul  3 05:51:54 2021 +0000
Commit:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Sat Jul  3 06:59:10 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=772ae1ad

cargo.eclass: make CRATES pre-inherit

also make first arg to cargo_crate_uris optional
die if CRATES variable is not defined in EAPI=8

Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>

 eclass/cargo.eclass | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass
index 50237d302ce..938511e410f 100644
--- a/eclass/cargo.eclass
+++ b/eclass/cargo.eclass
@@ -34,6 +34,11 @@ case "${EAPI:-0}" in
                # 1.52 may need setting RUSTC_BOOTSTRAP envvar for some crates
                # 1.53 added cargo update --offline, can be used to update 
vulnerable crates from pre-fetched registry without editing toml
                RUST_DEPEND=">=virtual/rust-1.53"
+
+               if [[ -z ${CRATES} && "${PV}" != *9999* ]]; then
+                       eerror "undefined CRATES variable in non-live EAPI=8 
ebuild"
+                       die "CRATES variable not defined"
+               fi
                ;;
        *)
                die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}"
@@ -54,6 +59,7 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
 
 # @ECLASS-VARIABLE: CRATES
 # @DEFAULT_UNSET
+# @PRE_INHERIT
 # @DESCRIPTION:
 # bash string containing all crates package wants to download
 # used by cargo_crate_uris()
@@ -66,7 +72,7 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
 # "
 # inherit cargo
 # ...
-# SRC_URI="$(cargo_crate_uris ${CRATES})"
+# SRC_URI="$(cargo_crate_uris)"
 # @CODE
 
 # @ECLASS-VARIABLE: CARGO_OPTIONAL
@@ -131,10 +137,22 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
 # @FUNCTION: cargo_crate_uris
 # @DESCRIPTION:
 # Generates the URIs to put in SRC_URI to help fetch dependencies.
+# Uses first argument as crate list.
+# If no argument provided, uses CRATES variable.
 cargo_crate_uris() {
        local -r regex='^([a-zA-Z0-9_\-]+)-([0-9]+\.[0-9]+\.[0-9]+.*)$'
-       local crate
-       for crate in "$@"; do
+       local crate crates
+
+       if [[ -n ${@} ]]; then
+               crates="$@"
+       elif [[ -n ${CRATES} ]]; then
+               crates="${CRATES}"
+       else
+               eerror "CRATES variable is not defined and nothing passed as 
argument"
+               die "Can't generate SRC_URI from empty input"
+       fi
+
+       for crate in ${crates}; do
                local name version url
                [[ $crate =~ $regex ]] || die "Could not parse name and version 
from crate: $crate"
                name="${BASH_REMATCH[1]}"

Reply via email to