1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-16 22:37:30 +08:00

Ninja: Skip cleandead and recompact if build.ninja is missing

In error cases the `build.ninja` file may not exist.  Skip running ninja
tools that require it so that we do not generate additional errors.
This commit is contained in:
Brad King
2020-01-27 13:22:15 -05:00
parent dd0a4718fd
commit 5d92e60d81

View File

@@ -553,18 +553,26 @@ void cmGlobalNinjaGenerator::Generate()
bool const expectBuildManifest =
!this->IsMultiConfig() && this->OutputPathPrefix.empty();
// Skip some ninja tools if they need 'build.ninja' but it is missing.
bool const missingBuildManifest = expectBuildManifest &&
(this->NinjaSupportsCleanDeadTool ||
this->NinjaSupportsUnconditionalRecompactTool) &&
!cmSystemTools::FileExists("build.ninja");
// The `cleandead` tool needs to know about all outputs in the build we just
// wrote out. Ninja-Multi doesn't have a single `build.ninja` we can use that
// is the union of all generated configurations, so we can't run it reliably
// in that case.
if (this->NinjaSupportsCleanDeadTool && expectBuildManifest) {
if (this->NinjaSupportsCleanDeadTool && expectBuildManifest &&
!missingBuildManifest) {
run_ninja_tool({ "cleandead" });
}
// The `recompact` tool loads the manifest. As above, we don't have a single
// `build.ninja` to load for this in Ninja-Multi. This may be relaxed in the
// future pending further investigation into how Ninja works upstream
// (ninja#1721).
if (this->NinjaSupportsUnconditionalRecompactTool && expectBuildManifest) {
if (this->NinjaSupportsUnconditionalRecompactTool && expectBuildManifest &&
!missingBuildManifest) {
run_ninja_tool({ "recompact" });
}
if (this->NinjaSupportsRestatTool && this->OutputPathPrefix.empty()) {