mate-desktop/mate-control-center

Build failure with libmatekbd from later than 1.27.0 release & built w/ meson

lukefromdc opened this issue · 25 comments

Expected behaviour

Build of mate-control-center from git master completes with libmatekbd from git master

Actual behaviour

build errors out with:
/usr/bin/ld: mate-keyboard-properties-xkbltadd.o: undefined reference to symbol 'matekbd_keyboard_config_merge_items'

Steps to reproduce the behaviour

Build and install libmatekbd from current git master
then configure mate-control-center and attempt to build. Configuration finishes, build fails

MATE general version

1.27.0 from git master

Package version

locally built from git master

Linux Distribution

Debian Unstable with locally built gtk-3.24.34 with gtk-classic patches for striped treeviews and locally built glib 2.74

Link to bugreport of your Distribution (requirement)

None as this is a local build

Hmm, we have definitively a so-name bump with libmatekbd.
new:

/usr/lib64/libmatekbd.so.6
/usr/lib64/libmatekbd.so.6.0.2
/usr/lib64/libmatekbdui.so.6
/usr/lib64/libmatekbdui.so.6.0.2

old:

%{_libdir}/libmatekbd.so.4*
%{_libdir}/libmatekbdui.so.4*

Related to mate-desktop/libmatekbd@bcbcc53
That means all packages which depends on libmatekbd needs to be rebuilt.
I will test now building mcc.
Edit:
mate-settings-daemon, mate-screensaver and mate-control-center are depending from libmatekbd.
I would rebuilt m-s-d first because it is a dependency from m-c-c too.

Building m-c-c from master with latest libmatekbd works well here with fedora 38 (building RPM's with mock build server and compiling by hand)
I choose this build order for re-building:
libmatekbd
mate-settings-daemon
mate-screensaver
mate-control-center

THAT must be what i missed: the dependency on m-s-d also depending on libmatekbd

Somehow I still got this build error (same as before)


  A11Y     ui-a11y.err
  CCLD     mate-keyboard-properties
/usr/bin/ld: mate-keyboard-properties-xkbltadd.o: undefined reference to symbol 'matekbd_keyboard_config_merge_items'
/usr/bin/ld: /lib/x86_64-linux-gnu/libmatekbd.so.6: error adding symbols: DSO missing from command line

Ok, that this should be test by another person who use debian.
With fedora i can't reproduce it.

janso3 commented

I'm getting the same error on Debian bookworm, with current git master of libmatekbd and mate-control-center.

janso3 commented

This seems to be a regression from mate-desktop/libmatekbd@aa2e787, as building libmatekbd with the Makefile resolves this for me.

Please read my previous comment. The build order is important with a soname bump.

janso3 commented

Please read my previous comment. The build order is important with a soname bump.

I did build them it that order (on a fresh Debian install), but the meson build yielded the same error.
The autogen.sh procedure works.

That 's would be new to build m-c-c with meson.

I can confirm that rebuilding libmatekbd from current git master with autotools allows mate-control-center's build to finish and the "keyboard" capplet to run as expected after installation. Changed the name of this report to reflect this fact.,

@zhuyaliang
Can you take a look at it why libmatekbd build with meson caused this issue, please?
Seems a regression of the support of meson build system.
I'd like to make a new release after so-name bump.

@raveit65 Okay, I'll solve this problem later

@lukefromdc
I have no replication issues using Ubuntu. Please run the following command and check the output

cat /usr/lib/x86_64-linux-gnu/pkgconfig/libmatekbd.pc
ls -l /usr/lib/x86_64-linux-gnu/libmatekbd*
grep -rin LIBMATEKBDUI_LIBS mate-control-center/capplets/keyboard/Makefile

If I reinstall the libmatekbd package I built with meson, m-c-c will run with it installed, just had to be BUILT over libmatekbd built with autotools. Also confirmed the issue still exists after yesterday's Debian Sid updates

With the meson version installed I get these outputs from the first two test commands:


luke@ubuntu:~$ cat /usr/lib/x86_64-linux-gnu/pkgconfig/libmatekbd.pc
prefix=/usr
includedir=${prefix}/include
libdir=${prefix}/lib/x86_64-linux-gnu

Name: libmatekbd
Description: MATE keyboard shared library
Version: 1.27.0
Requires.private: glib-2.0 >=  2.45.0, gobject-2.0 >=  2.45.0, gio-2.0 >=  2.25.0, gdk-3.0 >=  3.22.0, gtk+-3.0 >=  3.22.0, x11, libxklavier >=  5.2
Libs: -L${libdir} -lmatekbd
Cflags: -I${includedir}
luke@ubuntu:~$ 


luke@ubuntu:~$ ls -l /usr/lib/x86_64-linux-gnu/libmatekbd*
lrwxrwxrwx 1 root root     15 Jul 12 12:05 /usr/lib/x86_64-linux-gnu/libmatekbd.so -> libmatekbd.so.6
lrwxrwxrwx 1 root root     19 Jul 12 12:05 /usr/lib/x86_64-linux-gnu/libmatekbd.so.6 -> libmatekbd.so.6.0.2
-rwxr-xr-x 1 root root  92616 Jul 12 12:05 /usr/lib/x86_64-linux-gnu/libmatekbd.so.6.0.2
lrwxrwxrwx 1 root root     17 Jul 12 12:05 /usr/lib/x86_64-linux-gnu/libmatekbdui.so -> libmatekbdui.so.6
lrwxrwxrwx 1 root root     21 Jul 12 12:05 /usr/lib/x86_64-linux-gnu/libmatekbdui.so.6 -> libmatekbdui.so.6.0.2
-rwxr-xr-x 1 root root 362672 Jul 12 12:05 /usr/lib/x86_64-linux-gnu/libmatekbdui.so.6.0.2
luke@ubuntu:~$ 

Third command required slight modification for a renamed build directory, got this output:

230703$ grep -rin LIBMATEKBDUI_LIBS capplets/keyboard/Makefile
314:LIBMATEKBDUI_LIBS = -lmatekbdui 
476:mate_keyboard_properties_LDADD = $(MATECC_CAPPLETS_LIBS) $(LIBMATEKBDUI_LIBS)
luke@ubuntu:~/Desktop/Development/MATE_Development_Work/mate-control-center_1.27.0+git20230703$ 

Attaching a tarball with mate-control-center/capplets/keyboard/Makefile from the m-c-c build directory from a failed build. Note that configuration completed, the build errored out
Makefile.tar.gz

@lukefromdc Thank you very much for the detailed information provided. The issue has been identified,Missing libmatekbd link in Makefile,Please manually add link testing first.

LIBMATEKBDUI_LIBS = -lmatekbdui -lmatekbd

The problem may be in configure.ac, and I will continue to investigate the cause of the problem

@raveit65 Sorry, I currently only have time in the evening, so resolving the issue will be delayed

@lukefromdc Please run the command and check the output

cat /usr/lib/x86_64-linux-gnu/pkgconfig/libmatekbdui.pc

[test@localhost mate-control-center]$ pkg-config --libs "libmatekbdui >= 1.17"
-lmatekbdui -lmatekbd -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lxklavier 
[test@localhost mate-control-center]$ pkg-config --libs "libmatekbd >= 1.17"
-lmatekbd -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lxklavier 
[test@localhost mate-control-center]$ 

Latest command with a meson build installed yielded:

prefix=/usr
includedir=${prefix}/include
libdir=${prefix}/lib/x86_64-linux-gnu

Name: libmatekbdui
Description: MATE keyboard shared library
Version: 1.27.0
Requires.private: libmatekbd, glib-2.0 >= 2.45.0, gobject-2.0 >= 2.45.0, gio-2.0 >= 2.25.0, gdk-3.0 >= 3.22.0, gtk+-3.0 >= 3.22.0, x11, libxklavier >= 5.2
Libs: -L${libdir} -lmatekbdui
Libs.private: -lm
Cflags: -I${includedir}
luke@ubuntu:~$

@lukefromdc
Please replace Requires.private with Requires in the libmatekbdui.pc file

luke@ubuntu:~$ cat /usr/lib/x86_64-linux-gnu/pkgconfig/libmatekbdui.pc
prefix=/usr
includedir=${prefix}/include
libdir=${prefix}/lib/x86_64-linux-gnu

Name: libmatekbdui
Description: MATE keyboard shared library
Version: 1.27.0
Requires: libmatekbd, glib-2.0 >= 2.45.0, gobject-2.0 >= 2.45.0, gio-2.0 >= 2.25.0, gdk-3.0 >= 3.22.0, gtk+-3.0 >= 3.22.0, x11, libxklavier >= 5.2
Libs: -L${libdir} -lmatekbdui
Libs.private: -lm
Cflags: -I${includedir}
luke@ubuntu:~$

@lukefromdc Please try compiling the mate-control-center again to verify if the problem is resolved

Cleaned the build directory, reconfigured and this time the build finished

@raveit65 @lukefromdc The problem is in libmatekbd , I will fix it as soon as possible

Thanks, will test it when you do

Now, with the soname bumb we will want to release a new minor version