diff options
-rw-r--r-- | src/lib/buildgraph/inputartifactscanner.cpp | 14 | ||||
-rw-r--r-- | src/plugins/scanner/cpp/cppscanner.cpp | 12 | ||||
-rw-r--r-- | src/plugins/scanner/qt/qtscanner.cpp | 2 | ||||
-rw-r--r-- | src/plugins/scanner/scanner.h | 9 |
4 files changed, 24 insertions, 13 deletions
diff --git a/src/lib/buildgraph/inputartifactscanner.cpp b/src/lib/buildgraph/inputartifactscanner.cpp index d0614de59..1b3a41494 100644 --- a/src/lib/buildgraph/inputartifactscanner.cpp +++ b/src/lib/buildgraph/inputartifactscanner.cpp @@ -175,7 +175,7 @@ void InputArtifactScanner::scan() foreach (const QString &fileTag, inputArtifact->fileTags) { foreach (ScannerPlugin *scanner, ScannerPluginManager::scannersForFileTag(fileTag)) { scanners += scanner; - if (scanner->usesCppIncludePaths) + if (scanner->flags & ScannerUsesCppIncludePaths) mustCollectIncludePaths = true; } } @@ -196,7 +196,8 @@ void InputArtifactScanner::scan() const QStringList emptyIncludePaths; foreach (ScannerPlugin *scanner, scanners) { scanForFileDependencies(scanner, - scanner->usesCppIncludePaths ? includePaths : emptyIncludePaths, + (scanner->flags & ScannerUsesCppIncludePaths) + ? includePaths : emptyIncludePaths, inputArtifact, cacheItem.resolvedDependenciesCache[scanner]); } @@ -215,6 +216,8 @@ void InputArtifactScanner::scanForFileDependencies(ScannerPlugin *scannerPlugin, QSet<QString> visitedFilePaths; QStringList filePathsToScan; filePathsToScan.append(inputArtifact->filePath()); + QStringList * const filePathsToScanPtr = + (scannerPlugin->flags & ScannerRecursiveDependencies) ? &filePathsToScan : 0; while (!filePathsToScan.isEmpty()) { const QString filePathToBeScanned = filePathsToScan.takeFirst(); @@ -231,7 +234,7 @@ void InputArtifactScanner::scanForFileDependencies(ScannerPlugin *scannerPlugin, } resolveScanResultDependencies(includePaths, inputArtifact, scanResult, filePathToBeScanned, - &filePathsToScan, resolvedDependenciesCache); + filePathsToScanPtr, resolvedDependenciesCache); } } @@ -292,8 +295,9 @@ unresolved: resolved: // Do not scan artifacts that are being built. Otherwise we might read an incomplete // file or conflict with the writing process. - if (!resolvedDependency.artifact - || resolvedDependency.artifact->buildState != Artifact::Building) { + if (filePathsToScan + && (!resolvedDependency.artifact + || resolvedDependency.artifact->buildState != Artifact::Building)) { filePathsToScan->append(resolvedDependency.filePath); } handleDependency(resolvedDependency); diff --git a/src/plugins/scanner/cpp/cppscanner.cpp b/src/plugins/scanner/cpp/cppscanner.cpp index 6f737dbf6..399feba4c 100644 --- a/src/plugins/scanner/cpp/cppscanner.cpp +++ b/src/plugins/scanner/cpp/cppscanner.cpp @@ -268,7 +268,7 @@ ScannerPlugin hppScanner = closeScanner, next, additionalFileTags, - true + ScannerUsesCppIncludePaths | ScannerRecursiveDependencies }; ScannerPlugin cppScanner = @@ -279,7 +279,7 @@ ScannerPlugin cppScanner = closeScanner, next, additionalFileTags, - true + ScannerUsesCppIncludePaths | ScannerRecursiveDependencies }; ScannerPlugin cScanner = @@ -290,7 +290,7 @@ ScannerPlugin cScanner = closeScanner, next, 0, - true + ScannerUsesCppIncludePaths | ScannerRecursiveDependencies }; ScannerPlugin objcppScanner = @@ -301,7 +301,7 @@ ScannerPlugin objcppScanner = closeScanner, next, additionalFileTags, - true + ScannerUsesCppIncludePaths | ScannerRecursiveDependencies }; ScannerPlugin objcScanner = @@ -312,7 +312,7 @@ ScannerPlugin objcScanner = closeScanner, next, additionalFileTags, - true + ScannerUsesCppIncludePaths | ScannerRecursiveDependencies }; ScannerPlugin rcScanner = @@ -323,7 +323,7 @@ ScannerPlugin rcScanner = closeScanner, next, 0, - true + ScannerUsesCppIncludePaths | ScannerRecursiveDependencies }; ScannerPlugin *theScanners[] = {&hppScanner, &cppScanner, &cScanner, &objcppScanner, &objcScanner, &rcScanner, NULL}; diff --git a/src/plugins/scanner/qt/qtscanner.cpp b/src/plugins/scanner/qt/qtscanner.cpp index 8832fec79..0374357e1 100644 --- a/src/plugins/scanner/qt/qtscanner.cpp +++ b/src/plugins/scanner/qt/qtscanner.cpp @@ -171,7 +171,7 @@ ScannerPlugin qrcScanner = closeScanner, nextQrc, additionalFileTags, - false + NoScannerFlags }; ScannerPlugin *theScanners[] = {&qrcScanner, NULL}; diff --git a/src/plugins/scanner/scanner.h b/src/plugins/scanner/scanner.h index b31be8414..e78cb87f1 100644 --- a/src/plugins/scanner/scanner.h +++ b/src/plugins/scanner/scanner.h @@ -67,6 +67,13 @@ typedef const char *(*scanNext_f) (void *opaq, int *size, int *flags); */ typedef const char** (*scanAdditionalFileTags_f) (void *opaq, int *size); +enum ScannerFlags +{ + NoScannerFlags = 0x00, + ScannerUsesCppIncludePaths = 0x01, + ScannerRecursiveDependencies = 0x02 +}; + struct ScannerPlugin { const char *name; @@ -75,7 +82,7 @@ struct ScannerPlugin scanClose_f close; scanNext_f next; scanAdditionalFileTags_f additionalFileTags; - bool usesCppIncludePaths; + int flags; }; typedef ScannerPlugin **(*getScanners_f)(); |