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 (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 04684159C96 for ; Thu, 25 Jul 2024 11:48:24 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id C908DE2AEE; Thu, 25 Jul 2024 11:48:20 +0000 (UTC) Received: from smtp.gentoo.org (mail.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 81898E2AE8 for ; Thu, 25 Jul 2024 11:48:20 +0000 (UTC) From: Sam James To: James Le Cuirot Cc: gentoo-dev Subject: Re: [gentoo-dev] [PATCH 1/5 v3] cargo.eclass: Add cargo_env helper and use it in compile, test, install In-Reply-To: <20240725112005.10045-3-chewi@gentoo.org> (James Le Cuirot's message of "Thu, 25 Jul 2024 12:19:32 +0100") Organization: Gentoo References: <20240725112005.10045-3-chewi@gentoo.org> Date: Thu, 25 Jul 2024 12:48:16 +0100 Message-ID: <87r0bhk7zz.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: d6b0b6b0-1450-4ef4-9718-3d00ea7fbc2c X-Archives-Hash: 7476197911a0e6210d9d877235f094c6 James Le Cuirot writes: > Rust packages have a tendency to rebuild parts during test and install. > It is not clear whether this can be addressed. We were therefore relying > on some environment variables set during the compile phase for > cross-compiling to work in the later phases. This is not ideal, > especially if you need to build for multiple targets. > > These environment variables can also be useful in other contexts, such > as the build runner in app-misc/anki. > > This change moves the setting of these variables into a separate helper > that is now used in all these phases and can be used by ebuilds too. The > variables are now kept local to each invocation of this helper, > preventing leakage. The series looks OK but please let Ionen cast an eye over it as well as mgorny, espec. for distutils-r1. (Also, remember to CC eclass maints!) > > Signed-off-by: James Le Cuirot > --- > eclass/cargo.eclass | 37 +++++++++++++++++++++++-------------- > 1 file changed, 23 insertions(+), 14 deletions(-) > > diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass > index 7db34efb4e174..b6d5fe21f0a7b 100644 > --- a/eclass/cargo.eclass > +++ b/eclass/cargo.eclass > @@ -523,26 +523,23 @@ cargo_src_configure() { > [[ ${ECARGO_ARGS[@]} ]] && einfo "Configured with: ${ECARGO_ARGS[@]}" > } > > -# @FUNCTION: cargo_src_compile > +# @FUNCTION: cargo_env > +# @USAGE: Command with its arguments > # @DESCRIPTION: > -# Build the package using cargo build. > -cargo_src_compile() { > - debug-print-function ${FUNCNAME} "$@" > - > - [[ ${_CARGO_GEN_CONFIG_HAS_RUN} ]] || \ > - die "FATAL: please call cargo_gen_config before using ${FUNCNAME}" > - > +# Run the given command under an environment needed for performing tasks with > +# Cargo such as building. > +cargo_env() { > filter-lto > tc-export AR CC CXX PKG_CONFIG > > if tc-is-cross-compiler; then > - export CARGO_BUILD_TARGET=$(rust_abi) > + declare -x CARGO_BUILD_TARGET=$(rust_abi) > local TRIPLE=${CARGO_BUILD_TARGET//-/_} > - export CARGO_TARGET_"${TRIPLE^^}"_LINKER=$(tc-getCC) > + declare -x CARGO_TARGET_"${TRIPLE^^}"_LINKER=$(tc-getCC) > > # Set vars for cc-rs crate. > tc-export_build_env > - export \ > + declare -x \ > HOST_AR=$(tc-getBUILD_AR) > HOST_CC=$(tc-getBUILD_CC) > HOST_CXX=$(tc-getBUILD_CXX) > @@ -550,9 +547,21 @@ cargo_src_compile() { > HOST_CXXFLAGS=${BUILD_CXXFLAGS} > fi > > + "${@}" > +} > + > +# @FUNCTION: cargo_src_compile > +# @DESCRIPTION: > +# Build the package using cargo build. > +cargo_src_compile() { > + debug-print-function ${FUNCNAME} "$@" > + > + [[ ${_CARGO_GEN_CONFIG_HAS_RUN} ]] || \ > + die "FATAL: please call cargo_gen_config before using ${FUNCNAME}" > + > set -- cargo build $(usex debug "" --release) ${ECARGO_ARGS[@]} "$@" > einfo "${@}" > - "${@}" || die "cargo build failed" > + cargo_env "${@}" || die "cargo build failed" > } > > # @FUNCTION: cargo_src_install > @@ -573,7 +582,7 @@ cargo_src_install() { > $(usex debug --debug "") \ > ${ECARGO_ARGS[@]} "$@" > einfo "${@}" > - "${@}" || die "cargo install failed" > + cargo_env "${@}" || die "cargo install failed" > > rm -f "${ED}/usr/.crates.toml" || die > rm -f "${ED}/usr/.crates2.json" || die > @@ -590,7 +599,7 @@ cargo_src_test() { > > set -- cargo test $(usex debug "" --release) ${ECARGO_ARGS[@]} "$@" > einfo "${@}" > - "${@}" || die "cargo test failed" > + cargo_env "${@}" || die "cargo test failed" > } > > fi