Loading pkgs/development/python-modules/python-mapnik/default.nix +6 −6 Original line number Diff line number Diff line Loading @@ -24,18 +24,19 @@ sqlite, pytestCheckHook, sparsehash, pybind11, }: buildPythonPackage rec { pname = "python-mapnik"; version = "3.0.16-unstable-2024-02-22"; version = "4.1.3.unstable-2025-09-25"; pyproject = true; src = fetchFromGitHub { owner = "mapnik"; repo = "python-mapnik"; rev = "5ab32f0209909cc98c26e1d86ce0c8ef29a9bf3d"; hash = "sha256-OqijA1WcyBcyWO8gntqp+xNIaV1Jqa0n1eMDip2OCvY="; rev = "4b51d57911dc6a1a9f35c62c681fbdeb56fc69d4"; hash = "sha256-oXxfLvmptW1v19vaUj11nGEcTHOrneBIea2+GB6uK48="; # Only needed for test data fetchSubmodules = true; }; Loading @@ -46,9 +47,6 @@ buildPythonPackage rec { (replaceVars ./find-libmapnik.patch { libmapnik = "${mapnik}/lib"; }) # Use `std::optional` rather than `boost::optional` # https://github.com/mapnik/python-mapnik/commit/e9f88a95a03dc081826a69da67bbec3e4cccd5eb ./python-mapnik_std_optional.patch ]; stdenv = python.stdenv; Loading @@ -58,6 +56,7 @@ buildPythonPackage rec { nativeBuildInputs = [ mapnik # for mapnik_config pkg-config pybind11 ]; dependencies = [ Loading Loading @@ -131,5 +130,6 @@ buildPythonPackage rec { homepage = "https://mapnik.org"; license = lib.licenses.lgpl21Plus; teams = [ lib.teams.geospatial ]; broken = true; }; } pkgs/development/python-modules/python-mapnik/find-libmapnik.patch +18 −17 Original line number Diff line number Diff line diff --git a/build.py b/build.py index 0f94826b6..3cceb4546 100644 --- a/build.py +++ b/build.py @@ -110,8 +110,8 @@ py_env.AppendUnique(LIBS='mapnik-wkt') diff --git i/build.py w/build.py index 0f94826b6..5e91793f2 100644 --- i/build.py +++ w/build.py @@ -109,9 +109,8 @@ py_env.AppendUnique(LIBS='mapnik-wkt') _mapnik = py_env.LoadableModule('mapnik/_mapnik', sources, LDMODULEPREFIX='', LDMODULESUFFIX='.so') Depends(_mapnik, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) -Depends(_mapnik, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) -Depends(_mapnik, env.subst('../../src/json/libmapnik-json${LIBSUFFIX}')) -Depends(_mapnik, env.subst('../../src/wkt/libmapnik-wkt${LIBSUFFIX}')) +Depends(_mapnik, env.subst('@libmapnik@/libmapnikjson${LIBSUFFIX}')) Loading @@ -13,11 +14,11 @@ index 0f94826b6..3cceb4546 100644 if 'uninstall' not in COMMAND_LINE_TARGETS: pymapniklib = env.Install(target_path,_mapnik) diff --git a/setup.py b/setup.py index 9985da5a2..5a03a1ec8 100755 --- a/setup.py +++ b/setup.py @@ -118,8 +118,8 @@ linkflags.extend(check_output([mapnik_config, '--libs']).split(' ')) diff --git i/setup.py w/setup.py index 24ca0ec5e..bc2b1e0e0 100755 --- i/setup.py +++ w/setup.py @@ -19,8 +19,8 @@ linkflags.extend(check_output([mapnik_config, '--libs']).split(' ')) linkflags.extend(check_output([mapnik_config, '--ldflags']).split(' ')) linkflags.extend(check_output([mapnik_config, '--dep-libs']).split(' ')) linkflags.extend([ Loading @@ -25,6 +26,6 @@ index 9985da5a2..5a03a1ec8 100755 - '-lmapnik-json', + '-lmapnikwkt', + '-lmapnikjson', ] + ['-l%s' % i for i in get_boost_library_names()]) ]) # Dynamically make the mapnik/paths.py file # Remove symlinks pkgs/development/python-modules/python-mapnik/python-mapnik_std_optional.patchdeleted 100644 → 0 +0 −176 Original line number Diff line number Diff line diff --git a/src/mapnik_image.cpp b/src/mapnik_image.cpp index 9add692c9..488427b56 100644 --- a/src/mapnik_image.cpp +++ b/src/mapnik_image.cpp @@ -230,7 +230,7 @@ unsigned get_type(mapnik::image_any & im) std::shared_ptr<image_any> open_from_file(std::string const& filename) { - boost::optional<std::string> type = type_from_filename(filename); + auto type = type_from_filename(filename); if (type) { std::unique_ptr<image_reader> reader(get_image_reader(filename,*type)); diff --git a/src/mapnik_layer.cpp b/src/mapnik_layer.cpp index 4fc7ea579..fbd277a81 100644 --- a/src/mapnik_layer.cpp +++ b/src/mapnik_layer.cpp @@ -95,7 +95,7 @@ struct layer_pickle_suite : boost::python::pickle_suite std::vector<std::string> & (mapnik::layer::*_styles_)() = &mapnik::layer::styles; -void set_maximum_extent(mapnik::layer & l, boost::optional<mapnik::box2d<double> > const& box) +void set_maximum_extent(mapnik::layer & l, std::optional<mapnik::box2d<double> > const& box) { if (box) { @@ -107,7 +107,7 @@ void set_maximum_extent(mapnik::layer & l, boost::optional<mapnik::box2d<double> } } -void set_buffer_size(mapnik::layer & l, boost::optional<int> const& buffer_size) +void set_buffer_size(mapnik::layer & l, std::optional<int> const& buffer_size) { if (buffer_size) { @@ -121,7 +121,7 @@ void set_buffer_size(mapnik::layer & l, boost::optional<int> const& buffer_size) PyObject * get_buffer_size(mapnik::layer & l) { - boost::optional<int> buffer_size = l.buffer_size(); + std::optional<int> buffer_size = l.buffer_size(); if (buffer_size) { #if PY_VERSION_HEX >= 0x03000000 diff --git a/src/mapnik_map.cpp b/src/mapnik_map.cpp index 3587e5d8a..cfa523b03 100644 --- a/src/mapnik_map.cpp +++ b/src/mapnik_map.cpp @@ -105,7 +105,7 @@ mapnik::featureset_ptr query_map_point(mapnik::Map const& m, int index, double x return m.query_map_point(idx, x, y); } -void set_maximum_extent(mapnik::Map & m, boost::optional<mapnik::box2d<double> > const& box) +void set_maximum_extent(mapnik::Map & m, std::optional<mapnik::box2d<double> > const& box) { if (box) { diff --git a/src/python_optional.hpp b/src/python_optional.hpp index d690b7c51..9d86c340e 100644 --- a/src/python_optional.hpp +++ b/src/python_optional.hpp @@ -28,7 +28,7 @@ #include <mapnik/util/noncopyable.hpp> #pragma GCC diagnostic pop -// boost::optional<T> to/from converter from John Wiegley +// std::optional<T> to/from converter from John Wiegley template <typename T, typename TfromPy> struct object_from_python @@ -54,7 +54,7 @@ struct python_optional : public mapnik::util::noncopyable { struct optional_to_python { - static PyObject * convert(const boost::optional<T>& value) + static PyObject * convert(const std::optional<T>& value) { return (value ? boost::python::to_python_value<T>()(*value) : boost::python::detail::none()); @@ -90,9 +90,9 @@ struct python_optional : public mapnik::util::noncopyable data)->storage.bytes; if (data->convertible == source) // == None - new (storage) boost::optional<T>(); // A Boost uninitialized value + new (storage) std::optional<T>(); // A Boost uninitialized value else - new (storage) boost::optional<T>(*static_cast<T *>(data->convertible)); + new (storage) std::optional<T>(*static_cast<T *>(data->convertible)); data->convertible = storage; } @@ -100,18 +100,18 @@ struct python_optional : public mapnik::util::noncopyable explicit python_optional() { - register_python_conversion<boost::optional<T>, + register_python_conversion<std::optional<T>, optional_to_python, optional_from_python>(); } }; -// to/from boost::optional<bool> +// to/from std::optional<bool> template <> struct python_optional<float> : public mapnik::util::noncopyable { struct optional_to_python { - static PyObject * convert(const boost::optional<float>& value) + static PyObject * convert(const std::optional<float>& value) { return (value ? PyFloat_FromDouble(*value) : boost::python::detail::none()); @@ -133,30 +133,30 @@ struct python_optional<float> : public mapnik::util::noncopyable boost::python::converter::rvalue_from_python_stage1_data * data) { using namespace boost::python::converter; - void * const storage = ((rvalue_from_python_storage<boost::optional<bool> > *) + void * const storage = ((rvalue_from_python_storage<std::optional<bool> > *) data)->storage.bytes; if (source == Py_None) // == None - new (storage) boost::optional<float>(); // A Boost uninitialized value + new (storage) std::optional<float>(); // A Boost uninitialized value else - new (storage) boost::optional<float>(PyFloat_AsDouble(source)); + new (storage) std::optional<float>(PyFloat_AsDouble(source)); data->convertible = storage; } }; explicit python_optional() { - register_python_conversion<boost::optional<float>, + register_python_conversion<std::optional<float>, optional_to_python, optional_from_python>(); } }; -// to/from boost::optional<float> +// to/from std::optional<float> template <> struct python_optional<bool> : public mapnik::util::noncopyable { struct optional_to_python { - static PyObject * convert(const boost::optional<bool>& value) + static PyObject * convert(const std::optional<bool>& value) { if (value) { @@ -181,13 +181,13 @@ struct python_optional<bool> : public mapnik::util::noncopyable boost::python::converter::rvalue_from_python_stage1_data * data) { using namespace boost::python::converter; - void * const storage = ((rvalue_from_python_storage<boost::optional<bool> > *) + void * const storage = ((rvalue_from_python_storage<std::optional<bool> > *) data)->storage.bytes; if (source == Py_None) // == None - new (storage) boost::optional<bool>(); // A Boost uninitialized value + new (storage) std::optional<bool>(); // A Boost uninitialized value else { - new (storage) boost::optional<bool>(source == Py_True ? true : false); + new (storage) std::optional<bool>(source == Py_True ? true : false); } data->convertible = storage; } @@ -195,7 +195,7 @@ struct python_optional<bool> : public mapnik::util::noncopyable explicit python_optional() { - register_python_conversion<boost::optional<bool>, + register_python_conversion<std::optional<bool>, optional_to_python, optional_from_python>(); } }; Loading
pkgs/development/python-modules/python-mapnik/default.nix +6 −6 Original line number Diff line number Diff line Loading @@ -24,18 +24,19 @@ sqlite, pytestCheckHook, sparsehash, pybind11, }: buildPythonPackage rec { pname = "python-mapnik"; version = "3.0.16-unstable-2024-02-22"; version = "4.1.3.unstable-2025-09-25"; pyproject = true; src = fetchFromGitHub { owner = "mapnik"; repo = "python-mapnik"; rev = "5ab32f0209909cc98c26e1d86ce0c8ef29a9bf3d"; hash = "sha256-OqijA1WcyBcyWO8gntqp+xNIaV1Jqa0n1eMDip2OCvY="; rev = "4b51d57911dc6a1a9f35c62c681fbdeb56fc69d4"; hash = "sha256-oXxfLvmptW1v19vaUj11nGEcTHOrneBIea2+GB6uK48="; # Only needed for test data fetchSubmodules = true; }; Loading @@ -46,9 +47,6 @@ buildPythonPackage rec { (replaceVars ./find-libmapnik.patch { libmapnik = "${mapnik}/lib"; }) # Use `std::optional` rather than `boost::optional` # https://github.com/mapnik/python-mapnik/commit/e9f88a95a03dc081826a69da67bbec3e4cccd5eb ./python-mapnik_std_optional.patch ]; stdenv = python.stdenv; Loading @@ -58,6 +56,7 @@ buildPythonPackage rec { nativeBuildInputs = [ mapnik # for mapnik_config pkg-config pybind11 ]; dependencies = [ Loading Loading @@ -131,5 +130,6 @@ buildPythonPackage rec { homepage = "https://mapnik.org"; license = lib.licenses.lgpl21Plus; teams = [ lib.teams.geospatial ]; broken = true; }; }
pkgs/development/python-modules/python-mapnik/find-libmapnik.patch +18 −17 Original line number Diff line number Diff line diff --git a/build.py b/build.py index 0f94826b6..3cceb4546 100644 --- a/build.py +++ b/build.py @@ -110,8 +110,8 @@ py_env.AppendUnique(LIBS='mapnik-wkt') diff --git i/build.py w/build.py index 0f94826b6..5e91793f2 100644 --- i/build.py +++ w/build.py @@ -109,9 +109,8 @@ py_env.AppendUnique(LIBS='mapnik-wkt') _mapnik = py_env.LoadableModule('mapnik/_mapnik', sources, LDMODULEPREFIX='', LDMODULESUFFIX='.so') Depends(_mapnik, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) -Depends(_mapnik, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) -Depends(_mapnik, env.subst('../../src/json/libmapnik-json${LIBSUFFIX}')) -Depends(_mapnik, env.subst('../../src/wkt/libmapnik-wkt${LIBSUFFIX}')) +Depends(_mapnik, env.subst('@libmapnik@/libmapnikjson${LIBSUFFIX}')) Loading @@ -13,11 +14,11 @@ index 0f94826b6..3cceb4546 100644 if 'uninstall' not in COMMAND_LINE_TARGETS: pymapniklib = env.Install(target_path,_mapnik) diff --git a/setup.py b/setup.py index 9985da5a2..5a03a1ec8 100755 --- a/setup.py +++ b/setup.py @@ -118,8 +118,8 @@ linkflags.extend(check_output([mapnik_config, '--libs']).split(' ')) diff --git i/setup.py w/setup.py index 24ca0ec5e..bc2b1e0e0 100755 --- i/setup.py +++ w/setup.py @@ -19,8 +19,8 @@ linkflags.extend(check_output([mapnik_config, '--libs']).split(' ')) linkflags.extend(check_output([mapnik_config, '--ldflags']).split(' ')) linkflags.extend(check_output([mapnik_config, '--dep-libs']).split(' ')) linkflags.extend([ Loading @@ -25,6 +26,6 @@ index 9985da5a2..5a03a1ec8 100755 - '-lmapnik-json', + '-lmapnikwkt', + '-lmapnikjson', ] + ['-l%s' % i for i in get_boost_library_names()]) ]) # Dynamically make the mapnik/paths.py file # Remove symlinks
pkgs/development/python-modules/python-mapnik/python-mapnik_std_optional.patchdeleted 100644 → 0 +0 −176 Original line number Diff line number Diff line diff --git a/src/mapnik_image.cpp b/src/mapnik_image.cpp index 9add692c9..488427b56 100644 --- a/src/mapnik_image.cpp +++ b/src/mapnik_image.cpp @@ -230,7 +230,7 @@ unsigned get_type(mapnik::image_any & im) std::shared_ptr<image_any> open_from_file(std::string const& filename) { - boost::optional<std::string> type = type_from_filename(filename); + auto type = type_from_filename(filename); if (type) { std::unique_ptr<image_reader> reader(get_image_reader(filename,*type)); diff --git a/src/mapnik_layer.cpp b/src/mapnik_layer.cpp index 4fc7ea579..fbd277a81 100644 --- a/src/mapnik_layer.cpp +++ b/src/mapnik_layer.cpp @@ -95,7 +95,7 @@ struct layer_pickle_suite : boost::python::pickle_suite std::vector<std::string> & (mapnik::layer::*_styles_)() = &mapnik::layer::styles; -void set_maximum_extent(mapnik::layer & l, boost::optional<mapnik::box2d<double> > const& box) +void set_maximum_extent(mapnik::layer & l, std::optional<mapnik::box2d<double> > const& box) { if (box) { @@ -107,7 +107,7 @@ void set_maximum_extent(mapnik::layer & l, boost::optional<mapnik::box2d<double> } } -void set_buffer_size(mapnik::layer & l, boost::optional<int> const& buffer_size) +void set_buffer_size(mapnik::layer & l, std::optional<int> const& buffer_size) { if (buffer_size) { @@ -121,7 +121,7 @@ void set_buffer_size(mapnik::layer & l, boost::optional<int> const& buffer_size) PyObject * get_buffer_size(mapnik::layer & l) { - boost::optional<int> buffer_size = l.buffer_size(); + std::optional<int> buffer_size = l.buffer_size(); if (buffer_size) { #if PY_VERSION_HEX >= 0x03000000 diff --git a/src/mapnik_map.cpp b/src/mapnik_map.cpp index 3587e5d8a..cfa523b03 100644 --- a/src/mapnik_map.cpp +++ b/src/mapnik_map.cpp @@ -105,7 +105,7 @@ mapnik::featureset_ptr query_map_point(mapnik::Map const& m, int index, double x return m.query_map_point(idx, x, y); } -void set_maximum_extent(mapnik::Map & m, boost::optional<mapnik::box2d<double> > const& box) +void set_maximum_extent(mapnik::Map & m, std::optional<mapnik::box2d<double> > const& box) { if (box) { diff --git a/src/python_optional.hpp b/src/python_optional.hpp index d690b7c51..9d86c340e 100644 --- a/src/python_optional.hpp +++ b/src/python_optional.hpp @@ -28,7 +28,7 @@ #include <mapnik/util/noncopyable.hpp> #pragma GCC diagnostic pop -// boost::optional<T> to/from converter from John Wiegley +// std::optional<T> to/from converter from John Wiegley template <typename T, typename TfromPy> struct object_from_python @@ -54,7 +54,7 @@ struct python_optional : public mapnik::util::noncopyable { struct optional_to_python { - static PyObject * convert(const boost::optional<T>& value) + static PyObject * convert(const std::optional<T>& value) { return (value ? boost::python::to_python_value<T>()(*value) : boost::python::detail::none()); @@ -90,9 +90,9 @@ struct python_optional : public mapnik::util::noncopyable data)->storage.bytes; if (data->convertible == source) // == None - new (storage) boost::optional<T>(); // A Boost uninitialized value + new (storage) std::optional<T>(); // A Boost uninitialized value else - new (storage) boost::optional<T>(*static_cast<T *>(data->convertible)); + new (storage) std::optional<T>(*static_cast<T *>(data->convertible)); data->convertible = storage; } @@ -100,18 +100,18 @@ struct python_optional : public mapnik::util::noncopyable explicit python_optional() { - register_python_conversion<boost::optional<T>, + register_python_conversion<std::optional<T>, optional_to_python, optional_from_python>(); } }; -// to/from boost::optional<bool> +// to/from std::optional<bool> template <> struct python_optional<float> : public mapnik::util::noncopyable { struct optional_to_python { - static PyObject * convert(const boost::optional<float>& value) + static PyObject * convert(const std::optional<float>& value) { return (value ? PyFloat_FromDouble(*value) : boost::python::detail::none()); @@ -133,30 +133,30 @@ struct python_optional<float> : public mapnik::util::noncopyable boost::python::converter::rvalue_from_python_stage1_data * data) { using namespace boost::python::converter; - void * const storage = ((rvalue_from_python_storage<boost::optional<bool> > *) + void * const storage = ((rvalue_from_python_storage<std::optional<bool> > *) data)->storage.bytes; if (source == Py_None) // == None - new (storage) boost::optional<float>(); // A Boost uninitialized value + new (storage) std::optional<float>(); // A Boost uninitialized value else - new (storage) boost::optional<float>(PyFloat_AsDouble(source)); + new (storage) std::optional<float>(PyFloat_AsDouble(source)); data->convertible = storage; } }; explicit python_optional() { - register_python_conversion<boost::optional<float>, + register_python_conversion<std::optional<float>, optional_to_python, optional_from_python>(); } }; -// to/from boost::optional<float> +// to/from std::optional<float> template <> struct python_optional<bool> : public mapnik::util::noncopyable { struct optional_to_python { - static PyObject * convert(const boost::optional<bool>& value) + static PyObject * convert(const std::optional<bool>& value) { if (value) { @@ -181,13 +181,13 @@ struct python_optional<bool> : public mapnik::util::noncopyable boost::python::converter::rvalue_from_python_stage1_data * data) { using namespace boost::python::converter; - void * const storage = ((rvalue_from_python_storage<boost::optional<bool> > *) + void * const storage = ((rvalue_from_python_storage<std::optional<bool> > *) data)->storage.bytes; if (source == Py_None) // == None - new (storage) boost::optional<bool>(); // A Boost uninitialized value + new (storage) std::optional<bool>(); // A Boost uninitialized value else { - new (storage) boost::optional<bool>(source == Py_True ? true : false); + new (storage) std::optional<bool>(source == Py_True ? true : false); } data->convertible = storage; } @@ -195,7 +195,7 @@ struct python_optional<bool> : public mapnik::util::noncopyable explicit python_optional() { - register_python_conversion<boost::optional<bool>, + register_python_conversion<std::optional<bool>, optional_to_python, optional_from_python>(); } };