From 7f3868727bdac8c3d7d10b41e8e3aff086af87a6 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Mon, 28 Nov 2022 18:51:37 +0100
Subject: [PATCH] Log, client/Response, io/BufferedOutputStream: drop support
 for libfmt < 7

Remove some compatibility code.
---
 NEWS                            |  1 +
 meson.build                     |  2 +-
 src/Log.hxx                     |  8 ++------
 src/client/Response.hxx         | 14 +++-----------
 src/io/BufferedOutputStream.hxx |  8 ++------
 5 files changed, 9 insertions(+), 24 deletions(-)

diff --git a/NEWS b/NEWS
index 01f5fecc1..d6d14361e 100644
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,7 @@ ver 0.24 (not yet released)
   - GCC 10 or clang 11 (or newer) recommended
 * static partition configuration
 * remove Haiku support
+* require libfmt 7 or later
 
 ver 0.23.11 (2022/11/28)
 * database
diff --git a/meson.build b/meson.build
index 8d59d9c96..acde4acbd 100644
--- a/meson.build
+++ b/meson.build
@@ -248,7 +248,7 @@ if boost_dep.version() == '1.67'
   warning('Your Boost version 1.67 is known to be buggy, and the MPD build will fail. Please upgrade to Boost 1.68 or later.')
 endif
 
-fmt_dep = dependency('fmt', fallback: ['fmt', 'fmt_dep'])
+fmt_dep = dependency('fmt', version: '>= 7', fallback: ['fmt', 'fmt_dep'])
 
 if compiler.get_id() == 'clang' and compiler.version().version_compare('<15')
   fmt_dep = declare_dependency(
diff --git a/src/Log.hxx b/src/Log.hxx
index 5cf0eb2ec..5bc8fe2bd 100644
--- a/src/Log.hxx
+++ b/src/Log.hxx
@@ -23,7 +23,7 @@
 #include "LogLevel.hxx"
 
 #include <fmt/core.h>
-#if FMT_VERSION < 70000 || FMT_VERSION >= 80000
+#if FMT_VERSION >= 80000
 #include <fmt/format.h>
 #endif
 
@@ -48,14 +48,10 @@ LogFmt(LogLevel level, const Domain &domain,
 #if FMT_VERSION >= 90000
 	return LogVFmt(level, domain, format_str,
 		       fmt::make_format_args(args...));
-#elif FMT_VERSION >= 70000
+#else
 	return LogVFmt(level, domain, fmt::to_string_view(format_str),
 		       fmt::make_args_checked<Args...>(format_str,
 						       args...));
-#else
-	/* expensive fallback for older libfmt versions */
-	const auto result = fmt::format(format_str, args...);
-	return Log(level, domain, result);
 #endif
 }
 
diff --git a/src/client/Response.hxx b/src/client/Response.hxx
index cb1b49000..7b4aa68cc 100644
--- a/src/client/Response.hxx
+++ b/src/client/Response.hxx
@@ -23,7 +23,7 @@
 #include "protocol/Ack.hxx"
 
 #include <fmt/core.h>
-#if FMT_VERSION < 70000 || FMT_VERSION >= 80000
+#if FMT_VERSION >= 80000
 #include <fmt/format.h>
 #endif
 
@@ -85,14 +85,10 @@ public:
 #if FMT_VERSION >= 90000
 		return VFmt(format_str,
 			    fmt::make_format_args(args...));
-#elif FMT_VERSION >= 70000
+#else
 		return VFmt(fmt::to_string_view(format_str),
 			    fmt::make_args_checked<Args...>(format_str,
 							    args...));
-#else
-		/* expensive fallback for older libfmt versions */
-		const auto result = fmt::format(format_str, args...);
-		return Write(result.data(), result.size());
 #endif
 	}
 
@@ -115,14 +111,10 @@ public:
 #if FMT_VERSION >= 90000
 		return VFmtError(code, format_str,
 				 fmt::make_format_args(args...));
-#elif FMT_VERSION >= 70000
+#else
 		return VFmtError(code, fmt::to_string_view(format_str),
 				 fmt::make_args_checked<Args...>(format_str,
 								 args...));
-#else
-		/* expensive fallback for older libfmt versions */
-		const auto result = fmt::format(format_str, args...);
-		return Error(code, result.c_str());
 #endif
 	}
 };
diff --git a/src/io/BufferedOutputStream.hxx b/src/io/BufferedOutputStream.hxx
index cb3994584..aada3740e 100644
--- a/src/io/BufferedOutputStream.hxx
+++ b/src/io/BufferedOutputStream.hxx
@@ -34,7 +34,7 @@
 #include "util/DynamicFifoBuffer.hxx"
 
 #include <fmt/core.h>
-#if FMT_VERSION < 70000 || FMT_VERSION >= 80000
+#if FMT_VERSION >= 80000
 #include <fmt/format.h>
 #endif
 
@@ -104,14 +104,10 @@ public:
 #if FMT_VERSION >= 90000
 		VFmt(format_str,
 		     fmt::make_format_args(args...));
-#elif FMT_VERSION >= 70000
+#else
 		VFmt(fmt::to_string_view(format_str),
 		     fmt::make_args_checked<Args...>(format_str,
 						     args...));
-#else
-		/* expensive fallback for older libfmt versions */
-		const auto result = fmt::format(format_str, args...);
-		Write(result.data(), result.size());
 #endif
 	}