From 2844231996f476b0384b3de918a84d5a89d31f36 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Wed, 24 Apr 2024 22:31:40 -0400 Subject: [PATCH] Enable Windows and Linux packaging The Windows version isn't super working yet, but this is a good step forward --- .github/workflows/cmake-multi-platform.yml | 84 ++++++++++++++-------- CMakeLists.txt | 1 + argcracker/CMakeLists.txt | 6 +- armoury/CMakeLists.txt | 4 ++ common/CMakeLists.txt | 19 ++++- common/include/aboutdata.h | 5 +- common/include/filecache.h | 4 +- common/include/filetypes.h | 4 +- common/include/novusmainwindow.h | 4 +- common/include/quaternionedit.h | 4 +- common/include/settings.h | 4 +- common/include/vec3edit.h | 4 +- karuku/CMakeLists.txt | 4 ++ launcher/CMakeLists.txt | 6 +- mapeditor/CMakeLists.txt | 4 ++ mdlviewer/CMakeLists.txt | 11 +++ sagasu/CMakeLists.txt | 4 ++ 17 files changed, 131 insertions(+), 41 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 11e4584..fd70db9 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -6,6 +6,10 @@ on: pull_request: branches: [ "main" ] +env: + CMAKE_BUILD_PARALLEL_LEVEL: 2 + MAKEFLAGS: '-j 2' + jobs: build: runs-on: ${{ matrix.os }} @@ -30,7 +34,7 @@ jobs: c_compiler: cl steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -77,8 +81,11 @@ jobs: run: | $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest https://xiv.zone/distrib/dependencies/gettext.zip -OutFile libintl.zip - unzip libintl.zip -d ${{ steps.strings.outputs.prefix-dir }} + Invoke-WebRequest https://xiv.zone/distrib/dependencies/gettext.zip -OutFile gettext.zip + unzip gettext.zip -d ${{ steps.strings.outputs.prefix-dir }} + + Invoke-WebRequest https://xiv.zone/distrib/dependencies/iconv.zip -OutFile iconv.zip + unzip iconv.zip -d ${{ steps.strings.outputs.prefix-dir }} Invoke-WebRequest https://cfhcable.dl.sourceforge.net/project/gnuwin32/gperf/3.0.1/gperf-3.0.1-bin.zip -OutFile gperf.zip unzip gperf.zip -d ${{ steps.strings.outputs.prefix-dir }} @@ -87,16 +94,16 @@ jobs: if: (runner.os == 'Windows') && (steps.cache-prefix-restore.outputs.cache-hit != 'true') run: | git clone https://github.com/madler/zlib.git - cmake -B ${{ steps.strings.outputs.build-output-dir }}-zlib -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S zlib "H"-DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-zlib --target install + cmake -B ${{ steps.strings.outputs.build-output-dir }}-zlib -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S zlib -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF + cmake --build ${{ steps.strings.outputs.build-output-dir }}-zlib --config ${{ matrix.build_type }} --target install - name: Build Extra CMake Modules if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/extra-cmake-modules.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-ECM -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S extra-cmake-modules -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-ECM --target install - cmake --install ${{ steps.strings.outputs.build-output-dir }}-ECM + cmake --build ${{ steps.strings.outputs.build-output-dir }}-ECM --config ${{ matrix.build_type }} --target install + cmake --install ${{ steps.strings.outputs.build-output-dir }}-ECM --config ${{ matrix.build_type }} - name: Configure KI18n if: steps.cache-prefix-restore.outputs.cache-hit != 'true' @@ -112,63 +119,63 @@ jobs: - name: Build KI18n if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | - cmake --build ${{ steps.strings.outputs.build-output-dir }}-ki18n --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-ki18n --config ${{ matrix.build_type }} --target install - name: Build KCoreAddons if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kcoreaddons.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kca -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kcoreaddons -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kca --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kca --config ${{ matrix.build_type }} --target install - name: Build KConfig if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kconfig.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kconfig -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kconfig -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kconfig --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kconfig --config ${{ matrix.build_type }} --target install - name: Build KArchive if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/karchive.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-karchive -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S karchive -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF -DWITH_BZIP2=OFF -DWITH_LIBLZMA=OFF -DWITH_LIBZSTD=OFF # TODO: enable bzip which we need later - cmake --build ${{ steps.strings.outputs.build-output-dir }}-karchive --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-karchive --config ${{ matrix.build_type }} --target install - name: Build KItemViews if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kitemviews.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kitemviews -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kitemviews -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kitemviews --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kitemviews --config ${{ matrix.build_type }} --target install - name: Build KCodecs if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kcodecs.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kcodecs -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kcodecs -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kcodecs --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kcodecs --config ${{ matrix.build_type }} --target install - name: Build Plasma Wayland Protocols if: (runner.os == 'Linux') && (steps.cache-prefix-restore.outputs.cache-hit != 'true') run: | git clone https://invent.kde.org/libraries/plasma-wayland-protocols.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-plasma-wayland-protocols -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S plasma-wayland-protocols -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-plasma-wayland-protocols --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-plasma-wayland-protocols --config ${{ matrix.build_type }} --target install - name: Build KGuiAddons if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kguiaddons.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kguiaddons -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kguiaddons -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kguiaddons --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kguiaddons --config ${{ matrix.build_type }} --target install - name: Build KWidgetsAddons if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kwidgetsaddons.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kwidgetsaddons -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kwidgetsaddons -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kwidgetsaddons --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kwidgetsaddons --config ${{ matrix.build_type }} --target install - name: Configure KColorScheme if: steps.cache-prefix-restore.outputs.cache-hit != 'true' @@ -184,70 +191,70 @@ jobs: - name: Build KColorScheme if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kcolorscheme --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kcolorscheme --config ${{ matrix.build_type }} --target install - name: Build KConfigWidgets if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kconfigwidgets.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kconfigwidgets -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kconfigwidgets -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kconfigwidgets --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kconfigwidgets --config ${{ matrix.build_type }} --target install - name: Build KIconThemes if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kiconthemes.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kiconthemes -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kiconthemes -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kiconthemes --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kiconthemes --config ${{ matrix.build_type }} --target install - name: Build Sonnet if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/sonnet.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-sonnet -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S sonnet -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-sonnet --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-sonnet --config ${{ matrix.build_type }} --target install - name: Build KCompletion if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kcompletion.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kcompletion -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kcompletion -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kcompletion --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kcompletion --config ${{ matrix.build_type }} --target install - name: Build KTextWidgets if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/ktextwidgets.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-ktextwidgets -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S ktextwidgets -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF -DWITH_TEXT_TO_SPEECH=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-ktextwidgets --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-ktextwidgets --config ${{ matrix.build_type }} --target install - name: Build KXmlGui if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://invent.kde.org/frameworks/kxmlgui.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-kxmlgui -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S kxmlgui -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DBUILD_TESTING=OFF -DFORCE_DISABLE_KGLOBALACCEL=ON - cmake --build ${{ steps.strings.outputs.build-output-dir }}-kxmlgui --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-kxmlgui --config ${{ matrix.build_type }} --target install - name: Build glm if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://github.com/g-truc/glm.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-glm -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S glm -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DGLM_BUILD_TESTS=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-glm --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-glm --config ${{ matrix.build_type }} --target install - name: Build Corrosion if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://github.com/corrosion-rs/corrosion.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-corrosion -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S corrosion -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DCORROSION_BUILD_TESTS=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-corrosion --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-corrosion --config ${{ matrix.build_type }} --target install - name: Build nlohmann if: steps.cache-prefix-restore.outputs.cache-hit != 'true' run: | git clone https://github.com/nlohmann/json.git cmake -B ${{ steps.strings.outputs.build-output-dir }}-nlohmann -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S json -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} -DJSON_BuildTests=OFF - cmake --build ${{ steps.strings.outputs.build-output-dir }}-nlohmann --target install + cmake --build ${{ steps.strings.outputs.build-output-dir }}-nlohmann --config ${{ matrix.build_type }} --target install - name: Build stb if: steps.cache-prefix-restore.outputs.cache-hit != 'true' @@ -269,12 +276,27 @@ jobs: -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_PREFIX_PATH=${{ steps.strings.outputs.prefix-dir }} - -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.prefix-dir }} + -DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.build-output-dir }}/bin -S ${{ github.workspace }} - name: Build - run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} --target install - - name: Test - working-directory: ${{ steps.strings.outputs.build-output-dir }} - run: ctest --build-config ${{ matrix.build_type }} + - name: Copy required DLLs + if: runner.os == 'Windows' + run: | + Copy-Item -Path ${{ steps.strings.outputs.prefix-dir }}/bin/KF6ItemViews.dll -Destination ${{ steps.strings.outputs.build-output-dir }}/bin/bin + Copy-Item -Path ${{ steps.strings.outputs.prefix-dir }}/bin/KF6IconWidgets.dll -Destination ${{ steps.strings.outputs.build-output-dir }}/bin/bin + Copy-Item -Path ${{ steps.strings.outputs.prefix-dir }}/bin/KF6GuiAddons.dll -Destination ${{ steps.strings.outputs.build-output-dir }}/bin/bin + Copy-Item -Path ${{ steps.strings.outputs.prefix-dir }}/bin/KF6ColorScheme.dll -Destination ${{ steps.strings.outputs.build-output-dir }}/bin/bin + Copy-Item -Path ${{ steps.strings.outputs.prefix-dir }}/bin/intl-8.dll -Destination ${{ steps.strings.outputs.build-output-dir }}/bin/bin + Copy-Item -Path ${{ steps.strings.outputs.prefix-dir }}/bin/KF6IconThemes.dll -Destination ${{ steps.strings.outputs.build-output-dir }}/bin/bin + Copy-Item -Path ${{ steps.strings.outputs.prefix-dir }}/bin/iconv.dll -Destination ${{ steps.strings.outputs.build-output-dir }}/bin/bin + Copy-Item -Path ${{ steps.strings.outputs.prefix-dir }}/bin/zlib.dll -Destination ${{ steps.strings.outputs.build-output-dir }}/bin/bin + Copy-Item -Path $env:Qt6_DIR/bin/Qt6PrintSupport.dll -Destination ${{ steps.strings.outputs.build-output-dir }}/bin/bin + + - name: Archive artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ runner.os }}-package + path: ${{ steps.strings.outputs.build-output-dir }}/bin diff --git a/CMakeLists.txt b/CMakeLists.txt index d048170..30d38e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,7 @@ include(KDEGitCommitHooks) include(KDEClangFormat) include(FeatureSummary) include(FetchContent) +include(ECMGenerateExportHeader) ecm_setup_version(${PROJECT_VERSION} VARIABLE_PREFIX NOVUS diff --git a/argcracker/CMakeLists.txt b/argcracker/CMakeLists.txt index df8ba14..2367e74 100644 --- a/argcracker/CMakeLists.txt +++ b/argcracker/CMakeLists.txt @@ -23,4 +23,8 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") target_compile_definitions(novus-argcracker PUBLIC LINUX) endif () -install(TARGETS novus-argcracker ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) \ No newline at end of file +install(TARGETS novus-argcracker ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) + +if (WIN32) + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() \ No newline at end of file diff --git a/armoury/CMakeLists.txt b/armoury/CMakeLists.txt index a6201f6..9269ba5 100644 --- a/armoury/CMakeLists.txt +++ b/armoury/CMakeLists.txt @@ -52,3 +52,7 @@ target_link_libraries(novus-armoury install(FILES zone.xiv.armoury.desktop DESTINATION ${KDE_INSTALL_APPDIR}) install(FILES zone.xiv.armoury.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps) install(TARGETS novus-armoury ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) + +if (WIN32) + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() \ No newline at end of file diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 5bf72ea..96758d8 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -1,7 +1,11 @@ # SPDX-FileCopyrightText: 2023 Joshua Goins # SPDX-License-Identifier: CC0-1.0 -add_library(novus-common STATIC) +if (WIN32) + add_library(novus-common SHARED) +else() + add_library(novus-common STATIC) +endif() target_sources(novus-common PRIVATE include/aboutdata.h @@ -35,5 +39,18 @@ target_link_libraries(novus-common Qt6::Widgets glm::glm) target_compile_definitions(novus-common PRIVATE TRANSLATION_DOMAIN="novus") +set_target_properties(novus-common PROPERTIES + EXPORT_NAME NovusCommon +) +ecm_generate_export_header(novus-common + BASE_NAME NovusCommon + VERSION 1.0.0 +) + +target_include_directories(novus-common PUBLIC "$") add_library(Novus::Common ALIAS novus-common) + +if (WIN32) + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() \ No newline at end of file diff --git a/common/include/aboutdata.h b/common/include/aboutdata.h index 32e87d1..159d2ea 100644 --- a/common/include/aboutdata.h +++ b/common/include/aboutdata.h @@ -6,4 +6,7 @@ #include #include -void customizeAboutData(const QString &componentName, const QString &desktopFilename, const QString &applicationTitle, const QString &applicationDescription); \ No newline at end of file +#include "novuscommon_export.h" + +NOVUSCOMMON_EXPORT void +customizeAboutData(const QString &componentName, const QString &desktopFilename, const QString &applicationTitle, const QString &applicationDescription); \ No newline at end of file diff --git a/common/include/filecache.h b/common/include/filecache.h index faabe15..0570943 100644 --- a/common/include/filecache.h +++ b/common/include/filecache.h @@ -9,9 +9,11 @@ #include #include +#include "novuscommon_export.h" + struct GameData; -class FileCache +class NOVUSCOMMON_EXPORT FileCache { public: explicit FileCache(GameData &data); diff --git a/common/include/filetypes.h b/common/include/filetypes.h index 66f3d9a..121d857 100644 --- a/common/include/filetypes.h +++ b/common/include/filetypes.h @@ -5,9 +5,11 @@ #include +#include "novuscommon_export.h" + enum class FileType { Unknown, ExcelList, ExcelHeader, ExcelData, Model, Texture, ShaderPackage, CharaMakeParams, Skeleton, Dictionary }; -class FileTypes +class NOVUSCOMMON_EXPORT FileTypes { public: static FileType getFileType(const QString &extension); diff --git a/common/include/novusmainwindow.h b/common/include/novusmainwindow.h index 9b88552..39892d0 100644 --- a/common/include/novusmainwindow.h +++ b/common/include/novusmainwindow.h @@ -5,7 +5,9 @@ #include -class NovusMainWindow : public QMainWindow +#include "novuscommon_export.h" + +class NOVUSCOMMON_EXPORT NovusMainWindow : public QMainWindow { public: explicit NovusMainWindow(); diff --git a/common/include/quaternionedit.h b/common/include/quaternionedit.h index 741f9a2..ef18534 100644 --- a/common/include/quaternionedit.h +++ b/common/include/quaternionedit.h @@ -8,7 +8,9 @@ #include -class QuaternionEdit : public QWidget +#include "novuscommon_export.h" + +class NOVUSCOMMON_EXPORT QuaternionEdit : public QWidget { Q_OBJECT diff --git a/common/include/settings.h b/common/include/settings.h index 44691de..c485908 100644 --- a/common/include/settings.h +++ b/common/include/settings.h @@ -5,4 +5,6 @@ #include -QString getGameDirectory(); \ No newline at end of file +#include "novuscommon_export.h" + +NOVUSCOMMON_EXPORT QString getGameDirectory(); \ No newline at end of file diff --git a/common/include/vec3edit.h b/common/include/vec3edit.h index 38ee7d5..02afc88 100644 --- a/common/include/vec3edit.h +++ b/common/include/vec3edit.h @@ -7,7 +7,9 @@ #include #include -class Vector3Edit : public QWidget +#include "novuscommon_export.h" + +class NOVUSCOMMON_EXPORT Vector3Edit : public QWidget { Q_OBJECT diff --git a/karuku/CMakeLists.txt b/karuku/CMakeLists.txt index 4d1ebe0..46886fb 100644 --- a/karuku/CMakeLists.txt +++ b/karuku/CMakeLists.txt @@ -27,3 +27,7 @@ target_link_libraries(novus-karuku install(FILES zone.xiv.karaku.desktop DESTINATION ${KDE_INSTALL_APPDIR}) install(FILES zone.xiv.karaku.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps) install(TARGETS novus-karuku ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) + +if (WIN32) + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() \ No newline at end of file diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index 451dd8c..e02a8a6 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -18,4 +18,8 @@ target_include_directories(novus-launcher PUBLIC include) install(FILES zone.xiv.novus.desktop DESTINATION ${KDE_INSTALL_APPDIR}) install(FILES zone.xiv.novus.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps) -install(TARGETS novus-launcher ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) \ No newline at end of file +install(TARGETS novus-launcher ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) + +if (WIN32) + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() \ No newline at end of file diff --git a/mapeditor/CMakeLists.txt b/mapeditor/CMakeLists.txt index 20a6d40..ced4352 100644 --- a/mapeditor/CMakeLists.txt +++ b/mapeditor/CMakeLists.txt @@ -27,3 +27,7 @@ target_link_libraries(novus-mapeditor install(FILES zone.xiv.mapeditor.desktop DESTINATION ${KDE_INSTALL_APPDIR}) install(FILES zone.xiv.mapeditor.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps) install(TARGETS novus-mapeditor ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) + +if (WIN32) + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() \ No newline at end of file diff --git a/mdlviewer/CMakeLists.txt b/mdlviewer/CMakeLists.txt index 97b7664..3ca0c4a 100644 --- a/mdlviewer/CMakeLists.txt +++ b/mdlviewer/CMakeLists.txt @@ -24,3 +24,14 @@ target_link_libraries(novus-mdlviewer install(FILES zone.xiv.mdlviewer.desktop DESTINATION ${KDE_INSTALL_APPDIR}) install(FILES zone.xiv.mdlviewer.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps) install(TARGETS novus-mdlviewer ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) + +qt_generate_deploy_app_script( + TARGET novus-mdlviewer + OUTPUT_SCRIPT deploy_script + NO_UNSUPPORTED_PLATFORM_ERROR +) +install(SCRIPT ${deploy_script}) + +if (WIN32) + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() \ No newline at end of file diff --git a/sagasu/CMakeLists.txt b/sagasu/CMakeLists.txt index 4c4b739..c6f4532 100644 --- a/sagasu/CMakeLists.txt +++ b/sagasu/CMakeLists.txt @@ -51,3 +51,7 @@ target_link_libraries(novus-sagasu install(FILES zone.xiv.sagasu.desktop DESTINATION ${KDE_INSTALL_APPDIR}) install(FILES zone.xiv.sagasu.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps) install(TARGETS novus-sagasu ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) + +if (WIN32) + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() \ No newline at end of file