diff options
Diffstat (limited to 'Source/cmFindPackageCommand.cxx')
-rw-r--r-- | Source/cmFindPackageCommand.cxx | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index 8eefaa7..828488f 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -502,8 +502,13 @@ bool cmFindPackageCommand::InitialPass(std::vector<std::string> const& args, if (this->Makefile->IsOn("CMAKE_FIND_PACKAGE_PREFER_CONFIG")) { if (this->UseConfigFiles && this->FindPackageUsingConfigMode()) { loadedPackage = true; - } else if (this->FindPackageUsingModuleMode()) { - loadedPackage = true; + } else { + if (this->FindPackageUsingModuleMode()) { + loadedPackage = true; + } else { + // The package was not loaded. Report errors. + HandlePackageMode(HandlePackageModeType::Module); + } } } else { if (this->UseFindModules && this->FindPackageUsingModuleMode()) { @@ -603,7 +608,7 @@ bool cmFindPackageCommand::FindPackageUsingConfigMode() this->IgnoredPaths.insert(ignored.begin(), ignored.end()); // Find and load the package. - return this->HandlePackageMode(); + return this->HandlePackageMode(HandlePackageModeType::Config); } void cmFindPackageCommand::SetModuleVariables(const std::string& components) @@ -722,7 +727,8 @@ bool cmFindPackageCommand::FindModule(bool& found) return true; } -bool cmFindPackageCommand::HandlePackageMode() +bool cmFindPackageCommand::HandlePackageMode( + HandlePackageModeType handlePackageModeType) { this->ConsideredConfigs.clear(); @@ -817,6 +823,12 @@ bool cmFindPackageCommand::HandlePackageMode() } } + if (this->Makefile->IsOn("CMAKE_FIND_PACKAGE_PREFER_CONFIG") && !found && + handlePackageModeType == HandlePackageModeType::Config) { + // Config mode failed. Allow Module case. + result = false; + } + // package not found if (result && !found) { // warn if package required or neither quiet nor in config mode |