diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2006-03-02 18:30:22 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2006-03-02 18:30:22 (GMT) |
commit | a5825cd11af3a6def49c9528e77f4394babff7de (patch) | |
tree | cf8f0ed84fc150bd0befa0b00937deb0cb1cec0a /Source/cmFindProgramCommand.cxx | |
parent | 2f78d874a75e8032b90997df3449040c941b1b5b (diff) | |
download | CMake-a5825cd11af3a6def49c9528e77f4394babff7de.zip CMake-a5825cd11af3a6def49c9528e77f4394babff7de.tar.gz CMake-a5825cd11af3a6def49c9528e77f4394babff7de.tar.bz2 |
ENH: check in new find stuff
Diffstat (limited to 'Source/cmFindProgramCommand.cxx')
-rw-r--r-- | Source/cmFindProgramCommand.cxx | 145 |
1 files changed, 33 insertions, 112 deletions
diff --git a/Source/cmFindProgramCommand.cxx b/Source/cmFindProgramCommand.cxx index ad9a4d8..436d590 100644 --- a/Source/cmFindProgramCommand.cxx +++ b/Source/cmFindProgramCommand.cxx @@ -18,130 +18,51 @@ #include "cmCacheManager.h" #include <stdlib.h> +cmFindProgramCommand::cmFindProgramCommand() +{ + cmSystemTools::ReplaceString(this->GenericDocumentation, + "FIND_XXX", "FIND_PROGRAM"); + cmSystemTools::ReplaceString(this->GenericDocumentation, + "CMAKE_XXX_PATH", "CMAKE_PROGRAM_PATH"); + cmSystemTools::ReplaceString(this->GenericDocumentation, + "XXX_SYSTEM", ""); + cmSystemTools::ReplaceString(this->GenericDocumentation, + "CMAKE_SYSTEM_XXX_PATH", "CMAKE_SYSTEM_PROGRAM_PATH"); + cmSystemTools::ReplaceString(this->GenericDocumentation, + "SEARCH_XXX_DESC", "program"); + cmSystemTools::ReplaceString(this->GenericDocumentation, + "SEARCH_XXX", "program"); +} // cmFindProgramCommand bool cmFindProgramCommand::InitialPass(std::vector<std::string> const& argsIn) { - if(argsIn.size() < 2 ) + this->VariableDocumentation = "Path to a program."; + this->CMakePathName = "PROGRAM"; + // call cmFindBase::ParseArguments + if(!this->ParseArguments(argsIn)) { - this->SetError("called with incorrect number of arguments"); return false; } - std::string doc = "Path to a program."; - size_t size = argsIn.size(); - std::vector<std::string> args; - for(unsigned int j = 0; j < size; ++j) - { - if(argsIn[j] != "DOC") - { - args.push_back(argsIn[j]); - } - else - { - if(j+1 < size) - { - doc = argsIn[j+1]; - } - break; - } - } - - std::vector<std::string>::iterator i = args.begin(); - // Use the first argument as the name of something to be defined - const char* define = (*i).c_str(); - i++; // move iterator to next arg - // Now check and see if the value has been stored in the cache - // already, if so use that value and don't look for the program - const char* cacheValue - = m_Makefile->GetDefinition(define); - if(cacheValue && !cmSystemTools::IsNOTFOUND(cacheValue)) + if(this->AlreadyInCache) { return true; } - if(cacheValue) - { - cmCacheManager::CacheIterator it = - m_Makefile->GetCacheManager()->GetCacheIterator(args[0].c_str()); - if(!it.IsAtEnd()) - { - const char* hs = it.GetProperty("HELPSTRING"); - doc = hs?hs:"(none)"; - } - } - std::vector<std::string> path; - std::vector<std::string> names; - bool foundName = false; - bool foundPath = false; - bool doingNames = true; - bool no_system_path = false; - for (unsigned int j = 1; j < args.size(); ++j) - { - if(args[j] == "NAMES") - { - doingNames = true; - foundName = true; - } - else if (args[j] == "PATHS") - { - doingNames = false; - foundPath = true; - } - else if (args[j] == "NO_SYSTEM_PATH") - { - no_system_path = true; - } - else - { - if(doingNames) - { - names.push_back(args[j]); - } - else - { - cmSystemTools::ExpandRegistryValues(args[j]); - // Glob the entry in case of wildcards. - cmSystemTools::GlobDirs(args[j].c_str(), path); - } - } - } - // if it is not in the cache, then search the system path - // add any user specified paths - if(!foundPath && !foundName) + std::string result = cmSystemTools::FindProgram(this->Names, + this->SearchPaths); + if(result != "") { - path.clear(); - names.clear(); - names.push_back(args[1]); - for (unsigned int j = 2; j < args.size(); j++) - { - // expand variables - std::string exp = args[j]; - cmSystemTools::ExpandRegistryValues(exp); - - // Glob the entry in case of wildcards. - cmSystemTools::GlobDirs(exp.c_str(), path); - } - } - for(std::vector<std::string>::iterator it = names.begin(); - it != names.end() ; ++it) - { - // Try to find the program. - std::string result = cmSystemTools::FindProgram(it->c_str(), - path, - no_system_path); - if(result != "") - { - // Save the value in the cache - m_Makefile->AddCacheDefinition(define, - result.c_str(), - doc.c_str(), - cmCacheManager::FILEPATH); - - return true; - } + // Save the value in the cache + m_Makefile->AddCacheDefinition(this->VariableName.c_str(), + result.c_str(), + this->VariableDocumentation.c_str(), + cmCacheManager::FILEPATH); + + return true; } - m_Makefile->AddCacheDefinition(args[0].c_str(), - (args[0] + "-NOTFOUND").c_str(), - doc.c_str(), + m_Makefile->AddCacheDefinition(this->VariableName.c_str(), + (this->VariableName + "-NOTFOUND").c_str(), + this->VariableDocumentation.c_str(), cmCacheManager::FILEPATH); return true; } |