summaryrefslogtreecommitdiff
path: root/src/lib/buildgraph
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2013-08-27 09:55:58 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2013-08-27 15:06:15 +0200
commit33a91f7af18d8703cc63ef640d24b417a9e3cdf2 (patch)
tree28da22e6a3c6cc765e6924f495ea4045ff2c31ae /src/lib/buildgraph
parenteb7287fb0263f24978e090025fb137f706f5237c (diff)
downloadqbs-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.cpp56
-rw-r--r--src/lib/buildgraph/automoc.h9
-rw-r--r--src/lib/buildgraph/inputartifactscanner.cpp2
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) {