<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/ec448312e241563c5df6413edf55f23f13b9035d">https://github.com/macports/macports-ports/commit/ec448312e241563c5df6413edf55f23f13b9035d</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit ec448312e241563c5df6413edf55f23f13b9035d
</span>Author: Christopher Nielsen <mascguy@github.com>
AuthorDate: Thu Aug 11 11:05:33 2022 -0400

<span style='display:block; white-space:pre;color:#404040;'>    libfmt8: new port, segregated from libfmt
</span><span style='display:block; white-space:pre;color:#404040;'>    See: https://trac.macports.org/ticket/65619
</span>---
 devel/libfmt8/Portfile                             | 79 ++++++++++++++++++++++
 ...x-formatting-implicitly-convertible-types.patch | 72 ++++++++++++++++++++
 2 files changed, 151 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/libfmt8/Portfile b/devel/libfmt8/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..510654c1301
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/libfmt8/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,79 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem          1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           github 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           cmake  1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           compiler_blacklist_versions 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           conflicts_build 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        fmtlib fmt 8.1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name                libfmt8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160  cd42fd80a3901e1e550e63a553345c8707ceda45 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  3d794d3cf67633b34b2771eb9f073bde87e846e0d395d254df7b211ef1ec7346 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    826254
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+categories          devel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license             MIT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers         nomaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description         an open-source formatting library
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description    fmt (formerly cppformat) is an open-source formatting library. \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    It can be used as a safe alternative to printf or as a fast \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    alternative to C++ IOStreams.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+homepage            https://fmt.dev
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.tarball_from archive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+conflicts_build     gtest
</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;'>+# Path-Related Variables - START
</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;'>+# The "install name," meaning, the subdirectory name for this port.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Should correspond to the major version.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set port_install_name \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    libfmt8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Define all of our base paths up-front
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set port_install_include \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${prefix}/include/${port_install_name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set port_install_lib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${prefix}/lib/${port_install_name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Populate CMake options currently available
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.install_rpath \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${port_install_lib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_INSTALL_INCLUDEDIR=${port_install_include} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_INSTALL_LIBDIR=${port_install_lib} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_INSTALL_NAME_DIR=${port_install_lib}
</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;'>+# Path-Related Variables - END
</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;'>+# 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><span style='display:block; white-space:pre;background:#e0ffe0;'>+# tests, at least, fail if set to "MacPorts"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.build_type    Release
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.generator     Ninja
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.cxx_standard   2011
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# error: default initialization of an object of const type 'const Answer' without a user-provided default constructor
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# error would be valid except Answer is empty
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.blacklist-append {clang < 801}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -DBUILD_SHARED_LIBS=ON
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+variant tests description "Enable testing" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test.run            yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.pre_args-replace  -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/libfmt8/files/fix-formatting-implicitly-convertible-types.patch b/devel/libfmt8/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/libfmt8/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>