From 46d9fa36df51a33475276e8f2d4684f62be52692 Mon Sep 17 00:00:00 2001 From: Tapani Mattila Date: Mon, 18 Oct 2021 12:02:58 +0300 Subject: [PATCH] Fix CMake file generation to include module subdirectories properly Task-number: QDS-5273 Change-Id: Id32ef746851a51a54941359548d0e35608f282a5 Reviewed-by: Qt CI Bot Reviewed-by: Thomas Hartmann --- .../qmldesigner/generatecmakelists.cpp | 38 ++++++++++++++----- src/plugins/qmldesigner/generatecmakelists.h | 1 + 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/plugins/qmldesigner/generatecmakelists.cpp b/src/plugins/qmldesigner/generatecmakelists.cpp index 8e96c0ec95e..7d6de3d5c76 100644 --- a/src/plugins/qmldesigner/generatecmakelists.cpp +++ b/src/plugins/qmldesigner/generatecmakelists.cpp @@ -149,9 +149,7 @@ const char MODULEFILE_CREATE_MODULE[] = "qt6_add_qml_module(%1\n\tURI \"%1\"\n\t QString generateModuleCmake(const FilePath &dir) { QString fileContent; - const QStringList qmlFilesOnly("*.qml"); const QStringList qmldirFilesOnly(QMLDIRFILENAME); - ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject(); FilePaths qmldirFileList = dir.dirEntries(qmldirFilesOnly, FILES_ONLY); if (!qmldirFileList.isEmpty()) { @@ -161,18 +159,15 @@ QString generateModuleCmake(const FilePath &dir) } } - FilePaths qmlFileList = dir.dirEntries(qmlFilesOnly, FILES_ONLY); + QStringList qmlFileList = getDirectoryTreeQmls(dir); QString qmlFiles; - for (FilePath &qmlFile : qmlFileList) { - if (project->isKnownFile(qmlFile)) - qmlFiles.append(QString("\t\t%1\n").arg(qmlFile.fileName())); - } + for (QString &qmlFile : qmlFileList) + qmlFiles.append(QString("\t\t%1\n").arg(qmlFile)); QStringList resourceFileList = getDirectoryTreeResources(dir); QString resourceFiles; - for (QString &resourceFile : resourceFileList) { + for (QString &resourceFile : resourceFileList) resourceFiles.append(QString("\t\t%1\n").arg(resourceFile)); - } QString moduleContent; if (!qmlFiles.isEmpty()) { @@ -226,6 +221,31 @@ QStringList getSingletonsFromQmldirFile(const FilePath &filePath) return singletons; } +QStringList getDirectoryTreeQmls(const FilePath &dir) +{ + const QStringList qmlFilesOnly("*.qml"); + ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject(); + QStringList qmlFileList; + + FilePaths thisDirFiles = dir.dirEntries(qmlFilesOnly, FILES_ONLY); + for (FilePath &file : thisDirFiles) { + if (!isFileBlacklisted(file.fileName()) && + project->isKnownFile(file)) { + qmlFileList.append(file.fileName()); + } + } + + FilePaths subDirsList = dir.dirEntries(DIRS_ONLY); + for (FilePath &subDir : subDirsList) { + QStringList subDirQmlFiles = getDirectoryTreeQmls(subDir); + for (QString &qmlFile : subDirQmlFiles) { + qmlFileList.append(subDir.fileName().append('/').append(qmlFile)); + } + } + + return qmlFileList; +} + QStringList getDirectoryTreeResources(const FilePath &dir) { ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject(); diff --git a/src/plugins/qmldesigner/generatecmakelists.h b/src/plugins/qmldesigner/generatecmakelists.h index 55b0f6958d1..a85e31bf475 100644 --- a/src/plugins/qmldesigner/generatecmakelists.h +++ b/src/plugins/qmldesigner/generatecmakelists.h @@ -38,6 +38,7 @@ void generateSubdirCmake(const Utils::FilePath &dir); QString generateModuleCmake(const Utils::FilePath &dir); QStringList processDirectory(const Utils::FilePath &dir); QStringList getSingletonsFromQmldirFile(const Utils::FilePath &filePath); +QStringList getDirectoryTreeQmls(const Utils::FilePath &dir); QStringList getDirectoryTreeResources(const Utils::FilePath &dir); void createCmakeFile(const Utils::FilePath &filePath, const QString &content); bool isFileBlacklisted(const QString &fileName);