diff --git a/python-setuptools-rust.spec b/python-setuptools-rust.spec index f55a915..b3f5e56 100644 --- a/python-setuptools-rust.spec +++ b/python-setuptools-rust.spec @@ -1,8 +1,10 @@ -%if 0%{?rhel} -%bcond_with tests -%else -%bcond_without tests -%endif +# RHEL does not have packaged rust libraries +%bcond packaged_rust_libraries %{undefined rhel} +# The integration tests depend on the presence of these libraries +%bcond integration_tests %{with packaged_rust_libraries} +# Regex of integration tests to skip. +# * html-py-ever requires unpackaged rust crates +%global integration_tests_exc '^(html-py-ever)' Name: python-setuptools-rust Version: 1.7.0 @@ -15,19 +17,24 @@ Source0: %{pypi_source setuptools-rust} BuildArch: noarch BuildRequires: python3-devel +BuildRequires: %{py3_dist pytest} %if 0%{?fedora} BuildRequires: rust-packaging %else # RHEL has rust-toolset and neither setuptools-scm nor wheel BuildRequires: rust-toolset >= 1.45 %endif -%if %{with tests} -BuildRequires: rust-pyo3+default-devel +%if %{with integration_tests} +BuildRequires: %{py3_dist cffi} %endif -%description + +%global _description %{expand: Setuptools helpers for Rust Python extensions. Compile and distribute Python -extensions written in Rust as easily as if they were written in C. +extensions written in Rust as easily as if they were written in C.} + +%description %{_description} + %package -n python3-setuptools-rust Summary: %{summary} @@ -37,44 +44,81 @@ Requires: rust-packaging Requires: rust-toolset >= 1.45 %endif -%description -n python3-setuptools-rust -Setuptools helpers for Rust Python extensions. Compile and distribute Python -extensions written in Rust as easily as if they were written in C. +%description -n python3-setuptools-rust %{_description} + %prep %autosetup -n setuptools-rust-%{version} -# Remove bundled egg-info -rm -rf setuptools-rust.egg-info -%if ! 0%{?fedora} -# RHEL doesn't have setuptools-scm, releases come with version.py -sed 's/"setuptools_scm"//' pyproject.toml +%cargo_prep + +%if %{with integration_tests} +for example in $(ls examples/ | grep -vE %{integration_tests_exc}); do + cd "examples/${example}" + %cargo_prep + cd - +done %endif + %generate_buildrequires %pyproject_buildrequires +%if %{with integration_tests} +for example in $(ls examples/ | grep -vE %{integration_tests_exc}); do + cd "examples/${example}" + %cargo_generate_buildrequires + cd - >&2 +done +%endif + %build %pyproject_wheel + %install %pyproject_install %pyproject_save_files setuptools_rust -%check -PYTHONPATH=%{buildroot}%{python3_sitelib} \ - %{__python3} -c "from setuptools_rust import RustExtension, version" -%if %{with tests} -cd examples/hello-world-setuppy -%cargo_prep -PYTHONPATH=%{buildroot}%{python3_sitelib} %{__python3} setup.py build -cd ../.. +%check +%pyproject_check_import +# Disable tests that require internet access and/or test Windows functionality +%global test_ignores %{shrink: + not test_adjusted_local_rust_target_windows_msvc + and not test_get_lib_name_namespace_package +} + +%if %{without packaged_rust_libraries} +%global test_ignores %{shrink:%{test_ignores} + and not test_metadata_contents + and not test_metadata_cargo_log +} %endif +%pytest tests/ setuptools_rust/ --import-mode importlib -k '%{test_ignores}' + +%if %{with integration_tests} +export PYTHONPATH=%{buildroot}%{python3_sitelib} +for example in $(ls examples/ | grep -vE %{integration_tests_exc}); do + cd "examples/${example}" + %{python3} -c 'from setuptools.build_meta import build_wheel; build_wheel("dist")' + if [ -d "tests/" ]; then + %{python3} -m venv venv --system-site-packages + . ./venv/bin/activate + pip install dist/*.whl + python -Pm pytest tests/ + deactivate + fi + cd - +done +%endif + + %files -n python3-setuptools-rust -f %{pyproject_files} %doc README.md CHANGELOG.md %license LICENSE + %changelog %autochangelog