diff options
author | Ken Martin <ken.martin@kitware.com> | 2001-04-26 09:38:31 -0400 |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2001-04-26 09:38:31 -0400 |
commit | 30ad61805bbb5b34e2bf17cb36ce2e9601ed0f25 (patch) | |
tree | 5b3fcc1f4f7c87868910d1714f9d08ede81afbd0 /Source/cmFindPathCommand.cxx | |
parent | ab7f884a444d929c5598a8384526e5f4044bc515 (diff) | |
download | cmake-30ad61805bbb5b34e2bf17cb36ce2e9601ed0f25.tar.gz |
bug fixes
Diffstat (limited to 'Source/cmFindPathCommand.cxx')
-rw-r--r-- | Source/cmFindPathCommand.cxx | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/Source/cmFindPathCommand.cxx b/Source/cmFindPathCommand.cxx new file mode 100644 index 0000000000..5235ae2bd6 --- /dev/null +++ b/Source/cmFindPathCommand.cxx @@ -0,0 +1,74 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) 2000 National Path of Medicine + All rights reserved. + + See COPYRIGHT.txt for copyright details. + +=========================================================================*/ +#include "cmFindPathCommand.h" +#include "cmCacheManager.h" + +// cmFindPathCommand +bool cmFindPathCommand::Invoke(std::vector<std::string>& args) +{ + if(args.size() < 2) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + // 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(args[0].c_str()); + if(cacheValue) + { + if(strcmp(cacheValue, "NOTFOUND") != 0) + { + m_Makefile->AddDefinition(args[0].c_str(), cacheValue); + } + return true; + } + + std::vector<std::string> path; + // add any user specified paths + for (unsigned int j = 2; j < args.size(); j++) + { + // expand variables + std::string exp = args[j]; + m_Makefile->ExpandVariablesInString(exp); + path.push_back(exp); + } + + // add the standard path + cmSystemTools::GetPath(path); + unsigned int k; + for(k=0; k < path.size(); k++) + { + std::string tryPath = path[k]; + tryPath += "/"; + tryPath += args[1]; + if(cmSystemTools::FileExists(tryPath.c_str())) + { + m_Makefile->AddDefinition(args[0].c_str(), path[k].c_str()); + cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(), + path[k].c_str(), + cmCacheManager::PATH); + return true; + } + } + + cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(), + "NOTFOUND", + cmCacheManager::PATH); + return true; +} + |