Dnia January 3, 2019 5:46:35 AM UTC, Georgy Yakovlev <gyakov...@gentoo.org> 
napisał(a):
>On Wednesday, January 2, 2019 8:52:45 PM PST Michał Górny wrote:
>> On Wed, 2019-01-02 at 13:58 -0800, Georgy Yakovlev wrote:
>> > This adds 2 eclass variables
>> > 
>> > ECARGO_BUILD_FLAGS
>> > ECARGO_INSTALL_FLAGS
>> > 
>> > contents will be passed to "cargo build" and "cargo install" calls
>in
>> > cargo_src_compile() and cargo_src_install() respectively.
>> > 
>> > Closes: https://github.com/gentoo/gentoo/pull/10725
>> > Signed-off-by: Georgy Yakovlev <gyakov...@gentoo.org>
>> > ---
>> >  eclass/cargo.eclass | 25 +++++++++++++++++++++++--
>> >  1 file changed, 23 insertions(+), 2 deletions(-)
>> > 
>> > diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass
>> > index 50f7830c51b..ea58c63b456 100644
>> > --- a/eclass/cargo.eclass
>> > +++ b/eclass/cargo.eclass
>> > @@ -1,142 +1,163 @@
>> >  # Copyright 1999-2018 Gentoo Authors
>> >  # Distributed under the terms of the GNU General Public License v2
>> >  
>> >  # @ECLASS: cargo.eclass
>> >  # @MAINTAINER:
>> >  # r...@gentoo.org
>> >  # @AUTHOR:
>> >  # Doug Goldstein <car...@gentoo.org>
>> >  # @SUPPORTED_EAPIS: 6 7
>> >  # @BLURB: common functions and variables for cargo builds
>> >  
>> >  if [[ -z ${_CARGO_ECLASS} ]]; then
>> >  _CARGO_ECLASS=1
>> >  
>> >  CARGO_DEPEND=""
>> >  [[ ${CATEGORY}/${PN} != dev-util/cargo ]] &&
>CARGO_DEPEND="virtual/cargo"
>> >  
>> >  case ${EAPI} in
>> >    6) DEPEND="${CARGO_DEPEND}";;
>> >    7) BDEPEND="${CARGO_DEPEND}";;
>> >    *) die "EAPI=${EAPI:-0} is not supported" ;;
>> >  esac
>> >  
>> >  inherit multiprocessing
>> >  
>> >  EXPORT_FUNCTIONS src_unpack src_compile src_install
>> >  
>> >  IUSE="${IUSE} debug"
>> >  
>> >  ECARGO_HOME="${WORKDIR}/cargo_home"
>> >  ECARGO_VENDOR="${ECARGO_HOME}/gentoo"
>> >  
>> > +# @ECLASS-VARIABLE: ECARGO_BUILD_FLAGS
>> > +# @DEFAULT_UNSET
>> > +# @DESCRIPTION:
>> > +# This allows to pass additional build flags to cargo in
>cargo_src_compile()
>> > +#
>> > +# Example:
>> > +# @CODE
>> > +# ECARGO_BUILD_FLAGS="$(usex pcre "--features pcre2" "")"
>> > +# @CODE
>> > +
>> > +# @ECLASS-VARIABLE: ECARGO_INSTALL_FLAGS
>> > +# @DEFAULT_UNSET
>> > +# @DESCRIPTION:
>> > +# This allows to pass additional install flags to cargo in
>cargo_src_install()
>> > +#
>> > +# Example:
>> > +# @CODE
>> > +# ECARGO_INSTALL_FLAGS="--path=."
>> > +# @CODE
>> > +
>> > +
>> >  # @FUNCTION: cargo_crate_uris
>> >  # @DESCRIPTION:
>> >  # Generates the URIs to put in SRC_URI to help fetch dependencies.
>> >  cargo_crate_uris() {
>> >    local crate
>> >    for crate in "$@"; do
>> >            local name version url pretag
>> >            name="${crate%-*}"
>> >            version="${crate##*-}"
>> >            pretag="^[a-zA-Z]+"
>> >            if [[ $version =~ $pretag ]]; then
>> >                    version="${name##*-}-${version}"
>> >                    name="${name%-*}"
>> >            fi
>> >            url="https://crates.io/api/v1/crates/${name}/${version}/download
>-> ${crate}.crate"
>> >            echo "${url}"
>> >    done
>> >  }
>> >  
>> >  # @FUNCTION: cargo_src_unpack
>> >  # @DESCRIPTION:
>> >  # Unpacks the package and the cargo registry
>> >  cargo_src_unpack() {
>> >    debug-print-function ${FUNCNAME} "$@"
>> >  
>> >    mkdir -p "${ECARGO_VENDOR}" || die
>> >    mkdir -p "${S}" || die
>> >  
>> >    local archive shasum pkg
>> >    for archive in ${A}; do
>> >            case "${archive}" in
>> >                    *.crate)
>> >                            ebegin "Loading ${archive} into Cargo registry"
>> >                            tar -xf "${DISTDIR}"/${archive} -C 
>> > "${ECARGO_VENDOR}/" || die
>> >                            # generate sha256sum of the crate itself as 
>> > cargo needs this
>> >                            shasum=$(sha256sum "${DISTDIR}"/${archive} | 
>> > cut -d ' ' -f 1)
>> >                            pkg=$(basename ${archive} .crate)
>> >                            cat <<- EOF > 
>> > ${ECARGO_VENDOR}/${pkg}/.cargo-checksum.json
>> >                            {
>> >                                    "package": "${shasum}",
>> >                                    "files": {}
>> >                            }
>> >                            EOF
>> >                            # if this is our target package we need it in 
>> > ${WORKDIR} too
>> >                            # to make ${S} (and handle any revisions too)
>> >                            if [[ ${P} == ${pkg}* ]]; then
>> >                                    tar -xf "${DISTDIR}"/${archive} -C 
>> > "${WORKDIR}" || die
>> >                            fi
>> >                            eend $?
>> >                            ;;
>> >                    cargo-snapshot*)
>> >                            ebegin "Unpacking ${archive}"
>> >                            mkdir -p "${S}"/target/snapshot
>> >                            tar -xzf "${DISTDIR}"/${archive} -C 
>> > "${S}"/target/snapshot
>--strip-components 2 || die
>> >                            # cargo's makefile needs this otherwise it will 
>> > try to
>> >                            # download it
>> >                            touch "${S}"/target/snapshot/bin/cargo || die
>> >                            eend $?
>> >                            ;;
>> >                    *)
>> >                            unpack ${archive}
>> >                            ;;
>> >            esac
>> >    done
>> >  
>> >    cargo_gen_config
>> >  }
>> >  
>> >  # @FUNCTION: cargo_gen_config
>> >  # @DESCRIPTION:
>> >  # Generate the $CARGO_HOME/config necessary to use our local
>registry
>> >  cargo_gen_config() {
>> >    debug-print-function ${FUNCNAME} "$@"
>> >  
>> >    cat <<- EOF > "${ECARGO_HOME}/config"
>> >    [source.gentoo]
>> >    directory = "${ECARGO_VENDOR}"
>> >  
>> >    [source.crates-io]
>> >    replace-with = "gentoo"
>> >    local-registry = "/nonexistant"
>> >    EOF
>> >  }
>> >  
>> >  # @FUNCTION: cargo_src_compile
>> >  # @DESCRIPTION:
>> >  # Build the package using cargo build
>> >  cargo_src_compile() {
>> >    debug-print-function ${FUNCNAME} "$@"
>> >  
>> >    export CARGO_HOME="${ECARGO_HOME}"
>> >  
>> >    cargo build -j $(makeopts_jobs) $(usex debug "" --release) \
>> > -          || die "cargo build failed"
>> > +          ${ECARGO_BUILD_FLAGS} || die "cargo build failed"
>> >  }
>> >  
>> >  # @FUNCTION: cargo_src_install
>> >  # @DESCRIPTION:
>> >  # Installs the binaries generated by cargo
>> >  cargo_src_install() {
>> >    debug-print-function ${FUNCNAME} "$@"
>> >  
>> >    cargo install -j $(makeopts_jobs) --root="${D}/usr" $(usex debug
>--debug "") \
>> > -          || die "cargo install failed"
>> > +          ${ECARGO_INSTALL_FLAGS} || die "cargo install failed"
>> >    rm -f "${D}/usr/.crates.toml"
>> >  
>> >    [ -d "${S}/man" ] && doman "${S}/man" || return 0
>> >  }
>> >  
>> >  fi
>> 
>> Can't you just pass "${@}" to both?
>> 
>> 
> something like this?
>
>diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass
>index 50f7830c51b..aa889751fef 100644
>--- a/eclass/cargo.eclass
>+++ b/eclass/cargo.eclass
>@@ -122,7 +122,7 @@ cargo_src_compile() {
> 
>        export CARGO_HOME="${ECARGO_HOME}"
> 
>-       cargo build -j $(makeopts_jobs) $(usex debug "" --release) \
>+       cargo build -j $(makeopts_jobs) $(usex debug "" --release)
>"${@}" \
>                || die "cargo build failed"
> }
> 
>@@ -132,7 +132,7 @@ cargo_src_compile() {
> cargo_src_install() {
>        debug-print-function ${FUNCNAME} "$@"
> 
>-       cargo install -j $(makeopts_jobs) --root="${D}/usr" $(usex
>debug --debug "") \
>+       cargo install -j $(makeopts_jobs) --root="${D}/usr" $(usex
>debug --debug "") "${@}" \
>                || die "cargo install failed"
>        rm -f "${D}/usr/.crates.toml"
>
>yeah, it works.
>it's a bit different to what I wanted but it's very simple and clean. I
>like it.

Yes. It's a common paradigm in eclasses.


--
Best regards, 
Michał Górny

Reply via email to