From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 175D91581F3 for ; Tue, 3 Dec 2024 12:24:10 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 9308DE082F; Tue, 3 Dec 2024 12:24:05 +0000 (UTC) Received: from smtp.gentoo.org (dev.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id BEDE7E07FA for ; Tue, 3 Dec 2024 12:24:04 +0000 (UTC) From: kangie@gentoo.org To: gentoo-dev@lists.gentoo.org Cc: Matt Jolly Subject: [gentoo-dev] [PATCH] rust.eclass: add ERUST_{SLOT,TYPE} user variables Date: Tue, 3 Dec 2024 22:22:37 +1000 Message-ID: <20241203122236.1592666-2-kangie@gentoo.org> X-Mailer: git-send-email 2.47.0 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Archives-Salt: 1a9f2a28-b1bb-481b-b849-cb1a49466011 X-Archives-Hash: 496f9c7a372cf771f2c5dfd20741a240 From: Matt Jolly 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 ERUST_SLOT and/or ERUST_TYPE ('source' or '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 --- eclass/rust.eclass | 49 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/eclass/rust.eclass b/eclass/rust.eclass index 71cbb4b24f8c..991a9cdb7f14 100644 --- a/eclass/rust.eclass +++ b/eclass/rust.eclass @@ -98,6 +98,26 @@ declare -a -g -r _RUST_SLOTS_ORDERED=( "1.54.0" ) +# == user control knobs == + +# @ECLASS_VARIABLE: ERUST_SLOT +# @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. +# This variable must not be set in ebuilds. + +# @ECLASS_VARIABLE: ERUST_TYPE +# @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. +# This variable must not be set in ebuilds. + # == control variables == # @ECLASS_VARIABLE: RUST_MAX_VER @@ -332,6 +352,10 @@ _get_rust_slot() { fi fi + if [[ -n "${ERUST_SLOT}" && "${slot}" != "${ERUST_SLOT}" ]]; 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 @@ -345,12 +369,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}" 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 -- 2.47.0