diff options
author | David Hummel <6109326+hummeltech@users.noreply.github.com> | 2024-04-17 12:14:53 -0700 |
---|---|---|
committer | David Hummel <6109326+hummeltech@users.noreply.github.com> | 2024-06-17 19:55:42 -0700 |
commit | 425aa3c3d19126bab033ce897b82a08975b0fc2b (patch) | |
tree | ab30bb5223da84d7ef87db19254b48756826479d | |
parent | fd669cd8a2ee60dd02e72ca7ecddbdc30dfc016b (diff) |
python311Packages.python-mapnik: unstable-2023-02-23 -> unstable-2024-02-22
3 files changed, 199 insertions, 14 deletions
diff --git a/pkgs/development/libraries/mapnik/default.nix b/pkgs/development/libraries/mapnik/default.nix index a16db9ae75abf..0428dd585c661 100644 --- a/pkgs/development/libraries/mapnik/default.nix +++ b/pkgs/development/libraries/mapnik/default.nix @@ -98,9 +98,8 @@ stdenv.mkDerivation rec { (lib.cmakeBool "BUILD_DEMO_VIEWER" false) # Use 'protozero' package. (lib.cmakeBool "USE_EXTERNAL_MAPBOX_PROTOZERO" true) - ] ++ lib.optionals stdenv.isDarwin [ # macOS builds fail when using memory mapped file cache. - (lib.cmakeBool "USE_MEMORY_MAPPED_FILE" false) + (lib.cmakeBool "USE_MEMORY_MAPPED_FILE" (!stdenv.isDarwin)) ]; doCheck = true; diff --git a/pkgs/development/python-modules/python-mapnik/default.nix b/pkgs/development/python-modules/python-mapnik/default.nix index c93adc9f09db8..d2d0ae00f08cd 100644 --- a/pkgs/development/python-modules/python-mapnik/default.nix +++ b/pkgs/development/python-modules/python-mapnik/default.nix @@ -23,21 +23,20 @@ sqlite, nose, pytestCheckHook, - stdenv, + darwin, + sparsehash, }: buildPythonPackage rec { pname = "python-mapnik"; - version = "unstable-2023-02-23"; + version = "3.0.16-unstable-2024-02-22"; format = "setuptools"; src = fetchFromGitHub { owner = "mapnik"; repo = "python-mapnik"; - # Use proj6 branch in order to support Proj >= 6 (excluding commits after 2023-02-23) - # https://github.com/mapnik/python-mapnik/compare/master...proj6 - rev = "687b2c72a24c59d701d62e4458c380f8c54f0549"; - hash = "sha256-q3Snd3K/JndckwAVwSKU+kFK5E1uph78ty7mwVo/7Ik="; + rev = "5ab32f0209909cc98c26e1d86ce0c8ef29a9bf3d"; + hash = "sha256-OqijA1WcyBcyWO8gntqp+xNIaV1Jqa0n1eMDip2OCvY="; # Only needed for test data fetchSubmodules = true; }; @@ -49,8 +48,13 @@ buildPythonPackage rec { src = ./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 = if python.stdenv.isDarwin then darwin.apple_sdk_11_0.stdenv else python.stdenv; + nativeBuildInputs = [ mapnik # for mapnik_config pkg-config @@ -70,6 +74,7 @@ buildPythonPackage rec { zlib libxml2 sqlite + sparsehash ]; propagatedBuildInputs = [ @@ -107,14 +112,19 @@ buildPythonPackage rec { # https://github.com/mapnik/python-mapnik/issues/255 disabledTests = [ "test_geometry_type" - "test_marker_ellipse_render1" - "test_marker_ellipse_render2" - "test_normalizing_definition" "test_passing_pycairo_context_pdf" "test_pdf_printing" - "test_visual_zoom_all_rendering2" - "test_wgs84_inverse_forward" - ] ++ lib.optionals stdenv.isDarwin [ "test_passing_pycairo_context_svg" ]; + "test_render_with_scale_factor" + ] ++ lib.optionals stdenv.isDarwin [ + "test_passing_pycairo_context_png" + "test_passing_pycairo_context_svg" + "test_pycairo_pdf_surface1" + "test_pycairo_pdf_surface2" + "test_pycairo_pdf_surface3" + "test_pycairo_svg_surface1" + "test_pycairo_svg_surface2" + "test_pycairo_svg_surface3" + ]; pythonImportsCheck = [ "mapnik" ]; diff --git a/pkgs/development/python-modules/python-mapnik/python-mapnik_std_optional.patch b/pkgs/development/python-modules/python-mapnik/python-mapnik_std_optional.patch new file mode 100644 index 0000000000000..c285e77ca57b6 --- /dev/null +++ b/pkgs/development/python-modules/python-mapnik/python-mapnik_std_optional.patch @@ -0,0 +1,176 @@ +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>(); + } + }; |