<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>