diff options
author | 2024-12-03 22:22:37 +1000 | |
---|---|---|
committer | 2024-12-09 09:34:01 +1000 | |
commit | d1ef411b6e2cab683bbaf83a03f44b22fd46cede (patch) | |
tree | 208ab7ca4b882e16e602bc4e807daa96c8d7c119 /eclass | |
parent | Add 'host' variable to GIT_CRATES (diff) | |
download | gentoo-d1ef411b6e2cab683bbaf83a03f44b22fd46cede.tar.gz gentoo-d1ef411b6e2cab683bbaf83a03f44b22fd46cede.tar.bz2 gentoo-d1ef411b6e2cab683bbaf83a03f44b22fd46cede.zip |
rust.eclass: add ERUST_{SLOT,TYPE}_OVERRIDE user variables
These variables enable users (though most likely Gentoo developers)
to override the selection of the Rust implementation by the eclass.
This means that _only_ the specified SLOT and/or TYPE ('source'/'binary')
will be checked for, with the eclass `die`ing with
"No Rust slot satisfying the package's dependencies..." if the
selected impl is not available.
These variables are intended to enable reproducing bugs and testing
packages against specific dev-lang/rust{,-bin} packages; they must
not be set in ebuilds.
Closes: https://bugs.gentoo.org/945752
Signed-off-by: Matt Jolly <kangie@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/rust.eclass | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/eclass/rust.eclass b/eclass/rust.eclass index 2bf0b27b3f40..eb14ca2329b5 100644 --- a/eclass/rust.eclass +++ b/eclass/rust.eclass @@ -102,6 +102,26 @@ declare -a -g -r _RUST_SLOTS_ORDERED=( "1.54.0" ) +# == user control knobs == + +# @ECLASS_VARIABLE: ERUST_SLOT_OVERRIDE +# @USER_VARIABLE +# @DESCRIPTION: +# Specify the version (slot) of Rust to be used by the package. This is +# useful for troubleshooting and debugging purposes; If unset, the newest +# acceptable Rust version will be used. May be combined with ERUST_TYPE_OVERRIDE. +# This variable must not be set in ebuilds. + +# @ECLASS_VARIABLE: ERUST_TYPE_OVERRIDE +# @USER_VARIABLE +# @DESCRIPTION: +# Specify the type of Rust to be used by the package from options: +# 'source' or 'binary' (-bin). This is useful for troubleshooting and +# debugging purposes. If unset, the standard eclass logic will be used +# to determine the type of Rust to use (i.e. prefer source if binary +# is also available). May be combined with ERUST_SLOT_OVERRIDE. +# This variable must not be set in ebuilds. + # == control variables == # @ECLASS_VARIABLE: RUST_MAX_VER @@ -336,6 +356,10 @@ _get_rust_slot() { fi fi + if [[ -n "${ERUST_SLOT_OVERRIDE}" && "${slot}" != "${ERUST_SLOT_OVERRIDE}" ]]; then + continue + fi + # If we're in LLVM mode we can skip any slots that don't match the selected USE if [[ -n "${RUST_NEEDS_LLVM}" ]]; then if [[ "${llvm_slot}" != "${llvm_r1_slot}" ]]; then @@ -349,12 +373,27 @@ _get_rust_slot() { rust_check_deps && return else local usedep="${RUST_REQ_USE+[${RUST_REQ_USE}]}" - # When checking for installed packages prefer the non `-bin` package + # When checking for installed packages prefer the source package; # if effort was put into building it we should use it. - local rust_pkgs=( - "dev-lang/rust:${slot}${usedep}" - "dev-lang/rust-bin:${slot}${usedep}" - ) + local rust_pkgs + case "${ERUST_TYPE_OVERRIDE}" in + source) + rust_pkgs=( + "dev-lang/rust:${slot}${usedep}" + ) + ;; + binary) + rust_pkgs=( + "dev-lang/rust-bin:${slot}${usedep}" + ) + ;; + *) + rust_pkgs=( + "dev-lang/rust:${slot}${usedep}" + "dev-lang/rust-bin:${slot}${usedep}" + ) + ;; + esac local _pkg for _pkg in "${rust_pkgs[@]}"; do if has_version "${hv_switch}" "${_pkg}"; then |