Ninja: Fix EXCLUDE_FROM_ALL OFF on sub/sub/tgt in sub/all

Defer adding a test to a later commit after all generators have been
fixed.

Issue: #19753
This commit is contained in:
Brad King
2019-09-26 14:35:55 -04:00
parent 0733a94f64
commit a49cd4d1a7

View File

@@ -1114,8 +1114,25 @@ void cmGlobalNinjaGenerator::WriteFolderTargets(std::ostream& os)
type == cmStateEnums::SHARED_LIBRARY ||
type == cmStateEnums::MODULE_LIBRARY ||
type == cmStateEnums::OBJECT_LIBRARY ||
type == cmStateEnums::UTILITY) &&
!gt->GetPropertyAsBool("EXCLUDE_FROM_ALL")) {
type == cmStateEnums::UTILITY)) {
if (const char* exclude = gt->GetProperty("EXCLUDE_FROM_ALL")) {
if (cmIsOn(exclude)) {
// This target has been explicitly excluded.
continue;
}
// This target has been explicitly un-excluded. The directory-level
// rule for every directory between this and the root (exclusive)
// should depend on the target-level rule for this target.
cmStateSnapshot dir =
lg->GetStateSnapshot().GetBuildsystemDirectoryParent();
cmStateSnapshot parent = dir.GetBuildsystemDirectoryParent();
while (parent.IsValid()) {
std::string const& folder = dir.GetDirectory().GetCurrentBinary();
targetsPerFolder[folder].push_back(gt->GetName());
dir = parent;
parent = parent.GetBuildsystemDirectoryParent();
}
}
folderTargets.push_back(gt->GetName());
}
}