Blob Blame History Raw
Name:           python-mapbox-earcut
Version:        1.0.1
Release:        %autorelease
Summary:        Python bindings to the mapbox earcut C++ library

# The entire source is (SPDX) ISC; the License also includes the licenses of
# two header-only libraries that are compiled into the extension:
#   - earcut-hpp-static is also ISC
#   - pybind11-static is BSD-3-Clause
License:        ISC AND BSD-3-Clause
URL:            https://github.com/skogler/mapbox_earcut_python
# The GitHub archive contains tests; the PyPI archive does not
Source:         %{url}/archive/v%{version}/mapbox_earcut_python-%{version}.tar.gz

BuildRequires:  python3-devel

BuildRequires:  gcc-c++
BuildRequires:  cmake
BuildRequires:  make

# Header-only libraries; -static is for tracking, required by guidelines
# Minimum version added downstream to ensure the latest bug fixes are present.
# Note that upstream of this package bundles earcut.hpp 2.2.4 in release 1.0.1.
BuildRequires:  earcut-hpp-devel >= 2.2.4
BuildRequires:  earcut-hpp-static
# An extension built with pybind11 uses the pybind11 C++ libraries, which are
# header-only—so, strictly speaking, we need this as well:
BuildRequires:  pybind11-static

BuildRequires:  dos2unix

%global common_description %{expand:
Python bindings for the C++ implementation of the Mapbox Earcut library, which
provides very fast and quite robust triangulation of 2D polygons.

Original code: earcut.hpp

Original description:

    The library implements a modified ear slicing algorithm, optimized by
    z-order curve hashing and extended to handle holes, twisted polygons,
    degeneracies and self-intersections in a way that doesn’t guarantee
    correctness of triangulation, but attempts to always produce acceptable
    results for practical data like geographical shapes.}

%description %{common_description}


%package -n python3-mapbox-earcut
Summary:        %{summary}

%description -n python3-mapbox-earcut %{common_description}


%prep
%autosetup -n mapbox_earcut_python-%{version}

# Remove bundled earcut.hpp library
rm -rvf include

# Fix CRLF line endings in files that will be installed.
dos2unix --keepdate *.md


%generate_buildrequires
%pyproject_buildrequires -x test


%build
# See comments in the earcut-hpp spec file, as well as:
# https://github.com/mapbox/earcut.hpp/issues/97
# https://github.com/mapbox/earcut.hpp/issues/103
export CFLAGS="${CFLAGS-} -ffp-contract=off"
export CXXFLAGS="${CXXFLAGS-} -ffp-contract=off"

%pyproject_wheel


%install
%pyproject_install
%pyproject_save_files mapbox_earcut


%check
%pytest


%files -n python3-mapbox-earcut -f %{pyproject_files}
# pyproject-rpm-macros handles LICENSE.md; verify with “rpm -qL -p …”
%doc README.md


%changelog
%autochangelog