From f1670ab18a21b635e58e1a53178c25c722911504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20K=C3=BCmmel?= Date: Wed, 26 Sep 2012 10:07:25 +0200 Subject: [PATCH] Ninja: don't confuse ninja's rsp files with nmake's Move response files into CMakeFiles/ which makes them different to nmake's. --- Source/cmGlobalNinjaGenerator.cxx | 12 +++++++++--- Source/cmGlobalNinjaGenerator.h | 1 + Source/cmNinjaNormalTargetGenerator.cxx | 9 +++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 3f3cfbbb1..05f5b4c86 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -106,6 +106,7 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os, const cmNinjaDeps& implicitDeps, const cmNinjaDeps& orderOnlyDeps, const cmNinjaVars& variables, + const std::string& rspfile, int cmdLineLimit) { // Make sure there is a rule. @@ -181,12 +182,17 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os, // check if a response file rule should be used std::string buildstr = build.str(); - const std::string assignments = variable_assignments.str(); + 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"; + > (size_t) cmdLineLimit) { + buildstr += "_RSP_FILE"; + variable_assignments.clear(); + cmGlobalNinjaGenerator::WriteVariable(variable_assignments, + "RSP_FILE", rspfile, "", 1); + assignments += variable_assignments.str(); + } os << buildstr << args << assignments; } diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h index b2fe24327..24c391610 100644 --- a/Source/cmGlobalNinjaGenerator.h +++ b/Source/cmGlobalNinjaGenerator.h @@ -84,6 +84,7 @@ public: const cmNinjaDeps& implicitDeps, const cmNinjaDeps& orderOnlyDeps, const cmNinjaVars& variables, + const std::string& rspfile = std::string(), int cmdLineLimit = -1); /** diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx index 6f991e29d..a13e1f0e8 100644 --- a/Source/cmNinjaNormalTargetGenerator.cxx +++ b/Source/cmNinjaNormalTargetGenerator.cxx @@ -153,7 +153,7 @@ cmNinjaNormalTargetGenerator cmTarget::TargetType targetType = this->GetTarget()->GetType(); std::string ruleName = this->LanguageLinkerRule(); if (useResponseFile) - ruleName += "_RSPFILE"; + ruleName += "_RSP_FILE"; // Select whether to use a response file for objects. std::string rspfile; @@ -179,7 +179,7 @@ cmNinjaNormalTargetGenerator } else { responseFlag = "@"; } - rspfile = "$out.rsp"; + rspfile = "$RSP_FILE"; responseFlag += rspfile; rspcontent = "$in $LINK_LIBRARIES"; vars.Objects = responseFlag.c_str(); @@ -549,6 +549,10 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement() int commandLineLengthLimit = -1; #endif + const std::string rspfile = std::string + (cmake::GetCMakeFilesDirectoryPostSlash()) + + this->GetTarget()->GetName() + ".rsp"; + // Write the build statement for this target. cmGlobalNinjaGenerator::WriteBuild(this->GetBuildFileStream(), comment.str(), @@ -558,6 +562,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement() implicitDeps, emptyDeps, vars, + rspfile, commandLineLengthLimit); if (targetOutput != targetOutputReal) {