Ninja: also consider variables when checking command line length

This commit is contained in:
Peter Kuemmel 2012-07-02 00:01:41 +02:00
parent ba41a238f7
commit 0c42faf63a
2 changed files with 22 additions and 21 deletions

View File

@ -160,34 +160,35 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
arguments << "\n"; arguments << "\n";
cmOStringStream build;
cmOStringStream builds;
// Write outputs files. // Write outputs files.
builds << "build"; build << "build";
for(cmNinjaDeps::const_iterator i = outputs.begin(); for(cmNinjaDeps::const_iterator i = outputs.begin();
i != outputs.end(); i != outputs.end(); ++i)
++i) build << " " << EncodeIdent(EncodePath(*i), os);
builds << " " << EncodeIdent(EncodePath(*i), os); build << ":";
builds << ":";
// Write the rule. // Write the rule.
builds << " " << rule; build << " " << rule;
// check if a response file rule should be used
const std::string args = arguments.str();
if (cmdLineLimit > 0 &&
(args.size() + + builds.str().size()) > (size_t)cmdLineLimit)
builds << "_RSPFILE";
os << builds.str() << args;
// Write the variables bound to this build statement. // Write the variables bound to this build statement.
cmOStringStream variable_assignments;
for(cmNinjaVars::const_iterator i = variables.begin(); for(cmNinjaVars::const_iterator i = variables.begin();
i != variables.end(); i != variables.end(); ++i)
++i) cmGlobalNinjaGenerator::WriteVariable(variable_assignments,
cmGlobalNinjaGenerator::WriteVariable(os, i->first, i->second, "", 1); i->first, i->second, "", 1);
// check if a response file rule should be used
std::string buildstr = build.str();
const std::string assignments = variable_assignments.str();
const std::string args = arguments.str();
if (cmdLineLimit > 0
&& args.size() + buildstr.size() + assignments.size()
> (size_t) cmdLineLimit)
buildstr += "_RSPFILE";
os << buildstr << args << assignments;
} }
void cmGlobalNinjaGenerator::WritePhonyBuild(std::ostream& os, void cmGlobalNinjaGenerator::WritePhonyBuild(std::ostream& os,

View File

@ -272,7 +272,7 @@ std::string cmLocalNinjaGenerator::BuildCommandLine(
// don't use POST_BUILD. // don't use POST_BUILD.
if (cmdLines.empty()) if (cmdLines.empty())
#ifdef _WIN32 #ifdef _WIN32
return "cd."; return "cd .";
#else #else
return ":"; return ":";
#endif #endif