diff options
Diffstat (limited to 'Source/cmFindProgramCommand.cxx')
-rw-r--r-- | Source/cmFindProgramCommand.cxx | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/Source/cmFindProgramCommand.cxx b/Source/cmFindProgramCommand.cxx index c3d3275..81678b3 100644 --- a/Source/cmFindProgramCommand.cxx +++ b/Source/cmFindProgramCommand.cxx @@ -14,6 +14,7 @@ =========================================================================*/ #include "cmFindProgramCommand.h" +#include "cmCacheManager.h" #include <stdlib.h> #include <stdio.h> @@ -26,13 +27,22 @@ bool cmFindProgramCommand::Invoke(std::vector<std::string>& args) this->SetError("called with incorrect number of arguments"); return false; } - - std::vector<std::string> path; - cmSystemTools::GetPath(path); - 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++; + 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 + = cmCacheManager::GetInstance()->GetCacheValue(define); + if(cacheValue) + { + m_Makefile->AddDefinition(define, cacheValue); + return true; + } + // if it is not in the cache, then search the system path + std::vector<std::string> path; + cmSystemTools::GetPath(path); for(; i != args.end(); ++i) { for(int k=0; k < path.size(); k++) @@ -45,6 +55,10 @@ bool cmFindProgramCommand::Invoke(std::vector<std::string>& args) #endif if(cmSystemTools::FileExists(tryPath.c_str())) { + // Save the value in the cache + cmCacheManager::GetInstance()->AddCacheEntry(define, + tryPath.c_str(), + cmCacheManager::FILEPATH); m_Makefile->AddDefinition(define, tryPath.c_str()); return true; } |