C: c_library_archive_products

When set to False in an environment, libraries built therein will be
linked into their users as bags of object files instead of static
archives.  (When missing, the key is treated as True, so the behavior of
existing builds will not change.)

In an ideal world, this wouldn't change anything.  After all, a static
archive *is* a bag of object files.

However, it changes the link-time semantics significantly.

First: it improves detection of duplicate symbols.  Because static
archives are searched for *undefined* symbols only, if a link process
has defined a symbol S and an archive *also* defines symbol S, the one
that appeared *second* is silently ignored.  Sometimes this is what you
want -- sometimes it results in a nondeterministic build.

Second: it alters the way that sections are pulled into the output
binary.  For reasons I don't completely understand, the data sections in
an object file in an archive are not included unless at least one text
section fulfills an undefined symbol in the link process.  To get around
this, I routinely have to set the 'whole_archive' attribute on libraries
that contain important data tables -- particularly, the vector table.
Linking as a bag of objects makes 'whole_archive' unnecessary for
pulling in such sections.

c_library_archive_products was originally available in cobble2, but was
lost in the cobble3/cobble4 rewrites.  The syntax and semantics here are
unchanged from cobble2.