Browse Source

ENH: add a new FILE SYSTEM_PATH that allows you to read a environment variable with a path in it.

Bill Hoffman 19 years ago
parent
commit
ac432c7e7c
2 changed files with 34 additions and 1 deletions
  1. 29 0
      Source/cmFileCommand.cxx
  2. 5 1
      Source/cmFileCommand.h

+ 29 - 0
Source/cmFileCommand.cxx

@@ -71,6 +71,10 @@ bool cmFileCommand::InitialPass(std::vector<std::string> const& args)
     {
     return this->HandleRelativePathCommand(args);
     }
+  else if ( subCommand == "SYSTEM_PATH" )
+    {
+    return this->HandleSystemPathCommand(args);
+    }
 
   std::string e = "does not recognize sub-command "+subCommand;
   this->SetError(e.c_str());
@@ -889,3 +893,28 @@ bool cmFileCommand::HandleRemove(std::vector<std::string> const& args,
   return true;
 }
 
+bool cmFileCommand::HandleSystemPathCommand(std::vector<std::string> 
+                                            const& args)
+{ 
+  std::vector<std::string>::const_iterator i = args.begin();
+  if(args.size() != 3)
+    {
+    this->SetError("FILE(SYSTEM_PATH ENV result) must be called with "
+                   "only three arguments.");
+    return false;
+    }
+  i++; // Get rid of subcommand
+  std::vector<std::string> path;
+  cmSystemTools::GetPath(path, i->c_str());
+  i++;
+  const char* var =  i->c_str();
+  std::string value;
+  for(std::vector<std::string>::iterator j = path.begin();
+      j != path.end(); ++j)
+    {
+    value += *j;
+    value += ";";
+    }
+  m_Makefile->AddDefinition(var, value.c_str());
+  return true;
+}

+ 5 - 1
Source/cmFileCommand.h

@@ -73,6 +73,7 @@ public:
       "  FILE(REMOVE_RECURSE [directory]...)\n"
       "  FILE(MAKE_DIRECTORY [directory]...)\n"
       "  FILE(RELATIVE_PATH variable directory file)\n"
+      "  FILE(SYSTEM_PATH ENVIRONMENT_VARIABLE result)\n"
       "WRITE will write a message into a file called 'filename'. It "
       "overwrites the file if it already exists, and creates the file "
       "if it does not exist.\n"
@@ -98,7 +99,9 @@ public:
       "   /dir/*.py  - match all python files in /dir and subdirectories\n"
       "MAKE_DIRECTORY will create a directory at the specified location\n"
       "RELATIVE_PATH will determine relative path from directory to the given"
-      " file";
+      " file."
+      " SYSTEM_PATH will look up the environment variable named and "
+      "convert its contents into a cmake list of unix style paths. ";
     }
   
   cmTypeMacro(cmFileCommand, cmCommand);
@@ -111,6 +114,7 @@ protected:
   bool HandleMakeDirectoryCommand(std::vector<std::string> const& args);
   bool HandleInstallCommand(std::vector<std::string> const& args);
   bool HandleRelativePathCommand(std::vector<std::string> const& args);
+  bool HandleSystemPathCommand(std::vector<std::string> const& args);
 };