Commit 0ee7b8ea authored by David Cole's avatar David Cole Committed by Kitware Robot

Merge topic 'find_package-improve-messages'

eeaaffcb find_package: Test error and warning messages in failure cases
52dffb9f Merge branch 'test-CMakeCommands' into find_package-improve-messages
d3651041 find_package: Optionally warn when implicitly using Config mode
31ead5f6 find_package: Reject mixed use of MODULE- and CONFIG-only options
6d830831 find_package: mention requested version number in error message
9c39bbd4 find_package: add CONFIG mode keyword alias for NO_MODULE
f310f672 find_package: add MODULE mode to use only Find-modules
7d67dcf5 find_package: improve error message when no Find module is present
978d89b9 find_package: rename NoModule to UseFindModules
parents a1860aaf eeaaffcb
......@@ -745,6 +745,26 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"this package from the cache using the cache editor or cmake -U", false,
"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.",
......
This diff is collapsed.
......@@ -130,10 +130,12 @@ private:
unsigned int VersionFoundPatch;
unsigned int VersionFoundTweak;
unsigned int VersionFoundCount;
unsigned int RequiredCMakeVersion;
bool Quiet;
bool Required;
bool Compatibility_1_6;
bool NoModule;
bool UseConfigFiles;
bool UseFindModules;
bool NoUserRegistry;
bool NoSystemRegistry;
bool NoBuilds;
......
......@@ -8,3 +8,4 @@ macro(add_CMakeCommands_test test)
endmacro()
add_CMakeCommands_test(build_command)
add_CMakeCommands_test(find_package)
cmake_minimum_required(VERSION 2.8)
project(${TEST} NONE)
include(${TEST}.cmake)
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\)
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\)
find_package(NotHere CONFIGS NotHereConfig.cmake)
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\)
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\)
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.
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.
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\)
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\)
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\)
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\)
set(CMAKE_FIND_PACKAGE_WARN_NO_MODULE 1)
set(CMAKE_MINIMUM_REQUIRED_VERSION 2.8.8)
find_package(NotHere)
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\)
set(CMAKE_FIND_PACKAGE_WARN_NO_MODULE 1)
find_package(NotHere)
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\)
find_package(NotHere MODULE CONFIG CONFIGS NotHereConfig.cmake NO_DEFAULT_PATH)
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)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment