Bläddra i källkod

Merge topic 'find_package-duplicate-search-paths'

919db25c cmFindPackageCommand: remove duplicate paths from error message
ebf18df5 cmFindPackageCommand: use iterators to loop over configurations
Brad King 9 år sedan
förälder
incheckning
ce62454019
2 ändrade filer med 26 tillägg och 8 borttagningar
  1. 11 8
      Source/cmFindPackageCommand.cxx
  2. 15 0
      Source/cmFindPackageCommand.h

+ 11 - 8
Source/cmFindPackageCommand.cxx

@@ -672,16 +672,18 @@ bool cmFindPackageCommand::HandlePackageMode()
     // If there are files in ConsideredConfigs, it means that FooConfig.cmake
     // have been found, but they didn't have appropriate versions.
     else if (!this->ConsideredConfigs.empty()) {
+      std::vector<ConfigFileInfo>::const_iterator duplicate_end =
+        cmRemoveDuplicates(this->ConsideredConfigs);
       e << "Could not find a configuration file for package \"" << this->Name
         << "\" that "
         << (this->VersionExact ? "exactly matches" : "is compatible with")
         << " requested version \"" << this->Version << "\".\n"
         << "The following configuration files were considered but not "
            "accepted:\n";
-      for (std::vector<ConfigFileInfo>::size_type i = 0;
-           i < this->ConsideredConfigs.size(); i++) {
-        e << "  " << this->ConsideredConfigs[i].filename
-          << ", version: " << this->ConsideredConfigs[i].version << "\n";
+      for (std::vector<ConfigFileInfo>::const_iterator i =
+             this->ConsideredConfigs.begin();
+           i != duplicate_end; ++i) {
+        e << "  " << i->filename << ", version: " << i->version << "\n";
       }
     } else {
       std::string requestedVersionString;
@@ -774,12 +776,13 @@ bool cmFindPackageCommand::HandlePackageMode()
   std::string consideredVersions;
 
   const char* sep = "";
-  for (std::vector<ConfigFileInfo>::size_type i = 0;
-       i < this->ConsideredConfigs.size(); i++) {
+  for (std::vector<ConfigFileInfo>::const_iterator i =
+         this->ConsideredConfigs.begin();
+       i != this->ConsideredConfigs.end(); ++i) {
     consideredConfigFiles += sep;
     consideredVersions += sep;
-    consideredConfigFiles += this->ConsideredConfigs[i].filename;
-    consideredVersions += this->ConsideredConfigs[i].version;
+    consideredConfigFiles += i->filename;
+    consideredVersions += i->version;
     sep = ";";
   }
 

+ 15 - 0
Source/cmFindPackageCommand.h

@@ -160,6 +160,21 @@ private:
   {
     std::string filename;
     std::string version;
+
+    bool operator<(ConfigFileInfo const& rhs) const
+    {
+      return this->filename < rhs.filename;
+    }
+
+    bool operator==(ConfigFileInfo const& rhs) const
+    {
+      return this->filename == rhs.filename;
+    }
+
+    bool operator!=(ConfigFileInfo const& rhs) const
+    {
+      return !(*this == rhs);
+    }
   };
   std::vector<ConfigFileInfo> ConsideredConfigs;
 };