commit:     7cf1051144eb896ce0743d5864aab39f5b5eeba8
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 21 10:57:18 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Apr 21 10:58:02 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7cf10511

dev-libs/gmime: backport several patches to 3.2.15

Looking into a test failure I have on one machine and noticed these.

Especially worth it as I don't think there'll be a new release soon:
https://github.com/jstedfast/gmime/issues/172#issuecomment-2778761044.

Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-libs/gmime/files/gmime-3.2.15-32-bit.patch  |  61 +++++++++++++
 dev-libs/gmime/files/gmime-3.2.15-ub-fix.patch  | 111 ++++++++++++++++++++++++
 dev-libs/gmime/files/gmime-3.2.15-warning.patch |  35 ++++++++
 dev-libs/gmime/gmime-3.2.15-r1.ebuild           |  76 ++++++++++++++++
 4 files changed, 283 insertions(+)

diff --git a/dev-libs/gmime/files/gmime-3.2.15-32-bit.patch 
b/dev-libs/gmime/files/gmime-3.2.15-32-bit.patch
new file mode 100644
index 000000000000..cf6d205bd3af
--- /dev/null
+++ b/dev-libs/gmime/files/gmime-3.2.15-32-bit.patch
@@ -0,0 +1,61 @@
+https://github.com/jstedfast/gmime/commit/2972da2f28e6c5cf51465cdaef6e169fe7710f8b
+
+From 2972da2f28e6c5cf51465cdaef6e169fe7710f8b Mon Sep 17 00:00:00 2001
+From: Biswapriyo Nath <[email protected]>
+Date: Sat, 6 Jul 2024 13:46:11 +0000
+Subject: [PATCH] Fix compiler error with 32 bit gcc 14 in Windows
+
+This fixes the following compiler error.
+
+../../gmime/gmime-gpgme-utils.c:69:9: error: initialization of
+'gpgme_ssize_t (*)(void *, void *, size_t)' {aka 'long int (*)(void *, void *, 
unsigned int)'}
+from incompatible pointer type
+'ssize_t (*)(void *, void *, size_t)' {aka 'int (*)(void *, void *, unsigned 
int)'}
+[-Wincompatible-pointer-types]
+   69 |         g_mime_gpgme_stream_read,
+      |         ^~~~~~~~~~~~~~~~~~~~~~~~
+---
+ gmime/gmime-gpgme-utils.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/gmime/gmime-gpgme-utils.c b/gmime/gmime-gpgme-utils.c
+index 2b87c22a..621d9db1 100644
+--- a/gmime/gmime-gpgme-utils.c
++++ b/gmime/gmime-gpgme-utils.c
+@@ -32,28 +32,28 @@
+ 
+ #define _(x) x
+ 
+-static ssize_t
++static gpgme_ssize_t
+ g_mime_gpgme_stream_read (void *stream, void *buffer, size_t size)
+ {
+       return g_mime_stream_read ((GMimeStream *) stream, (char *) buffer, 
size);
+ }
+ 
+-static ssize_t
++static gpgme_ssize_t
+ g_mime_gpgme_stream_write (void *stream, const void *buffer, size_t size)
+ {
+       return g_mime_stream_write ((GMimeStream *) stream, (const char *) 
buffer, size);
+ }
+ 
+-static off_t
+-g_mime_gpgme_stream_seek (void *stream, off_t offset, int whence)
++static gpgme_off_t
++g_mime_gpgme_stream_seek (void *stream, gpgme_off_t offset, int whence)
+ {
+       switch (whence) {
+       case SEEK_SET:
+-              return (off_t) g_mime_stream_seek ((GMimeStream *) stream, 
(gint64) offset, GMIME_STREAM_SEEK_SET);
++              return (gpgme_off_t) g_mime_stream_seek ((GMimeStream *) 
stream, (gint64) offset, GMIME_STREAM_SEEK_SET);
+       case SEEK_CUR:
+-              return (off_t) g_mime_stream_seek ((GMimeStream *) stream, 
(gint64) offset, GMIME_STREAM_SEEK_CUR);
++              return (gpgme_off_t) g_mime_stream_seek ((GMimeStream *) 
stream, (gint64) offset, GMIME_STREAM_SEEK_CUR);
+       case SEEK_END:
+-              return (off_t) g_mime_stream_seek ((GMimeStream *) stream, 
(gint64) offset, GMIME_STREAM_SEEK_END);
++              return (gpgme_off_t) g_mime_stream_seek ((GMimeStream *) 
stream, (gint64) offset, GMIME_STREAM_SEEK_END);
+       default:
+               return -1;
+       }
+

diff --git a/dev-libs/gmime/files/gmime-3.2.15-ub-fix.patch 
b/dev-libs/gmime/files/gmime-3.2.15-ub-fix.patch
new file mode 100644
index 000000000000..cb2029053428
--- /dev/null
+++ b/dev-libs/gmime/files/gmime-3.2.15-ub-fix.patch
@@ -0,0 +1,111 @@
+https://github.com/jstedfast/gmime/issues/172
+https://github.com/jstedfast/gmime/commit/df1151b32fbf45b10d27801c49f2db883be7d5b7
+
+From df1151b32fbf45b10d27801c49f2db883be7d5b7 Mon Sep 17 00:00:00 2001
+From: Jeffrey Stedfast <[email protected]>
+Date: Fri, 4 Apr 2025 09:37:48 -0400
+Subject: [PATCH] Revert g_mime_parser_options_set_warning_callback() and added
+ _full() version
+
+Fixes issue #172
+---
+ examples/msgcheck.c          |  2 +-
+ gmime/gmime-parser-options.c | 33 +++++++++++++++++++++++----------
+ gmime/gmime-parser-options.h |  4 ++--
+ 3 files changed, 26 insertions(+), 13 deletions(-)
+
+diff --git a/examples/msgcheck.c b/examples/msgcheck.c
+index 46e018c4..8b91e662 100644
+--- a/examples/msgcheck.c
++++ b/examples/msgcheck.c
+@@ -110,7 +110,7 @@ check_msg_file (const gchar *filename)
+               parser = g_mime_parser_new ();
+               g_mime_parser_init_with_stream (parser, stream);
+               options = g_mime_parser_options_new ();
+-              g_mime_parser_options_set_warning_callback (options, 
parser_issue, NULL, NULL);
++              g_mime_parser_options_set_warning_callback (options, 
parser_issue, NULL);
+               message = g_mime_parser_construct_message (parser, options);
+               g_mime_parser_options_free (options);
+               g_object_unref (parser);
+diff --git a/gmime/gmime-parser-options.c b/gmime/gmime-parser-options.c
+index ae84d671..820c3299 100644
+--- a/gmime/gmime-parser-options.c
++++ b/gmime/gmime-parser-options.c
+@@ -70,9 +70,9 @@ g_mime_parser_options_shutdown (void)
+       if (default_options == NULL)
+               return;
+       
+-      if (default_options->notify) {
+-              default_options->notify(default_options->warning_user_data);
+-      }
++      if (default_options->notify)
++              default_options->notify (default_options->warning_user_data);
++      
+       g_strfreev (default_options->charsets);
+       g_slice_free (GMimeParserOptions, default_options);
+       default_options = NULL;
+@@ -193,9 +193,9 @@ g_mime_parser_options_free (GMimeParserOptions *options)
+       g_return_if_fail (options != NULL);
+       
+       if (options != default_options) {
+-              if (options->notify) {
+-                      options->notify(options->warning_user_data);
+-              }
++              if (options->notify)
++                      options->notify (options->warning_user_data);
++              
+               g_strfreev (options->charsets);
+               g_slice_free (GMimeParserOptions, options);
+       }
+@@ -450,18 +450,31 @@ g_mime_parser_options_get_warning_callback 
(GMimeParserOptions *options)
+  * @options: a #GMimeParserOptions
+  * @warning_cb: a #GMimeParserWarningFunc or %NULL to clear the callback
+  * @user_data: data passed to the warning callback function
++ *
++ * Registers the callback function being called if the parser detects any 
issues.
++ **/
++void
++g_mime_parser_options_set_warning_callback (GMimeParserOptions *options, 
GMimeParserWarningFunc warning_cb, gpointer user_data)
++{
++      g_mime_parser_options_set_warning_callback_full (options, warning_cb, 
user_data, NULL);
++}
++
++/**
++ * g_mime_parser_options_set_warning_callback_full:
++ * @options: a #GMimeParserOptions
++ * @warning_cb: a #GMimeParserWarningFunc or %NULL to clear the callback
++ * @user_data: data passed to the warning callback function
+  * @notify: callback function ran on destruction
+  *
+  * Registers the callback function being called if the parser detects any 
issues.
+  **/
+ void
+-g_mime_parser_options_set_warning_callback (GMimeParserOptions *options, 
GMimeParserWarningFunc warning_cb, gpointer user_data, GDestroyNotify notify)
++g_mime_parser_options_set_warning_callback_full (GMimeParserOptions *options, 
GMimeParserWarningFunc warning_cb, gpointer user_data, GDestroyNotify notify)
+ {
+       g_return_if_fail (options != NULL);
+ 
+-      if (options->notify) {
+-              options->notify(options->warning_user_data);
+-      }
++      if (options->notify)
++              options->notify (options->warning_user_data);
+       
+       options->warning_cb = warning_cb;
+       options->warning_user_data = user_data;
+diff --git a/gmime/gmime-parser-options.h b/gmime/gmime-parser-options.h
+index c37d9999..b26160cf 100644
+--- a/gmime/gmime-parser-options.h
++++ b/gmime/gmime-parser-options.h
+@@ -128,8 +128,8 @@ const char **g_mime_parser_options_get_fallback_charsets 
(GMimeParserOptions *op
+ void g_mime_parser_options_set_fallback_charsets (GMimeParserOptions 
*options, const char **charsets);
+ 
+ GMimeParserWarningFunc g_mime_parser_options_get_warning_callback 
(GMimeParserOptions *options);
+-void g_mime_parser_options_set_warning_callback (GMimeParserOptions *options, 
+-              GMimeParserWarningFunc warning_cb, gpointer user_data, 
GDestroyNotify notify);
++void g_mime_parser_options_set_warning_callback (GMimeParserOptions *options, 
GMimeParserWarningFunc warning_cb, gpointer user_data);
++void g_mime_parser_options_set_warning_callback_full (GMimeParserOptions 
*options, GMimeParserWarningFunc warning_cb, gpointer user_data, GDestroyNotify 
notify);
+ 
+ G_END_DECLS
+ 
+

diff --git a/dev-libs/gmime/files/gmime-3.2.15-warning.patch 
b/dev-libs/gmime/files/gmime-3.2.15-warning.patch
new file mode 100644
index 000000000000..f78972700e58
--- /dev/null
+++ b/dev-libs/gmime/files/gmime-3.2.15-warning.patch
@@ -0,0 +1,35 @@
+https://github.com/jstedfast/gmime/commit/3f7005f4c7576de581bb5164c7990aaa4031c2c1
+
+From 3f7005f4c7576de581bb5164c7990aaa4031c2c1 Mon Sep 17 00:00:00 2001
+From: Jeffrey Stedfast <[email protected]>
+Date: Fri, 4 Oct 2024 16:03:24 -0400
+Subject: [PATCH] Fixed issue in decode_route() when ENABLE_WARNINGS is enabled
+
+Fixes issue #169
+---
+ gmime/internet-address.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gmime/internet-address.c b/gmime/internet-address.c
+index cd6baa90..a89eab0e 100644
+--- a/gmime/internet-address.c
++++ b/gmime/internet-address.c
+@@ -45,7 +45,7 @@
+ 
+ 
+ #ifdef ENABLE_WARNINGS
+-#define w(x) x
++#define w(x) (x)
+ #else
+ #define w(x)
+ #endif /* ENABLE_WARNINGS */
+@@ -1437,7 +1437,7 @@ decode_route (const char **in)
+       skip_cfws (&inptr);
+       
+       if (*inptr != ':') {
+-              w(g_warning ("Invalid route domain-list, missing ':': %.*s", 
inptr - start, start));
++              w(g_warning ("Invalid route domain-list, missing ':': %.*s", 
inptr - *in, *in));
+               goto error;
+       }
+       
+

diff --git a/dev-libs/gmime/gmime-3.2.15-r1.ebuild 
b/dev-libs/gmime/gmime-3.2.15-r1.ebuild
new file mode 100644
index 000000000000..a418c2e86a8d
--- /dev/null
+++ b/dev-libs/gmime/gmime-3.2.15-r1.ebuild
@@ -0,0 +1,76 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic gnome2 vala
+
+DESCRIPTION="Library for creating and parsing MIME messages"
+HOMEPAGE="https://github.com/jstedfast/gmime 
http://spruce.sourceforge.net/gmime/";
+SRC_URI="https://github.com/jstedfast/${PN}/releases/download/${PV}/${P}.tar.xz";
+
+SLOT="3.0"
+LICENSE="LGPL-2.1+"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~sparc ~x86 
~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="crypt doc idn test +vala"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+       >=dev-libs/glib-2.68.0:2
+       sys-libs/zlib
+       crypt? ( >=app-crypt/gpgme-1.8.0:= )
+       idn? ( net-dns/libidn2:= )
+       vala? (
+               $(vala_depend)
+               >=dev-libs/gobject-introspection-1.30.0:=
+       )
+"
+DEPEND="${RDEPEND}
+       virtual/libiconv
+"
+BDEPEND="
+       >=dev-build/gtk-doc-am-1.8
+       virtual/pkgconfig
+       doc? ( app-text/docbook-sgml-utils )
+"
+
+PATCHES=(
+       "${FILESDIR}"/${P}-32-bit.patch
+       "${FILESDIR}"/${P}-warning.patch
+       "${FILESDIR}"/${P}-ub-fix.patch
+)
+
+src_prepare() {
+       gnome2_src_prepare
+       use vala && vala_setup
+}
+
+src_configure() {
+       if [[ ${CHOST} == *-solaris* ]]; then
+               # bug #???, why not use --with-libiconv
+               append-libs iconv
+       fi
+
+       gnome2_src_configure \
+               --enable-largefile \
+               $(use_enable crypt crypto) \
+               $(use_enable vala) \
+               $(use_with idn libidn) \
+               $(usex doc "" DB2HTML=)
+}
+
+src_compile() {
+       gnome2_src_compile
+       if use doc; then
+               emake -C docs/tutorial html
+       fi
+}
+
+src_install() {
+       gnome2_src_install
+
+       if use doc ; then
+               docinto tutorial
+               dodoc -r docs/tutorial/html/
+       fi
+}

Reply via email to