This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, next has been updated via 434c868fbb597a1b2694e4a2b25df6055c388035 (commit) via 26155d19af233e19105250fab23ee38292f5cad6 (commit) from f257a96641455634959ffef001040e03377e0282 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=434c868fbb597a1b2694e4a2b25df6055c388035 commit 434c868fbb597a1b2694e4a2b25df6055c388035 Merge: f257a96 26155d1 Author: Nils Gladitz <nilsglad...@gmail.com> AuthorDate: Tue Apr 28 09:37:17 2015 -0400 Commit: CMake Topic Stage <kwro...@kitware.com> CommitDate: Tue Apr 28 09:37:17 2015 -0400 Merge topic 'if-IN_LIST' into next 26155d19 if: Implement new IN_LIST operator http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=26155d19af233e19105250fab23ee38292f5cad6 commit 26155d19af233e19105250fab23ee38292f5cad6 Author: Nils Gladitz <nilsglad...@gmail.com> AuthorDate: Tue Apr 28 15:10:11 2015 +0200 Commit: Nils Gladitz <nilsglad...@gmail.com> CommitDate: Tue Apr 28 15:36:30 2015 +0200 if: Implement new IN_LIST operator diff --git a/Help/command/if.rst b/Help/command/if.rst index d50b14c..396becf 100644 --- a/Help/command/if.rst +++ b/Help/command/if.rst @@ -134,6 +134,9 @@ Possible expressions are: Component-wise integer version number comparison (version format is ``major[.minor[.patch[.tweak]]]``). +``if(<variable|string> IN_LIST <variable>)`` + True if the given element is contained in the named list variable. + ``if(DEFINED <variable>)`` True if the given variable is defined. It does not matter if the variable is true or false just if it has been set. (Note macro diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst index aff696d..e59cce7 100644 --- a/Help/manual/cmake-policies.7.rst +++ b/Help/manual/cmake-policies.7.rst @@ -118,3 +118,4 @@ All Policies /policy/CMP0058 /policy/CMP0059 /policy/CMP0060 + /policy/CMP0061 diff --git a/Help/policy/CMP0061.rst b/Help/policy/CMP0061.rst new file mode 100644 index 0000000..066b1c9 --- /dev/null +++ b/Help/policy/CMP0061.rst @@ -0,0 +1,14 @@ +CMP0061 +------- + +Support new :command:`if` IN_LIST operator. + +CMake 3.3 adds support for the new IN_LIST operator. + +The ``OLD`` behavior for this policy is to ignore the IN_LIST operator. +The ``NEW`` behavior is to interpret the IN_LIST operator. + +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. diff --git a/Help/release/dev/if-IN_LIST.rst b/Help/release/dev/if-IN_LIST.rst new file mode 100644 index 0000000..9dd0725 --- /dev/null +++ b/Help/release/dev/if-IN_LIST.rst @@ -0,0 +1,5 @@ +if-IN_LIST +---------- + +* Add a new IN_LIST operator to if() that evaluates true + if a given element is contained in a named list. diff --git a/Source/cmConditionEvaluator.cxx b/Source/cmConditionEvaluator.cxx index 0a71c60..74e8a11 100644 --- a/Source/cmConditionEvaluator.cxx +++ b/Source/cmConditionEvaluator.cxx @@ -15,7 +15,8 @@ cmConditionEvaluator::cmConditionEvaluator(cmMakefile& makefile): Makefile(makefile), Policy12Status(makefile.GetPolicyStatus(cmPolicies::CMP0012)), - Policy54Status(makefile.GetPolicyStatus(cmPolicies::CMP0054)) + Policy54Status(makefile.GetPolicyStatus(cmPolicies::CMP0054)), + Policy61Status(makefile.GetPolicyStatus(cmPolicies::CMP0061)) { } @@ -676,6 +677,41 @@ bool cmConditionEvaluator::HandleLevel2(cmArgumentList &newArgs, reducible, arg, newArgs, argP1, argP2); } + if (argP1 != newArgs.end() && argP2 != newArgs.end() && + this->IsKeyword("IN_LIST", *argP1)) + { + if(this->Policy61Status != cmPolicies::OLD && + this->Policy61Status != cmPolicies::WARN) + { + bool result = false; + + def = this->GetVariableOrString(*arg); + def2 = this->Makefile.GetDefinition(argP2->GetValue()); + + if(def2) + { + std::vector<std::string> list; + cmSystemTools::ExpandListArgument(def2, list, true); + + result = std::find(list.begin(), list.end(), def) != list.end(); + } + + this->HandleBinaryOp(result, + reducible, arg, newArgs, argP1, argP2); + } + else if(this->Policy61Status == cmPolicies::WARN) + { + std::ostringstream e; + e << (this->Makefile.GetPolicies()->GetPolicyWarning( + cmPolicies::CMP0061)) << "\n"; + e << "IN_LIST will be interpreted as an operator " + "when the policy is set to NEW. " + "Since the policy is not set the OLD behavior will be used."; + + this->Makefile.IssueMessage(cmake::AUTHOR_WARNING, e.str()); + } + } + ++arg; } } diff --git a/Source/cmConditionEvaluator.h b/Source/cmConditionEvaluator.h index fcef234..75b7331 100644 --- a/Source/cmConditionEvaluator.h +++ b/Source/cmConditionEvaluator.h @@ -93,6 +93,7 @@ private: cmMakefile& Makefile; cmPolicies::PolicyStatus Policy12Status; cmPolicies::PolicyStatus Policy54Status; + cmPolicies::PolicyStatus Policy61Status; }; #endif diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx index e7678cb..d4e1dd0 100644 --- a/Source/cmPolicies.cxx +++ b/Source/cmPolicies.cxx @@ -395,6 +395,11 @@ cmPolicies::cmPolicies() CMP0060, "CMP0060", "Link libraries by full path even in implicit directories.", 3,3,0, cmPolicies::WARN); + + this->DefinePolicy( + CMP0061, "CMP0061", + "Support new IN_LIST if() operator.", + 3,3,0, cmPolicies::WARN); } cmPolicies::~cmPolicies() diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index 1d108c1..20d357a 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -119,6 +119,7 @@ public: CMP0059, ///< Do not treat ``DEFINITIONS`` as a built-in directory /// property. CMP0060, ///< Link libraries by full path even in implicit directories. + CMP0061, ///< Support new IN_LIST if() operator. /** \brief Always the last entry. * diff --git a/Tests/RunCMake/CMP0061/CMP0061-NEW.cmake b/Tests/RunCMake/CMP0061/CMP0061-NEW.cmake new file mode 100644 index 0000000..ae02850 --- /dev/null +++ b/Tests/RunCMake/CMP0061/CMP0061-NEW.cmake @@ -0,0 +1,31 @@ +cmake_policy(SET CMP0061 NEW) + +set(MY_NON_EXISTENT_LIST) + +set(MY_EMPTY_LIST "") + +set(MY_LIST foo bar) + +if(NOT "foo" IN_LIST MY_LIST) + message(FATAL_ERROR "expected item 'foo' not found in list MY_LIST") +endif() + +if("baz" IN_LIST MY_LIST) + message(FATAL_ERROR "unexpected item 'baz' found in list MY_LIST") +endif() + +if("foo" IN_LIST MY_NON_EXISTENT_LIST) + message(FATAL_ERROR + "unexpected item 'baz' found in non existent list MY_NON_EXISTENT_LIST") +endif() + +if("foo" IN_LIST MY_EMPTY_LIST) + message(FATAL_ERROR + "unexpected item 'baz' found in empty list MY_EMPTY_LIST") +endif() + +set(VAR "foo") + +if(NOT VAR IN_LIST MY_LIST) + message(FATAL_ERROR "expected item VAR not found in list MY_LIST") +endif() diff --git a/Tests/RunCMake/CMP0061/CMP0061-OLD-result.txt b/Tests/RunCMake/CMP0061/CMP0061-OLD-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMP0061/CMP0061-OLD-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMP0061/CMP0061-OLD-stderr.txt b/Tests/RunCMake/CMP0061/CMP0061-OLD-stderr.txt new file mode 100644 index 0000000..1c97b72 --- /dev/null +++ b/Tests/RunCMake/CMP0061/CMP0061-OLD-stderr.txt @@ -0,0 +1,8 @@ +CMake Error at CMP0061-OLD.cmake:5 \(if\): + if given arguments: + + "foo" "IN_LIST" "MY_LIST" + + Unknown arguments specified +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/CMP0061/CMP0061-OLD.cmake b/Tests/RunCMake/CMP0061/CMP0061-OLD.cmake new file mode 100644 index 0000000..d615655 --- /dev/null +++ b/Tests/RunCMake/CMP0061/CMP0061-OLD.cmake @@ -0,0 +1,7 @@ +cmake_policy(SET CMP0061 OLD) + +set(MY_LIST foo bar) + +if("foo" IN_LIST MY_LIST) + message("foo is in MY_LIST") +endif() diff --git a/Tests/RunCMake/CMP0061/CMP0061-WARN-result.txt b/Tests/RunCMake/CMP0061/CMP0061-WARN-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMP0061/CMP0061-WARN-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMP0061/CMP0061-WARN-stderr.txt b/Tests/RunCMake/CMP0061/CMP0061-WARN-stderr.txt new file mode 100644 index 0000000..3d358b0 --- /dev/null +++ b/Tests/RunCMake/CMP0061/CMP0061-WARN-stderr.txt @@ -0,0 +1,19 @@ +CMake Warning \(dev\) at CMP0061-WARN.cmake:3 \(if\): + Policy CMP0061 is not set: Support new IN_LIST if\(\) operator. Run "cmake + --help-policy CMP0061" for policy details. Use the cmake_policy command to + set the policy and suppress this warning. + + IN_LIST will be interpreted as an operator when the policy is set to NEW. + Since the policy is not set the OLD behavior will be used. +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) +This warning is for project developers. Use -Wno-dev to suppress it. + +CMake Error at CMP0061-WARN.cmake:3 \(if\): + if given arguments: + + "foo" "IN_LIST" "MY_LIST" + + Unknown arguments specified +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/CMP0061/CMP0061-WARN.cmake b/Tests/RunCMake/CMP0061/CMP0061-WARN.cmake new file mode 100644 index 0000000..45f53a5 --- /dev/null +++ b/Tests/RunCMake/CMP0061/CMP0061-WARN.cmake @@ -0,0 +1,5 @@ +set(MY_LIST foo bar) + +if("foo" IN_LIST MY_LIST) + message("foo is in MY_LIST") +endif() diff --git a/Tests/RunCMake/CMP0061/CMakeLists.txt b/Tests/RunCMake/CMP0061/CMakeLists.txt new file mode 100644 index 0000000..18dfd26 --- /dev/null +++ b/Tests/RunCMake/CMP0061/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.2) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/CMP0061/RunCMakeTest.cmake b/Tests/RunCMake/CMP0061/RunCMakeTest.cmake new file mode 100644 index 0000000..2aa5136 --- /dev/null +++ b/Tests/RunCMake/CMP0061/RunCMakeTest.cmake @@ -0,0 +1,5 @@ +include(RunCMake) + +run_cmake(CMP0061-OLD) +run_cmake(CMP0061-WARN) +run_cmake(CMP0061-NEW) diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index d5f1d22..812b12e 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -66,6 +66,7 @@ add_RunCMake_test(CMP0055) add_RunCMake_test(CMP0057) add_RunCMake_test(CMP0059) add_RunCMake_test(CMP0060) +add_RunCMake_test(CMP0061) if(CMAKE_GENERATOR STREQUAL "Ninja") add_RunCMake_test(Ninja) endif() ----------------------------------------------------------------------- Summary of changes: Help/command/if.rst | 3 ++ Help/manual/cmake-policies.7.rst | 1 + Help/policy/CMP0061.rst | 14 ++++++++ Help/release/dev/if-IN_LIST.rst | 5 +++ Source/cmConditionEvaluator.cxx | 38 +++++++++++++++++++- Source/cmConditionEvaluator.h | 1 + Source/cmPolicies.cxx | 5 +++ Source/cmPolicies.h | 1 + Tests/RunCMake/CMP0061/CMP0061-NEW.cmake | 31 ++++++++++++++++ .../CMP0061-OLD-result.txt} | 0 .../CMP0061-OLD-stderr.txt} | 4 +-- Tests/RunCMake/CMP0061/CMP0061-OLD.cmake | 7 ++++ .../CMP0061-WARN-result.txt} | 0 Tests/RunCMake/CMP0061/CMP0061-WARN-stderr.txt | 19 ++++++++++ Tests/RunCMake/CMP0061/CMP0061-WARN.cmake | 5 +++ Tests/RunCMake/{CMP0060 => CMP0061}/CMakeLists.txt | 2 +- Tests/RunCMake/CMP0061/RunCMakeTest.cmake | 5 +++ Tests/RunCMake/CMakeLists.txt | 1 + 18 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 Help/policy/CMP0061.rst create mode 100644 Help/release/dev/if-IN_LIST.rst create mode 100644 Tests/RunCMake/CMP0061/CMP0061-NEW.cmake copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => CMP0061/CMP0061-OLD-result.txt} (100%) copy Tests/RunCMake/{CMP0054/CMP0054-keywords-NEW-stderr.txt => CMP0061/CMP0061-OLD-stderr.txt} (62%) create mode 100644 Tests/RunCMake/CMP0061/CMP0061-OLD.cmake copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => CMP0061/CMP0061-WARN-result.txt} (100%) create mode 100644 Tests/RunCMake/CMP0061/CMP0061-WARN-stderr.txt create mode 100644 Tests/RunCMake/CMP0061/CMP0061-WARN.cmake copy Tests/RunCMake/{CMP0060 => CMP0061}/CMakeLists.txt (68%) create mode 100644 Tests/RunCMake/CMP0061/RunCMakeTest.cmake hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/mailman/listinfo/cmake-commits