git: 558f7ba7e2b8 - main - emulators/dolphin-emu: Fix build with libfmt 10.1.1+

From: Po-Chuan Hsieh <sunpoet_at_FreeBSD.org>
Date: Thu, 14 Dec 2023 15:50:07 UTC
The branch main has been updated by sunpoet:

URL: https://cgit.FreeBSD.org/ports/commit/?id=558f7ba7e2b816c6f09ff5f0905b2bb933a1d60a

commit 558f7ba7e2b816c6f09ff5f0905b2bb933a1d60a
Author:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2023-12-14 15:40:01 +0000
Commit:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2023-12-14 15:49:39 +0000

    emulators/dolphin-emu: Fix build with libfmt 10.1.1+
    
    - Add BUILD_DEPENDS to ensure libfmt 10.1+ is used
    
    Obtained from:  https://github.com/dolphin-emu/dolphin/commit/63467559b20682a6b9e4ec43c6b43456e1fca111
                    https://github.com/dolphin-emu/dolphin/commit/b5b28da39d371ff2abbb0855fadc3c748a8a7043
---
 emulators/dolphin-emu/Makefile           |   3 +-
 emulators/dolphin-emu/files/patch-libfmt | 168 +++++++++++++++++++++++++++++++
 2 files changed, 170 insertions(+), 1 deletion(-)

diff --git a/emulators/dolphin-emu/Makefile b/emulators/dolphin-emu/Makefile
index 7f86d74b3969..6f9a8b472747 100644
--- a/emulators/dolphin-emu/Makefile
+++ b/emulators/dolphin-emu/Makefile
@@ -10,6 +10,8 @@ WWW=		https://www.dolphin-emu.org
 LICENSE=	BSD3CLAUSE CC0-1.0 GPLv2+ MIT
 LICENSE_COMB=	multi
 
+BUILD_DEPENDS=	libfmt>=10.1:devel/libfmt \
+		vulkan-headers>0:graphics/vulkan-headers
 # Notes on dependencies:
 # - alsa support has been disabled (not optimal)
 # - enet and soundtouch come from Externals/ as Dolphin's versions diverge
@@ -42,7 +44,6 @@ LIB_DEPENDS=	libavcodec.so:multimedia/ffmpeg \
 		libcurl.so:ftp/curl \
 		libhidapi.so:comms/hidapi \
 		libxkbcommon.so:x11/libxkbcommon
-BUILD_DEPENDS=	vulkan-headers>0:graphics/vulkan-headers
 
 USES=		cmake compiler:c++17-lang desktop-file-utils elfctl gl iconv \
 		pkgconfig qmake qt:6 sdl xorg
diff --git a/emulators/dolphin-emu/files/patch-libfmt b/emulators/dolphin-emu/files/patch-libfmt
new file mode 100644
index 000000000000..56679c6177f5
--- /dev/null
+++ b/emulators/dolphin-emu/files/patch-libfmt
@@ -0,0 +1,168 @@
+Obtained from:	https://github.com/dolphin-emu/dolphin/commit/63467559b20682a6b9e4ec43c6b43456e1fca111
+		https://github.com/dolphin-emu/dolphin/commit/b5b28da39d371ff2abbb0855fadc3c748a8a7043
+
+--- CMakeLists.txt.orig	2023-07-23 02:24:09 UTC
++++ CMakeLists.txt
+@@ -630,7 +630,7 @@ if (_M_X86)
+ endif()
+ add_subdirectory(Externals/cpp-optparse)
+ 
+-dolphin_find_optional_system_library(fmt Externals/fmt 8)
++dolphin_find_optional_system_library(fmt Externals/fmt 10.1)
+ 
+ add_subdirectory(Externals/imgui)
+ add_subdirectory(Externals/implot)
+--- Source/Android/jni/GpuDriver.cpp.orig	2023-07-23 02:24:09 UTC
++++ Source/Android/jni/GpuDriver.cpp
+@@ -7,6 +7,7 @@
+ 
+ #include <jni.h>
+ 
++#include "Common/EnumUtils.h"`
+ #include "Common/IniFile.h"
+ #include "jni/AndroidCommon/AndroidCommon.h"
+ #include "jni/AndroidCommon/IDCache.h"
+@@ -69,7 +70,7 @@ Java_org_dolphinemu_dolphinemu_utils_GpuDriverHelper_0
+     properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
+     properties2.pNext = &driverProperties;
+     vkGetPhysicalDeviceProperties2(gpu_list.front(), &properties2);
+-    driverId = fmt::format("{}", driverProperties.driverID);
++    driverId = fmt::format("{}", Common::ToUnderlying(driverProperties.driverID));
+   }
+   else
+   {
+--- Source/Core/Common/HRWrap.cpp.orig	2023-07-23 02:24:09 UTC
++++ Source/Core/Common/HRWrap.cpp
+@@ -3,13 +3,15 @@
+ 
+ #include "HRWrap.h"
+ 
+-#include <winrt/base.h>
+-
+ namespace Common
+ {
+ std::string GetHResultMessage(HRESULT hr)
+ {
+   auto err = winrt::hresult_error(hr);
+   return winrt::to_string(err.message());
++}
++std::string GetHResultMessage(const winrt::hresult& hr)
++{
++  return GetHResultMessage(hr.value);
+ }
+ }  // namespace Common
+--- Source/Core/Common/HRWrap.h.orig	2023-07-23 02:24:09 UTC
++++ Source/Core/Common/HRWrap.h
+@@ -6,6 +6,7 @@
+ #include <fmt/format.h>
+ #include <string>
+ #include <winerror.h>
++#include <winrt/base.h>
+ 
+ #include "Common/CommonTypes.h"
+ 
+@@ -31,5 +32,16 @@ struct fmt::formatter<Common::HRWrap>
+   {
+     return fmt::format_to(ctx.out(), "{} ({:#010x})", Common::GetHResultMessage(hr.m_hr),
+                           static_cast<u32>(hr.m_hr));
++  }
++};
++
++template <>
++struct fmt::formatter<winrt::hresult>
++{
++  constexpr auto parse(fmt::format_parse_context& ctx) { return ctx.begin(); }
++  template <typename FormatContext>
++  auto format(const winrt::hresult& hr, FormatContext& ctx) const
++  {
++    return fmt::format_to(ctx.out(), "{} ({:#010x})", Common::GetHResultMessage(hr), hr.value);
+   }
+ };
+--- Source/Core/Common/Swap.h.orig	2023-07-23 02:24:09 UTC
++++ Source/Core/Common/Swap.h
+@@ -16,6 +16,8 @@
+ #include <endian.h>
+ #endif
+ 
++#include <fmt/format.h>
++
+ #include "Common/CommonTypes.h"
+ 
+ namespace Common
+@@ -183,3 +185,15 @@ struct BigEndianValue (private)
+   value_type raw;
+ };
+ }  // Namespace Common
++
++template <typename value_type>
++struct fmt::formatter<Common::BigEndianValue<value_type>>
++{
++  fmt::formatter<value_type> m_formatter;
++  constexpr auto parse(format_parse_context& ctx) { return m_formatter.parse(ctx); }
++  template <typename FormatContext>
++  auto format(const Common::BigEndianValue<value_type>& value, FormatContext& ctx) const
++  {
++    return m_formatter.format(value.operator value_type(), ctx);
++  }
++};
+--- Source/Core/InputCommon/ControllerInterface/WGInput/WGInput.cpp.orig	2023-07-23 02:24:09 UTC
++++ Source/Core/InputCommon/ControllerInterface/WGInput/WGInput.cpp
+@@ -23,6 +23,7 @@
+ 
+ #include <fmt/format.h>
+ 
++#include "Common/HRWrap.h"
+ #include "Common/Logging/Log.h"
+ #include "Common/StringUtil.h"
+ #include "InputCommon/ControllerInterface/ControllerInterface.h"
+@@ -506,7 +507,7 @@ class Device : public Core::Device (private)
+     catch (winrt::hresult_error error)
+     {
+       ERROR_LOG_FMT(CONTROLLERINTERFACE,
+-                    "WGInput: IRawGameController::GetCurrentReading failed: {:x}", error.code());
++                    "WGInput: IRawGameController::GetCurrentReading failed: {}", error.code());
+     }
+ 
+     // IGamepad:
+@@ -518,7 +519,7 @@ class Device : public Core::Device (private)
+       }
+       catch (winrt::hresult_error error)
+       {
+-        ERROR_LOG_FMT(CONTROLLERINTERFACE, "WGInput: IGamepad::GetCurrentReading failed: {:x}",
++        ERROR_LOG_FMT(CONTROLLERINTERFACE, "WGInput: IGamepad::GetCurrentReading failed: {}",
+                       error.code());
+       }
+     }
+--- Source/Core/VideoCommon/Assets/DirectFilesystemAssetLibrary.cpp.orig	2023-07-23 02:24:09 UTC
++++ Source/Core/VideoCommon/Assets/DirectFilesystemAssetLibrary.cpp
+@@ -4,7 +4,8 @@
+ #include "VideoCommon/Assets/DirectFilesystemAssetLibrary.h"
+ 
+ #include <algorithm>
+-#include <fmt/os.h>
++
++#include <fmt/std.h>
+ 
+ #include "Common/FileUtil.h"
+ #include "Common/Logging/Log.h"
+--- Source/Core/VideoCommon/BPMemory.h.orig	2023-07-23 02:24:09 UTC
++++ Source/Core/VideoCommon/BPMemory.h
+@@ -1863,7 +1863,7 @@ enum class ColorChannel : u32
+ template <>
+ struct fmt::formatter<ColorChannel> : EnumFormatter<ColorChannel::Alpha>
+ {
+-  formatter() : EnumFormatter({"Red", "Green", "Blue", "Alpha"}) {}
++  constexpr formatter() : EnumFormatter({"Red", "Green", "Blue", "Alpha"}) {}
+ };
+ 
+ enum class KonstSel : u32
+--- Source/Core/VideoCommon/TextureCacheBase.h.orig	2023-07-23 02:24:09 UTC
++++ Source/Core/VideoCommon/TextureCacheBase.h
+@@ -98,7 +98,6 @@ struct EFBCopyParams
+ template <>
+ struct fmt::formatter<EFBCopyParams>
+ {
+-  std::shared_ptr<int> state;
+   constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
+   template <typename FormatContext>
+   auto format(const EFBCopyParams& uid, FormatContext& ctx) const