Browse Source

cmFindPackageCommand: remove duplicate paths from error message

Fixes #15252.
Ben Boeckel 9 years ago
parent
commit
919db25c3b
2 changed files with 18 additions and 1 deletions
  1. 3 1
      Source/cmFindPackageCommand.cxx
  2. 15 0
      Source/cmFindPackageCommand.h

+ 3 - 1
Source/cmFindPackageCommand.cxx

@@ -664,6 +664,8 @@ 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")
@@ -672,7 +674,7 @@ bool cmFindPackageCommand::HandlePackageMode()
            "accepted:\n";
       for (std::vector<ConfigFileInfo>::const_iterator i =
              this->ConsideredConfigs.begin();
-           i != this->ConsideredConfigs.end(); ++i) {
+           i != duplicate_end; ++i) {
         e << "  " << i->filename << ", version: " << i->version << "\n";
       }
     } else {

+ 15 - 0
Source/cmFindPackageCommand.h

@@ -159,6 +159,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;
 };