[packages/mapnik] - up to 2.2.0
arekm
arekm at pld-linux.org
Mon Nov 10 12:35:15 CET 2014
commit eaba878b4045052f4ec37d379e7d3adb6875b2b4
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date: Mon Nov 10 12:35:04 2014 +0100
- up to 2.2.0
mapnik-boost-megadiff.diff | 1040 ++++++++++++++++++++++++++++++++++++++++++++
mapnik-build.patch | 11 +
mapnik.spec | 64 +--
3 files changed, 1089 insertions(+), 26 deletions(-)
---
diff --git a/mapnik.spec b/mapnik.spec
index 85629c6..c1cf866 100644
--- a/mapnik.spec
+++ b/mapnik.spec
@@ -1,13 +1,15 @@
#
Summary: Toolkit for developing GIS (Geographic Information Systems) applications
Name: mapnik
-Version: 2.0.0
-Release: 18
+Version: 2.2.0
+Release: 1
License: LGPL v2.1
Group: Applications
-Source0: http://download.berlios.de/mapnik/%{name}-%{version}.tar.bz2
-# Source0-md5: 499c6a61544014b9bc2a7c978f963ef3
+Source0: https://github.com/mapnik/mapnik/archive/v%{version}.tar.gz
+# Source0-md5: b837931c7f1a4dc630d8550d3e635036
Patch0: %{name}-boost_lib_names.patch
+Patch1: mapnik-boost-megadiff.diff
+Patch2: %{name}-build.patch
URL: http://mapnik.org/
BuildRequires: boost-devel
BuildRequires: boost-python-devel
@@ -19,6 +21,7 @@ BuildRequires: libicu-devel
BuildRequires: libjpeg-devel
BuildRequires: libltdl-devel
BuildRequires: libpng-devel
+BuildRequires: librasterlite-devel
BuildRequires: libtiff-devel
BuildRequires: libxml2-devel
BuildRequires: pkgconfig
@@ -80,21 +83,29 @@ Statyczna biblioteka Mapnik.
%prep
%setup -q
%patch0 -p1
+%patch1 -p1
+%patch2 -p1
%build
%scons \
PREFIX=%{_prefix} \
BOOST_TOOLKIT=gcc43 \
- INPUT_PLUGINS='raster,rasterlite,sqlite,osm,gdal,kismet,shape,postgis,ogr,geos,occi' \
- SYSTEM_FONTS=%{_datadir}/fonts/TTF
+ INPUT_PLUGINS='raster,rasterlite,sqlite,osm,gdal,shape,postgis,ogr,occi,csv,geojson' \
+ SYSTEM_FONTS=%{_datadir}/fonts/TTF \
+ LIBDIR_SCHEMA=%{_lib} \
+ SVG2PNG=True
%install
rm -rf $RPM_BUILD_ROOT
%scons install \
- PREFIX=%{_prefix} \
DESTDIR=$RPM_BUILD_ROOT \
- SYSTEM_FONTS=%{_datadir}/fonts/TTF
+ PREFIX=%{_prefix} \
+ BOOST_TOOLKIT=gcc43 \
+ INPUT_PLUGINS='raster,rasterlite,sqlite,osm,gdal,shape,postgis,ogr,occi,csv,geojson' \
+ SYSTEM_FONTS=%{_datadir}/fonts/TTF \
+ LIBDIR_SCHEMA=%{_lib} \
+ SVG2PNG=True
%py_ocomp $RPM_BUILD_ROOT%{py_sitedir}
%py_comp $RPM_BUILD_ROOT%{py_sitedir}
@@ -108,34 +119,35 @@ rm -rf $RPM_BUILD_ROOT
%files
%defattr(644,root,root,755)
-%doc AUTHORS CHANGELOG INSTALL README
+%doc AUTHORS.md CHANGELOG.md INSTALL.md README.md
%attr(755,root,root) %{_bindir}/mapnik-config
%attr(755,root,root) %{_bindir}/mapnik-speed-check
%attr(755,root,root) %{_bindir}/shapeindex
%attr(755,root,root) %{_bindir}/upgrade_map_xml.py
-%attr(755,root,root) %{_libdir}/libmapnik2.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libmapnik2.so.2.0
-%dir %{_libdir}/mapnik2
-%dir %{_libdir}/mapnik2/input
-%attr(755,root,root) %{_libdir}/mapnik2/input/gdal.input
-%attr(755,root,root) %{_libdir}/mapnik2/input/geos.input
-%attr(755,root,root) %{_libdir}/mapnik2/input/kismet.input
-%attr(755,root,root) %{_libdir}/mapnik2/input/ogr.input
-%attr(755,root,root) %{_libdir}/mapnik2/input/osm.input
-%attr(755,root,root) %{_libdir}/mapnik2/input/postgis.input
-%attr(755,root,root) %{_libdir}/mapnik2/input/raster.input
-%attr(755,root,root) %{_libdir}/mapnik2/input/shape.input
-%attr(755,root,root) %{_libdir}/mapnik2/input/sqlite.input
+%attr(755,root,root) %{_libdir}/libmapnik.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libmapnik.so.2.2
+%dir %{_libdir}/mapnik
+%dir %{_libdir}/mapnik/input
+%attr(755,root,root) %{_libdir}/mapnik/input/csv.input
+%attr(755,root,root) %{_libdir}/mapnik/input/gdal.input
+%attr(755,root,root) %{_libdir}/mapnik/input/geojson.input
+%attr(755,root,root) %{_libdir}/mapnik/input/ogr.input
+%attr(755,root,root) %{_libdir}/mapnik/input/osm.input
+%attr(755,root,root) %{_libdir}/mapnik/input/postgis.input
+%attr(755,root,root) %{_libdir}/mapnik/input/raster.input
+%attr(755,root,root) %{_libdir}/mapnik/input/rasterlite.input
+%attr(755,root,root) %{_libdir}/mapnik/input/shape.input
+%attr(755,root,root) %{_libdir}/mapnik/input/sqlite.input
%files devel
%defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/libmapnik2.so
+%attr(755,root,root) %{_libdir}/libmapnik.so
%{_includedir}/mapnik
%files -n python-%{name}
%defattr(644,root,root,755)
+%dir %{py_sitedir}/mapnik
+%{py_sitedir}/mapnik/*.py[co]
+%attr(755,root,root) %{py_sitedir}/mapnik/_mapnik.so
%dir %{py_sitedir}/mapnik2
%{py_sitedir}/mapnik2/*.py[co]
-%attr(755,root,root) %{py_sitedir}/mapnik2/_mapnik2.so
-%dir %{py_sitedir}/mapnik2/ogcserver
-%{py_sitedir}/mapnik2/ogcserver/*.py[co]
diff --git a/mapnik-boost-megadiff.diff b/mapnik-boost-megadiff.diff
new file mode 100644
index 0000000..3064c19
--- /dev/null
+++ b/mapnik-boost-megadiff.diff
@@ -0,0 +1,1040 @@
+diff --git a/SConstruct b/SConstruct
+index 4bd700e..6aefc58 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1431,7 +1431,7 @@ if not preconfigured:
+ env["CAIRO_ALL_LIBS"] = ['cairo']
+ if env['RUNTIME_LINK'] == 'static':
+ env["CAIRO_ALL_LIBS"].extend(
+- ['pixman-1','expat','fontconfig','iconv']
++ ['pixman-1','expat','iconv']
+ )
+ # todo - run actual checkLib?
+ env['HAS_CAIRO'] = True
+diff --git a/include/mapnik/css_color_grammar.hpp b/include/mapnik/css_color_grammar.hpp
+index a15f0fa..e20bdb2 100644
+--- a/include/mapnik/css_color_grammar.hpp
++++ b/include/mapnik/css_color_grammar.hpp
+@@ -125,7 +125,11 @@ struct alpha_conv_impl
+
+ struct hsl_conv_impl
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template<typename T>
++#else
+ template<typename T0,typename T1, typename T2, typename T3>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -413,7 +417,11 @@ struct alpha_conv_impl
+
+ struct hsl_conv_impl
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template<typename T>
++#else
+ template<typename T0,typename T1, typename T2, typename T3>
++#endif
+ struct result
+ {
+ typedef void type;
+diff --git a/include/mapnik/expression_grammar.hpp b/include/mapnik/expression_grammar.hpp
+index ed4a430..0b48924 100644
+--- a/include/mapnik/expression_grammar.hpp
++++ b/include/mapnik/expression_grammar.hpp
+@@ -65,7 +65,11 @@ struct unicode_impl
+
+ struct regex_match_impl
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T>
++#else
+ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef expr_node type;
+@@ -82,7 +86,11 @@ struct regex_match_impl
+
+ struct regex_replace_impl
+ {
+- template <typename T0, typename T1, typename T2>
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T>
++#else
++ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef expr_node type;
+diff --git a/include/mapnik/expression_grammar_impl.hpp b/include/mapnik/expression_grammar_impl.hpp
+index 5ca2c5e..2255d48 100644
+--- a/include/mapnik/expression_grammar_impl.hpp
++++ b/include/mapnik/expression_grammar_impl.hpp
+@@ -145,7 +145,7 @@ expression_grammar<Iterator>::expression_grammar(mapnik::transcoder const& tr)
+ multiplicative_expr = unary_expr [_val = _1]
+ >> *( '*' >> unary_expr [_val *= _1]
+ | '/' >> unary_expr [_val /= _1]
+- | '%' >> unary_expr [_val %= _1]
++ | '%' >> unary_expr [_val %= construct<mapnik::expr_node>(_1)] //needed by clang++ with -std=c++11
+ | regex_match_expr[_val = regex_match_(_val, _1)]
+ | regex_replace_expr(_val) [_val = _1]
+ )
+diff --git a/include/mapnik/json/feature_grammar.hpp b/include/mapnik/json/feature_grammar.hpp
+index a117b53..6a4a087 100644
+--- a/include/mapnik/json/feature_grammar.hpp
++++ b/include/mapnik/json/feature_grammar.hpp
+@@ -66,6 +66,30 @@ class attribute_value_visitor
+ mapnik::transcoder const& tr_;
+ };
+
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++struct put_property
++{
++ typedef void result_type;
++ explicit put_property(mapnik::transcoder const& tr)
++ : tr_(tr) {}
++ template <typename T0,typename T1, typename T2>
++ result_type operator() (T0 & feature, T1 const& key, T2 const& val) const
++ {
++ feature.put_new(key, boost::apply_visitor(attribute_value_visitor(tr_),val));
++ }
++ mapnik::transcoder const& tr_;
++};
++
++struct extract_geometry
++{
++ typedef boost::ptr_vector<mapnik::geometry_type>& result_type;
++ template <typename T>
++ result_type operator() (T & feature) const
++ {
++ return feature.paths();
++ }
++};
++#else
+ struct put_property
+ {
+ template <typename T0,typename T1, typename T2>
+@@ -100,6 +124,7 @@ struct extract_geometry
+ return feature.paths();
+ }
+ };
++#endif
+
+ template <typename Iterator, typename FeatureType>
+ struct feature_grammar :
+diff --git a/include/mapnik/json/geometry_generator_grammar.hpp b/include/mapnik/json/geometry_generator_grammar.hpp
+index 47974c2..2c21bab 100644
+--- a/include/mapnik/json/geometry_generator_grammar.hpp
++++ b/include/mapnik/json/geometry_generator_grammar.hpp
+@@ -38,11 +38,8 @@
+ #include <boost/spirit/include/phoenix_fusion.hpp>
+ #include <boost/spirit/include/phoenix_function.hpp>
+ #include <boost/spirit/include/phoenix_statement.hpp>
+-#include <boost/fusion/include/boost_tuple.hpp>
+-#include <boost/math/special_functions/trunc.hpp> // trunc to avoid needing C++11
+-
+-
+-//#define BOOST_SPIRIT_USE_PHOENIX_V3 1
++#include <boost/fusion/adapted/boost_tuple.hpp>
++#include <boost/math/special_functions/trunc.hpp> // for vc++ and android whose c++11 libs lack std::trunct
+
+ namespace boost { namespace spirit { namespace traits {
+
+@@ -61,6 +58,68 @@ namespace phoenix = boost::phoenix;
+
+ namespace {
+
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++struct get_type
++{
++ typedef int result_type;
++ result_type operator() (geometry_type const& geom) const
++ {
++ return static_cast<int>(geom.type());
++ }
++};
++
++struct get_first
++{
++ typedef geometry_type::value_type const result_type;
++ result_type operator() (geometry_type const& geom) const
++ {
++ geometry_type::value_type coord;
++ boost::get<0>(coord) = geom.vertex(0,&boost::get<1>(coord),&boost::get<2>(coord));
++ return coord;
++ }
++};
++
++struct multi_geometry_type
++{
++ typedef boost::tuple<unsigned,bool> result_type;
++ result_type operator() (geometry_container const& geom) const
++ {
++ unsigned type = 0u;
++ bool collection = false;
++
++ geometry_container::const_iterator itr = geom.begin();
++ geometry_container::const_iterator end = geom.end();
++
++ for ( ; itr != end; ++itr)
++ {
++ if (type != 0u && itr->type() != type)
++ {
++ collection = true;
++ break;
++ }
++ type = itr->type();
++ }
++ if (geom.size() > 1) type +=3;
++ return boost::tuple<unsigned,bool>(type, collection);
++ }
++};
++
++struct not_empty
++{
++ typedef bool result_type;
++ result_type operator() (geometry_container const& cont) const
++ {
++ geometry_container::const_iterator itr = cont.begin();
++ geometry_container::const_iterator end = cont.end();
++ for ( ; itr != end; ++itr)
++ {
++ if (itr->size() > 0) return true;
++ }
++ return false;
++ }
++};
++
++#else
+ struct get_type
+ {
+ template <typename T>
+@@ -100,7 +159,7 @@ struct multi_geometry_type
+
+ for ( ; itr != end; ++itr)
+ {
+- if (type != 0u && itr->type() != type)
++ if (type != 0u && static_cast<unsigned>(itr->type()) != type)
+ {
+ collection = true;
+ break;
+@@ -113,6 +172,28 @@ struct multi_geometry_type
+ };
+
+
++struct not_empty
++{
++ template <typename T>
++ struct result { typedef bool type; };
++
++ bool operator() (geometry_container const& cont) const
++ {
++ geometry_container::const_iterator itr = cont.begin();
++ geometry_container::const_iterator end = cont.end();
++
++ for (; itr!=end; ++itr)
++ {
++ if (itr->size() > 0) return true;
++ }
++ return false;
++ }
++};
++
++
++#endif
++
++
+ template <typename T>
+ struct json_coordinate_policy : karma::real_policies<T>
+ {
+@@ -123,7 +204,7 @@ struct json_coordinate_policy : karma::real_policies<T>
+ {
+ if (n == 0.0) return 0;
+ using namespace boost::spirit;
+- return static_cast<unsigned>(15 - boost::math::trunc(log10(traits::get_absolute_value(n))));
++ return static_cast<unsigned>(14 - boost::math::trunc(log10(traits::get_absolute_value(n))));
+ }
+
+ template <typename OutputIterator>
+@@ -135,7 +216,7 @@ struct json_coordinate_policy : karma::real_policies<T>
+
+ template <typename OutputIterator>
+ static bool fraction_part(OutputIterator& sink, T n
+- , unsigned adjprec, unsigned precision)
++ , unsigned adjprec, unsigned precision)
+ {
+ if (n == 0) return true;
+ return base_type::fraction_part(sink, n, adjprec, precision);
+@@ -153,6 +234,7 @@ struct geometry_generator_grammar :
+ : geometry_generator_grammar::base_type(coordinates)
+ {
+ using boost::spirit::karma::uint_;
++ using boost::spirit::bool_;
+ using boost::spirit::karma::_val;
+ using boost::spirit::karma::_1;
+ using boost::spirit::karma::lit;
+@@ -182,15 +264,15 @@ struct geometry_generator_grammar :
+ point_coord = &uint_
+ << lit('[')
+ << coord_type << lit(',') << coord_type
+- << lit("]")
++ << lit(']')
+ ;
+
+ polygon_coord %= ( &uint_(mapnik::SEG_MOVETO) << eps[_r1 += 1]
+- << karma::string[ if_ (_r1 > 1) [_1 = "],["]
+- .else_[_1 = '[' ]] | &uint_ << lit(','))
+- << lit('[') << coord_type
+- << lit(',')
+- << coord_type << lit(']')
++ << karma::string[ if_ (_r1 > 1u) [_1 = "],["]
++ .else_[_1 = '[' ]]
++ |
++ &uint_(mapnik::SEG_LINETO)
++ << lit(',')) << lit('[') << coord_type << lit(',') << coord_type << lit(']')
+ ;
+
+ coords2 %= *polygon_coord(_a)
+@@ -205,7 +287,6 @@ struct geometry_generator_grammar :
+ karma::rule<OutputIterator, geometry_type const& ()> point;
+ karma::rule<OutputIterator, geometry_type const& ()> linestring;
+ karma::rule<OutputIterator, geometry_type const& ()> polygon;
+-
+ karma::rule<OutputIterator, geometry_type const& ()> coords;
+ karma::rule<OutputIterator, karma::locals<unsigned>, geometry_type const& ()> coords2;
+ karma::rule<OutputIterator, geometry_type::value_type ()> point_coord;
+@@ -235,6 +316,7 @@ struct multi_geometry_generator_grammar :
+ using boost::spirit::karma::_1;
+ using boost::spirit::karma::_a;
+ using boost::spirit::karma::_r1;
++ using boost::spirit::bool_;
+
+ geometry_types.add
+ (mapnik::Point,"\"Point\"")
+@@ -245,7 +327,7 @@ struct multi_geometry_generator_grammar :
+ (mapnik::Polygon + 3,"\"MultiPolygon\"")
+ ;
+
+- start %= ( eps(phoenix::at_c<1>(_a))[_a = _multi_type(_val)]
++ start %= ( eps(phoenix::at_c<1>(_a))[_a = multi_type_(_val)]
+ << lit("{\"type\":\"GeometryCollection\",\"geometries\":[")
+ << geometry_collection << lit("]}")
+ |
+@@ -255,13 +337,13 @@ struct multi_geometry_generator_grammar :
+ geometry_collection = -(geometry2 % lit(','))
+ ;
+
+- geometry = (lit("{\"type\":")
+- << geometry_types[_1 = phoenix::at_c<0>(_a)][_a = _multi_type(_val)]
+- << lit(",\"coordinates\":")
+- << karma::string[ if_ (phoenix::at_c<0>(_a) > 3) [_1 = '[']]
+- << coordinates
+- << karma::string[ if_ (phoenix::at_c<0>(_a) > 3) [_1 = ']']]
+- << lit('}')) | lit("null")
++ geometry = ( &bool_(true)[_1 = not_empty_(_val)] << lit("{\"type\":")
++ << geometry_types[_1 = phoenix::at_c<0>(_a)][_a = multi_type_(_val)]
++ << lit(",\"coordinates\":")
++ << karma::string[ phoenix::if_ (phoenix::at_c<0>(_a) > 3u) [_1 = '['].else_[_1 = ""]]
++ << coordinates
++ << karma::string[ phoenix::if_ (phoenix::at_c<0>(_a) > 3u) [_1 = ']'].else_[_1 = ""]]
++ << lit('}')) | lit("null")
+ ;
+
+ geometry2 = lit("{\"type\":")
+@@ -287,8 +369,9 @@ struct multi_geometry_generator_grammar :
+ karma::rule<OutputIterator, geometry_container const&()> coordinates;
+ geometry_generator_grammar<OutputIterator> path;
+ // phoenix
+- phoenix::function<multi_geometry_type> _multi_type;
++ phoenix::function<multi_geometry_type> multi_type_;
+ phoenix::function<get_type > type_;
++ phoenix::function<not_empty> not_empty_;
+ // symbols table
+ karma::symbols<unsigned, char const*> geometry_types;
+ };
+diff --git a/include/mapnik/json/geometry_grammar.hpp b/include/mapnik/json/geometry_grammar.hpp
+index 9600b41..157d0e6 100644
+--- a/include/mapnik/json/geometry_grammar.hpp
++++ b/include/mapnik/json/geometry_grammar.hpp
+@@ -37,6 +37,58 @@ namespace qi = boost::spirit::qi;
+ namespace standard_wide = boost::spirit::standard_wide;
+ using standard_wide::space_type;
+
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++struct push_vertex
++{
++ typedef void result_type;
++
++ template <typename T0,typename T1, typename T2, typename T3>
++ result_type operator() (T0 c, T1 path, T2 x, T3 y) const
++ {
++ BOOST_ASSERT( path!=0 );
++ path->push_vertex(x,y,c);
++ }
++};
++
++struct close_path
++{
++ typedef void result_type;
++
++ template <typename T>
++ result_type operator() (T path) const
++ {
++ BOOST_ASSERT( path!=0 );
++ if (path->size() > 2u) // to form a polygon ring we need at least 3 vertices
++ {
++ path->close_path();
++ }
++ }
++};
++
++struct cleanup
++{
++ typedef void result_type;
++ template <typename T0>
++ void operator() (T0 & path) const
++ {
++ if (path) delete path, path=0;
++ }
++};
++
++struct where_message
++{
++ typedef std::string result_type;
++
++ template <typename Iterator>
++ std::string operator() (Iterator first, Iterator last, std::size_t size) const
++ {
++ std::string str(first, last);
++ if (str.length() > size)
++ return str.substr(0, size) + "..." ;
++ return str;
++ }
++};
++#else
+ struct push_vertex
+ {
+ template <typename T0,typename T1, typename T2, typename T3>
+@@ -65,8 +117,11 @@ struct close_path
+ void operator() (T path) const
+ {
+ BOOST_ASSERT( path!=0 );
+- path->close_path();
+- }
++ if (path->size() > 2u) // to form a polygon ring we need at least 3 vertices
++ {
++ path->close_path();
++ }
++ }
+ };
+
+ struct cleanup
+@@ -101,12 +156,13 @@ struct where_message
+ return str;
+ }
+ };
++#endif
+
+
+ template <typename Iterator>
+ struct geometry_grammar :
+ qi::grammar<Iterator,qi::locals<int>, void(boost::ptr_vector<mapnik::geometry_type>& )
+- , space_type>
++ , space_type>
+ {
+ geometry_grammar();
+ qi::rule<Iterator, qi::locals<int>, void(boost::ptr_vector<mapnik::geometry_type>& ),space_type> geometry;
+diff --git a/include/mapnik/svg/svg_path_commands.hpp b/include/mapnik/svg/svg_path_commands.hpp
+index e45b5b1..ba631ed 100644
+--- a/include/mapnik/svg/svg_path_commands.hpp
++++ b/include/mapnik/svg/svg_path_commands.hpp
+@@ -45,7 +45,12 @@ inline double deg2rad(double deg)
+ template <typename PathType>
+ struct move_to
+ {
++
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -66,7 +71,11 @@ struct move_to
+ template <typename PathType>
+ struct hline_to
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -88,7 +97,11 @@ struct hline_to
+ template <typename PathType>
+ struct vline_to
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -109,7 +122,11 @@ struct vline_to
+ template <typename PathType>
+ struct line_to
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -131,7 +148,11 @@ struct line_to
+ template <typename PathType>
+ struct curve4
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1, typename T2, typename T3>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -156,7 +177,11 @@ struct curve4
+ template <typename PathType>
+ struct curve4_smooth
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1, typename T2>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -178,7 +203,11 @@ struct curve4_smooth
+ template <typename PathType>
+ struct curve3
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1, typename T2>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -201,7 +230,11 @@ struct curve3
+ template <typename PathType>
+ struct curve3_smooth
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -223,7 +256,11 @@ struct curve3_smooth
+ template <typename PathType>
+ struct arc_to
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
++#endif
+ struct result
+ {
+ typedef void type;
+diff --git a/include/mapnik/svg/svg_transform_grammar.hpp b/include/mapnik/svg/svg_transform_grammar.hpp
+index 087bab3..a63884b 100644
+--- a/include/mapnik/svg/svg_transform_grammar.hpp
++++ b/include/mapnik/svg/svg_transform_grammar.hpp
+@@ -50,7 +50,11 @@ namespace mapnik { namespace svg {
+ template <typename TransformType>
+ struct process_matrix
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -70,7 +74,11 @@ namespace mapnik { namespace svg {
+ template <typename TransformType>
+ struct process_rotate
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1, typename T2>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -101,7 +109,11 @@ namespace mapnik { namespace svg {
+ template <typename TransformType>
+ struct process_translate
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -123,7 +135,11 @@ namespace mapnik { namespace svg {
+ template <typename TransformType>
+ struct process_scale
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef void type;
+@@ -146,7 +162,11 @@ namespace mapnik { namespace svg {
+ template <typename TransformType>
+ struct process_skew
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T0>
++#else
+ template <typename T0, typename T1>
++#endif
+ struct result
+ {
+ typedef void type;
+diff --git a/include/mapnik/util/geometry_svg_generator.hpp b/include/mapnik/util/geometry_svg_generator.hpp
+index 0705210..210a376 100644
+--- a/include/mapnik/util/geometry_svg_generator.hpp
++++ b/include/mapnik/util/geometry_svg_generator.hpp
+@@ -23,6 +23,7 @@
+ #ifndef MAPNIK_GEOMETRY_SVG_GENERATOR_HPP
+ #define MAPNIK_GEOMETRY_SVG_GENERATOR_HPP
+
++
+ // mapnik
+ #include <mapnik/global.hpp>
+ #include <mapnik/geometry.hpp> // for container stuff
+@@ -41,13 +42,11 @@
+ #include <boost/fusion/include/boost_tuple.hpp>
+ #include <boost/type_traits/remove_pointer.hpp>
+
+-//#define BOOST_SPIRIT_USE_PHOENIX_V3 1
+
+-/*!
+- * adapted to conform to the concepts
+- * required by Karma to be recognized as a container of
+- * attributes for output generation.
+- */
++// adapted to conform to the concepts
++// required by Karma to be recognized as a container of
++// attributes for output generation.
++
+ namespace boost { namespace spirit { namespace traits {
+
+ // TODO - this needs to be made generic to any path type
+@@ -76,7 +75,7 @@ template <>
+ struct end_container<path_type const>
+ {
+ static mapnik::util::path_iterator<path_type>
+- call (path_type const& g)
++ call (path_type const& /*g*/)
+ {
+ return mapnik::util::path_iterator<path_type>();
+ }
+@@ -92,6 +91,31 @@ namespace mapnik { namespace util {
+
+ namespace svg_detail {
+
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename Geometry>
++ struct get_type
++ {
++ typedef int result_type;
++ result_type operator() (Geometry const& geom) const
++ {
++ return static_cast<int>(geom.type());
++ }
++ };
++
++ template <typename T>
++ struct get_first
++ {
++ typedef T geometry_type;
++ typedef typename geometry_type::value_type const result_type;
++ result_type operator() (geometry_type const& geom) const
++ {
++ typename geometry_type::value_type coord;
++ geom.rewind(0);
++ boost::get<0>(coord) = geom.vertex(&boost::get<1>(coord),&boost::get<2>(coord));
++ return coord;
++ }
++ };
++#else
+ template <typename Geometry>
+ struct get_type
+ {
+@@ -112,7 +136,7 @@ namespace mapnik { namespace util {
+ template <typename U>
+ struct result { typedef typename geometry_type::value_type const type; };
+
+- typename geometry_type::value_type const operator() (geometry_type const& geom) const
++ typename geometry_type::value_type operator() (geometry_type const& geom) const
+ {
+ typename geometry_type::value_type coord;
+ geom.rewind(0);
+@@ -121,12 +145,13 @@ namespace mapnik { namespace util {
+ }
+ };
+
++#endif
+ template <typename T>
+ struct coordinate_policy : karma::real_policies<T>
+ {
+ typedef boost::spirit::karma::real_policies<T> base_type;
+ static int floatfield(T n) { return base_type::fmtflags::fixed; }
+- static unsigned precision(T n) { return 6u ;}
++ static unsigned precision(T n) { return 4u ;}
+ };
+ }
+
+@@ -161,15 +186,15 @@ namespace mapnik { namespace util {
+ ;
+
+ linestring = &uint_(mapnik::LineString)[_1 = _type(_val)]
+- << svg_path << lit('\"')
++ << lit("d=\"") << svg_path << lit("\"")
+ ;
+
+ polygon = &uint_(mapnik::Polygon)[_1 = _type(_val)]
+- << svg_path << lit('\"')
++ << lit("d=\"") << svg_path << lit("\"")
+ ;
+
+- svg_path %= ((&uint_(mapnik::SEG_MOVETO) << lit("d=\"") << lit('M')
+- | &uint_(mapnik::SEG_LINETO) [_a +=1] << karma::string [if_(_a == 1) [_1 = "L" ] ])
++ svg_path %= ((&uint_(mapnik::SEG_MOVETO) << lit('M')
++ | &uint_(mapnik::SEG_LINETO) [_a +=1] << karma::string [if_(_a == 1u) [_1 = "L" ].else_[_1 =""]])
+ << lit(' ') << coordinate << lit(' ') << coordinate) % lit(' ')
+ ;
+
+diff --git a/include/mapnik/util/geometry_wkt_generator.hpp b/include/mapnik/util/geometry_wkt_generator.hpp
+index 79f9fe1..ee6e2d1 100644
+--- a/include/mapnik/util/geometry_wkt_generator.hpp
++++ b/include/mapnik/util/geometry_wkt_generator.hpp
+@@ -40,7 +40,6 @@
+ #include <boost/type_traits/remove_pointer.hpp>
+
+ #include <boost/math/special_functions/trunc.hpp> // trunc to avoid needing C++11
+-//#define BOOST_SPIRIT_USE_PHOENIX_V3 1
+
+ namespace boost { namespace spirit { namespace traits {
+
+@@ -205,8 +204,7 @@ template <typename OutputIterator, typename GeometryContainer>
+ struct wkt_multi_generator :
+ karma::grammar<OutputIterator, karma::locals< boost::tuple<unsigned,bool> >, GeometryContainer const& ()>
+ {
+- typedef GeometryContainer geometry_contaner;
+- typedef boost::remove_pointer<typename geometry_container::value_type>::type geometry_type;
++ typedef typename boost::remove_pointer<typename GeometryContainer::value_type>::type geometry_type;
+
+ wkt_multi_generator();
+ // rules
+diff --git a/include/mapnik/wkt/wkt_grammar.hpp b/include/mapnik/wkt/wkt_grammar.hpp
+index e7e986f..ff233d6 100644
+--- a/include/mapnik/wkt/wkt_grammar.hpp
++++ b/include/mapnik/wkt/wkt_grammar.hpp
+@@ -40,12 +40,15 @@
+ namespace mapnik { namespace wkt {
+
+ using namespace boost::spirit;
+- using namespace boost::fusion;
+ using namespace boost::phoenix;
+
+ struct push_vertex
+ {
++#ifdef BOOST_SPIRIT_USE_PHOENIX_V3
++ template <typename T>
++#else
+ template <typename T0,typename T1, typename T2, typename T3>
++#endif
+ struct result
+ {
+ typedef void type;
+diff --git a/src/json/feature_collection_parser.cpp b/src/json/feature_collection_parser.cpp
+index 0e1ce12..e4f65d8 100644
+--- a/src/json/feature_collection_parser.cpp
++++ b/src/json/feature_collection_parser.cpp
+@@ -23,8 +23,10 @@
+ // TODO https://github.com/mapnik/mapnik/issues/1658
+ #include <boost/version.hpp>
+ #if BOOST_VERSION >= 105200
++#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
+ #define BOOST_SPIRIT_USE_PHOENIX_V3
+ #endif
++#endif
+
+ // mapnik
+ #include <mapnik/json/feature_collection_parser.hpp>
+diff --git a/plugins/input/geojson/geojson_datasource.cpp b/plugins/input/geojson/geojson_datasource.cpp
+index dd5e167..7072a27 100644
+--- a/plugins/input/geojson/geojson_datasource.cpp
++++ b/plugins/input/geojson/geojson_datasource.cpp
+@@ -32,10 +32,6 @@
+ #include <boost/algorithm/string.hpp>
+ #include <boost/spirit/include/support_multi_pass.hpp>
+ #include <boost/foreach.hpp>
+-#include <boost/geometry/geometries/box.hpp>
+-#include <boost/geometry/geometries/geometries.hpp>
+-#include <boost/geometry.hpp>
+-#include <boost/geometry/extensions/index/rtree/rtree.hpp>
+
+ // mapnik
+ #include <mapnik/unicode.hpp>
+@@ -101,7 +97,11 @@ geojson_datasource::geojson_datasource(parameters const& params)
+ extent_(),
+ tr_(new mapnik::transcoder(*params.get<std::string>("encoding","utf-8"))),
+ features_(),
++#if BOOST_VERSION >= 105600
++ tree_()
++#else
+ tree_(16,1)
++#endif
+ {
+ if (file_.empty()) throw mapnik::datasource_exception("GeoJSON Plugin: missing <file> parameter");
+
+@@ -139,9 +139,9 @@ geojson_datasource::geojson_datasource(parameters const& params)
+
+ bool first = true;
+ std::size_t count=0;
+- BOOST_FOREACH (mapnik::feature_ptr f, features_)
++ BOOST_FOREACH (mapnik::feature_ptr const& f, features_)
+ {
+- mapnik::box2d<double> const& box = f->envelope();
++ mapnik::box2d<double> box = f->envelope();
+ if (first)
+ {
+ extent_ = box;
+@@ -158,7 +158,11 @@ geojson_datasource::geojson_datasource(parameters const& params)
+ {
+ extent_.expand_to_include(box);
+ }
+- tree_.insert(box_type(point_type(box.minx(),box.miny()),point_type(box.maxx(),box.maxy())), count++);
++#if BOOST_VERSION >= 105600
++ tree_.insert(std::make_pair(box_type(point_type(box.minx(),box.miny()),point_type(box.maxx(),box.maxy())),count++));
++#else
++ tree_.insert(box_type(point_type(box.minx(),box.miny()),point_type(box.maxx(),box.maxy())),count++);
++#endif
+ }
+ }
+
+@@ -213,7 +217,11 @@ mapnik::featureset_ptr geojson_datasource::features(mapnik::query const& q) cons
+ if (extent_.intersects(b))
+ {
+ box_type box(point_type(b.minx(),b.miny()),point_type(b.maxx(),b.maxy()));
++#if BOOST_VERSION >= 105600
++ tree_.query(boost::geometry::index::intersects(box),std::back_inserter(index_array_));
++#else
+ index_array_ = tree_.find(box);
++#endif
+ return boost::make_shared<geojson_featureset>(features_, index_array_.begin(), index_array_.end());
+ }
+ // otherwise return an empty featureset pointer
+diff --git a/plugins/input/geojson/geojson_datasource.hpp b/plugins/input/geojson/geojson_datasource.hpp
+index 7cad44b..c02827b 100644
+--- a/plugins/input/geojson/geojson_datasource.hpp
++++ b/plugins/input/geojson/geojson_datasource.hpp
+@@ -36,11 +36,16 @@
+ // boost
+ #include <boost/optional.hpp>
+ #include <boost/shared_ptr.hpp>
+-#include <boost/geometry/geometries/box.hpp>
+ #include <boost/geometry/geometries/point_xy.hpp>
+-#include <boost/geometry/algorithms/area.hpp>
++#include <boost/geometry/geometries/box.hpp>
+ #include <boost/geometry/geometries/geometries.hpp>
++#include <boost/geometry.hpp>
++#include <boost/version.hpp>
++#if BOOST_VERSION >= 105600
++#include <boost/geometry/index/rtree.hpp>
++#else
+ #include <boost/geometry/extensions/index/rtree/rtree.hpp>
++#endif
+
+ // stl
+ #include <vector>
+@@ -53,7 +58,14 @@ class geojson_datasource : public mapnik::datasource
+ public:
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::box<point_type> box_type;
++#if BOOST_VERSION >= 105600
++ typedef std::pair<box_type,std::size_t> item_type;
++ typedef boost::geometry::index::linear<16,1> linear_type;
++ typedef boost::geometry::index::rtree<item_type,linear_type> spatial_index_type;
++#else
++ typedef std::size_t item_type;
+ typedef boost::geometry::index::rtree<box_type,std::size_t> spatial_index_type;
++#endif
+
+ // constructor
+ geojson_datasource(mapnik::parameters const& params);
+@@ -74,7 +86,7 @@ class geojson_datasource : public mapnik::datasource
+ boost::shared_ptr<mapnik::transcoder> tr_;
+ std::vector<mapnik::feature_ptr> features_;
+ spatial_index_type tree_;
+- mutable std::deque<std::size_t> index_array_;
++ mutable std::deque<item_type> index_array_;
+ };
+
+
+diff --git a/plugins/input/geojson/geojson_featureset.cpp b/plugins/input/geojson/geojson_featureset.cpp
+index f6d45a9..93233ec 100644
+--- a/plugins/input/geojson/geojson_featureset.cpp
++++ b/plugins/input/geojson/geojson_featureset.cpp
+@@ -30,8 +30,8 @@
+ #include "geojson_featureset.hpp"
+
+ geojson_featureset::geojson_featureset(std::vector<mapnik::feature_ptr> const& features,
+- std::deque<std::size_t>::const_iterator index_itr,
+- std::deque<std::size_t>::const_iterator index_end)
++ array_type::const_iterator index_itr,
++ array_type::const_iterator index_end)
+ : features_(features),
+ index_itr_(index_itr),
+ index_end_(index_end) {}
+@@ -42,7 +42,12 @@ mapnik::feature_ptr geojson_featureset::next()
+ {
+ if (index_itr_ != index_end_)
+ {
+- std::size_t index = *index_itr_++;
++#if BOOST_VERSION >= 105600
++ geojson_datasource::item_type const& item = *index_itr_++;
++ std::size_t index = item.second;
++#else
++ std::size_t const& index = *index_itr_++;
++#endif
+ if ( index < features_.size())
+ {
+ return features_.at(index);
+diff --git a/plugins/input/geojson/geojson_featureset.hpp b/plugins/input/geojson/geojson_featureset.hpp
+index f8b37d6..fd68e7d 100644
+--- a/plugins/input/geojson/geojson_featureset.hpp
++++ b/plugins/input/geojson/geojson_featureset.hpp
+@@ -11,17 +11,18 @@
+ class geojson_featureset : public mapnik::Featureset
+ {
+ public:
++ typedef std::deque<geojson_datasource::item_type> array_type;
+ geojson_featureset(std::vector<mapnik::feature_ptr> const& features,
+- std::deque<std::size_t>::const_iterator index_itr,
+- std::deque<std::size_t>::const_iterator index_end);
++ array_type::const_iterator index_itr,
++ array_type::const_iterator index_end);
+ virtual ~geojson_featureset();
+ mapnik::feature_ptr next();
+
+ private:
+ mapnik::box2d<double> box_;
+ std::vector<mapnik::feature_ptr> const& features_;
+- std::deque<std::size_t>::const_iterator index_itr_;
+- std::deque<std::size_t>::const_iterator index_end_;
++ array_type::const_iterator index_itr_;
++ array_type::const_iterator index_end_;
+ };
+
+ #endif // GEOJSON_FEATURESET_HPP
+diff --git a/src/save_map.cpp b/src/save_map.cpp
+index edfa029..bee0cc8 100644
+--- a/src/save_map.cpp
++++ b/src/save_map.cpp
+@@ -42,6 +42,7 @@
+ // boost
+ #include <boost/algorithm/string.hpp>
+ #include <boost/optional.hpp>
++#include <boost/version.hpp>
+ #include <boost/property_tree/ptree.hpp>
+ #include <boost/property_tree/xml_parser.hpp>
+
+@@ -869,7 +870,11 @@ void save_map(Map const & map, std::string const& filename, bool explicit_defaul
+ {
+ ptree pt;
+ serialize_map(pt,map,explicit_defaults);
++#if BOOST_VERSION >= 105600
++ write_xml(filename,pt,std::locale(),boost::property_tree::xml_writer_make_settings<ptree::key_type>(' ',4));
++#else
+ write_xml(filename,pt,std::locale(),boost::property_tree::xml_writer_make_settings(' ',4));
++#endif
+ }
+
+ std::string save_map_to_string(Map const & map, bool explicit_defaults)
+@@ -877,7 +882,11 @@ std::string save_map_to_string(Map const & map, bool explicit_defaults)
+ ptree pt;
+ serialize_map(pt,map,explicit_defaults);
+ std::ostringstream ss;
++#if BOOST_VERSION >= 105600
++ write_xml(ss,pt,boost::property_tree::xml_writer_make_settings<ptree::key_type>(' ',4));
++#else
+ write_xml(ss,pt,boost::property_tree::xml_writer_make_settings(' ',4));
++#endif
+ return ss.str();
+ }
+
+diff --git a/SConstruct b/SConstruct
+index de9ea89..4bd700e 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -1623,6 +1623,15 @@ if not preconfigured:
+ debug_defines = ['-DDEBUG', '-DMAPNIK_DEBUG']
+ ndebug_defines = ['-DNDEBUG']
+
++ boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
++ if boost_version_from_header > 53 or 'c++11' in env['CUSTOM_CXXFLAGS']:
++ env.Append(CPPDEFINES = '-DBOOST_SPIRIT_USE_PHOENIX_V3=1')
++ # - workaround boost gil channel_algorithm.hpp narrowing error
++ # TODO - remove when building against >= 1.55
++ # https://github.com/mapnik/mapnik/issues/1970
++ if 'clang++' in env['CXX']:
++ env.Append(CXXFLAGS = '-Wno-c++11-narrowing')
++
+ # Enable logging in debug mode (always) and release mode (when specified)
+ if env['DEFAULT_LOG_SEVERITY']:
+ if env['DEFAULT_LOG_SEVERITY'] not in severities:
+diff --git a/include/mapnik/marker.hpp b/include/mapnik/marker.hpp
+index 568f565..9c8c0e4 100644
+--- a/include/mapnik/marker.hpp
++++ b/include/mapnik/marker.hpp
+@@ -124,12 +124,12 @@ class marker: private mapnik::noncopyable
+
+ inline bool is_bitmap() const
+ {
+- return bitmap_data_;
++ return bitmap_data_ ? true : false;
+ }
+
+ inline bool is_vector() const
+ {
+- return vector_data_;
++ return vector_data_ ? true : false;
+ }
+
+ boost::optional<mapnik::image_ptr> get_bitmap_data() const
diff --git a/mapnik-build.patch b/mapnik-build.patch
new file mode 100644
index 0000000..dcf278d
--- /dev/null
+++ b/mapnik-build.patch
@@ -0,0 +1,11 @@
+--- mapnik-2.2.0/src/build.py~ 2013-06-04 03:28:47.000000000 +0200
++++ mapnik-2.2.0/src/build.py 2014-11-10 11:37:08.355377411 +0100
+@@ -59,6 +59,8 @@
+ # clear out and re-set libs for this env
+ lib_env['LIBS'] = ['freetype','z',env['ICU_LIB_NAME'],filesystem,system,regex]
+
++lib_env['LIBS'].append('dl')
++
+ if env['PROJ']:
+ lib_env['LIBS'].append('proj')
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/mapnik.git/commitdiff/eaba878b4045052f4ec37d379e7d3adb6875b2b4
More information about the pld-cvs-commit
mailing list