aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/buildgraph/qtmocscanner.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-04-23 14:04:14 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-04-24 07:40:13 +0000
commit3653385af94ae7fe042d1c4845293b495bdc9854 (patch)
tree8eab19463079bdd049133dd1ccb6e5ad1a4a22d9 /src/lib/corelib/buildgraph/qtmocscanner.cpp
parent5a244da9d3d1089703c4501e7ea745f424fbcf15 (diff)
Qt templates: Make moc rule handle C++ amalgamation correctly
In C++ amalgamation mode, the source files need to be moc'ed before merging, because otherwise including .moc files will not work. Task-number: QBS-1252 Change-Id: I6e4bef4b46ec7bc3cf7ce7a950b380d469cc0afd Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/buildgraph/qtmocscanner.cpp')
-rw-r--r--src/lib/corelib/buildgraph/qtmocscanner.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/lib/corelib/buildgraph/qtmocscanner.cpp b/src/lib/corelib/buildgraph/qtmocscanner.cpp
index 6ecfbffa4..3a86173bd 100644
--- a/src/lib/corelib/buildgraph/qtmocscanner.cpp
+++ b/src/lib/corelib/buildgraph/qtmocscanner.cpp
@@ -63,12 +63,14 @@ namespace Internal {
struct CommonFileTags
{
const FileTag cpp = "cpp";
+ const FileTag cppCombine = "cpp.combine";
const FileTag hpp = "hpp";
const FileTag moc_cpp = "moc_cpp";
const FileTag moc_cpp_plugin = "moc_cpp_plugin";
const FileTag moc_hpp_plugin = "moc_hpp_plugin";
const FileTag moc_hpp = "moc_hpp";
const FileTag objcpp = "objcpp";
+ const FileTag objcppCombine = "objcpp.combine";
};
Q_GLOBAL_STATIC(CommonFileTags, commonFileTags)
@@ -117,9 +119,9 @@ QtMocScanner::~QtMocScanner()
ScannerPlugin *QtMocScanner::scannerPluginForFileTags(const FileTags &ft)
{
- if (ft.contains(m_tags.objcpp))
+ if (ft.contains(m_tags.objcpp) || ft.contains(m_tags.objcppCombine))
return m_objcppScanner;
- if (ft.contains(m_tags.cpp))
+ if (ft.contains(m_tags.cpp) || ft.contains(m_tags.cppCombine))
return m_cppScanner;
return m_hppScanner;
}
@@ -133,8 +135,16 @@ static RawScanResult runScanner(ScannerPlugin *scanner, const Artifact *artifact
RawScanResults::ScanData &scanData = rawScanResults.findScanData(artifact, &depScanner,
artifact->properties);
if (scanData.lastScanTime < artifact->timestamp()) {
- const QByteArray tagsForScanner
- = artifact->fileTags().toStringList().join(QLatin1Char(',')).toLatin1();
+ FileTags tags = artifact->fileTags();
+ if (tags.contains(commonFileTags->cppCombine)) {
+ tags.remove(commonFileTags->cppCombine);
+ tags.insert(commonFileTags->cpp);
+ }
+ if (tags.contains(commonFileTags->objcppCombine)) {
+ tags.remove(commonFileTags->objcppCombine);
+ tags.insert(commonFileTags->objcpp);
+ }
+ const QByteArray tagsForScanner = tags.toStringList().join(QLatin1Char(',')).toLatin1();
void *opaq = scanner->open(filepath.utf16(), tagsForScanner.constData(),
ScanForDependenciesFlag | ScanForFileTagsFlag);
if (!opaq || !scanner->additionalFileTags)