summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-05-07 10:59:02 -0400
committerBrad King <brad.king@kitware.com>2014-05-07 11:02:16 -0400
commit54111286453894beb69ad18a9361edc2a50efc84 (patch)
tree2be66f856c661fde65c890374fa7ca3d5d660ed2
parent9cb4677509aa767245cbf4bb9e655d1559bc10bd (diff)
downloadcmake-54111286453894beb69ad18a9361edc2a50efc84.tar.gz
ctest_build: Do not crash on bad generator name
If creation of the global generator fails, return early with an error message instead of trying to use the generator and crashing. Add a CTestTestBadGenerator test to cover this case. Reported-by: Mathieu Malaterre <malat@debian.org> Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=747306
-rw-r--r--Source/CTest/cmCTestBuildCommand.cxx9
-rw-r--r--Tests/CMakeLists.txt12
-rw-r--r--Tests/CTestTestBadGenerator/CMakeLists.txt3
-rw-r--r--Tests/CTestTestBadGenerator/CTestConfig.cmake7
-rw-r--r--Tests/CTestTestBadGenerator/test.cmake.in20
5 files changed, 51 insertions, 0 deletions
diff --git a/Source/CTest/cmCTestBuildCommand.cxx b/Source/CTest/cmCTestBuildCommand.cxx
index 12ff71828a..b250fc329a 100644
--- a/Source/CTest/cmCTestBuildCommand.cxx
+++ b/Source/CTest/cmCTestBuildCommand.cxx
@@ -113,6 +113,15 @@ cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler()
this->GlobalGenerator =
this->Makefile->GetCMakeInstance()->CreateGlobalGenerator(
cmakeGeneratorName);
+ if(!this->GlobalGenerator)
+ {
+ std::string e = "could not create generator named \"";
+ e += cmakeGeneratorName;
+ e += "\"";
+ this->Makefile->IssueMessage(cmake::FATAL_ERROR, e);
+ cmSystemTools::SetFatalErrorOccured();
+ return 0;
+ }
}
if(strlen(cmakeBuildConfiguration) == 0)
{
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 8074a01d82..c903103dd8 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -2245,6 +2245,18 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
PASS_REGULAR_EXPRESSION "${CTestTestBadExe_REGEX}")
configure_file(
+ "${CMake_SOURCE_DIR}/Tests/CTestTestBadGenerator/test.cmake.in"
+ "${CMake_BINARY_DIR}/Tests/CTestTestBadGenerator/test.cmake"
+ @ONLY ESCAPE_QUOTES)
+ add_test(CTestTestBadGenerator ${CMAKE_CTEST_COMMAND}
+ -C "\${CTestTest_CONFIG}"
+ -S "${CMake_BINARY_DIR}/Tests/CTestTestBadGenerator/test.cmake" -V
+ --output-log "${CMake_BINARY_DIR}/Tests/CTestTestBadGenerator/testOutput.log"
+ )
+ set_property(TEST CTestTestBadGenerator PROPERTY
+ PASS_REGULAR_EXPRESSION "could not create generator named \"Bad Generator\"")
+
+ configure_file(
"${CMake_SOURCE_DIR}/Tests/CTestTestParallel/test.cmake.in"
"${CMake_BINARY_DIR}/Tests/CTestTestParallel/test.cmake"
@ONLY ESCAPE_QUOTES)
diff --git a/Tests/CTestTestBadGenerator/CMakeLists.txt b/Tests/CTestTestBadGenerator/CMakeLists.txt
new file mode 100644
index 0000000000..d46d9bf4f3
--- /dev/null
+++ b/Tests/CTestTestBadGenerator/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.0)
+project(CTestTestDepends NONE)
+include(CTest)
diff --git a/Tests/CTestTestBadGenerator/CTestConfig.cmake b/Tests/CTestTestBadGenerator/CTestConfig.cmake
new file mode 100644
index 0000000000..ef981893d7
--- /dev/null
+++ b/Tests/CTestTestBadGenerator/CTestConfig.cmake
@@ -0,0 +1,7 @@
+set (CTEST_PROJECT_NAME "CTestTestBadGenerator")
+set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
+set (CTEST_DART_SERVER_VERSION "2")
+set(CTEST_DROP_METHOD "http")
+set(CTEST_DROP_SITE "www.cdash.org")
+set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard")
+set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Tests/CTestTestBadGenerator/test.cmake.in b/Tests/CTestTestBadGenerator/test.cmake.in
new file mode 100644
index 0000000000..fe4fba82a8
--- /dev/null
+++ b/Tests/CTestTestBadGenerator/test.cmake.in
@@ -0,0 +1,20 @@
+cmake_minimum_required(VERSION 3.0)
+
+# Settings:
+set(CTEST_DASHBOARD_ROOT "@CMake_BINARY_DIR@/Tests/CTestTest")
+set(CTEST_SITE "@SITE@")
+set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-Depends")
+
+set(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestTestBadGenerator")
+set(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTestBadGenerator")
+set(CTEST_CVS_COMMAND "@CVSCOMMAND@")
+set(CTEST_CMAKE_GENERATOR "Bad Generator")
+set(CTEST_CMAKE_GENERATOR_TOOLSET "")
+set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}")
+set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@")
+set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}")
+
+CTEST_START(Experimental)
+CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
+CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
+CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)