diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-08-31 16:18:07 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-08-31 16:18:07 +0200 |
commit | 58219e2d386a799cb89bf54a22386737614d31b0 (patch) | |
tree | 9e57e3e02d530e16cc512c95f1bededb68fd39e3 /src/lib | |
parent | ac7351024345ef6730e9d3b575979be20991ff88 (diff) | |
parent | 89689cac88ffe880942c7acb59fc3374a34cbd6c (diff) |
Merge 1.12 into master
Change-Id: I745a07a3b25abd6c89afcd3b2199119a751e8a0c
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/corelib/buildgraph/buildgraph.cpp | 22 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/executor.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/inputartifactscanner.cpp | 4 | ||||
-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 |
6 files changed, 31 insertions, 22 deletions
diff --git a/src/lib/corelib/buildgraph/buildgraph.cpp b/src/lib/corelib/buildgraph/buildgraph.cpp index 27e28ce44..42091ec56 100644 --- a/src/lib/corelib/buildgraph/buildgraph.cpp +++ b/src/lib/corelib/buildgraph/buildgraph.cpp @@ -224,9 +224,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/buildgraph/executor.cpp b/src/lib/corelib/buildgraph/executor.cpp index 9a97b054e..1fd6aa986 100644 --- a/src/lib/corelib/buildgraph/executor.cpp +++ b/src/lib/corelib/buildgraph/executor.cpp @@ -889,8 +889,8 @@ void Executor::rescueOldBuildData(Artifact *artifact, bool *childrenAdded = null if (childrenAdded && !childrenToConnect.empty()) *childrenAdded = true; for (Artifact * const child : childrenToConnect) { - safeConnect(artifact, child); - artifact->childrenAddedByScanner << child; + if (safeConnect(artifact, child)) + artifact->childrenAddedByScanner << child; } qCDebug(lcBuildGraph) << "Data was rescued."; } else { diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.cpp b/src/lib/corelib/buildgraph/inputartifactscanner.cpp index 051560aba..143c99fb5 100644 --- a/src/lib/corelib/buildgraph/inputartifactscanner.cpp +++ b/src/lib/corelib/buildgraph/inputartifactscanner.cpp @@ -343,8 +343,8 @@ void InputArtifactScanner::handleDependency(ResolvedDependency &dependency) } else { if (m_artifact->children.contains(artifactDependency)) return; - safeConnect(m_artifact, artifactDependency); - m_artifact->childrenAddedByScanner += artifactDependency; + if (safeConnect(m_artifact, artifactDependency)) + m_artifact->childrenAddedByScanner += artifactDependency; m_newDependencyAdded = true; } } diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index 06887fefb..d8a5d9162 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -937,11 +937,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()) @@ -961,8 +956,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 06a9af54a..f9d69efff 100644 --- a/src/lib/corelib/language/language.h +++ b/src/lib/corelib/language/language.h @@ -537,7 +537,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 27829e378..ddac7264c 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -948,19 +948,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()); } } |