Merge topic 'cmcldeps-needs-cl'

4a35bd0 Ninja: don't crash on returned 0 pointer
3632f24 Ninja: cmcldeps needs a compiler
This commit is contained in:
David Cole 2012-08-20 15:41:36 -04:00 committed by CMake Topic Stage
commit 8d8268b307
1 changed files with 18 additions and 18 deletions

View File

@ -342,24 +342,26 @@ cmNinjaTargetGenerator
cmMakefile* mf = this->GetMakefile();
bool useClDeps = false;
std::string clBinary;
std::string clDepsBinary;
std::string clShowPrefix;
if (lang == "C" || lang == "CXX" || lang == "RC")
{
const char* depsPtr = mf->GetDefinition("CMAKE_CMCLDEPS_EXECUTABLE");
const char* showPtr = mf->GetDefinition("CMAKE_CL_SHOWINCLUDE_PREFIX");
if (depsPtr && showPtr)
clDepsBinary = mf->GetSafeDefinition("CMAKE_CMCLDEPS_EXECUTABLE");
if (!clDepsBinary.empty() &&
!this->GetGlobalGenerator()->GetCMakeInstance()->GetIsInTryCompile())
{
// don't wrap for try_compile,
// TODO but why doesn't it work with cmcldeps?
const std::string projectName = mf->GetProjectName() ?
mf->GetProjectName() : "";
if (projectName != "CMAKE_TRY_COMPILE")
clShowPrefix = mf->GetSafeDefinition("CMAKE_CL_SHOWINCLUDE_PREFIX");
clBinary = mf->GetDefinition("CMAKE_C_COMPILER") ?
mf->GetSafeDefinition("CMAKE_C_COMPILER") :
mf->GetSafeDefinition("CMAKE_CXX_COMPILER");
if (!clBinary.empty() && !clShowPrefix.empty())
{
useClDeps = true;
std::string qu = "\"";
clDepsBinary = qu + depsPtr + qu;
clShowPrefix = qu + showPtr + qu;
const std::string quote = " \"";
clBinary = quote + clBinary + "\" ";
clDepsBinary = quote + clDepsBinary + "\" ";
clShowPrefix = quote + clShowPrefix + "\" ";
vars.DependencyFile = "$DEP_FILE";
}
}
@ -393,16 +395,14 @@ cmNinjaTargetGenerator
i != compileCmds.end(); ++i)
this->GetLocalGenerator()->ExpandRuleVariables(*i, vars);
std::string cmdLine =
this->GetLocalGenerator()->BuildCommandLine(compileCmds);
std::string cmdLine;
if(useClDeps)
{
std::string cl = mf->GetDefinition("CMAKE_C_COMPILER");
cl = "\"" + cl + "\" ";
cmdLine = clDepsBinary + " " + lang + " $in \"$DEP_FILE\" $out "
+ clShowPrefix + " " + cl + cmdLine;
cmdLine = clDepsBinary + lang + " $in \"$DEP_FILE\" $out " +
clShowPrefix + clBinary;
}
cmdLine += this->GetLocalGenerator()->BuildCommandLine(compileCmds);
// Write the rule for compiling file of the given language.
cmOStringStream comment;