diff options
author | Matt Jolly <kangie@gentoo.org> | 2024-11-05 16:26:11 +1000 |
---|---|---|
committer | Matt Jolly <kangie@gentoo.org> | 2024-11-09 15:31:34 +1000 |
commit | 8ba94e73b14d16da3b8154ee468826df34bd61e0 (patch) | |
tree | 57096fd0aeaa1783889d7a6b3cd78d7ed99d03b0 /eclass | |
parent | rust.eclass: Introduce new eclass for slotted Rust (diff) | |
download | gentoo-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.eclass | 59 |
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" } |