aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/buildgraph/inputartifactscanner.cpp14
-rw-r--r--src/plugins/scanner/cpp/cppscanner.cpp12
-rw-r--r--src/plugins/scanner/qt/qtscanner.cpp2
-rw-r--r--src/plugins/scanner/scanner.h9
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)();