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.
This commit is contained in:
parent
52dffb9fbf
commit
eeaaffcb2f
|
@ -8,3 +8,4 @@ macro(add_CMakeCommands_test test)
|
|||
endmacro()
|
||||
|
||||
add_CMakeCommands_test(build_command)
|
||||
add_CMakeCommands_test(find_package)
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
cmake_minimum_required(VERSION 2.8)
|
||||
project(${TEST} NONE)
|
||||
include(${TEST}.cmake)
|
|
@ -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\)
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere CONFIG)
|
|
@ -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\)
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere CONFIGS NotHereConfig.cmake)
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -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\)
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere CONFIG REQUIRED)
|
|
@ -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\)
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere 1.2 CONFIG)
|
|
@ -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.
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere MODULE)
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -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.
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere MODULE REQUIRED)
|
|
@ -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\)
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere)
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -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\)
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere REQUIRED)
|
|
@ -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\)
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere 1.2)
|
|
@ -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\)
|
|
@ -0,0 +1,3 @@
|
|||
set(CMAKE_FIND_PACKAGE_WARN_NO_MODULE 1)
|
||||
set(CMAKE_MINIMUM_REQUIRED_VERSION 2.8.8)
|
||||
find_package(NotHere)
|
|
@ -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\)
|
|
@ -0,0 +1,2 @@
|
|||
set(CMAKE_FIND_PACKAGE_WARN_NO_MODULE 1)
|
||||
find_package(NotHere)
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -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\)
|
|
@ -0,0 +1 @@
|
|||
find_package(NotHere MODULE CONFIG CONFIGS NotHereConfig.cmake NO_DEFAULT_PATH)
|
|
@ -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)
|
Loading…
Reference in New Issue