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

Reply via email to