diff options
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 14 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.h | 1 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/pseudo-multiplexing/pseudo-multiplexing.qbs | 14 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 8 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.h | 1 |
5 files changed, 33 insertions, 5 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index b8a4571a5..afdb908ea 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -822,10 +822,12 @@ QList<Item *> ModuleLoader::multiplexProductItem(ProductContext *dummyContext, I item = productItem->clone(); additionalProductItems.append(item); } + const QString multiplexConfigurationId = multiplexInfo.toIdString(row); + const VariantValuePtr multiplexConfigurationIdValue + = VariantValue::create(multiplexConfigurationId); + item->setProperty(QStringLiteral("__multiplexConfigIdForModulePrototypes"), + multiplexConfigurationIdValue); if (multiplexInfo.table.size() > 1 || aggregator) { - const QString multiplexConfigurationId = multiplexInfo.toIdString(row); - const VariantValuePtr multiplexConfigurationIdValue - = VariantValue::create(multiplexConfigurationId); multiplexConfigurationIdValues.push_back(multiplexConfigurationIdValue); item->setProperty(multiplexConfigurationIdKey, multiplexConfigurationIdValue); } @@ -942,6 +944,8 @@ void ModuleLoader::prepareProduct(ProjectContext *projectContext, Item *productI QString(), &profilePropertySet); productContext.multiplexConfigurationId = m_evaluator->stringValue(productItem, QLatin1String("multiplexConfigurationId")); + productContext.multiplexConfigIdForModulePrototypes = m_evaluator->stringValue( + productItem, QStringLiteral("__multiplexConfigIdForModulePrototypes")); QBS_CHECK(profilePropertySet); const auto it = projectContext->result->profileConfigs.constFind(productContext.profileName); if (it == projectContext->result->profileConfigs.constEnd()) { @@ -2551,8 +2555,8 @@ Item *ModuleLoader::loadModuleFile(ProductContext *productContext, const QString qCDebug(lcModuleLoader) << "loadModuleFile" << fullModuleName << "from" << filePath; - const QString keyUniquifier = productContext->multiplexConfigurationId.isEmpty() ? - productContext->profileName : productContext->uniqueName(); + const QString keyUniquifier = productContext->multiplexConfigIdForModulePrototypes.isEmpty() + ? productContext->profileName : productContext->multiplexConfigIdForModulePrototypes; const ModuleItemCache::key_type cacheKey(filePath, keyUniquifier); const ItemCacheValue cacheValue = m_modulePrototypeItemCache.value(cacheKey); if (cacheValue.module) { diff --git a/src/lib/corelib/language/moduleloader.h b/src/lib/corelib/language/moduleloader.h index d9fb5d032..5b672e49c 100644 --- a/src/lib/corelib/language/moduleloader.h +++ b/src/lib/corelib/language/moduleloader.h @@ -164,6 +164,7 @@ private: QString name; QString profileName; QString multiplexConfigurationId; + QString multiplexConfigIdForModulePrototypes; QVariantMap moduleProperties; std::map<QString, ProductDependencies> productModuleDependencies; diff --git a/tests/auto/blackbox/testdata/pseudo-multiplexing/pseudo-multiplexing.qbs b/tests/auto/blackbox/testdata/pseudo-multiplexing/pseudo-multiplexing.qbs new file mode 100644 index 000000000..0639adc8a --- /dev/null +++ b/tests/auto/blackbox/testdata/pseudo-multiplexing/pseudo-multiplexing.qbs @@ -0,0 +1,14 @@ +import qbs + +Project { + Product { + name: "a" + multiplexByQbsProperties: ["architectures"] + Depends { name: "cpp" } + } + Product { + name: "b" + multiplexByQbsProperties: [] + Depends { name: "cpp" } + } +} diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 2677b041e..f4092c666 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -4247,6 +4247,14 @@ void TestBlackbox::propertiesInExportItems() QVERIFY2(m_qbsStderr.isEmpty(), m_qbsStderr.constData()); } +void TestBlackbox::pseudoMultiplexing() +{ + // This is "pseudo-multiplexing" on all platforms that initialize qbs.architectures + // to an array with one element. See QBS-1243. + QDir::setCurrent(testDataDir + "/pseudo-multiplexing"); + QCOMPARE(runQbs(), 0); +} + void TestBlackbox::radAfterIncompleteBuild_data() { QTest::addColumn<QString>("projectFileName"); diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index b31495ad0..3f7215995 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -170,6 +170,7 @@ private slots: void propertyPrecedence(); void properQuoting(); void propertiesInExportItems(); + void pseudoMultiplexing(); void qbsVersion(); void qtBug51237(); void radAfterIncompleteBuild(); |