aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/moduleloader.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-06-15 09:32:55 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-06-15 12:38:55 +0000
commit62808656466750ce5a0d42c656e45832220fedaa (patch)
treed05c4948395487fbe3819845bc3ebff080e550f3 /src/lib/corelib/language/moduleloader.cpp
parentd994e54712efb69225d73d93fc57b89a3d39cacb (diff)
Check for duplicate entries in multiplex properties
This used to lead to an error message about duplicate product names, which left the user in the dark about the actual problem. Change-Id: I460dcdf89112124cfd303529d42acd6c13fe9155 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'src/lib/corelib/language/moduleloader.cpp')
-rw-r--r--src/lib/corelib/language/moduleloader.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index df47e36ea..41781cb7d 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -789,11 +789,18 @@ ModuleLoader::MultiplexInfo ModuleLoader::extractMultiplexInfo(Item *productItem
if (!multiplexedType.isEmpty())
multiplexInfo.multiplexedType = VariantValue::create(multiplexedType);
+ Set<QString> uniqueMultiplexByQbsProperties;
for (const QString &key : multiplexByQbsProperties) {
const QString mappedKey = multiplexMap.property(key).toString();
if (mappedKey.isEmpty())
throw ErrorInfo(Tr::tr("There is no entry for '%1' in 'qbs.multiplexMap'.").arg(key));
+ if (!uniqueMultiplexByQbsProperties.insert(mappedKey).second) {
+ throw ErrorInfo(Tr::tr("Duplicate entry '%1' in Product.%2.")
+ .arg(mappedKey, StringConstants::multiplexByQbsPropertiesProperty()),
+ productItem->location());
+ }
+
const QScriptValue arr = m_evaluator->value(qbsModuleItem, key);
if (arr.isUndefined())
continue;
@@ -806,8 +813,15 @@ ModuleLoader::MultiplexInfo ModuleLoader::extractMultiplexInfo(Item *productItem
MultiplexRow mprow;
mprow.resize(arrlen);
- for (quint32 i = 0; i < arrlen; ++i)
- mprow[i] = VariantValue::create(arr.property(i).toVariant());
+ Set<QVariant> entriesForKey;
+ for (quint32 i = 0; i < arrlen; ++i) {
+ const QVariant value = arr.property(i).toVariant();
+ if (!entriesForKey.insert(value).second) {
+ throw ErrorInfo(Tr::tr("Duplicate entry '%1' in qbs.%2.")
+ .arg(value.toString(), key), productItem->location());
+ }
+ mprow[i] = VariantValue::create(value);
+ }
multiplexInfo.table = combine(multiplexInfo.table, mprow);
multiplexInfo.properties.push_back(mappedKey);
}