Re: changes that span multiple repositories, I have had similar experiences to @bretbrownjr. Is there any interest in creating a beman.superbuild project that builds everything in beman using a single top-level project with the individual beman projects as sub-projects? In the past I’ve used mr to implement a solution like this. The workflow is pretty straightforward.
% git clone <super-build-url>
...
% mr clone
....
% cmake -S . -B build
...
% cmake --build build
My experience has been that when the projects all follow the same conventions, it’s straightforward to make building specific targets, executing specific tests, etc intuitive. For example, when building a super-build:
% cmake --build build --target tests # runs all tests in all projects
% cmake --build build --target <subproject>.tests # runs only the tests for <subproject>
The nice thing about this is that the individual project builds can define the same set of test targets (in other words, provide the same build interface), with the only difference being that in the case of an individual project build the two commands above are semantically equivalent (i.e. they both run the tests for only that project).
Another nice thing about this approach is that we can use project-scope variables in such a way that, when not defined, they inherit their values from super-build scope variables. For example, if we have a subproject <X>, the variable BEMAN_<X>_BUILD_TESTS, if not explicitly defined, would inherit the value of BEMAN_BUILD_TESTS. This allows us to easily configure all projects in the super-build to build tests like so.
cmake -S . -B build -DBEMAN_BUILD_TESTS=ON
And it preserves granular control of individual projects. For example, we can build tests for all projects except Y using the following command.
cmake -S . -B build -DBEMAN_BUILD_TESTS=ON -DBEMAN_<Y>_BUILD_TESTS=OFF`
This is the approach I had in mind when I submitted this PR to introduce config-file package creation to the exemplar.