Bug 1318171

Summary: wxGTK3: Request for Rebuild to fix C++ ABI incompatibility aborts
Product: [Fedora] Fedora Reporter: Marcus Müller <mmueller>
Component: wxGTK3Assignee: Lubomir Rintel <lkundrak>
Status: CLOSED NOTABUG QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: high Docs Contact:
Priority: unspecified    
Version: 22CC: alexjnewt, lkundrak, sergio, swt
Target Milestone: ---Keywords: ABIAssurance, EasyFix
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-03-20 15:22:26 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Marcus Müller 2016-03-16 08:39:35 UTC
Description of problem:

As discussed https://bugzilla.redhat.com/show_bug.cgi?id=1200611 , running applications linked against wxGTK3, built using current (3.0.2, 15.fc22) wx-GTK3 and -devel packages fails:

Fatal Error: Mismatch between the program and library build versions detected.
The library used 3.0 (wchar_t,compiler with C++ ABI 1008,wx containers,compatible with 2.8),
and your program used 3.0 (wchar_t,compiler with C++ ABI 1009,wx containers,compatible with 2.8).

Version-Release number of selected component (if applicable):

 wx-GTK3 3.0.2. 15.fc22

How reproducible:

always. Internet search shows the same problem exists for ArchLinux.


Steps to Reproduce:

1. dnf install wxGTK3 wxGTK3-devel
2. <link program against wxGTK3, e.g. kicad>
3. <run program, e.g. kicad>

Actual results:

ABORT

Expected results:

Smooth running.

Additional info:

This shouldn't happen. 

However, getting the SRPM, and doing a simple `rpmbuild --rebuild` on it and using these packages fixes the problem.

Hence, wxGTK3 should be rebuild using the currently shipped GCC/g++, and also all depending packages, which then would be, according to `dnf repoquery --whatrequires libwx_gtk3u_core-3.0.so.0 |grep -o '.*-0'|sort|uniq`:

fityk-0
saga-0
wxGTK3-devel-0
wxGTK3-gl-0
wxGTK3-media-0

i.e. aside from the wxGTK3 packages themselves, only fityk and saga

Comment 1 Scott Talbert 2016-03-17 00:22:30 UTC
Ah.  I see now the problem and why this didn't make sense to me.  You're using the Gtk2 build of wxWidgets 3.0, which is a different package and apparently still aborts (rather than warns) on the ABI mismatch.  Reassigning to that package.

Comment 2 Jeremy Newton 2016-03-17 14:18:20 UTC
(In reply to Scott Talbert from comment #1)
> Ah.  I see now the problem and why this didn't make sense to me.  You're
> using the Gtk2 build of wxWidgets 3.0, which is a different package and
> apparently still aborts (rather than warns) on the ABI mismatch. 
> Reassigning to that package.

Ah, that explains my confusion. I believe the last build of compat-wxGTK3-gtk2 failed, so it probably needs some patching and a rebuild for rawhide as well.

Comment 3 Sergio Basto 2016-03-17 16:10:34 UTC
I think something similar is happening in wxGTK-2.8.12-19.fc23.x86_64, for example: mediainfo-gui

Warning: Mismatch between the program and library build versions detected.
The library used 2.8 (no debug,Unicode,compiler with C++ ABI 1008,wx containers,compatible with 2.4,compatible with 2.6),
and your program used 2.8 (no debug,Unicode,compiler with C++ ABI 1009,wx containers,compatible with 2.4,compatible with 2.6).

Comment 4 Scott Talbert 2016-03-18 00:07:27 UTC
(In reply to Jeremy Newton from comment #2)
> (In reply to Scott Talbert from comment #1)
> > Ah.  I see now the problem and why this didn't make sense to me.  You're
> > using the Gtk2 build of wxWidgets 3.0, which is a different package and
> > apparently still aborts (rather than warns) on the ABI mismatch. 
> > Reassigning to that package.
> 
> Ah, that explains my confusion. I believe the last build of
> compat-wxGTK3-gtk2 failed, so it probably needs some patching and a rebuild
> for rawhide as well.

Yes, a simple rebuild in F22 should fix this particular issue, but yes, the package needs some attention in Rawhide - probably the same patches I did in wxGTK3.

Speaking of which, is there a reason we don't just build the compat-wxGTK3-gtk2 packages out of the wxGTK3 package?  It seems like a bit of duplicated effort to maintain it separately.

Comment 5 Scott Talbert 2016-03-18 00:12:42 UTC
(In reply to Sergio Monteiro Basto from comment #3)
> I think something similar is happening in wxGTK-2.8.12-19.fc23.x86_64, for
> example: mediainfo-gui
> 
> Warning: Mismatch between the program and library build versions detected.
> The library used 2.8 (no debug,Unicode,compiler with C++ ABI 1008,wx
> containers,compatible with 2.4,compatible with 2.6),
> and your program used 2.8 (no debug,Unicode,compiler with C++ ABI 1009,wx
> containers,compatible with 2.4,compatible with 2.6).

Yes, wxGTK package probably also needs to be rebuilt.  You should file a separate bug for that.

Comment 6 Sergio Basto 2016-03-18 00:27:36 UTC
(In reply to Scott Talbert from comment #5)
> Yes, wxGTK package probably also needs to be rebuilt.  You should file a
> separate bug for that.

Done https://bugzilla.redhat.com/show_bug.cgi?id=1318841 
Thanks ,

Comment 7 Marcus Müller 2016-03-18 09:14:40 UTC
> Ah.  I see now the problem and why this didn't make sense to me.  You're using the Gtk2 build of wxWidgets 3.0, which is a different package and apparently still aborts (rather than warns) on the ABI mismatch.  Reassigning to that package.

No, I'm not. This is definitely wxGTK3, **not** compat-wxGTK3-gtk2: see a bit of ldd below:

> ldd $(which kicad)| grep -i wx
	libwx_gtk3u_gl-3.0.so.0 => /lib64/libwx_gtk3u_gl-3.0.so.0 (0x00007f0c53f8f000)
	libwx_gtk3u_aui-3.0.so.0 => /lib64/libwx_gtk3u_aui-3.0.so.0 (0x00007f0c53cf4000)
	libwx_gtk3u_adv-3.0.so.0 => /lib64/libwx_gtk3u_adv-3.0.so.0 (0x00007f0c53903000)
	libwx_gtk3u_html-3.0.so.0 => /lib64/libwx_gtk3u_html-3.0.so.0 (0x00007f0c5360e000)
	libwx_gtk3u_core-3.0.so.0 => /lib64/libwx_gtk3u_core-3.0.so.0 (0x00007f0c52d7d000)
	libwx_baseu_net-3.0.so.0 => /lib64/libwx_baseu_net-3.0.so.0 (0x00007f0c52b27000)
	libwx_baseu-3.0.so.0 => /lib64/libwx_baseu-3.0.so.0 (0x00007f0c52675000)
	libwx_baseu_xml-3.0.so.0 => /lib64/libwx_baseu_xml-3.0.so.0 (0x00007f0c52463000)
	libwx_gtk3u_stc-3.0.so.0 => /lib64/libwx_gtk3u_stc-3.0.so.0 (0x00007f0c52019000)

> ldd /lib64/libwx_gtk3u_core-3.0.so.0 | grep -i gtk
	libgtk-3.so.0 => /lib64/libgtk-3.so.0 (0x00007ff16424a000)

Comment 8 Marcus Müller 2016-03-18 09:17:35 UTC
Note that the point was that I was able to fix this rebuilding wxGTK3 from source, and installing that. I never had compat-wxGTK3-gtk2 installed.

Comment 9 Scott Talbert 2016-03-18 13:33:07 UTC
(In reply to Marcus Müller from comment #7)
> > Ah.  I see now the problem and why this didn't make sense to me.  You're using the Gtk2 build of wxWidgets 3.0, which is a different package and apparently still aborts (rather than warns) on the ABI mismatch.  Reassigning to that package.
> 
> No, I'm not. This is definitely wxGTK3, **not** compat-wxGTK3-gtk2: see a
> bit of ldd below:
> 
> > ldd $(which kicad)| grep -i wx
> 	libwx_gtk3u_gl-3.0.so.0 => /lib64/libwx_gtk3u_gl-3.0.so.0
> (0x00007f0c53f8f000)
> 	libwx_gtk3u_aui-3.0.so.0 => /lib64/libwx_gtk3u_aui-3.0.so.0
> (0x00007f0c53cf4000)
> 	libwx_gtk3u_adv-3.0.so.0 => /lib64/libwx_gtk3u_adv-3.0.so.0
> (0x00007f0c53903000)
> 	libwx_gtk3u_html-3.0.so.0 => /lib64/libwx_gtk3u_html-3.0.so.0
> (0x00007f0c5360e000)
> 	libwx_gtk3u_core-3.0.so.0 => /lib64/libwx_gtk3u_core-3.0.so.0
> (0x00007f0c52d7d000)
> 	libwx_baseu_net-3.0.so.0 => /lib64/libwx_baseu_net-3.0.so.0
> (0x00007f0c52b27000)
> 	libwx_baseu-3.0.so.0 => /lib64/libwx_baseu-3.0.so.0 (0x00007f0c52675000)
> 	libwx_baseu_xml-3.0.so.0 => /lib64/libwx_baseu_xml-3.0.so.0
> (0x00007f0c52463000)
> 	libwx_gtk3u_stc-3.0.so.0 => /lib64/libwx_gtk3u_stc-3.0.so.0
> (0x00007f0c52019000)
> 
> > ldd /lib64/libwx_gtk3u_core-3.0.so.0 | grep -i gtk
> 	libgtk-3.so.0 => /lib64/libgtk-3.so.0 (0x00007ff16424a000)

I am still not understanding this because you reported that your program was aborting, but wxGTK3 has a patch to change the fatal error to a warning.

Can you provide steps of how you are building kicad or whatever you are building against wxGTK3 and seeing the abort?

Comment 10 Marcus Müller 2016-03-20 15:22:26 UTC
> Can you provide steps of how you are building kicad or whatever you are building against wxGTK3 and seeing the abort?

Sure:
##clean slating, i.e. getting binary package from repo
$ sudo dnf remove -y wxGTK3 wxGTK3-devel
[...]
$ sudo dnf install wxGTk3-devel
[...]
$ git clone github.com:KiCad/kicad-source-mirror kicad
[...]
$ cd kicad
$ mkdir build2
$ cd build2
$ cmake ..
[...]
$ grep -i wx CMakeCache.txt|grep -i path 
_filename:FILEPATH=/usr/include/wx-3.0/wx/version.h
wxWidgets_CONFIG_EXECUTABLE:FILEPATH=/usr/bin/wx-config-3.0
wxWidgets_wxrc_EXECUTABLE:FILEPATH=/usr/bin/wxrc
$ make -j10
[...]
##builds successfully
$ kicad/kicad


AAAAND it works. 

Which is good for me, but means that not even I can reproduce this. Hence, I think closing this ticket would be appropriate?