GnuCash
Contact   Instructions
Bug 798156 - glib 2.68.0 breaks gnucash
Summary: glib 2.68.0 breaks gnucash
Status: RESOLVED FIXED
Alias: None
Product: GnuCash
Classification: Unclassified
Component: General (show other bugs)
Version: 4.5
Hardware: PC All
: Normal blocker
Target Milestone: ---
Assignee: general
QA Contact: general
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-03-31 16:21 EDT by Thomas Klausner
Modified: 2021-04-20 14:05 EDT (History)
3 users (show)

See Also:


Attachments

Description Thomas Klausner 2021-03-31 16:21:13 EDT
There is a breaking change in glib 2.68.0:

https://bugzilla.redhat.com/show_bug.cgi?id=1926239
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1935#note_1034039

In short, the glib headers cannot be included in ``extern "C"'' any longer.

This breaks gnucash 4.4 and 4.5. A lot of error output, looking basically like this:


In file included from /usr/pkg/include/glib-2.0/glib/gatomic.h:31,
                 from /usr/pkg/include/glib-2.0/glib/gthread.h:32,
                 from /usr/pkg/include/glib-2.0/glib/gasyncqueue.h:32,
                 from /usr/pkg/include/glib-2.0/glib.h:32,
                 from /scratch/finance/gnucash/work/gnucash-4.5/libgnucash/engine/SchedXaction.h:42,
                 from /scratch/finance/gnucash/work/gnucash-4.5/gnucash/gnome/assistant-loan.cpp:33:
/usr/include/g++/type_traits:3024:3: error: template with C linkage
 3024 |   template<typename _Tp>
      |   ^~~~~~~~
/scratch/finance/gnucash/work/gnucash-4.5/gnucash/gnome/assistant-loan.cpp:26:1: note: 'extern "C"' linkage started here
   26 | extern "C"
      | ^~~~~~~~~~

The glib includes are sometimes in other includes - here in SchedXAction.h, so it's not easy to see what needs to be moved.
Comment 1 John Ralls 2021-03-31 21:11:21 EDT
Rats. assistant_loan.cpp was modified as part of https://github.com/Gnucash/gnucash/pull/912 for this exact problem, but Bill put the glib include after the extern "C" block so it gets included first from SchedXAction.h. We had to do a bunch more to get CI tests to pass on Arch Linux as it had picked up the changes in the meantime.

It's obvious what to do, but I'm a bit curious about why it works on Arch but still fails for you. Are you perhaps building with clang?
Comment 2 Thomas Klausner 2021-04-01 03:46:08 EDT
No clang, that's with gcc 9.3.0.
I tried turning off aqbanking, ofx, dbi but that didn't help.
I'm not sure what the difference is, sorry.

I played around a bit and found a diff that made it compile on my system:

--- gnucash/gnome/assistant-loan.cpp.orig       2021-03-26 23:08:11.000000000 +0000
+++ gnucash/gnome/assistant-loan.cpp
@@ -23,6 +23,10 @@
  * Boston, MA  02110-1301,  USA       gnu@gnu.org                   *
 \********************************************************************/
 
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
 extern "C"
 {
 #include <config.h>
@@ -50,9 +54,6 @@ extern "C"
 #endif
 }
 
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
 #include <gnc-locale-utils.hpp>
 #include <boost/locale.hpp>
 #include <string>


I guess glib's multiple-inclusion-protection in the header saves us here :)
Comment 3 John Ralls 2021-04-01 11:47:01 EDT
> I guess glib's multiple-inclusion-protection in the header saves us here :)

Exactly. It's also what kills us when #include <glib.h> is after the extern "C" block.

Interesting as well that fixing this one instance gets GnuCash to build: There are several more in the original commit.
Comment 4 Thomas Klausner 2021-04-01 12:02:00 EDT
Sorry, that's the one I need on top of gnucash 4.5.
Comment 5 John Ralls 2021-04-20 14:05:58 EDT
Fixed for 4.6. I've moved all of the includes from PR 912.

Note You need to log in before you can comment on or make changes to this bug.