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"
> }
>
>