commit:     d1ef411b6e2cab683bbaf83a03f44b22fd46cede
Author:     Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Tue Dec  3 12:22:37 2024 +0000
Commit:     Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Sun Dec  8 23:34:01 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d1ef411b

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 <AT> gentoo.org>

 eclass/rust.eclass | 49 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 file 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

Reply via email to