summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2021-09-27 16:16:21 +0300
committerIvan Komissarov <ABBAPOH@gmail.com>2021-10-25 16:54:56 +0000
commit6812665a5e4de5b974b56d12d0bf6b7db19c58a3 (patch)
tree2855d1e2699e34b8b5d2cc9ee4ab60a86a49710c
parent879418ed15791a2a5828957a6f4d49b16b7a4544 (diff)
downloadqbs-6812665a5e4de5b974b56d12d0bf6b7db19c58a3.tar.gz
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 <christian.kandeler@qt.io>
-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