aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/api
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2017-05-09 14:56:04 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2017-05-23 14:33:05 +0000
commit41595d0cf8ac00416a3a8a437eedde2715f75500 (patch)
treef9817b1c00397688a285bdcac93c625f7f9c07eb /src/lib/corelib/api
parentefe413b7a70eed13ac9fe75d790bc5a6572af9cd (diff)
Switch to a new multiplexing approach
[ChangeLog] Added a more general way of multiplexing products to properly support the creation of collections of multiple variants of the same product, e.g. macOS bundles and Android packages. Task-number: QBS-192 Task-number: QBS-912 Change-Id: I943aaa70953bf8c7726fe1b2bbb9b4d5a25f083c Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/lib/corelib/api')
-rw-r--r--src/lib/corelib/api/project.cpp23
-rw-r--r--src/lib/corelib/api/projectdata.cpp18
-rw-r--r--src/lib/corelib/api/projectdata.h2
-rw-r--r--src/lib/corelib/api/projectdata_p.h2
4 files changed, 39 insertions, 6 deletions
diff --git a/src/lib/corelib/api/project.cpp b/src/lib/corelib/api/project.cpp
index 628ccb20c..7d8a3c12d 100644
--- a/src/lib/corelib/api/project.cpp
+++ b/src/lib/corelib/api/project.cpp
@@ -203,14 +203,19 @@ QList<ResolvedProductPtr> ProjectPrivate::allEnabledInternalProducts(bool includ
return enabledInternalProducts(internalProject, includingNonDefault);
}
+static bool matches(const ProductData &product, const ResolvedProductConstPtr &rproduct)
+{
+ return product.name() == rproduct->name
+ && product.profile() == rproduct->profile
+ && product.multiplexConfigurationId() == rproduct->multiplexConfigurationId;
+}
+
static ResolvedProductPtr internalProductForProject(const ResolvedProjectConstPtr &project,
const ProductData &product)
{
for (const ResolvedProductPtr &resolvedProduct : qAsConst(project->products)) {
- if (product.name() == resolvedProduct->name
- && product.profile() == resolvedProduct->profile) {
+ if (matches(product, resolvedProduct))
return resolvedProduct;
- }
}
for (const ResolvedProjectConstPtr &subProject : qAsConst(project->subProjects)) {
const ResolvedProductPtr &p = internalProductForProject(subProject, product);
@@ -228,8 +233,11 @@ ResolvedProductPtr ProjectPrivate::internalProduct(const ProductData &product) c
ProductData ProjectPrivate::findProductData(const ProductData &product) const
{
for (const ProductData &p : m_projectData.allProducts()) {
- if (p.name() == product.name() && p.profile() == product.profile())
+ if (p.name() == product.name()
+ && p.profile() == product.profile()
+ && p.multiplexConfigurationId() == product.multiplexConfigurationId()) {
return p;
+ }
}
return ProductData();
}
@@ -756,6 +764,11 @@ static bool productIsRunnable(const ResolvedProductConstPtr &product)
return product->fileTags.contains("application");
}
+static bool productIsMultiplexed(const ResolvedProductConstPtr &product)
+{
+ return product->productProperties.value(QStringLiteral("multiplexed")).toBool();
+}
+
void ProjectPrivate::retrieveProjectData(ProjectData &projectData,
const ResolvedProjectConstPtr &internalProject)
{
@@ -770,10 +783,12 @@ void ProjectPrivate::retrieveProjectData(ProjectData &projectData,
product.d->version = resolvedProduct->productProperties
.value(QLatin1String("version")).toString();
product.d->profile = resolvedProduct->profile;
+ product.d->multiplexConfigurationId = resolvedProduct->multiplexConfigurationId;
product.d->location = resolvedProduct->location;
product.d->buildDirectory = resolvedProduct->buildDirectory();
product.d->isEnabled = resolvedProduct->enabled;
product.d->isRunnable = productIsRunnable(resolvedProduct);
+ product.d->isMultiplexed = productIsMultiplexed(resolvedProduct);
product.d->properties = resolvedProduct->productProperties;
product.d->moduleProperties.d->m_map = resolvedProduct->moduleProperties;
for (const GroupPtr &resolvedGroup : qAsConst(resolvedProduct->groups))
diff --git a/src/lib/corelib/api/projectdata.cpp b/src/lib/corelib/api/projectdata.cpp
index 961ce075c..ed8b09149 100644
--- a/src/lib/corelib/api/projectdata.cpp
+++ b/src/lib/corelib/api/projectdata.cpp
@@ -474,6 +474,11 @@ QString ProductData::profile() const
return d->profile;
}
+QString ProductData::multiplexConfigurationId() const
+{
+ return d->multiplexConfigurationId;
+}
+
/*!
* \brief The location at which the product is defined in the source file.
*/
@@ -589,6 +594,12 @@ bool ProductData::isRunnable() const
return d->isRunnable;
}
+bool ProductData::isMultiplexed() const
+{
+ QBS_ASSERT(isValid(), return false);
+ return d->isMultiplexed;
+}
+
bool operator==(const ProductData &lhs, const ProductData &rhs)
{
if (!lhs.isValid() && !rhs.isValid())
@@ -601,12 +612,14 @@ bool operator==(const ProductData &lhs, const ProductData &rhs)
&& lhs.version() == rhs.version()
&& lhs.dependencies() == rhs.dependencies()
&& lhs.profile() == rhs.profile()
+ && lhs.multiplexConfigurationId() == rhs.multiplexConfigurationId()
&& lhs.location() == rhs.location()
&& lhs.groups() == rhs.groups()
&& lhs.generatedArtifacts() == rhs.generatedArtifacts()
&& lhs.properties() == rhs.properties()
&& lhs.moduleProperties() == rhs.moduleProperties()
- && lhs.isEnabled() == rhs.isEnabled();
+ && lhs.isEnabled() == rhs.isEnabled()
+ && lhs.isMultiplexed() == rhs.isMultiplexed();
}
bool operator!=(const ProductData &lhs, const ProductData &rhs)
@@ -621,7 +634,8 @@ bool operator<(const ProductData &lhs, const ProductData &rhs)
return true;
if (nameCmp > 0)
return false;
- return lhs.profile() < rhs.profile();
+ return lhs.profile() < rhs.profile()
+ && lhs.multiplexConfigurationId() < lhs.multiplexConfigurationId();
}
/*!
diff --git a/src/lib/corelib/api/projectdata.h b/src/lib/corelib/api/projectdata.h
index 12bc756ae..9f9dafcc7 100644
--- a/src/lib/corelib/api/projectdata.h
+++ b/src/lib/corelib/api/projectdata.h
@@ -189,6 +189,7 @@ public:
QString targetName() const;
QString version() const;
QString profile() const;
+ QString multiplexConfigurationId() const;
CodeLocation location() const;
QString buildDirectory() const;
QList<ArtifactData> generatedArtifacts() const;
@@ -200,6 +201,7 @@ public:
PropertyMap moduleProperties() const;
bool isEnabled() const;
bool isRunnable() const;
+ bool isMultiplexed() const;
private:
QExplicitlySharedDataPointer<Internal::ProductDataPrivate> d;
diff --git a/src/lib/corelib/api/projectdata_p.h b/src/lib/corelib/api/projectdata_p.h
index 9eee68db2..58ae2ffea 100644
--- a/src/lib/corelib/api/projectdata_p.h
+++ b/src/lib/corelib/api/projectdata_p.h
@@ -110,6 +110,7 @@ public:
QString targetName;
QString version;
QString profile;
+ QString multiplexConfigurationId;
CodeLocation location;
QString buildDirectory;
QList<GroupData> groups;
@@ -118,6 +119,7 @@ public:
QList<ArtifactData> generatedArtifacts;
bool isEnabled;
bool isRunnable;
+ bool isMultiplexed;
bool isValid;
};