MEN-Mikro-Elektronik / 13MD05-90

MDIS5 System Package for Linux (including drivers)
Other
4 stars 4 forks source link

MDIS Wizzard build environment / migration to newer Qt #256

Open mad-jsanjuan opened 1 year ago

mad-jsanjuan commented 1 year ago

We need to put together a new build environment so that we can generate the MDIS wizzard binaries as they are today.

The current ones in the repo seem to have pretty old libraries that are statically linked. This is so because they presumably were built inside a very old Linux distribution (ubuntu 10, SUSE Linux Enterprise Server 10 or so).

The major issue with the old static libraries seems to be with the libX and related libraries when using QT version 4.6.0. The application crashes at runtime if not linked against an old enough libX library.

[xcb] Unknown sequence number while appending request
    [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
    [xcb] Aborting, sorry about that.
    mdiswiz_vagrant: ../../src/xcb_io.c:157: append_pending_request: Assertion `!xcb_xlib_unknown_seq_number' failed.

We have been able to link against the X libraries from a backup which seems to suggest it was X version 1.6.2.

-rw-r--r-- 1 vagrant vagrant 1592854 Oct  4  2007 /home/vagrant/13Y008-90/NATIVE/DIST_GCC3/usr/X11R6/lib/libX11.a
lrwxrwxrwx 1 vagrant vagrant      13 May 12  2020 /home/vagrant/13Y008-90/NATIVE/DIST_GCC3/usr/X11R6/lib/libX11.so -> libX11.so.6.2
lrwxrwxrwx 1 vagrant vagrant      13 May 12  2020 /home/vagrant/13Y008-90/NATIVE/DIST_GCC3/usr/X11R6/lib/libX11.so.6 -> libX11.so.6.2
-rwxr-xr-x 1 vagrant vagrant 1029416 May 18  2007 /home/vagrant/13Y008-90/NATIVE/DIST_GCC3/usr/X11R6/lib/libX11.so.6.2
mad-jsanjuan commented 1 year ago

We have been considering two possible alternatives so that we can generate mdiswiz binaries:

  1. Put together a Virtual Machine that can build equivalent binaries as what we have today.
  2. Migrate to Qt version 5.15.

Virtual Machine

So far we have had troubles using fairly old distributions (Ubuntu 12) and using the provided packages for libX and libfontconfig . They seem to come from even older distributions or compiled from source with unknown config options used.

For X we get this if we don't use:

[xcb] Unknown sequence number while appending request
    [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
    [xcb] Aborting, sorry about that.
    mdiswiz_vagrant: ../../src/xcb_io.c:157: append_pending_request: Assertion `!xcb_xlib_unknown_seq_number' failed.

For libfontconfig, the binary takes a lot of time to start the graphical stuff and gives us this error:

. . . 
Fontconfig error: "/etc/fonts/conf.d/70-no-bitmaps.conf", line 6: invalid attribute 'xmlns:its'
Fontconfig error: "/etc/fonts/conf.d/70-no-bitmaps.conf", line 6: invalid attribute 'version'
Fontconfig warning: "/etc/fonts/conf.d/70-no-bitmaps.conf", line 8: unknown element "description"
Fontconfig warning: "/etc/fonts/conf.d/80-delicious.conf", line 4: unknown element "its:rules"
Fontconfig warning: "/etc/fonts/conf.d/80-delicious.conf", line 5: unknown element "its:translateRule"
Fontconfig error: "/etc/fonts/conf.d/80-delicious.conf", line 5: invalid attribute 'translate'
Fontconfig error: "/etc/fonts/conf.d/80-delicious.conf", line 5: invalid attribute 'selector'
Fontconfig error: "/etc/fonts/conf.d/80-delicious.conf", line 6: invalid attribute 'xmlns:its'
Fontconfig error: "/etc/fonts/conf.d/80-delicious.conf", line 6: invalid attribute 'version'
Fontconfig warning: "/etc/fonts/conf.d/90-synthetic.conf", line 4: unknown element "its:rules"
Fontconfig warning: "/etc/fonts/conf.d/90-synthetic.conf", line 5: unknown element "its:translateRule"
Fontconfig error: "/etc/fonts/conf.d/90-synthetic.conf", line 5: invalid attribute 'translate'
Fontconfig error: "/etc/fonts/conf.d/90-synthetic.conf", line 5: invalid attribute 'selector'
Fontconfig error: "/etc/fonts/conf.d/90-synthetic.conf", line 6: invalid attribute 'xmlns:its'
Fontconfig error: "/etc/fonts/conf.d/90-synthetic.conf", line 6: invalid attribute 'version'
Fontconfig error: Cannot load default config file

So the short term solution here should be to recover some of the static library *.a files from the old build environment backup and put together a new build environment in a VM that solves the above mentioned issues with X and libfontconfig to try and match the generated binaries we have today.

Qt 5.15 migration

We have made an initial analysis to get an overview of how hard it would be to migrate the entire wizzard project to a newer Qt version so it can be built on newer OS distributions.

There are a few things to take into consideration here.

Qt3 to Qt4

The mdiswizzard is currently built against Qt 4.6.0. However, Qt4 has a module called qt3support. This lets Qt3 code be compiled against Qt4 with some minor tweaking of the classes names.

Qt4 to Qt5

Migration from Qt4 to Qt5 should not be too complicated but the Qt4 code should not depend on qt3support. This means that the current sources would first need to be refactored so that they are fully Qt4 based.

https://wiki.qt.io/Transition_from_Qt_4.x_to_Qt5 https://www.kdab.com/porting-from-qt-4-to-qt-5/

The change to modernize Qt4 without qt3support requires quite a bit of work. Here is a reference that can be used to check each of the changes needed:

https://qt.developpez.com/doc/4.7/porting4/

I found on an initial run that there are some item view classes used by the mdiswizzard such as Q3MainWindow, Q3ListView, Q3ListViewItem, Q3CheckListItem, etc. will need to be redesigned to use the new alternatives that do not have a straight forward migration.

mad-jsanjuan commented 1 year ago

For now, we use a backup of the old buildserver as compilation sysroot. This lets us create binaries as close as possible to what has been delivered in previous releases. We will discuss whether we need to migrate the tool to newer versions of Qt.

dpfeuffer commented 1 year ago

I reopen and renamed this issue, because we should consider to migrate the MDIS Wizard to a newer Qt version.