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

Reply via email to