From ac432c7e7ceb86672aa2ee64a7b104d4ad48c464 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Fri, 10 Mar 2006 16:53:04 -0500 Subject: [PATCH] ENH: add a new FILE SYSTEM_PATH that allows you to read a environment variable with a path in it. --- Source/cmFileCommand.cxx | 29 +++++++++++++++++++++++++++++ Source/cmFileCommand.h | 6 +++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 6c4ad5c0c..6895f840f 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -71,6 +71,10 @@ bool cmFileCommand::InitialPass(std::vector 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 const& args, return true; } +bool cmFileCommand::HandleSystemPathCommand(std::vector + const& args) +{ + std::vector::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 path; + cmSystemTools::GetPath(path, i->c_str()); + i++; + const char* var = i->c_str(); + std::string value; + for(std::vector::iterator j = path.begin(); + j != path.end(); ++j) + { + value += *j; + value += ";"; + } + m_Makefile->AddDefinition(var, value.c_str()); + return true; +} diff --git a/Source/cmFileCommand.h b/Source/cmFileCommand.h index f3ca0202d..fe27bf6fc 100644 --- a/Source/cmFileCommand.h +++ b/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 const& args); bool HandleInstallCommand(std::vector const& args); bool HandleRelativePathCommand(std::vector const& args); + bool HandleSystemPathCommand(std::vector const& args); };