James Le Cuirot <ch...@gentoo.org> 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 <ch...@gentoo.org> > --- > 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