ENH: Added support for looking through CMAKE_MODULE_PATH to locate Find<name>.cmake modules.

This commit is contained in:
Brad King 2003-01-22 10:40:48 -05:00
parent 486454ef78
commit af96ba019e
1 changed files with 31 additions and 10 deletions

View File

@ -101,18 +101,39 @@ bool cmFindPackageCommand::InitialPass(std::vector<std::string> const& args)
//----------------------------------------------------------------------------
bool cmFindPackageCommand::FindModule(bool& found)
{
// If there is a find module, use it.
std::string module = m_Makefile->GetDefinition("CMAKE_ROOT");
module += "/Modules/Find";
module += this->Name;
module += ".cmake";
// Search the CMAKE_MODULE_PATH for a Find<name>.cmake module.
found = false;
// TODO: CMAKE_PACKAGE_PATH for looking for Find<name>.cmake
// modules?
if(cmSystemTools::FileExists(module.c_str()))
std::string module;
std::vector<std::string> modulePath;
const char* def = m_Makefile->GetDefinition("CMAKE_MODULE_PATH");
if(def)
{
found = true;
return this->ReadListFile(module.c_str());
cmSystemTools::ExpandListArgument(def, modulePath);
}
// Also search in the standard modules location.
def = m_Makefile->GetDefinition("CMAKE_ROOT");
if(def)
{
std::string rootModules = def;
rootModules += "/Modules";
modulePath.push_back(rootModules);
}
// Look through the possible module directories.
for(std::vector<std::string>::iterator i = modulePath.begin();
i != modulePath.end(); ++i)
{
module = *i;
cmSystemTools::ConvertToUnixSlashes(module);
module += "/Find";
module += this->Name;
module += ".cmake";
if(cmSystemTools::FileExists(module.c_str()))
{
found = true;
return this->ReadListFile(module.c_str());
}
}
return true;
}