| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 | 
							- #include "cmSystemTools.h"
 
- #include "errno.h"
 
- #include <sys/stat.h>
 
- #include "cmRegularExpression.h"
 
- #ifdef _MSC_VER
 
- #include <windows.h>
 
- #include <direct.h>
 
- inline int Mkdir(const char* dir)
 
- {
 
-   return _mkdir(dir);
 
- }
 
- #else
 
- #include <sys/types.h>
 
- #include <fcntl.h>
 
- #include <unistd.h>
 
- inline int Mkdir(const char* dir)
 
- {
 
-   return mkdir(dir, 00700);
 
- }
 
- #endif
 
- // remove extra spaces and the "\" character from the name
 
- // of the class as it is in the CMakeLists.txt
 
- std::string cmSystemTools::CleanUpName(const char* name)
 
- {
 
-   std::string className = name;
 
-   size_t i =0;
 
-   while(className[i] == ' ' || className[i] == '\t')
 
-     {
 
-     i++;
 
-     }
 
-   if(i)
 
-     {
 
-     className = className.substr(i, className.size());
 
-     } 
 
-   size_t pos = className.find('\\');
 
-   if(pos != std::string::npos)
 
-     {
 
-     className = className.substr(0, pos);
 
-     }
 
-   
 
-   pos = className.find(' ');
 
-   if(pos != std::string::npos)
 
-     {
 
-     className = className.substr(0, pos);
 
-     }
 
-   pos = className.find('\t');
 
-   if(pos != std::string::npos)
 
-     {
 
-     className = className.substr(0, pos);
 
-     }
 
-   return className;
 
- }
 
- bool cmSystemTools::MakeDirectory(const char* path)
 
- {
 
-   std::string dir = path;
 
-   // replace all of the \ with /
 
-   size_t pos = 0;
 
-   while((pos = dir.find('\\', pos)) != std::string::npos)
 
-     {
 
-     dir[pos] = '/';
 
-     pos++;
 
-     }
 
-   pos =  dir.find(':');
 
-   if(pos == std::string::npos)
 
-     {
 
-     pos = 0;
 
-     }
 
-   while((pos = dir.find('/', pos)) != std::string::npos)
 
-     {
 
-     std::string topdir = dir.substr(0, pos);
 
-     Mkdir(topdir.c_str());
 
-     pos++;
 
-     }
 
-   if(Mkdir(path) != 0)
 
-     {
 
-     // if it is some other error besides directory exists
 
-     // then return false
 
-     if(errno != EEXIST)
 
-       {
 
-       return false;
 
-       }
 
-     }
 
-   return true;
 
- }
 
- // replace replace with with as many times as it shows up in source.
 
- // write the result into source.
 
- void cmSystemTools::ReplaceString(std::string& source,
 
-                                    const char* replace,
 
-                                    const char* with)
 
- {
 
-   int lengthReplace = strlen(replace);
 
-   std::string rest;
 
-   size_t start = source.find(replace);
 
-   while(start != std::string::npos)
 
-     {
 
-     rest = source.substr(start+lengthReplace);
 
-     source = source.substr(0, start);
 
-     source += with;
 
-     source += rest;
 
-     start = source.find(replace, start + lengthReplace );
 
-     }
 
- }
 
- // return true if the file exists
 
- bool cmSystemTools::FileExists(const char* filename)
 
- {
 
-   struct stat fs;
 
-   if (stat(filename, &fs) != 0) 
 
-   {
 
-     return false;
 
-   }
 
-   else
 
-   {
 
-     return true;
 
-   }
 
- }
 
- // Read a list from a CMakeLists.txt file open stream.
 
- // assume the stream has just read "VAR = \"
 
- // read until there is not a "\" at the end of the line.
 
- void cmSystemTools::ReadList(std::vector<std::string>& stringList, 
 
-                              std::ifstream& fin)
 
- {
 
-   char inbuffer[2048];
 
-   bool done = false;
 
-   while ( !done )
 
-     {
 
-     fin.getline(inbuffer, sizeof(inbuffer) );
 
-     std::string inname = inbuffer;
 
-     if(inname.find('\\') == std::string::npos)
 
-       {
 
-       done = true;
 
-       }
 
-     if(inname.size())
 
-       {
 
-       stringList.push_back(cmSystemTools::CleanUpName(inname.c_str()));
 
-       }
 
-     }
 
- }
 
- // convert windows slashes to unix slashes \ with /
 
- void cmSystemTools::ConvertToUnixSlashes(std::string& path)
 
- {
 
-   std::string::size_type pos = path.find('\\');
 
-   while(pos != std::string::npos)
 
-     {
 
-     path[pos] = '/';
 
-     pos = path.find('\\');
 
-     }
 
-   // remove any trailing slash
 
-   if(path[path.size()-1] == '/')
 
-     {
 
-     path = path.substr(0, path.size()-1);
 
-     }
 
- }
 
- int cmSystemTools::Grep(const char* dir, const char* file, const char* expression)
 
- {
 
-   std::string path = dir;
 
-   path += "/";
 
-   path += file;
 
-   std::ifstream fin(path.c_str());
 
-   char buffer[2056];
 
-   int count = 0;
 
-   cmRegularExpression reg(expression);
 
-   while(fin)
 
-     {
 
-     fin.getline(buffer, sizeof(buffer));
 
-     count += reg.find(buffer);
 
-     }
 
-   return count;
 
- }
 
- std::string cmSystemTools::ExtractVariable(const char* variable,
 
-                                            const char* l)
 
- {
 
-   std::string line = l;
 
-   size_t varstart = line.find(variable);
 
-   size_t start = line.find("=");
 
-   if(start != std::string::npos && start > varstart )
 
-     {
 
-     start++;
 
-     while(line[start] == ' ' && start < line.size())
 
-       {
 
-       start++;
 
-       }
 
-     size_t end = line.size()-1;
 
-     while(line[end] == ' ' && end > start)
 
-       {
 
-       end--;
 
-       }
 
-     return line.substr(start, end).c_str();
 
-     }
 
-   return std::string("");
 
- }
 
 
  |