summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Roman <droman@ifae.es>2023-06-27 00:25:38 +0200
committerSam James <sam@gentoo.org>2023-07-15 07:02:57 +0100
commit682906906c17c3127b5f9dfd984bbd4ea91902bc (patch)
tree8b7e87c30617135f3071bf2f45e6a01a16f3e201 /dev-libs/spdlog/files
parentsys-block/thin-provisioning-tools: Do not use gcc directly (diff)
downloadgentoo-682906906c17c3127b5f9dfd984bbd4ea91902bc.tar.gz
gentoo-682906906c17c3127b5f9dfd984bbd4ea91902bc.tar.bz2
gentoo-682906906c17c3127b5f9dfd984bbd4ea91902bc.zip
dev-libs/spdlog: fix fmt-10.x compatibility
Closes: https://bugs.gentoo.org/906069 Signed-off-by: David Roman <davidroman96@gmail.com> Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'dev-libs/spdlog/files')
-rw-r--r--dev-libs/spdlog/files/spdlog-fmt-10.patch121
1 files changed, 121 insertions, 0 deletions
diff --git a/dev-libs/spdlog/files/spdlog-fmt-10.patch b/dev-libs/spdlog/files/spdlog-fmt-10.patch
new file mode 100644
index 000000000000..5ee44c41ea6a
--- /dev/null
+++ b/dev-libs/spdlog/files/spdlog-fmt-10.patch
@@ -0,0 +1,121 @@
+diff --git a/include/spdlog/sinks/daily_file_sink.h b/include/spdlog/sinks/daily_file_sink.h
+index f6f1bb1d..90af9676 100644
+--- a/include/spdlog/sinks/daily_file_sink.h
++++ b/include/spdlog/sinks/daily_file_sink.h
+@@ -13,6 +13,9 @@
+ #include <spdlog/details/circular_q.h>
+ #include <spdlog/details/synchronous_factory.h>
+
++#include <iostream>
++#include <sstream>
++#include <iomanip>
+ #include <chrono>
+ #include <cstdio>
+ #include <ctime>
+@@ -46,46 +49,15 @@ struct daily_filename_calculator
+ */
+ struct daily_filename_format_calculator
+ {
+- static filename_t calc_filename(const filename_t &filename, const tm &now_tm)
++ static filename_t calc_filename(const filename_t &file_path, const tm &now_tm)
+ {
+-#ifdef SPDLOG_USE_STD_FORMAT
+- // adapted from fmtlib: https://github.com/fmtlib/fmt/blob/8.0.1/include/fmt/chrono.h#L522-L546
+-
+- filename_t tm_format;
+- tm_format.append(filename);
+- // By appending an extra space we can distinguish an empty result that
+- // indicates insufficient buffer size from a guaranteed non-empty result
+- // https://github.com/fmtlib/fmt/issues/2238
+- tm_format.push_back(' ');
+-
+- const size_t MIN_SIZE = 10;
+- filename_t buf;
+- buf.resize(MIN_SIZE);
+- for (;;)
+- {
+- size_t count = strftime(buf.data(), buf.size(), tm_format.c_str(), &now_tm);
+- if (count != 0)
+- {
+- // Remove the extra space.
+- buf.resize(count - 1);
+- break;
+- }
+- buf.resize(buf.size() * 2);
+- }
+-
+- return buf;
++#if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES)
++ std::wstringstream stream;
+ #else
+- // generate fmt datetime format string, e.g. {:%Y-%m-%d}.
+- filename_t fmt_filename = fmt::format(SPDLOG_FMT_STRING(SPDLOG_FILENAME_T("{{:{}}}")), filename);
+-
+- // MSVC doesn't allow fmt::runtime(..) with wchar, with fmtlib versions < 9.1.x
+-# if defined(_MSC_VER) && defined(SPDLOG_WCHAR_FILENAMES) && FMT_VERSION < 90101
+- return fmt::format(fmt_filename, now_tm);
+-# else
+- return fmt::format(SPDLOG_FMT_RUNTIME(fmt_filename), now_tm);
+-# endif
+-
++ std::stringstream stream;
+ #endif
++ stream << std::put_time(&now_tm, file_path.c_str());
++ return stream.str();
+ }
+
+ private:
+diff --git a/include/spdlog/logger.h b/include/spdlog/logger.h
+index 71544e84..1d802f32 100644
+--- a/include/spdlog/logger.h
++++ b/include/spdlog/logger.h
+@@ -369,9 +369,9 @@ protected:
+ {
+ memory_buf_t buf;
+ #ifdef SPDLOG_USE_STD_FORMAT
+- fmt_lib::vformat_to(std::back_inserter(buf), fmt, fmt_lib::make_format_args(std::forward<Args>(args)...));
++ fmt_lib::vformat_to(std::back_inserter(buf), fmt, fmt_lib::make_format_args(args...));
+ #else
+- fmt::vformat_to(fmt::appender(buf), fmt, fmt::make_format_args(std::forward<Args>(args)...));
++ fmt::vformat_to(fmt::appender(buf), fmt, fmt::make_format_args(args...));
+ #endif
+
+ details::log_msg log_msg(loc, name_, lvl, string_view_t(buf.data(), buf.size()));
+@@ -395,10 +395,9 @@ protected:
+ // format to wmemory_buffer and convert to utf8
+ wmemory_buf_t wbuf;
+ # ifdef SPDLOG_USE_STD_FORMAT
+- fmt_lib::vformat_to(
+- std::back_inserter(wbuf), fmt, fmt_lib::make_format_args<fmt_lib::wformat_context>(std::forward<Args>(args)...));
++ fmt_lib::vformat_to(std::back_inserter(wbuf), fmt, fmt_lib::make_format_args<fmt_lib::wformat_context>(args...));
+ # else
+- fmt::vformat_to(std::back_inserter(wbuf), fmt, fmt::make_format_args<fmt::wformat_context>(std::forward<Args>(args)...));
++ fmt::vformat_to(std::back_inserter(wbuf), fmt, fmt::make_format_args<fmt::wformat_context>(args...));
+ # endif
+
+ memory_buf_t buf;
+diff --git a/include/spdlog/common.h b/include/spdlog/common.h
+index e69201a8..5f671c5c 100644
+--- a/include/spdlog/common.h
++++ b/include/spdlog/common.h
+@@ -173,12 +173,19 @@ using format_string_t = fmt::format_string<Args...>;
+ template<class T>
+ using remove_cvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
+
++template <typename Char>
++#if FMT_VERSION >= 90101
++using fmt_runtime_string = fmt::runtime_format_string<Char>;
++#else
++using fmt_runtime_string = fmt::basic_runtime<Char>;
++#endif
++
+ // clang doesn't like SFINAE disabled constructor in std::is_convertible<> so have to repeat the condition from basic_format_string here,
+ // in addition, fmt::basic_runtime<Char> is only convertible to basic_format_string<Char> but not basic_string_view<Char>
+ template<class T, class Char = char>
+ struct is_convertible_to_basic_format_string
+ : std::integral_constant<bool,
+- std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt::basic_runtime<Char>>::value>
++ std::is_convertible<T, fmt::basic_string_view<Char>>::value || std::is_same<remove_cvref_t<T>, fmt_runtime_string<Char>>::value>
+ {};
+
+ # if defined(SPDLOG_WCHAR_FILENAMES) || defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT)