diff options
author | Will Schroeder <will.schroeder@kitware.com> | 2001-01-18 16:20:24 (GMT) |
---|---|---|
committer | Will Schroeder <will.schroeder@kitware.com> | 2001-01-18 16:20:24 (GMT) |
commit | 658614ff6a14411e2a697fac1f1717a7f4370bf0 (patch) | |
tree | 42702fd2580f03b4553d385afeaf42608700758b /Source/cmFindProgramCommand.cxx | |
parent | cacd6d160410660bcbc27f02b267833448c1eef1 (diff) | |
download | CMake-658614ff6a14411e2a697fac1f1717a7f4370bf0.zip CMake-658614ff6a14411e2a697fac1f1717a7f4370bf0.tar.gz CMake-658614ff6a14411e2a697fac1f1717a7f4370bf0.tar.bz2 |
ENH:Reworked CMake for consistency
Diffstat (limited to 'Source/cmFindProgramCommand.cxx')
-rw-r--r-- | Source/cmFindProgramCommand.cxx | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/Source/cmFindProgramCommand.cxx b/Source/cmFindProgramCommand.cxx new file mode 100644 index 0000000..1c0d6e1 --- /dev/null +++ b/Source/cmFindProgramCommand.cxx @@ -0,0 +1,80 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) 2000 National Library of Medicine + All rights reserved. + + See COPYRIGHT.txt for copyright details. + +=========================================================================*/ +#include "cmFindProgramCommand.h" +#include <stdlib.h> +#include <stdio.h> + +static void GetPath(std::vector<std::string>& path) +{ +#if defined(_WIN32) && !defined(__CYGWIN__) + char* pathSep = ";"; +#else + char* pathSep = ":"; +#endif + std::string pathEnv = getenv("PATH"); + std::string::size_type start =0; + bool done = false; + while(!done) + { + std::string::size_type endpos = pathEnv.find(pathSep, start); + if(endpos != std::string::npos) + { + path.push_back(pathEnv.substr(start, endpos-start)); + start = endpos+1; + } + else + { + done = true; + } + } +} + + + +// cmFindProgramCommand +bool cmFindProgramCommand::Invoke(std::vector<std::string>& args) +{ + if(args.size() < 2 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + std::vector<std::string> path; + GetPath(path); + std::vector<std::string>::iterator i = args.begin(); + const char* define = (*i).c_str(); + i++; + for(; i != args.end(); ++i) + { + for(int k=0; k < path.size(); k++) + { + std::string tryPath = path[k]; + tryPath += "/"; + tryPath += *i; +#ifdef _WIN32 + tryPath += ".exe"; +#endif + if(cmSystemTools::FileExists(tryPath.c_str())) + { + m_Makefile->AddDefinition(define, tryPath.c_str()); + return true; + } + } + } + return false; +} + |