Problems with boost 1.76.0
Not sure, if this a fixable in a proper way but I want to mention it.
When using graph-tool as a C++ library, there is a problem with boost 1.76 and include order.
I have created a minimal problem to demonstrate the problem (the example is not runnable, it has nothing to do with python, etc. It's just for demonstrating a compilation warning):
main.cc
#include <boost/graph/filtered_graph.hpp>
#include <graph_tool.hh>
int main() {}
meson.build
project('graph-tool-test', 'cpp',
version : '0.1',
default_options : ['warning_level=3', 'cpp_std=c++14'])
py3_mod = import('python')
py3_inst = py3_mod.find_installation('python3', modules: ['pydot', 'graph_tool'])
graph_tool_dep = dependency('graph-tool-py' + py3_inst.language_version(), include_type: 'system')
executable('graph-tool-test',
'main.cc',
dependencies: graph_tool_dep)
Building:
$ meson build; cd build; ninja -v
The Meson build system
Version: 0.58.1
Source dir: /home/ci3nt/test/graph-tool-test
Build dir: /home/ci3nt/test/graph-tool-test/build
Build type: native build
Project name: graph-tool-test
Project version: 0.1
C++ compiler for the host machine: ccache c++ (gcc 10.3.0 "c++ (Gentoo 10.3.0 p1) 10.3.0")
C++ linker for the host machine: c++ ld.bfd 2.34
Host machine cpu family: x86_64
Host machine cpu: x86_64
Program python3 (pydot, graph_tool) found: YES (/usr/bin/python3) modules: pydot, graph_tool
Found pkg-config: /usr/bin/pkg-config (0.29.2)
Run-time dependency graph-tool-py3.9 found: YES 2.37
Build targets in project: 1
Found ninja-1.10.1 at /usr/bin/ninja
[1/2] ccache c++ -Igraph-tool-test.p -I. -I.. -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -Wpedantic -std=c++14 -g -pthread -isystem/usr/lib/python3.9/site-packages/graph_tool/include -isystem/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround -isystem/usr/lib/python3.9/site-packages/graph_tool/include/pcg-cpp -isystem/usr/lib/python3.9/site-packages/cairo/include -isystem/usr/include/python3.9 -isystem/usr/lib/python3.9/site-packages/numpy/core/include -MD -MQ graph-tool-test.p/main.cc.o -MF graph-tool-test.p/main.cc.o.d -o graph-tool-test.p/main.cc.o -c ../main.cc
FAILED: graph-tool-test.p/main.cc.o
ccache c++ -Igraph-tool-test.p -I. -I.. -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -Wpedantic -std=c++14 -g -pthread -isystem/usr/lib/python3.9/site-packages/graph_tool/include -isystem/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround -isystem/usr/lib/python3.9/site-packages/graph_tool/include/pcg-cpp -isystem/usr/lib/python3.9/site-packages/cairo/include -isystem/usr/include/python3.9 -isystem/usr/lib/python3.9/site-packages/numpy/core/include -MD -MQ graph-tool-test.p/main.cc.o -MF graph-tool-test.p/main.cc.o.d -o graph-tool-test.p/main.cc.o -c ../main.cc
In Datei, eingebunden von /usr/include/boost/graph/filtered_graph.hpp:15,
von ../main.cc:1:
/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround/boost/graph/adjacency_iterator.hpp:48:33: Fehler: »iterator_traits« in Namensraum »boost::detail« bezeichnet keinen Templatetyp
48 | typename boost::detail::iterator_traits< OutEdgeIter >::difference_type
| ^~~~~~~~~~~~~~~
/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround/boost/graph/adjacency_iterator.hpp:48:48: Fehler: expected unqualified-id before »<« token
48 | typename boost::detail::iterator_traits< OutEdgeIter >::difference_type
| ^
/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround/boost/graph/adjacency_iterator.hpp:52:61: Fehler: »difference_type« wurde in diesem Gültigkeitsbereich nicht definiert
52 | typedef adjacency_iterator< Graph, Vertex, OutEdgeIter, difference_type >
| ^~~~~~~~~~~~~~~
/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround/boost/graph/adjacency_iterator.hpp:52:77: Fehler: Templateargument 4 ist ungültig
52 | typedef adjacency_iterator< Graph, Vertex, OutEdgeIter, difference_type >
| ^
/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround/boost/graph/adjacency_iterator.hpp:84:33: Fehler: »iterator_traits« in Namensraum »boost::detail« bezeichnet keinen Templatetyp
84 | typename boost::detail::iterator_traits< InEdgeIter >::difference_type
| ^~~~~~~~~~~~~~~
/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround/boost/graph/adjacency_iterator.hpp:84:48: Fehler: expected unqualified-id before »<« token
84 | typename boost::detail::iterator_traits< InEdgeIter >::difference_type
| ^
/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround/boost/graph/adjacency_iterator.hpp:88:64: Fehler: »difference_type« wurde in diesem Gültigkeitsbereich nicht definiert
88 | typedef inv_adjacency_iterator< Graph, Vertex, InEdgeIter, difference_type >
| ^~~~~~~~~~~~~~~
/usr/lib/python3.9/site-packages/graph_tool/include/boost-workaround/boost/graph/adjacency_iterator.hpp:88:80: Fehler: Templateargument 4 ist ungültig
88 | typedef inv_adjacency_iterator< Graph, Vertex, InEdgeIter, difference_type >
| ^
ninja: build stopped: subcommand failed.
When switching both of the include lines, the example compiles well.
Is this, because boost already loads the boost::detail namespace and this won't work anymore?