diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-05-09 14:56:04 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-05-23 14:33:05 +0000 |
commit | 41595d0cf8ac00416a3a8a437eedde2715f75500 (patch) | |
tree | f9817b1c00397688a285bdcac93c625f7f9c07eb /src/lib/corelib/api | |
parent | efe413b7a70eed13ac9fe75d790bc5a6572af9cd (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.cpp | 23 | ||||
-rw-r--r-- | src/lib/corelib/api/projectdata.cpp | 18 | ||||
-rw-r--r-- | src/lib/corelib/api/projectdata.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/api/projectdata_p.h | 2 |
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; }; |