diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-07-26 15:58:47 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-08-02 09:31:33 +0000 |
commit | 0a2f8da44f1c8aecb17c0352ad1585c93e599992 (patch) | |
tree | 9a2e19b31e22d139359dc446177283b0c9df87d4 /src/lib/corelib/language/projectresolver.cpp | |
parent | c6e278c9ea5cc5ea1525f78d94c3f923f44a7168 (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.cpp | 26 |
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) |