Browse Source

cmake: Fix --build crash on bad CMAKE_GENERATOR in cache

If we fail to create the generator named by CMAKE_GENERATOR, exit
with an error message instead of crashing.  While at it, fix the
wording of the error message when CMAKE_GENERATOR is not set.

Extend the RunCMake.CommandLine test with cases covering the
"cmake --build" option when the named directory does not provide
a CMakeCache.txt with a valid CMAKE_GENERATOR.
Brad King 11 năm trước cách đây
mục cha
commit
44e2923f33

+ 7 - 1
Source/cmake.cxx

@@ -2664,11 +2664,17 @@ int cmake::Build(const std::string& dir,
     }
   if(!it.Find("CMAKE_GENERATOR"))
     {
-    std::cerr << "Error: could find generator in Cache\n";
+    std::cerr << "Error: could not find CMAKE_GENERATOR in Cache\n";
     return 1;
     }
   cmsys::auto_ptr<cmGlobalGenerator> gen(
     this->CreateGlobalGenerator(it.GetValue()));
+  if(!gen.get())
+    {
+    std::cerr << "Error: could create CMAKE_GENERATOR \""
+              << it.GetValue() << "\"\n";
+    return 1;
+    }
   std::string output;
   std::string projName;
   if(!it.Find("CMAKE_PROJECT_NAME"))

+ 7 - 0
Tests/RunCMake/CommandLine/RunCMakeTest.cmake

@@ -1,5 +1,12 @@
 include(RunCMake)
 
+run_cmake_command(build-no-cache
+  ${CMAKE_COMMAND} --build ${RunCMake_SOURCE_DIR})
+run_cmake_command(build-no-generator
+  ${CMAKE_COMMAND} --build ${RunCMake_SOURCE_DIR}/cache-no-generator)
+run_cmake_command(build-bad-generator
+  ${CMAKE_COMMAND} --build ${RunCMake_SOURCE_DIR}/cache-bad-generator)
+
 if(UNIX)
   run_cmake_command(E_create_symlink-missing-dir
     ${CMAKE_COMMAND} -E create_symlink T missing-dir/L

+ 1 - 0
Tests/RunCMake/CommandLine/build-bad-generator-result.txt

@@ -0,0 +1 @@
+1

+ 1 - 0
Tests/RunCMake/CommandLine/build-bad-generator-stderr.txt

@@ -0,0 +1 @@
+^Error: could create CMAKE_GENERATOR "Bad Generator"$

+ 1 - 0
Tests/RunCMake/CommandLine/build-no-cache-result.txt

@@ -0,0 +1 @@
+1

+ 1 - 0
Tests/RunCMake/CommandLine/build-no-cache-stderr.txt

@@ -0,0 +1 @@
+^Error: could not load cache$

+ 1 - 0
Tests/RunCMake/CommandLine/build-no-generator-result.txt

@@ -0,0 +1 @@
+1

+ 1 - 0
Tests/RunCMake/CommandLine/build-no-generator-stderr.txt

@@ -0,0 +1 @@
+^Error: could not find CMAKE_GENERATOR in Cache$

+ 1 - 0
Tests/RunCMake/CommandLine/cache-bad-generator/CMakeCache.txt

@@ -0,0 +1 @@
+CMAKE_GENERATOR:INTERNAL=Bad Generator

+ 0 - 0
Tests/RunCMake/CommandLine/cache-no-generator/CMakeCache.txt