This is particularly fun when relative paths are embedded in SRCS, like
lib/libclang_rt does (which I argue is ripe for corruption via parallel
builds).
Add GCNOS{GRP,MODE,OWN} for parity with FILES{GRP,MODE,OWN}. The defaults are
based on BIN{GRP,MODE,OWN}.
GCNOSDIRMODE is added, strictly for configurability, if need be.
Try to install them instead of the .gcda's, since the .gcda's likely won't exist.
TODO: verify that installworld does indeed do the right thing.
Ref: gcc(1) -ftest-coverage description; --coverage (option in use) is an alias
for -fprofile-arcs -ftest-coverage
The logic wasn't using a filtered version of SRCS -- it was using the
unfiltered version. This was causing some hilarity with unnecessary
dependencies, like headers and the like in lib/libc/... .
Also use .pico with bsd.lib.mk, not .o -- .o doesn't use SHARED_C*FLAGS,
which doesn't contain _COV_FLAG, which means that the .gcda's would have
relied on objects that didn't build them as a side-effect.
.gcda files should be installed, not .gcno files. It's easier to
formulate which .gcda's to install based on the SRCS and their
extension in bsd.{lib,prog}.mk .
Pass through appropriate objects via COV_OBJS in bsd.lib.mk (based on
SOBJS), and appropriate objects via bsd.prog.mk (OBJS).
While here, do more intelligent things in terms of iterating over COV_OBJS,
building lists of items to install with the GCNOS variable/adding GCNOS to
FILESGROUPS, etc. This reduces the 2 unrolled .for loops into 1.