diff options
author | Evan Martin <martine@danga.com> | 2013-01-06 19:36:17 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2013-04-08 21:45:07 (GMT) |
commit | 70d43e48e8b8a71c1f1cc55718b34480f68e1341 (patch) | |
tree | 586d95269c3bd7a940baf7c5d1bdd4bcaae5d338 /src/msvc_helper_main-win32.cc | |
parent | d9c24381c50506436212ac447a0805f5ff6892ac (diff) | |
download | Ninja-70d43e48e8b8a71c1f1cc55718b34480f68e1341.zip Ninja-70d43e48e8b8a71c1f1cc55718b34480f68e1341.tar.gz Ninja-70d43e48e8b8a71c1f1cc55718b34480f68e1341.tar.bz2 |
factor MSVC parsing out of CLWrapper into CLParser
Diffstat (limited to 'src/msvc_helper_main-win32.cc')
-rw-r--r-- | src/msvc_helper_main-win32.cc | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/msvc_helper_main-win32.cc b/src/msvc_helper_main-win32.cc index 0bbe98b..3192821 100644 --- a/src/msvc_helper_main-win32.cc +++ b/src/msvc_helper_main-win32.cc @@ -44,12 +44,13 @@ void PushPathIntoEnvironment(const string& env_block) { } } -void WriteDepFileOrDie(const char* object_path, CLWrapper* cl) { +void WriteDepFileOrDie(const char* object_path, const CLParser& parse) { string depfile_path = string(object_path) + ".d"; FILE* depfile = fopen(depfile_path.c_str(), "w"); if (!depfile) { unlink(object_path); - Fatal("opening %s: %s", depfile_path.c_str(), GetLastErrorString().c_str()); + Fatal("opening %s: %s", depfile_path.c_str(), + GetLastErrorString().c_str()); } if (fprintf(depfile, "%s: ", object_path) < 0) { unlink(object_path); @@ -57,9 +58,9 @@ void WriteDepFileOrDie(const char* object_path, CLWrapper* cl) { unlink(depfile_path.c_str()); Fatal("writing %s", depfile_path.c_str()); } - vector<string> headers = cl->GetEscapedResult(); - for (vector<string>::iterator i = headers.begin(); i != headers.end(); ++i) { - if (fprintf(depfile, "%s\n", i->c_str()) < 0) { + const set<string>& headers = parse.includes_; + for (set<string>::iterator i = headers.begin(); i != headers.end(); ++i) { + if (fprintf(depfile, "%s\n", EscapeForDepfile(*i).c_str()) < 0) { unlink(object_path); fclose(depfile); unlink(depfile_path.c_str()); @@ -95,11 +96,6 @@ int MSVCHelperMain(int argc, char** argv) { } } - if (!output_filename) { - Usage(); - Fatal("-o required"); - } - string env; if (envfile) { string err; @@ -118,9 +114,15 @@ int MSVCHelperMain(int argc, char** argv) { CLWrapper cl; if (!env.empty()) cl.SetEnvBlock((void*)env.data()); - int exit_code = cl.Run(command); + string output; + int exit_code = cl.Run(command, &output); - WriteDepFileOrDie(output_filename, &cl); + if (output_filename) { + CLParser parser; + output = parser.Parse(output); + WriteDepFileOrDie(output_filename, parser); + } + printf("%s\n", output.c_str()); return exit_code; } |