Boost errors compiling v3.0.x branch on OSX/Mojave
python3 setup.py install
Getting these errors compiling on the v3.0.x branch with Python 3.7, mapnik-config --version is 3.0.22
In file included from src/mapnik_feature.cpp:43:
In file included from /usr/local/include/mapnik/json/feature_parser.hpp:28:
In file included from /usr/local/include/mapnik/json/feature_grammar.hpp:29:
In file included from /usr/local/include/mapnik/json/geometry_grammar.hpp:29:
In file included from /usr/local/include/mapnik/json/generic_json.hpp:32:
In file included from /usr/local/opt/boost/include/boost/spirit/include/qi.hpp:16:
In file included from /usr/local/opt/boost/include/boost/spirit/home/qi.hpp:14:
In file included from /usr/local/opt/boost/include/boost/spirit/home/qi/action.hpp:14:
In file included from /usr/local/opt/boost/include/boost/spirit/home/qi/action/action.hpp:16:
In file included from /usr/local/opt/boost/include/boost/spirit/home/qi/detail/attributes.hpp:12:
/usr/local/opt/boost/include/boost/spirit/home/support/attributes.hpp:963:9: error: static_assert failed due to requirement '!is_reference<const feature_impl &>::value' "Transformed cannot be a reference type"
BOOST_STATIC_ASSERT_MSG(!is_reference<Transformed>::value,
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/opt/boost/include/boost/static_assert.hpp:31:45: note: expanded from macro 'BOOST_STATIC_ASSERT_MSG'
# define BOOST_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__)
^ ~~~~~~~~~~~
/usr/local/opt/boost/include/boost/spirit/home/karma/nonterminal/rule.hpp:293:26: note: in instantiation of template class 'boost::spirit::traits::transform_attribute<const mapnik::feature_impl, const mapnik::feature_impl &, boost::spirit::karma::domain, void>'
requested here
typename transform::type attr_ = transform::pre(attr);
^
/usr/local/opt/boost/include/boost/spirit/home/karma/reference.hpp:46:30: note: in instantiation of function template specialization 'boost::spirit::karma::rule<std::__1::back_insert_iterator<std::__1::basic_string<char> >, const mapnik::feature_impl &(),
boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type>::generate<boost::spirit::context<boost::fusion::cons<const mapnik::feature_impl &, boost::fusion::nil_>, boost::spirit::locals<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na> >, boost::spirit::unused_type, mapnik::feature_impl>' requested here
return ref.get().generate(sink, context, delim, attr);
^
/usr/local/opt/boost/include/boost/spirit/home/karma/generate.hpp:69:45: note: in instantiation of function template specialization 'boost::spirit::karma::reference<const boost::spirit::karma::rule<std::__1::back_insert_iterator<std::__1::basic_string<char> >, const
mapnik::feature_impl &(), boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >::generate<boost::spirit::karma::detail::output_iterator<std::__1::back_insert_iterator<std::__1::basic_string<char> >, mpl_::int_<15>,
boost::spirit::unused_type>, boost::spirit::context<boost::fusion::cons<const mapnik::feature_impl &, boost::fusion::nil_>, boost::spirit::locals<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na> >,
boost::spirit::unused_type, mapnik::feature_impl>' requested here
return compile<karma::domain>(expr).generate(sink, context, unused, attr);
^
/usr/local/opt/boost/include/boost/spirit/home/karma/generate.hpp:91:23: note: in instantiation of function template specialization 'boost::spirit::karma::generate<std::__1::back_insert_iterator<std::__1::basic_string<char> >, mpl_::int_<15>,
mapnik::json::feature_generator_grammar<std::__1::back_insert_iterator<std::__1::basic_string<char> >, mapnik::feature_impl>, mapnik::feature_impl>' requested here
return karma::generate(sink, expr, attr);
^
/usr/local/include/mapnik/util/feature_to_geojson.hpp:37:34: note: in instantiation of function template specialization 'boost::spirit::karma::generate<std::__1::back_insert_iterator<std::__1::basic_string<char> >,
mapnik::json::feature_generator_grammar<std::__1::back_insert_iterator<std::__1::basic_string<char> >, mapnik::feature_impl>, mapnik::feature_impl>' requested here
return boost::spirit::karma::generate(sink, grammar, feat);
^
1 error generated.
error: command 'clang++' failed with exit status 1
Same issue
https://github.com/mapnik/mapnik/pull/4094
Same issue after installing with brew
mapnik 3.0.22
boost 1.72.0
UPDATE: I now recommend building master of both mapnik and python-mapnik, its easier in the end (trust me :-P), I have an updated gist build-python-mapnik-osx.sh that does this: https://gist.github.com/snickell/ee8f3d96f11f457c30ef5416a12d625e
** THE FOLLOWING IS NOW OUTDATED, USE THE GIST ABOVE **
As a workaround, I unlinked [email protected], and relinked in an older version of boost that is not affected, [email protected]:
brew unlink boost
brew install [email protected]
brew link --force [email protected]
My build-python-mapnik.sh script might be useful to other people on OSX/Mojave:
#!/bin/bash
if [[ "$OSTYPE" == "darwin"* ]]; then
# if Mac OSX:
# Homebrew Boost >= 1.70 on MacOSX Mojave seems to be having troubkle:
# https://github.com/mapnik/python-mapnik/issues/207
brew install mapnik boost-python3 [email protected]
# unlink boost in case 1.7x is installed already:
brew unlink boost
brew link --force [email protected]
fi
git clone -b v3.0.x https://github.com/mapnik/python-mapnik
export MASON_BUILD=false
# We get Boost link errors if we don't set these explicitly
export BOOST_PYTHON_LIB=boost_python38
cd python-mapnik
git checkout v3.0.x
set -e # complain if compilation fails
python3 setup.py install
echo
echo "If you want to run the tests to verify python-mapnik:"
echo " cd python-mapnik"
echo " git submodule update --init"
echo " python3 setup.py test"
echo
echo "python-mapnik package installed, you should now be able to do:"
echo " import mapnik"
echo