%global python3_pkgversion 3.11 # 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 Release: 2.ac14.py3.11%{?dist} Summary: Setuptools Rust extension plugin License: MIT URL: https://github.com/PyO3/setuptools-rust Source0: %{pypi_source setuptools-rust} BuildArch: noarch BuildRequires: python%{python3_pkgversion}-devel BuildRequires: %{py3_dist pytest} %if 0%{?fedora} BuildRequires: rust-packaging %else # RHEL has rust-toolset instead of rust-packaging BuildRequires: rust-toolset >= 1.45 %endif %if %{with integration_tests} BuildRequires: %{py3_dist cffi} %endif %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.} %description %{_description} %package -n python%{python3_pkgversion}-setuptools-rust Summary: %{summary} %if 0%{?fedora} Requires: rust-packaging %else Requires: rust-toolset >= 1.45 %endif %description -n python%{python3_pkgversion}-setuptools-rust %{_description} %prep %autosetup -n setuptools-rust-%{version} %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 %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 %{py3_test_envvars} %global _pyproject_wheeldir dist for example in $(ls examples/ | grep -vE %{integration_tests_exc}); do cd "examples/${example}" %pyproject_wheel if [ -d "tests/" ]; then %{python3} -m venv venv --system-site-packages ./venv/bin/pip install dist/*.whl ./venv/bin/python -Pm pytest tests/ fi cd - done %endif for b in $(find %{buildroot}%{_bindir}/ -type f) ; do mv "$b" $(sed -re "s|(.*)$|\1-%{python3_pkgversion}|"<<<"$b"); done for m in $(find %{buildroot}%{_mandir}/ -type f) ; do mv "$m" $(sed -re "s|(.*).([1-8])(.*)$|\1-%{python3_pkgversion}.\2\3|"<<<"$m"); done for m in $(find %{buildroot}%{_datadir}/locale/* -type f) ; do mv "$m" $(sed -re "s|(.*).mo$|\1-%{python3_pkgversion}.mo|"<<<"$m"); done for l in $(find %{buildroot}/usr/lib64/lib* -type f -o -type l) ; do mv "$l" $(sed -re "s|(.*).so(.*)$|\1-py%{python3_pkgversion}.so\2|"<<<"$l"); done for p in $(find %{buildroot}/usr/lib64/pkgconfig/* -type f) ; do mv "$p" $(sed -re "s|(.*).pc$|\1-py%{python3_pkgversion}.pc|"<<<"$p"); done %files -n python%{python3_pkgversion}-setuptools-rust -f %{pyproject_files} %doc README.md CHANGELOG.md %license LICENSE %changelog * Wed Apr 24 2024 Ding-Yi Chen - 1.7.0-2.ac14.py3.11 - Cut corner packaging