From: Matt Jolly <kan...@gentoo.org>

Inherit the rust eclass and take advantage of eclass features like
`RUST_MIN_VER`.

Also replace calls to `cargo` with the rust eclass exported ${CARGO}.

If used without llvm-r1 (typical usage) an || dependency on Rust
slots (between `RUST_M{AX,IN}_VER` if set) will be added.

If intending to use with llvm-r1 for a tight dependency, set
`RUST_NEEDS_LLVM` to automatically add a `llvm_slot_X` USE gated
Rust dependency for each slot in LLVM_COMPAT to BDEPEND.
This respects `RUST_M{AX,IN}_VER`.

Signed-off-by: Matt Jolly <kan...@gentoo.org>
---
 eclass/cargo.eclass | 46 ++++++++++++++++++++++++++++++++-------------
 1 file changed, 33 insertions(+), 13 deletions(-)

diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass
index 499fe5498c96..c74c2b29045c 100644
--- a/eclass/cargo.eclass
+++ b/eclass/cargo.eclass
@@ -8,6 +8,7 @@
 # Doug Goldstein <car...@gentoo.org>
 # Georgy Yakovlev <gyakov...@gentoo.org>
 # @SUPPORTED_EAPIS: 8
+# @PROVIDES: rust
 # @BLURB: common functions and variables for cargo builds
 
 case ${EAPI} in
@@ -18,23 +19,39 @@ esac
 if [[ -z ${_CARGO_ECLASS} ]]; then
 _CARGO_ECLASS=1
 
-# check and document RUST_DEPEND and options we need below in case conditions.
+if [[ -n ${RUST_NEEDS_LLVM} ]]; then
+       if [[ -z ${_LLVM_R1_ECLASS} ]]; then
+               die "Please inherit llvm-r1.eclass before cargo.eclass when 
using RUST_NEEDS_LLVM"
+       fi
+fi
+
+# Either the lowest slot supported by rust.eclass _or_
+# reference the changelog for a particular feature requirement
 # https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md
-RUST_DEPEND="virtual/rust"
+_CARGO_ECLASS_RUST_MIN_VER="1.71.1"
 
 case ${EAPI} in
        8)
-               # 1.39 added --workspace
-               # 1.46 added --target dir
-               # 1.48 added term.progress config option
-               # 1.51 added split-debuginfo profile option
-               # 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 [[ -n ${RUST_MIN_VER} ]]; then
+                       # This is _very_ unlikely given that we leverage the 
rust eclass but just in case cargo requires a newer version
+                       # than the oldest in-tree in future.
+                       if ver_test "${RUST_MIN_VER}" -lt 
"${_CARGO_ECLASS_RUST_MIN_VER}"; then
+                               die "RUST_MIN_VERSION must be at least 
${_CARGO_ECLASS_RUST_MIN_VER}"
+                       fi
+               else
+                       RUST_MIN_VER=${_CARGO_ECLASS_RUST_MIN_VER}
+               fi
                ;;
 esac
 
-inherit flag-o-matic multiprocessing rust-toolchain toolchain-funcs
+inherit flag-o-matic multiprocessing rust rust-toolchain toolchain-funcs
+
+if [[ -n ${RUST_NEEDS_LLVM} ]]; then
+       # Generate llvm_slot_x USE-gated deps for each slot in LLVM_COMPAT
+       RUST_DEPEND="${RUST_LLVM_DEPEND}"
+else
+       RUST_DEPEND="$(rust_gen_dep)"
+fi
 
 [[ ! ${CARGO_OPTIONAL} ]] && BDEPEND="${RUST_DEPEND}"
 
@@ -531,6 +548,9 @@ cargo_src_configure() {
 # take affect due to Cargo limitations, so add these to your ebuild's RUSTFLAGS
 # if they seem important.
 cargo_env() {
+
+       debug-print-function ${FUNCNAME} "$@"
+
        [[ ${_CARGO_GEN_CONFIG_HAS_RUN} ]] || \
                die "FATAL: please call cargo_gen_config before using 
${FUNCNAME}"
 
@@ -604,7 +624,7 @@ cargo_env() {
 cargo_src_compile() {
        debug-print-function ${FUNCNAME} "$@"
 
-       set -- cargo build $(usex debug "" --release) ${ECARGO_ARGS[@]} "$@"
+       set -- ${CARGO} build $(usex debug "" --release) ${ECARGO_ARGS[@]} "$@"
        einfo "${@}"
        cargo_env "${@}" || die "cargo build failed"
 }
@@ -618,7 +638,7 @@ cargo_src_compile() {
 cargo_src_install() {
        debug-print-function ${FUNCNAME} "$@"
 
-       set -- cargo install $(has --path ${@} || echo --path ./) \
+       set -- ${CARGO} install $(has --path ${@} || echo --path ./) \
                --root "${ED}/usr" \
                ${GIT_CRATES[@]:+--frozen} \
                $(usex debug --debug "") \
@@ -636,7 +656,7 @@ cargo_src_install() {
 cargo_src_test() {
        debug-print-function ${FUNCNAME} "$@"
 
-       set -- cargo test $(usex debug "" --release) ${ECARGO_ARGS[@]} "$@"
+       set -- ${CARGO} test $(usex debug "" --release) ${ECARGO_ARGS[@]} "$@"
        einfo "${@}"
        cargo_env "${@}" || die "cargo test failed"
 }
-- 
2.47.0


Reply via email to