aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/moduleloader.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-04-24 16:43:41 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-04-25 07:11:47 +0000
commit2b14c324a337fec379e77ce0c12e273d08934537 (patch)
tree1888ecd2387b00cc9ee7947af0fe5e3a9f1a547c /src/lib/corelib/language/moduleloader.cpp
parent7d9f8bde75cbd6ed16c925706a8fc6bb3fa1226c (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.cpp13
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);
}