1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-17 07:11:52 +08:00

Ninja: Clean metadata after regen during build on Windows with 1.10.2+

Ninja 1.10.2 fixes support for `generator = 1` rules that run metadata
update commands during regeneration while a build is running.  Update
the condition added by commit ccaa0bccc4 (Ninja: Do not clean metadata
when re-generating inside a running build, 2020-01-27,
v3.17.0-rc1~73^2) to remove our workaround when Ninja is new enough.

Fixes: #20274
This commit is contained in:
Brad King
2020-11-30 14:54:45 -05:00
parent 5ef2364053
commit 11f4259362
2 changed files with 11 additions and 2 deletions

View File

@@ -539,10 +539,11 @@ void cmGlobalNinjaGenerator::Generate()
this->CloseBuildFileStreams(); this->CloseBuildFileStreams();
#ifdef _WIN32 #ifdef _WIN32
// The ninja tools will not be able to update metadata on Windows // Older ninja tools will not be able to update metadata on Windows
// when we are re-generating inside an existing 'ninja' invocation // when we are re-generating inside an existing 'ninja' invocation
// because the outer tool has the files open for write. // because the outer tool has the files open for write.
if (!this->GetCMakeInstance()->GetRegenerateDuringBuild()) if (this->NinjaSupportsMetadataOnRegeneration ||
!this->GetCMakeInstance()->GetRegenerateDuringBuild())
#endif #endif
{ {
this->CleanMetaData(); this->CleanMetaData();
@@ -691,6 +692,9 @@ void cmGlobalNinjaGenerator::CheckNinjaFeatures()
this->NinjaSupportsMultipleOutputs = !cmSystemTools::VersionCompare( this->NinjaSupportsMultipleOutputs = !cmSystemTools::VersionCompare(
cmSystemTools::OP_LESS, this->NinjaVersion.c_str(), cmSystemTools::OP_LESS, this->NinjaVersion.c_str(),
RequiredNinjaVersionForMultipleOutputs().c_str()); RequiredNinjaVersionForMultipleOutputs().c_str());
this->NinjaSupportsMetadataOnRegeneration = !cmSystemTools::VersionCompare(
cmSystemTools::OP_LESS, this->NinjaVersion.c_str(),
RequiredNinjaVersionForMetadataOnRegeneration().c_str());
} }
bool cmGlobalNinjaGenerator::CheckLanguages( bool cmGlobalNinjaGenerator::CheckLanguages(

View File

@@ -373,6 +373,10 @@ public:
{ {
return "1.10"; return "1.10";
} }
static std::string RequiredNinjaVersionForMetadataOnRegeneration()
{
return "1.10.2";
}
bool SupportsConsolePool() const; bool SupportsConsolePool() const;
bool SupportsImplicitOuts() const; bool SupportsImplicitOuts() const;
bool SupportsManifestRestat() const; bool SupportsManifestRestat() const;
@@ -538,6 +542,7 @@ private:
bool NinjaSupportsUnconditionalRecompactTool = false; bool NinjaSupportsUnconditionalRecompactTool = false;
bool NinjaSupportsCleanDeadTool = false; bool NinjaSupportsCleanDeadTool = false;
bool NinjaSupportsMultipleOutputs = false; bool NinjaSupportsMultipleOutputs = false;
bool NinjaSupportsMetadataOnRegeneration = false;
private: private:
void InitOutputPathPrefix(); void InitOutputPathPrefix();