From 276bf9d10eb24cef052f8ed7a6af7beadad262b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Capelle?= Date: Thu, 29 May 2025 11:03:00 +0200 Subject: [PATCH] Move to VCPKG. (#11) --- .github/workflows/build.yml | 12 ++++-- .gitignore | 2 +- .pre-commit-config.yaml | 20 ++++++++++ CMakeLists.txt | 6 --- CMakePresets.json | 67 ++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 6 ++- src/base_script.cpp | 44 +++++++++++---------- src/base_script.h | 14 +++---- src/csharp_interface.cpp | 11 +++--- src/csharp_interface.h | 4 +- src/installer_fomod_csharp.cpp | 4 +- src/installer_fomod_csharp.h | 2 +- src/installer_fomod_csharp_en.ts | 4 +- src/installer_fomod_predialog.h | 2 +- src/xml_info_reader.h | 4 +- vcpkg.json | 15 +++++++ 16 files changed, 161 insertions(+), 56 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 CMakePresets.json create mode 100644 vcpkg.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3185e6a..b9d11e3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,16 +1,20 @@ -name: Build Installer FOMOD C# Plugin +name: Build Installer FOMOD C# on: push: - branches: master + branches: [master] pull_request: types: [opened, synchronize, reopened] +env: + VCPKG_BINARY_SOURCES: clear;x-azblob,${{ vars.AZ_BLOB_VCPKG_URL }},${{ secrets.AZ_BLOB_SAS }},readwrite + jobs: build: runs-on: windows-2022 steps: - - name: Build Installer FOMOD C# Plugin + - name: Build Installer FOMOD C# + id: build-installer-fomod-csharp uses: ModOrganizer2/build-with-mob-action@master with: - mo2-dependencies: cmake_common uibase + mo2-dependencies: uibase diff --git a/.gitignore b/.gitignore index fd1539e..58b3448 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -vsbuild +vsbuild diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..3103a1f --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,20 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-merge-conflict + - id: check-case-conflict + - repo: https://github.com/pre-commit/mirrors-clang-format + rev: v19.1.5 + hooks: + - id: clang-format + 'types_or': [c++, c] + +ci: + autofix_commit_msg: "[pre-commit.ci] Auto fixes from pre-commit.com hooks." + autofix_prs: true + autoupdate_commit_msg: "[pre-commit.ci] Pre-commit autoupdate." + autoupdate_schedule: quarterly + submodules: false diff --git a/CMakeLists.txt b/CMakeLists.txt index 3afad35..3170ab3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,10 +2,4 @@ cmake_minimum_required(VERSION 3.16) project(installer_fomod_csharp) -if(DEFINED DEPENDENCIES_DIR) - include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/mo2.cmake) -else() - include(${CMAKE_CURRENT_LIST_DIR}/../cmake_common/mo2.cmake) -endif() - add_subdirectory(src) diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..5a63c77 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,67 @@ +{ + "configurePresets": [ + { + "errors": { + "deprecated": true + }, + "hidden": true, + "name": "cmake-dev", + "warnings": { + "deprecated": true, + "dev": true + } + }, + { + "cacheVariables": { + "VCPKG_MANIFEST_NO_DEFAULT_FEATURES": { + "type": "BOOL", + "value": "ON" + } + }, + "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "hidden": true, + "name": "vcpkg" + }, + { + "hidden": true, + "inherits": ["vcpkg"], + "name": "vcpkg-dev" + }, + { + "binaryDir": "${sourceDir}/vsbuild", + "architecture": { + "strategy": "set", + "value": "x64" + }, + "cacheVariables": { + "CMAKE_CXX_FLAGS": "/EHsc /MP /W4", + "VCPKG_TARGET_TRIPLET": { + "type": "STRING", + "value": "x64-windows-static-md" + } + }, + "generator": "Visual Studio 17 2022", + "inherits": ["cmake-dev", "vcpkg-dev"], + "name": "vs2022-windows", + "toolset": "v143" + }, + { + "cacheVariables": { + "VCPKG_MANIFEST_FEATURES": { + "type": "STRING", + "value": "standalone" + } + }, + "inherits": "vs2022-windows", + "name": "vs2022-windows-standalone" + } + ], + "buildPresets": [ + { + "name": "vs2022-windows", + "resolvePackageReferences": "on", + "configurePreset": "vs2022-windows" + } + ], + "version": 4 +} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0577735..09b3015 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,11 @@ cmake_minimum_required(VERSION 3.16) +find_package(mo2-cmake CONFIG REQUIRED) +find_package(mo2-uibase CONFIG REQUIRED) + add_library(installer_fomod_csharp SHARED) mo2_configure_plugin(installer_fomod_csharp WARNINGS OFF CLI ON) -mo2_install_target(installer_fomod_csharp) +target_link_libraries(installer_fomod_csharp PRIVATE mo2::uibase) +mo2_install_plugin(installer_fomod_csharp) set_target_properties(installer_fomod_csharp PROPERTIES CXX_STANDARD 20) diff --git a/src/base_script.cpp b/src/base_script.cpp index b80f9aa..e3aa4a7 100644 --- a/src/base_script.cpp +++ b/src/base_script.cpp @@ -15,39 +15,39 @@ You should have received a copy of the GNU General Public License along with Mod Organizer. If not, see . */ -// clang-format off - #include "base_script.h" #include #include -#include #include -#include -#include -#include #include -#include -#include +#include #include +#include +#include +#include +#include #include +#include -#include "imoinfo.h" -#include "iplugingame.h" -#include "ipluginlist.h" -#include "igamefeatures.h" -#include "iinstallationmanager.h" -#include "log.h" -#include "scriptextender.h" +#include +#include +#include +#include +#include +#include +#include -#include "psettings.h" -#include "installer_fomod_postdialog.h" #include "csharp_interface.h" #include "csharp_utils.h" +#include "installer_fomod_postdialog.h" +#include "psettings.h" using namespace MOBase; +// clang-format off + namespace CSharp { // Pointer to object: @@ -228,8 +228,9 @@ namespace CSharp { }, "/"); // Convert to C#: - array^ result = gcnew array(paths.size()); - for (std::size_t i = 0; i < paths.size(); ++i) { + const auto size = static_cast(paths.size()); + array^ result = gcnew array(size); + for (int i = 0; i < size; ++i) { result[i] = from_string(paths[i].toStdWString()); } @@ -401,7 +402,7 @@ namespace CSharp { } // Otherwize: Create the entry and the temporary file: else { - auto entry = g.DestinationTree->addFile(qPath, true); + entry = g.DestinationTree->addFile(qPath, true); qAbsPath = g.InstallManager->createFile(entry); if (qAbsPath.isEmpty()) { // Remove the entry from the tree: @@ -574,7 +575,8 @@ namespace CSharp { } System::Version^ BaseScriptImpl::GetModManagerVersion() { - return make_version(g_Organizer->appVersion()); + const auto version = g_Organizer->version(); + return gcnew System::Version(version.major(), version.minor(), version.patch()); } System::Version^ BaseScriptImpl::GetGameVersion() { diff --git a/src/base_script.h b/src/base_script.h index 1d3ff5d..abfa152 100644 --- a/src/base_script.h +++ b/src/base_script.h @@ -24,7 +24,7 @@ along with Mod Organizer. If not, see . #using #using -#include +#include /** * Note: The specification of BaseScript where taken from the Nexus-Mods installer_fomod extension @@ -306,7 +306,7 @@ namespace CSharp { /// The title of the selection form. /// Whether more than one item can be selected. /// The indices of the selected items. - static array^ ImageSelect(array^ p_strItems, array^ p_imgPreviews, array^ p_strDescriptions, String^ p_strTitle, bool p_booSelectMany) { + static array^ ImageSelect(array^ p_strItems, array^ /* p_imgPreviews */, array^ p_strDescriptions, String^ p_strTitle, bool p_booSelectMany) { return Select(p_strItems, gcnew array(p_strItems->Length), p_strDescriptions, p_strTitle, p_booSelectMany); } @@ -404,7 +404,7 @@ namespace CSharp { /// /// The path to the plugin to activate or deactivate. /// Whether to activate the plugin. - static void SetPluginActivation(String^ p_strPluginPath, bool p_booActivate) { + static void SetPluginActivation(String^ /* p_strPluginPath */, bool /* p_booActivate */) { // throw gcnew NotImplementedException("SetPluginActivation"); } @@ -413,7 +413,7 @@ namespace CSharp { /// /// The path to the plugin file whose load order is to be set. /// The new load order index of the plugin. - static void SetPluginOrderIndex(String^ p_strPlugin, int p_intNewIndex) { + static void SetPluginOrderIndex(String^ /* p_strPlugin */, int /* p_intNewIndex */) { // throw gcnew NotImplementedException("SetPluginOrderIndex"); } @@ -426,7 +426,7 @@ namespace CSharp { /// /// The new load order of the plugins. Each entry in this array /// contains the current index of a plugin. This array must contain all current indices. - static void SetLoadOrder(array^ p_intPlugins) { + static void SetLoadOrder(array^ /* p_intPlugins */) { // throw gcnew NotImplementedException("SetLoadOrder"); } @@ -443,7 +443,7 @@ namespace CSharp { /// load order. Each entry in this array contains the current index of a plugin. /// The position in the load order to which to move the specified /// plugins. - static void SetLoadOrder(array^ p_intPlugins, int p_intPosition) { + static void SetLoadOrder(array^ /* p_intPlugins */, int /* p_intPosition */) { // throw gcnew NotImplementedException("SetLoadOrder"); } @@ -530,7 +530,7 @@ namespace CSharp { /// Not used. /// true if the value was set; false /// if the user chose not to overwrite the existing value. - static bool EditFalloutINI(String^ p_strSection, String^ p_strKey, String^ p_strValue, bool p_booSaveOld) { + static bool EditFalloutINI(String^ p_strSection, String^ p_strKey, String^ p_strValue, bool /* p_booSaveOld */) { return EditIni("Fallout.ini", p_strSection, p_strKey, p_strValue); } diff --git a/src/csharp_interface.cpp b/src/csharp_interface.cpp index fe5ea6e..91a4a0d 100644 --- a/src/csharp_interface.cpp +++ b/src/csharp_interface.cpp @@ -1,15 +1,15 @@ -// clang-format off - #include "csharp_interface.h" #include -#include #include +#include -#include "log.h" +#include -#include "csharp_utils.h" #include "base_script.h" +#include "csharp_utils.h" + +// clang-format off #using @@ -73,7 +73,6 @@ IPluginInstaller::EInstallResult executeScript(System::String^ script) { auto result = provider->CompileAssemblyFromSource(cp, script); int errorCount = 0; - CompilerErrorCollection^ errors = result->Errors; for each (CompilerError ^ error in result->Errors) { if (error->IsWarning) { log::warn("C# [{}]: {}", error->Line, CSharp::to_string(error->ErrorText)); diff --git a/src/csharp_interface.h b/src/csharp_interface.h index fa209ca..4f22c20 100644 --- a/src/csharp_interface.h +++ b/src/csharp_interface.h @@ -3,8 +3,8 @@ #include -#include "ifiletree.h" -#include "iplugininstaller.h" +#include +#include namespace CSharp { diff --git a/src/installer_fomod_csharp.cpp b/src/installer_fomod_csharp.cpp index ba461f4..02d3a3e 100644 --- a/src/installer_fomod_csharp.cpp +++ b/src/installer_fomod_csharp.cpp @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with Mod Organizer. If not, see . */ -#include "iinstallationmanager.h" +#include #include "csharp_interface.h" #include "installer_fomod_csharp.h" @@ -145,7 +145,7 @@ InstallerFomodCSharp::install(MOBase::GuessedValue& modName, QStringList paths(manager()->extractFiles(toExtract)); // If user cancelled: - if (toExtract.size() != paths.size()) { + if (toExtract.size() != static_cast(paths.size())) { return EInstallResult::RESULT_CANCELED; } diff --git a/src/installer_fomod_csharp.h b/src/installer_fomod_csharp.h index 166b966..530db37 100644 --- a/src/installer_fomod_csharp.h +++ b/src/installer_fomod_csharp.h @@ -18,7 +18,7 @@ along with Mod Organizer. If not, see . #ifndef INSTALLER_FOMOD_CSHARP_H #define INSTALLER_FOMOD_CSHARP_H -#include "iplugininstallersimple.h" +#include class InstallerFomodCSharp : public MOBase::IPluginInstallerSimple { diff --git a/src/installer_fomod_csharp_en.ts b/src/installer_fomod_csharp_en.ts index f8c13e8..7c13b6c 100644 --- a/src/installer_fomod_csharp_en.ts +++ b/src/installer_fomod_csharp_en.ts @@ -112,12 +112,12 @@ QObject - + Choose any: - + Choose one: diff --git a/src/installer_fomod_predialog.h b/src/installer_fomod_predialog.h index 4c5dbd3..5c57fdf 100644 --- a/src/installer_fomod_predialog.h +++ b/src/installer_fomod_predialog.h @@ -3,7 +3,7 @@ #include "ui_installer_fomod_csharp_predialog.h" -#include "guessedvalue.h" +#include #include diff --git a/src/xml_info_reader.h b/src/xml_info_reader.h index 0170fcf..91d6d9a 100644 --- a/src/xml_info_reader.h +++ b/src/xml_info_reader.h @@ -8,8 +8,8 @@ #include #include -#include "log.h" -#include "utility.h" +#include +#include // This is from installer_fomod, but should probably not be duplicated here. diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000..28051ad --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,15 @@ +{ + "features": { + "standalone": { + "description": "Build Standalone.", + "dependencies": ["mo2-cmake", "mo2-uibase"] + } + }, + "vcpkg-configuration": { + "default-registry": { + "kind": "git", + "repository": "https://github.com/ModOrganizer2/vcpkg-registry", + "baseline": "8beb2e0efa9c17dd6d17bb05288dd1e40727f673" + } + } +}