summaryrefslogtreecommitdiffstats
path: root/Source/cmSystemTools.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-04-25 13:41:14 (GMT)
committerKitware Robot <kwrobot@kitware.com>2017-04-25 13:41:18 (GMT)
commit74672e2ffaaa7f6c0efa1884a3f8d239d36ec7bf (patch)
treea26d41e0d84ac2b705ebf486efae21bae05efe12 /Source/cmSystemTools.cxx
parent7dca104e14519be4ff28978a1553a3395ecaf6d2 (diff)
parent594d3d6fffac33062629bafb819a5df7c1326824 (diff)
downloadCMake-74672e2ffaaa7f6c0efa1884a3f8d239d36ec7bf.zip
CMake-74672e2ffaaa7f6c0efa1884a3f8d239d36ec7bf.tar.gz
CMake-74672e2ffaaa7f6c0efa1884a3f8d239d36ec7bf.tar.bz2
Merge topic 'ninja-dyndep-response-file'
594d3d6f Ninja: support response file for cmake_ninja_depends on Windows Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !722
Diffstat (limited to 'Source/cmSystemTools.cxx')
-rw-r--r--Source/cmSystemTools.cxx33
1 files changed, 33 insertions, 0 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 6d620d9..8978e18 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -505,6 +505,39 @@ void cmSystemTools::ParseUnixCommandLine(const char* command,
argv.Store(args);
}
+std::vector<std::string> cmSystemTools::HandleResponseFile(
+ std::vector<std::string>::const_iterator argBeg,
+ std::vector<std::string>::const_iterator argEnd)
+{
+ std::vector<std::string> arg_full;
+ for (std::vector<std::string>::const_iterator a = argBeg; a != argEnd; ++a) {
+ std::string const& arg = *a;
+ if (cmHasLiteralPrefix(arg, "@")) {
+ cmsys::ifstream responseFile(arg.substr(1).c_str(), std::ios::in);
+ if (!responseFile) {
+ std::string error = "failed to open for reading (";
+ error += cmSystemTools::GetLastSystemError();
+ error += "):\n ";
+ error += arg.substr(1);
+ cmSystemTools::Error(error.c_str());
+ } else {
+ std::string line;
+ cmSystemTools::GetLineFromStream(responseFile, line);
+ std::vector<std::string> args2;
+#ifdef _WIN32
+ cmSystemTools::ParseWindowsCommandLine(line.c_str(), args2);
+#else
+ cmSystemTools::ParseUnixCommandLine(line.c_str(), args2);
+#endif
+ arg_full.insert(arg_full.end(), args2.begin(), args2.end());
+ }
+ } else {
+ arg_full.push_back(arg);
+ }
+ }
+ return arg_full;
+}
+
std::vector<std::string> cmSystemTools::ParseArguments(const char* command)
{
std::vector<std::string> args;