From 7048373296482ee38dc7336b3d96df4dc98bcb1b Mon Sep 17 00:00:00 2001 From: Alexander Neundorf Date: Sun, 12 Jul 2009 04:51:51 -0400 Subject: 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 --- Modules/CTestScriptMode.cmake | 10 ++++++++++ Source/CTest/cmCTestScriptHandler.cxx | 18 +++++------------- Tests/CMakeLists.txt | 7 +++++++ Tests/CTestScriptMode/CTestTestScriptMode.cmake.in | 14 ++++++++++++++ 4 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 Modules/CTestScriptMode.cmake create mode 100644 Tests/CTestScriptMode/CTestTestScriptMode.cmake.in diff --git a/Modules/CTestScriptMode.cmake b/Modules/CTestScriptMode.cmake new file mode 100644 index 0000000..146bdf1 --- /dev/null +++ b/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) + diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx index 89c98c6..12e7005 100644 --- a/Source/CTest/cmCTestScriptHandler.cxx +++ b/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; diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 83e11e3..8982ac3 100644 --- a/Tests/CMakeLists.txt +++ b/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 diff --git a/Tests/CTestScriptMode/CTestTestScriptMode.cmake.in b/Tests/CTestScriptMode/CTestTestScriptMode.cmake.in new file mode 100644 index 0000000..0c4394f --- /dev/null +++ b/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/") -- cgit v0.12