From a3c5ca960bdf7c136fc64e3bb6d6619ca30623d2 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 2 Nov 2015 16:31:27 -0500 Subject: [PATCH] cmGlobalNinjaGenerator: Save 'ninja' version very early Keep it in a member variable for convenient reference. Store the value as soon as it is known. --- Source/cmGlobalNinjaGenerator.cxx | 25 +++++++++++-------------- Source/cmGlobalNinjaGenerator.h | 2 +- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 6e7c43a3b..a8a307c97 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -548,11 +548,11 @@ void cmGlobalNinjaGenerator::Generate() { // Check minimum Ninja version. if (cmSystemTools::VersionCompare(cmSystemTools::OP_LESS, - CurrentNinjaVersion().c_str(), + this->NinjaVersion.c_str(), RequiredNinjaVersion().c_str())) { std::ostringstream msg; - msg << "The detected version of Ninja (" << this->CurrentNinjaVersion(); + msg << "The detected version of Ninja (" << this->NinjaVersion; msg << ") is less than the version of Ninja required by CMake ("; msg << this->RequiredNinjaVersion() << ")."; this->GetCMakeInstance()->IssueMessage(cmake::FATAL_ERROR, msg.str()); @@ -591,6 +591,14 @@ void cmGlobalNinjaGenerator::FindMakeProgram(cmMakefile* mf) if (const char* ninjaCommand = mf->GetDefinition("CMAKE_MAKE_PROGRAM")) { this->NinjaCommand = ninjaCommand; + std::vector command; + command.push_back(this->NinjaCommand); + command.push_back("--version"); + std::string version; + cmSystemTools::RunSingleCommand(command, + &version, 0, 0, 0, + cmSystemTools::OUTPUT_NONE); + this->NinjaVersion = cmSystemTools::TrimWhitespace(version); } } @@ -1275,21 +1283,10 @@ std::string cmGlobalNinjaGenerator::ninjaCmd() const return "ninja"; } -std::string cmGlobalNinjaGenerator::CurrentNinjaVersion() const -{ - std::string version; - std::string command = ninjaCmd() + " --version"; - cmSystemTools::RunSingleCommand(command.c_str(), - &version, 0, 0, 0, - cmSystemTools::OUTPUT_NONE); - - return cmSystemTools::TrimWhitespace(version); -} - bool cmGlobalNinjaGenerator::SupportsConsolePool() const { return cmSystemTools::VersionCompare(cmSystemTools::OP_LESS, - CurrentNinjaVersion().c_str(), + this->NinjaVersion.c_str(), RequiredNinjaVersionForConsolePool().c_str()) == false; } diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h index f22834076..46bd5881b 100644 --- a/Source/cmGlobalNinjaGenerator.h +++ b/Source/cmGlobalNinjaGenerator.h @@ -305,7 +305,6 @@ public: virtual void ComputeTargetObjectDirectory(cmGeneratorTarget* gt) const; - std::string CurrentNinjaVersion() const; // Ninja generator uses 'deps' and 'msvc_deps_prefix' introduced in 1.3 static std::string RequiredNinjaVersion() { return "1.3"; } static std::string RequiredNinjaVersionForConsolePool() { return "1.5"; } @@ -394,6 +393,7 @@ private: TargetAliasMap TargetAliases; std::string NinjaCommand; + std::string NinjaVersion; }; #endif // ! cmGlobalNinjaGenerator_h