Merge branch 'revise-compiler-id-policies' into release

This commit is contained in:
Brad King 2014-04-02 14:54:17 -04:00
commit 97243c22b2
7 changed files with 82 additions and 26 deletions

View File

@ -131,6 +131,7 @@ Variables that Change Behavior
/variable/CMAKE_MODULE_PATH /variable/CMAKE_MODULE_PATH
/variable/CMAKE_NOT_USING_CONFIG_FLAGS /variable/CMAKE_NOT_USING_CONFIG_FLAGS
/variable/CMAKE_POLICY_DEFAULT_CMPNNNN /variable/CMAKE_POLICY_DEFAULT_CMPNNNN
/variable/CMAKE_POLICY_WARNING_CMPNNNN
/variable/CMAKE_PREFIX_PATH /variable/CMAKE_PREFIX_PATH
/variable/CMAKE_PROGRAM_PATH /variable/CMAKE_PROGRAM_PATH
/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE /variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE

View File

@ -1,21 +1,27 @@
CMP0025 CMP0025
------- -------
Compiler id for Apple Clang is now AppleClang. Compiler id for Apple Clang is now ``AppleClang``.
CMake >= 3.0 recognize that Apple Clang is a different compiler CMake 3.0 and above recognize that Apple Clang is a different compiler
than upstream Clang and that they have different version numbers. than upstream Clang and that they have different version numbers.
CMake now prefers to present this to projects by setting CMake now prefers to present this to projects by setting the
CMAKE_<LANG>_COMPILER_ID to "AppleClang" instead of "Clang". However, :variable:`CMAKE_<LANG>_COMPILER_ID` variable to ``AppleClang`` instead
existing projects may assume the compiler id for Apple Clang is just of ``Clang``. However, existing projects may assume the compiler id for
"Clang" as it was in CMake < 3.0. Therefore this policy determines Apple Clang is just ``Clang`` as it was in CMake versions prior to 3.0.
for Apple Clang which compiler id to report in Therefore this policy determines for Apple Clang which compiler id to
CMAKE_<LANG>_COMPILER_ID after <LANG> is enabled by the project() or report in the :variable:`CMAKE_<LANG>_COMPILER_ID` variable after
enable_language() command. language ``<LANG>`` is enabled by the :command:`project` or
:command:`enable_language` command. The policy must be set prior
to the invocation of either command.
The OLD behavior for this policy is to use compiler id "Clang". The The OLD behavior for this policy is to use compiler id ``Clang``. The
NEW behavior for this policy is to use compiler id "AppleClang". NEW behavior for this policy is to use compiler id ``AppleClang``.
This policy was introduced in CMake version 3.0. CMake version This policy was introduced in CMake version 3.0. Use the
|release| warns when the policy is not set and uses OLD behavior. Use :command:`cmake_policy` command to set this policy to OLD or NEW explicitly.
the cmake_policy command to set it to OLD or NEW explicitly. Unlike most policies, CMake version |release| does *not* warn
by default when this policy is not set and simply uses OLD behavior.
See documentation of the
:variable:`CMAKE_POLICY_WARNING_CMP0025 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
variable to control the warning.

View File

@ -1,16 +1,28 @@
CMP0047 CMP0047
------- -------
Use QCC compiler id for the qcc drivers on QNX. Use ``QCC`` compiler id for the qcc drivers on QNX.
CMake 2.8.12 and lower assigned the QNX qcc and QCC compiler drivers the "GNU" CMake 3.0 and above recognize that the QNX qcc compiler driver is
compiler id. different from the GNU compiler.
CMake now prefers to present this to projects by setting the
:variable:`CMAKE_<LANG>_COMPILER_ID` variable to ``QCC`` instead
of ``GNU``. However, existing projects may assume the compiler id for
QNX qcc is just ``GNU`` as it was in CMake versions prior to 3.0.
Therefore this policy determines for QNX qcc which compiler id to
report in the :variable:`CMAKE_<LANG>_COMPILER_ID` variable after
language ``<LANG>`` is enabled by the :command:`project` or
:command:`enable_language` command. The policy must be set prior
to the invocation of either command.
The OLD behavior for this policy is to use the "GNU" compiler id for the qcc The OLD behavior for this policy is to use the ``GNU`` compiler id
and QCC compiler drivers. The NEW behavior for this policy is to use the "QCC" for the qcc and QCC compiler drivers. The NEW behavior for this policy
compiler id for those drivers. is to use the ``QCC`` compiler id for those drivers.
This policy was introduced in CMake version 3.0. This policy was introduced in CMake version 3.0. Use the
CMake version |release| warns when the policy is not set and uses :command:`cmake_policy` command to set this policy to OLD or NEW explicitly.
OLD behavior. Use the cmake_policy command to set it to OLD or Unlike most policies, CMake version |release| does *not* warn
NEW explicitly. by default when this policy is not set and simply uses OLD behavior.
See documentation of the
:variable:`CMAKE_POLICY_WARNING_CMP0047 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
variable to control the warning.

View File

@ -0,0 +1,17 @@
CMAKE_POLICY_WARNING_CMP<NNNN>
------------------------------
Explicitly enable or disable the warning when CMake Policy ``CMP<NNNN>``
is not set. This is meaningful only for the few policies that do not
warn by default:
* ``CMAKE_POLICY_WARNING_CMP0025`` controls the warning for
policy :policy:`CMP0025`.
* ``CMAKE_POLICY_WARNING_CMP0047`` controls the warning for
policy :policy:`CMP0047`.
This variable should not be set by a project in CMake code. Project
developers running CMake may set this variable in their cache to
enable the warning (e.g. ``-DCMAKE_POLICY_WARNING_CMP<NNNN>=ON``).
Alternatively, running :manual:`cmake(1)` with the ``--debug-output``
or ``--trace`` option will also enable the warning.

View File

@ -759,7 +759,8 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
switch(mf->GetPolicyStatus(cmPolicies::CMP0025)) switch(mf->GetPolicyStatus(cmPolicies::CMP0025))
{ {
case cmPolicies::WARN: case cmPolicies::WARN:
if(!this->CMakeInstance->GetIsInTryCompile()) if(!this->CMakeInstance->GetIsInTryCompile() &&
mf->PolicyOptionalWarningEnabled("CMAKE_POLICY_WARNING_CMP0025"))
{ {
cmOStringStream w; cmOStringStream w;
w << policies->GetPolicyWarning(cmPolicies::CMP0025) << "\n" w << policies->GetPolicyWarning(cmPolicies::CMP0025) << "\n"
@ -790,7 +791,8 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
switch(mf->GetPolicyStatus(cmPolicies::CMP0047)) switch(mf->GetPolicyStatus(cmPolicies::CMP0047))
{ {
case cmPolicies::WARN: case cmPolicies::WARN:
if(!this->CMakeInstance->GetIsInTryCompile()) if(!this->CMakeInstance->GetIsInTryCompile() &&
mf->PolicyOptionalWarningEnabled("CMAKE_POLICY_WARNING_CMP0047"))
{ {
cmOStringStream w; cmOStringStream w;
w << policies->GetPolicyWarning(cmPolicies::CMP0047) << "\n" w << policies->GetPolicyWarning(cmPolicies::CMP0047) << "\n"

View File

@ -4350,6 +4350,22 @@ cmMakefile::GetPolicyStatusInternal(cmPolicies::PolicyID id) const
return this->GetPolicies()->GetPolicyStatus(id); return this->GetPolicies()->GetPolicyStatus(id);
} }
//----------------------------------------------------------------------------
bool cmMakefile::PolicyOptionalWarningEnabled(std::string const& var)
{
// Check for an explicit CMAKE_POLICY_WARNING_CMP<NNNN> setting.
if(!var.empty())
{
if(const char* val = this->GetDefinition(var.c_str()))
{
return cmSystemTools::IsOn(val);
}
}
// Enable optional policy warnings with --debug-output or --trace.
cmake* cm = this->GetCMakeInstance();
return cm->GetDebugOutput() || cm->GetTrace();
}
bool cmMakefile::SetPolicy(const char *id, bool cmMakefile::SetPolicy(const char *id,
cmPolicies::PolicyStatus status) cmPolicies::PolicyStatus status)
{ {

View File

@ -875,6 +875,8 @@ public:
std::set<cmStdString> const & GetSystemIncludeDirectories() const std::set<cmStdString> const & GetSystemIncludeDirectories() const
{ return this->SystemIncludeDirectories; } { return this->SystemIncludeDirectories; }
bool PolicyOptionalWarningEnabled(std::string const& var);
protected: protected:
// add link libraries and directories to the target // add link libraries and directories to the target
void AddGlobalLinkInformation(const char* name, cmTarget& target); void AddGlobalLinkInformation(const char* name, cmTarget& target);