From 58e633a8a45f2ab50581114f39d0e1b5827a3252 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 7 Sep 2020 13:56:12 +0200 Subject: [PATCH] CppTools: De-duplicate list of include paths It makes more sense to handle this centrally than in all the build system plugins. Fixes: QTCREATORBUG-24515 Change-Id: I1c0f815d44135bcfb76ce51c67b6494a50e1de48 Reviewed-by: Alessandro Portale --- src/plugins/cpptools/cppprojectinfogenerator.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/plugins/cpptools/cppprojectinfogenerator.cpp b/src/plugins/cpptools/cppprojectinfogenerator.cpp index cee90c36bba..89c7d7a2aae 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.cpp +++ b/src/plugins/cpptools/cppprojectinfogenerator.cpp @@ -35,6 +35,8 @@ #include +#include + using namespace ProjectExplorer; namespace CppTools { @@ -94,7 +96,15 @@ static ProjectPart::Ptr projectPartFromRawProjectPart( part->projectMacros = rawProjectPart.projectMacros; if (!part->projectConfigFile.isEmpty()) part->projectMacros += Macro::toMacros(ProjectPart::readProjectConfigFile(part)); - part->headerPaths = rawProjectPart.headerPaths; + + // Prevent duplicate include paths. + std::set seenPaths; + for (const HeaderPath &p : qAsConst(rawProjectPart.headerPaths)) { + const QString cleanPath = QDir::cleanPath(p.path); + if (seenPaths.insert(cleanPath).second) + part->headerPaths << HeaderPath(cleanPath, p.type); + } + part->precompiledHeaders = rawProjectPart.precompiledHeaders; part->selectedForBuilding = rawProjectPart.selectedForBuilding;