[Cmake-commits] CMake branch, next, updated. v2.8.11.2-4263-g3fbf948

Brad King brad.king at kitware.com
Fri Sep 20 08:21:47 EDT 2013


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  3fbf9485b8fa7786f36da56a86801bf4385457f1 (commit)
       via  6a47c37ccf7049d5ac3fa6224def8d17ee82c7f5 (commit)
       via  d331292c121269ccfceee302a0f9bbb960b9f02d (commit)
       via  6fe5c4afc0a8363927ecd48bea4cc822894f97db (commit)
      from  f8c114ea5689f2efd3aa59a29a891210009e6537 (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=3fbf9485b8fa7786f36da56a86801bf4385457f1
commit 3fbf9485b8fa7786f36da56a86801bf4385457f1
Merge: f8c114e 6a47c37
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Sep 20 08:21:27 2013 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Fri Sep 20 08:21:27 2013 -0400

    Merge topic 'test-property-genex' into next
    
    6a47c37 add_test: Mention generator expressions in old-style add_test docs
    d331292 cmTestGenerator: Evaluate generator expressions in test properties
    6fe5c4a cmTestGenerator: Separate test properties for each configuration


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6a47c37ccf7049d5ac3fa6224def8d17ee82c7f5
commit 6a47c37ccf7049d5ac3fa6224def8d17ee82c7f5
Author:     Ben Boeckel <mathstuf at gmail.com>
AuthorDate: Wed Aug 7 18:08:54 2013 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Sep 20 08:18:22 2013 -0400

    add_test: Mention generator expressions in old-style add_test docs
    
    The old-style add_test() call does not support generator expressions at
    all. This also applies to the properties for the test, but it is not
    mentioned at all.

diff --git a/Source/cmAddTestCommand.h b/Source/cmAddTestCommand.h
index ec7fda3..ce98aaa 100644
--- a/Source/cmAddTestCommand.h
+++ b/Source/cmAddTestCommand.h
@@ -66,7 +66,8 @@ public:
       "built by this project or an arbitrary executable on the "
       "system (like tclsh).  The test will be run with the current working "
       "directory set to the CMakeList.txt files corresponding directory "
-      "in the binary tree.\n"
+      "in the binary tree.  Tests added using this signature do not support "
+      "generator expressions.\n"
       "\n"
       "  add_test(NAME <name> [CONFIGURATIONS [Debug|Release|...]]\n"
       "           [WORKING_DIRECTORY dir]\n"

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d331292c121269ccfceee302a0f9bbb960b9f02d
commit d331292c121269ccfceee302a0f9bbb960b9f02d
Author:     Ben Boeckel <mathstuf at gmail.com>
AuthorDate: Wed Aug 7 17:07:30 2013 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Sep 20 08:18:22 2013 -0400

    cmTestGenerator: Evaluate generator expressions in test properties
    
    This is useful for cases like:
    
      add_test(NAME mytest COMMAND mydriver $<TARGET_FILE:myexe>)
      set_tests_properties(mytest PROPERTIES
        REQUIRED_FILES "$<TARGET_FILE:myexe>"
        WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>"
        )
    
    In this example we require the actual test executable to exist to
    run the test in addition to the test driver at argv[0].  Also the
    $<CONFIGURATION> expression improves over \${CTEST_CONFIGURATION_TYPE}
    because the latter is not normalized for case-sensitive filesystems.

diff --git a/Source/cmSetTestsPropertiesCommand.h b/Source/cmSetTestsPropertiesCommand.h
index 3a59218..f2f2611 100644
--- a/Source/cmSetTestsPropertiesCommand.h
+++ b/Source/cmSetTestsPropertiesCommand.h
@@ -51,7 +51,8 @@ public:
       "  set_tests_properties(test1 [test2...] PROPERTIES prop1 value1 prop2"
       " value2)\n"
       "Set a property for the tests. If the property is not found, CMake "
-      "will report an error. The properties include:\n"
+      "will report an error. Generator expressions will be expanded the same "
+      "as supported by the test's add_test call. The properties include:\n"
       "WILL_FAIL: If set to true, this will invert the pass/fail flag of the"
       " test.\n"
       "PASS_REGULAR_EXPRESSION: If set, the test output will be checked "
diff --git a/Source/cmTestGenerator.cxx b/Source/cmTestGenerator.cxx
index 3167362..e5984a8 100644
--- a/Source/cmTestGenerator.cxx
+++ b/Source/cmTestGenerator.cxx
@@ -117,7 +117,8 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
         i != pm.end(); ++i)
       {
       os << " " << i->first
-         << " " << lg->EscapeForCMake(i->second.GetValue());
+         << " " << lg->EscapeForCMake(
+           ge.Parse(i->second.GetValue())->Evaluate(mf, config));
       }
     os << ")" << std::endl;
     }
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 9c3ed59..a5ad58c 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -604,6 +604,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     ${build_generator_args}
     --build-project GeneratorExpression
     --build-options -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE}
+    --test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} -V
     )
   list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/GeneratorExpression")
 
diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt
index 4d8d7ed..89d8780 100644
--- a/Tests/GeneratorExpression/CMakeLists.txt
+++ b/Tests/GeneratorExpression/CMakeLists.txt
@@ -1,5 +1,7 @@
 cmake_minimum_required (VERSION 2.8.8)
-project(GeneratorExpression CXX)
+project(GeneratorExpression)
+
+include(CTest)
 
 # This test is split into multiple parts as needed to avoid NMake command
 # length limits.
@@ -190,3 +192,31 @@ add_custom_target(check-part3 ALL
   COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 3)"
   VERBATIM
   )
+
+#-----------------------------------------------------------------------------
+# Cover test properties with generator expressions.
+add_executable(echo echo.c)
+add_executable(pwd pwd.c)
+
+add_test(NAME echo-configuration COMMAND echo $<CONFIGURATION>)
+set_property(TEST echo-configuration PROPERTY
+  PASS_REGULAR_EXPRESSION "^$<CONFIGURATION>\n$")
+
+add_test(NAME echo-target-file COMMAND echo $<TARGET_FILE:echo>)
+set_property(TEST echo-target-file PROPERTY
+  PASS_REGULAR_EXPRESSION "/echo${CMAKE_EXECUTABLE_SUFFIX}\n$")
+set_property(TEST echo-target-file PROPERTY
+  REQUIRED_FILES "$<TARGET_FILE:echo>")
+
+add_test(NAME working-dir-arg
+  WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/WorkingDirectory/$<CONFIGURATION>"
+  COMMAND pwd)
+set_property(TEST working-dir-arg PROPERTY
+  PASS_REGULAR_EXPRESSION "WorkingDirectory/$<CONFIGURATION>\n$")
+foreach(c ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
+  file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/WorkingDirectory/${c}")
+endforeach()
+
+add_test(echo-old-style echo "\$<CONFIGURATION>")
+set_property(TEST echo-old-style PROPERTY
+    PASS_REGULAR_EXPRESSION "^\\$<CONFIGURATION>\n$")
diff --git a/Tests/GeneratorExpression/echo.c b/Tests/GeneratorExpression/echo.c
new file mode 100644
index 0000000..06b0844
--- /dev/null
+++ b/Tests/GeneratorExpression/echo.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char* argv[])
+{
+  printf("%s\n", argv[1]);
+  return EXIT_SUCCESS;
+}
diff --git a/Tests/GeneratorExpression/pwd.c b/Tests/GeneratorExpression/pwd.c
new file mode 100644
index 0000000..054b1af
--- /dev/null
+++ b/Tests/GeneratorExpression/pwd.c
@@ -0,0 +1,34 @@
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef _WIN32
+#include <direct.h>
+#define getcurdir _getcwd
+#else
+#include <unistd.h>
+#define getcurdir getcwd
+#endif
+
+int main(int argc, char* argv[])
+{
+#define BUFSZ 20000
+  char buf[BUFSZ + 1];
+#ifdef _WIN32
+  char *pos;
+#endif
+  getcurdir(buf, BUFSZ);
+#ifdef _WIN32
+  pos = buf;
+  while (*pos)
+    {
+    if (*pos == '\\')
+      {
+      *pos = '/';
+      }
+    ++pos;
+    }
+#endif
+  printf("%s\n", buf);
+  return EXIT_SUCCESS;
+}

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6fe5c4afc0a8363927ecd48bea4cc822894f97db
commit 6fe5c4afc0a8363927ecd48bea4cc822894f97db
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Sep 18 13:05:05 2013 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Sep 20 08:18:10 2013 -0400

    cmTestGenerator: Separate test properties for each configuration
    
    Move property generation from GenerateScriptConfigs to separate copies
    in GenerateOldStyle and GenerateScriptForConfig.  This causes the
    per-config tests generated for the add_test(NAME) signature to each get
    their own test properties.  This will allow us to later change the
    property values based on the test configuration.
    
    While at it, generate lower-case CMake code (e.g. set_tests_properties).
    
    Inspired-by: Ben Boeckel <mathstuf at gmail.com>

diff --git a/Source/cmTestGenerator.cxx b/Source/cmTestGenerator.cxx
index 42f511e..3167362 100644
--- a/Source/cmTestGenerator.cxx
+++ b/Source/cmTestGenerator.cxx
@@ -39,29 +39,8 @@ cmTestGenerator
 void cmTestGenerator::GenerateScriptConfigs(std::ostream& os,
                                             Indent const& indent)
 {
-  // First create the tests.
+  // Create the tests.
   this->cmScriptGenerator::GenerateScriptConfigs(os, indent);
-
-  // Now generate the test properties.
-  if(this->TestGenerated)
-    {
-    cmTest* test = this->Test;
-    cmMakefile* mf = test->GetMakefile();
-    cmLocalGenerator* lg = mf->GetLocalGenerator();
-    std::ostream& fout = os;
-    cmPropertyMap::const_iterator pit;
-    cmPropertyMap* mpit = &test->GetProperties();
-    if ( mpit->size() )
-      {
-      fout << "SET_TESTS_PROPERTIES(" << test->GetName() << " PROPERTIES ";
-      for ( pit = mpit->begin(); pit != mpit->end(); ++ pit )
-        {
-        fout << " " << pit->first
-             << " " << lg->EscapeForCMake(pit->second.GetValue());
-        }
-      fout << ")" << std::endl;
-      }
-    }
 }
 
 //----------------------------------------------------------------------------
@@ -127,6 +106,21 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
 
   // Finish the test command.
   os << ")\n";
+
+  // Output properties for the test.
+  cmPropertyMap& pm = this->Test->GetProperties();
+  if(!pm.empty())
+    {
+    os << indent << "set_tests_properties(" << this->Test->GetName()
+       << " PROPERTIES ";
+    for(cmPropertyMap::const_iterator i = pm.begin();
+        i != pm.end(); ++i)
+      {
+      os << " " << i->first
+         << " " << lg->EscapeForCMake(i->second.GetValue());
+      }
+    os << ")" << std::endl;
+    }
 }
 
 //----------------------------------------------------------------------------
@@ -181,4 +175,21 @@ void cmTestGenerator::GenerateOldStyle(std::ostream& fout,
     fout << "\"";
     }
   fout << ")" << std::endl;
+
+  // Output properties for the test.
+  cmMakefile* mf = this->Test->GetMakefile();
+  cmLocalGenerator* lg = mf->GetLocalGenerator();
+  cmPropertyMap& pm = this->Test->GetProperties();
+  if(!pm.empty())
+    {
+    fout << indent << "set_tests_properties(" << this->Test->GetName()
+         << " PROPERTIES ";
+    for(cmPropertyMap::const_iterator i = pm.begin();
+        i != pm.end(); ++i)
+      {
+      fout << " " << i->first
+           << " " << lg->EscapeForCMake(i->second.GetValue());
+      }
+    fout << ")" << std::endl;
+    }
 }

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

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list