mapnik / python-mapnik

Python bindings for mapnik
GNU Lesser General Public License v2.1
157 stars 91 forks source link

Boost errors compiling v3.0.x branch on OSX/Mojave #207

Open ashaw opened 5 years ago

ashaw commented 5 years ago

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
andrii-rieznik commented 5 years ago

Same issue

tilgovi commented 4 years ago

https://github.com/mapnik/mapnik/pull/4094

and-viceversa commented 4 years ago

Same issue after installing with brew mapnik 3.0.22 boost 1.72.0

snickell commented 4 years ago

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 boost@1.73, and relinked in an older version of boost that is not affected, boost@1.60:

  brew unlink boost
  brew install boost@1.60
  brew link --force boost@1.60

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 boost@1.60

  # unlink boost in case 1.7x is installed already:
  brew unlink boost 
  brew link --force boost@1.60
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