aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/corelib/language/item.h1
-rw-r--r--src/lib/corelib/language/moduleloader.cpp6
-rw-r--r--src/lib/corelib/language/modulemerger.cpp3
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