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