summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2011-05-18 13:44:28 (GMT)
committerBrad King <brad.king@kitware.com>2011-05-18 13:44:28 (GMT)
commitc45c60b24ff52d9435ceab0de027fbadac130a1f (patch)
treee4bc48a68cd02c19d03b99cf061c542d20f64322
parent7c5be5114c1c1adb26cfe7e8556187bf9bd8bd0a (diff)
downloadCMake-c45c60b24ff52d9435ceab0de027fbadac130a1f.zip
CMake-c45c60b24ff52d9435ceab0de027fbadac130a1f.tar.gz
CMake-c45c60b24ff52d9435ceab0de027fbadac130a1f.tar.bz2
run_compile_commands: Avoid extra stl vector conversion
The Sun compiler does not provide the proper vector constructor to initialize it from an iterator pair of a non-matching type. Extend the ParseUnixCommandLine API to provide a vector of the proper type so no conversion is needed.
-rw-r--r--Source/cmSystemTools.cxx16
-rw-r--r--Source/cmSystemTools.h2
-rw-r--r--Tests/CMakeLib/run_compile_commands.cxx5
3 files changed, 20 insertions, 3 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 7bc89a4..df6469f 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -440,6 +440,13 @@ public:
args.push_back(*arg);
}
}
+ void Store(std::vector<cmStdString>& args) const
+ {
+ for(char** arg = this->ArgV; arg && *arg; ++arg)
+ {
+ args.push_back(*arg);
+ }
+ }
};
//----------------------------------------------------------------------------
@@ -451,6 +458,15 @@ void cmSystemTools::ParseUnixCommandLine(const char* command,
argv.Store(args);
}
+//----------------------------------------------------------------------------
+void cmSystemTools::ParseUnixCommandLine(const char* command,
+ std::vector<cmStdString>& 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 6f9147c..dfc6b7d 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -237,6 +237,8 @@ public:
/** Parse arguments out of a unix command line string. */
static void ParseUnixCommandLine(const char* command,
std::vector<std::string>& args);
+ static void ParseUnixCommandLine(const char* command,
+ std::vector<cmStdString>& args);
/** Compute an escaped version of the given argument for use in a
windows shell. See kwsys/System.h.in for details. */
diff --git a/Tests/CMakeLib/run_compile_commands.cxx b/Tests/CMakeLib/run_compile_commands.cxx
index cfb7ece..a0be2eb 100644
--- a/Tests/CMakeLib/run_compile_commands.cxx
+++ b/Tests/CMakeLib/run_compile_commands.cxx
@@ -127,9 +127,8 @@ int main ()
it = parser.GetTranslationUnits().begin(),
end = parser.GetTranslationUnits().end(); it != end; ++it)
{
- std::vector<std::string> std_command;
- cmSystemTools::ParseUnixCommandLine(it->at("command").c_str(), std_command);
- std::vector<cmStdString> command(std_command.begin(), std_command.end());
+ std::vector<cmStdString> command;
+ cmSystemTools::ParseUnixCommandLine(it->at("command").c_str(), command);
if (!cmSystemTools::RunSingleCommand(
command, 0, 0, it->at("directory").c_str()))
{