lib/fmt: drop use of FMT_STRING
When compiling with libfmt-11.1.0 and newer the following compile errors occur: In file included from ../src/decoder/DecoderPrint.cxx:23: ../src/client/Response.hxx: In instantiation of 'bool Response::Fmt(const S&, Args&& ...) [with S = decoder_plugin_print(Response&, const DecoderPlugin&)::<lambda()>::FMT_COMPILE_STRING; Args = {const char* const&}]': ../src/decoder/DecoderPrint.cxx:38:7: required from here 38 | r.Fmt(FMT_STRING("plugin: {}\n"), plugin.name); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/client/Response.hxx:86:28: error: cannot convert 'const decoder_plugin_print(Response&, const DecoderPlugin&)::<lambda()>::FMT_COMPILE_STRING' to 'fmt::v11::string_view' {aka 'fmt::v11::basic_string_view<char>'} 86 | return VFmt(format_str, | ~~~~^~~~~~~~~~~~ 87 | fmt::make_format_args(args...)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/client/Response.hxx:81:36: note: initializing argument 1 of 'bool Response::VFmt(fmt::v11::string_view, fmt::v11::format_args)' 81 | bool VFmt(fmt::string_view format_str, fmt::format_args args) noexcept; | ~~~~~~~~~~~~~~~~~^~~~~~~~~~ ../src/client/Response.hxx: In instantiation of 'bool Response::Fmt(const S&, Args&& ...) [with S = decoder_plugin_print(Response&, const DecoderPlugin&)::<lambda()>::FMT_COMPILE_STRING; Args = {const char* const&}]': The error is due to the use of FMT_STRING. The libfmt team shared the following: The correct way of using FMT_STRING is to wrap a format string when passing to a function with compile-time checks (i.e. that takes format_string) as documented in https://fmt.dev/11.1/api/#legacy-compile-time-checks. Noting that FMT_STRING is a legacy API and has been superseded by consteval-based API starting from version 8: https://github.com/fmtlib/fmt/releases/tag/8.0.0. It looks like MPD is trying to emulate {fmt}'s old way of implementing compile-time checks which was never properly documented because it was basically a hack. So the correct fix is to switch to format_string and, possibly, remove usage of FMT_STRING. The old way of doing compile-time checks (fmt::make_args_checked) was documented in https://fmt.dev/7.1/api.html#argument-lists but it looks like MPD is not using that API so the problematic uses of FMT_STRING have no effect and can just be removed. The FMT_STRING has been removed in this change based on the fmt-7.1 API and now MPD is successfully compile against the current libfmt-11.1.0 which highlighted the issue that had been present in the codebase as it is now triggering the error, is legacy and was not using the API for which FMT_STRING was aligned with.
This commit is contained in:
@@ -85,12 +85,12 @@ handle_listfiles_local(Response &r, Path path_fs)
|
||||
continue;
|
||||
|
||||
if (fi.IsRegular())
|
||||
r.Fmt(FMT_STRING("file: {}\n"
|
||||
"size: {}\n"),
|
||||
r.Fmt("file: {}\n"
|
||||
"size: {}\n",
|
||||
name_utf8,
|
||||
fi.GetSize());
|
||||
else if (fi.IsDirectory())
|
||||
r.Fmt(FMT_STRING("directory: {}\n"), name_utf8);
|
||||
r.Fmt("directory: {}\n", name_utf8);
|
||||
else
|
||||
continue;
|
||||
|
||||
@@ -129,7 +129,7 @@ public:
|
||||
void OnPair(StringView _key, StringView _value) noexcept override {
|
||||
const std::string_view key{_key}, value{_value};
|
||||
if (IsValidName(key) && IsValidValue(value))
|
||||
response.Fmt(FMT_STRING("{}: {}\n"), key, value);
|
||||
response.Fmt("{}: {}\n", key, value);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -218,7 +218,7 @@ read_stream_art(Response &r, const std::string_view art_directory,
|
||||
read_size = is->Read(lock, buffer.get(), buffer_size);
|
||||
}
|
||||
|
||||
r.Fmt(FMT_STRING("size: {}\n"), art_file_size);
|
||||
r.Fmt("size: {}\n", art_file_size);
|
||||
|
||||
r.WriteBinary({buffer.get(), read_size});
|
||||
|
||||
@@ -348,10 +348,10 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
response.Fmt(FMT_STRING("size: {}\n"), buffer.size);
|
||||
response.Fmt("size: {}\n", buffer.size);
|
||||
|
||||
if (mime_type != nullptr)
|
||||
response.Fmt(FMT_STRING("type: {}\n"), mime_type);
|
||||
response.Fmt("type: {}\n", mime_type);
|
||||
|
||||
buffer.size -= offset;
|
||||
|
||||
|
Reference in New Issue
Block a user