From 04b9c0815323b9407cccf046d40a83ffd6085c6d Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Fri, 26 Jul 2024 18:02:41 +0200 Subject: [PATCH] CMakePM: Mark CMake modules from prefix path as generated This will result in "Project View" the "CMake Modules" folder to be hidden if it only contains CMake files from CMAKE_PREFIX_PATH or CMAKE_FIND_ROOT_PATH. Users of QtQuick or Qt Widgets applications will no longer have to see the "CMake Modules" with "" and the paths to the Qt CMake files. This way the CMake projects will resmble the QMake projects. Change-Id: Icde9a556be5bceccdb4abb11072fbd17b59dce4d Reviewed-by: Alessandro Portale --- .../fileapidataextractor.cpp | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index e9d9d841702..41c7ea53c6e 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -942,6 +942,31 @@ static void setupLocationInfoForTargets(const QFuture &cancelFuture, } } +static void markCMakeModulesFromPrefixPathAsGenerated(FileApiQtcData &result) +{ + const QSet paths = [&result]() { + QSet paths; + for (const QByteArray &var : {"CMAKE_PREFIX_PATH", "CMAKE_FIND_ROOT_PATH"}) { + const QStringList pathList = result.cache.stringValueOf(var).split(";"); + for (const QString &path : pathList) + paths.insert(FilePath::fromString(path)); + } + return paths; + }(); + + if (!result.rootProjectNode) + return; + + result.rootProjectNode->forEachGenericNode([&paths](Node *node) { + for (const FilePath &path : paths) { + if (node->path().isChildOf(path)) { + node->setIsGenerated(true); + break; + } + } + }); +} + // -------------------------------------------------------------------- // extractData: // -------------------------------------------------------------------- @@ -989,6 +1014,8 @@ FileApiQtcData extractData(const QFuture &cancelFuture, FileApiData &input if (input.replyFile.isMultiConfig && input.replyFile.generator != "Ninja Multi-Config") result.usesAllCapsTargets = true; + markCMakeModulesFromPrefixPathAsGenerated(result); + return result; }