[Cmake-commits] CMake branch, next, updated. v3.3.0-1793-g2b5ca8e

Brad King brad.king at kitware.com
Mon Aug 3 09:25:02 EDT 2015


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  2b5ca8ec591cb9e7c3f7415c022662293773ebda (commit)
       via  14e49ed15615e7f2bcb58aa4540683250006f5c7 (commit)
       via  623dcc85a447b9ce0f09cffa8cd296cd8a51ad9d (commit)
      from  cb7e276d6a39ebf79ddb060532f7c11066784a5b (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=2b5ca8ec591cb9e7c3f7415c022662293773ebda
commit 2b5ca8ec591cb9e7c3f7415c022662293773ebda
Merge: cb7e276 14e49ed
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Aug 3 09:25:01 2015 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Aug 3 09:25:01 2015 -0400

    Merge topic 'if-test' into next
    
    14e49ed1 if: Add "TEST <test>" condition
    623dcc85 ExternalProject: Avoid if() auto-dereference of a "TEST" variable


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=14e49ed15615e7f2bcb58aa4540683250006f5c7
commit 14e49ed15615e7f2bcb58aa4540683250006f5c7
Author:     Matt McCormick <matt.mccormick at kitware.com>
AuthorDate: Mon Dec 29 20:47:48 2014 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Aug 3 09:22:25 2015 -0400

    if: Add "TEST <test>" condition
    
    if(TEST TestNameThatExists) will return true if a test with the name
    TestNameThatExists has been added with add_test.  The syntax is similar
    to if(TARGET TargetName).  Since use of "TEST" as an argument to if()
    could previously be interpreted as a non-keyword argument, add policy
    CMP0064 to treat it as a keyword as NEW behavior.

diff --git a/Help/command/if.rst b/Help/command/if.rst
index 396becf..2465bde 100644
--- a/Help/command/if.rst
+++ b/Help/command/if.rst
@@ -71,6 +71,10 @@ Possible expressions are:
  created by the :command:`add_executable`, :command:`add_library`, or
  :command:`add_custom_target` commands.
 
+``if(TEST test-name)``
+ True if the given name is an existing test name created by the
+ :command:`add_test` command.
+
 ``if(EXISTS path-to-file-or-directory)``
  True if the named file or directory exists.  Behavior is well-defined
  only for full paths.
diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst
index 0a313cd..590f10d 100644
--- a/Help/manual/cmake-policies.7.rst
+++ b/Help/manual/cmake-policies.7.rst
@@ -121,3 +121,4 @@ All Policies
    /policy/CMP0061
    /policy/CMP0062
    /policy/CMP0063
+   /policy/CMP0064
diff --git a/Help/policy/CMP0064.rst b/Help/policy/CMP0064.rst
new file mode 100644
index 0000000..e9a061b
--- /dev/null
+++ b/Help/policy/CMP0064.rst
@@ -0,0 +1,17 @@
+CMP0064
+-------
+
+Recognize ``TEST`` as a operator for the :command:`if` command.
+
+The ``TEST`` operator was added to the :command:`if` command to determine if a
+given test name was created by the :command:`add_test` command.
+
+The ``OLD`` behavior for this policy is to ignore the ``TEST`` operator.
+The ``NEW`` behavior is to interpret the ``TEST`` operator.
+
+This policy was introduced in CMake version 3.4.  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.
+
+.. include:: DEPRECATED.txt
diff --git a/Help/release/dev/if-TEST.rst b/Help/release/dev/if-TEST.rst
new file mode 100644
index 0000000..05bf71c
--- /dev/null
+++ b/Help/release/dev/if-TEST.rst
@@ -0,0 +1,5 @@
+if-TEST
+-------
+
+* Add a new TEST operator to if() that evaluates to true
+  if a given test name has been defined.
diff --git a/Source/cmConditionEvaluator.cxx b/Source/cmConditionEvaluator.cxx
index 420bfdf..7874803 100644
--- a/Source/cmConditionEvaluator.cxx
+++ b/Source/cmConditionEvaluator.cxx
@@ -16,7 +16,8 @@ cmConditionEvaluator::cmConditionEvaluator(cmMakefile& makefile):
   Makefile(makefile),
   Policy12Status(makefile.GetPolicyStatus(cmPolicies::CMP0012)),
   Policy54Status(makefile.GetPolicyStatus(cmPolicies::CMP0054)),
-  Policy57Status(makefile.GetPolicyStatus(cmPolicies::CMP0057))
+  Policy57Status(makefile.GetPolicyStatus(cmPolicies::CMP0057)),
+  Policy64Status(makefile.GetPolicyStatus(cmPolicies::CMP0064))
 {
 
 }
@@ -493,6 +494,29 @@ bool cmConditionEvaluator::HandleLevel1(cmArgumentList &newArgs,
           this->Makefile.FindTargetToUse(argP1->GetValue())?true:false,
           reducible, arg, newArgs, argP1, argP2);
         }
+      // does a test exist
+      if(this->Policy64Status != cmPolicies::OLD &&
+        this->Policy64Status != cmPolicies::WARN)
+        {
+        if (this->IsKeyword("TEST", *arg) && argP1 != newArgs.end())
+          {
+          const cmTest* haveTest = this->Makefile.GetTest(argP1->c_str());
+          this->HandlePredicate(
+            haveTest?true:false,
+            reducible, arg, newArgs, argP1, argP2);
+          }
+        }
+      else if(this->Policy64Status == cmPolicies::WARN &&
+        this->IsKeyword("TEST", *arg))
+        {
+        std::ostringstream e;
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0064) << "\n";
+        e << "TEST 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());
+        }
       // is a variable defined
       if (this->IsKeyword("DEFINED", *arg) && argP1 != newArgs.end())
         {
diff --git a/Source/cmConditionEvaluator.h b/Source/cmConditionEvaluator.h
index c923d76..c4e2d11 100644
--- a/Source/cmConditionEvaluator.h
+++ b/Source/cmConditionEvaluator.h
@@ -94,6 +94,7 @@ private:
   cmPolicies::PolicyStatus Policy12Status;
   cmPolicies::PolicyStatus Policy54Status;
   cmPolicies::PolicyStatus Policy57Status;
+  cmPolicies::PolicyStatus Policy64Status;
 };
 
 #endif
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index b783701..a791b89 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -217,6 +217,9 @@ class cmPolicy;
     3, 3, 0, cmPolicies::WARN) \
   SELECT(POLICY, CMP0063, \
     "Honor visibility properties for all target types.", \
+    3, 3, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0064, \
+    "Support new TEST if() operator.", \
     3, 3, 0, cmPolicies::WARN)
 
 #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
diff --git a/Tests/RunCMake/CMP0064/CMP0064-NEW.cmake b/Tests/RunCMake/CMP0064/CMP0064-NEW.cmake
new file mode 100644
index 0000000..cdf50e9
--- /dev/null
+++ b/Tests/RunCMake/CMP0064/CMP0064-NEW.cmake
@@ -0,0 +1,5 @@
+cmake_policy(SET CMP0064 NEW)
+
+if(NOT TEST TestThatDoesNotExist)
+  message(STATUS "if NOT TestThatDoesNotExist is true")
+endif()
diff --git a/Tests/RunCMake/CMP0064/CMP0064-OLD.cmake b/Tests/RunCMake/CMP0064/CMP0064-OLD.cmake
new file mode 100644
index 0000000..bffd3f3
--- /dev/null
+++ b/Tests/RunCMake/CMP0064/CMP0064-OLD.cmake
@@ -0,0 +1,7 @@
+cmake_policy(SET CMP0064 OLD)
+
+if(TEST)
+  message(FATAL_ERROR "TEST was not recognized to be undefined")
+else()
+  message(STATUS "TEST was treated as a variable")
+endif()
diff --git a/Tests/RunCMake/CMP0064/CMP0064-WARN.cmake b/Tests/RunCMake/CMP0064/CMP0064-WARN.cmake
new file mode 100644
index 0000000..bffd3f3
--- /dev/null
+++ b/Tests/RunCMake/CMP0064/CMP0064-WARN.cmake
@@ -0,0 +1,7 @@
+cmake_policy(SET CMP0064 OLD)
+
+if(TEST)
+  message(FATAL_ERROR "TEST was not recognized to be undefined")
+else()
+  message(STATUS "TEST was treated as a variable")
+endif()
diff --git a/Tests/RunCMake/CMP0064/CMakeLists.txt b/Tests/RunCMake/CMP0064/CMakeLists.txt
new file mode 100644
index 0000000..74b3ff8
--- /dev/null
+++ b/Tests/RunCMake/CMP0064/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.3)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/CMP0064/RunCMakeTest.cmake b/Tests/RunCMake/CMP0064/RunCMakeTest.cmake
new file mode 100644
index 0000000..26e0a91
--- /dev/null
+++ b/Tests/RunCMake/CMP0064/RunCMakeTest.cmake
@@ -0,0 +1,5 @@
+include(RunCMake)
+
+run_cmake(CMP0064-OLD)
+run_cmake(CMP0064-WARN)
+run_cmake(CMP0064-NEW)
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 607e799..20d47b2 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -103,6 +103,7 @@ add_RunCMake_test(CMP0055)
 add_RunCMake_test(CMP0057)
 add_RunCMake_test(CMP0059)
 add_RunCMake_test(CMP0060)
+add_RunCMake_test(CMP0064)
 if(CMAKE_GENERATOR MATCHES "Make")
   add_RunCMake_test(Make)
 endif()
diff --git a/Tests/RunCMake/if/RunCMakeTest.cmake b/Tests/RunCMake/if/RunCMakeTest.cmake
index 2c0c4d7..3f4d2a2 100644
--- a/Tests/RunCMake/if/RunCMakeTest.cmake
+++ b/Tests/RunCMake/if/RunCMakeTest.cmake
@@ -4,3 +4,6 @@ run_cmake(InvalidArgument1)
 run_cmake(IsDirectory)
 run_cmake(IsDirectoryLong)
 run_cmake(elseif-message)
+
+run_cmake(TestNameThatExists)
+run_cmake(TestNameThatDoesNotExist)
diff --git a/Tests/RunCMake/if/TestNameThatDoesNotExist-stdout.txt b/Tests/RunCMake/if/TestNameThatDoesNotExist-stdout.txt
new file mode 100644
index 0000000..8874ca8
--- /dev/null
+++ b/Tests/RunCMake/if/TestNameThatDoesNotExist-stdout.txt
@@ -0,0 +1 @@
+TestThatDoesNotExist is false
diff --git a/Tests/RunCMake/if/TestNameThatDoesNotExist.cmake b/Tests/RunCMake/if/TestNameThatDoesNotExist.cmake
new file mode 100644
index 0000000..74bc8b0
--- /dev/null
+++ b/Tests/RunCMake/if/TestNameThatDoesNotExist.cmake
@@ -0,0 +1,6 @@
+cmake_policy(SET CMP0064 NEW)
+if(TEST TestThatDoesNotExist)
+  message(FATAL_ERROR "if TestThatDoesNotExist is true")
+else()
+  message(STATUS "if TestThatDoesNotExist is false")
+endif()
diff --git a/Tests/RunCMake/if/TestNameThatExists-stdout.txt b/Tests/RunCMake/if/TestNameThatExists-stdout.txt
new file mode 100644
index 0000000..54911bc
--- /dev/null
+++ b/Tests/RunCMake/if/TestNameThatExists-stdout.txt
@@ -0,0 +1 @@
+TestThatExists is true
diff --git a/Tests/RunCMake/if/TestNameThatExists.cmake b/Tests/RunCMake/if/TestNameThatExists.cmake
new file mode 100644
index 0000000..65c2b46
--- /dev/null
+++ b/Tests/RunCMake/if/TestNameThatExists.cmake
@@ -0,0 +1,7 @@
+cmake_policy(SET CMP0064 NEW)
+add_test(NAME TestThatExists COMMAND ${CMAKE_COMMAND} -E echo "A CMake Test")
+if(TEST TestThatExists)
+  message(STATUS "if TestThatExists is true")
+else()
+  message(FATAL_ERROR "if TestThatExists is false")
+endif()

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=623dcc85a447b9ce0f09cffa8cd296cd8a51ad9d
commit 623dcc85a447b9ce0f09cffa8cd296cd8a51ad9d
Author:     Matt McCormick <matt.mccormick at kitware.com>
AuthorDate: Wed Jul 29 14:46:40 2015 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Aug 3 09:21:39 2015 -0400

    ExternalProject: Avoid if() auto-dereference of a "TEST" variable
    
    Exposed by CMP0054 warnings.

diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index f6844be..fdb146a 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -1211,7 +1211,7 @@ function(_ep_get_build_command name step cmd_var)
         if(step STREQUAL "INSTALL")
           set(args install)
         endif()
-        if(step STREQUAL "TEST")
+        if("x${step}x" STREQUAL "xTESTx")
           set(args test)
         endif()
       else()
@@ -1230,7 +1230,7 @@ function(_ep_get_build_command name step cmd_var)
           list(APPEND args --target install)
         endif()
         # But for "TEST" drive the project with corresponding "ctest".
-        if(step STREQUAL "TEST")
+        if("x${step}x" STREQUAL "xTESTx")
           string(REGEX REPLACE "^(.*/)cmake([^/]*)$" "\\1ctest\\2" cmd "${cmd}")
           set(args "")
         endif()
@@ -1246,7 +1246,7 @@ function(_ep_get_build_command name step cmd_var)
       if(step STREQUAL "INSTALL")
         set(args install)
       endif()
-      if(step STREQUAL "TEST")
+      if("x${step}x" STREQUAL "xTESTx")
         set(args test)
       endif()
     endif()

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list