瀏覽代碼

Improve error message in Config-mode when no appropriate version was found

If in config-mode config files have been found by find_package(), but their
version didn't match the requested version, now all considered files
and their versions are printed (instead of saying "didn't find config file)

Alex
Alex Neundorf 15 年之前
父節點
當前提交
130b0e2195
共有 1 個文件被更改,包括 50 次插入36 次删除
  1. 50 36
      Source/cmFindPackageCommand.cxx

+ 50 - 36
Source/cmFindPackageCommand.cxx

@@ -817,36 +817,56 @@ bool cmFindPackageCommand::HandlePackageMode()
     {
     // The variable is not set.
     cmOStringStream e;
-    e << "Could not find ";
-    if(!this->NoModule)
-      {
-      e << "module Find" << this->Name << ".cmake or ";
-      }
-    e << "a configuration file for package " << this->Name << ".\n";
-    if(!this->NoModule)
-      {
-      e << "Adjust CMAKE_MODULE_PATH to find Find"
-        << this->Name << ".cmake or set ";
-      }
-    else
-      {
-      e << "Set ";
-      }
-    e << this->Variable << " to the directory containing a CMake "
-      << "configuration file for " << this->Name << ".  ";
-    if(this->Configs.size() == 1)
-      {
-      e << "The file will be called " << this->Configs[0];
+    // If there are files in ConsideredConfigs, it means that FooConfig.cmake
+    // have been found, but they didn't have appropriate versions.
+    if (this->ConsideredConfigFiles.size() > 0)
+      {
+      e << "Could not find configuration file for package " << this->Name
+        << " with " << (this->VersionExact ? "exact " : "at least ")
+        << "version " << this->Version << " .\n"
+        << "Found the following files:\n";
+      for(std::vector<std::string>::size_type i=0;
+          i<this->ConsideredConfigFiles.size(); i++)
+        {
+        e << "  " << this->ConsideredConfigFiles[i]
+          << ", version: " << this->ConsideredVersions[i] << "\n";
+        }
       }
     else
       {
-      e << "The file will have one of the following names:\n";
-      for(std::vector<std::string>::const_iterator ci = this->Configs.begin();
-          ci != this->Configs.end(); ++ci)
+      e << "Could not find ";
+      if(!this->NoModule)
+        {
+        e << "module Find" << this->Name << ".cmake or ";
+        }
+      e << "a configuration file for package " << this->Name << ".\n";
+      if(!this->NoModule)
+        {
+        e << "Adjust CMAKE_MODULE_PATH to find Find"
+          << this->Name << ".cmake or set ";
+        }
+      else
+        {
+        e << "Set ";
+        }
+      e << this->Variable << " to the directory containing a CMake "
+        << "configuration file for " << this->Name << ".  ";
+      if(this->Configs.size() == 1)
+        {
+        e << "The file will be called " << this->Configs[0];
+        }
+      else
         {
-        e << "  " << *ci << "\n";
+        e << "The file will have one of the following names:\n";
+        for(std::vector<std::string>::const_iterator ci=this->Configs.begin();
+            ci != this->Configs.end(); ++ci)
+          {
+          e << "  " << *ci << "\n";
+          }
         }
       }
+
+
     this->Makefile->IssueMessage(
       this->Required? cmake::FATAL_ERROR : cmake::WARNING, e.str());
     }
@@ -911,20 +931,14 @@ bool cmFindPackageCommand::HandlePackageMode()
   consideredVersionsVar += "_CONSIDERED_VERSIONS";
 
   std::string consideredConfigFiles;
-  for(std::vector<std::string>::const_iterator
-      it = this->ConsideredConfigFiles.begin();
-      it != this->ConsideredConfigFiles.end(); ++it)
-    {
-    consideredConfigFiles += *it;
-    consideredConfigFiles += ";";
-    }
-
   std::string consideredVersions;
-  for(std::vector<std::string>::const_iterator
-      it = this->ConsideredVersions.begin();
-      it != this->ConsideredVersions.end(); ++it)
+
+  for(std::vector<std::string>::size_type i=0;
+      i<this->ConsideredConfigFiles.size(); i++)
     {
-    consideredVersions += *it;
+    consideredConfigFiles += this->ConsideredConfigFiles[i];
+    consideredConfigFiles += ";";
+    consideredVersions += this->ConsideredVersions[i];
     consideredVersions += ";";
     }