Ninja: Use cmSystemTools::ExpandListArgument to split compile/link commands

This commit is contained in:
Peter Collingbourne 2012-02-27 04:05:31 +00:00
parent d2731a376c
commit 80ff2102a4
2 changed files with 16 additions and 6 deletions

View File

@ -219,6 +219,7 @@ std::vector<std::string>
cmNinjaNormalTargetGenerator
::ComputeLinkCmd()
{
std::vector<std::string> linkCmds;
cmTarget::TargetType targetType = this->GetTarget()->GetType();
switch (targetType) {
case cmTarget::STATIC_LIBRARY: {
@ -230,7 +231,8 @@ cmNinjaNormalTargetGenerator
if (const char *linkCmd =
this->GetMakefile()->GetDefinition(linkCmdVar.c_str()))
{
return std::vector<std::string>(1, linkCmd);
cmSystemTools::ExpandListArgument(linkCmd, linkCmds);
return linkCmds;
}
}
@ -249,7 +251,7 @@ cmNinjaNormalTargetGenerator
linkCmdVar += "_ARCHIVE_CREATE";
const char *linkCmd =
this->GetMakefile()->GetRequiredDefinition(linkCmdVar.c_str());
linkCmds.push_back(linkCmd);
cmSystemTools::ExpandListArgument(linkCmd, linkCmds);
}
{
std::string linkCmdVar = "CMAKE_";
@ -257,7 +259,7 @@ cmNinjaNormalTargetGenerator
linkCmdVar += "_ARCHIVE_FINISH";
const char *linkCmd =
this->GetMakefile()->GetRequiredDefinition(linkCmdVar.c_str());
linkCmds.push_back(linkCmd);
cmSystemTools::ExpandListArgument(linkCmd, linkCmds);
}
return linkCmds;
}
@ -281,7 +283,8 @@ cmNinjaNormalTargetGenerator
}
const char *linkCmd =
this->GetMakefile()->GetRequiredDefinition(linkCmdVar.c_str());
return std::vector<std::string>(1, linkCmd);
cmSystemTools::ExpandListArgument(linkCmd, linkCmds);
return linkCmds;
}
default:
assert(0 && "Unexpected target type");

View File

@ -334,8 +334,15 @@ cmNinjaTargetGenerator
compileCmdVar += "_COMPILE_OBJECT";
std::string compileCmd =
this->GetMakefile()->GetRequiredDefinition(compileCmdVar.c_str());
std::vector<std::string> compileCmds;
cmSystemTools::ExpandListArgument(compileCmd, compileCmds);
this->GetLocalGenerator()->ExpandRuleVariables(compileCmd, vars);
for (std::vector<std::string>::iterator i = compileCmds.begin();
i != compileCmds.end(); ++i)
this->GetLocalGenerator()->ExpandRuleVariables(*i, vars);
std::string cmdLine =
this->GetLocalGenerator()->BuildCommandLine(compileCmds);
// Write the rule for compiling file of the given language.
std::ostringstream comment;
@ -343,7 +350,7 @@ cmNinjaTargetGenerator
std::ostringstream description;
description << "Building " << language << " object $out";
this->GetGlobalGenerator()->AddRule(this->LanguageCompilerRule(language),
compileCmd,
cmdLine,
description.str(),
comment.str(),
depfile);