Просмотр исходного кода

ENH: Improved error messages when source tree does not have a CMakeLists.txt file. No matter how many cases we check, there always seems to be a user that finds a case that gives a confusing error message...

Brad King 22 лет назад
Родитель
Сommit
306fc9ea96
1 измененных файлов с 34 добавлено и 4 удалено
  1. 34 4
      Source/cmake.cxx

+ 34 - 4
Source/cmake.cxx

@@ -392,7 +392,24 @@ void cmake::SetDirectoriesFromFile(const char* arg)
       listPath = cmSystemTools::GetFilenamePath(fullPath.c_str());
       }
     }
-  
+  else
+    {
+    // Specified file or directory does not exist.  Try to set things
+    // up to produce a meaningful error message.
+    std::string fullPath = cmSystemTools::CollapseFullPath(arg);
+    std::string name = cmSystemTools::GetFilenameName(fullPath.c_str());
+    name = cmSystemTools::LowerCase(name);
+    if(name == "cmakecache.txt" || name == "cmakelists.txt")
+      {
+      argIsFile = true;
+      listPath = cmSystemTools::GetFilenamePath(fullPath.c_str());
+      }
+    else
+      {
+      listPath = fullPath;
+      }
+    }
+
   // If there is a CMakeCache.txt file, use its settings.
   if(cachePath.length() > 0)
     {
@@ -880,9 +897,22 @@ int cmake::DoPreConfigureChecks()
   if(!cmSystemTools::FileExists(srcList.c_str()))
     {
     cmOStringStream err;
-    err << "The source directory \"" << this->GetHomeDirectory()
-        << "\" does not appear to contain CMakeLists.txt.\n"
-        << "Specify --help for usage, or press the help button on the CMake GUI.";
+    if(cmSystemTools::FileIsDirectory(this->GetHomeDirectory()))
+      {
+      err << "The source directory \"" << this->GetHomeDirectory()
+          << "\" does not appear to contain CMakeLists.txt.\n";
+      }
+    else if(cmSystemTools::FileExists(this->GetHomeDirectory()))
+      {
+      err << "The source directory \"" << this->GetHomeDirectory()
+          << "\" is a file, not a directory.\n";
+      }
+    else
+      {
+      err << "The source directory \"" << this->GetHomeDirectory()
+          << "\" does not exist.\n";
+      }
+    err << "Specify --help for usage, or press the help button on the CMake GUI.";
     cmSystemTools::Error(err.str().c_str());
     return -2;
     }