summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-07-13 20:22:48 (GMT)
committerBrad King <brad.king@kitware.com>2009-07-13 20:22:48 (GMT)
commit3dd6f36d459571246ca12a27ad732a8109ac6916 (patch)
tree8f74befa1a121de7bb46f01884c7ef5e33d6c9dc
parent18e639d48a658dff76f47e8fcb3815776ee35c33 (diff)
downloadCMake-3dd6f36d459571246ca12a27ad732a8109ac6916.zip
CMake-3dd6f36d459571246ca12a27ad732a8109ac6916.tar.gz
CMake-3dd6f36d459571246ca12a27ad732a8109ac6916.tar.bz2
ENH: Add cmSystemTools::ParseUnixCommandLine
This method is a C++ wrapper around the KWSys System library function to parse unix-style command lines.
-rw-r--r--Source/cmSystemTools.cxx32
-rw-r--r--Source/cmSystemTools.h4
2 files changed, 36 insertions, 0 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index de5e31b..64d554b 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -448,6 +448,38 @@ void cmSystemTools::ParseWindowsCommandLine(const char* command,
}
}
+//----------------------------------------------------------------------------
+class cmSystemToolsArgV
+{
+ char** ArgV;
+public:
+ cmSystemToolsArgV(char** argv): ArgV(argv) {}
+ ~cmSystemToolsArgV()
+ {
+ for(char** arg = this->ArgV; arg && *arg; ++arg)
+ {
+ free(*arg);
+ }
+ free(this->ArgV);
+ }
+ void Store(std::vector<std::string>& args) const
+ {
+ for(char** arg = this->ArgV; arg && *arg; ++arg)
+ {
+ args.push_back(*arg);
+ }
+ }
+};
+
+//----------------------------------------------------------------------------
+void cmSystemTools::ParseUnixCommandLine(const char* command,
+ std::vector<std::string>& args)
+{
+ // Invoke the underlying parser.
+ cmSystemToolsArgV argv = cmsysSystem_Parse_CommandForUnix(command, 0);
+ argv.Store(args);
+}
+
std::string cmSystemTools::EscapeWindowsShellArgument(const char* arg,
int shell_flags)
{
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 486dcee..9d7efe4 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -239,6 +239,10 @@ public:
static void ParseWindowsCommandLine(const char* command,
std::vector<std::string>& args);
+ /** Parse arguments out of a unix command line string. */
+ static void ParseUnixCommandLine(const char* command,
+ std::vector<std::string>& args);
+
/** Compute an escaped version of the given argument for use in a
windows shell. See kwsys/System.h.in for details. */
static std::string EscapeWindowsShellArgument(const char* arg,