aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/buildgraph/artifactsscriptvalue.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-01-12 17:53:09 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2018-02-16 10:17:28 +0000
commit21c5ea0f79ad0e89eaa29ab5b91387b8454c4e3e (patch)
tree6b5ce9f69177a739842fc893f1e1a722a115bfaf /src/lib/corelib/buildgraph/artifactsscriptvalue.cpp
parent33006868d9d1bf1bee214f6d55c2cafde3cd2e3a (diff)
Track accesses to product.artifacts
... and take the data into account when deciding whether to re-run rules and commands. Change-Id: Ib0f733028617eaa91cbf902c5537f30375900646 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/buildgraph/artifactsscriptvalue.cpp')
-rw-r--r--src/lib/corelib/buildgraph/artifactsscriptvalue.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/lib/corelib/buildgraph/artifactsscriptvalue.cpp b/src/lib/corelib/buildgraph/artifactsscriptvalue.cpp
index ff6c409e3..eb9f5f587 100644
--- a/src/lib/corelib/buildgraph/artifactsscriptvalue.cpp
+++ b/src/lib/corelib/buildgraph/artifactsscriptvalue.cpp
@@ -86,13 +86,25 @@ static void setArtifactsMapUpToDate(const ResolvedProduct *p)
}
static void setArtifactsMapUpToDate(const ResolvedModule *) { }
+static void registerArtifactsMapAccess(const ResolvedProduct *p, ScriptEngine *e)
+{
+ e->setArtifactsMapRequested(p);
+}
+static void registerArtifactsMapAccess(const ResolvedModule *, ScriptEngine *) {}
+static void registerArtifactsSetAccess(const ResolvedProduct *p, const FileTag &t, ScriptEngine *e)
+{
+ e->setArtifactSetRequestedForTag(p, t);
+}
+static void registerArtifactsSetAccess(const ResolvedModule *, const FileTag &, ScriptEngine *) {}
+
template<class ProductOrModule> static QScriptValue js_artifactsForFileTag(
QScriptContext *ctx, ScriptEngine *engine, const ProductOrModule *productOrModule)
{
+ const FileTag fileTag = FileTag(ctx->callee().property(FileTagKey).toString().toUtf8());
+ registerArtifactsSetAccess(productOrModule, fileTag, engine);
QScriptValue result = ctx->callee().property(CachedValueKey);
if (result.isArray())
return result;
- const FileTag fileTag = FileTag(ctx->callee().property(FileTagKey).toString().toUtf8());
auto artifacts = artifactsMap(productOrModule).value(fileTag);
const auto filter = [productOrModule](const Artifact *a) {
return !isRelevantArtifact(productOrModule, a);
@@ -109,6 +121,7 @@ template<class ProductOrModule> static QScriptValue js_artifactsForFileTag(
template<class ProductOrModule> static QScriptValue js_artifacts(
QScriptContext *ctx, ScriptEngine *engine, const ProductOrModule *productOrModule)
{
+ registerArtifactsMapAccess(productOrModule, engine);
QScriptValue artifactsObj = ctx->callee().property(CachedValueKey);
if (artifactsObj.isObject() && isArtifactsMapUpToDate(productOrModule))
return artifactsObj;