<pre style='margin:0'>
Dan Villiom Podlaski Christiansen (danchr) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/349ff8e58fd8bae840472d2d056cdd5dac84289f">https://github.com/macports/macports-ports/commit/349ff8e58fd8bae840472d2d056cdd5dac84289f</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 349ff8e58fd8bae840472d2d056cdd5dac84289f
</span>Author: Dan Villiom Podlaski Christiansen <danchr@macports.org>
AuthorDate: Sat Jan 15 10:42:12 2022 +0100

<span style='display:block; white-space:pre;color:#404040;'>    libfmt: apply backported patch; use ninja
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This fixes an issue that prevents building the watchman port, see:
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    https://github.com/macports/macports-ports/pull/13645
</span>---
 devel/libfmt/Portfile                              |  7 ++-
 ...x-formatting-implicitly-convertible-types.patch | 72 ++++++++++++++++++++++
 2 files changed, 78 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/libfmt/Portfile b/devel/libfmt/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index a1a08510a7b..8234c88a734 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/libfmt/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/libfmt/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,7 +7,7 @@ PortGroup           compiler_blacklist_versions 1.0
</span> PortGroup           conflicts_build 1.0
 
 github.setup        fmtlib fmt 8.1.1
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            1
</span> checksums           rmd160  cd42fd80a3901e1e550e63a553345c8707ceda45 \
                     sha256  3d794d3cf67633b34b2771eb9f073bde87e846e0d395d254df7b211ef1ec7346 \
                     size    826254
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -26,8 +26,13 @@ long_description    fmt (formerly cppformat) is an open-source formatting librar
</span> 
 conflicts_build     gtest
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# see https://github.com/macports/macports-ports/pull/13645
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          fix-formatting-implicitly-convertible-types.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.pre_args      -p1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # tests, at least, fail if set to "MacPorts"
 cmake.build_type    Release
<span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.generator     Ninja
</span> 
 compiler.cxx_standard   2011
 # avoid
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/libfmt/files/fix-formatting-implicitly-convertible-types.patch b/devel/libfmt/files/fix-formatting-implicitly-convertible-types.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..1d45d057ce6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/libfmt/files/fix-formatting-implicitly-convertible-types.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,72 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 8f8a1a02d5c5cb967d240feee3ffac00d66f22a2 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Victor Zverovich <viz@fb.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 14 Jan 2022 13:08:14 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Fix handling of formattable types implicitly convertible to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pointers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ include/fmt/core.h |  5 +++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ test/core-test.cc  | 21 ++++++++++++++++++++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 23 insertions(+), 3 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/fmt/core.h b/include/fmt/core.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f2d21e5c5a..12571ce0da 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/include/fmt/core.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/include/fmt/core.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1398,10 +1398,11 @@ template <typename Context> struct arg_mapper {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   template <
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       typename T,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       FMT_ENABLE_IF(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          std::is_member_pointer<T>::value ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          std::is_pointer<T>::value || std::is_member_pointer<T>::value ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           std::is_function<typename std::remove_pointer<T>::type>::value ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           (std::is_convertible<const T&, const void*>::value &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-           !std::is_convertible<const T&, const char_type*>::value))>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           !std::is_convertible<const T&, const char_type*>::value &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           !has_formatter<T, Context>::value))>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   FMT_CONSTEXPR auto map(const T&) -> unformattable_pointer {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/test/core-test.cc b/test/core-test.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b2f2097ea1..c9eea8ffd8 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/test/core-test.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/test/core-test.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -737,6 +737,24 @@ struct convertible_to_pointer {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   operator const int*() const { return nullptr; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct convertible_to_pointer_formattable {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  operator const int*() const { return nullptr; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++FMT_BEGIN_NAMESPACE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <> struct formatter<convertible_to_pointer_formattable> {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return ctx.begin();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  auto format(convertible_to_pointer_formattable, format_context& ctx) const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      -> decltype(ctx.out()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    auto test = string_view("test");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return std::copy_n(test.data(), test.size(), ctx.out());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++FMT_END_NAMESPACE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ enum class test_scoped_enum {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST(core_test, is_formattable) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -770,11 +788,12 @@ TEST(core_test, is_formattable) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   static_assert(!fmt::is_formattable<convertible_to_pointer>::value, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const auto f = convertible_to_pointer_formattable();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(fmt::format("{}", f), "test");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   static_assert(!fmt::is_formattable<void (*)()>::value, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   struct s;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   static_assert(!fmt::is_formattable<int(s::*)>::value, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   static_assert(!fmt::is_formattable<int (s::*)()>::value, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   static_assert(!fmt::is_formattable<test_scoped_enum>::value, "");
</span></pre><pre style='margin:0'>

</pre>