From a6a673979dded1cc97a76c193e29bab64b00480e Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 20 Mar 2008 18:25:59 -0400 Subject: ENH: Add "if(POLICY policy-id)" option for IF command. - This will help projects support multiple CMake versions. - In order to set a policy when using a newer CMake but still working with an older CMake one may write if(POLICY CMP1234) cmake_policy(SET CMP1234 NEW) endif(POLICY CMP1234) - Note that since CMake 2.4 does not have if(POLICY) supporting it will also require using "if(COMMAND cmake_policy)" --- Source/cmIfCommand.cxx | 17 +++++++++++++++++ Source/cmIfCommand.h | 3 +++ Tests/Complex/CMakeLists.txt | 5 +++++ Tests/ComplexOneConfig/CMakeLists.txt | 5 +++++ Tests/ComplexRelativePaths/CMakeLists.txt | 5 +++++ 5 files changed, 35 insertions(+) diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx index b39e57c..517348c 100644 --- a/Source/cmIfCommand.cxx +++ b/Source/cmIfCommand.cxx @@ -357,6 +357,23 @@ bool cmIfCommand::IsTrue(const std::vector &args, IncrementArguments(newArgs,argP1,argP2); reducible = 1; } + // does a policy exist + if (*arg == "POLICY" && argP1 != newArgs.end()) + { + cmPolicies::PolicyID pid; + if(makefile->GetPolicies()->GetPolicyID((argP1)->c_str(), pid)) + { + *arg = "1"; + } + else + { + *arg = "0"; + } + newArgs.erase(argP1); + argP1 = arg; + IncrementArguments(newArgs,argP1,argP2); + reducible = 1; + } // is a variable defined if (*arg == "DEFINED" && argP1 != newArgs.end()) { diff --git a/Source/cmIfCommand.h b/Source/cmIfCommand.h index 8576274..bdccdf3 100644 --- a/Source/cmIfCommand.h +++ b/Source/cmIfCommand.h @@ -139,6 +139,9 @@ public: " if(COMMAND command-name)\n" "True if the given name is a command, macro or function that can be " "invoked.\n" + " if(POLICY policy-id)\n" + "True if the given name is an existing policy " + "(of the form CMP).\n" " if(EXISTS file-name)\n" " if(EXISTS directory-name)\n" "True if the named file or directory exists. " diff --git a/Tests/Complex/CMakeLists.txt b/Tests/Complex/CMakeLists.txt index 5c67094..1814528 100644 --- a/Tests/Complex/CMakeLists.txt +++ b/Tests/Complex/CMakeLists.txt @@ -4,6 +4,11 @@ SET(CMAKE_BACKWARDS_COMPATIBILITY 1.4) PROJECT (Complex) +# Try setting a new policy. The IF test is for coverage. +IF(POLICY CMP0003) + CMAKE_POLICY(SET CMP0003 NEW) +ENDIF(POLICY CMP0003) + # Choose whether to test CMakeLib. SET(COMPLEX_TEST_CMAKELIB 1) IF(CMAKE_TEST_DIFFERENT_GENERATOR) diff --git a/Tests/ComplexOneConfig/CMakeLists.txt b/Tests/ComplexOneConfig/CMakeLists.txt index 5c67094..1814528 100644 --- a/Tests/ComplexOneConfig/CMakeLists.txt +++ b/Tests/ComplexOneConfig/CMakeLists.txt @@ -4,6 +4,11 @@ SET(CMAKE_BACKWARDS_COMPATIBILITY 1.4) PROJECT (Complex) +# Try setting a new policy. The IF test is for coverage. +IF(POLICY CMP0003) + CMAKE_POLICY(SET CMP0003 NEW) +ENDIF(POLICY CMP0003) + # Choose whether to test CMakeLib. SET(COMPLEX_TEST_CMAKELIB 1) IF(CMAKE_TEST_DIFFERENT_GENERATOR) diff --git a/Tests/ComplexRelativePaths/CMakeLists.txt b/Tests/ComplexRelativePaths/CMakeLists.txt index 5c67094..1814528 100644 --- a/Tests/ComplexRelativePaths/CMakeLists.txt +++ b/Tests/ComplexRelativePaths/CMakeLists.txt @@ -4,6 +4,11 @@ SET(CMAKE_BACKWARDS_COMPATIBILITY 1.4) PROJECT (Complex) +# Try setting a new policy. The IF test is for coverage. +IF(POLICY CMP0003) + CMAKE_POLICY(SET CMP0003 NEW) +ENDIF(POLICY CMP0003) + # Choose whether to test CMakeLib. SET(COMPLEX_TEST_CMAKELIB 1) IF(CMAKE_TEST_DIFFERENT_GENERATOR) -- cgit v0.12