From 6812665a5e4de5b974b56d12d0bf6b7db19c58a3 Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Mon, 27 Sep 2021 16:16:21 +0300 Subject: Correctly propagate fallbackEnabled property When looking for transitive deps, we need to take into account not only the value set via parameters, but also the value in the property of the Depends item. Change-Id: I3fa6f0b027a3e00c35533f57070e000761dfc340 Reviewed-by: Christian Kandeler --- src/lib/corelib/language/item.h | 1 + src/lib/corelib/language/moduleloader.cpp | 6 +++++- src/lib/corelib/language/modulemerger.cpp | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/lib/corelib/language/item.h b/src/lib/corelib/language/item.h index 16dd2016c..22cf6b810 100644 --- a/src/lib/corelib/language/item.h +++ b/src/lib/corelib/language/item.h @@ -83,6 +83,7 @@ public: bool isProduct; bool requiredValue = true; // base value of the required prop bool required; + bool fallbackEnabled = true; QVariantMap parameters; VersionRange versionRange; }; diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index 3435238a7..952fa9ed6 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -2685,6 +2685,7 @@ void ModuleLoader::resolveDependsItem(DependsContext *dependsContext, Item *pare if (it != moduleResults->end()) { it->required = it->required || isRequired; it->requiredValue = it->requiredValue || isRequiredValue; + it->fallbackEnabled = it->fallbackEnabled && fallbackMode == FallbackMode::Enabled; it->versionRange.narrowDown(versionRange); continue; } @@ -2719,6 +2720,7 @@ void ModuleLoader::resolveDependsItem(DependsContext *dependsContext, Item *pare result.item = moduleItem; result.requiredValue = isRequiredValue; result.required = isRequired; + result.fallbackEnabled = fallbackMode == FallbackMode::Enabled; result.parameters = defaultParameters; result.versionRange = versionRange; moduleResults->push_back(result); @@ -3771,6 +3773,7 @@ void ModuleLoader::collectAllModules(Item *item, std::vector *modu if (m.required) it->required = true; it->versionRange.narrowDown(m.versionRange); + it->fallbackEnabled = it->fallbackEnabled && m.fallbackEnabled; continue; } modules->push_back(m); @@ -3884,7 +3887,7 @@ void ModuleLoader::addTransitiveDependencies(ProductContext *ctx) if (module.isProduct) { ctx->item->addModule(module); } else { - const FallbackMode fallbackMode = m_parameters.fallbackProviderEnabled() + const FallbackMode fallbackMode = module.fallbackEnabled ? FallbackMode::Enabled : FallbackMode::Disabled; Item::Module dep; dep.item = loadModule(ctx, nullptr, ctx->item, ctx->item->location(), QString(), @@ -3899,6 +3902,7 @@ void ModuleLoader::addTransitiveDependencies(ProductContext *ctx) dep.name = module.name; dep.required = module.required; dep.versionRange = module.versionRange; + dep.fallbackEnabled = fallbackMode == FallbackMode::Enabled; ctx->item->addModule(dep); } } diff --git a/src/lib/corelib/language/modulemerger.cpp b/src/lib/corelib/language/modulemerger.cpp index c5deaae04..6ad8e2259 100644 --- a/src/lib/corelib/language/modulemerger.cpp +++ b/src/lib/corelib/language/modulemerger.cpp @@ -130,6 +130,7 @@ void ModuleMerger::start() m.item = m_mergedModule.item; m.required = m_mergedModule.required; m.versionRange = m_mergedModule.versionRange; + m.fallbackEnabled = m_mergedModule.fallbackEnabled; } modules << m; } @@ -207,6 +208,8 @@ void ModuleMerger::mergeModule(Item::PropertyMap *dstProps, const Item::Module & // Update dependency constraints if (dep->required) m_mergedModule.required = true; + // if one dep has fallback disabled, disable it for the merged module + m_mergedModule.fallbackEnabled = m_mergedModule.fallbackEnabled && dep->fallbackEnabled; m_mergedModule.versionRange.narrowDown(dep->versionRange); // We need to touch the unmerged module instances later once more -- cgit v1.2.3