On 6/12/20 2:04 AM, Georgy Yakovlev wrote:
> simple src_configure implementation inspired by cmake.eclass
> 
> Closes: https://bugs.gentoo.org/721936
> 
> Signed-off-by: Georgy Yakovlev <gyakov...@gentoo.org>
> ---
>  eclass/cargo.eclass | 51 ++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 44 insertions(+), 7 deletions(-)
> 
> diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass
> index ad90a0c7dd8..b084e082730 100644
> --- a/eclass/cargo.eclass
> +++ b/eclass/cargo.eclass
> @@ -23,7 +23,7 @@ esac
>  
>  inherit multiprocessing toolchain-funcs
>  
> -EXPORT_FUNCTIONS src_unpack src_compile src_install src_test
> +EXPORT_FUNCTIONS src_unpack src_configure src_compile src_install src_test
>  
>  IUSE="${IUSE} debug"
>  
> @@ -35,6 +35,24 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
>  # Allows overriding the default cwd to run cargo install from
>  : ${CARGO_INSTALL_PATH:=.}
>  
> +# @VARIABLE: myfeatures
> +# @DEFAULT_UNSET
> +# @DESCRIPTION:
> +# Optional cargo features defined as bash array. Should be defined before 
> calling
> +# src_configure.
> +# Example for package that has x11 and wayland as features.
> +# Also disables default features, as optional parameter is passed.
> +# @CODE
> +# src_configure() {
> +#    local myfeatures=(
> +#            $(usex X x11 '')
> +#            $(usev wayland)
> +#    )
> +#
> +#    cargo_src_configure --no-default-features
> +# }
> +# @CODE
> +
>  # @FUNCTION: cargo_crate_uris
>  # @DESCRIPTION:
>  # Generates the URIs to put in SRC_URI to help fetch dependencies.
> @@ -113,6 +131,7 @@ cargo_live_src_unpack() {
>       mkdir -p "${S}" || die
>  
>       pushd "${S}" > /dev/null || die
> +     # need to specify CARGO_HOME before cargo_gen_config fired
>       CARGO_HOME="${ECARGO_HOME}" cargo fetch || die
>       CARGO_HOME="${ECARGO_HOME}" cargo vendor "${ECARGO_VENDOR}" || die
>       popd > /dev/null || die
> @@ -152,6 +171,26 @@ cargo_gen_config() {
>       EOF
>       # honor NOCOLOR setting
>       [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]] && echo "color = 
> 'never'" >> "${ECARGO_HOME}/config"
> +
> +     export CARGO_HOME="${ECARGO_HOME}"
> +}
> +
> +# @FUNCTION: cargo_src_configure
> +# @DESCRIPTION:
> +# Configure cargo package features
> +cargo_src_configure() {
> +     debug-print-function ${FUNCNAME} "$@"
> +
> +     [[ -z ${myfeatures} ]] && declare -a myfeatures=()
> +     local myfeaturestype=$(declare -p myfeatures 2>&-)
> +     if [[ "${myfeaturestype}" != "declare -a myfeatures="* ]]; then
> +             die "myfeatures must be declared as array"
> +     fi
> +
> +     # transform array from simple feature list
> +     # to multiple cargo args:
> +     # --features feature1 --features feature2 ...
> +     readonly ECARGO_FEATURES=( ${myfeatures[@]/#/--features } )
missed ${@}, fixed locally, this should be,
readonly ECARGO_FEATURES=( ${myfeatures[@]/#/--features } ${@} )
>  }
>  
>  # @FUNCTION: cargo_src_compile
> @@ -160,11 +199,9 @@ cargo_gen_config() {
>  cargo_src_compile() {
>       debug-print-function ${FUNCNAME} "$@"
>  
> -     export CARGO_HOME="${ECARGO_HOME}"
> -
>       tc-export AR CC
>  
> -     cargo build $(usex debug "" --release) "$@" \
> +     cargo build $(usex debug "" --release) ${ECARGO_FEATURES[@]} "$@" \
>               || die "cargo build failed"
>  }
>  
> @@ -174,8 +211,8 @@ cargo_src_compile() {
>  cargo_src_install() {
>       debug-print-function ${FUNCNAME} "$@"
>  
> -     cargo install --path ${CARGO_INSTALL_PATH} \
> -             --root="${ED}/usr" $(usex debug --debug "") "$@" \
> +     cargo install --path ${CARGO_INSTALL_PATH} --root="${ED}/usr" \
> +             $(usex debug --debug "") ${ECARGO_FEATURES[@]} "$@" \
>               || die "cargo install failed"
>       rm -f "${ED}/usr/.crates.toml"
>       rm -f "${ED}/usr/.crates2.json"
> @@ -189,7 +226,7 @@ cargo_src_install() {
>  cargo_src_test() {
>       debug-print-function ${FUNCNAME} "$@"
>  
> -     cargo test $(usex debug "" --release) "$@" \
> +     cargo test $(usex debug "" --release) ${ECARGO_FEATURES[@]} "$@" \
>               || die "cargo test failed"
>  }
>  
> 


Reply via email to