<pre style='margin:0'>
Clemens Lang (neverpanic) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/e864b2340be9ef003d8ff4aef92e7151d06287dd">https://github.com/macports/macports-ports/commit/e864b2340be9ef003d8ff4aef92e7151d06287dd</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new e864b23  glibmm: Fix character set conversion with libc++
</span>e864b23 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit e864b2340be9ef003d8ff4aef92e7151d06287dd
</span>Author: Clemens Lang <cal@macports.org>
AuthorDate: Tue Apr 17 21:12:54 2018 +0200

<span style='display:block; white-space:pre;color:#404040;'>    glibmm: Fix character set conversion with libc++
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    glibmm contains code that attempts to convert between std::wstring and
</span><span style='display:block; white-space:pre;color:#404040;'>    glibmm's Glib::ustring string class, which stores characters in UTF-8.
</span><span style='display:block; white-space:pre;color:#404040;'>    This conversion code was using a fallback solution that eventually calls
</span><span style='display:block; white-space:pre;color:#404040;'>    iconv to convert from the "WCHAR_T" character set to UTF-8.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    On macOS, iconv --list does not show WCHAR_T as supported character set
</span><span style='display:block; white-space:pre;color:#404040;'>    and comments in the libiconv code handling WCHAR_T suggest it was
</span><span style='display:block; white-space:pre;color:#404040;'>    written for glibc, which is not used on macOS. Consequently, the
</span><span style='display:block; white-space:pre;color:#404040;'>    conversion failed, which caused Glib::ustring to throw an exception.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This exception was not caught by inkscape and caused a crash when
</span><span style='display:block; white-space:pre;color:#404040;'>    starting inkscape, rendering it useless.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fortunately, glibmm already contained code to deal with libc++'s
</span><span style='display:block; white-space:pre;color:#404040;'>    std::wstrings, but it was guaded by a check for the __STDC_ISO_10646__
</span><span style='display:block; white-space:pre;color:#404040;'>    prepocessor define. Allowing _LIBCPP_VERSION in addition to
</span><span style='display:block; white-space:pre;color:#404040;'>    __STDC_ISO_10646__ makes code compiled against libc++ use this code path
</span><span style='display:block; white-space:pre;color:#404040;'>    and solves the issue.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/56214
</span>---
 devel/glibmm/Portfile                              |  3 ++
 ...g-Fix-wchar-conversion-on-macOS-with-libc.patch | 56 ++++++++++++++++++++++
 2 files changed, 59 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/glibmm/Portfile b/devel/glibmm/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index cf47a92..d23a381 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/glibmm/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/glibmm/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -8,6 +8,7 @@ PortGroup           cxx11 1.1
</span> 
 name                glibmm
 version             2.56.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            1
</span> set branch          [join [lrange [split ${version} .] 0 1] .]
 description         C++ interface to glib
 long_description    ${description}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,6 +31,8 @@ depends_build       port:pkgconfig \
</span> depends_lib         path:lib/pkgconfig/glib-2.0.pc:glib2 \
                     port:libsigcxx2
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          0001-ustring-Fix-wchar-conversion-on-macOS-with-libc.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> configure.perl      /usr/bin/perl
 
 # autoreconf because the glibtool in 2.44.0 does not honor -stdlib=...
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/glibmm/files/0001-ustring-Fix-wchar-conversion-on-macOS-with-libc.patch b/devel/glibmm/files/0001-ustring-Fix-wchar-conversion-on-macOS-with-libc.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..50b70b6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/glibmm/files/0001-ustring-Fix-wchar-conversion-on-macOS-with-libc.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,56 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 5f5c80bfdd66ec55f9ae0479ed89e5d58c72067a Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Clemens Lang <cal@macports.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 16 Apr 2018 23:01:12 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] ustring: Fix wchar conversion on macOS with libc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+libc++ internally represents std::wstrings in UCS-4 just like libstdc++,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+but does not set the __STDC_ISO_10646__ define. This caused the code to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fall back to calling iconv with the WCHAR_T source character set, which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+does not correctly convert these strings and leads to errors, for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+example in inkscape on startup.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+See https://trac.macports.org/ticket/56214 for an instance of such
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+a problem.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Re-use the UCS4 to UTF8 conversion code when libc++ is detected, which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+solves this.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=795338]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ glib/glibmm/ustring.cc | 6 +++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 3 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/glib/glibmm/ustring.cc b/glib/glibmm/ustring.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 976289f5..901deac4 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./glib/glibmm/ustring.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./glib/glibmm/ustring.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1371,7 +1371,7 @@ ustring::FormatStream::to_string() const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef GLIBMM_HAVE_WIDE_STREAM
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const std::wstring str = stream_.str();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(__STDC_ISO_10646__) && SIZEOF_WCHAR_T == 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if (defined(__STDC_ISO_10646__) || defined(_LIBCPP_VERSION)) && SIZEOF_WCHAR_T == 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // Avoid going through iconv if wchar_t always contains UCS-4.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   glong n_bytes = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const auto buf = make_unique_ptr_gfree(g_ucs4_to_utf8(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1459,7 +1459,7 @@ operator>>(std::wistream& is, ustring& utf8_string)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   std::wstring wstr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   is >> wstr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(__STDC_ISO_10646__) && SIZEOF_WCHAR_T == 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if (defined(__STDC_ISO_10646__) || defined(_LIBCPP_VERSION)) && SIZEOF_WCHAR_T == 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // Avoid going through iconv if wchar_t always contains UCS-4.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   glong n_bytes = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const auto buf = make_unique_ptr_gfree(g_ucs4_to_utf8(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1490,7 +1490,7 @@ operator<<(std::wostream& os, const ustring& utf8_string)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   GError* error = nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(__STDC_ISO_10646__) && SIZEOF_WCHAR_T == 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if (defined(__STDC_ISO_10646__) || defined(_LIBCPP_VERSION)) && SIZEOF_WCHAR_T == 4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // Avoid going through iconv if wchar_t always contains UCS-4.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const auto buf = make_unique_ptr_gfree(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     g_utf8_to_ucs4(utf8_string.raw().data(), utf8_string.raw().size(), nullptr, nullptr, &error));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.17.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span></pre><pre style='margin:0'>

</pre>