diff options
| author | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-08-27 09:55:58 +0200 |
|---|---|---|
| committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-08-27 15:06:15 +0200 |
| commit | 33a91f7af18d8703cc63ef640d24b417a9e3cdf2 (patch) | |
| tree | 28da22e6a3c6cc765e6924f495ea4045ff2c31ae /src/lib/buildgraph | |
| parent | eb7287fb0263f24978e090025fb137f706f5237c (diff) | |
| download | qbs-33a91f7af18d8703cc63ef640d24b417a9e3cdf2.tar.gz | |
don't pass file tags to scanner plugins
The scanners already know the file tags they're responsible for.
Change-Id: If5ed47bfc011357737df08e3fe834ec8fcf4318b
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'src/lib/buildgraph')
| -rw-r--r-- | src/lib/buildgraph/automoc.cpp | 56 | ||||
| -rw-r--r-- | src/lib/buildgraph/automoc.h | 9 | ||||
| -rw-r--r-- | src/lib/buildgraph/inputartifactscanner.cpp | 2 |
3 files changed, 26 insertions, 41 deletions
diff --git a/src/lib/buildgraph/automoc.cpp b/src/lib/buildgraph/automoc.cpp index a37f96fcf..1c9374be8 100644 --- a/src/lib/buildgraph/automoc.cpp +++ b/src/lib/buildgraph/automoc.cpp @@ -44,29 +44,6 @@ namespace qbs { namespace Internal { -static char **createCFileTags(const FileTags &fileTags) -{ - if (fileTags.isEmpty()) - return 0; - - char **buf = new char*[fileTags.count()]; - size_t i = 0; - foreach (const FileTag &fileTag, fileTags) { - buf[i] = qstrdup(fileTag.toString().toLocal8Bit().data()); - ++i; - } - return buf; -} - -static void freeCFileTags(char **cFileTags, int numFileTags) -{ - if (!cFileTags) - return; - for (int i = numFileTags; --i >= 0;) - delete[] cFileTags[i]; - delete[] cFileTags; -} - AutoMoc::AutoMoc(const Logger &logger, QObject *parent) : QObject(parent) , m_scanResultCache(0) @@ -81,7 +58,7 @@ void AutoMoc::setScanResultCache(ScanResultCache *scanResultCache) void AutoMoc::apply(const ResolvedProductPtr &product) { - if (scanners().isEmpty()) + if (cppScanners().isEmpty() || hppScanners().isEmpty()) throw ErrorInfo("C++ scanner cannot be loaded."); Artifact *pluginMetaDataFile = 0; @@ -119,7 +96,7 @@ void AutoMoc::apply(const ResolvedProductPtr &product) FileTag mocFileTag; bool alreadyMocced = isVictimOfMoc(artifact, fileType, mocFileTag); bool hasQObjectMacro; - scan(artifact, hasQObjectMacro, includedMocCppFiles); + scan(artifact, fileType, hasQObjectMacro, includedMocCppFiles); if (hasQObjectMacro && !alreadyMocced) { artifactsToMoc += qMakePair(artifact, fileType); } else if (!hasQObjectMacro && alreadyMocced) { @@ -202,17 +179,16 @@ AutoMoc::FileType AutoMoc::fileType(Artifact *artifact) return UnknownFileType; } -void AutoMoc::scan(Artifact *artifact, bool &hasQObjectMacro, QSet<QString> &includedMocCppFiles) +void AutoMoc::scan(Artifact *artifact, FileType fileType, bool &hasQObjectMacro, + QSet<QString> &includedMocCppFiles) { if (m_logger.traceEnabled()) m_logger.qbsTrace() << "[AUTOMOC] checks " << relativeArtifactFileName(artifact); hasQObjectMacro = false; - const int numFileTags = artifact->fileTags.count(); - char **cFileTags = createCFileTags(artifact->fileTags); - foreach (ScannerPlugin *scanner, scanners()) { - void *opaq = scanner->open(artifact->filePath().utf16(), cFileTags, numFileTags); + foreach (ScannerPlugin *scanner, fileType == HppFileType ? hppScanners() : cppScanners()) { + void *opaq = scanner->open(artifact->filePath().utf16(), ScanForFileTagsFlag); if (!opaq || !scanner->additionalFileTags) continue; @@ -239,7 +215,7 @@ void AutoMoc::scan(Artifact *artifact, bool &hasQObjectMacro, QSet<QString> &inc scanResult = m_scanResultCache->value(artifact->filePath()); if (!scanResult.valid) { scanResult.valid = true; - opaq = scanner->open(artifact->filePath().utf16(), 0, 0); + opaq = scanner->open(artifact->filePath().utf16(), ScanForDependenciesFlag); if (!opaq) continue; @@ -269,8 +245,6 @@ void AutoMoc::scan(Artifact *artifact, bool &hasQObjectMacro, QSet<QString> &inc } } } - - freeCFileTags(cFileTags, numFileTags); } static FileTags provideMocHeaderFileTags() @@ -357,12 +331,20 @@ void AutoMoc::unmoc(Artifact *artifact, const FileTag &mocFileTag) delete generatedMocArtifact; } -QList<ScannerPlugin *> AutoMoc::scanners() const +const QList<ScannerPlugin *> &AutoMoc::cppScanners() const +{ + if (m_cppScanners.isEmpty()) + m_cppScanners = ScannerPluginManager::scannersForFileTag("cpp"); + + return m_cppScanners; +} + +const QList<ScannerPlugin *> &AutoMoc::hppScanners() const { - if (m_scanners.isEmpty()) - m_scanners = ScannerPluginManager::scannersForFileTag("hpp"); + if (m_hppScanners.isEmpty()) + m_hppScanners = ScannerPluginManager::scannersForFileTag("hpp"); - return m_scanners; + return m_hppScanners; } } // namespace Internal diff --git a/src/lib/buildgraph/automoc.h b/src/lib/buildgraph/automoc.h index a24e7320f..118202b17 100644 --- a/src/lib/buildgraph/automoc.h +++ b/src/lib/buildgraph/automoc.h @@ -76,12 +76,15 @@ private: private: static QString generateMocFileName(Artifact *artifact, FileType fileType); static FileType fileType(Artifact *artifact); - void scan(Artifact *artifact, bool &hasQObjectMacro, QSet<QString> &includedMocCppFiles); + void scan(Artifact *artifact, FileType fileType, bool &hasQObjectMacro, + QSet<QString> &includedMocCppFiles); bool isVictimOfMoc(Artifact *artifact, FileType fileType, FileTag &foundMocFileTag); void unmoc(Artifact *artifact, const FileTag &mocFileTag); - QList<ScannerPlugin *> scanners() const; + const QList<ScannerPlugin *> &cppScanners() const; + const QList<ScannerPlugin *> &hppScanners() const; - mutable QList<ScannerPlugin *> m_scanners; + mutable QList<ScannerPlugin *> m_cppScanners; + mutable QList<ScannerPlugin *> m_hppScanners; ScanResultCache *m_scanResultCache; Logger m_logger; }; diff --git a/src/lib/buildgraph/inputartifactscanner.cpp b/src/lib/buildgraph/inputartifactscanner.cpp index b54edd92e..e4f50322b 100644 --- a/src/lib/buildgraph/inputartifactscanner.cpp +++ b/src/lib/buildgraph/inputartifactscanner.cpp @@ -121,7 +121,7 @@ static bool scanWithScannerPlugin(ScannerPlugin *scannerPlugin, const QString &filePathToBeScanned, ScanResultCache::Result *scanResult) { - void *scannerHandle = scannerPlugin->open(filePathToBeScanned.utf16(), 0, 0); + void *scannerHandle = scannerPlugin->open(filePathToBeScanned.utf16(), ScanForDependenciesFlag); if (!scannerHandle) return false; while (true) { |
