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