summaryrefslogtreecommitdiff
path: root/Source/cmFindPathCommand.cxx
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2001-04-26 09:38:31 -0400
committerKen Martin <ken.martin@kitware.com>2001-04-26 09:38:31 -0400
commit30ad61805bbb5b34e2bf17cb36ce2e9601ed0f25 (patch)
tree5b3fcc1f4f7c87868910d1714f9d08ede81afbd0 /Source/cmFindPathCommand.cxx
parentab7f884a444d929c5598a8384526e5f4044bc515 (diff)
downloadcmake-30ad61805bbb5b34e2bf17cb36ce2e9601ed0f25.tar.gz
bug fixes
Diffstat (limited to 'Source/cmFindPathCommand.cxx')
-rw-r--r--Source/cmFindPathCommand.cxx74
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;
+}
+