Hi Brad,
great idea! Your suggestion will make everybody happy.
I attached two patches implementing it.
Bye
Christoph
From 0df376954173184ca78becf3ab1888e6f718af8f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= <f...@grueninger.de>
Date: Fri, 28 Apr 2017 08:19:20 +0200
Subject: [PATCH 1/2] cmFindPackageCommand: shorten output for missing package
in config mode
If CONFIG or MODULE is given and the package is not REQUIRED,
output a one-liner instead of the lengthy warning.
---
Source/cmFindPackageCommand.cxx | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 17fa92ccd..dfb21f45d 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -727,7 +727,8 @@ bool cmFindPackageCommand::HandlePackageMode()
}
}
- if (result && !found && (!this->Quiet || this->Required)) {
+ if (result && !found &&
+ (this->Required || !(this->Quiet || (this->UseConfigFiles || !this->UseFindModules)))) {
// The variable is not set.
std::ostringstream e;
std::ostringstream aw;
@@ -827,6 +828,13 @@ bool cmFindPackageCommand::HandlePackageMode()
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, aw.str());
}
}
+ else if (result && !found && !this->Quiet) {
+ std::ostringstream aw;
+ aw << "Could NOT find " << this->Name
+ << " (missing: " << this->Name
+ << "-config.cmake)";
+ this->Makefile->DisplayStatus(aw.str().c_str(), -1);
+ }
// Set a variable marking whether the package was found.
this->Makefile->AddDefinition(foundVar, found ? "1" : "0");
--
2.12.0
From e67f01eead80309258decff22bf3134c1bb71bb3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= <f...@grueninger.de>
Date: Fri, 28 Apr 2017 23:36:20 +0200
Subject: [PATCH 2/2] cmFindPackageCommand: Split condition to improve
readability
---
Source/cmFindPackageCommand.cxx | 193 +++++++++++++++++++++-------------------
1 file changed, 99 insertions(+), 94 deletions(-)
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index dfb21f45d..d0eb967a9 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -727,113 +727,118 @@ bool cmFindPackageCommand::HandlePackageMode()
}
}
- if (result && !found &&
- (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 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 and not quiet or 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";
}
-
- 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";
+ } else {
+ std::string requestedVersionString;
+ if (!this->Version.empty()) {
+ requestedVersionString = " (requested version ";
+ requestedVersionString += this->Version;
+ requestedVersionString += ")";
}
- 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";
+ 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";
+ }
}
- }
- 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());
+ }
}
- }
- else if (result && !found && !this->Quiet) {
+ // in config mode but not in quiet mode
+ else if (!this->Quiet) {
std::ostringstream aw;
aw << "Could NOT find " << this->Name
<< " (missing: " << this->Name
<< "-config.cmake)";
this->Makefile->DisplayStatus(aw.str().c_str(), -1);
+ }
}
// Set a variable marking whether the package was found.
--
2.12.0
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers