Browse Source

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.
Brad King 13 years ago
parent
commit
eeaaffcb2f
31 changed files with 318 additions and 0 deletions
  1. 1 0
      Tests/CMakeCommands/CMakeLists.txt
  2. 3 0
      Tests/CMakeCommands/find_package/CMakeLists.txt
  3. 13 0
      Tests/CMakeCommands/find_package/MissingConfig-stderr.txt
  4. 1 0
      Tests/CMakeCommands/find_package/MissingConfig.cmake
  5. 10 0
      Tests/CMakeCommands/find_package/MissingConfigOneName-stderr.txt
  6. 1 0
      Tests/CMakeCommands/find_package/MissingConfigOneName.cmake
  7. 1 0
      Tests/CMakeCommands/find_package/MissingConfigRequired-result.txt
  8. 13 0
      Tests/CMakeCommands/find_package/MissingConfigRequired-stderr.txt
  9. 1 0
      Tests/CMakeCommands/find_package/MissingConfigRequired.cmake
  10. 13 0
      Tests/CMakeCommands/find_package/MissingConfigVersion-stderr.txt
  11. 1 0
      Tests/CMakeCommands/find_package/MissingConfigVersion.cmake
  12. 21 0
      Tests/CMakeCommands/find_package/MissingModule-stderr.txt
  13. 1 0
      Tests/CMakeCommands/find_package/MissingModule.cmake
  14. 1 0
      Tests/CMakeCommands/find_package/MissingModuleRequired-result.txt
  15. 21 0
      Tests/CMakeCommands/find_package/MissingModuleRequired-stderr.txt
  16. 1 0
      Tests/CMakeCommands/find_package/MissingModuleRequired.cmake
  17. 17 0
      Tests/CMakeCommands/find_package/MissingNormal-stderr.txt
  18. 1 0
      Tests/CMakeCommands/find_package/MissingNormal.cmake
  19. 1 0
      Tests/CMakeCommands/find_package/MissingNormalRequired-result.txt
  20. 17 0
      Tests/CMakeCommands/find_package/MissingNormalRequired-stderr.txt
  21. 1 0
      Tests/CMakeCommands/find_package/MissingNormalRequired.cmake
  22. 17 0
      Tests/CMakeCommands/find_package/MissingNormalVersion-stderr.txt
  23. 1 0
      Tests/CMakeCommands/find_package/MissingNormalVersion.cmake
  24. 30 0
      Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew-stderr.txt
  25. 3 0
      Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew.cmake
  26. 29 0
      Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld-stderr.txt
  27. 2 0
      Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld.cmake
  28. 1 0
      Tests/CMakeCommands/find_package/MixedModeOptions-result.txt
  29. 14 0
      Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt
  30. 1 0
      Tests/CMakeCommands/find_package/MixedModeOptions.cmake
  31. 80 0
      Tests/CMakeCommands/find_package/test.cmake

+ 1 - 0
Tests/CMakeCommands/CMakeLists.txt

@@ -8,3 +8,4 @@ macro(add_CMakeCommands_test test)
 endmacro()
 
 add_CMakeCommands_test(build_command)
+add_CMakeCommands_test(find_package)

+ 3 - 0
Tests/CMakeCommands/find_package/CMakeLists.txt

@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8)
+project(${TEST} NONE)
+include(${TEST}.cmake)

+ 13 - 0
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\)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingConfig.cmake

@@ -0,0 +1 @@
+find_package(NotHere CONFIG)

+ 10 - 0
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\)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingConfigOneName.cmake

@@ -0,0 +1 @@
+find_package(NotHere CONFIGS NotHereConfig.cmake)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingConfigRequired-result.txt

@@ -0,0 +1 @@
+1

+ 13 - 0
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\)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingConfigRequired.cmake

@@ -0,0 +1 @@
+find_package(NotHere CONFIG REQUIRED)

+ 13 - 0
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\)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingConfigVersion.cmake

@@ -0,0 +1 @@
+find_package(NotHere 1.2 CONFIG)

+ 21 - 0
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.

+ 1 - 0
Tests/CMakeCommands/find_package/MissingModule.cmake

@@ -0,0 +1 @@
+find_package(NotHere MODULE)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingModuleRequired-result.txt

@@ -0,0 +1 @@
+1

+ 21 - 0
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.

+ 1 - 0
Tests/CMakeCommands/find_package/MissingModuleRequired.cmake

@@ -0,0 +1 @@
+find_package(NotHere MODULE REQUIRED)

+ 17 - 0
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\)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingNormal.cmake

@@ -0,0 +1 @@
+find_package(NotHere)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingNormalRequired-result.txt

@@ -0,0 +1 @@
+1

+ 17 - 0
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\)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingNormalRequired.cmake

@@ -0,0 +1 @@
+find_package(NotHere REQUIRED)

+ 17 - 0
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\)

+ 1 - 0
Tests/CMakeCommands/find_package/MissingNormalVersion.cmake

@@ -0,0 +1 @@
+find_package(NotHere 1.2)

+ 30 - 0
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\)

+ 3 - 0
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)

+ 29 - 0
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\)

+ 2 - 0
Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld.cmake

@@ -0,0 +1,2 @@
+set(CMAKE_FIND_PACKAGE_WARN_NO_MODULE 1)
+find_package(NotHere)

+ 1 - 0
Tests/CMakeCommands/find_package/MixedModeOptions-result.txt

@@ -0,0 +1 @@
+1

+ 14 - 0
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\)

+ 1 - 0
Tests/CMakeCommands/find_package/MixedModeOptions.cmake

@@ -0,0 +1 @@
+find_package(NotHere MODULE CONFIG CONFIGS NotHereConfig.cmake NO_DEFAULT_PATH)

+ 80 - 0
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)