hal icon indicating copy to clipboard operation
hal copied to clipboard

incompatible with igraph 1.0.0

Open dotlambda opened this issue 3 months ago • 4 comments

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));
      |                        ^~~

dotlambda avatar Sep 24 '25 10:09 dotlambda

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

szhorvat avatar Sep 25 '25 09:09 szhorvat

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).

joern274 avatar Sep 25 '25 09:09 joern274

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.

szhorvat avatar Sep 25 '25 12:09 szhorvat

Sounds promising

joern274 avatar Sep 25 '25 13:09 joern274