From ccaa0bccc42a31f7515c6f85a0601ac0ad006e96 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 27 Jan 2020 15:31:53 -0500 Subject: Ninja: Do not clean metadata when re-generating inside a running build When `ninja` re-runs CMake to re-generate the build system, do not try to use the ninja tools to update metadata on Windows. The outer ninja process is already holding the files open. Issue: #20274 --- Source/cmGlobalNinjaGenerator.cxx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index f92ffd3..d093c43 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -528,7 +528,15 @@ void cmGlobalNinjaGenerator::Generate() this->CloseRulesFileStream(); this->CloseBuildFileStreams(); - this->CleanMetaData(); +#ifdef _WIN32 + // The ninja tools will not be able to update metadata on Windows + // when we are re-generating inside an existing 'ninja' invocation + // because the outer tool has the files open for write. + if (!this->GetCMakeInstance()->GetRegenerateDuringBuild()) +#endif + { + this->CleanMetaData(); + } } void cmGlobalNinjaGenerator::CleanMetaData() -- cgit v0.12