# pyacvd — uniform surface remeshing via ACVD (Approximated Centroidal Voronoi # Diagrams) clustering, exposed as a pyvista accessor. Pulled in as a hard # runtime dependency by 3D Slicer's EvolutionarySRep module # (SlicerSkeletalRepresentation), which without it pip-installs at import. # # Compiled: a nanobind C++ extension built through scikit-build-core/CMake. # Unrelated to the separately packaged `acvd` (the original C++/VTK ACVD tool) — # pyacvd carries its own clustering implementation and does not link it. %global pypi_name pyacvd # pyacvd builds its extension through scikit-build-core, which drives CMake with # CMAKE_BUILD_TYPE=Release and so produces _clustering.abi3.so with no debug # info. find-debuginfo then has nothing to work on -- # find-debuginfo: Extracting debug info from 0 files # -- and on f45 rpm makes the resulting empty debugsource list fatal: # error: Empty %%files file .../debugsourcefiles.list (11036742) # f44 built the same spec and published python3-pyacvd-0.4.0-1.fc44 with no # debuginfo or debugsource subpackage at all, so this is not a regression in # what we ship; f44's rpm simply tolerated the empty list and f45's does not. # # Disabling the debug packages is therefore honest rather than evasive: there is # no debug info to put in them. If real debuginfo is wanted later, the fix is to # make scikit-build-core use RelWithDebInfo (SKBUILD_CMAKE_BUILD_TYPE) rather # than to re-enable empty subpackages. %global debug_package %{nil} Name: python-%{pypi_name} Version: 0.4.0 Release: 3%{?dist} Summary: Uniform surface remeshing for pyvista meshes (ACVD clustering) License: MIT URL: https://github.com/pyvista/pyacvd Source0: %{pypi_source %{pypi_name}} BuildRequires: python3-devel BuildRequires: gcc-c++ BuildRequires: cmake BuildRequires: ninja-build BuildRequires: python3-scikit-build-core BuildRequires: python3-nanobind %global _description %{expand: pyacvd uniformly remeshes triangular surface meshes using ACVD (Approximated Centroidal Voronoi Diagram) clustering: it clusters the surface into near-equal-area regions and rebuilds the mesh from the cluster centroids, producing well-conditioned, near-isotropic triangles. It plugs into pyvista as an `acvd` mesh accessor.} %description %_description %package -n python3-%{pypi_name} Summary: %{summary} %description -n python3-%{pypi_name} %_description %prep %autosetup -p1 -n %{pypi_name}-%{version} # Upstream pins `vtk~=9.5` on aarch64 only, purely because PyPI had no ARM64 vtk # wheels below 9.5 -- it is a wheel-availability workaround, not an API bound. # Against distro VTK it is actively wrong: it excludes 9.6, which is what this # COPR ships, so the dependency would be unsatisfiable on aarch64. VTK comes in # via pyvista's own dependency anyway; drop the line. sed -i '/^ "vtk~=9\.5 ; sys_platform/d' pyproject.toml grep -q 'vtk~=9.5' pyproject.toml && exit 1 || : %generate_buildrequires %pyproject_buildrequires %build %pyproject_wheel %install %pyproject_install # -L, not -l. f45's pyproject-rpm-macros enforces PEP 639: with -l it insists on # a License-File entry in the wheel metadata and aborts %%install when there is # none -- # ValueError: No License-File (PEP 639) in upstream metadata found. # (11036718, f45-aarch64). pyacvd 0.4.0 predates PEP 639 and its build backend # emits no License-File, so there is nothing to detect. Not arch-specific and # not fixable here -- it is upstream metadata; f44's macros simply did not check. # -L skips the detection and the %%license line below ships the file explicitly, # which is what the macro's own error message recommends. %pyproject_save_files -L %{pypi_name} %check %pyproject_check_import %files -n python3-%{pypi_name} -f %{pyproject_files} %license LICENSE %doc README.rst %changelog * Fri Sep 25 2026 Morgan Hough - 0.4.0-3 - Disable the debug packages. scikit-build-core builds the extension Release, so it carries no debug info, find-debuginfo extracts from 0 files, and f45's rpm treats the empty debugsourcefiles.list as an error where f44's did not. The published f44 package has no debuginfo subpackage either, so nothing is lost. * Fri Sep 25 2026 Morgan Hough - 0.4.0-2 - Ship the licence explicitly. f45's pyproject-rpm-macros enforces PEP 639 and %%pyproject_save_files -l now aborts when the wheel carries no License-File entry; pyacvd 0.4.0 predates PEP 639 and emits none. Switch to -L and add %%license LICENSE, as the macro's own error suggests. f44 built fine because its macros did not check. * Mon Jul 27 2026 Morgan Hough - 0.4.0-1 - Initial package. Required by 3D Slicer's EvolutionarySRep module, whose EvolutionarySRepUtil bootstrap otherwise attempts a network pip install of pyacvd at import time. - Drop the aarch64-only `vtk~=9.5` pin: it is a PyPI-wheel workaround that excludes the VTK 9.6.2 this COPR ships.