[Cmake-commits] CMake branch, next, updated. v2.8.7-2949-g7688b6e

Brad King brad.king at kitware.com
Tue Feb 28 15:16:05 EST 2012


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  7688b6e6fb404848b815d0efb6fd9c3f365c9d06 (commit)
       via  eeaaffcb2f68254ccd5cc6fbf4d13fed41d40774 (commit)
       via  52dffb9fbf31b70ef8b16fc21c3efb4da7046a78 (commit)
       via  d3651041e9f16876d227c757254256039d62d85b (commit)
       via  31ead5f695182dbb96196f9795b6437e013c6567 (commit)
       via  6d8308314adbc3ff504b836b3989db9939de1e0b (commit)
       via  9c39bbd47420a74d50fab2b421baf630f13343ec (commit)
       via  f310f6729149551ca73a853789413f9a36f86ced (commit)
       via  7d67dcf52bddcd8863f00d7bb6e6e7e22a966951 (commit)
       via  978d89b99db233f2fbe5a9cfa4c7acdca93e6442 (commit)
      from  6c1f28618dc31610d4d3ebd06698a04074b15c98 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7688b6e6fb404848b815d0efb6fd9c3f365c9d06
commit 7688b6e6fb404848b815d0efb6fd9c3f365c9d06
Merge: 6c1f286 eeaaffc
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Feb 28 15:15:56 2012 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Feb 28 15:15:56 2012 -0500

    Merge topic 'find_package-improve-messages' into next
    
    eeaaffc find_package: Test error and warning messages in failure cases
    52dffb9 Merge branch 'test-CMakeCommands' into find_package-improve-messages
    d365104 find_package: Optionally warn when implicitly using Config mode
    31ead5f find_package: Reject mixed use of MODULE- and CONFIG-only options
    6d83083 find_package: mention requested version number in error message
    9c39bbd find_package: add CONFIG mode keyword alias for NO_MODULE
    f310f67 find_package: add MODULE mode to use only Find-modules
    7d67dcf find_package: improve error message when no Find module is present
    978d89b find_package: rename NoModule to UseFindModules


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=eeaaffcb2f68254ccd5cc6fbf4d13fed41d40774
commit eeaaffcb2f68254ccd5cc6fbf4d13fed41d40774
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Feb 28 13:34:53 2012 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 28 13:34:53 2012 -0500

    find_package: Test error and warning messages in failure cases
    
    Add a "CMakeCommands.find_package" test to run CMake on a bunch of cases
    in which find_package fails.  Check that the process return code and
    warning/error messages are as expected.  Record expected test output in
    corresponding files for reference by the check.  These files will also
    serve as a reference for the message text in each case.

diff --git a/Tests/CMakeCommands/CMakeLists.txt b/Tests/CMakeCommands/CMakeLists.txt
index e9e4020..aa400d0 100644
--- a/Tests/CMakeCommands/CMakeLists.txt
+++ b/Tests/CMakeCommands/CMakeLists.txt
@@ -8,3 +8,4 @@ macro(add_CMakeCommands_test test)
 endmacro()
 
 add_CMakeCommands_test(build_command)
+add_CMakeCommands_test(find_package)
diff --git a/Tests/CMakeCommands/find_package/CMakeLists.txt b/Tests/CMakeCommands/find_package/CMakeLists.txt
new file mode 100644
index 0000000..c2deed0
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8)
+project(${TEST} NONE)
+include(${TEST}.cmake)
diff --git a/Tests/CMakeCommands/find_package/MissingConfig-stderr.txt b/Tests/CMakeCommands/find_package/MissingConfig-stderr.txt
new file mode 100644
index 0000000..0d14dcb
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingConfig-stderr.txt
@@ -0,0 +1,13 @@
+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\)
diff --git a/Tests/CMakeCommands/find_package/MissingConfig.cmake b/Tests/CMakeCommands/find_package/MissingConfig.cmake
new file mode 100644
index 0000000..3cebef1
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingConfig.cmake
@@ -0,0 +1 @@
+find_package(NotHere CONFIG)
diff --git a/Tests/CMakeCommands/find_package/MissingConfigOneName-stderr.txt b/Tests/CMakeCommands/find_package/MissingConfigOneName-stderr.txt
new file mode 100644
index 0000000..10e71fa
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingConfigOneName-stderr.txt
@@ -0,0 +1,10 @@
+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\)
diff --git a/Tests/CMakeCommands/find_package/MissingConfigOneName.cmake b/Tests/CMakeCommands/find_package/MissingConfigOneName.cmake
new file mode 100644
index 0000000..11676a9
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingConfigOneName.cmake
@@ -0,0 +1 @@
+find_package(NotHere CONFIGS NotHereConfig.cmake)
diff --git a/Tests/CMakeCommands/find_package/MissingConfigRequired-result.txt b/Tests/CMakeCommands/find_package/MissingConfigRequired-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingConfigRequired-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/CMakeCommands/find_package/MissingConfigRequired-stderr.txt b/Tests/CMakeCommands/find_package/MissingConfigRequired-stderr.txt
new file mode 100644
index 0000000..56325d8
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingConfigRequired-stderr.txt
@@ -0,0 +1,13 @@
+CMake Error at MissingConfigRequired.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\)
diff --git a/Tests/CMakeCommands/find_package/MissingConfigRequired.cmake b/Tests/CMakeCommands/find_package/MissingConfigRequired.cmake
new file mode 100644
index 0000000..3c28552
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingConfigRequired.cmake
@@ -0,0 +1 @@
+find_package(NotHere CONFIG REQUIRED)
diff --git a/Tests/CMakeCommands/find_package/MissingConfigVersion-stderr.txt b/Tests/CMakeCommands/find_package/MissingConfigVersion-stderr.txt
new file mode 100644
index 0000000..2f5086e
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingConfigVersion-stderr.txt
@@ -0,0 +1,13 @@
+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\)
diff --git a/Tests/CMakeCommands/find_package/MissingConfigVersion.cmake b/Tests/CMakeCommands/find_package/MissingConfigVersion.cmake
new file mode 100644
index 0000000..ac35a79
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingConfigVersion.cmake
@@ -0,0 +1 @@
+find_package(NotHere 1.2 CONFIG)
diff --git a/Tests/CMakeCommands/find_package/MissingModule-stderr.txt b/Tests/CMakeCommands/find_package/MissingModule-stderr.txt
new file mode 100644
index 0000000..71b5eae
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingModule-stderr.txt
@@ -0,0 +1,21 @@
+CMake Warning at MissingModule.cmake:1 \(find_package\):
+  No "FindNotHere.cmake" found in CMAKE_MODULE_PATH.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
+
+
+CMake Warning \(dev\) at MissingModule.cmake:1 \(find_package\):
+  FindNotHere.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.
+
+  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 FindNotHere.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.
+
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
+This warning is for project developers.  Use -Wno-dev to suppress it.
diff --git a/Tests/CMakeCommands/find_package/MissingModule.cmake b/Tests/CMakeCommands/find_package/MissingModule.cmake
new file mode 100644
index 0000000..420539f
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingModule.cmake
@@ -0,0 +1 @@
+find_package(NotHere MODULE)
diff --git a/Tests/CMakeCommands/find_package/MissingModuleRequired-result.txt b/Tests/CMakeCommands/find_package/MissingModuleRequired-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingModuleRequired-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/CMakeCommands/find_package/MissingModuleRequired-stderr.txt b/Tests/CMakeCommands/find_package/MissingModuleRequired-stderr.txt
new file mode 100644
index 0000000..c3cd350
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingModuleRequired-stderr.txt
@@ -0,0 +1,21 @@
+CMake Error at MissingModuleRequired.cmake:1 \(find_package\):
+  No "FindNotHere.cmake" found in CMAKE_MODULE_PATH.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
+
+
+CMake Warning \(dev\) at MissingModuleRequired.cmake:1 \(find_package\):
+  FindNotHere.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.
+
+  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 FindNotHere.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.
+
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
+This warning is for project developers.  Use -Wno-dev to suppress it.
diff --git a/Tests/CMakeCommands/find_package/MissingModuleRequired.cmake b/Tests/CMakeCommands/find_package/MissingModuleRequired.cmake
new file mode 100644
index 0000000..07f36c5
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingModuleRequired.cmake
@@ -0,0 +1 @@
+find_package(NotHere MODULE REQUIRED)
diff --git a/Tests/CMakeCommands/find_package/MissingNormal-stderr.txt b/Tests/CMakeCommands/find_package/MissingNormal-stderr.txt
new file mode 100644
index 0000000..e5cbd97
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormal-stderr.txt
@@ -0,0 +1,17 @@
+CMake Warning at MissingNormal.cmake:1 \(find_package\):
+  By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+  asked CMake to find a package configuration file provided by "NotHere", but
+  CMake did not find one.
+
+  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\)
diff --git a/Tests/CMakeCommands/find_package/MissingNormal.cmake b/Tests/CMakeCommands/find_package/MissingNormal.cmake
new file mode 100644
index 0000000..778cd38
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormal.cmake
@@ -0,0 +1 @@
+find_package(NotHere)
diff --git a/Tests/CMakeCommands/find_package/MissingNormalRequired-result.txt b/Tests/CMakeCommands/find_package/MissingNormalRequired-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormalRequired-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/CMakeCommands/find_package/MissingNormalRequired-stderr.txt b/Tests/CMakeCommands/find_package/MissingNormalRequired-stderr.txt
new file mode 100644
index 0000000..ac52aec
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormalRequired-stderr.txt
@@ -0,0 +1,17 @@
+CMake Error at MissingNormalRequired.cmake:1 \(find_package\):
+  By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+  asked CMake to find a package configuration file provided by "NotHere", but
+  CMake did not find one.
+
+  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\)
diff --git a/Tests/CMakeCommands/find_package/MissingNormalRequired.cmake b/Tests/CMakeCommands/find_package/MissingNormalRequired.cmake
new file mode 100644
index 0000000..5c33fca
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormalRequired.cmake
@@ -0,0 +1 @@
+find_package(NotHere REQUIRED)
diff --git a/Tests/CMakeCommands/find_package/MissingNormalVersion-stderr.txt b/Tests/CMakeCommands/find_package/MissingNormalVersion-stderr.txt
new file mode 100644
index 0000000..36de800
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormalVersion-stderr.txt
@@ -0,0 +1,17 @@
+CMake Warning at MissingNormalVersion.cmake:1 \(find_package\):
+  By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+  asked CMake to find a package configuration file provided by "NotHere", but
+  CMake did not find one.
+
+  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\)
diff --git a/Tests/CMakeCommands/find_package/MissingNormalVersion.cmake b/Tests/CMakeCommands/find_package/MissingNormalVersion.cmake
new file mode 100644
index 0000000..2d9ce4e
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormalVersion.cmake
@@ -0,0 +1 @@
+find_package(NotHere 1.2)
diff --git a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew-stderr.txt b/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew-stderr.txt
new file mode 100644
index 0000000..d34f23c
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew-stderr.txt
@@ -0,0 +1,30 @@
+CMake Warning \(dev\) at MissingNormalWarnNoModuleNew.cmake:3 \(find_package\):
+  find_package called without either MODULE or CONFIG option and no
+  FindNotHere.cmake module is in CMAKE_MODULE_PATH.  Add MODULE to
+  exclusively request Module mode and fail if FindNotHere.cmake is missing.
+  Add CONFIG to exclusively request Config mode and search for a package
+  configuration file provided by NotHere \(NotHereConfig.cmake or
+  nothere-config.cmake\).
+
+  \(Variable CMAKE_FIND_PACKAGE_WARN_NO_MODULE enabled this warning.\)
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
+This warning is for project developers.  Use -Wno-dev to suppress it.
+
+CMake Warning at MissingNormalWarnNoModuleNew.cmake:3 \(find_package\):
+  By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+  asked CMake to find a package configuration file provided by "NotHere", but
+  CMake did not find one.
+
+  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\)
diff --git a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew.cmake b/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew.cmake
new file mode 100644
index 0000000..0211249
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew.cmake
@@ -0,0 +1,3 @@
+set(CMAKE_FIND_PACKAGE_WARN_NO_MODULE 1)
+set(CMAKE_MINIMUM_REQUIRED_VERSION 2.8.8)
+find_package(NotHere)
diff --git a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld-stderr.txt b/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld-stderr.txt
new file mode 100644
index 0000000..b336b56
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld-stderr.txt
@@ -0,0 +1,29 @@
+CMake Warning \(dev\) at MissingNormalWarnNoModuleOld.cmake:2 \(find_package\):
+  find_package called without NO_MODULE option and no FindNotHere.cmake
+  module is in CMAKE_MODULE_PATH.  Add NO_MODULE to exclusively request
+  Config mode and search for a package configuration file provided by NotHere
+  \(NotHereConfig.cmake or nothere-config.cmake\).  Otherwise make
+  FindNotHere.cmake available in CMAKE_MODULE_PATH.
+
+  \(Variable CMAKE_FIND_PACKAGE_WARN_NO_MODULE enabled this warning.\)
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
+This warning is for project developers.  Use -Wno-dev to suppress it.
+
+CMake Warning at MissingNormalWarnNoModuleOld.cmake:2 \(find_package\):
+  By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+  asked CMake to find a package configuration file provided by "NotHere", but
+  CMake did not find one.
+
+  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\)
diff --git a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld.cmake b/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld.cmake
new file mode 100644
index 0000000..1c4a775
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_FIND_PACKAGE_WARN_NO_MODULE 1)
+find_package(NotHere)
diff --git a/Tests/CMakeCommands/find_package/MixedModeOptions-result.txt b/Tests/CMakeCommands/find_package/MixedModeOptions-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MixedModeOptions-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt b/Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt
new file mode 100644
index 0000000..b867022
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt
@@ -0,0 +1,14 @@
+CMake Error at MixedModeOptions.cmake:1 \(find_package\):
+  find_package given options exclusive to Module mode:
+
+    MODULE
+
+  and options exclusive to Config mode:
+
+    CONFIG
+    CONFIGS
+    NO_DEFAULT_PATH
+
+  The options are incompatible.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
diff --git a/Tests/CMakeCommands/find_package/MixedModeOptions.cmake b/Tests/CMakeCommands/find_package/MixedModeOptions.cmake
new file mode 100644
index 0000000..7f78ee0
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/MixedModeOptions.cmake
@@ -0,0 +1 @@
+find_package(NotHere MODULE CONFIG CONFIGS NotHereConfig.cmake NO_DEFAULT_PATH)
diff --git a/Tests/CMakeCommands/find_package/test.cmake b/Tests/CMakeCommands/find_package/test.cmake
new file mode 100644
index 0000000..dd1072e
--- /dev/null
+++ b/Tests/CMakeCommands/find_package/test.cmake
@@ -0,0 +1,80 @@
+if(NOT DEFINED dir)
+  message(FATAL_ERROR "dir not defined")
+endif()
+
+if(NOT DEFINED gen)
+  message(FATAL_ERROR "gen not defined")
+endif()
+
+# TODO: Generalize this for other tests.
+function(run_test test)
+  set(top_src "${CMAKE_CURRENT_LIST_DIR}")
+  set(top_bin "${dir}")
+  if(EXISTS ${top_src}/${test}-result.txt)
+    file(READ ${top_src}/${test}-result.txt expect_result)
+    string(REGEX REPLACE "\n+$" "" expect_result "${expect_result}")
+  else()
+    set(expect_result 0)
+  endif()
+  foreach(o out err)
+    if(EXISTS ${top_src}/${test}-std${o}.txt)
+      file(READ ${top_src}/${test}-std${o}.txt expect_std${o})
+      string(REGEX REPLACE "\n+$" "" expect_std${o} "${expect_std${o}}")
+    else()
+      unset(expect_std${o})
+    endif()
+  endforeach()
+  set(source_dir "${top_src}")
+  set(binary_dir "${top_bin}/${test}-build")
+  file(REMOVE_RECURSE "${binary_dir}")
+  file(MAKE_DIRECTORY "${binary_dir}")
+  execute_process(
+    COMMAND ${CMAKE_COMMAND} "${source_dir}" -G "${gen}" -DTEST=${test}
+    WORKING_DIRECTORY "${binary_dir}"
+    OUTPUT_VARIABLE actual_stdout
+    ERROR_VARIABLE actual_stderr
+    RESULT_VARIABLE actual_result
+    )
+  set(msg "")
+  if(NOT "${actual_result}" STREQUAL "${expect_result}")
+    set(msg "${msg}Result is [${actual_result}], not [${expect_result}].\n")
+  endif()
+  foreach(o out err)
+    string(REGEX REPLACE "\n+$" "" actual_std${o} "${actual_std${o}}")
+    set(expect_${o} "")
+    if(DEFINED expect_std${o})
+      if(NOT "${actual_std${o}}" MATCHES "${expect_std${o}}")
+        string(REGEX REPLACE "\n" "\n expect-${o}> " expect_${o}
+          " expect-${o}> ${expect_std${o}}")
+        set(expect_${o} "Expected std${o} to match:\n${expect_${o}}\n")
+        set(msg "${msg}std${o} does not match that expected.\n")
+      endif()
+    endif()
+  endforeach()
+  if(msg)
+    string(REGEX REPLACE "\n" "\n actual-out> " actual_out " actual-out> ${actual_stdout}")
+    string(REGEX REPLACE "\n" "\n actual-err> " actual_err " actual-err> ${actual_stderr}")
+    message(SEND_ERROR "${test} - FAILED:\n"
+      "${msg}"
+      "${expect_out}"
+      "Actual stdout:\n${actual_out}\n"
+      "${expect_err}"
+      "Actual stderr:\n${actual_err}\n"
+      )
+  else()
+    message(STATUS "${test} - PASSED")
+  endif()
+endfunction()
+
+run_test(MissingNormal)
+run_test(MissingNormalRequired)
+run_test(MissingNormalVersion)
+run_test(MissingNormalWarnNoModuleOld)
+run_test(MissingNormalWarnNoModuleNew)
+run_test(MissingModule)
+run_test(MissingModuleRequired)
+run_test(MissingConfig)
+run_test(MissingConfigOneName)
+run_test(MissingConfigRequired)
+run_test(MissingConfigVersion)
+run_test(MixedModeOptions)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=52dffb9fbf31b70ef8b16fc21c3efb4da7046a78
commit 52dffb9fbf31b70ef8b16fc21c3efb4da7046a78
Merge: d365104 5e1a5c4
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Feb 28 11:36:22 2012 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 28 11:36:22 2012 -0500

    Merge branch 'test-CMakeCommands' into find_package-improve-messages


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d3651041e9f16876d227c757254256039d62d85b
commit d3651041e9f16876d227c757254256039d62d85b
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Feb 28 09:51:10 2012 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 28 10:01:44 2012 -0500

    find_package: Optionally warn when implicitly using Config mode
    
    Define variable CMAKE_FIND_PACKAGE_WARN_NO_MODULE for use by a project
    that wants to use an explicit mode in every call to find_package in
    order to generate more specific failure messages.  Word the warning
    using the new CONFIG and MODULE mode keywords when the minimum required
    version of CMake is new enough to have them.  Otherwise word the warning
    using the old NO_MODULE mode keyword.
    
    Inspired-by: Alex Neundorf <neundorf at kde.org>

diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx
index 1cab2b5..f3125ce 100644
--- a/Source/cmDocumentVariables.cxx
+++ b/Source/cmDocumentVariables.cxx
@@ -746,6 +746,26 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
      "Variables That Change Behavior");
 
   cm->DefineProperty
+    ("CMAKE_FIND_PACKAGE_WARN_NO_MODULE", cmProperty::VARIABLE,
+     "Tell find_package to warn if called without an explicit mode.",
+     "If find_package is called without an explicit mode option "
+     "(MODULE, CONFIG or NO_MODULE) and no Find<pkg>.cmake module is "
+     "in CMAKE_MODULE_PATH then CMake implicitly assumes that the "
+     "caller intends to search for a package configuration file.  "
+     "If no package configuration file is found then the wording "
+     "of the failure message must account for both the case that the "
+     "package is really missing and the case that the project has a "
+     "bug and failed to provide the intended Find module.  "
+     "If instead the caller specifies an explicit mode option then "
+     "the failure message can be more specific."
+     "\n"
+     "Set CMAKE_FIND_PACKAGE_WARN_NO_MODULE to TRUE to tell find_package "
+     "to warn when it implicitly assumes Config mode.  "
+     "This helps developers enforce use of an explicit mode in all calls "
+     "to find_package within a project.", false,
+     "Variables That Change Behavior");
+
+  cm->DefineProperty
     ("CMAKE_USER_MAKE_RULES_OVERRIDE", cmProperty::VARIABLE,
      "Specify a CMake file that overrides platform information.",
      "CMake loads the specified file while enabling support for each "
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 437f47a..d632570 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -73,6 +73,7 @@ cmFindPackageCommand::cmFindPackageCommand()
   this->VersionFoundPatch = 0;
   this->VersionFoundTweak = 0;
   this->VersionFoundCount = 0;
+  this->RequiredCMakeVersion = 0;
 }
 
 //----------------------------------------------------------------------------
@@ -372,6 +373,15 @@ bool cmFindPackageCommand
     return false;
     }
 
+  // Lookup required version of CMake.
+  if(const char* rv =
+     this->Makefile->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION"))
+    {
+    unsigned int v[3] = {0,0,0};
+    sscanf(rv, "%u.%u.%u", &v[0], &v[1], &v[2]);
+    this->RequiredCMakeVersion = CMake_VERSION_ENCODE(v[0],v[1],v[2]);
+    }
+
   // Check for debug mode.
   this->DebugMode = this->Makefile->IsOn("CMAKE_FIND_DEBUG_MODE");
 
@@ -691,6 +701,37 @@ bool cmFindPackageCommand
       }
     }
 
+  if(this->UseFindModules && this->UseConfigFiles &&
+     this->Makefile->IsOn("CMAKE_FIND_PACKAGE_WARN_NO_MODULE"))
+    {
+    cmOStringStream aw;
+    if(this->RequiredCMakeVersion >= CMake_VERSION_ENCODE(2,8,8))
+      {
+      aw << "find_package called without either MODULE or CONFIG option and "
+        "no Find" << this->Name << ".cmake module is in CMAKE_MODULE_PATH.  "
+        "Add MODULE to exclusively request Module mode and fail if "
+        "Find" << this->Name << ".cmake is missing.  "
+        "Add CONFIG to exclusively request Config mode and search for a "
+        "package configuration file provided by " << this->Name <<
+        " (" << this->Name << "Config.cmake or " <<
+        cmSystemTools::LowerCase(this->Name) << "-config.cmake).  ";
+      }
+    else
+      {
+      aw << "find_package called without NO_MODULE option and no "
+        "Find" << this->Name << ".cmake module is in CMAKE_MODULE_PATH.  "
+        "Add NO_MODULE to exclusively request Config mode and search for a "
+        "package configuration file provided by " << this->Name <<
+        " (" << this->Name << "Config.cmake or " <<
+        cmSystemTools::LowerCase(this->Name) << "-config.cmake).  "
+        "Otherwise make Find" << this->Name << ".cmake available in "
+        "CMAKE_MODULE_PATH.";
+      }
+    aw << "\n"
+      "(Variable CMAKE_FIND_PACKAGE_WARN_NO_MODULE enabled this warning.)";
+    this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, aw.str());
+    }
+
   // No find module.  Assume the project has a CMake config file.  Use
   // a <package>_DIR cache variable to locate it.
   this->Variable = this->Name;
diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h
index 560df9b..7269749 100644
--- a/Source/cmFindPackageCommand.h
+++ b/Source/cmFindPackageCommand.h
@@ -130,6 +130,7 @@ private:
   unsigned int VersionFoundPatch;
   unsigned int VersionFoundTweak;
   unsigned int VersionFoundCount;
+  unsigned int RequiredCMakeVersion;
   bool Quiet;
   bool Required;
   bool Compatibility_1_6;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=31ead5f695182dbb96196f9795b6437e013c6567
commit 31ead5f695182dbb96196f9795b6437e013c6567
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Feb 28 08:56:50 2012 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 28 09:58:31 2012 -0500

    find_package: Reject mixed use of MODULE- and CONFIG-only options
    
    Many options imply exclusive Config mode.  The new MODULE option
    implies exclusive Module mode.  Do not allow mixed combinations.

diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 86eb2c8..437f47a 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -415,7 +415,8 @@ bool cmFindPackageCommand
   Doing doing = DoingNone;
   cmsys::RegularExpression version("^[0-9.]+$");
   bool haveVersion = false;
-  std::string haveModeString = "";
+  std::set<unsigned int> configArgs;
+  std::set<unsigned int> moduleArgs;
   for(unsigned int i=1; i < args.size(); ++i)
     {
     if(args[i] == "QUIET")
@@ -431,48 +432,18 @@ bool cmFindPackageCommand
       }
     else if(args[i] == "MODULE")
       {
-      if(!haveModeString.empty())
-        {
-        cmOStringStream e;
-        e << "given " << args[i] << ", but mode is already set to "
-          << haveModeString << ".";
-        this->SetError(e.str().c_str());
-        return false;
-        }
-
-      this->UseConfigFiles = false;
+      moduleArgs.insert(i);
       doing = DoingNone;
-      haveModeString = args[i];
       }
     else if(args[i] == "CONFIG")
       {
-      if(!haveModeString.empty())
-        {
-        cmOStringStream e;
-        e << "given " << args[i] << ", but mode is already set to "
-          << haveModeString << ".";
-        this->SetError(e.str().c_str());
-        return false;
-        }
-
-      this->UseFindModules = false;
+      configArgs.insert(i);
       doing = DoingNone;
-      haveModeString = args[i];
       }
     else if(args[i] == "NO_MODULE")
       {
-      if(!haveModeString.empty())
-        {
-        cmOStringStream e;
-        e << "given " << args[i] << ", but mode is already set to "
-          << haveModeString << ".";
-        this->SetError(e.str().c_str());
-        return false;
-        }
-
-      this->UseFindModules = false;
+      configArgs.insert(i);
       doing = DoingNone;
-      haveModeString = args[i];
       }
     else if(args[i] == "REQUIRED")
       {
@@ -486,31 +457,31 @@ bool cmFindPackageCommand
       }
     else if(args[i] == "NAMES")
       {
-      this->UseFindModules = false;
+      configArgs.insert(i);
       this->Compatibility_1_6 = false;
       doing = DoingNames;
       }
     else if(args[i] == "PATHS")
       {
-      this->UseFindModules = false;
+      configArgs.insert(i);
       this->Compatibility_1_6 = false;
       doing = DoingPaths;
       }
     else if(args[i] == "HINTS")
       {
-      this->UseFindModules = false;
+      configArgs.insert(i);
       this->Compatibility_1_6 = false;
       doing = DoingHints;
       }
     else if(args[i] == "PATH_SUFFIXES")
       {
-      this->UseFindModules = false;
+      configArgs.insert(i);
       this->Compatibility_1_6 = false;
       doing = DoingPathSuffixes;
       }
     else if(args[i] == "CONFIGS")
       {
-      this->UseFindModules = false;
+      configArgs.insert(i);
       this->Compatibility_1_6 = false;
       doing = DoingConfigs;
       }
@@ -523,27 +494,27 @@ bool cmFindPackageCommand
     else if(args[i] == "NO_CMAKE_PACKAGE_REGISTRY")
       {
       this->NoUserRegistry = true;
-      this->UseFindModules = false;
+      configArgs.insert(i);
       this->Compatibility_1_6 = false;
       doing = DoingNone;
       }
     else if(args[i] == "NO_CMAKE_SYSTEM_PACKAGE_REGISTRY")
       {
       this->NoSystemRegistry = true;
-      this->UseFindModules = false;
+      configArgs.insert(i);
       this->Compatibility_1_6 = false;
       doing = DoingNone;
       }
     else if(args[i] == "NO_CMAKE_BUILDS_PATH")
       {
       this->NoBuilds = true;
-      this->UseFindModules = false;
+      configArgs.insert(i);
       this->Compatibility_1_6 = false;
       doing = DoingNone;
       }
     else if(this->CheckCommonArgument(args[i]))
       {
-      this->UseFindModules = false;
+      configArgs.insert(i);
       this->Compatibility_1_6 = false;
       doing = DoingNone;
       }
@@ -603,6 +574,29 @@ bool cmFindPackageCommand
       }
     }
 
+  // Maybe choose one mode exclusively.
+  this->UseFindModules = configArgs.empty();
+  this->UseConfigFiles = moduleArgs.empty();
+  if(!this->UseFindModules && !this->UseConfigFiles)
+    {
+    cmOStringStream e;
+    e << "given options exclusive to Module mode:\n";
+    for(std::set<unsigned int>::const_iterator si = moduleArgs.begin();
+        si != moduleArgs.end(); ++si)
+      {
+      e << "  " << args[*si] << "\n";
+      }
+    e << "and options exclusive to Config mode:\n";
+    for(std::set<unsigned int>::const_iterator si = configArgs.begin();
+        si != configArgs.end(); ++si)
+      {
+      e << "  " << args[*si] << "\n";
+      }
+    e << "The options are incompatible.";
+    this->SetError(e.str().c_str());
+    return false;
+    }
+
   // Ignore EXACT with no version.
   if(this->Version.empty() && this->VersionExact)
     {

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6d8308314adbc3ff504b836b3989db9939de1e0b
commit 6d8308314adbc3ff504b836b3989db9939de1e0b
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Fri Feb 17 11:37:29 2012 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 28 09:58:31 2012 -0500

    find_package: mention requested version number in error message
    
    When neither a Find-module or a config file can be found print the
    required version so the user knows which version of the package to
    install.

diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 8e6debb..86eb2c8 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -962,6 +962,14 @@ bool cmFindPackageCommand::HandlePackageMode()
       }
     else
       {
+      std::string requestedVersionString;
+      if(!this->Version.empty())
+        {
+        requestedVersionString = " (requested version ";
+        requestedVersionString += this->Version;
+        requestedVersionString += ")";
+        }
+
       if (this->UseConfigFiles)
         {
         if(this->UseFindModules)
@@ -976,12 +984,13 @@ bool cmFindPackageCommand::HandlePackageMode()
           {
           e << "Could not find a package configuration file named \""
             << this->Configs[0] << "\" provided by package \""
-            << this->Name << "\".\n";
+            << this->Name << "\"" << requestedVersionString <<".\n";
           }
         else
           {
           e << "Could not find a package configuration file provided by \""
-            << this->Name << "\" with any of the following names:\n";
+            << this->Name << "\"" << requestedVersionString
+            << " with any of the following names:\n";
           for(std::vector<std::string>::const_iterator ci =
                 this->Configs.begin();
               ci != this->Configs.end(); ++ci)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9c39bbd47420a74d50fab2b421baf630f13343ec
commit 9c39bbd47420a74d50fab2b421baf630f13343ec
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Mon Feb 20 22:09:10 2012 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 28 09:58:31 2012 -0500

    find_package: add CONFIG mode keyword alias for NO_MODULE

diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index c3c037c..8e6debb 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -130,7 +130,8 @@ void cmFindPackageCommand::GenerateDocumentation()
     "proceeds to Config mode.\n"
     "The complete Config mode command signature is:\n"
     "  find_package(<package> [version] [EXACT] [QUIET]\n"
-    "               [[REQUIRED|COMPONENTS] [components...]] [NO_MODULE]\n"
+    "               [[REQUIRED|COMPONENTS] [components...]]\n"
+    "               [CONFIG|NO_MODULE]\n"
     "               [NO_POLICY_SCOPE]\n"
     "               [NAMES name1 [name2 ...]]\n"
     "               [CONFIGS config1 [config2 ...]]\n"
@@ -148,9 +149,10 @@ void cmFindPackageCommand::GenerateDocumentation()
     "               [CMAKE_FIND_ROOT_PATH_BOTH |\n"
     "                ONLY_CMAKE_FIND_ROOT_PATH |\n"
     "                NO_CMAKE_FIND_ROOT_PATH])\n"
-    "The NO_MODULE option may be used to skip Module mode explicitly.  "
-    "It is also implied by use of options not specified in the reduced "
-    "signature.  "
+    "The CONFIG option may be used to skip Module mode explicitly and "
+    "switch to Config mode.  It is synonymous to using NO_MODULE.  "
+    "Config mode is also implied by use of options not specified in the "
+    "reduced signature.  "
     "\n"
     "Config mode attempts to locate a configuration file provided by the "
     "package to be found.  A cache entry called <package>_DIR is created to "
@@ -442,6 +444,21 @@ bool cmFindPackageCommand
       doing = DoingNone;
       haveModeString = args[i];
       }
+    else if(args[i] == "CONFIG")
+      {
+      if(!haveModeString.empty())
+        {
+        cmOStringStream e;
+        e << "given " << args[i] << ", but mode is already set to "
+          << haveModeString << ".";
+        this->SetError(e.str().c_str());
+        return false;
+        }
+
+      this->UseFindModules = false;
+      doing = DoingNone;
+      haveModeString = args[i];
+      }
     else if(args[i] == "NO_MODULE")
       {
       if(!haveModeString.empty())

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f310f6729149551ca73a853789413f9a36f86ced
commit f310f6729149551ca73a853789413f9a36f86ced
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Mon Feb 20 22:09:10 2012 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 28 09:58:01 2012 -0500

    find_package: add MODULE mode to use only Find-modules
    
    The new mode differ from default mode in that that it doesn't fallback
    to config mode.  The default mode stays unchanged.

diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index c02d385..c3c037c 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -57,6 +57,7 @@ cmFindPackageCommand::cmFindPackageCommand()
   this->NoUserRegistry = false;
   this->NoSystemRegistry = false;
   this->NoBuilds = false;
+  this->UseConfigFiles = true;
   this->UseFindModules = true;
   this->DebugMode = false;
   this->UseLib64Paths = false;
@@ -86,7 +87,7 @@ void cmFindPackageCommand::GenerateDocumentation()
   cmSystemTools::ReplaceString(this->GenericDocumentationPathsOrder,
                                "FIND_XXX", "find_package");
   this->CommandDocumentation =
-    "  find_package(<package> [version] [EXACT] [QUIET]\n"
+    "  find_package(<package> [version] [EXACT] [QUIET] [MODULE]\n"
     "               [[REQUIRED|COMPONENTS] [components...]]\n"
     "               [NO_POLICY_SCOPE])\n"
     "Finds and loads settings from an external project.  "
@@ -94,6 +95,7 @@ void cmFindPackageCommand::GenerateDocumentation()
     "When the package is found package-specific information is provided "
     "through variables documented by the package itself.  "
     "The QUIET option disables messages if the package cannot be found.  "
+    "The MODULE option disables the second signature documented below.  "
     "The REQUIRED option stops processing with an error message if the "
     "package cannot be found.  "
     "A package-specific list of components may be listed after the "
@@ -124,7 +126,8 @@ void cmFindPackageCommand::GenerateDocumentation()
     "and producing any needed messages.  "
     "Many find-modules provide limited or no support for versioning; "
     "check the module documentation.  "
-    "If no module is found the command proceeds to Config mode.\n"
+    "If no module is found and the MODULE option is not given the command "
+    "proceeds to Config mode.\n"
     "The complete Config mode command signature is:\n"
     "  find_package(<package> [version] [EXACT] [QUIET]\n"
     "               [[REQUIRED|COMPONENTS] [components...]] [NO_MODULE]\n"
@@ -410,6 +413,7 @@ bool cmFindPackageCommand
   Doing doing = DoingNone;
   cmsys::RegularExpression version("^[0-9.]+$");
   bool haveVersion = false;
+  std::string haveModeString = "";
   for(unsigned int i=1; i < args.size(); ++i)
     {
     if(args[i] == "QUIET")
@@ -423,10 +427,35 @@ bool cmFindPackageCommand
       this->Compatibility_1_6 = false;
       doing = DoingNone;
       }
+    else if(args[i] == "MODULE")
+      {
+      if(!haveModeString.empty())
+        {
+        cmOStringStream e;
+        e << "given " << args[i] << ", but mode is already set to "
+          << haveModeString << ".";
+        this->SetError(e.str().c_str());
+        return false;
+        }
+
+      this->UseConfigFiles = false;
+      doing = DoingNone;
+      haveModeString = args[i];
+      }
     else if(args[i] == "NO_MODULE")
       {
+      if(!haveModeString.empty())
+        {
+        cmOStringStream e;
+        e << "given " << args[i] << ", but mode is already set to "
+          << haveModeString << ".";
+        this->SetError(e.str().c_str());
+        return false;
+        }
+
       this->UseFindModules = false;
       doing = DoingNone;
+      haveModeString = args[i];
       }
     else if(args[i] == "REQUIRED")
       {
@@ -831,41 +860,44 @@ bool cmFindPackageCommand::HandlePackageMode()
 
   // Try to load the config file if the directory is known
   bool fileFound = false;
-  if(!cmSystemTools::IsOff(def))
+  if (this->UseConfigFiles)
     {
-    // Get the directory from the variable value.
-    std::string dir = def;
-    cmSystemTools::ConvertToUnixSlashes(dir);
-
-    // Treat relative paths with respect to the current source dir.
-    if(!cmSystemTools::FileIsFullPath(dir.c_str()))
+    if(!cmSystemTools::IsOff(def))
       {
-      dir = "/" + dir;
-      dir = this->Makefile->GetCurrentDirectory() + dir;
+      // Get the directory from the variable value.
+      std::string dir = def;
+      cmSystemTools::ConvertToUnixSlashes(dir);
+
+      // Treat relative paths with respect to the current source dir.
+      if(!cmSystemTools::FileIsFullPath(dir.c_str()))
+        {
+        dir = "/" + dir;
+        dir = this->Makefile->GetCurrentDirectory() + dir;
+        }
+      // The file location was cached.  Look for the correct file.
+      std::string file;
+      if (this->FindConfigFile(dir, file))
+        {
+        this->FileFound = file;
+        fileFound = true;
+        }
+      def = this->Makefile->GetDefinition(this->Variable.c_str());
       }
-    // The file location was cached.  Look for the correct file.
-    std::string file;
-    if (this->FindConfigFile(dir, file))
+
+    // Search for the config file if it is not already found.
+    if(cmSystemTools::IsOff(def) || !fileFound)
       {
-      this->FileFound = file;
-      fileFound = true;
+      fileFound = this->FindConfig();
+      def = this->Makefile->GetDefinition(this->Variable.c_str());
       }
-    def = this->Makefile->GetDefinition(this->Variable.c_str());
-    }
 
-  // Search for the config file if it is not already found.
-  if(cmSystemTools::IsOff(def) || !fileFound)
-    {
-    fileFound = this->FindConfig();
-    def = this->Makefile->GetDefinition(this->Variable.c_str());
-    }
-
-  // Sanity check.
-  if(fileFound && this->FileFound.empty())
-    {
-    this->Makefile->IssueMessage(
-      cmake::INTERNAL_ERROR, "fileFound is true but FileFound is empty!");
-    fileFound = false;
+    // Sanity check.
+    if(fileFound && this->FileFound.empty())
+      {
+      this->Makefile->IssueMessage(
+        cmake::INTERNAL_ERROR, "fileFound is true but FileFound is empty!");
+      fileFound = false;
+      }
     }
 
   // If the directory for the config file was found, try to read the file.
@@ -893,6 +925,7 @@ bool cmFindPackageCommand::HandlePackageMode()
     {
     // The variable is not set.
     cmOStringStream e;
+    cmOStringStream aw;
     // If there are files in ConsideredConfigs, it means that FooConfig.cmake
     // have been found, but they didn't have appropriate versions.
     if (this->ConsideredConfigs.size() > 0)
@@ -912,40 +945,67 @@ bool cmFindPackageCommand::HandlePackageMode()
       }
     else
       {
-      if(this->UseFindModules)
+      if (this->UseConfigFiles)
         {
-        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->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 << "\".\n";
-        }
-      else
-        {
-        e << "Could not find a package configuration file provided by \""
-          << this->Name << "\" with any of the following names:\n";
-        for(std::vector<std::string>::const_iterator ci =
-                                                       this->Configs.begin();
-            ci != this->Configs.end(); ++ci)
+        if(this->Configs.size() == 1)
           {
-          e << "  " << *ci << "\n";
+          e << "Could not find a package configuration file named \""
+            << this->Configs[0] << "\" provided by package \""
+            << this->Name << "\".\n";
+          }
+        else
+          {
+          e << "Could not find a package configuration file provided by \""
+            << this->Name << "\" with any of the following names:\n";
+          for(std::vector<std::string>::const_iterator ci =
+                this->Configs.begin();
+              ci != this->Configs.end(); ++ci)
+            {
+            e << "  " << *ci << "\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.";
+        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 (!aw.str().empty())
+      {
+      this->Makefile->IssueMessage(cmake::AUTHOR_WARNING,aw.str());
+      }
     }
 
   // Set a variable marking whether the package was found.
diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h
index 513c49c..560df9b 100644
--- a/Source/cmFindPackageCommand.h
+++ b/Source/cmFindPackageCommand.h
@@ -133,6 +133,7 @@ private:
   bool Quiet;
   bool Required;
   bool Compatibility_1_6;
+  bool UseConfigFiles;
   bool UseFindModules;
   bool NoUserRegistry;
   bool NoSystemRegistry;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7d67dcf52bddcd8863f00d7bb6e6e7e22a966951
commit 7d67dcf52bddcd8863f00d7bb6e6e7e22a966951
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Fri Feb 24 20:33:21 2012 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 28 09:56:49 2012 -0500

    find_package: improve error message when no Find module is present
    
    Explain exactly why CMake is looking for a package configuration file
    and who is expected to provide what:
    
     CMake Error at CMakeLists.txt:7 (find_package):
      By not providing "Find<pkg>.cmake" in CMAKE_MODULE_PATH the caller
      has asked CMake to find a package configuration file provided by
      "<pkg>", but CMake did not find one.
    
      Could not find a package configuration file provided by "<pkg>"
      with any of the names:
    
        <pkg>Config.cmake
        <pkg>-config.cmake
    
      Add the installation prefix of "<pkg>" to CMAKE_PREFIX_PATH or
      set "<pkg>_DIR" to a directory containing one of the above files.
      If "<pkg>" provides separate development package or SDK be sure
      it has been installed.
    
    The first paragraph explains how CMake is interpreting the intention of
    the caller.  This puts the blame or credit at the call site in the
    project code where it belongs both when it is a bug and when it is
    intentional.  It can be dropped in NO_MODULE mode.
    
    Suggested-by: Brad King <brad.king at kitware.com>

diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 5254de8..c02d385 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -912,38 +912,37 @@ bool cmFindPackageCommand::HandlePackageMode()
       }
     else
       {
-      e << "Could not find ";
       if(this->UseFindModules)
         {
-        e << "module Find" << this->Name << ".cmake or ";
+        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";
         }
-      e << "a configuration file for package " << this->Name << ".\n";
-      if(this->UseFindModules)
-        {
-        e << "Adjust CMAKE_MODULE_PATH to find Find"
-          << this->Name << ".cmake or set ";
-        }
-      else
-        {
-        e << "Set ";
-        }
-      e << this->Variable << " to the directory containing a CMake "
-        << "configuration file for " << this->Name << ".  ";
+
       if(this->Configs.size() == 1)
         {
-        e << "The file will be called " << this->Configs[0];
+        e << "Could not find a package configuration file named \""
+          << this->Configs[0] << "\" provided by package \"" << this->Name << "\".\n";
         }
       else
         {
-        e << "The file will have one of the following names:\n";
-        for(std::vector<std::string>::const_iterator ci=this->Configs.begin();
+        e << "Could not find a package configuration file provided by \""
+          << this->Name << "\" with any of the following names:\n";
+        for(std::vector<std::string>::const_iterator ci =
+                                                       this->Configs.begin();
             ci != this->Configs.end(); ++ci)
           {
           e << "  " << *ci << "\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.";
+      }
 
     this->Makefile->IssueMessage(
       this->Required? cmake::FATAL_ERROR : cmake::WARNING, e.str());

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=978d89b99db233f2fbe5a9cfa4c7acdca93e6442
commit 978d89b99db233f2fbe5a9cfa4c7acdca93e6442
Author:     Alex Neundorf <neundorf at kde.org>
AuthorDate: Fri Feb 17 21:31:08 2012 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Feb 27 16:36:29 2012 -0500

    find_package: rename NoModule to UseFindModules
    
    ...positive logic is easier to handle
    
    Alex

diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index b0a7607..5254de8 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -57,7 +57,7 @@ cmFindPackageCommand::cmFindPackageCommand()
   this->NoUserRegistry = false;
   this->NoSystemRegistry = false;
   this->NoBuilds = false;
-  this->NoModule = false;
+  this->UseFindModules = true;
   this->DebugMode = false;
   this->UseLib64Paths = false;
   this->PolicyScope = true;
@@ -425,7 +425,7 @@ bool cmFindPackageCommand
       }
     else if(args[i] == "NO_MODULE")
       {
-      this->NoModule = true;
+      this->UseFindModules = false;
       doing = DoingNone;
       }
     else if(args[i] == "REQUIRED")
@@ -440,31 +440,31 @@ bool cmFindPackageCommand
       }
     else if(args[i] == "NAMES")
       {
-      this->NoModule = true;
+      this->UseFindModules = false;
       this->Compatibility_1_6 = false;
       doing = DoingNames;
       }
     else if(args[i] == "PATHS")
       {
-      this->NoModule = true;
+      this->UseFindModules = false;
       this->Compatibility_1_6 = false;
       doing = DoingPaths;
       }
     else if(args[i] == "HINTS")
       {
-      this->NoModule = true;
+      this->UseFindModules = false;
       this->Compatibility_1_6 = false;
       doing = DoingHints;
       }
     else if(args[i] == "PATH_SUFFIXES")
       {
-      this->NoModule = true;
+      this->UseFindModules = false;
       this->Compatibility_1_6 = false;
       doing = DoingPathSuffixes;
       }
     else if(args[i] == "CONFIGS")
       {
-      this->NoModule = true;
+      this->UseFindModules = false;
       this->Compatibility_1_6 = false;
       doing = DoingConfigs;
       }
@@ -477,27 +477,27 @@ bool cmFindPackageCommand
     else if(args[i] == "NO_CMAKE_PACKAGE_REGISTRY")
       {
       this->NoUserRegistry = true;
-      this->NoModule = true;
+      this->UseFindModules = false;
       this->Compatibility_1_6 = false;
       doing = DoingNone;
       }
     else if(args[i] == "NO_CMAKE_SYSTEM_PACKAGE_REGISTRY")
       {
       this->NoSystemRegistry = true;
-      this->NoModule = true;
+      this->UseFindModules = false;
       this->Compatibility_1_6 = false;
       doing = DoingNone;
       }
     else if(args[i] == "NO_CMAKE_BUILDS_PATH")
       {
       this->NoBuilds = true;
-      this->NoModule = true;
+      this->UseFindModules = false;
       this->Compatibility_1_6 = false;
       doing = DoingNone;
       }
     else if(this->CheckCommonArgument(args[i]))
       {
-      this->NoModule = true;
+      this->UseFindModules = false;
       this->Compatibility_1_6 = false;
       doing = DoingNone;
       }
@@ -636,7 +636,7 @@ bool cmFindPackageCommand
   this->SetModuleVariables(components);
 
   // See if there is a Find<package>.cmake module.
-  if(!this->NoModule)
+  if(this->UseFindModules)
     {
     bool foundModule = false;
     if(!this->FindModule(foundModule))
@@ -913,12 +913,12 @@ bool cmFindPackageCommand::HandlePackageMode()
     else
       {
       e << "Could not find ";
-      if(!this->NoModule)
+      if(this->UseFindModules)
         {
         e << "module Find" << this->Name << ".cmake or ";
         }
       e << "a configuration file for package " << this->Name << ".\n";
-      if(!this->NoModule)
+      if(this->UseFindModules)
         {
         e << "Adjust CMAKE_MODULE_PATH to find Find"
           << this->Name << ".cmake or set ";
diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h
index e736352..513c49c 100644
--- a/Source/cmFindPackageCommand.h
+++ b/Source/cmFindPackageCommand.h
@@ -133,7 +133,7 @@ private:
   bool Quiet;
   bool Required;
   bool Compatibility_1_6;
-  bool NoModule;
+  bool UseFindModules;
   bool NoUserRegistry;
   bool NoSystemRegistry;
   bool NoBuilds;

-----------------------------------------------------------------------

Summary of changes:
 Source/cmDocumentVariables.cxx                     |   20 ++
 Source/cmFindPackageCommand.cxx                    |  262 ++++++++++++++------
 Source/cmFindPackageCommand.h                      |    4 +-
 Tests/CMakeCommands/CMakeLists.txt                 |    1 +
 Tests/CMakeCommands/find_package/CMakeLists.txt    |    3 +
 .../find_package/MissingConfig-stderr.txt          |   13 +
 .../CMakeCommands/find_package/MissingConfig.cmake |    1 +
 .../find_package/MissingConfigOneName-stderr.txt   |   10 +
 .../find_package/MissingConfigOneName.cmake        |    1 +
 .../find_package/MissingConfigRequired-result.txt  |    1 +
 .../find_package/MissingConfigRequired-stderr.txt  |   13 +
 .../find_package/MissingConfigRequired.cmake       |    1 +
 .../find_package/MissingConfigVersion-stderr.txt   |   13 +
 .../find_package/MissingConfigVersion.cmake        |    1 +
 .../find_package/MissingModule-stderr.txt          |   21 ++
 .../CMakeCommands/find_package/MissingModule.cmake |    1 +
 .../find_package/MissingModuleRequired-result.txt  |    1 +
 .../find_package/MissingModuleRequired-stderr.txt  |   21 ++
 .../find_package/MissingModuleRequired.cmake       |    1 +
 .../find_package/MissingNormal-stderr.txt          |   17 ++
 .../CMakeCommands/find_package/MissingNormal.cmake |    1 +
 .../find_package/MissingNormalRequired-result.txt  |    1 +
 .../find_package/MissingNormalRequired-stderr.txt  |   17 ++
 .../find_package/MissingNormalRequired.cmake       |    1 +
 .../find_package/MissingNormalVersion-stderr.txt   |   17 ++
 .../find_package/MissingNormalVersion.cmake        |    1 +
 .../MissingNormalWarnNoModuleNew-stderr.txt        |   30 +++
 .../MissingNormalWarnNoModuleNew.cmake             |    3 +
 .../MissingNormalWarnNoModuleOld-stderr.txt        |   29 +++
 .../MissingNormalWarnNoModuleOld.cmake             |    2 +
 .../find_package/MixedModeOptions-result.txt       |    1 +
 .../find_package/MixedModeOptions-stderr.txt       |   14 +
 .../find_package/MixedModeOptions.cmake            |    1 +
 Tests/CMakeCommands/find_package/test.cmake        |   80 ++++++
 34 files changed, 532 insertions(+), 72 deletions(-)
 create mode 100644 Tests/CMakeCommands/find_package/CMakeLists.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingConfig-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingConfig.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingConfigOneName-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingConfigOneName.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingConfigRequired-result.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingConfigRequired-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingConfigRequired.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingConfigVersion-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingConfigVersion.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingModule-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingModule.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingModuleRequired-result.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingModuleRequired-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingModuleRequired.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormal-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormal.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormalRequired-result.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormalRequired-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormalRequired.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormalVersion-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormalVersion.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld.cmake
 create mode 100644 Tests/CMakeCommands/find_package/MixedModeOptions-result.txt
 create mode 100644 Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt
 create mode 100644 Tests/CMakeCommands/find_package/MixedModeOptions.cmake
 create mode 100644 Tests/CMakeCommands/find_package/test.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list