Check*CompilerFlag: make C and CXX modules share most error patterns (#14339)

This simplifies maintenance as most patterns will be for both modules and may
be added at a central place.

While at it add error patterns for XL and BCC.
CMakeDetermineCompilerId: Fix local var init

Add initialization of the ARCHITECTURE_ID local and fix the
initialization of the COMPILER_ID_TWICE local.
CMakeDetermineCompilerId: Add notion of "simulated" id/version

Some compilers try to simulate other compilers as a drop-in replacement
supporting all the same command-line options and predefined preprocessor
macros.  In such cases it will be useful to have CMake load the compiler
information files for the simulated compiler instead of duplicating the
information.  Teach CMakeDetermineCompilerId to extract the simulated
compiler id and version when the compiler id detection provides it.
Clang: Support Windows variants for GNU and MSVC (#13035, #14458)

Teach the compiler identification preprocessor tests to report when
Clang simulates MSVC, and what version.  If not MSVC, assume GNU.

Teach compiler information modules Clang-(C|CXX) to recognize when Clang
simulates MSVC and skip loading the GNU information.

Teach the Windows-MSVC platform information to recognize when it is
loaded as the simulated compiler and use that version information
instead of the real compiler's (different) version scheme.

Add platform modules Windows-Clang-(C|CXX) and support module
Windows-Clang to load either Windows-MSVC or Windows-GNU and wrap
the corresponding information macros.
Add the INTERFACE_LIBRARY target type.

This target type only contains INTERFACE_* properties, so it can be
used as a structural node. The target-specific commands enforce
that they may only be used with the INTERFACE keyword when used
with INTERFACE_LIBRARY targets. The old-style target properties
matching LINK_INTERFACE_LIBRARIES_<CONFIG> are always ignored for
this target type.

The name of the INTERFACE_LIBRARY must match a validity generator
expression. The validity is similar to that of an ALIAS target,
but with the additional restriction that it may not contain
double colons. Double colons will carry the meaning of IMPORTED
or ALIAS targets in CMake 2.8.13.

An ALIAS target may be created for an INTERFACE library.

At this point it can not be exported and does not appear in the
buildsystem and project files are not created for them. That may
be added as a feature in a later commit.

The generators need some changes to handle the INTERFACE_LIBRARY
targets returned by cmComputeLinkInterface::GetItems. The Ninja
generator does not use that API, so it doesn't require changes
related to that.
export: Add policy CMP0024 to disallow include() of export files

Currently, export() is executed at configure-time.

One problem with this is that certain exported properties like
the link interface may not be complete at the point the export() is
encountered leading to an incorrect or incomplete exported
representation. Additionally, the generated IMPORTED_LOCATION
property may even be incorrect if commands following the export()
have an effect on it.

Another problem is that it requires the C++ implementation of cmake
to be capable of computing the exported information at configure time.
This is a limitation on the cleanup and maintenance of the code. At
some point in the future, this limitation will be dropped and more
implementation will be moved from cmTarget to cmGeneratorTarget.
export: Add support for INTERFACE_LIBRARY targets
install: Teach EXPORT option to handle INTERFACE_LIBRARY targets
FindGTK2: Mark GTK_*_INCLUDE_DIR as advanced
FindGTK2: Find freetype quietly
FindGTK2: Search for modules quietly when needed
CMake Nightly Date Stamp
curl: Fix typo in header include guard

From clang's -Wheader-guard.
cmNewLineStyle: Remove useless semi-colon

Warned by clang.
cmGraphVizWriter: Add extra space in comment to suppress warning

Clang's -Wdocumentation thought it was malformed doxygen.
Fix warnings about \brief usage

A doxygen \brief is ended with a newline, so remove a newline right
after \brief to fix clang -Wdocumentation warning.
cmTarget: Properly escape @ char in doxygen comments

Found by clang's -Wdocumentation.
cm*Lexer: Populate empty doxygen @param comment

And in one case fixed wrong param name.
Warned by clang -Wdocumentation.
cmDocumentation: Fix a few doxygen comment errors

Warned by clang -Wdocumentation
curl, bzip2: Suppress warnings by setting initial value

Silence clang -Wsometimes-uninitialized warnings.