mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-19 02:17:27 +08:00
Ninja: Fix CMAKE_NINJA_OUTPUT_PATH_PREFIX with Ninja 1.10
The ninja 1.10 tools we use since commitfb18215904
(Ninja: clean ninja metadata once generated, 2019-05-13) expect `build.ninja` to be available and loadable. In commit6cc74b6140
(cmGlobalNinjaGenerator: avoid cleandead and recompact in Ninja-Multi, 2020-01-22) we added a condition to exclude the tools in a case where `build.ninja` is not available. Generalize that condition using a local variable and extend it for the case that `build.ninja` is not loadable in the current directory because it is meant to be a sub-ninja for a higher directory.
This commit is contained in:
@@ -549,22 +549,25 @@ void cmGlobalNinjaGenerator::Generate()
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Can the tools below expect 'build.ninja' to be loadable?
|
||||||
|
bool const expectBuildManifest =
|
||||||
|
!this->IsMultiConfig() && this->OutputPathPrefix.empty();
|
||||||
|
|
||||||
// The `cleandead` tool needs to know about all outputs in the build we just
|
// 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
|
// 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
|
// is the union of all generated configurations, so we can't run it reliably
|
||||||
// in that case.
|
// in that case.
|
||||||
if (this->NinjaSupportsCleanDeadTool && !this->IsMultiConfig()) {
|
if (this->NinjaSupportsCleanDeadTool && expectBuildManifest) {
|
||||||
run_ninja_tool({ "cleandead" });
|
run_ninja_tool({ "cleandead" });
|
||||||
}
|
}
|
||||||
// The `recompact` tool loads the manifest. As above, we don't have a single
|
// 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
|
// `build.ninja` to load for this in Ninja-Multi. This may be relaxed in the
|
||||||
// future pending further investigation into how Ninja works upstream
|
// future pending further investigation into how Ninja works upstream
|
||||||
// (ninja#1721).
|
// (ninja#1721).
|
||||||
if (this->NinjaSupportsUnconditionalRecompactTool &&
|
if (this->NinjaSupportsUnconditionalRecompactTool && expectBuildManifest) {
|
||||||
!this->IsMultiConfig()) {
|
|
||||||
run_ninja_tool({ "recompact" });
|
run_ninja_tool({ "recompact" });
|
||||||
}
|
}
|
||||||
if (this->NinjaSupportsRestatTool) {
|
if (this->NinjaSupportsRestatTool && this->OutputPathPrefix.empty()) {
|
||||||
// XXX(ninja): We only list `build.ninja` entry files here because CMake
|
// XXX(ninja): We only list `build.ninja` entry files here because CMake
|
||||||
// *always* rewrites these files on a reconfigure. If CMake ever gets
|
// *always* rewrites these files on a reconfigure. If CMake ever gets
|
||||||
// smarter about this, all CMake-time created/edited files listed as
|
// smarter about this, all CMake-time created/edited files listed as
|
||||||
|
Reference in New Issue
Block a user