diff options
-rw-r--r-- | doc/reference/items/language/scanner.qdoc | 6 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/depscanner.cpp | 20 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/depscanner.h | 11 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/inputartifactscanner.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/qtmocscanner.cpp | 5 | ||||
-rw-r--r-- | src/lib/corelib/language/builtindeclarations.cpp | 3 | ||||
-rw-r--r-- | src/lib/corelib/tools/stringconstants.h | 1 |
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") |