diff options
author | Patrick J Volkerding <volkerdi@slackware.com> | 2021-04-06 22:01:59 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2021-04-07 08:59:49 +0200 |
commit | 06a5fa6da374cc3dafd95295c5e7448f1cea9f88 (patch) | |
tree | 7d02c04eea3d5e5f844606e50be1e2518d4be33f /source/xap | |
parent | 928db52b4905b2f48ad28d9965f859ef8247ad3e (diff) | |
download | current-06a5fa6da374cc3dafd95295c5e7448f1cea9f88.tar.gz |
Tue Apr 6 22:01:59 UTC 202120210406220159
a/sysvinit-scripts-2.1-noarch-41.txz: Rebuilt.
rc.S: don't clear /var/run. Thanks to upnort.
kde/digikam-7.2.0-x86_64-2.txz: Rebuilt.
Recompiled against opencv-4.5.2 (apparently the ABI changed).
Thanks to etienne.
Diffstat (limited to 'source/xap')
-rw-r--r-- | source/xap/FTBFSlog | 3 | ||||
-rw-r--r-- | source/xap/pan/0d775547f0e7cf7529538704814469e1db5496f2.patch | 25 | ||||
-rw-r--r-- | source/xap/pan/495bfb2eb9228b5b5cef8b50e11af577e4b473f8.patch | 280 | ||||
-rwxr-xr-x | source/xap/pan/pan.SlackBuild | 4 | ||||
-rw-r--r-- | source/xap/pan/pan.glib-2.68.0.diff | 743 |
5 files changed, 748 insertions, 307 deletions
diff --git a/source/xap/FTBFSlog b/source/xap/FTBFSlog index 82df57f0..af5588c8 100644 --- a/source/xap/FTBFSlog +++ b/source/xap/FTBFSlog @@ -1,3 +1,6 @@ +Tue Apr 6 18:10:12 UTC 2021 + pan: Fix build with glib-2.68.0. Thanks to nobodino and ponce. ++--------------------------+ Tue Jan 19 01:20:27 UTC 2021 seamonkey: patch to fix build with Rust 1.48.0. Thanks to USUARIONUEVO and nobodino. diff --git a/source/xap/pan/0d775547f0e7cf7529538704814469e1db5496f2.patch b/source/xap/pan/0d775547f0e7cf7529538704814469e1db5496f2.patch deleted file mode 100644 index 80dc0487..00000000 --- a/source/xap/pan/0d775547f0e7cf7529538704814469e1db5496f2.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0d775547f0e7cf7529538704814469e1db5496f2 Mon Sep 17 00:00:00 2001 -From: Detlef Graef <detlef.graef@yahoo.de> -Date: Sun, 5 Jul 2020 08:54:35 +0200 -Subject: [PATCH] Remove empty line from file posting.xml - ---- - pan/data-impl/profiles.cc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/pan/data-impl/profiles.cc b/pan/data-impl/profiles.cc -index e999fda..4053cae 100644 ---- a/pan/data-impl/profiles.cc -+++ b/pan/data-impl/profiles.cc -@@ -240,7 +240,7 @@ ProfilesImpl :: serialize (std::ostream& out) const - } - out << indent(--depth) << "</profile>\n"; - } -- out << indent(--depth) << "</profiles>\n\n"; -+ out << indent(--depth) << "</profiles>\n"; - out << indent(--depth) << "</posting>\n"; - } - --- -GitLab - diff --git a/source/xap/pan/495bfb2eb9228b5b5cef8b50e11af577e4b473f8.patch b/source/xap/pan/495bfb2eb9228b5b5cef8b50e11af577e4b473f8.patch deleted file mode 100644 index 6b876d1e..00000000 --- a/source/xap/pan/495bfb2eb9228b5b5cef8b50e11af577e4b473f8.patch +++ /dev/null @@ -1,280 +0,0 @@ -From 495bfb2eb9228b5b5cef8b50e11af577e4b473f8 Mon Sep 17 00:00:00 2001 -From: Detlef Graef <detlef.graef@yahoo.de> -Date: Sun, 5 Jul 2020 08:47:54 +0200 -Subject: [PATCH] Fix for GMime3 build (Posting error). Issues #103 and #114 - ---- - pan/gui/post-ui.cc | 176 ++++++++++++++++++++++++++++++++------------- - 1 file changed, 126 insertions(+), 50 deletions(-) - -diff --git a/pan/gui/post-ui.cc b/pan/gui/post-ui.cc -index 8769ec5..eb21384 100644 ---- a/pan/gui/post-ui.cc -+++ b/pan/gui/post-ui.cc -@@ -1598,86 +1598,178 @@ namespace - GMimeMessage* - PostUI :: new_message_from_ui (Mode mode, bool copy_body) - { -+#ifdef HAVE_GMIME_30 - - GMimeMessage * msg(0); -- msg = g_mime_message_new (false); -+ msg = g_mime_message_new (true); -+ const char * charset_cstr = _charset.c_str(); - - // headers from the ui: From - const Profile profile (get_current_profile ()); - std::string s; - profile.get_from_header (s); --#ifdef HAVE_GMIME_30 -- g_mime_message_add_mailbox (msg, GMIME_ADDRESS_TYPE_SENDER, NULL, s.c_str()); -+ g_mime_message_add_mailbox (msg, GMIME_ADDRESS_TYPE_FROM, profile.username.c_str(), profile.address.c_str()); -+ -+ // headers from the ui: Subject -+ const char * cpch (gtk_entry_get_text (GTK_ENTRY(_subject_entry))); -+ if (cpch) { -+ g_mime_message_set_subject (msg, cpch, charset_cstr); -+ } -+ -+ // headers from the ui: To -+ const StringView to (gtk_entry_get_text (GTK_ENTRY(_to_entry))); -+ if (!to.empty()) -+ pan_g_mime_message_add_recipients_from_string (msg, GMIME_ADDRESS_TYPE_TO, to.str); -+ -+ // headers from the ui: Newsgroups -+ const StringView groups (gtk_entry_get_text (GTK_ENTRY(_groups_entry))); -+ if (!groups.empty()) -+ g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", groups.str, charset_cstr); -+ -+ // headers from the ui: Followup-To -+ const StringView followupto (gtk_entry_get_text (GTK_ENTRY(_followupto_entry))); -+ if (!followupto.empty()) -+ g_mime_object_set_header ((GMimeObject *) msg, "Followup-To", followupto.str, charset_cstr); -+ -+ // headers from the ui: Reply-To -+ const StringView replyto (gtk_entry_get_text (GTK_ENTRY(_replyto_entry))); -+ if (!replyto.empty()) -+ g_mime_object_set_header ((GMimeObject *) msg, "Reply-To", replyto.str, charset_cstr); -+ -+ // headers from posting profile(via prefs): X-Face -+ if (!profile.xface.empty()) -+ { -+ std::string f; -+ f += " " + profile.xface; -+ g_mime_object_set_header ((GMimeObject *) msg, "X-Face", f.c_str(), charset_cstr); -+ } -+ -+ // add the 'hidden headers' (references) -+ const gchar * h_key_str; -+ foreach_const (str2str_t, _hidden_headers, it) -+ if ((mode==DRAFTING) || (it->first.find ("X-Draft-")!=0)) -+ { -+ h_key_str = it->first.c_str(); -+ if ( g_ascii_strncasecmp (h_key_str, "Content", 7) ) -+ { -+ g_mime_object_set_header ((GMimeObject *) msg, it->first.c_str(), it->second.c_str(), charset_cstr); -+ } -+ } -+ -+ // build headers from the 'more headers' entry field -+ std::map<std::string,std::string> headers; -+ GtkTextBuffer * buf (_headers_buf); -+ GtkTextIter start, end; -+ gtk_text_buffer_get_bounds (buf, &start, &end); -+ char * pch = gtk_text_buffer_get_text (buf, &start, &end, false); -+ StringView key, val, v(pch); -+ v.trim (); -+ while (v.pop_token (val, '\n') && val.pop_token(key,':')) { -+ key.trim (); -+ val.eat_chars (1); -+ val.trim (); -+ std::string key_str (key.to_string()); -+ if (extra_header_is_editable (key, val)) -+ g_mime_object_set_header ((GMimeObject *) msg, key.to_string().c_str(), -+ val.to_string().c_str(), charset_cstr); -+ } -+ g_free (pch); -+ -+ // User-Agent -+ if ((mode==POSTING || mode == UPLOADING) && _prefs.get_flag (USER_AGENT_PREFS_KEY, true)) -+ g_mime_object_set_header ((GMimeObject *) msg, "User-Agent", get_user_agent(), charset_cstr); -+ -+ // Message-ID for single text-only posts -+ if (mode==DRAFTING || ((mode==POSTING || mode==UPLOADING) && _prefs.get_flag (MESSAGE_ID_PREFS_KEY, false))) { -+ const std::string message_id = generate_message_id(profile); -+ pan_g_mime_message_set_message_id (msg, message_id.c_str()); -+ } -+ -+ // body & charset -+ { -+ std::string body; -+ if (copy_body) body = get_body(); -+ -+ GMimeStream * stream = g_mime_stream_mem_new_with_buffer (body.c_str(), body.size()); -+ -+ const std::string charset ((mode==POSTING && !_charset.empty()) ? _charset : "UTF-8"); -+ if (charset != "UTF-8") { -+ // add a wrapper to convert from UTF-8 to $charset -+ GMimeStream * tmp = g_mime_stream_filter_new (stream); -+ g_object_unref (stream); -+ GMimeFilter * filter = g_mime_filter_charset_new ("UTF-8", charset.c_str()); -+ g_mime_stream_filter_add (GMIME_STREAM_FILTER(tmp), filter); -+ g_object_unref (filter); -+ stream = tmp; -+ } -+ GMimeDataWrapper * content_object = g_mime_data_wrapper_new_with_stream (stream, GMIME_CONTENT_ENCODING_DEFAULT); -+ g_object_unref (stream); -+ GMimePart * part = g_mime_part_new (); -+ g_mime_part_set_content (part, content_object); -+ -+ pch = g_strdup_printf ("text/plain; charset=%s", charset.c_str()); -+ GMimeContentType * type = g_mime_content_type_parse (NULL, pch); -+ g_free (pch); -+ g_mime_object_set_content_type ((GMimeObject *) part, type); // part owns type now. type isn't refcounted. -+ -+ if (mode != UPLOADING) g_mime_part_set_content_encoding (part, _enc); -+ -+ g_object_unref (content_object); -+ g_mime_message_set_mime_part (msg, GMIME_OBJECT(part)); -+ g_object_unref (part); -+ } -+ -+ return msg; -+ - #else -+ -+ GMimeMessage * msg(0); -+ msg = g_mime_message_new (false); -+ -+ // headers from the ui: From -+ const Profile profile (get_current_profile ()); -+ std::string s; -+ profile.get_from_header (s); - g_mime_message_set_sender (msg, s.c_str()); --#endif - - // headers from the ui: Subject - const char * cpch (gtk_entry_get_text (GTK_ENTRY(_subject_entry))); - if (cpch) { --#ifdef HAVE_GMIME_30 -- g_mime_message_set_subject (msg, cpch, NULL); --#else - g_mime_message_set_subject (msg, cpch); --#endif - } - - // headers from the ui: To - const StringView to (gtk_entry_get_text (GTK_ENTRY(_to_entry))); - if (!to.empty()) --#ifdef HAVE_GMIME_30 -- pan_g_mime_message_add_recipients_from_string (msg, GMIME_ADDRESS_TYPE_TO, to.str); --#else - pan_g_mime_message_add_recipients_from_string (msg, GMIME_RECIPIENT_TYPE_TO, to.str); --#endif - - // headers from the ui: Newsgroups - const StringView groups (gtk_entry_get_text (GTK_ENTRY(_groups_entry))); - if (!groups.empty()) --#ifdef HAVE_GMIME_30 -- g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", groups.str, NULL); --#else - g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", groups.str); --#endif - - // headers from the ui: Followup-To - const StringView followupto (gtk_entry_get_text (GTK_ENTRY(_followupto_entry))); - if (!followupto.empty()) --#ifdef HAVE_GMIME_30 -- g_mime_object_set_header ((GMimeObject *) msg, "Followup-To", followupto.str, NULL); --#else - g_mime_object_set_header ((GMimeObject *) msg, "Followup-To", followupto.str); --#endif - - // headers from the ui: Reply-To - const StringView replyto (gtk_entry_get_text (GTK_ENTRY(_replyto_entry))); - if (!replyto.empty()) --#ifdef HAVE_GMIME_30 -- g_mime_object_set_header ((GMimeObject *) msg, "Reply-To", replyto.str, NULL); --#else - g_mime_object_set_header ((GMimeObject *) msg, "Reply-To", replyto.str); --#endif - - // headers from posting profile(via prefs): X-Face - if (!profile.xface.empty()) - { - std::string f; - f += " " + profile.xface; --#ifdef HAVE_GMIME_30 -- g_mime_object_set_header ((GMimeObject *) msg, "X-Face", f.c_str(), NULL); --#else - g_mime_object_set_header ((GMimeObject *) msg, "X-Face", f.c_str()); --#endif - } - - // add the 'hidden headers' - foreach_const (str2str_t, _hidden_headers, it) - if ((mode==DRAFTING) || (it->first.find ("X-Draft-")!=0)) --#ifdef HAVE_GMIME_30 -- g_mime_object_set_header ((GMimeObject *) msg, it->first.c_str(), it->second.c_str(), NULL); --#else - g_mime_object_set_header ((GMimeObject *) msg, it->first.c_str(), it->second.c_str()); --#endif - - // build headers from the 'more headers' entry field - std::map<std::string,std::string> headers; -@@ -1693,23 +1785,14 @@ PostUI :: new_message_from_ui (Mode mode, bool copy_body) - val.trim (); - std::string key_str (key.to_string()); - if (extra_header_is_editable (key, val)) --#ifdef HAVE_GMIME_30 -- g_mime_object_set_header ((GMimeObject *) msg, key.to_string().c_str(), -- val.to_string().c_str(), NULL); --#else - g_mime_object_set_header ((GMimeObject *) msg, key.to_string().c_str(), - val.to_string().c_str()); --#endif - } - g_free (pch); - - // User-Agent - if ((mode==POSTING || mode == UPLOADING) && _prefs.get_flag (USER_AGENT_PREFS_KEY, true)) --#ifdef HAVE_GMIME_30 -- g_mime_object_set_header ((GMimeObject *) msg, "User-Agent", get_user_agent(), NULL); --#else - g_mime_object_set_header ((GMimeObject *) msg, "User-Agent", get_user_agent()); --#endif - - // Message-ID for single text-only posts - if (mode==DRAFTING || ((mode==POSTING || mode==UPLOADING) && _prefs.get_flag (MESSAGE_ID_PREFS_KEY, false))) { -@@ -1738,19 +1821,10 @@ PostUI :: new_message_from_ui (Mode mode, bool copy_body) - g_object_unref (stream); - GMimePart * part = g_mime_part_new (); - pch = g_strdup_printf ("text/plain; charset=%s", charset.c_str()); -- --#ifdef HAVE_GMIME_30 -- GMimeContentType * type = g_mime_content_type_parse (NULL, pch); --#else - GMimeContentType * type = g_mime_content_type_new_from_string (pch); --#endif - g_free (pch); - g_mime_object_set_content_type ((GMimeObject *) part, type); // part owns type now. type isn't refcounted. --#ifdef HAVE_GMIME_30 -- g_mime_part_set_content(part, content_object); --#else - g_mime_part_set_content_object (part, content_object); --#endif - if (mode != UPLOADING) g_mime_part_set_content_encoding (part, _enc); - g_object_unref (content_object); - g_mime_message_set_mime_part (msg, GMIME_OBJECT(part)); -@@ -1758,6 +1832,8 @@ PostUI :: new_message_from_ui (Mode mode, bool copy_body) - } - - return msg; -+ -+#endif - } - - void --- -GitLab - diff --git a/source/xap/pan/pan.SlackBuild b/source/xap/pan/pan.SlackBuild index 1881feee..b3a8a3bf 100755 --- a/source/xap/pan/pan.SlackBuild +++ b/source/xap/pan/pan.SlackBuild @@ -75,8 +75,8 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \+ -zcat $CWD/0d775547f0e7cf7529538704814469e1db5496f2.patch.gz | patch -p1 --verbose || exit 1 -zcat $CWD/495bfb2eb9228b5b5cef8b50e11af577e4b473f8.patch.gz | patch -p1 --verbose || exit 1 +# Fix gmime3 errors and building with glib-2.68.0: +zcat $CWD/pan.glib-2.68.0.diff.gz | patch -p1 --verbose || exit 1 # Configure: CFLAGS="$SLKCFLAGS" \ diff --git a/source/xap/pan/pan.glib-2.68.0.diff b/source/xap/pan/pan.glib-2.68.0.diff new file mode 100644 index 00000000..e02f28ca --- /dev/null +++ b/source/xap/pan/pan.glib-2.68.0.diff @@ -0,0 +1,743 @@ +diff -aurN pan-0.146/pan/data/article-cache.cc pan-0.146-mod/pan/data/article-cache.cc +--- pan-0.146/pan/data/article-cache.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/data/article-cache.cc 2021-04-05 18:50:26.132408821 +0200 +@@ -26,12 +26,10 @@ + #include <sys/stat.h> + #include <unistd.h> + #include <dirent.h> +- +- #include <glib.h> +- #include <glib/gi18n.h> +- #include <gmime/gmime.h> + } +- ++#include <glib.h> ++#include <glib/gi18n.h> ++#include <gmime/gmime.h> + #include <pan/general/debug.h> + #include <pan/general/file-util.h> + #include <pan/general/macros.h> +diff -aurN pan-0.146/pan/data/article-cache.h pan-0.146-mod/pan/data/article-cache.h +--- pan-0.146/pan/data/article-cache.h 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/data/article-cache.h 2021-04-05 18:49:41.686408990 +0200 +@@ -22,9 +22,7 @@ + + #include <map> + #include <vector> +-extern "C" { +- #include <glib.h> // for guint64 +-} ++#include <glib.h> // for guint64 + #include <pan/general/string-view.h> + #include <pan/general/quark.h> + +diff -aurN pan-0.146/pan/data-impl/data-impl.cc pan-0.146-mod/pan/data-impl/data-impl.cc +--- pan-0.146/pan/data-impl/data-impl.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/data-impl/data-impl.cc 2021-04-05 18:59:43.045406696 +0200 +@@ -22,10 +22,8 @@ + **************/ + + #include <config.h> +-extern "C" { +- #include <glib/gi18n.h> +- #include <glib.h> // for g_build_filename +-} ++#include <glib/gi18n.h> ++#include <glib.h> // for g_build_filename + #include <pan/general/debug.h> + #include <pan/general/file-util.h> + #include <pan/general/log.h> +diff -aurN pan-0.146/pan/data-impl/profiles.cc pan-0.146-mod/pan/data-impl/profiles.cc +--- pan-0.146/pan/data-impl/profiles.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/data-impl/profiles.cc 2021-04-05 07:03:32.546986596 +0200 +@@ -240,7 +240,7 @@ + } + out << indent(--depth) << "</profile>\n"; + } +- out << indent(--depth) << "</profiles>\n\n"; ++ out << indent(--depth) << "</profiles>\n"; + out << indent(--depth) << "</posting>\n"; + } + +diff -aurN pan-0.146/pan/general/file-util.cc pan-0.146-mod/pan/general/file-util.cc +--- pan-0.146/pan/general/file-util.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/general/file-util.cc 2021-04-05 18:44:45.568410120 +0200 +@@ -27,13 +27,12 @@ + #include <unistd.h> + #include <sys/stat.h> + #include <sys/types.h> +- #include <glib.h> +- #include <glib/gi18n.h> + #ifndef G_OS_WIN32 + #include <pwd.h> + #endif + } +- ++#include <glib.h> ++#include <glib/gi18n.h> + #include "debug.h" + #include "log.h" + #include "messages.h" +diff -aurN pan-0.146/pan/general/file-util.h pan-0.146-mod/pan/general/file-util.h +--- pan-0.146/pan/general/file-util.h 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/general/file-util.h 2021-04-05 18:43:33.527410395 +0200 +@@ -25,9 +25,9 @@ + extern "C" { + #include <stddef.h> + #include <stdio.h> +- #include <glib.h> +- #include <glib/gstdio.h> + } ++#include <glib.h> ++#include <glib/gstdio.h> + #include <pan/general/string-view.h> + + #define g_freopen freopen +diff -aurN pan-0.146/pan/general/line-reader.cc pan-0.146-mod/pan/general/line-reader.cc +--- pan-0.146/pan/general/line-reader.cc 2017-12-23 20:51:55.000000000 +0100 ++++ pan-0.146-mod/pan/general/line-reader.cc 2021-04-05 18:45:43.352409899 +0200 +@@ -1,9 +1,7 @@ + #include <config.h> + #include <cstdio> + #include <cstdlib> +-extern "C"{ +- #include <glib/gi18n.h> +-} ++#include <glib/gi18n.h> + #include <cerrno> + #include "file-util.h" + #include "line-reader.h" +diff -aurN pan-0.146/pan/general/text-match.cc pan-0.146-mod/pan/general/text-match.cc +--- pan-0.146/pan/general/text-match.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/general/text-match.cc 2021-04-05 18:46:30.698409719 +0200 +@@ -20,9 +20,9 @@ + #include <config.h> + extern "C" { + #include <ctype.h> +- #include <glib.h> +- #include <glib/gi18n.h> + } ++#include <glib.h> ++#include <glib/gi18n.h> + #include "debug.h" + #include "log.h" + #include "text-match.h" +diff -aurN pan-0.146/pan/gui/actions.cc pan-0.146-mod/pan/gui/actions.cc +--- pan-0.146/pan/gui/actions.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/actions.cc 2021-04-05 19:03:23.526405855 +0200 +@@ -18,11 +18,8 @@ + */ + + #include <config.h> +-extern "C" { +- #include <glib/gi18n.h> +- #include "gtk-compat.h" +-} +- ++#include "gtk-compat.h" ++#include <glib/gi18n.h> + #include <pan/general/macros.h> + #include <pan/general/debug.h> + #include <pan/data-impl/data-impl.h> +diff -aurN pan-0.146/pan/gui/dl-headers-ui.cc pan-0.146-mod/pan/gui/dl-headers-ui.cc +--- pan-0.146/pan/gui/dl-headers-ui.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/dl-headers-ui.cc 2021-04-05 19:04:01.884405709 +0200 +@@ -18,11 +18,9 @@ + */ + + #include <config.h> +-extern "C" { +- #include <glib.h> +- #include <glib/gi18n.h> +- #include "gtk-compat.h" +-} ++#include <glib.h> ++#include <glib/gi18n.h> ++#include "gtk-compat.h" + #include <pan/general/macros.h> + #include <pan/tasks/queue.h> + #include <pan/tasks/task-xover.h> +diff -aurN pan-0.146/pan/gui/group-prefs.cc pan-0.146-mod/pan/gui/group-prefs.cc +--- pan-0.146/pan/gui/group-prefs.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/group-prefs.cc 2021-04-05 19:04:41.030405560 +0200 +@@ -21,8 +21,8 @@ + #include <config.h> + #include <sys/types.h> // chmod + #include <sys/stat.h> // chmod +- #include <glib.h> + } ++#include <glib.h> + #include <iostream> + #include <fstream> + #include <pan/general/file-util.h> +diff -aurN pan-0.146/pan/gui/group-prefs-dialog.cc pan-0.146-mod/pan/gui/group-prefs-dialog.cc +--- pan-0.146/pan/gui/group-prefs-dialog.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/group-prefs-dialog.cc 2021-04-05 19:05:19.236405414 +0200 +@@ -19,13 +19,13 @@ + + #include <config.h> + extern "C" { +- #include <glib/gi18n.h> +- #include <glib.h> +- #include "gtk-compat.h" + #ifdef HAVE_GTKSPELL + #include <enchant/enchant.h> + #endif + } ++#include <glib/gi18n.h> ++#include <glib.h> ++#include "gtk-compat.h" + #include <pan/general/debug.h> + #include <pan/general/macros.h> + #include <pan/data/data.h> +diff -aurN pan-0.146/pan/gui/gui.cc pan-0.146-mod/pan/gui/gui.cc +--- pan-0.146/pan/gui/gui.cc 2019-05-04 18:10:27.000000000 +0200 ++++ pan-0.146-mod/pan/gui/gui.cc 2021-04-05 19:00:49.351406443 +0200 +@@ -25,9 +25,9 @@ + extern "C" { + #include <sys/types.h> // for chmod + #include <sys/stat.h> // for chmod +- #include <glib/gi18n.h> + #include <dirent.h> + } ++#include <glib/gi18n.h> + #include <pan/general/debug.h> + #include <pan/general/e-util.h> + #include <pan/general/file-util.h> +diff -aurN pan-0.146/pan/gui/header-pane.cc pan-0.146-mod/pan/gui/header-pane.cc +--- pan-0.146/pan/gui/header-pane.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/header-pane.cc 2021-04-05 19:06:37.048405117 +0200 +@@ -19,10 +19,9 @@ + + extern "C" { + #include <config.h> +- #include <glib/gi18n.h> +- #include "gtk-compat.h" +- #include "gtk-compat.h" + } ++#include "gtk-compat.h" ++#include <glib/gi18n.h> + #include <cctype> + #include <cmath> + #include <algorithm> +diff -aurN pan-0.146/pan/gui/post-ui.cc pan-0.146-mod/pan/gui/post-ui.cc +--- pan-0.146/pan/gui/post-ui.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/post-ui.cc 2021-04-05 07:03:32.564986261 +0200 +@@ -1598,86 +1598,178 @@ + GMimeMessage* + PostUI :: new_message_from_ui (Mode mode, bool copy_body) + { ++#ifdef HAVE_GMIME_30 + + GMimeMessage * msg(0); +- msg = g_mime_message_new (false); ++ msg = g_mime_message_new (true); ++ const char * charset_cstr = _charset.c_str(); + + // headers from the ui: From + const Profile profile (get_current_profile ()); + std::string s; + profile.get_from_header (s); +-#ifdef HAVE_GMIME_30 +- g_mime_message_add_mailbox (msg, GMIME_ADDRESS_TYPE_SENDER, NULL, s.c_str()); ++ g_mime_message_add_mailbox (msg, GMIME_ADDRESS_TYPE_FROM, profile.username.c_str(), profile.address.c_str()); ++ ++ // headers from the ui: Subject ++ const char * cpch (gtk_entry_get_text (GTK_ENTRY(_subject_entry))); ++ if (cpch) { ++ g_mime_message_set_subject (msg, cpch, charset_cstr); ++ } ++ ++ // headers from the ui: To ++ const StringView to (gtk_entry_get_text (GTK_ENTRY(_to_entry))); ++ if (!to.empty()) ++ pan_g_mime_message_add_recipients_from_string (msg, GMIME_ADDRESS_TYPE_TO, to.str); ++ ++ // headers from the ui: Newsgroups ++ const StringView groups (gtk_entry_get_text (GTK_ENTRY(_groups_entry))); ++ if (!groups.empty()) ++ g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", groups.str, charset_cstr); ++ ++ // headers from the ui: Followup-To ++ const StringView followupto (gtk_entry_get_text (GTK_ENTRY(_followupto_entry))); ++ if (!followupto.empty()) ++ g_mime_object_set_header ((GMimeObject *) msg, "Followup-To", followupto.str, charset_cstr); ++ ++ // headers from the ui: Reply-To ++ const StringView replyto (gtk_entry_get_text (GTK_ENTRY(_replyto_entry))); ++ if (!replyto.empty()) ++ g_mime_object_set_header ((GMimeObject *) msg, "Reply-To", replyto.str, charset_cstr); ++ ++ // headers from posting profile(via prefs): X-Face ++ if (!profile.xface.empty()) ++ { ++ std::string f; ++ f += " " + profile.xface; ++ g_mime_object_set_header ((GMimeObject *) msg, "X-Face", f.c_str(), charset_cstr); ++ } ++ ++ // add the 'hidden headers' (references) ++ const gchar * h_key_str; ++ foreach_const (str2str_t, _hidden_headers, it) ++ if ((mode==DRAFTING) || (it->first.find ("X-Draft-")!=0)) ++ { ++ h_key_str = it->first.c_str(); ++ if ( g_ascii_strncasecmp (h_key_str, "Content", 7) ) ++ { ++ g_mime_object_set_header ((GMimeObject *) msg, it->first.c_str(), it->second.c_str(), charset_cstr); ++ } ++ } ++ ++ // build headers from the 'more headers' entry field ++ std::map<std::string,std::string> headers; ++ GtkTextBuffer * buf (_headers_buf); ++ GtkTextIter start, end; ++ gtk_text_buffer_get_bounds (buf, &start, &end); ++ char * pch = gtk_text_buffer_get_text (buf, &start, &end, false); ++ StringView key, val, v(pch); ++ v.trim (); ++ while (v.pop_token (val, '\n') && val.pop_token(key,':')) { ++ key.trim (); ++ val.eat_chars (1); ++ val.trim (); ++ std::string key_str (key.to_string()); ++ if (extra_header_is_editable (key, val)) ++ g_mime_object_set_header ((GMimeObject *) msg, key.to_string().c_str(), ++ val.to_string().c_str(), charset_cstr); ++ } ++ g_free (pch); ++ ++ // User-Agent ++ if ((mode==POSTING || mode == UPLOADING) && _prefs.get_flag (USER_AGENT_PREFS_KEY, true)) ++ g_mime_object_set_header ((GMimeObject *) msg, "User-Agent", get_user_agent(), charset_cstr); ++ ++ // Message-ID for single text-only posts ++ if (mode==DRAFTING || ((mode==POSTING || mode==UPLOADING) && _prefs.get_flag (MESSAGE_ID_PREFS_KEY, false))) { ++ const std::string message_id = generate_message_id(profile); ++ pan_g_mime_message_set_message_id (msg, message_id.c_str()); ++ } ++ ++ // body & charset ++ { ++ std::string body; ++ if (copy_body) body = get_body(); ++ ++ GMimeStream * stream = g_mime_stream_mem_new_with_buffer (body.c_str(), body.size()); ++ ++ const std::string charset ((mode==POSTING && !_charset.empty()) ? _charset : "UTF-8"); ++ if (charset != "UTF-8") { ++ // add a wrapper to convert from UTF-8 to $charset ++ GMimeStream * tmp = g_mime_stream_filter_new (stream); ++ g_object_unref (stream); ++ GMimeFilter * filter = g_mime_filter_charset_new ("UTF-8", charset.c_str()); ++ g_mime_stream_filter_add (GMIME_STREAM_FILTER(tmp), filter); ++ g_object_unref (filter); ++ stream = tmp; ++ } ++ GMimeDataWrapper * content_object = g_mime_data_wrapper_new_with_stream (stream, GMIME_CONTENT_ENCODING_DEFAULT); ++ g_object_unref (stream); ++ GMimePart * part = g_mime_part_new (); ++ g_mime_part_set_content (part, content_object); ++ ++ pch = g_strdup_printf ("text/plain; charset=%s", charset.c_str()); ++ GMimeContentType * type = g_mime_content_type_parse (NULL, pch); ++ g_free (pch); ++ g_mime_object_set_content_type ((GMimeObject *) part, type); // part owns type now. type isn't refcounted. ++ ++ if (mode != UPLOADING) g_mime_part_set_content_encoding (part, _enc); ++ ++ g_object_unref (content_object); ++ g_mime_message_set_mime_part (msg, GMIME_OBJECT(part)); ++ g_object_unref (part); ++ } ++ ++ return msg; ++ + #else ++ ++ GMimeMessage * msg(0); ++ msg = g_mime_message_new (false); ++ ++ // headers from the ui: From ++ const Profile profile (get_current_profile ()); ++ std::string s; ++ profile.get_from_header (s); + g_mime_message_set_sender (msg, s.c_str()); +-#endif + + // headers from the ui: Subject + const char * cpch (gtk_entry_get_text (GTK_ENTRY(_subject_entry))); + if (cpch) { +-#ifdef HAVE_GMIME_30 +- g_mime_message_set_subject (msg, cpch, NULL); +-#else + g_mime_message_set_subject (msg, cpch); +-#endif + } + + // headers from the ui: To + const StringView to (gtk_entry_get_text (GTK_ENTRY(_to_entry))); + if (!to.empty()) +-#ifdef HAVE_GMIME_30 +- pan_g_mime_message_add_recipients_from_string (msg, GMIME_ADDRESS_TYPE_TO, to.str); +-#else + pan_g_mime_message_add_recipients_from_string (msg, GMIME_RECIPIENT_TYPE_TO, to.str); +-#endif + + // headers from the ui: Newsgroups + const StringView groups (gtk_entry_get_text (GTK_ENTRY(_groups_entry))); + if (!groups.empty()) +-#ifdef HAVE_GMIME_30 +- g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", groups.str, NULL); +-#else + g_mime_object_set_header ((GMimeObject *) msg, "Newsgroups", groups.str); +-#endif + + // headers from the ui: Followup-To + const StringView followupto (gtk_entry_get_text (GTK_ENTRY(_followupto_entry))); + if (!followupto.empty()) +-#ifdef HAVE_GMIME_30 +- g_mime_object_set_header ((GMimeObject *) msg, "Followup-To", followupto.str, NULL); +-#else + g_mime_object_set_header ((GMimeObject *) msg, "Followup-To", followupto.str); +-#endif + + // headers from the ui: Reply-To + const StringView replyto (gtk_entry_get_text (GTK_ENTRY(_replyto_entry))); + if (!replyto.empty()) +-#ifdef HAVE_GMIME_30 +- g_mime_object_set_header ((GMimeObject *) msg, "Reply-To", replyto.str, NULL); +-#else + g_mime_object_set_header ((GMimeObject *) msg, "Reply-To", replyto.str); +-#endif + + // headers from posting profile(via prefs): X-Face + if (!profile.xface.empty()) + { + std::string f; + f += " " + profile.xface; +-#ifdef HAVE_GMIME_30 +- g_mime_object_set_header ((GMimeObject *) msg, "X-Face", f.c_str(), NULL); +-#else + g_mime_object_set_header ((GMimeObject *) msg, "X-Face", f.c_str()); +-#endif + } + + // add the 'hidden headers' + foreach_const (str2str_t, _hidden_headers, it) + if ((mode==DRAFTING) || (it->first.find ("X-Draft-")!=0)) +-#ifdef HAVE_GMIME_30 +- g_mime_object_set_header ((GMimeObject *) msg, it->first.c_str(), it->second.c_str(), NULL); +-#else + g_mime_object_set_header ((GMimeObject *) msg, it->first.c_str(), it->second.c_str()); +-#endif + + // build headers from the 'more headers' entry field + std::map<std::string,std::string> headers; +@@ -1693,23 +1785,14 @@ + val.trim (); + std::string key_str (key.to_string()); + if (extra_header_is_editable (key, val)) +-#ifdef HAVE_GMIME_30 +- g_mime_object_set_header ((GMimeObject *) msg, key.to_string().c_str(), +- val.to_string().c_str(), NULL); +-#else + g_mime_object_set_header ((GMimeObject *) msg, key.to_string().c_str(), + val.to_string().c_str()); +-#endif + } + g_free (pch); + + // User-Agent + if ((mode==POSTING || mode == UPLOADING) && _prefs.get_flag (USER_AGENT_PREFS_KEY, true)) +-#ifdef HAVE_GMIME_30 +- g_mime_object_set_header ((GMimeObject *) msg, "User-Agent", get_user_agent(), NULL); +-#else + g_mime_object_set_header ((GMimeObject *) msg, "User-Agent", get_user_agent()); +-#endif + + // Message-ID for single text-only posts + if (mode==DRAFTING || ((mode==POSTING || mode==UPLOADING) && _prefs.get_flag (MESSAGE_ID_PREFS_KEY, false))) { +@@ -1738,19 +1821,10 @@ + g_object_unref (stream); + GMimePart * part = g_mime_part_new (); + pch = g_strdup_printf ("text/plain; charset=%s", charset.c_str()); +- +-#ifdef HAVE_GMIME_30 +- GMimeContentType * type = g_mime_content_type_parse (NULL, pch); +-#else + GMimeContentType * type = g_mime_content_type_new_from_string (pch); +-#endif + g_free (pch); + g_mime_object_set_content_type ((GMimeObject *) part, type); // part owns type now. type isn't refcounted. +-#ifdef HAVE_GMIME_30 +- g_mime_part_set_content(part, content_object); +-#else + g_mime_part_set_content_object (part, content_object); +-#endif + if (mode != UPLOADING) g_mime_part_set_content_encoding (part, _enc); + g_object_unref (content_object); + g_mime_message_set_mime_part (msg, GMIME_OBJECT(part)); +@@ -1758,6 +1832,8 @@ + } + + return msg; ++ ++#endif + } + + void +diff -aurN pan-0.146/pan/gui/prefs-ui.cc pan-0.146-mod/pan/gui/prefs-ui.cc +--- pan-0.146/pan/gui/prefs-ui.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/prefs-ui.cc 2021-04-05 19:07:26.592404928 +0200 +@@ -18,10 +18,8 @@ + */ + + #include <config.h> +-extern "C" { +- #include <glib/gi18n.h> +- #include "gtk-compat.h" +-} ++#include <glib/gi18n.h> ++#include "gtk-compat.h" + #include <pan/general/debug.h> + #include <pan/general/macros.h> + #include <pan/general/file-util.h> +diff -aurN pan-0.146/pan/gui/progress-view.cc pan-0.146-mod/pan/gui/progress-view.cc +--- pan-0.146/pan/gui/progress-view.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/progress-view.cc 2021-04-05 19:08:01.207404796 +0200 +@@ -18,9 +18,7 @@ + */ + + #include <config.h> +-extern "C" { +- #include "gtk-compat.h" +-} ++#include "gtk-compat.h" + #include <pan/general/string-view.h> + #include <pan/usenet-utils/mime-utils.h> + #include "progress-view.h" +diff -aurN pan-0.146/pan/gui/save-attach-ui.cc pan-0.146-mod/pan/gui/save-attach-ui.cc +--- pan-0.146/pan/gui/save-attach-ui.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/save-attach-ui.cc 2021-04-05 19:09:43.571404405 +0200 +@@ -18,10 +18,8 @@ + */ + + #include <config.h> +-extern "C" { +- #include <glib/gi18n.h> +- #include "gtk-compat.h" +-} ++#include <glib/gi18n.h> ++#include "gtk-compat.h" + #include <pan/general/debug.h> + #include <pan/general/macros.h> + #include <pan/icons/pan-pixbufs.h> +diff -aurN pan-0.146/pan/gui/save-ui.cc pan-0.146-mod/pan/gui/save-ui.cc +--- pan-0.146/pan/gui/save-ui.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/save-ui.cc 2021-04-05 19:08:49.801404611 +0200 +@@ -18,10 +18,8 @@ + */ + + #include <config.h> +-extern "C" { +- #include <glib/gi18n.h> +- #include "gtk-compat.h" +-} ++#include <glib/gi18n.h> ++#include "gtk-compat.h" + #include <pan/general/debug.h> + #include <pan/general/macros.h> + #include <pan/icons/pan-pixbufs.h> +diff -aurN pan-0.146/pan/gui/score-add-ui.cc pan-0.146-mod/pan/gui/score-add-ui.cc +--- pan-0.146/pan/gui/score-add-ui.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/score-add-ui.cc 2021-04-05 19:10:11.844404298 +0200 +@@ -20,9 +20,7 @@ + #include <config.h> + #include <cassert> + #include <climits> +-extern "C" { +- #include <glib/gi18n.h> +-} ++#include <glib/gi18n.h> + #include <pan/general/debug.h> + #include <pan/general/text-match.h> + #include "hig.h" +diff -aurN pan-0.146/pan/gui/score-view-ui.cc pan-0.146-mod/pan/gui/score-view-ui.cc +--- pan-0.146/pan/gui/score-view-ui.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/score-view-ui.cc 2021-04-05 19:10:51.159404148 +0200 +@@ -18,10 +18,8 @@ + */ + + #include <config.h> +-extern "C" { +- #include <glib/gi18n.h> +- #include "gtk-compat.h" +-} ++#include <glib/gi18n.h> ++#include "gtk-compat.h" + #include <pan/general/debug.h> + #include "pad.h" + #include "score-add-ui.h" +diff -aurN pan-0.146/pan/gui/server-ui.cc pan-0.146-mod/pan/gui/server-ui.cc +--- pan-0.146/pan/gui/server-ui.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/server-ui.cc 2021-04-05 19:11:30.464403998 +0200 +@@ -21,12 +21,9 @@ + #include <cstdlib> + #include <cstring> + #include <climits> +-extern "C" { +- #include <glib.h> +- #include <glib/gi18n.h> +- #include "gtk-compat.h" +-} +- ++#include <glib.h> ++#include <glib/gi18n.h> ++#include "gtk-compat.h" + #include <pan/icons/pan-pixbufs.h> + #include <pan/general/file-util.h> + #include <pan/general/macros.h> +diff -aurN pan-0.146/pan/gui/task-pane.cc pan-0.146-mod/pan/gui/task-pane.cc +--- pan-0.146/pan/gui/task-pane.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/gui/task-pane.cc 2021-04-05 19:12:05.829403863 +0200 +@@ -18,11 +18,9 @@ + */ + + #include <config.h> +-extern "C" { +- #include <glib.h> +- #include <glib/gi18n.h> +- #include "gtk-compat.h" +-} ++#include <glib.h> ++#include <glib/gi18n.h> ++#include "gtk-compat.h" + #include <pan/general/e-util.h> + #include <pan/general/debug.h> + #include <pan/general/file-util.h> +diff -aurN pan-0.146/pan/tasks/nntp.cc pan-0.146-mod/pan/tasks/nntp.cc +--- pan-0.146/pan/tasks/nntp.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/tasks/nntp.cc 2021-04-05 18:57:01.768407312 +0200 +@@ -22,10 +22,8 @@ + #include <cstdarg> + #include <cstdlib> // abort, atoi, strtoul + #include <cstdio> // snprintf +-extern "C" { +- #include <glib.h> +- #include <glib/gi18n.h> +-} ++#include <glib.h> ++#include <glib/gi18n.h> + #include <pan/general/debug.h> + #include <pan/general/log.h> + #include <pan/general/messages.h> +diff -aurN pan-0.146/pan/tasks/socket.cc pan-0.146-mod/pan/tasks/socket.cc +--- pan-0.146/pan/tasks/socket.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/tasks/socket.cc 2021-04-05 18:58:43.178406925 +0200 +@@ -21,9 +21,7 @@ + #include <cstdarg> + #include <ctime> + #include <cmath> +-extern "C" { +- #include <glib.h> +-} ++#include <glib.h> + #include <pan/general/debug.h> + #include <pan/general/string-view.h> + #include "socket.h" +diff -aurN pan-0.146/pan/tasks/task-groups.cc pan-0.146-mod/pan/tasks/task-groups.cc +--- pan-0.146/pan/tasks/task-groups.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/tasks/task-groups.cc 2021-04-05 18:52:54.804408254 +0200 +@@ -20,9 +20,9 @@ + #include <config.h> + #include <cassert> + extern "C" { +- #include <glib/gi18n.h> + #include <stdlib.h> + } ++#include <glib/gi18n.h> + #include <pan/general/debug.h> + #include <pan/general/macros.h> + #include <pan/general/messages.h> +diff -aurN pan-0.146/pan/tasks/task-post.cc pan-0.146-mod/pan/tasks/task-post.cc +--- pan-0.146/pan/tasks/task-post.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/tasks/task-post.cc 2021-04-05 18:54:43.554407839 +0200 +@@ -18,9 +18,7 @@ + */ + + #include <config.h> +-extern "C" { +- #include <glib/gi18n.h> +-} ++#include <glib/gi18n.h> + #include "task-post.h" + #include <pan/general/debug.h> + #include <pan/general/log.h> +diff -aurN pan-0.146/pan/tasks/task-xover.cc pan-0.146-mod/pan/tasks/task-xover.cc +--- pan-0.146/pan/tasks/task-xover.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/tasks/task-xover.cc 2021-04-05 18:55:26.528407675 +0200 +@@ -26,10 +26,9 @@ + #define PROTOTYPES + #include <stdio.h> + #include <uulib/uudeview.h> ++} + #include <glib/gi18n.h> + #include <gmime/gmime-utils.h> +-} +- + #include <fstream> + #include <iostream> + #include <pan/general/debug.h> +diff -aurN pan-0.146/pan/tasks/task-xoverinfo.cc pan-0.146-mod/pan/tasks/task-xoverinfo.cc +--- pan-0.146/pan/tasks/task-xoverinfo.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/tasks/task-xoverinfo.cc 2021-04-05 18:56:10.119407509 +0200 +@@ -24,10 +24,10 @@ + #define PROTOTYPES + #include <stdio.h> + #include <uulib/uudeview.h> +- #include <glib/gi18n.h> +- #include <gmime/gmime-utils.h> + #include <zlib.h> + } ++#include <glib/gi18n.h> ++#include <gmime/gmime-utils.h> + #include <fstream> + #include <iostream> + #include <pan/general/debug.h> +diff -aurN pan-0.146/pan/usenet-utils/filter-info.cc pan-0.146-mod/pan/usenet-utils/filter-info.cc +--- pan-0.146/pan/usenet-utils/filter-info.cc 2017-12-29 18:15:47.000000000 +0100 ++++ pan-0.146-mod/pan/usenet-utils/filter-info.cc 2021-04-05 18:48:09.801409341 +0200 +@@ -18,10 +18,8 @@ + */ + + #include <config.h> +-extern "C" { +- #include <glib.h> +- #include <glib/gi18n.h> +-} ++#include <glib.h> ++#include <glib/gi18n.h> + #include <pan/general/macros.h> + #include "filter-info.h" + +diff -aurN pan-0.146/README.windows pan-0.146-mod/README.windows +--- pan-0.146/README.windows 2019-10-12 21:57:23.000000000 +0200 ++++ pan-0.146-mod/README.windows 1970-01-01 01:00:00.000000000 +0100 +@@ -1,16 +0,0 @@ +- +- http://pan.rebelbase.com/download/releases/0.146/ +- has a full list of changes since the previous release. +- +- On Windows, Pan requires GTK 2.16.0 or higher, which can be found at +- <http://gtk-win.sourceforge.net/>. +- +- Found a bug? Have a suggestion? +- Send feedback to the pan-users@nongnu.org mailing list. +- +- Information on building Pan on Windows can be found at +- <https://gitlab.gnome.org/GNOME/pan/raw/master/README.mingw>. +- +- See the following page for more information on Pan builds for Windows: +- <http://pan.rebelbase.com/download/>. +- |