diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index 4ab7a7239..1945c44c8 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/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::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::const_iterator i = this->ConsideredConfigs.begin(); - i != this->ConsideredConfigs.end(); ++i) { + i != duplicate_end; ++i) { e << " " << i->filename << ", version: " << i->version << "\n"; } } else { diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h index eff6b8090..00db22b3f 100644 --- a/Source/cmFindPackageCommand.h +++ b/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 ConsideredConfigs; };