Do not treat DEFINITIONS as a built-in directory property

Add policy CMP0059 to cover this change.  The property has been
deprecated since CMake 2.4 anyway.

This will help clean up cmMakefile -- the DefineFlagsOrig member should
not need to exist.
This commit is contained in:
Stephen Kelly 2015-04-01 20:53:31 +02:00 committed by Brad King
parent f2e07a6d90
commit 06f61c26cf
19 changed files with 137 additions and 5 deletions

View File

@ -116,3 +116,4 @@ All Policies
/policy/CMP0056
/policy/CMP0057
/policy/CMP0058
/policy/CMP0059

17
Help/policy/CMP0059.rst Normal file
View File

@ -0,0 +1,17 @@
CMP0059
-------
Don't treat ``DEFINITIONS`` as a built-in directory property.
CMake 3.3 and above no longer make a list of definitions available through
the :prop_dir:`DEFINITIONS` directory property. The
:prop_dir:`COMPILE_DEFINITIONS` directory property may be used instead.
The ``OLD`` behavior for this policy is to provide the list of flags given
so far to the :command:`add_definitions` command. The ``NEW`` behavior is
to behave as a normal user-defined directory property.
This policy was introduced in CMake version 3.3.
CMake version |release| warns when the policy is not set and uses
``OLD`` behavior. Use the :command:`cmake_policy` command to set
it to ``OLD`` or ``NEW`` explicitly.

View File

@ -1,8 +1,13 @@
DEFINITIONS
-----------
For CMake 2.4 compatibility only. Use COMPILE_DEFINITIONS instead.
For CMake 2.4 compatibility only. Use :prop_dir:`COMPILE_DEFINITIONS`
instead.
This read-only property specifies the list of flags given so far to
the add_definitions command. It is intended for debugging purposes.
Use the COMPILE_DEFINITIONS instead.
the :command:`add_definitions` command. It is intended for debugging
purposes. Use the :prop_dir:`COMPILE_DEFINITIONS` directory property
instead.
This built-in read-only property does not exist if policy
:policy:`CMP0059` is set to ``NEW``.

View File

@ -0,0 +1,6 @@
remove-DEFINITIONS-property
---------------------------
* The :command:`add_definitions()` command no longer causes a
:prop_dir:`DEFINITIONS` directory property to be populated. See policy
:policy:`CMP0059`.

View File

@ -4209,8 +4209,19 @@ const char *cmMakefile::GetProperty(const std::string& prop,
}
else if (prop == "DEFINITIONS")
{
output += this->DefineFlagsOrig;
return output.c_str();
switch(this->GetPolicyStatus(cmPolicies::CMP0059))
{
case cmPolicies::WARN:
this->IssueMessage(cmake::AUTHOR_WARNING, this->GetPolicies()->
GetPolicyWarning(cmPolicies::CMP0059));
case cmPolicies::OLD:
output += this->DefineFlagsOrig;
return output.c_str();
case cmPolicies::NEW:
case cmPolicies::REQUIRED_ALWAYS:
case cmPolicies::REQUIRED_IF_USED:
break;
}
}
else if (prop == "LINK_DIRECTORIES")
{

View File

@ -385,6 +385,11 @@ cmPolicies::cmPolicies()
CMP0058, "CMP0058",
"Ninja requires custom command byproducts to be explicit.",
3,3,0, cmPolicies::WARN);
this->DefinePolicy(
CMP0059, "CMP0059",
"Do no treat DEFINITIONS as a built-in directory property.",
3,3,0, cmPolicies::WARN);
}
cmPolicies::~cmPolicies()

View File

@ -116,6 +116,8 @@ public:
CMP0057, ///< Disallow multiple MAIN_DEPENDENCY specifications
/// for the same file.
CMP0058, ///< Ninja requires custom command byproducts to be explicit
CMP0059, ///< Do not treat ``DEFINITIONS`` as a built-in directory
/// property.
/** \brief Always the last entry.
*

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,2 @@
DEFS:
CUSTOM CONTENT:CUSTOM_CONTENT

View File

@ -0,0 +1,17 @@
cmake_policy(SET CMP0059 NEW)
add_definitions(-DSOME_DEF)
get_property(defs DIRECTORY .
PROPERTY DEFINITIONS
)
message("DEFS:${defs}")
set_property(DIRECTORY .
PROPERTY DEFINITIONS CUSTOM_CONTENT
)
get_property(content DIRECTORY .
PROPERTY DEFINITIONS
)
message("CUSTOM CONTENT:${content}")

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,2 @@
DEFS: -DSOME_DEF
CUSTOM CONTENT: -DSOME_DEF

View File

@ -0,0 +1,17 @@
cmake_policy(SET CMP0059 OLD)
add_definitions(-DSOME_DEF)
get_property(defs DIRECTORY .
PROPERTY DEFINITIONS
)
message("DEFS:${defs}")
set_property(DIRECTORY .
PROPERTY DEFINITIONS CUSTOM_CONTENT
)
get_property(content DIRECTORY .
PROPERTY DEFINITIONS
)
message("CUSTOM CONTENT:${content}")

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,18 @@
CMake Warning \(dev\) at CMP0059-WARN.cmake:6 \(get_property\):
Policy CMP0059 is not set: Do no treat DEFINITIONS as a built-in directory
property. Run "cmake --help-policy CMP0059" for policy details. Use the
cmake_policy command to set the policy and suppress this warning.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
This warning is for project developers. Use -Wno-dev to suppress it.
DEFS: -DSOME_DEF
CMake Warning \(dev\) at CMP0059-WARN.cmake:14 \(get_property\):
Policy CMP0059 is not set: Do no treat DEFINITIONS as a built-in directory
property. Run "cmake --help-policy CMP0059" for policy details. Use the
cmake_policy command to set the policy and suppress this warning.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
This warning is for project developers. Use -Wno-dev to suppress it.
CUSTOM CONTENT: -DSOME_DEF

View File

@ -0,0 +1,17 @@
add_definitions(-DSOME_DEF)
get_property(defs DIRECTORY .
PROPERTY DEFINITIONS
)
message("DEFS:${defs}")
set_property(DIRECTORY .
PROPERTY DEFINITIONS CUSTOM_CONTENT
)
get_property(content DIRECTORY .
PROPERTY DEFINITIONS
)
message("CUSTOM CONTENT:${content}")

View File

@ -0,0 +1,3 @@
cmake_minimum_required(VERSION 3.1)
project(${RunCMake_TEST} NONE)
include(${RunCMake_TEST}.cmake)

View File

@ -0,0 +1,5 @@
include(RunCMake)
run_cmake(CMP0059-OLD)
run_cmake(CMP0059-NEW)
run_cmake(CMP0059-WARN)

View File

@ -64,6 +64,7 @@ add_RunCMake_test(CMP0053)
add_RunCMake_test(CMP0054)
add_RunCMake_test(CMP0055)
add_RunCMake_test(CMP0057)
add_RunCMake_test(CMP0059)
if(CMAKE_GENERATOR STREQUAL "Ninja")
add_RunCMake_test(Ninja)
endif()