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:
@@ -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(
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user