commit:     8e5152d8130bb132793f6efa50c77c7ab2cb9b4a
Author:     Henri Gasc <gasc <AT> eurecom <DOT> fr>
AuthorDate: Fri May  9 19:56:17 2025 +0000
Commit:     David Roman <davidroman96 <AT> gmail <DOT> com>
CommitDate: Fri May  9 19:56:41 2025 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=8e5152d8

app-editors/imhex: Add patch to allow newer version of libfmt

Signed-off-by: Henri Gasc <gasc <AT> eurecom.fr>

 app-editors/imhex/files/cmake_boost_regex.patch    |   2 +-
 .../imhex/files/imhex-1.37.4-update-libfmt.patch   | 154 +++++++++++++++++++++
 app-editors/imhex/imhex-1.37.4-r3.ebuild           |   3 +-
 3 files changed, 157 insertions(+), 2 deletions(-)

diff --git a/app-editors/imhex/files/cmake_boost_regex.patch 
b/app-editors/imhex/files/cmake_boost_regex.patch
index be20b2c17..f76ea6d14 100644
--- a/app-editors/imhex/files/cmake_boost_regex.patch
+++ b/app-editors/imhex/files/cmake_boost_regex.patch
@@ -5,7 +5,7 @@
  
      if (USE_SYSTEM_BOOST)
 -        find_package(Boost REQUIRED)
-+              find_package(Boost REQUIRED COMPONENTS regex)
++        find_package(Boost REQUIRED COMPONENTS regex)
          set(BOOST_LIBRARIES Boost::regex)
      else()
          add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/boost 
${CMAKE_CURRENT_BINARY_DIR}/boost EXCLUDE_FROM_ALL)

diff --git a/app-editors/imhex/files/imhex-1.37.4-update-libfmt.patch 
b/app-editors/imhex/files/imhex-1.37.4-update-libfmt.patch
new file mode 100644
index 000000000..e2a11eb5f
--- /dev/null
+++ b/app-editors/imhex/files/imhex-1.37.4-update-libfmt.patch
@@ -0,0 +1,154 @@
+# From: Myself and (mostly) WerWolv <[email protected]>
+# Fixes https://github.com/WerWolv/ImHex/issues/2225
+--- a/lib/external/pattern_language/lib/source/pl/lib/std/time.cpp
++++ b/lib/external/pattern_language/lib/source/pl/lib/std/time.cpp
+@@ -11,7 +11,7 @@
+ 
+ namespace pl::lib::libstd::time {
+ 
+-    static u128 packTMValue(std::tm tm) {
++    static u128 packTMValue(const std::tm &tm) {
+         return
+             (u128(tm.tm_sec)   << 0)  |
+             (u128(tm.tm_min)   << 8)  |
+@@ -57,9 +57,10 @@ namespace pl::lib::libstd::time {
+                 auto time = time_t(params[0].toUnsigned());
+ 
+                 try {
+-                    auto localTime = fmt::localtime(time);
++                    auto localTime = std::localtime(&time);
++                    if (localTime == nullptr) return u128(0);
+ 
+-                    return { packTMValue(localTime) };
++                    return { packTMValue(*localTime) };
+                 } catch (const fmt::format_error&) {
+                     return u128(0);
+                 }
+@@ -70,9 +71,10 @@ namespace pl::lib::libstd::time {
+                 auto time = time_t(params[0].toUnsigned());
+ 
+                 try {
+-                    auto gmTime = fmt::gmtime(time);
++                    auto gmTime = std::gmtime(&time);
++                    if (gmTime == nullptr) return u128(0);
+ 
+-                    return { packTMValue(gmTime) };
++                    return { packTMValue(*gmTime) };
+                 } catch (const fmt::format_error&) {
+                     return u128(0);
+                 }
+--- a/lib/libimhex/source/helpers/logger.cpp
++++ b/lib/libimhex/source/helpers/logger.cpp
+@@ -83,7 +83,8 @@ namespace hex::log {
+ 
+             for (const auto &path : paths::Logs.all()) {
+                 wolv::io::fs::createDirectories(path);
+-                s_loggerFile = wolv::io::File(path / 
hex::format("{0:%Y%m%d_%H%M%S}.log", 
fmt::localtime(std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()))),
 wolv::io::File::Mode::Create);
++                time_t time = 
std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
++                s_loggerFile = wolv::io::File(path / 
hex::format("{0:%Y%m%d_%H%M%S}.log", *std::localtime(&time)), 
wolv::io::File::Mode::Create);
+                 s_loggerFile.disableBuffering();
+ 
+                 if (s_loggerFile.isValid()) {
+@@ -120,7 +121,8 @@ namespace hex::log {
+ 
+ 
+         void printPrefix(FILE *dest, const fmt::text_style &ts, const 
std::string &level, const char *projectName) {
+-            const auto now = 
fmt::localtime(std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()));
++            const auto time = 
std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
++            const auto now = *std::localtime(&time);
+ 
+             fmt::print(dest, "[{0:%H:%M:%S}] ", now);
+ 
+--- a/main/gui/source/init/splash_window.cpp
++++ b/main/gui/source/init/splash_window.cpp
+@@ -111,7 +111,7 @@ namespace hex::init {
+                 const auto now = std::chrono::system_clock::now();
+                 const auto time = std::chrono::system_clock::to_time_t(now);
+ 
+-                return fmt::localtime(time);
++                return *std::localtime(&time);
+             }();
+ 
+             for (const auto &colorConfig : highlightConfig) {
+--- a/plugins/builtin/source/content/data_inspector.cpp
++++ b/plugins/builtin/source/content/data_inspector.cpp
+@@ -621,11 +621,16 @@ namespace hex::plugin::builtin {
+         ContentRegistry::DataInspector::add("hex.builtin.inspector.time32", 
sizeof(u32), [](auto buffer, auto endian, auto style) {
+             std::ignore = style;
+ 
+-            auto endianAdjustedTime = 
hex::changeEndianness(*reinterpret_cast<u32 *>(buffer.data()), endian);
++            time_t endianAdjustedTime = 
hex::changeEndianness(*reinterpret_cast<u32 *>(buffer.data()), endian);
+ 
+             std::string value;
+             try {
+-                value = hex::format("{0:%a, %d.%m.%Y %H:%M:%S}", 
fmt::localtime(endianAdjustedTime));
++                auto time = std::localtime(&endianAdjustedTime);
++                if (time == nullptr) {
++                    value = "Invalid";
++                } else {
++                    value = hex::format("{0:%a, %d.%m.%Y %H:%M:%S}", *time);
++                }
+             } catch (fmt::format_error &) {
+                 value = "Invalid";
+             }
+@@ -636,11 +641,16 @@ namespace hex::plugin::builtin {
+         ContentRegistry::DataInspector::add("hex.builtin.inspector.time64", 
sizeof(u64), [](auto buffer, auto endian, auto style) {
+             std::ignore = style;
+ 
+-            auto endianAdjustedTime = 
hex::changeEndianness(*reinterpret_cast<u64 *>(buffer.data()), endian);
++            time_t endianAdjustedTime = 
hex::changeEndianness(*reinterpret_cast<u64 *>(buffer.data()), endian);
+ 
+             std::string value;
+             try {
+-                value = hex::format("{0:%a, %d.%m.%Y %H:%M:%S}", 
fmt::localtime(endianAdjustedTime));
++                auto time = std::localtime(&endianAdjustedTime);
++                if (time == nullptr) {
++                    value = "Invalid";
++                } else {
++                    value = hex::format("{0:%a, %d.%m.%Y %H:%M:%S}", *time);
++                }
+             } catch (fmt::format_error &) {
+                 value = "Invalid";
+             }
+@@ -653,11 +663,16 @@ namespace hex::plugin::builtin {
+         ContentRegistry::DataInspector::add("hex.builtin.inspector.time", 
sizeof(time_t), [](auto buffer, auto endian, auto style) {
+             std::ignore = style;
+ 
+-            auto endianAdjustedTime = 
hex::changeEndianness(*reinterpret_cast<time_t *>(buffer.data()), endian);
++            time_t endianAdjustedTime = 
hex::changeEndianness(*reinterpret_cast<time_t *>(buffer.data()), endian);
+ 
+             std::string value;
+             try {
+-                value = hex::format("{0:%a, %d.%m.%Y %H:%M:%S}", 
fmt::localtime(endianAdjustedTime));
++                auto time = std::localtime(&endianAdjustedTime);
++                if (time == nullptr) {
++                    value = "Invalid";
++                } else {
++                    value = hex::format("{0:%a, %d.%m.%Y %H:%M:%S}", *time);
++                }
+             } catch (fmt::format_error &e) {
+                 value = "Invalid";
+             }
+--- a/plugins/builtin/source/content/providers/file_provider.cpp
++++ b/plugins/builtin/source/content/providers/file_provider.cpp
+@@ -135,14 +135,14 @@ namespace hex::plugin::builtin {
+         if (m_fileStats.has_value()) {
+             std::string creationTime, accessTime, modificationTime;
+ 
+-            try { creationTime = hex::format("{:%Y-%m-%d %H:%M:%S}", 
fmt::localtime(m_fileStats->st_ctime)); }
+-            catch (const std::exception&) { creationTime = "???"; }
++            try { creationTime = hex::format("{:%Y-%m-%d %H:%M:%S}", 
*std::localtime(&m_fileStats->st_ctime)); }
++            catch (const fmt::format_error&) { creationTime = "???"; }
+ 
+-            try { accessTime = hex::format("{:%Y-%m-%d %H:%M:%S}", 
fmt::localtime(m_fileStats->st_atime)); }
+-            catch (const std::exception&) { accessTime = "???"; }
++            try { accessTime = hex::format("{:%Y-%m-%d %H:%M:%S}", 
*std::localtime(&m_fileStats->st_atime)); }
++            catch (const fmt::format_error&) { accessTime = "???"; }
+ 
+-            try { modificationTime = hex::format("{:%Y-%m-%d %H:%M:%S}", 
fmt::localtime(m_fileStats->st_mtime)); }
+-            catch (const std::exception&) { modificationTime = "???"; }
++            try { modificationTime = hex::format("{:%Y-%m-%d %H:%M:%S}", 
*std::localtime(&m_fileStats->st_mtime)); }
++            catch (const fmt::format_error&) { modificationTime = "???"; }
+ 
+             result.emplace_back("hex.builtin.provider.file.creation"_lang,    
  creationTime);
+             result.emplace_back("hex.builtin.provider.file.access"_lang,      
  accessTime);

diff --git a/app-editors/imhex/imhex-1.37.4-r3.ebuild 
b/app-editors/imhex/imhex-1.37.4-r3.ebuild
index b878523c6..aa999e3b1 100644
--- a/app-editors/imhex/imhex-1.37.4-r3.ebuild
+++ b/app-editors/imhex/imhex-1.37.4-r3.ebuild
@@ -31,6 +31,8 @@ PATCHES=(
        "${FILESDIR}/cmake_mbedtls.patch"
        # Set boost components to regex
        "${FILESDIR}/cmake_boost_regex.patch"
+       # Temporary (until the next update) patch
+       "${FILESDIR}/${P}-update-libfmt.patch"
 )
 
 DOCS+=( LICENSE PLUGINS.md )
@@ -48,7 +50,6 @@ DEPEND="
        >=dev-libs/capstone-5.0.3:=
        >=dev-libs/nativefiledialog-extended-1.2.1[desktop-portal?]
        >=dev-libs/libfmt-11.0.2:=
-       <dev-libs/libfmt-11.2.0:=
        media-libs/fontconfig
        media-libs/freetype
        >=media-libs/glfw-3.4[X]

Reply via email to