GUI refactoring: #include dependences between source subdirectories should form a directed acyclic graph

As explained orally on May 7:

To inspect #include dependences, run cd build; cmake .. -DALLCONFIG=ON; make doxylong; point browser to .../build/html/long/index.html; goto Files > File List > GUI to see directory dependence graph.

Development cycle here: Start from fresh commit, move files and update #include statements, rerun cmake ..; make doxylong, inspect in browser. Depending on outcome, do git stash or git commit. Proceed with next action. No need to compile and test after each move action.

Only before submitting a merge request, build and run ctest. Also, before submitting a MR, run clang-format -i ˋfchˋ which will alphabetically reorder all include directives.

Main activities to disentangle directories:

  • move files around
  • split directories
  • create new directories
  • rename directories, and possibly files, to make intent clearer
  • move function out of class to an algorithm source file in a higher-level directory
  • move function A::f(B..) into B::f(A..)

Note that forward declarations won't help: They break dependences for the .h, but not for the .cpp files.

I don't expect a full solution at once. Every MR that somehow simplifies the graph is welcome.

Edited by t.knopff