Browse Source

STYLE: don't load CMakeDetermineSystem and CMakeSystemSpecific directly from
cmCTestScriptHandler, but have it load the new script CTestScriptMode.cmake
-> that makes it more flexible, also add a simple test that the system name
has been determined correctly

Alex

Alexander Neundorf 16 years ago
parent
commit
7048373296

+ 10 - 0
Modules/CTestScriptMode.cmake

@@ -0,0 +1,10 @@
+# This file is read by ctest in script mode (-S)
+
+# Determine the current system, so this information can be used 
+# in ctest scripts
+include(CMakeDetermineSystem)
+
+# Also load the system specific file, which sets up e.g. the search paths.
+# This makes the FIND_XXX() calls work much better
+include(CMakeSystemSpecificInformation)
+

+ 5 - 13
Source/CTest/cmCTestScriptHandler.cxx

@@ -418,12 +418,13 @@ int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg)
   this->Makefile->AddFunctionBlocker(f);
 
 
-  /* Execute CMakeDetermineSystem and CMakeSystemSpecificInformation, so 
+  /* Execute CTestScriptMode.cmake, which loads CMakeDetermineSystem and 
+  CMakeSystemSpecificInformation, so 
   that variables like CMAKE_SYSTEM and also the search paths for libraries,
   header and executables are set correctly and can be used. Makes new-style
   ctest scripting easier. */
   std::string systemFile = 
-      this->Makefile->GetModulesFile("CMakeDetermineSystem.cmake");
+      this->Makefile->GetModulesFile("CTestScriptMode.cmake");
   if (!this->Makefile->ReadListFile(0, systemFile.c_str()) ||
       cmSystemTools::GetErrorOccuredFlag())
     {  
@@ -432,16 +433,6 @@ int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg)
     return 2;
     }
 
-  systemFile = 
-      this->Makefile->GetModulesFile("CMakeSystemSpecificInformation.cmake");
-  if (!this->Makefile->ReadListFile(0, systemFile.c_str()) ||
-      cmSystemTools::GetErrorOccuredFlag())
-    {
-    cmCTestLog(this->CTest, ERROR_MESSAGE, "Error in read:" 
-               << systemFile.c_str() << "\n");
-    return 2;
-    }
-
   // finally read in the script
   if (!this->Makefile->ReadListFile(0, script.c_str()) ||
     cmSystemTools::GetErrorOccuredFlag())
@@ -966,7 +957,8 @@ int cmCTestScriptHandler::RunConfigurationDashboard()
         }
       cmCTestLog(this->CTest, ERROR_MESSAGE,
         "Unable to run ctest:" << std::endl
-        << output.c_str() << std::endl);
+        << "command: " << command.c_str() << std::endl
+        << "output: " << output.c_str() << std::endl);
       if (!res)
         {
         return 11;

+ 7 - 0
Tests/CMakeLists.txt

@@ -877,6 +877,13 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=CVS -P ${CMake_SOURCE_DIR}/Utilities/Rel
     LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BundleGeneratorTest")
   ENDIF(APPLE AND CTEST_TEST_CPACK)
 
+  # A simple test for ctest in script mode
+  CONFIGURE_FILE("${CMake_SOURCE_DIR}/Tests/CTestScriptMode/CTestTestScriptMode.cmake.in"
+          "${CMake_BINARY_DIR}/Tests/CTestScriptMode/CTestTestScriptMode.cmake" @ONLY)
+  ADD_TEST(CTest.ScriptMode ${CMAKE_CTEST_COMMAND}
+        -S "${CMake_BINARY_DIR}/Tests/CTestScriptMode/CTestTestScriptMode.cmake"
+        )
+
   SET(CTEST_TEST_UPDATE 1)
   IF(CTEST_TEST_UPDATE)
     # Test CTest Update with Subversion

+ 14 - 0
Tests/CTestScriptMode/CTestTestScriptMode.cmake.in

@@ -0,0 +1,14 @@
+# This script will be executed with ctest -S
+
+# Check that the system name is determined correctly:
+set(CMAKE_CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@")
+
+if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "${CMAKE_CMAKE_SYSTEM_NAME}")
+   message(FATAL_ERROR "Error: CMAKE_SYSTEM_NAME is \"${CMAKE_SYSTEM_NAME}\", but should be \"@CMAKE_SYSTEM_NAME@\"")
+endif(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "${CMAKE_CMAKE_SYSTEM_NAME}")
+
+# this seems to be necessary, otherwise ctest complains that these 
+# variables are not set:
+set(CTEST_COMMAND "\"@CMAKE_CTEST_COMMAND@\"")
+set(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestScriptMode/")
+set(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestScriptMode/")