summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorMatt Jolly <kangie@gentoo.org>2024-11-05 16:26:11 +1000
committerMatt Jolly <kangie@gentoo.org>2024-11-09 15:31:34 +1000
commit8ba94e73b14d16da3b8154ee468826df34bd61e0 (patch)
tree57096fd0aeaa1783889d7a6b3cd78d7ed99d03b0 /eclass
parentrust.eclass: Introduce new eclass for slotted Rust (diff)
downloadgentoo-8ba94e73b14d16da3b8154ee468826df34bd61e0.tar.gz
gentoo-8ba94e73b14d16da3b8154ee468826df34bd61e0.tar.bz2
gentoo-8ba94e73b14d16da3b8154ee468826df34bd61e0.zip
cargo: update for rust eclass
Inherit the rust eclass and take advantage of eclass features like `RUST_MIN_VER`. `RUST_DEPEND` was moved into the rust eclass in the previous commit and is now prowided via this mechanism `CARGO_OPTIONAL` now sets `RUST_OPTIONAL`, requiring ebuilds to set `RUST_DEPEND` manually and manage both cargo and rust eclass functions. Replace calls to `cargo` with the rust eclass exported ${CARGO}. Signed-off-by: Matt Jolly <kangie@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r--eclass/cargo.eclass59
1 files changed, 41 insertions, 18 deletions
diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass
index 499fe5498c96..855692b72ec7 100644
--- a/eclass/cargo.eclass
+++ b/eclass/cargo.eclass
@@ -8,6 +8,7 @@
# Doug Goldstein <cardoe@gentoo.org>
# Georgy Yakovlev <gyakovlev@gentoo.org>
# @SUPPORTED_EAPIS: 8
+# @PROVIDES: rust
# @BLURB: common functions and variables for cargo builds
case ${EAPI} in
@@ -18,25 +19,36 @@ 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
+
+if [[ -n ${CARGO_OPTIONAL} ]]; then
+ RUST_OPTIONAL=1
+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
-
-[[ ! ${CARGO_OPTIONAL} ]] && BDEPEND="${RUST_DEPEND}"
+inherit flag-o-matic multiprocessing rust rust-toolchain toolchain-funcs
IUSE="${IUSE} debug"
@@ -107,9 +119,8 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
# be considered optional. No dependencies will be added and no phase
# functions will be exported.
#
-# If you enable CARGO_OPTIONAL, you have to set BDEPEND on virtual/rust
-# for your package and call at least cargo_gen_config manually before using
-# other src_functions or cargo_env of this eclass.
+# If you enable CARGO_OPTIONAL call at least cargo_gen_config manually
+# before using other src_functions or cargo_env of this eclass.
# Note that cargo_gen_config is automatically called by cargo_src_unpack.
# @ECLASS_VARIABLE: myfeatures
@@ -129,6 +140,11 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
# }
# @CODE
+# @ECLASS_VARIABLE: ECARGO_HOME
+# @OUTPUT_VARIABLE
+# @DESCRIPTION:
+# Location of the cargo home directory.
+
# @ECLASS_VARIABLE: ECARGO_REGISTRY_DIR
# @USER_VARIABLE
# @DEFAULT_UNSET
@@ -148,6 +164,11 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
# cargo_live_src_unpack.
# Inherits value of EVCS_OFFLINE if not set explicitly.
+# @ECLASS_VARIABLE: ECARGO_VENDOR
+# @OUTPUT_VARIABLE
+# @DESCRIPTION:
+# Location of the cargo vendor directory.
+
# @ECLASS_VARIABLE: EVCS_UMASK
# @USER_VARIABLE
# @DEFAULT_UNSET
@@ -531,6 +552,8 @@ 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 +627,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 +641,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 +659,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"
}