From de8205940a7100438d8d11c1e1bff0ff5806d002 Mon Sep 17 00:00:00 2001 From: Fabio Valentini Date: Wed, 15 Feb 2023 20:24:06 +0100 Subject: [PATCH] generator: do not include %cargo_install for cdylib-only crates --- rust2rpm/generator.py | 5 +++-- rust2rpm/metadata.py | 8 ++++++++ rust2rpm/templates/crate.spec | 4 ++++ rust2rpm/templates/workspace.spec | 4 ++++ tox.ini | 24 ++++++++++++++++++++++++ 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/rust2rpm/generator.py b/rust2rpm/generator.py index 2da3395..f5dbead 100644 --- a/rust2rpm/generator.py +++ b/rust2rpm/generator.py @@ -13,7 +13,7 @@ import jinja2 from rust2rpm import __version__, log from rust2rpm.licensing import translate_license -from rust2rpm.metadata import guess_main_package, package_uses_rust_1_60_feature_syntax +from rust2rpm.metadata import guess_main_package, package_uses_rust_1_60_feature_syntax, metadata_is_cdylib def to_list(s): @@ -126,6 +126,7 @@ def spec_render_crate( is_bin = metadata.is_bin() is_lib = metadata.is_lib() + is_cdylib = metadata_is_cdylib(metadata) package = metadata.packages[0] description = package.get_description() @@ -210,7 +211,7 @@ def spec_render_crate( "rpm_license_files": license_files, "rpm_doc_files": doc_files, # Parameters that control generation of subpackages - "rpm_binary_package": is_bin, + "rpm_binary_package": is_bin or is_cdylib, "rpm_binary_names": binaries if is_bin else [], "rpm_library_package": is_lib, "crate_features": features, diff --git a/rust2rpm/metadata.py b/rust2rpm/metadata.py index 6a9f1bd..b88c9c1 100644 --- a/rust2rpm/metadata.py +++ b/rust2rpm/metadata.py @@ -1,6 +1,14 @@ from cargo2rpm.metadata import Metadata, Package +def metadata_is_cdylib(metadata: Metadata) -> bool: + for package in metadata.packages: + for target in package.targets: + if "cdylib" in target.kind and "cdylib" in target.crate_types: + return True + return False + + def guess_main_package(metadata: Metadata) -> Package: if not metadata.is_workspace(): return metadata.packages[0] diff --git a/rust2rpm/templates/crate.spec b/rust2rpm/templates/crate.spec index c3f92c7..37fdeae 100644 --- a/rust2rpm/templates/crate.spec +++ b/rust2rpm/templates/crate.spec @@ -191,7 +191,11 @@ echo {{ "%r" | format(req) }} %cargo_build{{ cargo_args }} %install +{% if not (not rpm_library_package and rpm_binary_package and binaries|length == 0) %} %cargo_install{{ cargo_args }} +{% else %} +# FIXME +{% endif %} %if %{with check} %check diff --git a/rust2rpm/templates/workspace.spec b/rust2rpm/templates/workspace.spec index f3d3e48..821b1cf 100644 --- a/rust2rpm/templates/workspace.spec +++ b/rust2rpm/templates/workspace.spec @@ -86,7 +86,11 @@ echo {{ "%r" | format(req) }} %cargo_build{{ cargo_args }} %install +{% if binaries|length == 0 %} %cargo_install{{ cargo_args }} +{% else %} +# FIXME +{% endif %} %if %{with check} %check diff --git a/tox.ini b/tox.ini index 572a85e..cc83a19 100644 --- a/tox.ini +++ b/tox.ini @@ -12,3 +12,27 @@ commands = pytest -v setenv = PYTHONPATH = {toxinidir} + +[testenv:coverage] +deps = + pytest + coverage + -rrequirements.txt +whitelist_externals = + cargo +commands = + coverage run --branch -m pytest -v {posargs} + coverage html + coverage report +setenv = + PYTHONPATH = {toxinidir} + +[testenv:mypy] +deps = + mypy + pytest + -rrequirements.txt +commands = + mypy -p rust2rpm {posargs} +setenv = + PYTHONPATH = {toxinidir}