aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qbsprojectmanager/qbsnodes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qbsprojectmanager/qbsnodes.cpp')
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodes.cpp63
1 files changed, 59 insertions, 4 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp
index 61b7b005de..68731e30a1 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.cpp
+++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp
@@ -151,6 +151,33 @@ QString QbsProductNode::getBuildKey(const QJsonObject &product)
+ product.value("multiplex-configuration-id").toString();
}
+bool QbsProductNode::isAggregated() const
+{
+ return m_productData.value("is-multiplexed").toBool()
+ && m_productData.value("multiplex-configuration-id").toString().isEmpty();
+}
+
+const QList<const QbsProductNode*> QbsProductNode::aggregatedProducts() const
+{
+ if (!isAggregated())
+ return {};
+ const ProjectNode *parentNode = managingProject();
+ QTC_ASSERT(parentNode != nullptr && parentNode != this, return {});
+
+ QSet<QString> dependencies;
+ for (const auto &a : m_productData.value("dependencies").toArray())
+ dependencies << a.toString();
+
+ QList<const QbsProductNode*> qbsProducts;
+ parentNode->forEachProjectNode([&qbsProducts, dependencies](const ProjectNode *node) {
+ if (const auto qbsChildNode = dynamic_cast<const QbsProductNode *>(node)) {
+ if (dependencies.contains(qbsChildNode->fullDisplayName()))
+ qbsProducts << qbsChildNode;
+ }
+ });
+ return qbsProducts;
+}
+
QVariant QbsProductNode::data(Id role) const
{
if (role == Android::Constants::AndroidDeploySettingsFile) {
@@ -164,10 +191,16 @@ QVariant QbsProductNode::data(Id role) const
if (role == Android::Constants::AndroidSoLibPath) {
QStringList ret{m_productData.value("build-directory").toString()};
- forAllArtifacts(m_productData, ArtifactType::Generated, [&ret](const QJsonObject &artifact) {
- if (artifact.value("file-tags").toArray().contains("dynamiclibrary"))
- ret << QFileInfo(artifact.value("file-path").toString()).path();
- });
+ if (!isAggregated()) {
+ forAllArtifacts(m_productData, ArtifactType::Generated,
+ [&ret](const QJsonObject &artifact) {
+ if (artifact.value("file-tags").toArray().contains("dynamiclibrary"))
+ ret << QFileInfo(artifact.value("file-path").toString()).path();
+ });
+ } else {
+ for (const auto &a : aggregatedProducts())
+ ret += a->data(Android::Constants::AndroidSoLibPath).toStringList();
+ }
ret.removeDuplicates();
return ret;
}
@@ -188,6 +221,28 @@ QVariant QbsProductNode::data(Id role) const
return m_productData.value("module-properties").toObject()
.value("Qt.core.enableKeywords").toBool();
+ if (role == Android::Constants::ANDROID_ABIS) {
+ // Try using qbs.architectures
+ QStringList qbsAbis;
+ QMap<QString, QString> archToAbi {
+ {"armv7a", ProjectExplorer::Constants::ANDROID_ABI_ARMEABI_V7A},
+ {"arm64", ProjectExplorer::Constants::ANDROID_ABI_ARM64_V8A},
+ {"x86", ProjectExplorer::Constants::ANDROID_ABI_X86},
+ {"x86_64", ProjectExplorer::Constants::ANDROID_ABI_X86_64}};
+ for (const auto &a : m_productData.value("module-properties").toObject()
+ .value(Constants::QBS_ARCHITECTURES).toArray()) {
+ if (archToAbi.contains(a.toString()))
+ qbsAbis << archToAbi[a.toString()];
+ }
+ if (!qbsAbis.empty())
+ return qbsAbis;
+ // Try using qbs.architecture
+ QString architecture = m_productData.value("module-properties").toObject()
+ .value(Constants::QBS_ARCHITECTURE).toString();
+ if (archToAbi.contains(architecture))
+ qbsAbis << archToAbi[architecture];
+ return qbsAbis;
+ }
return {};
}