From 37cf4d78df2f3805f1f230252e1c0030a2f08877 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Sat, 8 Jun 2019 19:35:38 +0200 Subject: [PATCH 13/14] Implement %__cargo_skip_build We need to have an easy way how to skip doing 'cargo build' to speedup a module builds. Signed-off-by: Igor Gnatenko --- data/macros.cargo | 65 +++++++++++++++++++++--------------- data/macros.rust-srpm | 16 +++++++++ rust2rpm/templates/main.spec | 34 ++++++++++--------- 3 files changed, 73 insertions(+), 42 deletions(-) diff --git a/data/macros.cargo b/data/macros.cargo index a60289a..1182850 100644 --- a/data/macros.cargo +++ b/data/macros.cargo @@ -49,27 +49,35 @@ EOF\ } %cargo_generate_buildrequires(af:) \ -%{__cargo_inspector} -BR %{__cargo_parse_opts %{-a} %{-f:-f%{-f*}}} Cargo.toml \ -%if %{with check} \ -%{__cargo_inspector} -TR Cargo.toml \ +%if ! 0%{?__cargo_skip_build} \ + %{__cargo_inspector} -BR %{__cargo_parse_opts %{-a} %{-f:-f%{-f*}}} Cargo.toml \ + %if %{with check} \ + %{__cargo_inspector} -TR Cargo.toml \ + %endif \ %endif -%cargo_build(naf:) %{shrink:\ -%{__cargo} build \ - %{__cargo_common_opts} \ - --release \ - %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ - %* \ -} +%cargo_build(naf:) \ +%if ! 0%{?__cargo_skip_build} \ + %{shrink:\ + %{__cargo} build \ + %{__cargo_common_opts} \ + --release \ + %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ + %* \ + } \ +%endif -%cargo_test(naf:) %{shrink:\ -%{__cargo} test \ - %{__cargo_common_opts} \ - --release \ - --no-fail-fast \ - %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ - %* \ -} +%cargo_test(naf:) \ +%if ! 0%{?__cargo_skip_build} \ + %{shrink:\ + %{__cargo} test \ + %{__cargo_common_opts} \ + --release \ + --no-fail-fast \ + %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ + %* \ + } \ +%endif %cargo_install(t:naf:) (\ set -eu \ @@ -88,15 +96,18 @@ if %__cargo_is_lib; then \ %{__rm} -f $REG_DIR/Cargo.toml.{orig,deps} \ echo '{"files":{},"package":""}' > $REG_DIR/.cargo-checksum.json \ fi \ -if %__cargo_is_bin; then \ - %{shrink:%{__cargo} install \ - %{__cargo_common_opts} \ - --path . \ - %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ - %* \ - }\ - %{__rm} %{buildroot}%{_prefix}/.crates.toml \ -fi \ +%if ! %__cargo_skip_build \ + if %__cargo_is_bin; then \ + %{shrink:\ + %{__cargo} install \ + %{__cargo_common_opts} \ + --path . \ + %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ + %* \ + } \ + %{__rm} %{buildroot}%{_prefix}/.crates.toml \ + fi \ +%endif \ ) %__cargo_feature_from_name(n:) %{lua: diff --git a/data/macros.rust-srpm b/data/macros.rust-srpm index 872b87f..88d5a0f 100644 --- a/data/macros.rust-srpm +++ b/data/macros.rust-srpm @@ -37,3 +37,19 @@ \ print(url .. crate .. '/' .. version .. '/download#/' .. crate .. '-' .. version .. '.crate') } + +# If crate not in _build_crates and _module_build is set, we should skip the build +%__cargo_skip_build %{lua: +local crate = rpm.expand('%{crate}') +local build_crate = false +for w in rpm.expand('%{?_build_crates}'):gmatch('%S+') do + if w == crate then + build_crate = true + break + end +end +if (rpm.expand('%{defined _module_build}') ~= '0' and not build_crate) then + print(1) +else + print(0) +end} diff --git a/rust2rpm/templates/main.spec b/rust2rpm/templates/main.spec index 660bb60..69d23d7 100644 --- a/rust2rpm/templates/main.spec +++ b/rust2rpm/templates/main.spec @@ -42,26 +42,28 @@ ExclusiveArch: %{rust_arches} BuildRequires: rust-packaging {% if not generate_buildrequires %} -{% if not all_features %} -{% set buildrequires = normalize_deps(md.requires("default", resolve=True))|sort %} -{% else %} -{% set buildrequires = normalize_deps(md.all_dependencies)|sort %} -{% set cargo_args = " -a" %} -{% endif %} -{% for req in buildrequires %} +%if ! %{__cargo_skip_build} + {% if not all_features %} + {% set buildrequires = normalize_deps(md.requires("default", resolve=True))|sort %} + {% else %} + {% set buildrequires = normalize_deps(md.all_dependencies)|sort %} + {% set cargo_args = " -a" %} + {% endif %} + {% for req in buildrequires %} BuildRequires: {{ req }} -{% endfor %} -{% set testrequires = normalize_deps(md.dev_dependencies)|sort %} -{% if testrequires|length > 0 %} + {% endfor %} + {% set testrequires = normalize_deps(md.dev_dependencies)|sort %} + {% if testrequires|length > 0 %} %if %{with check} - {% for req in testrequires %} + {% for req in testrequires %} BuildRequires: {{ req }} - {% endfor %} + {% endfor %} %endif -{% endif %} -{% for req in to_list(distconf.get("buildrequires"))|sort %} + {% endif %} + {% for req in to_list(distconf.get("buildrequires"))|sort %} BuildRequires: {{ req }} -{% endfor %} + {% endfor %} +%endif {% endif %} %global _description %{expand: @@ -75,6 +77,7 @@ BuildRequires: {{ req }} %description %{_description} {% if include_main %} +%if ! %{__cargo_skip_build} %package -n %{crate} Summary: %{summary} {% if rust_group is defined %} @@ -96,6 +99,7 @@ Requires: {{ req }} {% for bin in bins %} %{_bindir}/{{ bin.name }} {% endfor %} +%endif {% endif -%} -- 2.22.0.rc3