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 CFF911581D8 for ; Wed, 4 Dec 2024 17:45:10 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id D5121E0844; Wed, 4 Dec 2024 17:45:06 +0000 (UTC) Received: from smtp.gentoo.org (smtp.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)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 7C216E0815 for ; Wed, 4 Dec 2024 17:45:06 +0000 (UTC) From: Sam James To: kangie@gentoo.org Cc: gentoo-dev@lists.gentoo.org Subject: Re: [gentoo-dev] [PATCH] rust.eclass: add ERUST_{SLOT,TYPE} user variables In-Reply-To: <20241203122236.1592666-2-kangie@gentoo.org> (kangie@gentoo.org's message of "Tue, 3 Dec 2024 22:22:37 +1000") Organization: Gentoo References: <20241203122236.1592666-2-kangie@gentoo.org> User-Agent: mu4e 1.12.7; emacs 31.0.50 Date: Wed, 04 Dec 2024 17:45:02 +0000 Message-ID: <87v7vzz6jl.fsf@gentoo.org> 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-Type: text/plain X-Archives-Salt: 8ed0db0b-7fa2-4272-984f-22fd66b13fe3 X-Archives-Hash: dc1ce7b9a63c439f8e087bc93271b6e7 kangie@gentoo.org writes: > 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. On reflection, I still quite like the idea of trying the eselect'ed Rust first but I'm (of course) open to arguments not to. > > 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