فهرست منبع

Add infrastructure for policies that disallow commands

Add cmCommand::Disallowed helper to check the setting of a policy that
disallows the command.  Add a RunCMake.DisallowedCommands test
placeholder.  Add a Help/policy/DISALLOWED_COMMAND.txt file for
inclusion by each policy document to avoid duplication of the common
text.
Brad King 12 سال پیش
والد
کامیت
882c0f0b69

+ 9 - 0
Help/policy/DISALLOWED_COMMAND.txt

@@ -0,0 +1,9 @@
+CMake >= |disallowed_version| prefer that this command never be called.
+The OLD behavior for this policy is to allow the command to be called.
+The NEW behavior for this policy is to issue a FATAL_ERROR when the
+command is called.
+
+This policy was introduced in CMake version |disallowed_version|.
+CMake version |release| warns when the policy is not set and uses
+OLD behavior.  Use the cmake_policy command to set it to OLD or
+NEW explicitly.

+ 19 - 0
Source/cmCommand.h

@@ -173,6 +173,25 @@ public:
     this->Error += e;
     }
 
+  /** Check if the command is disallowed by a policy.  */
+  bool Disallowed(cmPolicies::PolicyID pol, const char* e)
+    {
+    switch(this->Makefile->GetPolicyStatus(pol))
+      {
+      case cmPolicies::WARN:
+        this->Makefile->IssueMessage(cmake::AUTHOR_WARNING,
+          this->Makefile->GetPolicies()->GetPolicyWarning(pol));
+      case cmPolicies::OLD:
+        return false;
+      case cmPolicies::REQUIRED_IF_USED:
+      case cmPolicies::REQUIRED_ALWAYS:
+      case cmPolicies::NEW:
+        this->Makefile->IssueMessage(cmake::FATAL_ERROR, e);
+        break;
+      }
+    return true;
+    }
+
 protected:
   cmMakefile* Makefile;
   cmCommandArgumentsHelper Helper;

+ 1 - 0
Tests/RunCMake/CMakeLists.txt

@@ -61,6 +61,7 @@ if(UNIX AND "${CMAKE_TEST_GENERATOR}" MATCHES "Unix Makefiles")
   add_RunCMake_test(CompilerChange)
 endif()
 add_RunCMake_test(Configure)
+add_RunCMake_test(DisallowedCommands)
 add_RunCMake_test(ExternalData)
 add_RunCMake_test(FPHSA)
 add_RunCMake_test(GeneratorExpression)

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

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

+ 8 - 0
Tests/RunCMake/DisallowedCommands/RunCMakeTest.cmake

@@ -0,0 +1,8 @@
+include(RunCMake)
+
+foreach(p
+    )
+  run_cmake(${p}-WARN)
+  run_cmake(${p}-OLD)
+  run_cmake(${p}-NEW)
+endforeach()