From af96ba019ef7eb5d393534b2870597771fcbe409 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 22 Jan 2003 10:40:48 -0500 Subject: ENH: Added support for looking through CMAKE_MODULE_PATH to locate Find.cmake modules. --- Source/cmFindPackageCommand.cxx | 41 +++++++++++++++++++++++++++++++---------- 1 file 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 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.cmake module. found = false; - // TODO: CMAKE_PACKAGE_PATH for looking for Find.cmake - // modules? - if(cmSystemTools::FileExists(module.c_str())) + std::string module; + std::vector 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::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; } -- cgit v0.12