aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/reference/items/language/scanner.qdoc6
-rw-r--r--src/lib/corelib/buildgraph/depscanner.cpp20
-rw-r--r--src/lib/corelib/buildgraph/depscanner.h11
-rw-r--r--src/lib/corelib/buildgraph/inputartifactscanner.cpp4
-rw-r--r--src/lib/corelib/buildgraph/qtmocscanner.cpp5
-rw-r--r--src/lib/corelib/language/builtindeclarations.cpp3
-rw-r--r--src/lib/corelib/tools/stringconstants.h1
7 files changed, 32 insertions, 18 deletions
diff --git a/doc/reference/items/language/scanner.qdoc b/doc/reference/items/language/scanner.qdoc
index 90e5ad63a..9ec575684 100644
--- a/doc/reference/items/language/scanner.qdoc
+++ b/doc/reference/items/language/scanner.qdoc
@@ -98,7 +98,11 @@
dependencies.
The code in this script is treated as a function with the signature
- \c{function(project, product, input)}.
+ \c{function(project, product, input, filePath)}, where \c input is
+ the artifact at which the scan originated, and \c filePath is the
+ currently scanned file. For non-recursive scans, \c filePath is
+ always equal to \c{input.filePath}.
+
\nodefaultvalue
*/
diff --git a/src/lib/corelib/buildgraph/depscanner.cpp b/src/lib/corelib/buildgraph/depscanner.cpp
index c9fc04bb8..90c00c70d 100644
--- a/src/lib/corelib/buildgraph/depscanner.cpp
+++ b/src/lib/corelib/buildgraph/depscanner.cpp
@@ -100,9 +100,10 @@ QStringList PluginDependencyScanner::collectSearchPaths(Artifact *artifact)
return QStringList();
}
-QStringList PluginDependencyScanner::collectDependencies(FileResourceBase *file,
+QStringList PluginDependencyScanner::collectDependencies(Artifact *artifact, FileResourceBase *file,
const char *fileTags)
{
+ Q_UNUSED(artifact);
Set<QString> result;
QString baseDirOfInFilePath = file->dirPath();
const QString &filepath = file->filePath();
@@ -167,16 +168,14 @@ UserDependencyScanner::UserDependencyScanner(const ResolvedScannerConstPtr &scan
QStringList UserDependencyScanner::collectSearchPaths(Artifact *artifact)
{
- return evaluate(artifact, m_scanner->searchPathsScript);
+ return evaluate(artifact, nullptr, m_scanner->searchPathsScript);
}
-QStringList UserDependencyScanner::collectDependencies(FileResourceBase *file, const char *fileTags)
+QStringList UserDependencyScanner::collectDependencies(Artifact *artifact, FileResourceBase *file,
+ const char *fileTags)
{
Q_UNUSED(fileTags);
- // ### support user dependency scanners for file deps
- if (file->fileType() != FileResourceBase::FileTypeArtifact)
- return QStringList();
- return evaluate(static_cast<Artifact *>(file), m_scanner->scanScript);
+ return evaluate(artifact, file, m_scanner->scanScript);
}
bool UserDependencyScanner::recursive() const
@@ -219,7 +218,8 @@ public:
}
};
-QStringList UserDependencyScanner::evaluate(Artifact *artifact, const PrivateScriptFunction &script)
+QStringList UserDependencyScanner::evaluate(const Artifact *artifact,
+ const FileResourceBase *fileToScan, const PrivateScriptFunction &script)
{
ScriptEngineActiveFlagGuard guard(m_engine);
@@ -230,10 +230,12 @@ QStringList UserDependencyScanner::evaluate(Artifact *artifact, const PrivateScr
}
QScriptValueList args;
- args.reserve(3);
+ args.reserve(fileToScan ? 4 : 3);
args.push_back(m_global.property(StringConstants::projectVar()));
args.push_back(m_global.property(StringConstants::productVar()));
args.push_back(Transformer::translateFileConfig(m_engine, artifact, m_scanner->module->name));
+ if (fileToScan)
+ args.push_back(fileToScan->filePath());
m_engine->setGlobalObject(m_global);
QScriptValue &function = script.scriptFunction;
diff --git a/src/lib/corelib/buildgraph/depscanner.h b/src/lib/corelib/buildgraph/depscanner.h
index b4f732ace..b8f8721aa 100644
--- a/src/lib/corelib/buildgraph/depscanner.h
+++ b/src/lib/corelib/buildgraph/depscanner.h
@@ -66,7 +66,8 @@ public:
QString id() const;
virtual QStringList collectSearchPaths(Artifact *artifact) = 0;
- virtual QStringList collectDependencies(FileResourceBase *file, const char *fileTags) = 0;
+ virtual QStringList collectDependencies(Artifact *artifact, FileResourceBase *file,
+ const char *fileTags) = 0;
virtual bool recursive() const = 0;
virtual const void *key() const = 0;
virtual bool areModulePropertiesCompatible(const PropertyMapConstPtr &m1,
@@ -86,7 +87,8 @@ public:
private:
QStringList collectSearchPaths(Artifact *artifact) override;
- QStringList collectDependencies(FileResourceBase *file, const char *fileTags) override;
+ QStringList collectDependencies(Artifact *artifact, FileResourceBase *file,
+ const char *fileTags) override;
bool recursive() const override;
const void *key() const override;
QString createId() const override;
@@ -104,7 +106,8 @@ public:
private:
QStringList collectSearchPaths(Artifact *artifact) override;
- QStringList collectDependencies(FileResourceBase *file, const char *fileTags) override;
+ QStringList collectDependencies(Artifact *artifact, FileResourceBase *file,
+ const char *fileTags) override;
bool recursive() const override;
const void *key() const override;
QString createId() const override;
@@ -112,7 +115,7 @@ private:
const PropertyMapConstPtr &m2) const override;
bool cacheIsPerFile() const override { return true; }
- QStringList evaluate(Artifact *artifact, const PrivateScriptFunction &script);
+ QStringList evaluate(const Artifact *artifact, const FileResourceBase *fileToScan, const PrivateScriptFunction &script);
ResolvedScannerConstPtr m_scanner;
ScriptEngine *m_engine;
diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.cpp b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
index 06b28858a..7e6ea4396 100644
--- a/src/lib/corelib/buildgraph/inputartifactscanner.cpp
+++ b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
@@ -367,8 +367,8 @@ void InputArtifactScanner::scanWithScannerPlugin(DependencyScanner *scanner,
RawScanResult *scanResult)
{
scanResult->deps.clear();
- const QStringList &dependencies
- = scanner->collectDependencies(fileToBeScanned, m_fileTagsForScanner.constData());
+ const QStringList &dependencies = scanner->collectDependencies(
+ m_artifact, fileToBeScanned, m_fileTagsForScanner.constData());
for (const QString &s : dependencies)
scanResult->deps.push_back(RawScannedDependency(s));
}
diff --git a/src/lib/corelib/buildgraph/qtmocscanner.cpp b/src/lib/corelib/buildgraph/qtmocscanner.cpp
index 42ed92c5f..121184648 100644
--- a/src/lib/corelib/buildgraph/qtmocscanner.cpp
+++ b/src/lib/corelib/buildgraph/qtmocscanner.cpp
@@ -83,7 +83,10 @@ public:
private:
QStringList collectSearchPaths(Artifact *) override { return QStringList(); }
- QStringList collectDependencies(FileResourceBase *, const char *) override { return QStringList(); }
+ QStringList collectDependencies(Artifact *, FileResourceBase *, const char *) override
+ {
+ return QStringList();
+ }
bool recursive() const override { return false; }
const void *key() const override { return nullptr; }
QString createId() const override { return m_id; }
diff --git a/src/lib/corelib/language/builtindeclarations.cpp b/src/lib/corelib/language/builtindeclarations.cpp
index 4886675d0..bfdfab51e 100644
--- a/src/lib/corelib/language/builtindeclarations.cpp
+++ b/src/lib/corelib/language/builtindeclarations.cpp
@@ -578,7 +578,8 @@ void BuiltinDeclarations::addScannerItem()
QStringList()
<< StringConstants::projectVar()
<< StringConstants::productVar()
- << StringConstants::inputVar());
+ << StringConstants::inputVar()
+ << StringConstants::filePathVar());
item << scan;
insert(item);
}
diff --git a/src/lib/corelib/tools/stringconstants.h b/src/lib/corelib/tools/stringconstants.h
index 6fcf3002b..1a9356e49 100644
--- a/src/lib/corelib/tools/stringconstants.h
+++ b/src/lib/corelib/tools/stringconstants.h
@@ -88,6 +88,7 @@ public:
}
static const QString &fileNameProperty() { return fileName(); }
static const QString &filePathProperty() { return filePath(); }
+ static const QString &filePathVar() { return filePath(); }
QBS_STRING_CONSTANT(fileTagsFilterProperty, "fileTagsFilter")
QBS_STRING_CONSTANT(fileTagsProperty, "fileTags")
QBS_STRING_CONSTANT(filesProperty, "files")