diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-04-23 14:04:14 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-04-24 07:40:13 +0000 |
commit | 3653385af94ae7fe042d1c4845293b495bdc9854 (patch) | |
tree | 8eab19463079bdd049133dd1ccb6e5ad1a4a22d9 /src/lib/corelib/buildgraph/qtmocscanner.cpp | |
parent | 5a244da9d3d1089703c4501e7ea745f424fbcf15 (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.cpp | 18 |
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) |