aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/projectresolver.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-07-26 15:58:47 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-08-02 09:31:33 +0000
commit0a2f8da44f1c8aecb17c0352ad1585c93e599992 (patch)
tree9a2e19b31e22d139359dc446177283b0c9df87d4 /src/lib/corelib/language/projectresolver.cpp
parentc6e278c9ea5cc5ea1525f78d94c3f923f44a7168 (diff)
Fix problems regarding multiplexing and Depends.profiles
- Change the default of Depends.profiles from [product.profile] to undefined, so that we can by default use the same heuristics for dependencies, regardless over which property the products were multiplexed. - Replace the the internal Depends property "multiplexConfigurationId" by "multiplexConfigurationIds", which is a string list rather than a string. This way, we don't have to create additional Depends items anymore for the case where we want to depend on several variants of a product. Note that the old approach did not even work, because all but the first Depends item were ignored by the code that resolved the dependencies (since a module of that name already existed). The problem was masked by the fact that we set Depends.profiles to "*" in various places. This hack is now also gone. Change-Id: Ic05fdeed3978e2f7b184dfdc9c173d93406faec2 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/language/projectresolver.cpp')
-rw-r--r--src/lib/corelib/language/projectresolver.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index f8b1d50b7..2c951da2b 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -1003,24 +1003,26 @@ ProjectResolver::ProductDependencyInfos ProjectResolver::getProductDependencies(
}
dependencies.removeAt(i);
} else {
- ResolvedProductPtr usedProduct;
- if (!dependency.multiplexConfigurationId.isEmpty()) {
- usedProduct = m_productsByName.value(dependency.uniqueName());
- } else {
+ ResolvedProductPtr usedProduct = m_productsByName.value(dependency.uniqueName());
+ if (!usedProduct) {
+ // TODO: Proper error message with expanded configuration
+ throw ErrorInfo(Tr::tr("Product '%1' depends on '%2', which does not exist.")
+ .arg(product->name, dependency.uniqueName()), product->location);
+ }
+ if (!dependency.profile.isEmpty() && usedProduct->profile != dependency.profile) {
+ usedProduct.reset();
for (const ResolvedProductPtr &p : qAsConst(m_productsByName)) {
if (p->name == dependency.name && p->profile == dependency.profile) {
usedProduct = p;
break;
}
}
- }
- if (!usedProduct) {
- const ResolvedProductConstPtr p = m_productsByName.value(dependency.uniqueName());
- ErrorInfo e(Tr::tr("Product '%1' depends on '%2', which does not exist.")
- .arg(product->name, dependency.uniqueName()), product->location);
- if (p)
- e.append(Tr::tr("Requested profile was '%1'.").arg(dependency.profile));
- throw e;
+ if (!usedProduct) {
+ throw ErrorInfo(Tr::tr("Product '%1' depends on '%2', which does not exist "
+ "for the requested profile '%3'.")
+ .arg(product->name, dependency.name, dependency.profile),
+ product->location);
+ }
}
if (!usedProduct->enabled) {
if (!dependency.isRequired)