Windows-GNU: Support duplicate object names in large archives (#14874)

Since commit v2.6.0~388 (Added build rule variables
CMAKE_<LANG>_ARCHIVE_..., 2008-01-29) we use separate "ar cr ..." and
"ar r ..." steps to incrementally add a large list of object files to an
archive.  Since the "r" command replaces existing objects of the same
name in an archive, if multiple objects have the same file name and
appear in separate append steps then one overwrites the other.  Instead,
use "ar cq ..." and "ar q ..." to always append to the archive.

We already remove the archive before creating it so this will not cause
objects to be appended to existing archives on incremental rebuilds.
Merge topic 'mingw-archive-no-replace' into next

39d0ade0 Windows-GNU: Support duplicate object names in large archives (#14874)
cmELF: use more portable type
Merge topic 'openbsd-sign-warning' into next

0c04b78b cmELF: use more portable type
cmELF: fix signedness warning on OpenBSD

OpenBSD defines Elf64_Dyn::d_tag to be of an unsigned type, which differs from
what most other platforms do and what is the case for 32 bit. To have the tag
as unsigned makes sense, but this causes a compilation warning:

/.../CMake/Source/cmELF.cxx: In member function 'const cmELF::StringEntry* cmELFInternalImpl<Types>::GetDynamicSectionString(int) [with Types = cmELFTypes64]':
/.../CMake/Source/cmELF.cxx:945:   instantiated from here
/.../CMake/Source/cmELF.cxx:668: warning: comparison between signed and unsigned integer expressions

Add an explicit typedef to cast the value to for 32 and 64 bit. That type is
unsigned and has the proper length for both platforms so no information is
lost. Explicitely cast both arguments before comparing them to avoid the
warning in all situations.
Merge topic 'openbsd-sign-warning' into next

3022f2a1 cmELF: fix signedness warning on OpenBSD