diff options
author | David Cole <david.cole@kitware.com> | 2012-07-24 21:02:31 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2012-07-24 21:02:31 (GMT) |
commit | b5d9dba7b601e72b13781bcfac8a7e8bb995d095 (patch) | |
tree | 9cba81e0475d2568bacfc9d1de81b2bc280c717e | |
parent | e5fce89ea881aeff6b3d813e2227289c12b1c8f5 (diff) | |
parent | 74d1c88529caa6d048418ea36e09a1d446472d33 (diff) | |
download | CMake-b5d9dba7b601e72b13781bcfac8a7e8bb995d095.zip CMake-b5d9dba7b601e72b13781bcfac8a7e8bb995d095.tar.gz CMake-b5d9dba7b601e72b13781bcfac8a7e8bb995d095.tar.bz2 |
Merge topic 'ninja-cldeps-check-rc-result'
74d1c88 Ninja: cmcldeps needs absolute paths for RCs
1cdeef7 Ninja: readd quotes to src file path before patching it
84a18cb Ninja: also stop when .rc's .d file couldn't be generated
-rw-r--r-- | Source/cmNinjaTargetGenerator.cxx | 14 | ||||
-rw-r--r-- | Source/cmcldeps.cxx | 12 |
2 files changed, 19 insertions, 7 deletions
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index 4758989..0d02039 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -143,16 +143,18 @@ cmNinjaTargetGenerator::ComputeFlagsForObject(cmSourceFile *source, this->LocalGenerator->AddCMP0018Flags(flags, this->Target, language.c_str()); - // TODO: Handle response file. // Add include directory flags. { std::vector<std::string> includes; this->LocalGenerator->GetIncludeDirectories(includes, this->Target, language.c_str()); std::string includeFlags = - this->LocalGenerator->GetIncludeFlags(includes, language.c_str(), false); + this->LocalGenerator->GetIncludeFlags(includes, language.c_str(), + language == "RC" ? true : false); // full include paths for RC + // needed by cmcldeps if(cmGlobalNinjaGenerator::IsMinGW()) cmSystemTools::ReplaceString(includeFlags, "\\", "/"); + this->LocalGenerator->AppendFlags(flags, includeFlags.c_str()); } @@ -467,7 +469,7 @@ cmNinjaTargetGenerator cmNinjaDeps emptyDeps; std::string comment; - const char* language = source->GetLanguage(); + const std::string language = source->GetLanguage(); std::string rule = this->LanguageCompilerRule(language); cmNinjaDeps outputs; @@ -477,7 +479,11 @@ cmNinjaTargetGenerator this->Objects.push_back(objectFileName); cmNinjaDeps explicitDeps; - std::string sourceFileName = this->GetSourceFilePath(source); + std::string sourceFileName; + if (language == "RC") + sourceFileName = source->GetFullPath(); + else + sourceFileName = this->GetSourceFilePath(source); explicitDeps.push_back(sourceFileName); // Ensure that the target dependencies are built before any source file in diff --git a/Source/cmcldeps.cxx b/Source/cmcldeps.cxx index ce64132..69df88d 100644 --- a/Source/cmcldeps.cxx +++ b/Source/cmcldeps.cxx @@ -206,7 +206,7 @@ static int process( const std::string& srcfilename, includes.push_back(inc); } else { if (!isFirstLine || !startsWith(line, srcfilename)) { - if (!quiet) { + if (!quiet || exit_code != 0) { fprintf(stdout, "%s\n", line.c_str()); } } else { @@ -254,7 +254,10 @@ int main() { // rc: /fo x.dir\x.rc.res -> cl: /out:x.dir\x.rc.res.dep.obj clrest = replace(clrest, "/fo", "/out:"); clrest = replace(clrest, objfile, objfile + ".dep.obj "); + // rc: src\x\x.rc -> cl: /Tc src\x\x.rc + if (srcfile.find(" ") != std::string::npos) + srcfile = "\"" + srcfile + "\""; clrest = replace(clrest, srcfile, "/Tc " + srcfile); cl = "\"" + cl + "\" /P /DRC_INVOKED "; @@ -267,8 +270,11 @@ int main() { } // extract dependencies with cl.exe - process(srcfilename, dfile, objfile, - prefix, cl + nol + show + clrest, objdir, true); + int exit_code = process(srcfilename, dfile, objfile, + prefix, cl + nol + show + clrest, objdir, true); + + if (exit_code != 0) + return exit_code; // compile rc file with rc.exe return process(srcfilename, "" , objfile, prefix, binpath + " " + rest); |