Source: pan
Version: 0.146-2
Severity: serious
Tags: ftbfs patch upstream
Forwarded: https://gitlab.gnome.org/GNOME/pan/-/issues/128
User: pkg-gnome-maintain...@lists.alioth.debian.org
Usertags: glib-typeof-2-68

pan 0.146-2+b1 failed to build on architectures where GLib 2.68 was
already available, such as armel. I can reproduce the build failure on
amd64.

> In file included from /usr/include/glib-2.0/glib/gatomic.h:31,
>                  from /usr/include/glib-2.0/glib/gthread.h:32,
>                  from /usr/include/glib-2.0/glib/gasyncqueue.h:32,
>                  from /usr/include/glib-2.0/glib.h:32,
>                  from /usr/include/glib-2.0/glib/gi18n.h:21,
>                  from line-reader.cc:5:
> /usr/include/c++/10/type_traits:2930:3: error: template with C linkage
>  2930 |   template<typename _Fn, typename... _Args>
>       |   ^~~~~~~~
> line-reader.cc:4:1: note: ‘extern "C"’ linkage started here
>     4 | extern "C"{
>       | ^~~~~~~~~~

For well-behaved C libraries that include an extern "C" guard in their
headers, such as GLib, it is unnecessary and sometimes harmful to include
the headers inside a redundant extern "C" block.

In this case, GLib 2.68 started using C++ features when its headers are
included into C++ code, to make macros like g_object_ref() more type-safe
for C++ callers.

There are two ways pan could avoid this build failure:

* Take header inclusions outside extern "C", relying on external
  libraries having their own extern "C" {...} or the GLib equivalent
  G_BEGIN_DECLS...G_END_DECLS.

  https://gitlab.gnome.org/GNOME/pan/-/merge_requests/15
  mr15-Take-glib.h-out-of-extern-C.patch
  mr15-Move-more-header-inclusions-outside-extern-C.patch

* Use the GLIB_VERSION_MIN_REQUIRED and GLIB_VERSION_MAX_ALLOWED mechanism
  introduced in GLib 2.32 (2012) to request that GLib avoids compile-time
  behaviour changes. The default is to have GLIB_VERSION_MIN_REQUIRED set
  to the latest stable version of GLib, and GLIB_VERSION_MAX_ALLOWED set
  to the current version - but if older behaviour is desired, for example
  avoiding the use of C++ features to implement glib_typeof, then that is
  something pan can ask for. This will also disable deprecation warnings
  for functions that were deprecated later than the target version.

  https://gitlab.gnome.org/GNOME/pan/-/merge_requests/16
  mr16-build-Target-a-specific-GLib-API-version.patch

Doing either of those things would resolve the build failure, but the
most future-proof is to do both.

I have verified that adding either the two attached mr15-* patches, or the
single mr16-* patch, is sufficient to make pan compile successfully. I have
not otherwise tested the results.

When fixing this it would also be a good idea to check #984281 - gcc-11
seems likely to become the default quite soon.

Thanks,
    smcv
>From 699bd0a25e0e2eb1c071df75138eb570cea15e0f Mon Sep 17 00:00:00 2001
From: Olaf Seibert <rhia...@falu.nl>
Date: Mon, 5 Apr 2021 16:11:49 +0200
Subject: [PATCH 1/2] Take <glib.h> out of extern "C"

and do the same for other <glib/*.h> files.

Bug: https://gitlab.gnome.org/GNOME/pan/-/issues/128
Origin: https://gitlab.gnome.org/GNOME/pan/-/merge_requests/14
---
 pan/data-impl/article-filter.cc   | 5 +----
 pan/data-impl/data-impl.cc        | 2 +-
 pan/data-impl/data-io.cc          | 4 ++--
 pan/data-impl/groups.cc           | 2 +-
 pan/data-impl/headers.cc          | 2 +-
 pan/data-impl/profiles.cc         | 4 ++--
 pan/data-impl/server.cc           | 6 ++----
 pan/data/article-cache.cc         | 4 ++--
 pan/data/article-cache.h          | 4 +---
 pan/data/cert-store.cc            | 2 --
 pan/data/encode-cache.cc          | 4 ++--
 pan/data/encode-cache.h           | 4 +---
 pan/general/e-util.cc             | 4 ++--
 pan/general/file-util.cc          | 4 ++--
 pan/general/file-util.h           | 4 ++--
 pan/general/macros.h              | 5 +----
 pan/general/text-match.cc         | 4 ++--
 pan/gui/dl-headers-ui.cc          | 4 ++--
 pan/gui/group-prefs-dialog.cc     | 4 ++--
 pan/gui/group-prefs.cc            | 2 +-
 pan/gui/prefs-file.cc             | 2 +-
 pan/gui/prefs.cc                  | 6 ++----
 pan/gui/server-ui.cc              | 4 ++--
 pan/gui/task-pane.cc              | 4 ++--
 pan/gui/url.cc                    | 6 ++----
 pan/tasks/nntp.cc                 | 6 ++----
 pan/tasks/nzb.cc                  | 4 +---
 pan/tasks/socket-impl-main.cc     | 5 +----
 pan/tasks/socket-impl-openssl.h   | 5 +----
 pan/tasks/socket.cc               | 4 +---
 pan/usenet-utils/filter-info.cc   | 6 ++----
 pan/usenet-utils/message-check.cc | 2 --
 pan/usenet-utils/rules-info.cc    | 6 ++----
 pan/usenet-utils/text-massager.cc | 2 --
 34 files changed, 49 insertions(+), 87 deletions(-)

diff --git a/pan/data-impl/article-filter.cc b/pan/data-impl/article-filter.cc
index b06d0c2..f424738 100644
--- a/pan/data-impl/article-filter.cc
+++ b/pan/data-impl/article-filter.cc
@@ -25,10 +25,7 @@
 #include <gmime/gmime.h>
 
 //#include <glib/gprintf.h>
-extern "C"
-{
-  #include <glib.h>
-}
+#include <glib.h>
 
 #include "article-filter.h"
 
diff --git a/pan/data-impl/data-impl.cc b/pan/data-impl/data-impl.cc
index 88012cc..215be61 100644
--- a/pan/data-impl/data-impl.cc
+++ b/pan/data-impl/data-impl.cc
@@ -24,8 +24,8 @@
 #include <config.h>
 extern "C" {
   #include <glib/gi18n.h>
-  #include <glib.h> // for g_build_filename
 }
+#include <glib.h> // for g_build_filename
 #include <pan/general/debug.h>
 #include <pan/general/file-util.h>
 #include <pan/general/log.h>
diff --git a/pan/data-impl/data-io.cc b/pan/data-impl/data-io.cc
index bea1a90..d938634 100644
--- a/pan/data-impl/data-io.cc
+++ b/pan/data-impl/data-io.cc
@@ -27,9 +27,9 @@ extern "C" {
   #include <sys/types.h> // for chmod
   #include <sys/stat.h> // for chmod
   #include <unistd.h>
-  #include <glib.h>
-  #include <glib/gi18n.h>
 }
+#include <glib.h>
+#include <glib/gi18n.h>
 #include <pan/general/debug.h>
 #include <pan/general/file-util.h>
 #include <pan/general/line-reader.h>
diff --git a/pan/data-impl/groups.cc b/pan/data-impl/groups.cc
index 244feb9..da0183a 100644
--- a/pan/data-impl/groups.cc
+++ b/pan/data-impl/groups.cc
@@ -29,9 +29,9 @@
 #include <vector>
 
 #include <glib.h>
+#include <glib/gi18n.h>
 extern "C" {
   #include <unistd.h>
-  #include <glib/gi18n.h>
 }
 
 #include <pan/general/debug.h>
diff --git a/pan/data-impl/headers.cc b/pan/data-impl/headers.cc
index f8c4466..16d5672 100644
--- a/pan/data-impl/headers.cc
+++ b/pan/data-impl/headers.cc
@@ -25,10 +25,10 @@
 #include <string>
 #include <cmath>
 #include <glib.h>
+#include <glib/gi18n.h>
 extern "C" {
   #include <sys/types.h> // for chmod
   #include <sys/stat.h> // for chmod
-  #include <glib/gi18n.h>
 }
 #include <pan/general/debug.h>
 #include <pan/general/log.h>
diff --git a/pan/data-impl/profiles.cc b/pan/data-impl/profiles.cc
index e999fda..a6e6bb5 100644
--- a/pan/data-impl/profiles.cc
+++ b/pan/data-impl/profiles.cc
@@ -26,9 +26,9 @@
 extern "C" {
   #include <sys/types.h> // for chmod
   #include <sys/stat.h> // for chmod
-  #include <glib.h>
-  #include <glib/gi18n.h>
 }
+#include <glib.h>
+#include <glib/gi18n.h>
 #include <pan/general/debug.h>
 #include <pan/general/string-view.h>
 #include <pan/general/file-util.h>
diff --git a/pan/data-impl/server.cc b/pan/data-impl/server.cc
index 9ea55d4..b23782f 100644
--- a/pan/data-impl/server.cc
+++ b/pan/data-impl/server.cc
@@ -25,10 +25,8 @@
 #include <map>
 #include <set>
 #include <vector>
-extern "C" {
-  #include <glib.h> // for GMarkup
-  #include <glib/gi18n.h>
-}
+#include <glib.h> // for GMarkup
+#include <glib/gi18n.h>
 #include <pan/general/debug.h>
 #include <pan/general/file-util.h>
 #include <pan/general/log.h>
diff --git a/pan/data/article-cache.cc b/pan/data/article-cache.cc
index 1855153..2b97344 100644
--- a/pan/data/article-cache.cc
+++ b/pan/data/article-cache.cc
@@ -27,10 +27,10 @@ extern "C"
   #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 <pan/general/debug.h>
 #include <pan/general/file-util.h>
diff --git a/pan/data/article-cache.h b/pan/data/article-cache.h
index 2ac722b..1304bfe 100644
--- a/pan/data/article-cache.h
+++ b/pan/data/article-cache.h
@@ -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 --git a/pan/data/cert-store.cc b/pan/data/cert-store.cc
index 340fc8b..f6cd46e 100644
--- a/pan/data/cert-store.cc
+++ b/pan/data/cert-store.cc
@@ -34,10 +34,8 @@
 #include <iostream>
 #include <string>
 
-extern "C" {
 #include <glib/gi18n.h>
 #include <glib.h>
-}
 
 #include <pan/general/debug.h>
 #include <pan/general/e-util.h>
diff --git a/pan/data/encode-cache.cc b/pan/data/encode-cache.cc
index 3a82ea9..eecd1d1 100644
--- a/pan/data/encode-cache.cc
+++ b/pan/data/encode-cache.cc
@@ -29,10 +29,10 @@ extern "C"
   #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 <pan/general/debug.h>
 #include <pan/general/file-util.h>
diff --git a/pan/data/encode-cache.h b/pan/data/encode-cache.h
index 8bbd530..1affc0c 100644
--- a/pan/data/encode-cache.h
+++ b/pan/data/encode-cache.h
@@ -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 --git a/pan/general/e-util.cc b/pan/general/e-util.cc
index af5ccd0..62879ee 100644
--- a/pan/general/e-util.cc
+++ b/pan/general/e-util.cc
@@ -26,9 +26,9 @@
 #include <ctime>
 extern "C" {
   #include <ctype.h>
-  #include <glib.h>
-  #include <glib/gi18n.h>
 }
+#include <glib.h>
+#include <glib/gi18n.h>
 #include "debug.h"
 #include "e-util.h"
 
diff --git a/pan/general/file-util.cc b/pan/general/file-util.cc
index 02e9ed1..9efa269 100644
--- a/pan/general/file-util.cc
+++ b/pan/general/file-util.cc
@@ -27,12 +27,12 @@ extern "C"
   #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"
diff --git a/pan/general/file-util.h b/pan/general/file-util.h
index c125c8d..8c67639 100644
--- a/pan/general/file-util.h
+++ b/pan/general/file-util.h
@@ -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 --git a/pan/general/macros.h b/pan/general/macros.h
index 6dcf908..b16230f 100644
--- a/pan/general/macros.h
+++ b/pan/general/macros.h
@@ -63,9 +63,6 @@
 ***  g_assert
 **/
 
-extern "C"
-{
-  #include <glib.h>
-}
+#include <glib.h>
 
 #endif
diff --git a/pan/general/text-match.cc b/pan/general/text-match.cc
index fcacbe2..d390de0 100644
--- a/pan/general/text-match.cc
+++ b/pan/general/text-match.cc
@@ -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 --git a/pan/gui/dl-headers-ui.cc b/pan/gui/dl-headers-ui.cc
index 5841651..cfc536d 100644
--- a/pan/gui/dl-headers-ui.cc
+++ b/pan/gui/dl-headers-ui.cc
@@ -18,9 +18,9 @@
  */
 
 #include <config.h>
+#include <glib.h>
+#include <glib/gi18n.h>
 extern "C" {
-  #include <glib.h>
-  #include <glib/gi18n.h>
   #include "gtk-compat.h"
 }
 #include <pan/general/macros.h>
diff --git a/pan/gui/group-prefs-dialog.cc b/pan/gui/group-prefs-dialog.cc
index 677b07a..6983746 100644
--- a/pan/gui/group-prefs-dialog.cc
+++ b/pan/gui/group-prefs-dialog.cc
@@ -18,9 +18,9 @@
  */
 
 #include <config.h>
+#include <glib/gi18n.h>
+#include <glib.h>
 extern "C" {
-  #include <glib/gi18n.h>
-  #include <glib.h>
   #include "gtk-compat.h"
 #ifdef HAVE_GTKSPELL
   #include <enchant/enchant.h>
diff --git a/pan/gui/group-prefs.cc b/pan/gui/group-prefs.cc
index 3e9851b..b06a949 100644
--- a/pan/gui/group-prefs.cc
+++ b/pan/gui/group-prefs.cc
@@ -21,8 +21,8 @@ extern "C" {
   #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 --git a/pan/gui/prefs-file.cc b/pan/gui/prefs-file.cc
index bde7ef3..64c540f 100644
--- a/pan/gui/prefs-file.cc
+++ b/pan/gui/prefs-file.cc
@@ -24,8 +24,8 @@
 extern "C" {
   #include <sys/types.h> // for chmod
   #include <sys/stat.h> // for chmod
-  #include <glib.h>
 }
+#include <glib.h>
 #include <pan/general/file-util.h>
 #include "prefs-file.h"
 
diff --git a/pan/gui/prefs.cc b/pan/gui/prefs.cc
index fdbd908..64dd8da 100644
--- a/pan/gui/prefs.cc
+++ b/pan/gui/prefs.cc
@@ -23,10 +23,8 @@
 #include <iostream>
 #include <sstream>
 #include <string>
-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/macros.h>
diff --git a/pan/gui/server-ui.cc b/pan/gui/server-ui.cc
index b42bc18..684ea0c 100644
--- a/pan/gui/server-ui.cc
+++ b/pan/gui/server-ui.cc
@@ -21,9 +21,9 @@
 #include <cstdlib>
 #include <cstring>
 #include <climits>
+#include <glib.h>
+#include <glib/gi18n.h>
 extern "C" {
-  #include <glib.h>
-  #include <glib/gi18n.h>
   #include "gtk-compat.h"
 }
 
diff --git a/pan/gui/task-pane.cc b/pan/gui/task-pane.cc
index 4f77922..1c302f9 100644
--- a/pan/gui/task-pane.cc
+++ b/pan/gui/task-pane.cc
@@ -18,9 +18,9 @@
  */
 
 #include <config.h>
+#include <glib.h>
+#include <glib/gi18n.h>
 extern "C" {
-  #include <glib.h>
-  #include <glib/gi18n.h>
   #include "gtk-compat.h"
 }
 #include <pan/general/e-util.h>
diff --git a/pan/gui/url.cc b/pan/gui/url.cc
index e1173ae..94ffb52 100644
--- a/pan/gui/url.cc
+++ b/pan/gui/url.cc
@@ -20,10 +20,8 @@
 #include <config.h>
 #include <iostream>
 #include <string>
-extern "C" {
-  #include <glib.h>
-  #include <glib/gi18n.h>
-};
+#include <glib.h>
+#include <glib/gi18n.h>
 #include <pan/general/log.h>
 #include "url.h"
 
diff --git a/pan/tasks/nntp.cc b/pan/tasks/nntp.cc
index ceb1574..71c5cf1 100644
--- a/pan/tasks/nntp.cc
+++ b/pan/tasks/nntp.cc
@@ -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 --git a/pan/tasks/nzb.cc b/pan/tasks/nzb.cc
index af890e5..14df6f6 100644
--- a/pan/tasks/nzb.cc
+++ b/pan/tasks/nzb.cc
@@ -24,9 +24,7 @@
 #include <sstream>
 #include <string>
 #include <map>
-extern "C" {
-  #include <glib.h>
-}
+#include <glib.h>
 #include <pan/general/debug.h>
 #include <pan/general/file-util.h>
 #include <pan/general/log.h>
diff --git a/pan/tasks/socket-impl-main.cc b/pan/tasks/socket-impl-main.cc
index c33edfd..688183c 100644
--- a/pan/tasks/socket-impl-main.cc
+++ b/pan/tasks/socket-impl-main.cc
@@ -30,10 +30,7 @@
 //#include <glib/giochannel.h>
 //#include <glib/gstring.h>
 
-extern "C"
-{
-  #include <glib.h>
-}
+#include <glib.h>
 
 #include <pan/tasks/socket.h>
 
diff --git a/pan/tasks/socket-impl-openssl.h b/pan/tasks/socket-impl-openssl.h
index e48cbae..eea41d4 100644
--- a/pan/tasks/socket-impl-openssl.h
+++ b/pan/tasks/socket-impl-openssl.h
@@ -27,10 +27,7 @@
 #include <string>
 //#include <glib/giochannel.h>
 //#include <glib/gstring.h>
-extern "C"
-{
-  #include <glib.h>
-}
+#include <glib.h>
 
 #include <pan/general/debug.h>
 #include <pan/general/quark.h>
diff --git a/pan/tasks/socket.cc b/pan/tasks/socket.cc
index 78d53fb..2c7a28d 100644
--- a/pan/tasks/socket.cc
+++ b/pan/tasks/socket.cc
@@ -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 --git a/pan/usenet-utils/filter-info.cc b/pan/usenet-utils/filter-info.cc
index f464428..6b1a5c9 100644
--- a/pan/usenet-utils/filter-info.cc
+++ b/pan/usenet-utils/filter-info.cc
@@ -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 --git a/pan/usenet-utils/message-check.cc b/pan/usenet-utils/message-check.cc
index a511556..461ce86 100644
--- a/pan/usenet-utils/message-check.cc
+++ b/pan/usenet-utils/message-check.cc
@@ -21,9 +21,7 @@
 #include <ctype.h>
 #include <string.h>
 #include <glib.h>
-extern "C" {
 #include <glib/gi18n.h>
-}
 #include <pan/general/debug.h>
 #include <pan/general/macros.h>
 #include <pan/general/string-view.h>
diff --git a/pan/usenet-utils/rules-info.cc b/pan/usenet-utils/rules-info.cc
index 1c03adc..91e78be 100644
--- a/pan/usenet-utils/rules-info.cc
+++ b/pan/usenet-utils/rules-info.cc
@@ -22,10 +22,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 "rules-info.h"
 
diff --git a/pan/usenet-utils/text-massager.cc b/pan/usenet-utils/text-massager.cc
index 4fcd8d5..15a818b 100644
--- a/pan/usenet-utils/text-massager.cc
+++ b/pan/usenet-utils/text-massager.cc
@@ -22,9 +22,7 @@
 #include <map>
 #include <cstring>
 #include <glib.h>
-extern "C" {
 #include <glib/gi18n.h>
-}
 #include "text-massager.h"
 #include <pan/general/log.h>
 #include <pan/general/e-util.h>
-- 
2.32.0

>From 91d03b99b3a51a430048f33c6168315deaac415f Mon Sep 17 00:00:00 2001
From: Simon McVittie <s...@debian.org>
Date: Tue, 17 Aug 2021 10:55:37 +0100
Subject: [PATCH 2/2] Move more header inclusions outside extern "C"

GLib/GObject/GIO, GTK, GMime, Enchant, Zlib and the bundled uulib
library are all well-behaved/C++-friendly C libraries that provide
extern "C" wrappers in their header files, either directly or via
GLib's G_BEGIN_DECLS/G_END_DECLS macros. As a result, there is no need
to wrap their header inclusions in a redundant extern "C" block.

The redundant extern "C" can be harmful in some cases, where an otherwise
C-based library detects that its headers are being compiled as C++ via
the __cplusplus macro and changes its compile-time behaviour accordingly.
In particular, GLib 2.68 uses C++ features to implement the glib_typeof
macro where available, so that it can make macros like g_object_ref()
more type-safe. This results in GLib headers failing to compile when
wrapped in a redundant extern "C" block.

On glibc-based systems (and probably every other reasonable Unix
implementation), the Standard C library headers also do not require
wrapping in an extern "C" block, but it might be the case that there
are older Unix systems where the extern "C" block is required. I have
not moved those header inclusions outside extern "C" in this commit,
although perhaps they should be.

Bug: https://gitlab.gnome.org/GNOME/pan/-/issues/128
Forwarded: https://gitlab.gnome.org/GNOME/pan/-/merge_requests/15
Signed-off-by: Simon McVittie <s...@debian.org>
---
 pan/data-impl/data-impl.cc       |  4 +---
 pan/data-impl/xover.cc           |  6 ++----
 pan/data/article-cache.cc        |  4 ++--
 pan/data/encode-cache.cc         |  4 ++--
 pan/general/line-reader.cc       |  4 +---
 pan/general/utf8-utils.cc        |  2 --
 pan/gui/actions.cc               |  6 ++----
 pan/gui/body-pane.cc             |  8 +++-----
 pan/gui/dl-headers-ui.cc         |  4 +---
 pan/gui/group-pane.cc            |  6 ++----
 pan/gui/group-prefs-dialog.cc    |  6 ++----
 pan/gui/gui.cc                   |  2 +-
 pan/gui/header-pane.cc           |  9 +++------
 pan/gui/log-ui.cc                |  6 ++----
 pan/gui/pan-file-entry.cc        |  6 ++----
 pan/gui/pan.cc                   | 11 ++++++-----
 pan/gui/post-ui.cc               |  8 ++++----
 pan/gui/prefs-ui.cc              |  6 ++----
 pan/gui/profiles-dialog.cc       |  6 ++----
 pan/gui/progress-view.cc         |  4 +---
 pan/gui/save-attach-ui.cc        |  6 ++----
 pan/gui/save-ui.cc               |  6 ++----
 pan/gui/score-add-ui.cc          |  4 +---
 pan/gui/score-view-ui.cc         |  6 ++----
 pan/gui/server-ui.cc             |  4 +---
 pan/gui/task-pane.cc             |  4 +---
 pan/tasks/decoder.cc             |  8 +++-----
 pan/tasks/decoder.h              |  6 ++----
 pan/tasks/encoder.cc             |  2 +-
 pan/tasks/encoder.h              |  8 +++-----
 pan/tasks/socket-impl-gio.cc     |  2 +-
 pan/tasks/socket-impl-openssl.cc |  2 +-
 pan/tasks/task-article.cc        |  5 +----
 pan/tasks/task-groups.cc         |  2 +-
 pan/tasks/task-post.cc           |  4 +---
 pan/tasks/task-upload.h          | 10 ++++------
 pan/tasks/task-xover.cc          |  7 +++----
 pan/tasks/task-xoverinfo.cc      | 10 +++++-----
 pan/usenet-utils/gnksa.cc        |  2 +-
 pan/usenet-utils/gpg.cc          |  5 +++--
 pan/usenet-utils/mime-utils.cc   |  2 +-
 pan/usenet-utils/scorefile.cc    |  4 +---
 pan/usenet-utils/ssl-utils.h     |  4 +---
 43 files changed, 83 insertions(+), 142 deletions(-)

diff --git a/pan/data-impl/data-impl.cc b/pan/data-impl/data-impl.cc
index 215be61..4465966 100644
--- a/pan/data-impl/data-impl.cc
+++ b/pan/data-impl/data-impl.cc
@@ -22,9 +22,7 @@
 **************/
 
 #include <config.h>
-extern "C" {
-  #include <glib/gi18n.h>
-}
+#include <glib/gi18n.h>
 #include <glib.h> // for g_build_filename
 #include <pan/general/debug.h>
 #include <pan/general/file-util.h>
diff --git a/pan/data-impl/xover.cc b/pan/data-impl/xover.cc
index ff8644f..a199556 100644
--- a/pan/data-impl/xover.cc
+++ b/pan/data-impl/xover.cc
@@ -20,10 +20,8 @@
 #include <config.h>
 #include <cmath>
 #include <fstream>
-extern "C" {
-  #include <glib/gi18n.h>
-  #include <gmime/gmime.h>
-}
+#include <glib/gi18n.h>
+#include <gmime/gmime.h>
 #include <pan/general/debug.h>
 #include <pan/general/log.h>
 #include <pan/general/macros.h>
diff --git a/pan/data/article-cache.cc b/pan/data/article-cache.cc
index 2b97344..2130f2d 100644
--- a/pan/data/article-cache.cc
+++ b/pan/data/article-cache.cc
@@ -26,9 +26,9 @@ extern "C"
   #include <sys/stat.h>
   #include <unistd.h>
   #include <dirent.h>
-
-  #include <gmime/gmime.h>
 }
+
+#include <gmime/gmime.h>
 #include <glib.h>
 #include <glib/gi18n.h>
 
diff --git a/pan/data/encode-cache.cc b/pan/data/encode-cache.cc
index eecd1d1..d66ec5a 100644
--- a/pan/data/encode-cache.cc
+++ b/pan/data/encode-cache.cc
@@ -28,9 +28,9 @@ extern "C"
   #include <sys/stat.h>
   #include <unistd.h>
   #include <dirent.h>
-
-  #include <gmime/gmime.h>
 }
+
+#include <gmime/gmime.h>
 #include <glib.h>
 #include <glib/gi18n.h>
 
diff --git a/pan/general/line-reader.cc b/pan/general/line-reader.cc
index afb9be8..6b80fc4 100644
--- a/pan/general/line-reader.cc
+++ b/pan/general/line-reader.cc
@@ -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 --git a/pan/general/utf8-utils.cc b/pan/general/utf8-utils.cc
index be79a13..fea6100 100644
--- a/pan/general/utf8-utils.cc
+++ b/pan/general/utf8-utils.cc
@@ -21,9 +21,7 @@
 #include <string>
 #include <vector>
 #include <string.h>
-extern "C" {
 #include <glib/gi18n.h>
-}
 #include <locale.h>
 #include <gmime/gmime.h>
 #include <pan/general/debug.h>
diff --git a/pan/gui/actions.cc b/pan/gui/actions.cc
index 520c08b..453a53d 100644
--- a/pan/gui/actions.cc
+++ b/pan/gui/actions.cc
@@ -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/macros.h>
 #include <pan/general/debug.h>
diff --git a/pan/gui/body-pane.cc b/pan/gui/body-pane.cc
index 53e9124..83c44ee 100644
--- a/pan/gui/body-pane.cc
+++ b/pan/gui/body-pane.cc
@@ -22,11 +22,9 @@
 #include <cmath>
 #include <iostream>
 #include <sstream>
-extern "C" {
-  #include <glib/gi18n.h>
-  #include "gtk-compat.h"
-  #include <gmime/gmime.h>
-}
+#include <glib/gi18n.h>
+#include "gtk-compat.h"
+#include <gmime/gmime.h>
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <pan/general/debug.h>
 #include <pan/general/log.h>
diff --git a/pan/gui/dl-headers-ui.cc b/pan/gui/dl-headers-ui.cc
index cfc536d..e9f4b2d 100644
--- a/pan/gui/dl-headers-ui.cc
+++ b/pan/gui/dl-headers-ui.cc
@@ -20,9 +20,7 @@
 #include <config.h>
 #include <glib.h>
 #include <glib/gi18n.h>
-extern "C" {
-  #include "gtk-compat.h"
-}
+#include "gtk-compat.h"
 #include <pan/general/macros.h>
 #include <pan/tasks/queue.h>
 #include <pan/tasks/task-xover.h>
diff --git a/pan/gui/group-pane.cc b/pan/gui/group-pane.cc
index 28ad581..e4ac62e 100644
--- a/pan/gui/group-pane.cc
+++ b/pan/gui/group-pane.cc
@@ -20,10 +20,8 @@
 #include <config.h>
 #include <cassert>
 #include <deque>
-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/gdk-threads.h>
 #include <pan/general/log.h>
diff --git a/pan/gui/group-prefs-dialog.cc b/pan/gui/group-prefs-dialog.cc
index 6983746..2ec5c84 100644
--- a/pan/gui/group-prefs-dialog.cc
+++ b/pan/gui/group-prefs-dialog.cc
@@ -20,12 +20,10 @@
 #include <config.h>
 #include <glib/gi18n.h>
 #include <glib.h>
-extern "C" {
-  #include "gtk-compat.h"
+#include "gtk-compat.h"
 #ifdef HAVE_GTKSPELL
-  #include <enchant/enchant.h>
+#include <enchant/enchant.h>
 #endif
-}
 #include <pan/general/debug.h>
 #include <pan/general/macros.h>
 #include <pan/data/data.h>
diff --git a/pan/gui/gui.cc b/pan/gui/gui.cc
index f79aa1e..9f8787e 100644
--- a/pan/gui/gui.cc
+++ b/pan/gui/gui.cc
@@ -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 --git a/pan/gui/header-pane.cc b/pan/gui/header-pane.cc
index dc65a77..f9a4cb0 100644
--- a/pan/gui/header-pane.cc
+++ b/pan/gui/header-pane.cc
@@ -17,12 +17,9 @@
  *
  */
 
-extern "C" {
-  #include <config.h>
-  #include <glib/gi18n.h>
-  #include "gtk-compat.h"
-  #include "gtk-compat.h"
-}
+#include <config.h>
+#include <glib/gi18n.h>
+#include "gtk-compat.h"
 #include <cctype>
 #include <cmath>
 #include <algorithm>
diff --git a/pan/gui/log-ui.cc b/pan/gui/log-ui.cc
index 7b11493..8846e1d 100644
--- a/pan/gui/log-ui.cc
+++ b/pan/gui/log-ui.cc
@@ -21,10 +21,8 @@
 #include <ostream>
 #include <fstream>
 #include <iostream>
-extern "C" {
-  #include <glib/gi18n.h>
-  #include "gtk-compat.h"
-}
+#include <glib/gi18n.h>
+#include "gtk-compat.h"
 #include <pan/general/log.h>
 #include <pan/general/macros.h>
 #include <pan/general/string-view.h>
diff --git a/pan/gui/pan-file-entry.cc b/pan/gui/pan-file-entry.cc
index 705fc91..f86c845 100644
--- a/pan/gui/pan-file-entry.cc
+++ b/pan/gui/pan-file-entry.cc
@@ -19,10 +19,8 @@
 
 #include <config.h>
 #include <string>
-extern "C" {
-  #include <glib/gi18n.h>
-  #include "gtk-compat.h"
-}
+#include <glib/gi18n.h>
+#include "gtk-compat.h"
 #include <pan/general/file-util.h>
 #include "pad.h"
 #include "pan-file-entry.h"
diff --git a/pan/gui/pan.cc b/pan/gui/pan.cc
index fb3a696..3eb4214 100644
--- a/pan/gui/pan.cc
+++ b/pan/gui/pan.cc
@@ -22,18 +22,19 @@
 #include <fstream>
 #include <config.h>
 #include <signal.h>
+#include <glib/gi18n.h>
+#include "gtk-compat.h"
+#include <gmime/gmime.h>
+#include <gio/gio.h>
 
 extern "C" {
-  #include <glib/gi18n.h>
-  #include "gtk-compat.h"
-  #include <gmime/gmime.h>
-  #include <gio/gio.h>
   #include <sys/types.h>
   #include <sys/stat.h>
   #include <unistd.h>
-  #include <uulib/crc32.h>
 }
 
+#include <uulib/crc32.h>
+
 #ifdef G_OS_WIN32
   #undef _WIN32_WINNT
   #define _WIN32_WINNT 0x0501
diff --git a/pan/gui/post-ui.cc b/pan/gui/post-ui.cc
index 8769ec5..060f722 100644
--- a/pan/gui/post-ui.cc
+++ b/pan/gui/post-ui.cc
@@ -22,15 +22,15 @@
 #include <iostream>
 #include <sstream>
 #include <unistd.h>
+#include <gmime/gmime.h>
+#include <glib/gi18n.h>
+#include "gtk-compat.h"
 extern "C" {
-  #include <gmime/gmime.h>
-  #include <glib/gi18n.h>
-  #include "gtk-compat.h"
   #include <sys/time.h>
+}
 #ifdef HAVE_GTKSPELL
   #include <gtkspell/gtkspell.h>
 #endif
-}
 #include <pan/data/data.h>
 #include <pan/general/debug.h>
 #include <pan/general/file-util.h>
diff --git a/pan/gui/prefs-ui.cc b/pan/gui/prefs-ui.cc
index f7dc0f0..da0a013 100644
--- a/pan/gui/prefs-ui.cc
+++ b/pan/gui/prefs-ui.cc
@@ -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 --git a/pan/gui/profiles-dialog.cc b/pan/gui/profiles-dialog.cc
index 26ff029..cf94695 100644
--- a/pan/gui/profiles-dialog.cc
+++ b/pan/gui/profiles-dialog.cc
@@ -23,10 +23,8 @@
 
 #include <config.h>
 #include <iostream>
-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/usenet-utils/gnksa.h>
diff --git a/pan/gui/progress-view.cc b/pan/gui/progress-view.cc
index 241ad1c..43ef4f2 100644
--- a/pan/gui/progress-view.cc
+++ b/pan/gui/progress-view.cc
@@ -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 --git a/pan/gui/save-attach-ui.cc b/pan/gui/save-attach-ui.cc
index 0b08b6f..7082ab8 100644
--- a/pan/gui/save-attach-ui.cc
+++ b/pan/gui/save-attach-ui.cc
@@ -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 --git a/pan/gui/save-ui.cc b/pan/gui/save-ui.cc
index 0f034e5..ffa4adb 100644
--- a/pan/gui/save-ui.cc
+++ b/pan/gui/save-ui.cc
@@ -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 --git a/pan/gui/score-add-ui.cc b/pan/gui/score-add-ui.cc
index e72bdb5..3b81167 100644
--- a/pan/gui/score-add-ui.cc
+++ b/pan/gui/score-add-ui.cc
@@ -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 --git a/pan/gui/score-view-ui.cc b/pan/gui/score-view-ui.cc
index d6c81c1..4c8b768 100644
--- a/pan/gui/score-view-ui.cc
+++ b/pan/gui/score-view-ui.cc
@@ -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 --git a/pan/gui/server-ui.cc b/pan/gui/server-ui.cc
index 684ea0c..268114b 100644
--- a/pan/gui/server-ui.cc
+++ b/pan/gui/server-ui.cc
@@ -23,9 +23,7 @@
 #include <climits>
 #include <glib.h>
 #include <glib/gi18n.h>
-extern "C" {
-  #include "gtk-compat.h"
-}
+#include "gtk-compat.h"
 
 #include <pan/icons/pan-pixbufs.h>
 #include <pan/general/file-util.h>
diff --git a/pan/gui/task-pane.cc b/pan/gui/task-pane.cc
index 1c302f9..18a8f74 100644
--- a/pan/gui/task-pane.cc
+++ b/pan/gui/task-pane.cc
@@ -20,9 +20,7 @@
 #include <config.h>
 #include <glib.h>
 #include <glib/gi18n.h>
-extern "C" {
-  #include "gtk-compat.h"
-}
+#include "gtk-compat.h"
 #include <pan/general/e-util.h>
 #include <pan/general/debug.h>
 #include <pan/general/file-util.h>
diff --git a/pan/tasks/decoder.cc b/pan/tasks/decoder.cc
index b4c21ae..bdfe7cc 100644
--- a/pan/tasks/decoder.cc
+++ b/pan/tasks/decoder.cc
@@ -25,11 +25,9 @@
 #include <cerrno>
 #include <ostream>
 #include <fstream>
-extern "C" {
-#  define PROTOTYPES
-#  include <uulib/uudeview.h>
-#  include <glib/gi18n.h>
-};
+#define PROTOTYPES
+#include <uulib/uudeview.h>
+#include <glib/gi18n.h>
 #include <pan/general/worker-pool.h>
 #include <pan/general/debug.h>
 #include <pan/general/file-util.h>
diff --git a/pan/tasks/decoder.h b/pan/tasks/decoder.h
index 74403c1..c5653e4 100644
--- a/pan/tasks/decoder.h
+++ b/pan/tasks/decoder.h
@@ -30,10 +30,8 @@
 #include <pan/general/locking.h>
 #include <pan/general/worker-pool.h>
 #include <pan/tasks/task-article.h>
-extern "C" {
-#  define PROTOTYPES
-#  include <uulib/uudeview.h>
-};
+#define PROTOTYPES
+#include <uulib/uudeview.h>
 
 namespace pan
 {
diff --git a/pan/tasks/encoder.cc b/pan/tasks/encoder.cc
index 7960b84..fad9a63 100644
--- a/pan/tasks/encoder.cc
+++ b/pan/tasks/encoder.cc
@@ -28,10 +28,10 @@
 #include <fstream>
 #include <sstream>
 
-extern "C" {
 #define PROTOTYPES
 #include <uulib/uudeview.h>
 #include <glib/gi18n.h>
+extern "C" {
 #include <sys/time.h>
 };
 
diff --git a/pan/tasks/encoder.h b/pan/tasks/encoder.h
index a547ffe..12d2a8c 100644
--- a/pan/tasks/encoder.h
+++ b/pan/tasks/encoder.h
@@ -32,11 +32,9 @@
 #include <pan/general/worker-pool.h>
 #include <pan/tasks/task-upload.h>
 
-extern "C" {
-#  define PROTOTYPES
-#  include <uulib/uudeview.h>
-#  include <uulib/crc32.h>
-};
+#define PROTOTYPES
+#include <uulib/uudeview.h>
+#include <uulib/crc32.h>
 
 namespace pan
 {
diff --git a/pan/tasks/socket-impl-gio.cc b/pan/tasks/socket-impl-gio.cc
index d3339dd..7dc2ec1 100644
--- a/pan/tasks/socket-impl-gio.cc
+++ b/pan/tasks/socket-impl-gio.cc
@@ -31,9 +31,9 @@
 
 extern "C" {
   #include <unistd.h>
-  #include <glib/gi18n.h>
 }
 
+#include <glib/gi18n.h>
 #include <pan/general/file-util.h>
 #include <pan/general/log.h>
 #include <pan/general/macros.h>
diff --git a/pan/tasks/socket-impl-openssl.cc b/pan/tasks/socket-impl-openssl.cc
index b58e074..d08b952 100644
--- a/pan/tasks/socket-impl-openssl.cc
+++ b/pan/tasks/socket-impl-openssl.cc
@@ -34,13 +34,13 @@
 
 extern "C" {
   #include <unistd.h>
-  #include <glib/gi18n.h>
   #include <errno.h>
   #include <fcntl.h>
   #include <sys/time.h>
   #include <sys/types.h>
 }
 
+#include <glib/gi18n.h>
 #include <pan/usenet-utils/ssl-utils.h>
 #include <pan/general/file-util.h>
 #include <pan/general/log.h>
diff --git a/pan/tasks/task-article.cc b/pan/tasks/task-article.cc
index 9c96b7d..1dc17ba 100644
--- a/pan/tasks/task-article.cc
+++ b/pan/tasks/task-article.cc
@@ -24,10 +24,7 @@
 #include <config.h>
 #include <algorithm>
 #include <cassert>
-extern "C"
-{
-  #include <glib/gi18n.h>
-}
+#include <glib/gi18n.h>
 #include <pan/general/debug.h>
 #include <pan/general/file-util.h>
 #include <pan/general/utf8-utils.h>
diff --git a/pan/tasks/task-groups.cc b/pan/tasks/task-groups.cc
index b8618d6..c455808 100644
--- a/pan/tasks/task-groups.cc
+++ b/pan/tasks/task-groups.cc
@@ -19,8 +19,8 @@
 
 #include <config.h>
 #include <cassert>
+#include <glib/gi18n.h>
 extern "C" {
-  #include <glib/gi18n.h>
   #include <stdlib.h>
 }
 #include <pan/general/debug.h>
diff --git a/pan/tasks/task-post.cc b/pan/tasks/task-post.cc
index bb80fb9..4ab9c2f 100644
--- a/pan/tasks/task-post.cc
+++ b/pan/tasks/task-post.cc
@@ -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 --git a/pan/tasks/task-upload.h b/pan/tasks/task-upload.h
index 7bd4fe0..f680316 100644
--- a/pan/tasks/task-upload.h
+++ b/pan/tasks/task-upload.h
@@ -34,12 +34,10 @@
 #include <pan/tasks/nntp.h>
 #include <pan/tasks/task.h>
 
-extern "C" {
-  #define PROTOTYPES
-  #include <uulib/uudeview.h>
-  #include <gmime/gmime.h>
-  #include <glib/gi18n.h>
-};
+#define PROTOTYPES
+#include <uulib/uudeview.h>
+#include <gmime/gmime.h>
+#include <glib/gi18n.h>
 
 #include <set>
 
diff --git a/pan/tasks/task-xover.cc b/pan/tasks/task-xover.cc
index c3c8260..8835503 100644
--- a/pan/tasks/task-xover.cc
+++ b/pan/tasks/task-xover.cc
@@ -21,14 +21,13 @@
 #include <cassert>
 #include <cerrno>
 
-extern "C"
-{
-#define PROTOTYPES
+extern "C" {
 #include <stdio.h>
+}
+#define PROTOTYPES
 #include <uulib/uudeview.h>
 #include <glib/gi18n.h>
 #include <gmime/gmime-utils.h>
-}
 
 #include <fstream>
 #include <iostream>
diff --git a/pan/tasks/task-xoverinfo.cc b/pan/tasks/task-xoverinfo.cc
index c598bf8..210b9bd 100644
--- a/pan/tasks/task-xoverinfo.cc
+++ b/pan/tasks/task-xoverinfo.cc
@@ -21,13 +21,13 @@
 #include <cassert>
 #include <cerrno>
 extern "C" {
-  #define PROTOTYPES
   #include <stdio.h>
-  #include <uulib/uudeview.h>
-  #include <glib/gi18n.h>
-  #include <gmime/gmime-utils.h>
-  #include <zlib.h>
 }
+#define PROTOTYPES
+#include <uulib/uudeview.h>
+#include <glib/gi18n.h>
+#include <gmime/gmime-utils.h>
+#include <zlib.h>
 #include <fstream>
 #include <iostream>
 #include <pan/general/debug.h>
diff --git a/pan/usenet-utils/gnksa.cc b/pan/usenet-utils/gnksa.cc
index db1f2c4..fb888d5 100644
--- a/pan/usenet-utils/gnksa.cc
+++ b/pan/usenet-utils/gnksa.cc
@@ -37,10 +37,10 @@ extern "C"
 {
   #include <ctype.h>
   #include <unistd.h>
-  #include <glib/gi18n.h>
   #include <sys/time.h>
 }
 
+#include <glib/gi18n.h>
 #include <pan/general/debug.h>
 #include <pan/general/macros.h>
 #include <pan/general/log.h>
diff --git a/pan/usenet-utils/gpg.cc b/pan/usenet-utils/gpg.cc
index 4df4525..0c3ae14 100644
--- a/pan/usenet-utils/gpg.cc
+++ b/pan/usenet-utils/gpg.cc
@@ -28,10 +28,11 @@ extern "C" {
   #include <stdlib.h>
   #include <unistd.h>
   #include <string.h>
-  #include <glib/gi18n.h>
-  #include <gmime/gmime.h>
 }
 
+#include <glib/gi18n.h>
+#include <gmime/gmime.h>
+
 #ifdef HAVE_GMIME_CRYPTO
 
 namespace pan
diff --git a/pan/usenet-utils/mime-utils.cc b/pan/usenet-utils/mime-utils.cc
index 881df7b..5e185db 100644
--- a/pan/usenet-utils/mime-utils.cc
+++ b/pan/usenet-utils/mime-utils.cc
@@ -26,8 +26,8 @@
 extern "C"
 {
   #include <unistd.h>
-  #include <gmime/gmime.h>
 }
+#include <gmime/gmime.h>
 #include <pan/general/debug.h>
 #include <pan/general/macros.h>
 #include <pan/general/messages.h>
diff --git a/pan/usenet-utils/scorefile.cc b/pan/usenet-utils/scorefile.cc
index 8b56a2a..4b151f0 100644
--- a/pan/usenet-utils/scorefile.cc
+++ b/pan/usenet-utils/scorefile.cc
@@ -23,9 +23,7 @@
 #include <iostream>
 #include <sstream>
 #include <string>
-extern "C" {
-  #include <glib/gi18n.h>
-}
+#include <glib/gi18n.h>
 #include <pan/general/debug.h>
 #include <pan/general/log.h>
 #include <pan/general/macros.h>
diff --git a/pan/usenet-utils/ssl-utils.h b/pan/usenet-utils/ssl-utils.h
index 2286250..0beb32f 100644
--- a/pan/usenet-utils/ssl-utils.h
+++ b/pan/usenet-utils/ssl-utils.h
@@ -43,9 +43,7 @@
 #include <map>
 #include <sstream>
 #include <iostream>
-extern "C" {
-  #include <glib/gi18n.h>
-}
+#include <glib/gi18n.h>
 
 namespace pan
 {
-- 
2.32.0

>From 002f9b96a20a0d863151c68a5134ccc5eeb0f3c8 Mon Sep 17 00:00:00 2001
From: Simon McVittie <s...@debian.org>
Date: Tue, 17 Aug 2021 10:22:20 +0100
Subject: [PATCH] build: Target a specific GLib API version

Since GLib 2.32 (2012), setting GLIB_VERSION_MIN_REQUIRED selects the
minimum required version of GLib for this project. Code that was
deprecated after that version will not cause deprecation warnings, and
where header files have changed their compile-time behaviour over time,
the behaviour that was seen in the selected version will be used where
possible. pan officially only requires GLib 2.17 if D-Bus is not enabled,
but 2.26 is required for D-Bus and is also the oldest version for which
version macros are provided, so behave as though that is the minimum.

In particular, this disables new C++ behaviour introduced in GLib 2.68,
which caused this project to fail to build.

Similarly, setting GLIB_VERSION_MAX_ALLOWED causes GLib to emit warnings
if a function introduced after the selected version is used, even inside
a GLIB_CHECK_VERSION guard. The newest GLIB_CHECK_VERSION in pan seems
to be for GLib 2.36 (2013), so use that.

Bug: https://gitlab.gnome.org/GNOME/pan/-/issues/128
Forwarded: https://gitlab.gnome.org/GNOME/pan/-/merge_requests/16
Signed-off-by: Simon McVittie <s...@debian.org>
---
 configure.ac | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/configure.ac b/configure.ac
index 69a1d4d..a986003 100644
--- a/configure.ac
+++ b/configure.ac
@@ -112,6 +112,16 @@ if test "x$want_dbus" = "xyes" ; then
 else
   AM_PATH_GLIB_2_0($GLIB_REQUIRED,,exit 1,gobject gmodule gthread)
 fi
+dnl Silence deprecation warnings for things deprecated before 2.26,
+dnl and generally set the target behaviour to be like GLib 2.26.
+dnl In principle this should match $GLIB_REQUIRED, but 2.26 is the oldest
+dnl version for which the macros exist (and has been unsupported since
+dnl around 2011 in any case).
+GLIB_CFLAGS="$GLIB_CFLAGS -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26"
+dnl Highest version number from which new features are allowed to be used,
+dnl even within a GLIB_CHECK_VERSION check. GLib will produce compile-time
+dnl warnings when features of a newer GLib version are used.
+GLIB_CFLAGS="$GLIB_CFLAGS -DGLIB_VERSION_MAX_ALLOWED=G_ENCODE_VERSION\\(2,36\\)"
 
 dnl Check for GMime
 AC_ARG_WITH([gmime30],
-- 
2.32.0

Reply via email to