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=(
