diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2021-09-27 16:16:21 +0300 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2021-10-25 16:54:56 +0000 |
commit | 6812665a5e4de5b974b56d12d0bf6b7db19c58a3 (patch) | |
tree | 2855d1e2699e34b8b5d2cc9ee4ab60a86a49710c | |
parent | 879418ed15791a2a5828957a6f4d49b16b7a4544 (diff) | |
download | qbs-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.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 |