From 428f62a7fe6ecfeaff02559b64f97b1b3c2a20ab Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 9 Jun 2023 14:43:47 +0200 Subject: [PATCH] Meson: Inline NativeFileGenerator into its only user Also, filepathify and simplify surrounding code a bit. Change-Id: I963bbc95a81d753918b6734870630b539378f03e Reviewed-by: Alessandro Portale --- .../mesonprojectmanager/CMakeLists.txt | 2 - .../machinefilemanager.cpp | 121 +++++++++--------- .../mesonprojectmanager/machinefilemanager.h | 12 +- .../mesonprojectmanager.qbs | 2 - .../nativefilegenerator.cpp | 46 ------- .../mesonprojectmanager/nativefilegenerator.h | 24 ---- 6 files changed, 62 insertions(+), 145 deletions(-) delete mode 100644 src/plugins/mesonprojectmanager/nativefilegenerator.cpp delete mode 100644 src/plugins/mesonprojectmanager/nativefilegenerator.h diff --git a/src/plugins/mesonprojectmanager/CMakeLists.txt b/src/plugins/mesonprojectmanager/CMakeLists.txt index 3c541a1219e..a9e46077418 100644 --- a/src/plugins/mesonprojectmanager/CMakeLists.txt +++ b/src/plugins/mesonprojectmanager/CMakeLists.txt @@ -49,8 +49,6 @@ add_qtc_plugin(MesonProjectManager mesontools.h mesonwrapper.cpp mesonwrapper.h - nativefilegenerator.cpp - nativefilegenerator.h ninjabuildstep.cpp ninjabuildstep.h ninjaparser.cpp diff --git a/src/plugins/mesonprojectmanager/machinefilemanager.cpp b/src/plugins/mesonprojectmanager/machinefilemanager.cpp index 2ecf7b70e3a..c340d7170e2 100644 --- a/src/plugins/mesonprojectmanager/machinefilemanager.cpp +++ b/src/plugins/mesonprojectmanager/machinefilemanager.cpp @@ -5,115 +5,110 @@ #include "kitdata.h" #include "kithelper.h" -#include "nativefilegenerator.h" #include -#include +#include +#include +#include +#include -#include -#include -#include +#include +#include #include -namespace MesonProjectManager { -namespace Internal { +using namespace ProjectExplorer; +using namespace Utils; + +namespace MesonProjectManager::Internal { const char MACHINE_FILE_PREFIX[] = "Meson-MachineFile-"; const char MACHINE_FILE_EXT[] = ".ini"; -template -bool withFile(const Utils::FilePath &path, const F &f) -{ - QFile file(path.toString()); - if (file.open(QIODevice::WriteOnly)) { - f(&file); - return file.flush(); - } - return false; -} - -Utils::FilePath MachineFilesDir() +static FilePath machineFilesDir() { return Core::ICore::userResourcePath("Meson-machine-files"); } MachineFileManager::MachineFileManager() { - using namespace ProjectExplorer; - connect(KitManager::instance(), - &KitManager::kitAdded, - this, - &MachineFileManager::addMachineFile); - connect(KitManager::instance(), - &KitManager::kitUpdated, - this, - &MachineFileManager::updateMachineFile); - connect(KitManager::instance(), - &KitManager::kitRemoved, - this, - &MachineFileManager::removeMachineFile); - connect(KitManager::instance(), - &KitManager::kitsLoaded, - this, - &MachineFileManager::cleanupMachineFiles); + connect(KitManager::instance(), &KitManager::kitAdded, + this, &MachineFileManager::addMachineFile); + connect(KitManager::instance(), &KitManager::kitUpdated, + this, &MachineFileManager::updateMachineFile); + connect(KitManager::instance(), &KitManager::kitRemoved, + this, &MachineFileManager::removeMachineFile); + connect(KitManager::instance(), &KitManager::kitsLoaded, + this, &MachineFileManager::cleanupMachineFiles); } -Utils::FilePath MachineFileManager::machineFile(const ProjectExplorer::Kit *kit) +FilePath MachineFileManager::machineFile(const Kit *kit) { QTC_ASSERT(kit, return {}); auto baseName = QString("%1%2%3").arg(MACHINE_FILE_PREFIX).arg(kit->id().toString()).arg(MACHINE_FILE_EXT); baseName = baseName.remove('{').remove('}'); - return MachineFilesDir().pathAppended(baseName); + return machineFilesDir().pathAppended(baseName); } -void MachineFileManager::addMachineFile(const ProjectExplorer::Kit *kit) +void MachineFileManager::addMachineFile(const Kit *kit) { - auto filePath = machineFile(kit); + FilePath filePath = machineFile(kit); QTC_ASSERT(!filePath.isEmpty(), return ); - auto data = KitHelper::kitData(kit); - QTC_ASSERT(withFile(filePath, - [&data](QFile *file) { NativeFileGenerator::makeNativeFile(file, data); }), - return ); + auto kitData = KitHelper::kitData(kit); + + auto entry = [](const QString &key, const QString &value) { + return QString("%1 = '%2'\n").arg(key).arg(value).toUtf8(); + }; + + QByteArray ba = "[binaries]\n"; + ba += entry("c", kitData.cCompilerPath); + ba += entry("cpp", kitData.cxxCompilerPath); + ba += entry("qmake", kitData.qmakePath); + if (kitData.qtVersion == QtMajorVersion::Qt4) + ba += entry("qmake-qt4", kitData.qmakePath); + else if (kitData.qtVersion == QtMajorVersion::Qt5) + ba += entry("qmake-qt5", kitData.qmakePath); + else if (kitData.qtVersion == QtMajorVersion::Qt6) + ba += entry("qmake-qt6", kitData.qmakePath); + ba += entry("cmake", kitData.cmakePath); + + filePath.writeFileContents(ba); } -void MachineFileManager::removeMachineFile(const ProjectExplorer::Kit *kit) +void MachineFileManager::removeMachineFile(const Kit *kit) { - auto filePath = machineFile(kit); + FilePath filePath = machineFile(kit); if (filePath.exists()) - QFile::remove(filePath.toString()); + filePath.removeFile(); } -void MachineFileManager::updateMachineFile(const ProjectExplorer::Kit *kit) +void MachineFileManager::updateMachineFile(const Kit *kit) { addMachineFile(kit); } void MachineFileManager::cleanupMachineFiles() { - const auto kits = ProjectExplorer::KitManager::kits(); - auto machineFilesDir = QDir(MachineFilesDir().toString()); - if (!machineFilesDir.exists()) { - machineFilesDir.mkdir(machineFilesDir.path()); - } - auto machineFiles = QDir(MachineFilesDir().toString()) - .entryList( - {QString("%1*%2").arg(MACHINE_FILE_PREFIX).arg(MACHINE_FILE_EXT)}); - QStringList expected; - for (auto const *kit : kits) { - QString fname = machineFile(kit).toString(); + FilePath dir = machineFilesDir(); + dir.ensureWritableDir(); + + const FileFilter filter = {{QString("%1*%2").arg(MACHINE_FILE_PREFIX).arg(MACHINE_FILE_EXT)}}; + const FilePaths machineFiles = dir.dirEntries(filter); + + FilePaths expected; + for (Kit const *kit : KitManager::kits()) { + const FilePath fname = machineFile(kit); expected.push_back(fname); if (!machineFiles.contains(fname)) addMachineFile(kit); } - for (const auto &file : machineFiles) { + for (const FilePath &file : machineFiles) { if (!expected.contains(file)) - QFile::remove(file); + file.removeFile(); } } -} // namespace Internal -} // namespace MesonProjectManager +} // MesonProjectManager::Internal diff --git a/src/plugins/mesonprojectmanager/machinefilemanager.h b/src/plugins/mesonprojectmanager/machinefilemanager.h index e6cab231bbf..5a3a9a9bd71 100644 --- a/src/plugins/mesonprojectmanager/machinefilemanager.h +++ b/src/plugins/mesonprojectmanager/machinefilemanager.h @@ -3,17 +3,14 @@ #pragma once -#include -#include +#include -#include +namespace ProjectExplorer { class Kit; } -namespace MesonProjectManager { -namespace Internal { +namespace MesonProjectManager::Internal { class MachineFileManager final : public QObject { - Q_OBJECT public: MachineFileManager(); @@ -26,5 +23,4 @@ private: void cleanupMachineFiles(); }; -} // namespace Internal -} // namespace MesonProjectManager +} // MesonProjectManager::Internal diff --git a/src/plugins/mesonprojectmanager/mesonprojectmanager.qbs b/src/plugins/mesonprojectmanager/mesonprojectmanager.qbs index c721ab2d207..15df062dfcc 100644 --- a/src/plugins/mesonprojectmanager/mesonprojectmanager.qbs +++ b/src/plugins/mesonprojectmanager/mesonprojectmanager.qbs @@ -31,8 +31,6 @@ Project { "kithelper.h", "machinefilemanager.cpp", "machinefilemanager.h", - "nativefilegenerator.cpp", - "nativefilegenerator.h", "mesonactionsmanager.cpp", "mesonactionsmanager.h", "buildoptions.h", diff --git a/src/plugins/mesonprojectmanager/nativefilegenerator.cpp b/src/plugins/mesonprojectmanager/nativefilegenerator.cpp deleted file mode 100644 index 9f920aa404d..00000000000 --- a/src/plugins/mesonprojectmanager/nativefilegenerator.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2020 Alexis Jeandet. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "nativefilegenerator.h" - -#include -#include -#include -#include - -#include -#include - -namespace MesonProjectManager { -namespace Internal { - -NativeFileGenerator::NativeFileGenerator() {} - -inline void addEntry(QIODevice *nativeFile, const QString &key, const QString &value) -{ - nativeFile->write(QString("%1 = '%2'\n").arg(key).arg(value).toUtf8()); -} - -void writeBinariesSection(QIODevice *nativeFile, const KitData &kitData) -{ - nativeFile->write("[binaries]\n"); - addEntry(nativeFile, "c", kitData.cCompilerPath); - addEntry(nativeFile, "cpp", kitData.cxxCompilerPath); - addEntry(nativeFile, "qmake", kitData.qmakePath); - if (kitData.qtVersion == Utils::QtMajorVersion::Qt4) - addEntry(nativeFile, QString{"qmake-qt4"}, kitData.qmakePath); - else if (kitData.qtVersion == Utils::QtMajorVersion::Qt5) - addEntry(nativeFile, QString{"qmake-qt5"}, kitData.qmakePath); - else if (kitData.qtVersion == Utils::QtMajorVersion::Qt6) - addEntry(nativeFile, QString{"qmake-qt6"}, kitData.qmakePath); - addEntry(nativeFile, "cmake", kitData.cmakePath); -} - -void NativeFileGenerator::makeNativeFile(QIODevice *nativeFile, const KitData &kitData) -{ - QTC_ASSERT(nativeFile, return ); - writeBinariesSection(nativeFile, kitData); -} - -} // namespace Internal -} // namespace MesonProjectManager diff --git a/src/plugins/mesonprojectmanager/nativefilegenerator.h b/src/plugins/mesonprojectmanager/nativefilegenerator.h deleted file mode 100644 index 21dba07ba19..00000000000 --- a/src/plugins/mesonprojectmanager/nativefilegenerator.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2020 Alexis Jeandet. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include "kitdata.h" - -#include - -#include - -namespace MesonProjectManager { -namespace Internal { - -class NativeFileGenerator -{ - NativeFileGenerator(); - -public: - static void makeNativeFile(QIODevice *nativeFile, const KitData &kitData); -}; - -} // namespace Internal -} // namespace MesonProjectManager