commit:     0420b5ee74a981a9ebb5b716b799417d459cf579
Author:     Violet Purcell <vimproved <AT> inventati <DOT> org>
AuthorDate: Sat Jul 26 15:31:24 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Aug  7 22:54:56 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0420b5ee

dev-libs/libfmt: backport build fix for libc++ 21

Signed-off-by: Violet Purcell <vimproved <AT> inventati.org>
Part-of: https://github.com/gentoo/gentoo/pull/43171
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/libfmt-11.2.0-libcxx-21-cstdlib.patch    | 37 ++++++++++++++++++++++
 ...ibfmt-11.2.0.ebuild => libfmt-11.2.0-r1.ebuild} |  5 +++
 2 files changed, 42 insertions(+)

diff --git a/dev-libs/libfmt/files/libfmt-11.2.0-libcxx-21-cstdlib.patch 
b/dev-libs/libfmt/files/libfmt-11.2.0-libcxx-21-cstdlib.patch
new file mode 100644
index 000000000000..77657900f9fc
--- /dev/null
+++ b/dev-libs/libfmt/files/libfmt-11.2.0-libcxx-21-cstdlib.patch
@@ -0,0 +1,37 @@
+From 
https://github.com/fmtlib/fmt/commit/f4345467fce7edbc6b36c3fa1cf197a67be617e2 
Mon Sep 17 00:00:00 2001
+From: Remy Jette <[email protected]>
+Date: Sat, 21 Jun 2025 07:28:14 -0700
+Subject: [PATCH] Fix compilation on clang-21 / libc++-21 (#4477)
+
+`<cstdlib>` was not being included, so malloc and free were only declared
+via transitive includes. Some includes changed in the latest libc++-21
+build which broke fmt.
+
+Also changed `malloc`/`free` to `std::malloc` and `std::free`, as
+putting those symbols in the global namespace is optional for the
+implementation when including `<cstdlib>`.
+--- a/include/fmt/format.h
++++ b/include/fmt/format.h
+@@ -44,6 +44,7 @@
+ #  include <cmath>    // std::signbit
+ #  include <cstddef>  // std::byte
+ #  include <cstdint>  // uint32_t
++#  include <cstdlib>  // std::malloc, std::free
+ #  include <cstring>  // std::memcpy
+ #  include <limits>   // std::numeric_limits
+ #  include <new>      // std::bad_alloc
+@@ -755,12 +756,12 @@ template <typename T> struct allocator : private 
std::decay<void> {
+ 
+   T* allocate(size_t n) {
+     FMT_ASSERT(n <= max_value<size_t>() / sizeof(T), "");
+-    T* p = static_cast<T*>(malloc(n * sizeof(T)));
++    T* p = static_cast<T*>(std::malloc(n * sizeof(T)));
+     if (!p) FMT_THROW(std::bad_alloc());
+     return p;
+   }
+ 
+-  void deallocate(T* p, size_t) { free(p); }
++  void deallocate(T* p, size_t) { std::free(p); }
+ };
+ 
+ }  // namespace detail

diff --git a/dev-libs/libfmt/libfmt-11.2.0.ebuild 
b/dev-libs/libfmt/libfmt-11.2.0-r1.ebuild
similarity index 84%
rename from dev-libs/libfmt/libfmt-11.2.0.ebuild
rename to dev-libs/libfmt/libfmt-11.2.0-r1.ebuild
index f69709c8bede..5da07f84310f 100644
--- a/dev-libs/libfmt/libfmt-11.2.0.ebuild
+++ b/dev-libs/libfmt/libfmt-11.2.0-r1.ebuild
@@ -22,6 +22,11 @@ SLOT="0/${PV}"
 IUSE="test"
 RESTRICT="!test? ( test )"
 
+PATCHES=(
+       # backport of 
https://github.com/fmtlib/fmt/commit/f4345467fce7edbc6b36c3fa1cf197a67be617e2
+       "${FILESDIR}/${P}-libcxx-21-cstdlib.patch"
+)
+
 multilib_src_configure() {
        append-lfs-flags
        local mycmakeargs=(

Reply via email to