summaryrefslogtreecommitdiffstats
path: root/Source/cmFindPackageCommand.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmFindPackageCommand.cxx')
-rw-r--r--Source/cmFindPackageCommand.cxx41
1 files changed, 31 insertions, 10 deletions
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index c61cde2..4f0681f 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -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;
}