diff options
author | Brad King <brad.king@kitware.com> | 2017-04-25 13:41:14 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2017-04-25 13:41:18 (GMT) |
commit | 74672e2ffaaa7f6c0efa1884a3f8d239d36ec7bf (patch) | |
tree | a26d41e0d84ac2b705ebf486efae21bae05efe12 /Source/cmSystemTools.cxx | |
parent | 7dca104e14519be4ff28978a1553a3395ecaf6d2 (diff) | |
parent | 594d3d6fffac33062629bafb819a5df7c1326824 (diff) | |
download | CMake-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.cxx | 33 |
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; |