FILE_SET include directory manipulation

I don’t disagree, but this is a slow migration to CMake from a custom build system which made heavy use of Git submodules. It also made a point of not separating headers from sources, but instead grouped headers and sources into “libraries”. That is, a typical structure would be:

project/
|- Makefile
|- project.mk
|- libraries/
|  |- foo/
|  |  |- module.mk
|  |  |- foo1.h
|  |  |- foo1.cpp
|  |  |- foo2.h
|  |  |- foo2.cpp
|  |- bar/
|  |  |- module.mk
|  |  |- bar1.h
|  |  |- bar1.cpp
|  |  |- bar2.h
|  |  |- bar2.cpp
|- programs/
|  |- tools/
|  |  |- module.mk
|  |  |- tool1.cpp
|  |  |- tool2.cpp
|  |- utils/
|  |  |- module.mk
|  |  |- util1.cpp
|  |  |- util2.cpp

When one of the “libraries” (like foo or bar) got too big or needed to be used somewhere else, it would just get pulled out into its own repository and added to project/libraries/ as a (Git) submodule. Of course, that meant that now all of the headers and sources needed to be at top level of the new Git repository, since it had just been a subdirectory of a larger project.

EDIT: And, of course, it didn’t have a separate build tree, so object files would get scattered across all of those directories!

EDIT2: Even further, the old build system didn’t even have installing headers as an option – of course you would always build everything from scratch every time!