diff --git a/gnu/local.mk b/gnu/local.mk index ee40eb237c2..f5b9357b5c9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -2434,6 +2434,7 @@ dist_patch_DATA = \ %D%/packages/patches/vtk-7-hdf5-compat.patch \ %D%/packages/patches/vtk-7-python-compat.patch \ %D%/packages/patches/warsow-qfusion-fix-bool-return-type.patch \ + %D%/packages/patches/warzone2100-unbundle-libs.patch \ %D%/packages/patches/wcstools-extend-makefiles.patch \ %D%/packages/patches/wdl-link-libs-and-fix-jnetlib.patch \ %D%/packages/patches/webkitgtk-adjust-bubblewrap-paths.patch \ diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index f265db356c2..2a41a4d04e3 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -204,6 +204,7 @@ #:use-module (gnu packages ncurses) #:use-module (gnu packages netpbm) #:use-module (gnu packages networking) + #:use-module (gnu packages ninja) #:use-module (gnu packages ocaml) #:use-module (gnu packages opencl) #:use-module (gnu packages pcre) @@ -222,6 +223,7 @@ #:use-module (gnu packages python-xyz) #:use-module (gnu packages qt) #:use-module (gnu packages readline) + #:use-module (gnu packages regex) #:use-module (gnu packages ruby-check) #:use-module (gnu packages shells) #:use-module (gnu packages sdl) @@ -6522,77 +6524,64 @@ in-window at 640x480 resolution or fullscreen.") (define-public warzone2100 (package (name "warzone2100") - (version "4.3.5") - (source - (origin - (method url-fetch) - (uri (string-append "mirror://sourceforge/warzone2100/releases/" - version - "/warzone2100_src.tar.xz")) - (sha256 - (base32 "1hq56hm6bn3s2pksznh5g8hgq6ww6fnl1pspr3bi93k3z7v0imh1")) - (modules '((guix build utils))) - (snippet - '(begin - (with-directory-excursion "3rdparty" - (for-each - delete-file-recursively - '("discord-rpc" - "miniupnp" - "utfcpp"))) - #t)))) + (version "4.6.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/warzone2100/releases/" + version "/warzone2100_src.tar.xz")) + (patches (search-patches "warzone2100-unbundle-libs.patch")) + (modules '((guix build utils))) + (snippet #~(for-each delete-file-recursively + (cons* "lib/netplay/3rdparty/miniupnp" + "lib/sound/3rdparty/opusfile" + (map (lambda (s) (string-append "3rdparty/" s)) + '("basis_universal" "basis_universal_host_build" + "discord-rpc" "fmt" "GameNetworkingSockets" + "inih" "re2" "utf8proc" "utfcpp"))))) + (sha256 + (base32 + "02x5ihkpfkpjxwvh00d8yqzd796af7d684nk96hzhhq28qw5bb16")))) (build-system cmake-build-system) - (arguments - (list #:configure-flags #~'("-DWZ_DISTRIBUTOR=Guix" - "-DWZ_ENABLE_BACKEND_VULKAN=off" - "-DENABLE_DISCORD=off") - #:tests? #f ; TODO: Tests seem to be broken, configure.ac is missing. - #:phases - #~(modify-phases %standard-phases - (add-after 'unpack 'fix-utfcpp-include - (lambda _ - (substitute* "lib/framework/wzstring.cpp" - (("") - "")))) - (add-after 'unpack 'link-tests-with-qt - (lambda _ - (substitute* "tests/Makefile.am" - (("(framework_linktest_LDADD|maptest_LDADD) = " - prefix) - (string-append prefix "$(QT5_LIBS) "))))) - (add-after 'unpack 'fix-ivis-linktest - (lambda _ - (substitute* "tests/ivis_linktest.cpp" - (("iV_DrawTextRotated.*;") - (string-append - "iV_DrawTextRotated(\"Press ESC to exit.\", " - "100, 100, 0.0f, font_regular);")))))))) - (native-inputs (list asciidoc - ruby-asciidoctor/minimal - gettext-minimal - pkg-config - unzip - ;; 7z is used to create .zip archive, not `zip' as in version 3.2.*. - p7zip)) - (inputs (list opus + (arguments (list #:configure-flags #~'("-GNinja" + "-DWZ_DISTRIBUTOR=Guix" + "-DWZ_DOWNLOAD_PREBUILT_PACKAGES=off" + "-DWZ_INCLUDE_VIDEOS=off" + "-DWZ_FORCE_MINIMAL_OPUSFILE=off" + "-DENABLE_GNS_NETWORK_BACKEND=off") + ;; TODO: Tests seem to be broken, configure.ac is missing. + #:tests? #f)) + (native-inputs (list basis-universal + gettext-minimal + ninja + p7zip + pkg-config + ruby-asciidoctor/minimal + shaderc)) + (inputs (list basis-universal curl - fontconfig + fmt freetype - glew + fribidi + gnutls harfbuzz + libinih + libogg + libpng + libsodium libtheora libvorbis - libxrandr - libsodium + libzip miniupnpc openal + opus + opusfile physfs - qtbase-5 - qtscript-5 - openssl + re2 sdl2 sqlite - utfcpp)) + utf8proc + utfcpp + vulkan-headers)) (home-page "https://wz2100.net") (synopsis "3D Real-time strategy and real-time tactics game") (description diff --git a/gnu/packages/patches/warzone2100-unbundle-libs.patch b/gnu/packages/patches/warzone2100-unbundle-libs.patch new file mode 100644 index 00000000000..6752cc609cd --- /dev/null +++ b/gnu/packages/patches/warzone2100-unbundle-libs.patch @@ -0,0 +1,324 @@ +diff -ru a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt +--- a/3rdparty/CMakeLists.txt 2025-09-16 11:41:32.000000000 -0500 ++++ b/3rdparty/CMakeLists.txt 2025-09-18 14:00:25.296819724 -0500 +@@ -1,67 +1,47 @@ + cmake_minimum_required (VERSION 3.16...3.31) +- ++find_package(PkgConfig QUIET) + include(CheckCompilerFlagsOutput) + +-SET(UTF8PROC_INSTALL OFF CACHE BOOL "Enable installation of utf8proc" FORCE) +-add_subdirectory(utf8proc EXCLUDE_FROM_ALL) +-set_property(TARGET utf8proc PROPERTY FOLDER "3rdparty") +-if(NOT MSVC) +- set(_supported_utf8proc_cxx_compiler_flags "") +- +- # -Wassign-enum +- check_compiler_flags_output("-Werror -Wno-assign-enum -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-assign-enum" OUTPUT_VARIABLE _supported_utf8proc_cxx_compiler_flags APPEND) +- +- if (NOT _supported_utf8proc_cxx_compiler_flags STREQUAL "") +- string(REPLACE " " ";" _supported_utf8proc_cxx_compiler_flags "${_supported_utf8proc_cxx_compiler_flags}") +- target_compile_options(utf8proc PRIVATE ${_supported_utf8proc_cxx_compiler_flags}) +- endif() +-endif() ++pkg_check_modules(UTF8PROC REQUIRED libutf8proc) ++add_library(utf8proc UNKNOWN IMPORTED) ++set_target_properties(utf8proc PROPERTIES ++ IMPORTED_LOCATION ${UTF8PROC_LIBRARIES} ++ INTERFACE_INCLUDE_DIRECTORIES ${UTF8PROC_INCLUDE_DIRS} ++ INTERFACE_LINK_LIBRARIES ${UTF8PROC_LINK_LIBRARIES} ++) + + add_subdirectory(launchinfo EXCLUDE_FROM_ALL) + set_property(TARGET launchinfo PROPERTY FOLDER "3rdparty") + +-SET(FMT_INSTALL OFF CACHE BOOL "Generate the install target" FORCE) +-SET(FMT_SYSTEM_HEADERS ON CACHE BOOL "Expose headers with marking them as system." FORCE) +-add_subdirectory(fmt EXCLUDE_FROM_ALL) +-set_property(TARGET fmt PROPERTY FOLDER "3rdparty") +-# Define a custom inline namespace for the fmt used by WZ, to prevent ODR violations if static linking to any libraries that themselves embed (a different version of) fmt +-target_compile_definitions(fmt PUBLIC "FMT_BEGIN_NAMESPACE=namespace fmt { inline namespace v11_wz2100 {") +-target_compile_definitions(fmt PUBLIC "FMT_END_NAMESPACE=}}") +- ++pkg_check_modules(FMT REQUIRED fmt) ++add_library(fmt UNKNOWN IMPORTED) ++set_target_properties(fmt PROPERTIES ++ IMPORTED_LOCATION ${FMT_LIBRARIES} ++ INTERFACE_INCLUDE_DIRECTORIES ${FMT_INCLUDE_DIRS} ++ INTERFACE_LINK_LIBRARIES ${FMT_LINK_LIBRARIES} ++) + + # inih library +-add_library(inih STATIC "inih/ini.h" "inih/ini.c") +-set_property(TARGET inih PROPERTY FOLDER "3rdparty") +-target_include_directories(inih PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") +-target_compile_definitions(inih PRIVATE +- "-DINI_API=" +- "-DINI_ALLOW_MULTILINE=0" +- "-DINI_ALLOW_BOM=1" +- "-DINI_ALLOW_INLINE_COMMENTS=0" +- "-DINI_MAX_LINE=1024" +- "-DINI_ALLOW_REALLOC=1" +- "-DINI_INITIAL_ALLOC=1024" ++pkg_check_modules(INIH REQUIRED inih) ++add_library(inih UNKNOWN IMPORTED) ++set_target_properties(inih PROPERTIES ++ IMPORTED_LOCATION ${INIH_LIBRARIES} ++ INTERFACE_INCLUDE_DIRECTORIES ${INIH_INCLUDE_DIRS} ++ INTERFACE_LINK_LIBRARIES ${INIH_LINK_LIBRARIES} + ) + + # re2 +-SET(RE2_BUILD_TESTING OFF CACHE BOOL "enable testing for RE2" FORCE) +-add_subdirectory(re2 EXCLUDE_FROM_ALL) +-target_include_directories(re2 PUBLIC +- $ ++pkg_check_modules(RE2 REQUIRED re2) ++add_library(re2 UNKNOWN IMPORTED) ++set_target_properties(re2 PROPERTIES ++ IMPORTED_LOCATION ${RE2_LIBRARIES} ++ INTERFACE_INCLUDE_DIRECTORIES ${RE2_INCLUDE_DIRS} ++ INTERFACE_LINK_LIBRARIES ${RE2_LINK_LIBRARIES} + ) +-set_property(TARGET re2 PROPERTY FOLDER "3rdparty") +-set_property(TARGET re2 PROPERTY XCODE_ATTRIBUTE_GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS NO) # -Wmissing-field-initializers +-set_property(TARGET re2 PROPERTY XCODE_ATTRIBUTE_GCC_WARN_SHADOW NO) # -Wshadow +-set_property(TARGET re2 PROPERTY XCODE_ATTRIBUTE_WARNING_CFLAGS "-Wno-missing-field-initializers -Wno-shadow") + + add_subdirectory(EmbeddedJSONSignature EXCLUDE_FROM_ALL) + set_property(TARGET EmbeddedJSONSignature PROPERTY FOLDER "3rdparty") + +-if(ENABLE_DISCORD) +- add_subdirectory(discord-rpc EXCLUDE_FROM_ALL) +- set_property(TARGET discord-rpc PROPERTY FOLDER "3rdparty") +-endif() +- + find_package(SQLite3 3.14 REQUIRED) + set(SQLITECPP_USE_STATIC_RUNTIME OFF CACHE BOOL "Use static runtime" FORCE) + set(SQLITE_HAS_CODEC OFF CACHE BOOL "Enable database encryption API. Not available in the public release of SQLite." FORCE) +@@ -111,52 +91,7 @@ + if (WZ_ENABLE_BASIS_UNIVERSAL AND NOT WZ_CI_DISABLE_BASIS_COMPRESS_TEXTURES) + + # basis-universal +- set(_ORIGINAL_CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH}") +- if(DEFINED VCPKG_INSTALLED_DIR AND DEFINED VCPKG_HOST_TRIPLET) +- # Partial workaround for: https://github.com/microsoft/vcpkg/issues/17001 +- # Explicitly add the HOST_TRIPLET paths to CMAKE_PROGRAM_PATH +- list(APPEND CMAKE_PROGRAM_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_HOST_TRIPLET}") +- endif() +- find_program(BASIS_UNIVERSAL_CLI NAMES basisu PATH_SUFFIXES "tools/basisu" NO_CACHE) +- set(CMAKE_PROGRAM_PATH "${_ORIGINAL_CMAKE_PROGRAM_PATH}") +- if(NOT BASIS_UNIVERSAL_CLI) +- message(STATUS "Pre-installed basisu tool not found - attempting to build for host system") +- +- # Build the tool for the host system at configure time +- set(BASISU_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/basis_universal_host_tool/") +- execute_process( +- COMMAND ${CMAKE_COMMAND} -E make_directory "${BASISU_BINARY_DIR}" +- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal_host_build" +- RESULT_VARIABLE _basis_result +- ) +- if(NOT _basis_result EQUAL 0) +- message(FATAL_ERROR "Failed to create directory for basis_universal_host_build") +- endif() +- execute_process( +- COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal_host_build" +- WORKING_DIRECTORY "${BASISU_BINARY_DIR}" +- RESULT_VARIABLE _basis_result +- ) +- if(NOT _basis_result EQUAL 0) +- message(FATAL_ERROR "Failed to configure basis_universal_host_build") +- endif() +- execute_process( +- COMMAND ${CMAKE_COMMAND} --build "${BASISU_BINARY_DIR}" --config Release +- WORKING_DIRECTORY "${BASISU_BINARY_DIR}" +- RESULT_VARIABLE _basis_result +- ) +- if(NOT _basis_result EQUAL 0) +- message(FATAL_ERROR "Basis-Universal host tool build failed") +- endif() +- message(STATUS "Basis-Universal Host Tool Built") +- +- find_program(BASIS_UNIVERSAL_CLI NAMES basisu PATHS "${BASISU_BINARY_DIR}/basis_install/bin" NO_CACHE NO_DEFAULT_PATH) +- if(NOT BASIS_UNIVERSAL_CLI) +- message(FATAL_ERROR "Built basisu CLI tool not found!") +- endif() +- else() +- message(STATUS "Pre-installed basisu tool found: ${BASIS_UNIVERSAL_CLI}") +- endif() ++ find_program(BASIS_UNIVERSAL_CLI NAMES basisu REQUIRED) + + # Test basisu -version + execute_process( +@@ -174,86 +109,6 @@ + + endif() + +-if (WZ_ENABLE_BASIS_UNIVERSAL) +- +- # basis-universal transcoder +- +- add_library(basis_transcoder STATIC "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal/transcoder/basisu_transcoder.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal/transcoder/basisu_transcoder.h" "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal/zstd/zstddeclib.c") +- set_property(TARGET basis_transcoder PROPERTY FOLDER "3rdparty") +- target_include_directories(basis_transcoder SYSTEM PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal/transcoder") +- +- if(NOT MSVC) +- set(_supported_basistranscoder_cxx_compiler_flags "") +- +- # -fno-strict-aliasing (GCC, Clang) +- check_compiler_flags_output("-Werror -fno-strict-aliasing -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-fno-strict-aliasing" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) +- +- # -Wcast-align (GCC 3.4+, Clang 3.2+) +- check_compiler_flags_output("-Werror -Wno-cast-align -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-cast-align" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) +- +- # -Wdeprecated-declarations +- check_compiler_flags_output("-Werror -Wno-deprecated-declarations -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-deprecated-declarations" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) +- +- # -Wunused-but-set-variable +- check_compiler_flags_output("-Werror -Wno-unused-but-set-variable -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-but-set-variable" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) +- +- # -Wunused-function +- check_compiler_flags_output("-Werror -Wno-unused-function -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-function" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) +- +- # -Wunused-const-variable +- check_compiler_flags_output("-Werror -Wno-unused-const-variable -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-const-variable" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) +- +- # -Wunknown-warning-option +- check_compiler_flags_output("-Werror -Wno-unknown-warning-option -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unknown-warning-option" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) +- +- # -Wnontrivial-memcall +- check_compiler_flags_output("-Werror -Wno-nontrivial-memcall -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-nontrivial-memcall" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) +- +- if (NOT _supported_basistranscoder_cxx_compiler_flags STREQUAL "") +- string(REPLACE " " ";" _supported_basistranscoder_cxx_compiler_flags "${_supported_basistranscoder_cxx_compiler_flags}") +- target_compile_options(basis_transcoder PRIVATE ${_supported_basistranscoder_cxx_compiler_flags}) +- endif() +- endif() +- +- # Must also set BASISD_IS_BIG_ENDIAN if the target platform is big-endian! +- if (NOT DEFINED CMAKE_CXX_BYTE_ORDER AND CMAKE_VERSION VERSION_LESS 3.20) +- # CMake < 3.20 does not have CMAKE__BYTE_ORDER +- # Instead, use the older TestBigEndian module (although this may not work for cross-compilation) +- if (NOT CMAKE_CROSSCOMPILING) +- include(TestBigEndian) +- test_big_endian(IS_BIGENDIAN) +- if (IS_BIGENDIAN) +- set(CMAKE_CXX_BYTE_ORDER "BIG_ENDIAN") +- endif() +- else() +- message(WARNING "Unable to determine endianness for target architecture. Either upgrade to CMake 3.20+, or - if big endian - manually set the CMAKE_CXX_BYTE_ORDER cache variable to \"BIG_ENDIAN\". Otherwise, assuming little endian.") +- endif() +- endif() +- if (DEFINED CMAKE_CXX_BYTE_ORDER AND CMAKE_CXX_BYTE_ORDER STREQUAL "BIG_ENDIAN") +- message(STATUS "Defining BASISD_IS_BIG_ENDIAN=1") +- target_compile_definitions(basis_transcoder PRIVATE "-DBASISD_IS_BIG_ENDIAN=1") +- endif() +- +- # Must set BASISU_HAVE_STD_TRIVIALLY_COPYABLE if the target supports std::is_trivially_copyable +- include(CheckCXXSourceCompiles) +- check_cxx_source_compiles(" +- #include +- const bool val = std::is_trivially_copyable::value; +- int main() +- { +- return 0; +- }" +- HAVE_STD_IS_TRIVIALLY_COPYABLE +- ) +- if (HAVE_STD_IS_TRIVIALLY_COPYABLE) +- target_compile_definitions(basis_transcoder PUBLIC "-DBASISU_HAVE_STD_TRIVIALLY_COPYABLE") +- endif() +- +- # Disable certain transcoder formats +- target_compile_definitions(basis_transcoder PRIVATE "-DBASISD_SUPPORT_ATC=0" "-DBASISD_SUPPORT_PVRTC1=0" "-DBASISD_SUPPORT_PVRTC2=0") +- +-endif(WZ_ENABLE_BASIS_UNIVERSAL) +- + if (WZ_PROFILING_NVTX) + include(FetchContent) + FetchContent_Declare( +diff -ru a/lib/framework/wzstring.cpp b/lib/framework/wzstring.cpp +--- a/lib/framework/wzstring.cpp 2025-09-16 11:41:32.000000000 -0500 ++++ b/lib/framework/wzstring.cpp 2025-09-18 13:37:23.686668245 -0500 +@@ -24,8 +24,8 @@ + #include + #include + #include +-#include +-#include ++#include ++#include + + WzUniCodepoint WzUniCodepoint::fromASCII(unsigned char charLiteral) + { +diff -ru a/lib/ivis_opengl/CMakeLists.txt b/lib/ivis_opengl/CMakeLists.txt +--- a/lib/ivis_opengl/CMakeLists.txt 2025-09-16 11:41:32.000000000 -0500 ++++ b/lib/ivis_opengl/CMakeLists.txt 2025-09-18 14:00:13.716771596 -0500 +@@ -88,7 +88,7 @@ + include(WZTargetConfiguration) + WZ_TARGET_CONFIGURATION(ivis-opengl) + +-target_link_libraries(ivis-opengl PRIVATE framework launchinfo fmt::fmt) ++target_link_libraries(ivis-opengl PRIVATE framework launchinfo fmt) + if(CMAKE_SYSTEM_NAME MATCHES "Emscripten") + # We should be using the Emscripten port linker flags for FreeType & Harfbuzz + else() +@@ -116,8 +116,11 @@ + target_link_libraries(ivis-opengl PRIVATE etcpak) + target_compile_definitions(ivis-opengl PRIVATE "-DETCPAK_ENABLED") + endif() +-if(WZ_ENABLE_BASIS_UNIVERSAL AND TARGET basis_transcoder) +- target_link_libraries(ivis-opengl PRIVATE basis_transcoder) ++if(WZ_ENABLE_BASIS_UNIVERSAL) ++ find_package(PkgConfig QUIET) ++ pkg_check_modules(BASIS REQUIRED basisu_encoder) ++ target_include_directories(ivis-opengl PUBLIC ${BASIS_INCLUDE_DIRS}) ++ target_link_libraries(ivis-opengl PRIVATE ${BASIS_LINK_LIBRARIES}) + target_compile_definitions(ivis-opengl PRIVATE "-DBASIS_ENABLED") + else() + message(WARNING "Basis-universal support is disabled") +diff -ru a/lib/netplay/CMakeLists.txt b/lib/netplay/CMakeLists.txt +--- a/lib/netplay/CMakeLists.txt 2025-09-16 11:41:32.000000000 -0500 ++++ b/lib/netplay/CMakeLists.txt 2025-09-18 13:37:23.686969530 -0500 +@@ -108,7 +108,7 @@ + include(WZTargetConfiguration) + WZ_TARGET_CONFIGURATION(netplay) + target_link_libraries(netplay +- PRIVATE framework re2::re2 nlohmann_json plum-static Threads::Threads ZLIB::ZLIB fmt::fmt ++ PRIVATE framework re2 nlohmann_json plum-static Threads::Threads ZLIB::ZLIB fmt + PUBLIC tl::expected) + + if(WZ_USE_IMPORTED_MINIUPNPC) +diff -ru a/src/3rdparty/INIReaderWriter.cpp b/src/3rdparty/INIReaderWriter.cpp +--- a/src/3rdparty/INIReaderWriter.cpp 2025-09-16 11:41:32.000000000 -0500 ++++ b/src/3rdparty/INIReaderWriter.cpp 2025-09-18 13:37:23.687094584 -0500 +@@ -13,7 +13,7 @@ + #ifndef INI_API + # define INI_API + #endif +-#include ++#include + #include "INIReaderWriter.h" + + using std::string; +diff -ru a/src/CMakeLists.txt b/src/CMakeLists.txt +--- a/src/CMakeLists.txt 2025-09-16 11:41:32.000000000 -0500 ++++ b/src/CMakeLists.txt 2025-09-18 13:37:23.687282446 -0500 +@@ -130,7 +130,7 @@ + + target_link_libraries(warzone2100 exception-handler gamelib wzmaplib ZipIOProvider ivis-opengl netplay sdl-backend framework sequence sound widget) + target_link_libraries(warzone2100 launchinfo EmbeddedJSONSignature) +-target_link_libraries(warzone2100 fmt::fmt) ++target_link_libraries(warzone2100 fmt) + if(ENABLE_NLS) + target_link_libraries(warzone2100 ${Intl_LIBRARIES}) + endif() +@@ -146,7 +146,7 @@ + include(IncludeFindCurl) + target_link_libraries(warzone2100 CURL::libcurl) + endif() +-target_link_libraries(warzone2100 re2::re2) ++target_link_libraries(warzone2100 re2) + + find_package(SQLite3 3.14 REQUIRED) + target_link_libraries(warzone2100 SQLite::SQLite3)