Commit a9b11235 authored by Brad King's avatar Brad King 💬 Committed by Kitware Robot
Browse files

Merge topic 'find_package-shorter-message'

d0b9d1cc find_package: shorten output for missing package in config mode
d9df805f

 cmFindPackageCommand: Split condition to improve readability

Acked-by: Kitware Robot's avatarKitware Robot <kwrobot@kitware.com>
Merge-request: !851
parents bc2cfd7c d0b9d1cc
......@@ -731,104 +731,118 @@ bool cmFindPackageCommand::HandlePackageMode()
}
}
if (result && !found && (!this->Quiet || this->Required)) {
// The variable is not set.
std::ostringstream e;
std::ostringstream aw;
if (configFileSetFOUNDFalse) {
/* clang-format off */
e << "Found package configuration file:\n"
" " << this->FileFound << "\n"
"but it set " << foundVar << " to FALSE so package \"" <<
this->Name << "\" is considered to be NOT FOUND.";
/* clang-format on */
if (!notFoundMessage.empty()) {
e << " Reason given by package: \n" << notFoundMessage << "\n";
}
}
// 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>::const_iterator i =
this->ConsideredConfigs.begin();
i != duplicate_end; ++i) {
e << " " << i->filename << ", version: " << i->version << "\n";
}
} else {
std::string requestedVersionString;
if (!this->Version.empty()) {
requestedVersionString = " (requested version ";
requestedVersionString += this->Version;
requestedVersionString += ")";
// package not found
if (result && !found) {
// warn if package required or neither quiet nor in config mode
if (this->Required ||
!(this->Quiet || (this->UseConfigFiles && !this->UseFindModules))) {
// The variable is not set.
std::ostringstream e;
std::ostringstream aw;
if (configFileSetFOUNDFalse) {
/* clang-format off */
e << "Found package configuration file:\n"
" " << this->FileFound << "\n"
"but it set " << foundVar << " to FALSE so package \"" <<
this->Name << "\" is considered to be NOT FOUND.";
/* clang-format on */
if (!notFoundMessage.empty()) {
e << " Reason given by package: \n" << notFoundMessage << "\n";
}
}
if (this->UseConfigFiles) {
if (this->UseFindModules) {
e << "By not providing \"Find" << this->Name
<< ".cmake\" in "
"CMAKE_MODULE_PATH this project has asked CMake to find a "
"package configuration file provided by \""
<< this->Name << "\", "
"but CMake did not find one.\n";
// 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>::const_iterator i =
this->ConsideredConfigs.begin();
i != duplicate_end; ++i) {
e << " " << i->filename << ", version: " << i->version << "\n";
}
} else {
std::string requestedVersionString;
if (!this->Version.empty()) {
requestedVersionString = " (requested version ";
requestedVersionString += this->Version;
requestedVersionString += ")";
}
if (this->Configs.size() == 1) {
e << "Could not find a package configuration file named \""
<< this->Configs[0] << "\" provided by package \"" << this->Name
<< "\"" << requestedVersionString << ".\n";
} else {
e << "Could not find a package configuration file provided by \""
<< this->Name << "\"" << requestedVersionString
<< " with any of the following names:\n"
<< cmWrap(" ", this->Configs, "", "\n") << "\n";
if (this->UseConfigFiles) {
if (this->UseFindModules) {
e << "By not providing \"Find" << this->Name
<< ".cmake\" in "
"CMAKE_MODULE_PATH this project has asked CMake to find a "
"package configuration file provided by \""
<< this->Name << "\", "
"but CMake did not find one.\n";
}
if (this->Configs.size() == 1) {
e << "Could not find a package configuration file named \""
<< this->Configs[0] << "\" provided by package \"" << this->Name
<< "\"" << requestedVersionString << ".\n";
} else {
e << "Could not find a package configuration file provided by \""
<< this->Name << "\"" << requestedVersionString
<< " with any of the following names:\n"
<< cmWrap(" ", this->Configs, "", "\n") << "\n";
}
e << "Add the installation prefix of \"" << this->Name
<< "\" to "
"CMAKE_PREFIX_PATH or set \""
<< this->Variable
<< "\" to a "
"directory containing one of the above files. "
"If \""
<< this->Name << "\" provides a separate development "
"package or SDK, be sure it has been installed.";
} else // if(!this->UseFindModules && !this->UseConfigFiles)
{
e << "No \"Find" << this->Name << ".cmake\" found in "
<< "CMAKE_MODULE_PATH.";
aw
<< "Find" << this->Name
<< ".cmake must either be part of this "
"project itself, in this case adjust CMAKE_MODULE_PATH so that "
"it points to the correct location inside its source tree.\n"
"Or it must be installed by a package which has already been "
"found via find_package(). In this case make sure that "
"package has indeed been found and adjust CMAKE_MODULE_PATH to "
"contain the location where that package has installed "
"Find"
<< this->Name
<< ".cmake. This must be a location "
"provided by that package. This error in general means that "
"the buildsystem of this project is relying on a Find-module "
"without ensuring that it is actually available.\n";
}
}
e << "Add the installation prefix of \"" << this->Name
<< "\" to "
"CMAKE_PREFIX_PATH or set \""
<< this->Variable << "\" to a "
"directory containing one of the above files. "
"If \""
<< this->Name << "\" provides a separate development "
"package or SDK, be sure it has been installed.";
} else // if(!this->UseFindModules && !this->UseConfigFiles)
{
e << "No \"Find" << this->Name << ".cmake\" found in "
<< "CMAKE_MODULE_PATH.";
aw << "Find" << this->Name
<< ".cmake must either be part of this "
"project itself, in this case adjust CMAKE_MODULE_PATH so that "
"it points to the correct location inside its source tree.\n"
"Or it must be installed by a package which has already been "
"found via find_package(). In this case make sure that "
"package has indeed been found and adjust CMAKE_MODULE_PATH to "
"contain the location where that package has installed "
"Find"
<< this->Name
<< ".cmake. This must be a location "
"provided by that package. This error in general means that "
"the buildsystem of this project is relying on a Find-module "
"without ensuring that it is actually available.\n";
this->Makefile->IssueMessage(
this->Required ? cmake::FATAL_ERROR : cmake::WARNING, e.str());
if (this->Required) {
cmSystemTools::SetFatalErrorOccured();
}
}
this->Makefile->IssueMessage(
this->Required ? cmake::FATAL_ERROR : cmake::WARNING, e.str());
if (this->Required) {
cmSystemTools::SetFatalErrorOccured();
if (!aw.str().empty()) {
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, aw.str());
}
}
if (!aw.str().empty()) {
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, aw.str());
// output result if in config mode but not in quiet mode
else if (!this->Quiet) {
std::ostringstream aw;
aw << "Could NOT find " << this->Name << " (missing: " << this->Name
<< "_DIR)";
this->Makefile->DisplayStatus(aw.str().c_str(), -1);
}
}
......
CMake Warning at MissingConfig.cmake:1 \(find_package\):
Could not find a package configuration file provided by "NotHere" with any
of the following names:
NotHereConfig.cmake
nothere-config.cmake
Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
"NotHere_DIR" to a directory containing one of the above files. If
"NotHere" provides a separate development package or SDK, be sure it has
been installed.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
CMake Warning at MissingConfig.cmake:2 \(message\):
This warning must be reachable.
Call Stack \(most recent call first\):
......
-- Could NOT find NotHere \(missing: NotHere_DIR\)
-- Could NOT find NotHere \(missing: NotHere_DIR\)
CMake Warning at MissingConfigOneName.cmake:1 \(find_package\):
Could not find a package configuration file named "NotHereConfig.cmake"
provided by package "NotHere".
Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
"NotHere_DIR" to a directory containing one of the above files. If
"NotHere" provides a separate development package or SDK, be sure it has
been installed.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
-- Could NOT find NotHere \(missing: NotHere_DIR\)
CMake Warning at MissingConfigVersion.cmake:1 \(find_package\):
Could not find a package configuration file provided by "NotHere"
\(requested version 1\.2\) with any of the following names:
NotHereConfig.cmake
nothere-config.cmake
Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
"NotHere_DIR" to a directory containing one of the above files. If
"NotHere" provides a separate development package or SDK, be sure it has
been installed.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
-- Could NOT find NotHere \(missing: NotHere_DIR\)
CMake Warning at SetFoundFALSE.cmake:2 \(find_package\):
Found package configuration file:
.*/Tests/RunCMake/find_package/SetFoundFALSEConfig.cmake
but it set SetFoundFALSE_FOUND to FALSE so package "SetFoundFALSE" is
considered to be NOT FOUND.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
-- Could NOT find SetFoundFALSE \(missing: SetFoundFALSE_DIR\)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment