diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-04-24 16:43:41 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-04-25 07:11:47 +0000 |
commit | 2b14c324a337fec379e77ce0c12e273d08934537 (patch) | |
tree | 1888ecd2387b00cc9ee7947af0fe5e3a9f1a547c /src/lib/corelib/language/moduleloader.cpp | |
parent | 7d9f8bde75cbd6ed16c925706a8fc6bb3fa1226c (diff) |
ModuleLoader: Try to load all of a product's dependencies
If the product condition depends on some property of module B, then we
want to load that module, even if module A could not be loaded.
Otherwise, we will get a misleading error upon evaluating the product
condition.
Task-number: QBS-1338
Change-Id: Ib8c4108dc01f972a67f334b93a737dd43a938697
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/language/moduleloader.cpp')
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index 7b700a2f0..6eef347e8 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -1078,7 +1078,7 @@ void ModuleLoader::setupProductDependencies(ProductContext *productContext) DependsContext dependsContext; dependsContext.product = productContext; dependsContext.productDependencies = &productContext->info.usedProducts; - resolveDependencies(&dependsContext, item); + resolveDependencies(&dependsContext, item, productContext); addTransitiveDependencies(productContext); productContext->project->result->productInfos.insert(item, productContext->info); } @@ -2178,7 +2178,8 @@ void ModuleLoader::adjustDefiningItemsInGroupModuleInstances(const Item::Module } } -void ModuleLoader::resolveDependencies(DependsContext *dependsContext, Item *item) +void ModuleLoader::resolveDependencies(DependsContext *dependsContext, Item *item, + ProductContext *productContext) { const Item::Module baseModule = loadBaseModule(dependsContext->product, item); // Resolve all Depends items. @@ -2191,7 +2192,13 @@ void ModuleLoader::resolveDependencies(DependsContext *dependsContext, Item *ite continue; int lastModulesCount = loadedModules.size(); - resolveDependsItem(dependsContext, item, child, &loadedModules, &productDependencies); + try { + resolveDependsItem(dependsContext, item, child, &loadedModules, &productDependencies); + } catch (const ErrorInfo &e) { + if (!productContext) + throw; + handleProductError(e, productContext); + } for (int i = lastModulesCount; i < loadedModules.size(); ++i) dependsItemPerLoadedModule.push_back(child); } |