WCDH: Issue a better message for version compatibility.
Project: Separate simulated compiler id from version detection.
Project: Add configurable name for version computation macros.
Add basic Android platform module

Create a Platform/Android module that includes Platform/Linux since
Android is based on Linux.  Provide only the minimal settings needed to
get builds with Android NDK toolchains to work.

Disable use of RPATH since the Android loader ignores it and we cannot
predict the install destination anyway.

Android supports soname but shared library names must end in ".so" and
we cannot represent the versioned names with associated symlinks on all
host operating systems anyway.  However, we do want the SONAME of
library files to be set so that linking to them by path to the library
file produces NEEDED entries with the soname and not the path.  Add a
new CMAKE_PLATFORM_NO_VERSIONED_SONAME setting to tell the
cmTarget::GetLibraryNames method that not to use the VERSION or
SOVERSION target properties in the soname.
CMake 3.0.0
VS: Refactor flag table lookup

In cmVisualStudio10TargetGenerator, convert the static functions
currently used to lookup the flag table for each tool into class
methods.  This avoids passing the this->LocalGenerator member and
gives the methods access to other information that may be useful
in the future.
VS: Fix vcxproj elements specifying binary output locations

Fix generation of OutDir, IntDir, TargetName, and TargetExt element
values to encode the values for XML.
VS: Fix vcxproj specification of empty output file extension

When a binary output file is to have no extension, the TargetExt
element in the vcxproj cannot be left empty because VS will choose
a default extension.  Instead use "." because the Windows filesystem
will treat that as an empty extension.
VS: Refactor internal generator factory logic

Consume the space before the platform name as soon as possible
instead of including it in the comparison.
VS: Remove always-true condition on compile options block

The cmVisualStudio10TargetGenerator::ComputeClOptions method is
only called when the target type compiles, so do not duplicate
that check in the implementation.
VS: Set some options directly instead of using flag map

Instead of passing /TC, /TP, and /STACK: as strings to be parsed through
the flag map, directly set the results in the options map.
VS: Re-order logic to group MS-tool-specific options together
VS: Factor MS-tool-specific vcxproj settings into helper

Factor a WriteMSToolConfigurationValues helper method out of the
cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues method
to isolate the configuration settings specific to MS tools.
regex: Use static regexs where possible

Rather than declaring and compiling a constant regex every time a chunk
of code is executed, build the regex once.
regex: Search on strings where possible
cmTarget: Remove an unused variable
cmDefinitions: Don't store parent lookups

When looking up scopes, it is faster to not store the lookup locally to
keep the maps smaller and avoid extra allocations and rebalancing.
cmDefinitions: Avoid a find-then-insert when setting variables

Searching the map is not necessary.
cmDefinitions: Use a hashmap for faster checks

The hash map is much faster at checking that the map won't have what
we're looking for so that we can just go to the parent scope instead.
cmake: Do not open directories as scripts (#14966)

Check if a file path is a directory before opening it.  Extend the
RunCMake.CommandLine test with a case running "cmake -P" on a directory.