summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-11-06 19:58:09 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2015-11-06 19:58:09 (GMT)
commit5bd78b0e999d28b163485232e434f5c7a5678ddd (patch)
treef4c4756bb2571b17514d8df44d320456cfa80b57 /Source
parent08b8fef254f4fb705046e5c59c1b8e2f4f3afe22 (diff)
parenta3c5ca960bdf7c136fc64e3bb6d6619ca30623d2 (diff)
downloadCMake-5bd78b0e999d28b163485232e434f5c7a5678ddd.zip
CMake-5bd78b0e999d28b163485232e434f5c7a5678ddd.tar.gz
CMake-5bd78b0e999d28b163485232e434f5c7a5678ddd.tar.bz2
Merge topic 'ninja-version-refactor'
a3c5ca96 cmGlobalNinjaGenerator: Save 'ninja' version very early ed67f405 cmGlobalNinjaGenerator: Save path to 'ninja' tool very early
Diffstat (limited to 'Source')
-rw-r--r--Source/cmGlobalNinjaGenerator.cxx39
-rw-r--r--Source/cmGlobalNinjaGenerator.h6
2 files changed, 26 insertions, 19 deletions
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index 8498e39..a8a307c 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());
@@ -585,6 +585,23 @@ void cmGlobalNinjaGenerator::Generate()
this->CloseBuildFileStream();
}
+void cmGlobalNinjaGenerator::FindMakeProgram(cmMakefile* mf)
+{
+ this->cmGlobalGenerator::FindMakeProgram(mf);
+ if (const char* ninjaCommand = mf->GetDefinition("CMAKE_MAKE_PROGRAM"))
+ {
+ this->NinjaCommand = ninjaCommand;
+ std::vector<std::string> 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);
+ }
+}
+
void cmGlobalNinjaGenerator
::EnableLanguage(std::vector<std::string>const& langs,
cmMakefile* mf,
@@ -1260,28 +1277,16 @@ std::string cmGlobalNinjaGenerator::ninjaCmd() const
{
cmLocalGenerator* lgen = this->LocalGenerators[0];
if (lgen) {
- return lgen->ConvertToOutputFormat(
- lgen->GetMakefile()->GetRequiredDefinition("CMAKE_MAKE_PROGRAM"),
- cmLocalGenerator::SHELL);
+ return lgen->ConvertToOutputFormat(this->NinjaCommand,
+ cmLocalGenerator::SHELL);
}
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 7547f16..46bd588 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"; }
@@ -320,7 +319,7 @@ protected:
private:
virtual std::string GetEditCacheCommand() const;
-
+ virtual void FindMakeProgram(cmMakefile* mf);
void OpenBuildFileStream();
void CloseBuildFileStream();
@@ -392,6 +391,9 @@ private:
typedef std::map<std::string, cmGeneratorTarget*> TargetAliasMap;
TargetAliasMap TargetAliases;
+
+ std::string NinjaCommand;
+ std::string NinjaVersion;
};
#endif // ! cmGlobalNinjaGenerator_h