diff options
author | Brad King <brad.king@kitware.com> | 2006-09-21 19:14:06 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2006-09-21 19:14:06 (GMT) |
commit | 2459ceb076d7788f7512ef4a2f68e81c43bc271d (patch) | |
tree | b198c9b7a49aed110b2a706f82426e84690dc582 /Source/cmLocalGenerator.cxx | |
parent | 0952a96485cad05f68724f0a703758dceb60add9 (diff) | |
download | CMake-2459ceb076d7788f7512ef4a2f68e81c43bc271d.zip CMake-2459ceb076d7788f7512ef4a2f68e81c43bc271d.tar.gz CMake-2459ceb076d7788f7512ef4a2f68e81c43bc271d.tar.bz2 |
BUG: Centralized generation of command line arguments in escaped form. This addresses bug#3786 for several platforms.
Diffstat (limited to 'Source/cmLocalGenerator.cxx')
-rw-r--r-- | Source/cmLocalGenerator.cxx | 78 |
1 files changed, 28 insertions, 50 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index e58b542..01d08ec 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -28,6 +28,8 @@ #include "cmTest.h" #include "cmake.h" +#include <cmsys/System.h> + #include <ctype.h> // for isalpha cmLocalGenerator::cmLocalGenerator() @@ -1898,56 +1900,6 @@ void cmLocalGenerator::AppendFlags(std::string& flags, //---------------------------------------------------------------------------- std::string -cmLocalGenerator::ConstructScript(const cmCustomCommandLines& commandLines, - const char* workingDirectory, - const char* newline) - -{ - // Store the script in a string. - std::string script; - if(workingDirectory) - { - script += "cd "; - script += this->Convert(workingDirectory, START_OUTPUT, SHELL); - script += newline; - } - // for visual studio IDE add extra stuff to the PATH - // if CMAKE_MSVCIDE_RUN_PATH is set. - if(this->Makefile->GetDefinition("MSVC_IDE")) - { - const char* extraPath = - this->Makefile->GetDefinition("CMAKE_MSVCIDE_RUN_PATH"); - if(extraPath) - { - script += "set PATH="; - script += extraPath; - script += ";%PATH%"; - script += newline; - } - } - // Write each command on a single line. - for(cmCustomCommandLines::const_iterator cl = commandLines.begin(); - cl != commandLines.end(); ++cl) - { - // Start with the command name. - const cmCustomCommandLine& commandLine = *cl; - script += this->Convert(commandLine[0].c_str(),START_OUTPUT,SHELL); - - // Add the arguments. - for(unsigned int j=1;j < commandLine.size(); ++j) - { - script += " "; - script += cmSystemTools::EscapeSpaces(commandLine[j].c_str()); - } - - // End the line. - script += newline; - } - return script; -} - -//---------------------------------------------------------------------------- -std::string cmLocalGenerator::ConstructComment(const cmCustomCommand& cc, const char* default_comment) { @@ -2289,3 +2241,29 @@ cmLocalGenerator return (this->GlobalGenerator ->GetLanguageFromExtension(source.GetSourceExtension().c_str())); } + +//---------------------------------------------------------------------------- +std::string cmLocalGenerator::EscapeForShell(const char* str) +{ + std::string result; + if(this->WindowsShell) + { + int size = cmsysSystem_Windows_ShellArgumentSize(str); + std::vector<char> arg(size); + cmsysSystem_Windows_ShellArgument(str, &arg[0]); + result = &arg[0]; + } + else + { + for(const char* c = str; *c; ++c) + { + if(*c == '\\' || *c == '\'' || *c == '"' || *c == ';' || + *c == '(' || *c == ')') + { + result += "\\"; + } + result += *c; + } + } + return result; +} |