diff --git a/basemap-1.3.8-cython3.patch b/basemap-1.3.8-cython3.patch new file mode 100644 index 0000000..c571cf8 --- /dev/null +++ b/basemap-1.3.8-cython3.patch @@ -0,0 +1,280 @@ +From 61a8d09313563b18231c4549ab1cc7b939a134e5 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Sat, 4 Nov 2023 14:45:04 -0400 +Subject: [PATCH 1/7] Explicitly annotate the GEOSMessageHandler typedef as + noexcept + +Adjust the two callbacks of that type to match. + +This is required for Cython 3 compatibility. +--- + packages/basemap/src/_geoslib.pyx | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/packages/basemap/src/_geoslib.pyx b/packages/basemap/src/_geoslib.pyx +index 7ef440b4..e4982895 100644 +--- a/packages/basemap/src/_geoslib.pyx ++++ b/packages/basemap/src/_geoslib.pyx +@@ -51,7 +51,7 @@ cdef extern from "geos_c.h": + pass + ctypedef struct GEOSCoordSeq: + pass +- ctypedef void (*GEOSMessageHandler)(char *fmt, char *list) ++ ctypedef void (*GEOSMessageHandler)(char *fmt, char *list) noexcept + char *GEOSversion() + void initGEOS(GEOSMessageHandler notice_function, GEOSMessageHandler error_function) + void finishGEOS() +@@ -105,7 +105,7 @@ cdef extern from "geos_c.h": + GEOSCoordSeq *GEOSGeom_getCoordSeq(GEOSGeom* g) + int GEOSCoordSeq_getSize(GEOSCoordSeq *s, unsigned int *size) + +-cdef void notice_h(char *fmt, char*msg): ++cdef void notice_h(char *fmt, char*msg) noexcept: + pass + #format = PyBytes_FromString(fmt) + #message = PyBytes_FromString(msg) +@@ -115,7 +115,7 @@ cdef void notice_h(char *fmt, char*msg): + # warn_msg = format + #sys.stdout.write('GEOS_NOTICE: %s\n' % warn_msg) + +-cdef void error_h(char *fmt, char*msg): ++cdef void error_h(char *fmt, char*msg) noexcept: + format = PyBytes_FromString(fmt) + message = PyBytes_FromString(msg) + try: +-- +2.41.0 + + +From b5119327b573b0aef20a64e3abc2bb20e1d7cde3 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Sat, 4 Nov 2023 15:00:33 -0400 +Subject: [PATCH 2/7] Allow Cython 3.0 + +This reverts 7c2d97ce8352eaaa5c05a6c58e0da6079fe65a3e except for the changelog. +--- + packages/basemap/pyproject.toml | 2 +- + packages/basemap/requirements-setup.txt | 4 +++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/packages/basemap/pyproject.toml b/packages/basemap/pyproject.toml +index 1e86505d..26e78d87 100644 +--- a/packages/basemap/pyproject.toml ++++ b/packages/basemap/pyproject.toml +@@ -8,7 +8,7 @@ requires = [ + 'numpy == 1.16.6; sys_platform != "darwin" and (python_version >= "3.7" and python_version <= "3.9")', + 'numpy == 1.16.6; python_version == "2.7" or (python_version >= "3.4" and python_version <= "3.6")', + 'numpy == 1.11.3; python_version == "2.6" or (python_version >= "3.2" and python_version <= "3.3")', +- 'cython >= 0.29, < 3.0; python_version >= "3.3" or python_version < "3.0"', ++ 'cython >= 0.29, < 3.1; python_version >= "3.3" or python_version < "3.0"', + 'cython >= 0.26, < 0.27; python_version == "3.2"' + ] + build-backend = "setuptools.build_meta" +diff --git a/packages/basemap/requirements-setup.txt b/packages/basemap/requirements-setup.txt +index 376b9f7a..683c9738 100644 +--- a/packages/basemap/requirements-setup.txt ++++ b/packages/basemap/requirements-setup.txt +@@ -1,4 +1,6 @@ + cython >= 0.29, < 3.0; python_version == "2.6" + cython >= 0.29, < 3.0; python_version == "2.7" + cython >= 0.26, < 0.27; python_version == "3.2" +-cython >= 0.29, < 3.0; python_version >= "3.3" ++cython >= 0.29, < 3.0; python_version == "3.3" ++cython >= 0.29, < 3.0; python_version == "3.4" ++cython >= 0.29, < 3.1; python_version >= "3.5" +-- +2.41.0 + + +From 501ec756f962dd01a54de77360bda6e055d17529 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Sat, 4 Nov 2023 15:15:04 -0400 +Subject: [PATCH 3/7] Revert "Fix manylinux workflow to stay on Cython 0.29.x" + +This reverts commit 63a3f88da8da5a7d9a9a05743be3b576f70bdd0c. +--- + .github/workflows/basemap-for-manylinux.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/.github/workflows/basemap-for-manylinux.yml b/.github/workflows/basemap-for-manylinux.yml +index 1d3f43cd..c9583e35 100644 +--- a/.github/workflows/basemap-for-manylinux.yml ++++ b/.github/workflows/basemap-for-manylinux.yml +@@ -187,7 +187,7 @@ jobs: + export NUMPY_INCLUDE_PATH=${sitepkgdir}/numpy/core/include + if [ "${{ matrix.python-version }}" = "3.11" ]; then + kwds="--no-build-isolation" +- pip install setuptools wheel "cython >= 0.29, < 3.0" ++ pip install setuptools wheel "cython >= 0.29, < 3.1" + fi + cd ${{ env.PKGDIR }} + python setup.py sdist +-- +2.41.0 + + +From a15f3ea6977a5871e1dd0bdaaf549c2e7111a1a8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADctor=20Molina=20Garc=C3=ADa?= + +Date: Sat, 4 Nov 2023 23:01:12 +0100 +Subject: [PATCH 4/7] Update requirements-setup.txt + +--- + packages/basemap/requirements-setup.txt | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/packages/basemap/requirements-setup.txt b/packages/basemap/requirements-setup.txt +index 683c9738..6f39a1a0 100644 +--- a/packages/basemap/requirements-setup.txt ++++ b/packages/basemap/requirements-setup.txt +@@ -1,6 +1,2 @@ +-cython >= 0.29, < 3.0; python_version == "2.6" +-cython >= 0.29, < 3.0; python_version == "2.7" ++cython >= 0.29, < 3.1; python_version >= "3.3" or python_version < "3.0" + cython >= 0.26, < 0.27; python_version == "3.2" +-cython >= 0.29, < 3.0; python_version == "3.3" +-cython >= 0.29, < 3.0; python_version == "3.4" +-cython >= 0.29, < 3.1; python_version >= "3.5" +-- +2.41.0 + + +From e42e1ac88816f2aa3f73cbdffb4a2c9465a8607c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADctor=20Molina=20Garc=C3=ADa?= + +Date: Sun, 5 Nov 2023 12:24:00 +0100 +Subject: [PATCH 5/7] Add optional legacy_implicit_noexcept directive in + setup.py + +--- + packages/basemap/setup.py | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/packages/basemap/setup.py b/packages/basemap/setup.py +index c4f998f7..8b1962df 100644 +--- a/packages/basemap/setup.py ++++ b/packages/basemap/setup.py +@@ -14,6 +14,12 @@ from setuptools.command.sdist import sdist + from setuptools.dist import Distribution + from setuptools.extension import Extension + ++try: ++ import Cython ++ cython_major_version = int(Cython.__version__.split(".")[0]) ++except ImportError: ++ cython_major_version = 0 ++ + + def get_content(name, splitlines=False): + """Return the file contents with project root as root folder.""" +@@ -146,7 +152,8 @@ ext_modules = [ + for ext in ext_modules: + ext.cython_directives = [ + ("language_level", str(sys.version_info[0])), +- ] ++ ("legacy_implicit_noexcept", True), ++ ][:1 + int(cython_major_version >= 3)] + + # Define all the different requirements. + setup_requires = get_content("requirements-setup.txt", splitlines=True) +-- +2.41.0 + + +From 2892806586eaf7ef787c7609ea9dd13e0eb908b1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADctor=20Molina=20Garc=C3=ADa?= + +Date: Sun, 5 Nov 2023 12:45:19 +0100 +Subject: [PATCH 6/7] Revert noexcept declarations with noexcept comment + +--- + packages/basemap/src/_geoslib.pyx | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +diff --git a/packages/basemap/src/_geoslib.pyx b/packages/basemap/src/_geoslib.pyx +index e4982895..e078b4f3 100644 +--- a/packages/basemap/src/_geoslib.pyx ++++ b/packages/basemap/src/_geoslib.pyx +@@ -51,7 +51,10 @@ cdef extern from "geos_c.h": + pass + ctypedef struct GEOSCoordSeq: + pass +- ctypedef void (*GEOSMessageHandler)(char *fmt, char *list) noexcept ++ # Cython 3: Next ctypedef needs "noexcept" declaration unless ++ # the compiler directive "legacy_implicit_noexcept" is used ++ # ("noexcept" syntax supported since Cython 0.29.31). ++ ctypedef void (*GEOSMessageHandler)(char *fmt, char *list) + char *GEOSversion() + void initGEOS(GEOSMessageHandler notice_function, GEOSMessageHandler error_function) + void finishGEOS() +@@ -105,7 +108,10 @@ cdef extern from "geos_c.h": + GEOSCoordSeq *GEOSGeom_getCoordSeq(GEOSGeom* g) + int GEOSCoordSeq_getSize(GEOSCoordSeq *s, unsigned int *size) + +-cdef void notice_h(char *fmt, char*msg) noexcept: ++# Cython 3: Next cdef needs "noexcept" declaration unless ++# the compiler directive "legacy_implicit_noexcept" is used ++# ("noexcept" syntax supported since Cython 0.29.31). ++cdef void notice_h(char *fmt, char*msg): + pass + #format = PyBytes_FromString(fmt) + #message = PyBytes_FromString(msg) +@@ -115,7 +121,10 @@ cdef void notice_h(char *fmt, char*msg) noexcept: + # warn_msg = format + #sys.stdout.write('GEOS_NOTICE: %s\n' % warn_msg) + +-cdef void error_h(char *fmt, char*msg) noexcept: ++# Cython 3: Next cdef needs "noexcept" declaration unless ++# the compiler directive "legacy_implicit_noexcept" is used ++# ("noexcept" syntax supported since Cython 0.29.31). ++cdef void error_h(char *fmt, char*msg): + format = PyBytes_FromString(fmt) + message = PyBytes_FromString(msg) + try: +-- +2.41.0 + + +From 6c33a5cf653cb7b5ef03592ba359fb2c917abf8c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADctor=20Molina=20Garc=C3=ADa?= + +Date: Sun, 5 Nov 2023 13:02:08 +0100 +Subject: [PATCH 7/7] Update CHANGELOG with PR #593 + +--- + CHANGELOG.md | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/CHANGELOG.md b/CHANGELOG.md +index 15a3918f..045e4729 100644 +--- a/CHANGELOG.md ++++ b/CHANGELOG.md +@@ -10,6 +10,16 @@ https://keepachangelog.com/en/1.0.0/ + https://semver.org/spec/v2.0.0.html + + ++## [Unreleased] ++ ++### Changed ++- Update build dependencies: ++ - Upgrade `Cython` upper pin to 3.1. ++ ++### Fixed ++- Fix `_geoslib.pyx` compilation with Cython 3.0+ using the compiler ++ directive "legacy_implicit_noexcept" (PR [#593] by @musicinmybrain). ++ + ## [1.3.8] - 2023-08-18 + + ### Changed +@@ -976,6 +986,8 @@ https://semver.org/spec/v2.0.0.html + - Fix glitches in drawing of parallels and meridians. + + ++[#593]: ++https://github.com/matplotlib/basemap/pull/593 + [#583]: + https://github.com/matplotlib/basemap/issues/583 + [#582]: +-- +2.41.0 + diff --git a/python-basemap.spec b/python-basemap.spec index ab78219..71f4647 100644 --- a/python-basemap.spec +++ b/python-basemap.spec @@ -2,12 +2,16 @@ Name: python-basemap Version: 1.3.8 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Plots data on map projections (with continental and political boundaries) License: LGPL-2.1-or-later URL: https://matplotlib.org/basemap/ Source0: https://github.com/matplotlib/basemap/archive/v%{version}/basemap-%{version}.tar.gz Patch0: requirements.patch +# Support Cython 3.0 +# https://github.com/matplotlib/basemap/pull/593 +# Rebased on 1.3.8 +Patch1: basemap-1.3.8-cython3.patch BuildRequires: gcc @@ -32,7 +36,7 @@ BuildRequires: python3-devel, proj-devel, shapelib-devel, python3-numpy-f2py, g BuildRequires: python3-setuptools BuildRequires: chrpath # Needed to regenerate Cython generated files. -BuildRequires: python3-Cython < 3~~ +BuildRequires: python3-Cython BuildRequires: python3-httplib2 BuildRequires: python3-matplotlib >= 0.98 BuildRequires: python3-pyproj @@ -48,8 +52,6 @@ projections (with continental and political boundaries). %autosetup -n basemap-%{version} -p1 %build -# regenerate Cython generated files -%python3 -m cython packages/basemap/src/*.pyx export GEOS_LIB="/usr/" pushd packages/basemap @@ -93,6 +95,9 @@ PYTHONPATH=%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib} \ %changelog +* Sat Nov 04 2023 Benjamin A. Beasley - 1.3.8-2 +- Patch for Cython 3 + * Fri Aug 18 2023 Gwyn Ciesla - 1.3.8-1 - 1.3.8