incompatible with igraph 1.0.0
Igraph just published version 1.0.0 which breaks HAL:
FAILED: [code=1] plugins/graph_algorithm/CMakeFiles/graph_algorithm.dir/src/algorithms/shortest_path.cpp.o
/nix/store/95k9rsn1zsw1yvir8mj824ldhf90i4qw-gcc-wrapper-14.3.0/bin/g++ -DFMT_SHARED -DSPDLOG_COMPILED_LIB -DSPDLOG_FMT_EXTERNAL -DSPDLOG_SHARED_LIB -Dgraph_algorithm_EXPORTS -I/build/source/include -I/build/source/hal_plugins -I/build/source/plugins -I/build/source/build -I/build/source/plugins/graph_algorithm/include -I/build/source/plugins/graph_algorithm/nix/store/pj1yh79gyhk2sva0kc2g8v608vpsk6v8-igraph-1.0.0-dev/include/igraph -I/build/source/deps/abc/src -isystem /build/source/deps/subprocess -isystem /nix/store/829wb290i87wngxlh404klwxql5v18p4-python3-3.13.7/include/python3.13 -fopenmp -pthread -O3 -DNDEBUG -std=gnu++17 -fPIC -O3 -DNDEBUG -Wall -Wextra -pedantic -Wshadow -Wno-undef -Werror=return-type -fdiagnostics-color=always -fsized-deallocation -Wno-unused-function -Wno-write-strings -Wno-sign-compare -DABC_USE_STDINT_H=1 -DABC_USE_CUDD=1 -DABC_USE_PTHREADS -Wno-unused-but-set-variable -w -MD -MT plugins/graph_algorithm/CMakeFiles/graph_algorithm.dir/src/algorithms/shortest_path.cpp.o -MF plugins/graph_algorithm/CMakeFiles/graph_algorithm.dir/src/algorithms/shortest_path.cpp.o.d -o plugins/graph_algorithm/CMakeFiles/graph_algorithm.dir/src/algorithms/shortest_path.cpp.o -c /build/source/plugins/graph_algorithm/src/algorithms/shortest_path.cpp
/build/source/plugins/graph_algorithm/src/algorithms/shortest_path.cpp: In function 'hal::Result<std::vector<std::vector<unsigned int> > > hal::graph_algorithm::get_shortest_paths_igraph(NetlistGraph*, u32, const igraph_vector_int_t*, NetlistGraph::Direction)':
/build/source/plugins/graph_algorithm/src/algorithms/shortest_path.cpp:125:74: error: cannot convert 'igraph_vector_int_list_t*' to 'const igraph_vector_t*'
125 | if (auto res = igraph_get_shortest_paths(graph->get_graph(), &paths_raw, nullptr, from_vertex, v_sel, mode, nullptr, nullptr); res != IGRAPH_SUCCESS)
| ^~~~~~~~~~
| |
| igraph_vector_int_list_t*
In file included from /nix/store/pj1yh79gyhk2sva0kc2g8v608vpsk6v8-igraph-1.0.0-dev/include/igraph/igraph.h:53,
from /build/source/plugins/graph_algorithm/include/graph_algorithm/netlist_graph.h:33,
from /build/source/plugins/graph_algorithm/include/graph_algorithm/algorithms/shortest_path.h:33,
from /build/source/plugins/graph_algorithm/src/algorithms/shortest_path.cpp:1:
/nix/store/pj1yh79gyhk2sva0kc2g8v608vpsk6v8-igraph-1.0.0-dev/include/igraph/igraph_paths.h:118:51: note: initializing argument 2 of 'igraph_error_t igraph_get_shortest_paths(const igraph_t*, const igraph_vector_t*, igraph_vector_int_list_t*, igraph_vector_int_list_t*, igraph_int_t, igraph_vs_t, igraph_neimode_t, igraph_vector_int_t*, igraph_vector_int_t*)'
118 | const igraph_t *graph, const igraph_vector_t *weights,
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
In file included from /build/source/include/hal_core/netlist/boolean_function.h:30,
from /build/source/include/hal_core/netlist/gate_library/gate_type.h:28,
from /build/source/include/hal_core/netlist/gate_library/gate_library.h:29,
from /build/source/include/hal_core/netlist/netlist.h:30,
from /build/source/plugins/graph_algorithm/include/graph_algorithm/netlist_graph.h:29:
/build/source/include/hal_core/utilities/result.h:56:5: error: could not convert '{hal::result_constructor_type::ER(), <expression error>}' from '<brace-enclosed initializer list>' to 'hal::Result<std::vector<std::vector<unsigned int> > >'
56 | }
| ^
| |
| <brace-enclosed initializer list>
/build/source/plugins/graph_algorithm/src/algorithms/shortest_path.cpp:129:24: note: in expansion of macro 'ERR'
129 | return ERR(igraph_strerror(res));
| ^~~
/build/source/plugins/graph_algorithm/src/algorithms/shortest_path.cpp: In function 'hal::Result<std::vector<std::vector<unsigned int> > > hal::graph_algorithm::get_all_shortest_paths_igraph(NetlistGraph*, u32, const igraph_vector_int_t*, NetlistGraph::Direction)':
/build/source/plugins/graph_algorithm/src/algorithms/shortest_path.cpp:267:78: error: cannot convert 'igraph_vector_int_list_t*' to 'const igraph_vector_t*'
267 | if (auto res = igraph_get_all_shortest_paths(graph->get_graph(), &paths_raw, nullptr, nullptr, from_vertex, v_sel, mode); res != IGRAPH_SUCCESS)
| ^~~~~~~~~~
| |
| igraph_vector_int_list_t*
/nix/store/pj1yh79gyhk2sva0kc2g8v608vpsk6v8-igraph-1.0.0-dev/include/igraph/igraph_paths.h:173:51: note: initializing argument 2 of 'igraph_error_t igraph_get_all_shortest_paths(const igraph_t*, const igraph_vector_t*, igraph_vector_int_list_t*, igraph_vector_int_list_t*, igraph_vector_int_t*, igraph_int_t, igraph_vs_t, igraph_neimode_t)'
173 | const igraph_t *graph, const igraph_vector_t *weights,
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/build/source/include/hal_core/utilities/result.h:56:5: error: could not convert '{hal::result_constructor_type::ER(), <expression error>}' from '<brace-enclosed initializer list>' to 'hal::Result<std::vector<std::vector<unsigned int> > >'
56 | }
| ^
| |
| <brace-enclosed initializer list>
/build/source/plugins/graph_algorithm/src/algorithms/shortest_path.cpp:271:24: note: in expansion of macro 'ERR'
271 | return ERR(igraph_strerror(res));
| ^~~
Let me know if you need any help in adapting the code. The changelog has some guidance and I am still tweaking is for clarity as feedback keeps coming in:
https://github.com/igraph/igraph/blob/main/CHANGELOG.md#100
I will look into this but I guess it will take some days. Thanks for offering your support @szhorvat . To my understanding does the new igraph release not immediately break the build on supported platforms since we explicitly aim for version 0.10.x. But it would be nice to make it work for 1.0.0 user as well (while not dropping support for platforms like Ubuntu LTS which are not offering this version yet).
Most of the changes are interface related, usually triggered by adding (not removing or changing) functionality, so if you want to maintain compatibility with two versions using #ifs, that is very likely possible, just a bit annoying.
Last time you did this, many variable types changed from real to integer, which makes it unpleasant to use a solution like this. You needed to use #if both for the variable declaration and for function calls. This time it will only be function calls.
Sounds promising