diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/corelib/language/item.h | 1 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/language/modulemerger.cpp | 3 |
3 files changed, 9 insertions, 1 deletions
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<Item::Module> *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 |