Blob Blame History Raw
From 61a8d09313563b18231c4549ab1cc7b939a134e5 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
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" <code@musicinmybrain.net>
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" <code@musicinmybrain.net>
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?=
 <molinav@users.noreply.github.com>
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?=
 <molinav@users.noreply.github.com>
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?=
 <molinav@users.noreply.github.com>
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?=
 <molinav@users.noreply.github.com>
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