Merge topic 'find_package-improve-messages'
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
This commit is contained in:
commit
0ee7b8ea03
@ -745,6 +745,26 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
|
|||||||
"this package from the cache using the cache editor or cmake -U", false,
|
"this package from the cache using the cache editor or cmake -U", false,
|
||||||
"Variables That Change Behavior");
|
"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
|
cm->DefineProperty
|
||||||
("CMAKE_USER_MAKE_RULES_OVERRIDE", cmProperty::VARIABLE,
|
("CMAKE_USER_MAKE_RULES_OVERRIDE", cmProperty::VARIABLE,
|
||||||
"Specify a CMake file that overrides platform information.",
|
"Specify a CMake file that overrides platform information.",
|
||||||
|
@ -57,7 +57,8 @@ cmFindPackageCommand::cmFindPackageCommand()
|
|||||||
this->NoUserRegistry = false;
|
this->NoUserRegistry = false;
|
||||||
this->NoSystemRegistry = false;
|
this->NoSystemRegistry = false;
|
||||||
this->NoBuilds = false;
|
this->NoBuilds = false;
|
||||||
this->NoModule = false;
|
this->UseConfigFiles = true;
|
||||||
|
this->UseFindModules = true;
|
||||||
this->DebugMode = false;
|
this->DebugMode = false;
|
||||||
this->UseLib64Paths = false;
|
this->UseLib64Paths = false;
|
||||||
this->PolicyScope = true;
|
this->PolicyScope = true;
|
||||||
@ -72,6 +73,7 @@ cmFindPackageCommand::cmFindPackageCommand()
|
|||||||
this->VersionFoundPatch = 0;
|
this->VersionFoundPatch = 0;
|
||||||
this->VersionFoundTweak = 0;
|
this->VersionFoundTweak = 0;
|
||||||
this->VersionFoundCount = 0;
|
this->VersionFoundCount = 0;
|
||||||
|
this->RequiredCMakeVersion = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
@ -86,7 +88,7 @@ void cmFindPackageCommand::GenerateDocumentation()
|
|||||||
cmSystemTools::ReplaceString(this->GenericDocumentationPathsOrder,
|
cmSystemTools::ReplaceString(this->GenericDocumentationPathsOrder,
|
||||||
"FIND_XXX", "find_package");
|
"FIND_XXX", "find_package");
|
||||||
this->CommandDocumentation =
|
this->CommandDocumentation =
|
||||||
" find_package(<package> [version] [EXACT] [QUIET]\n"
|
" find_package(<package> [version] [EXACT] [QUIET] [MODULE]\n"
|
||||||
" [[REQUIRED|COMPONENTS] [components...]]\n"
|
" [[REQUIRED|COMPONENTS] [components...]]\n"
|
||||||
" [NO_POLICY_SCOPE])\n"
|
" [NO_POLICY_SCOPE])\n"
|
||||||
"Finds and loads settings from an external project. "
|
"Finds and loads settings from an external project. "
|
||||||
@ -94,6 +96,7 @@ void cmFindPackageCommand::GenerateDocumentation()
|
|||||||
"When the package is found package-specific information is provided "
|
"When the package is found package-specific information is provided "
|
||||||
"through variables documented by the package itself. "
|
"through variables documented by the package itself. "
|
||||||
"The QUIET option disables messages if the package cannot be found. "
|
"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 "
|
"The REQUIRED option stops processing with an error message if the "
|
||||||
"package cannot be found. "
|
"package cannot be found. "
|
||||||
"A package-specific list of components may be listed after the "
|
"A package-specific list of components may be listed after the "
|
||||||
@ -124,10 +127,12 @@ void cmFindPackageCommand::GenerateDocumentation()
|
|||||||
"and producing any needed messages. "
|
"and producing any needed messages. "
|
||||||
"Many find-modules provide limited or no support for versioning; "
|
"Many find-modules provide limited or no support for versioning; "
|
||||||
"check the module documentation. "
|
"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"
|
"The complete Config mode command signature is:\n"
|
||||||
" find_package(<package> [version] [EXACT] [QUIET]\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"
|
" [NO_POLICY_SCOPE]\n"
|
||||||
" [NAMES name1 [name2 ...]]\n"
|
" [NAMES name1 [name2 ...]]\n"
|
||||||
" [CONFIGS config1 [config2 ...]]\n"
|
" [CONFIGS config1 [config2 ...]]\n"
|
||||||
@ -145,9 +150,10 @@ void cmFindPackageCommand::GenerateDocumentation()
|
|||||||
" [CMAKE_FIND_ROOT_PATH_BOTH |\n"
|
" [CMAKE_FIND_ROOT_PATH_BOTH |\n"
|
||||||
" ONLY_CMAKE_FIND_ROOT_PATH |\n"
|
" ONLY_CMAKE_FIND_ROOT_PATH |\n"
|
||||||
" NO_CMAKE_FIND_ROOT_PATH])\n"
|
" NO_CMAKE_FIND_ROOT_PATH])\n"
|
||||||
"The NO_MODULE option may be used to skip Module mode explicitly. "
|
"The CONFIG option may be used to skip Module mode explicitly and "
|
||||||
"It is also implied by use of options not specified in the reduced "
|
"switch to Config mode. It is synonymous to using NO_MODULE. "
|
||||||
"signature. "
|
"Config mode is also implied by use of options not specified in the "
|
||||||
|
"reduced signature. "
|
||||||
"\n"
|
"\n"
|
||||||
"Config mode attempts to locate a configuration file provided by the "
|
"Config mode attempts to locate a configuration file provided by the "
|
||||||
"package to be found. A cache entry called <package>_DIR is created to "
|
"package to be found. A cache entry called <package>_DIR is created to "
|
||||||
@ -367,6 +373,15 @@ bool cmFindPackageCommand
|
|||||||
return false;
|
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.
|
// Check for debug mode.
|
||||||
this->DebugMode = this->Makefile->IsOn("CMAKE_FIND_DEBUG_MODE");
|
this->DebugMode = this->Makefile->IsOn("CMAKE_FIND_DEBUG_MODE");
|
||||||
|
|
||||||
@ -410,6 +425,8 @@ bool cmFindPackageCommand
|
|||||||
Doing doing = DoingNone;
|
Doing doing = DoingNone;
|
||||||
cmsys::RegularExpression version("^[0-9.]+$");
|
cmsys::RegularExpression version("^[0-9.]+$");
|
||||||
bool haveVersion = false;
|
bool haveVersion = false;
|
||||||
|
std::set<unsigned int> configArgs;
|
||||||
|
std::set<unsigned int> moduleArgs;
|
||||||
for(unsigned int i=1; i < args.size(); ++i)
|
for(unsigned int i=1; i < args.size(); ++i)
|
||||||
{
|
{
|
||||||
if(args[i] == "QUIET")
|
if(args[i] == "QUIET")
|
||||||
@ -423,9 +440,19 @@ bool cmFindPackageCommand
|
|||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingNone;
|
doing = DoingNone;
|
||||||
}
|
}
|
||||||
|
else if(args[i] == "MODULE")
|
||||||
|
{
|
||||||
|
moduleArgs.insert(i);
|
||||||
|
doing = DoingNone;
|
||||||
|
}
|
||||||
|
else if(args[i] == "CONFIG")
|
||||||
|
{
|
||||||
|
configArgs.insert(i);
|
||||||
|
doing = DoingNone;
|
||||||
|
}
|
||||||
else if(args[i] == "NO_MODULE")
|
else if(args[i] == "NO_MODULE")
|
||||||
{
|
{
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
doing = DoingNone;
|
doing = DoingNone;
|
||||||
}
|
}
|
||||||
else if(args[i] == "REQUIRED")
|
else if(args[i] == "REQUIRED")
|
||||||
@ -440,31 +467,31 @@ bool cmFindPackageCommand
|
|||||||
}
|
}
|
||||||
else if(args[i] == "NAMES")
|
else if(args[i] == "NAMES")
|
||||||
{
|
{
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingNames;
|
doing = DoingNames;
|
||||||
}
|
}
|
||||||
else if(args[i] == "PATHS")
|
else if(args[i] == "PATHS")
|
||||||
{
|
{
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingPaths;
|
doing = DoingPaths;
|
||||||
}
|
}
|
||||||
else if(args[i] == "HINTS")
|
else if(args[i] == "HINTS")
|
||||||
{
|
{
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingHints;
|
doing = DoingHints;
|
||||||
}
|
}
|
||||||
else if(args[i] == "PATH_SUFFIXES")
|
else if(args[i] == "PATH_SUFFIXES")
|
||||||
{
|
{
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingPathSuffixes;
|
doing = DoingPathSuffixes;
|
||||||
}
|
}
|
||||||
else if(args[i] == "CONFIGS")
|
else if(args[i] == "CONFIGS")
|
||||||
{
|
{
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingConfigs;
|
doing = DoingConfigs;
|
||||||
}
|
}
|
||||||
@ -477,27 +504,27 @@ bool cmFindPackageCommand
|
|||||||
else if(args[i] == "NO_CMAKE_PACKAGE_REGISTRY")
|
else if(args[i] == "NO_CMAKE_PACKAGE_REGISTRY")
|
||||||
{
|
{
|
||||||
this->NoUserRegistry = true;
|
this->NoUserRegistry = true;
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingNone;
|
doing = DoingNone;
|
||||||
}
|
}
|
||||||
else if(args[i] == "NO_CMAKE_SYSTEM_PACKAGE_REGISTRY")
|
else if(args[i] == "NO_CMAKE_SYSTEM_PACKAGE_REGISTRY")
|
||||||
{
|
{
|
||||||
this->NoSystemRegistry = true;
|
this->NoSystemRegistry = true;
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingNone;
|
doing = DoingNone;
|
||||||
}
|
}
|
||||||
else if(args[i] == "NO_CMAKE_BUILDS_PATH")
|
else if(args[i] == "NO_CMAKE_BUILDS_PATH")
|
||||||
{
|
{
|
||||||
this->NoBuilds = true;
|
this->NoBuilds = true;
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingNone;
|
doing = DoingNone;
|
||||||
}
|
}
|
||||||
else if(this->CheckCommonArgument(args[i]))
|
else if(this->CheckCommonArgument(args[i]))
|
||||||
{
|
{
|
||||||
this->NoModule = true;
|
configArgs.insert(i);
|
||||||
this->Compatibility_1_6 = false;
|
this->Compatibility_1_6 = false;
|
||||||
doing = DoingNone;
|
doing = DoingNone;
|
||||||
}
|
}
|
||||||
@ -557,6 +584,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.
|
// Ignore EXACT with no version.
|
||||||
if(this->Version.empty() && this->VersionExact)
|
if(this->Version.empty() && this->VersionExact)
|
||||||
{
|
{
|
||||||
@ -636,7 +686,7 @@ bool cmFindPackageCommand
|
|||||||
this->SetModuleVariables(components);
|
this->SetModuleVariables(components);
|
||||||
|
|
||||||
// See if there is a Find<package>.cmake module.
|
// See if there is a Find<package>.cmake module.
|
||||||
if(!this->NoModule)
|
if(this->UseFindModules)
|
||||||
{
|
{
|
||||||
bool foundModule = false;
|
bool foundModule = false;
|
||||||
if(!this->FindModule(foundModule))
|
if(!this->FindModule(foundModule))
|
||||||
@ -651,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
|
// No find module. Assume the project has a CMake config file. Use
|
||||||
// a <package>_DIR cache variable to locate it.
|
// a <package>_DIR cache variable to locate it.
|
||||||
this->Variable = this->Name;
|
this->Variable = this->Name;
|
||||||
@ -831,41 +912,44 @@ bool cmFindPackageCommand::HandlePackageMode()
|
|||||||
|
|
||||||
// Try to load the config file if the directory is known
|
// Try to load the config file if the directory is known
|
||||||
bool fileFound = false;
|
bool fileFound = false;
|
||||||
if(!cmSystemTools::IsOff(def))
|
if (this->UseConfigFiles)
|
||||||
{
|
{
|
||||||
// Get the directory from the variable value.
|
if(!cmSystemTools::IsOff(def))
|
||||||
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;
|
// Get the directory from the variable value.
|
||||||
dir = this->Makefile->GetCurrentDirectory() + dir;
|
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;
|
// Search for the config file if it is not already found.
|
||||||
if (this->FindConfigFile(dir, file))
|
if(cmSystemTools::IsOff(def) || !fileFound)
|
||||||
{
|
{
|
||||||
this->FileFound = file;
|
fileFound = this->FindConfig();
|
||||||
fileFound = true;
|
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.
|
// Sanity check.
|
||||||
if(cmSystemTools::IsOff(def) || !fileFound)
|
if(fileFound && this->FileFound.empty())
|
||||||
{
|
{
|
||||||
fileFound = this->FindConfig();
|
this->Makefile->IssueMessage(
|
||||||
def = this->Makefile->GetDefinition(this->Variable.c_str());
|
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.
|
// If the directory for the config file was found, try to read the file.
|
||||||
@ -893,6 +977,7 @@ bool cmFindPackageCommand::HandlePackageMode()
|
|||||||
{
|
{
|
||||||
// The variable is not set.
|
// The variable is not set.
|
||||||
cmOStringStream e;
|
cmOStringStream e;
|
||||||
|
cmOStringStream aw;
|
||||||
// If there are files in ConsideredConfigs, it means that FooConfig.cmake
|
// If there are files in ConsideredConfigs, it means that FooConfig.cmake
|
||||||
// have been found, but they didn't have appropriate versions.
|
// have been found, but they didn't have appropriate versions.
|
||||||
if (this->ConsideredConfigs.size() > 0)
|
if (this->ConsideredConfigs.size() > 0)
|
||||||
@ -912,41 +997,76 @@ bool cmFindPackageCommand::HandlePackageMode()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
e << "Could not find ";
|
std::string requestedVersionString;
|
||||||
if(!this->NoModule)
|
if(!this->Version.empty())
|
||||||
{
|
{
|
||||||
e << "module Find" << this->Name << ".cmake or ";
|
requestedVersionString = " (requested version ";
|
||||||
|
requestedVersionString += this->Version;
|
||||||
|
requestedVersionString += ")";
|
||||||
}
|
}
|
||||||
e << "a configuration file for package " << this->Name << ".\n";
|
|
||||||
if(!this->NoModule)
|
if (this->UseConfigFiles)
|
||||||
{
|
{
|
||||||
e << "Adjust CMAKE_MODULE_PATH to find Find"
|
if(this->UseFindModules)
|
||||||
<< 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];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
e << "The file will have one 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 << "By not providing \"Find" << this->Name << ".cmake\" in "
|
||||||
|
"CMAKE_MODULE_PATH this project has asked CMake to find a "
|
||||||
|
"package configuration file provided by \""<<this->Name<< "\", "
|
||||||
|
"but CMake did not find one.\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(this->Configs.size() == 1)
|
||||||
|
{
|
||||||
|
e << "Could not find a package configuration file named \""
|
||||||
|
<< this->Configs[0] << "\" provided by package \""
|
||||||
|
<< this->Name << "\"" << requestedVersionString <<".\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e << "Could not find a package configuration file provided by \""
|
||||||
|
<< this->Name << "\"" << requestedVersionString
|
||||||
|
<< " with any of the following names:\n";
|
||||||
|
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.";
|
||||||
|
}
|
||||||
|
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->Makefile->IssueMessage(
|
||||||
this->Required? cmake::FATAL_ERROR : cmake::WARNING, e.str());
|
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.
|
// Set a variable marking whether the package was found.
|
||||||
|
@ -130,10 +130,12 @@ private:
|
|||||||
unsigned int VersionFoundPatch;
|
unsigned int VersionFoundPatch;
|
||||||
unsigned int VersionFoundTweak;
|
unsigned int VersionFoundTweak;
|
||||||
unsigned int VersionFoundCount;
|
unsigned int VersionFoundCount;
|
||||||
|
unsigned int RequiredCMakeVersion;
|
||||||
bool Quiet;
|
bool Quiet;
|
||||||
bool Required;
|
bool Required;
|
||||||
bool Compatibility_1_6;
|
bool Compatibility_1_6;
|
||||||
bool NoModule;
|
bool UseConfigFiles;
|
||||||
|
bool UseFindModules;
|
||||||
bool NoUserRegistry;
|
bool NoUserRegistry;
|
||||||
bool NoSystemRegistry;
|
bool NoSystemRegistry;
|
||||||
bool NoBuilds;
|
bool NoBuilds;
|
||||||
|
@ -8,3 +8,4 @@ macro(add_CMakeCommands_test test)
|
|||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
add_CMakeCommands_test(build_command)
|
add_CMakeCommands_test(build_command)
|
||||||
|
add_CMakeCommands_test(find_package)
|
||||||
|
3
Tests/CMakeCommands/find_package/CMakeLists.txt
Normal file
3
Tests/CMakeCommands/find_package/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
project(${TEST} NONE)
|
||||||
|
include(${TEST}.cmake)
|
13
Tests/CMakeCommands/find_package/MissingConfig-stderr.txt
Normal file
13
Tests/CMakeCommands/find_package/MissingConfig-stderr.txt
Normal file
@ -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
Tests/CMakeCommands/find_package/MissingConfig.cmake
Normal file
1
Tests/CMakeCommands/find_package/MissingConfig.cmake
Normal file
@ -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)
|
21
Tests/CMakeCommands/find_package/MissingModule-stderr.txt
Normal file
21
Tests/CMakeCommands/find_package/MissingModule-stderr.txt
Normal file
@ -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
Tests/CMakeCommands/find_package/MissingModule.cmake
Normal file
1
Tests/CMakeCommands/find_package/MissingModule.cmake
Normal file
@ -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)
|
17
Tests/CMakeCommands/find_package/MissingNormal-stderr.txt
Normal file
17
Tests/CMakeCommands/find_package/MissingNormal-stderr.txt
Normal file
@ -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
Tests/CMakeCommands/find_package/MissingNormal.cmake
Normal file
1
Tests/CMakeCommands/find_package/MissingNormal.cmake
Normal file
@ -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
|
14
Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt
Normal file
14
Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt
Normal file
@ -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
Tests/CMakeCommands/find_package/MixedModeOptions.cmake
Normal file
1
Tests/CMakeCommands/find_package/MixedModeOptions.cmake
Normal file
@ -0,0 +1 @@
|
|||||||
|
find_package(NotHere MODULE CONFIG CONFIGS NotHereConfig.cmake NO_DEFAULT_PATH)
|
80
Tests/CMakeCommands/find_package/test.cmake
Normal file
80
Tests/CMakeCommands/find_package/test.cmake
Normal file
@ -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…
x
Reference in New Issue
Block a user