diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/corelib/buildgraph/buildgraph.cpp | 22 | ||||
-rw-r--r-- | src/lib/corelib/language/language.cpp | 8 | ||||
-rw-r--r-- | src/lib/corelib/language/language.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 13 | ||||
-rw-r--r-- | src/lib/corelib/tools/persistence.cpp | 2 |
5 files changed, 28 insertions, 19 deletions
diff --git a/src/lib/corelib/buildgraph/buildgraph.cpp b/src/lib/corelib/buildgraph/buildgraph.cpp index f12c27ab6..e9767b942 100644 --- a/src/lib/corelib/buildgraph/buildgraph.cpp +++ b/src/lib/corelib/buildgraph/buildgraph.cpp @@ -222,9 +222,25 @@ private: QScriptValue result = engine->newArray(); quint32 idx = 0; const bool exportCase = depType == DependencyType::Exported; - const std::vector<ResolvedProductPtr> &productDeps = (exportCase - ? product->exportedModule.productDependencies - : product->dependencies); + std::vector<ResolvedProductPtr> productDeps; + if (exportCase) { + if (!product->exportedModule.productDependencies.empty()) { + const auto allProducts = product->topLevelProject()->allProducts(); + const auto getProductForName = [&allProducts](const QString &name) { + const auto cmp = [name](const ResolvedProductConstPtr &p) { + return p->uniqueName() == name; + }; + const auto it = std::find_if(allProducts.cbegin(), allProducts.cend(), cmp); + QBS_ASSERT(it != allProducts.cend(), return ResolvedProductPtr()); + return *it; + }; + std::transform(product->exportedModule.productDependencies.cbegin(), + product->exportedModule.productDependencies.cend(), + std::back_inserter(productDeps), getProductForName); + } + } else { + productDeps = product->dependencies; + } for (const ResolvedProductPtr &dependency : qAsConst(productDeps)) { QScriptValue obj = engine->newObject(engine->productPropertyScriptClass()); obj.setPrototype(setupProductScriptValue(static_cast<ScriptEngine *>(engine), diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index 56c310272..5351ba80c 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -979,11 +979,6 @@ bool operator==(const ExportedItem &i1, const ExportedItem &i2) bool operator==(const ExportedModule &m1, const ExportedModule &m2) { - static const auto cmpProductsByName = []( - const ResolvedProductConstPtr &p1, - const ResolvedProductConstPtr &p2) { - return p1->name == p2->name; - }; static const auto depMapsEqual = [](const QMap<ResolvedProductConstPtr, QVariantMap> &m1, const QMap<ResolvedProductConstPtr, QVariantMap> &m2) { if (m1.size() != m2.size()) @@ -1003,8 +998,7 @@ bool operator==(const ExportedModule &m1, const ExportedModule &m2) && m1.m_properties == m2.m_properties && m1.importStatements == m2.importStatements && m1.productDependencies.size() == m2.productDependencies.size() - && std::equal(m1.productDependencies.cbegin(), m1.productDependencies.cend(), - m2.productDependencies.cbegin(), cmpProductsByName) + && m1.productDependencies == m2.productDependencies && depMapsEqual(m1.dependencyParameters, m2.dependencyParameters); } diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h index 05fcfcf46..571681241 100644 --- a/src/lib/corelib/language/language.h +++ b/src/lib/corelib/language/language.h @@ -540,7 +540,7 @@ public: QVariantMap propertyValues; QVariantMap modulePropertyValues; std::vector<ExportedItemPtr> children; - std::vector<ResolvedProductPtr> productDependencies; + std::vector<QString> productDependencies; std::vector<ExportedModuleDependency> moduleDependencies; std::vector<ExportedProperty> m_properties; QMap<ResolvedProductConstPtr, QVariantMap> dependencyParameters; diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index 348858f2b..97015dae4 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -911,19 +911,18 @@ void ProjectResolver::collectExportedProductDependencies() if (!contains(directDepNames, dep.product->name)) continue; - if (!contains(exportingProduct->exportedModule.productDependencies, dep.product)) - exportingProduct->exportedModule.productDependencies.push_back(dep.product); + if (!contains(exportingProduct->exportedModule.productDependencies, + dep.product->uniqueName())) { + exportingProduct->exportedModule.productDependencies.push_back( + dep.product->uniqueName()); + } if (!dep.parameters.isEmpty()) { exportingProduct->exportedModule.dependencyParameters.insert(dep.product, dep.parameters); } } auto &productDeps = exportingProduct->exportedModule.productDependencies; - static const auto cmpFunc = [](const ResolvedProductConstPtr &p1, - const ResolvedProductConstPtr &p2) { - return p1->uniqueName() < p2->uniqueName(); - }; - std::sort(productDeps.begin(), productDeps.end(), cmpFunc); + std::sort(productDeps.begin(), productDeps.end()); } } diff --git a/src/lib/corelib/tools/persistence.cpp b/src/lib/corelib/tools/persistence.cpp index e705cb2da..996c8415d 100644 --- a/src/lib/corelib/tools/persistence.cpp +++ b/src/lib/corelib/tools/persistence.cpp @@ -49,7 +49,7 @@ namespace qbs { namespace Internal { -static const char QBS_PERSISTENCE_MAGIC[] = "QBSPERSISTENCE-119"; +static const char QBS_PERSISTENCE_MAGIC[] = "QBSPERSISTENCE-120"; NoBuildGraphError::NoBuildGraphError(const QString &filePath) : ErrorInfo(Tr::tr("Build graph not found for configuration '%1'. Expected location was '%2'.") |