Преглед на файлове

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.
Stephen Kelly преди 10 години
родител
ревизия
06f61c26cf

+ 1 - 0
Help/manual/cmake-policies.7.rst

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

+ 17 - 0
Help/policy/CMP0059.rst

@@ -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.

+ 8 - 3
Help/prop_dir/DEFINITIONS.rst

@@ -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``.

+ 6 - 0
Help/release/dev/remove-DEFINITIONS-directory-property.rst

@@ -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`.

+ 13 - 2
Source/cmMakefile.cxx

@@ -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")
     {

+ 5 - 0
Source/cmPolicies.cxx

@@ -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()

+ 2 - 0
Source/cmPolicies.h

@@ -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.
      *

+ 1 - 0
Tests/RunCMake/CMP0059/CMP0059-NEW-result.txt

@@ -0,0 +1 @@
+0

+ 2 - 0
Tests/RunCMake/CMP0059/CMP0059-NEW-stderr.txt

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

+ 17 - 0
Tests/RunCMake/CMP0059/CMP0059-NEW.cmake

@@ -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}")

+ 1 - 0
Tests/RunCMake/CMP0059/CMP0059-OLD-result.txt

@@ -0,0 +1 @@
+0

+ 2 - 0
Tests/RunCMake/CMP0059/CMP0059-OLD-stderr.txt

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

+ 17 - 0
Tests/RunCMake/CMP0059/CMP0059-OLD.cmake

@@ -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}")

+ 1 - 0
Tests/RunCMake/CMP0059/CMP0059-WARN-result.txt

@@ -0,0 +1 @@
+0

+ 18 - 0
Tests/RunCMake/CMP0059/CMP0059-WARN-stderr.txt

@@ -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

+ 17 - 0
Tests/RunCMake/CMP0059/CMP0059-WARN.cmake

@@ -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}")

+ 3 - 0
Tests/RunCMake/CMP0059/CMakeLists.txt

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

+ 5 - 0
Tests/RunCMake/CMP0059/RunCMakeTest.cmake

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

+ 1 - 0
Tests/RunCMake/CMakeLists.txt

@@ -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()