Opened 5 years ago

Closed 4 years ago

#12691 closed defect (fixed)

Fix dconf breakage with meson-0.52

Reported by: Douglas R. Reno Owned by: Douglas R. Reno
Priority: normal Milestone: 9.1
Component: BOOK Version: SVN
Severity: normal Keywords:
Cc:

Description

When compiling with meson-0.52.0, it's been reported that there are problems with compiling dconf:

*** Building dconf *** [29/241]
ninja -j4 
[80/92] Linking target tests/gdbus-thread-leak.
FAILED: tests/gdbus-thread-leak 
clang -B/home/lantw44/.local/bin  -o tests/gdbus-thread-leak 'tests/59830eb@@gdbus-thread-leak@exe/dbus-leak.c.o' -L/home/lantw44/gnome/devinstall/lib -L/usr/local/lib -Wl,--as-needed -Wl,--no-undefined -Wl,--whole-archive -Wl,--start-group client/libdconf-client.a common/libdconf-common.a -Wl,--no-whole-archive -march=corei7 -B/home/lantw44/.local/bin -pipe -g3 -Og -gz -fdebug-macro -B/home/lantw44/.local/bin -Wl,--compress-debug-sections=zlib gdbus/libdconf-gdbus-thread.a engine/libdconf-engine.a gvdb/libgvdb.a shm/libdconf-shm.a -Wl,-rpath-link,/usr/local/lib /home/lantw44/gnome/devinstall/lib/libgio-2.0.so /home/lantw44/gnome/devinstall/lib/libgobject-2.0.so /home/lantw44/gnome/devinstall/lib/libglib-2.0.so -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,-rpath-link,/usr/local/lib -L/home/lantw44/gnome/devinstall/lib -lintl -Wl,--end-group '-Wl,-rpath,$ORIGIN/../gdbus:$ORIGIN/../engine:$ORIGIN/../gvdb:$ORIGIN/../shm' -Wl,-rpath-link,/home/lantw44/gnome/build/dconf/gdbus -Wl,-rpath-link,/home/lantw44/gnome/build/dconf/engine -Wl,-rpath-link,/home/lantw44/gnome/build/dconf/gvdb -Wl,-rpath-link,/home/lantw44/gnome/build/dconf/shm
ld: error: duplicate symbol: dconf_changeset_all
>>> defined at dconf-changeset.c:387 (../../source/dconf/common/dconf-changeset.c:387)
>>>            dconf-changeset.c.o:(dconf_changeset_all) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:387 (../../source/dconf/common/dconf-changeset.c:387)
>>>            dconf-changeset.c.o:(.text+0x580) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_change
>>> defined at dconf-changeset.c:733 (../../source/dconf/common/dconf-changeset.c:733)
>>>            dconf-changeset.c.o:(dconf_changeset_change) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:733 (../../source/dconf/common/dconf-changeset.c:733)
>>>            dconf-changeset.c.o:(.text+0xB80) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_describe
>>> defined at dconf-changeset.c:586 (../../source/dconf/common/dconf-changeset.c:586)
>>>            dconf-changeset.c.o:(dconf_changeset_describe) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:586 (../../source/dconf/common/dconf-changeset.c:586)
>>>            dconf-changeset.c.o:(.text+0x8D0) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_deserialise
>>> defined at dconf-changeset.c:649 (../../source/dconf/common/dconf-changeset.c:649)
>>>            dconf-changeset.c.o:(dconf_changeset_deserialise) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:649 (../../source/dconf/common/dconf-changeset.c:649)
>>>            dconf-changeset.c.o:(.text+0xA00) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_diff
>>> defined at dconf-changeset.c:795 (../../source/dconf/common/dconf-changeset.c:795)
>>>            dconf-changeset.c.o:(dconf_changeset_diff) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:795 (../../source/dconf/common/dconf-changeset.c:795)
>>>            dconf-changeset.c.o:(.text+0xC30) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_get
>>> defined at dconf-changeset.c:282 (../../source/dconf/common/dconf-changeset.c:282)
>>>            dconf-changeset.c.o:(dconf_changeset_get) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:282 (../../source/dconf/common/dconf-changeset.c:282)
>>>            dconf-changeset.c.o:(.text+0x430) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_is_empty
>>> defined at dconf-changeset.c:710 (../../source/dconf/common/dconf-changeset.c:710)
>>>            dconf-changeset.c.o:(dconf_changeset_is_empty) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:710 (../../source/dconf/common/dconf-changeset.c:710)
>>>            dconf-changeset.c.o:(.text+0xB60) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_is_similar_to
>>> defined at dconf-changeset.c:337 (../../source/dconf/common/dconf-changeset.c:337)
>>>            dconf-changeset.c.o:(dconf_changeset_is_similar_to) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:337 (../../source/dconf/common/dconf-changeset.c:337)
>>>            dconf-changeset.c.o:(.text+0x4F0) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_new
>>> defined at dconf-changeset.c:83 (../../source/dconf/common/dconf-changeset.c:83)
>>>            dconf-changeset.c.o:(dconf_changeset_new) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:83 (../../source/dconf/common/dconf-changeset.c:83)
>>>            dconf-changeset.c.o:(.text+0x0) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_new_database
>>> defined at dconf-changeset.c:123 (../../source/dconf/common/dconf-changeset.c:123)
>>>            dconf-changeset.c.o:(dconf_changeset_new_database) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:123 (../../source/dconf/common/dconf-changeset.c:123)
>>>            dconf-changeset.c.o:(.text+0x70) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_new_write
>>> defined at dconf-changeset.c:691 (../../source/dconf/common/dconf-changeset.c:691)
>>>            dconf-changeset.c.o:(dconf_changeset_new_write) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:691 (../../source/dconf/common/dconf-changeset.c:691)
>>>            dconf-changeset.c.o:(.text+0xB20) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_ref
>>> defined at dconf-changeset.c:178 (../../source/dconf/common/dconf-changeset.c:178)
>>>            dconf-changeset.c.o:(dconf_changeset_ref) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:178 (../../source/dconf/common/dconf-changeset.c:178)
>>>            dconf-changeset.c.o:(.text+0x1B0) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_seal
>>> defined at dconf-changeset.c:434 (../../source/dconf/common/dconf-changeset.c:434)
>>>            dconf-changeset.c.o:(dconf_changeset_seal) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:434 (../../source/dconf/common/dconf-changeset.c:434)
>>>            dconf-changeset.c.o:(.text+0x5F0) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_serialise
>>> defined at dconf-changeset.c:618 (../../source/dconf/common/dconf-changeset.c:618)
>>>            dconf-changeset.c.o:(dconf_changeset_serialise) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:618 (../../source/dconf/common/dconf-changeset.c:618)
>>>            dconf-changeset.c.o:(.text+0x940) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_set
>>> defined at dconf-changeset.c:218 (../../source/dconf/common/dconf-changeset.c:218)
>>>            dconf-changeset.c.o:(dconf_changeset_set) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:218 (../../source/dconf/common/dconf-changeset.c:218)
>>>            dconf-changeset.c.o:(.text+0x1C0) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_changeset_unref
>>> defined at dconf-changeset.c:152 (../../source/dconf/common/dconf-changeset.c:152)
>>>            dconf-changeset.c.o:(dconf_changeset_unref) in archive client/libdconf-client.a
>>> defined at dconf-changeset.c:152 (../../source/dconf/common/dconf-changeset.c:152)
>>>            dconf-changeset.c.o:(.text+0x150) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_error_quark
>>> defined at dconf-error.c:52 (../../source/dconf/common/dconf-error.c:52)
>>>            dconf-error.c.o:(dconf_error_quark) in archive client/libdconf-client.a
>>> defined at dconf-error.c:52 (../../source/dconf/common/dconf-error.c:52)
>>>            dconf-error.c.o:(.text+0x0) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_is_dir
>>> defined at dconf-paths.c:173 (../../source/dconf/common/dconf-paths.c:173)
>>>            dconf-paths.c.o:(dconf_is_dir) in archive client/libdconf-client.a
>>> defined at dconf-paths.c:173 (../../source/dconf/common/dconf-paths.c:173)
>>>            dconf-paths.c.o:(.text+0x150) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_is_key
>>> defined at dconf-paths.c:146 (../../source/dconf/common/dconf-paths.c:146)
>>>            dconf-paths.c.o:(dconf_is_key) in archive client/libdconf-client.a
>>> defined at dconf-paths.c:146 (../../source/dconf/common/dconf-paths.c:146)
>>>            dconf-paths.c.o:(.text+0xA0) in archive common/libdconf-common.a

ld: error: duplicate symbol: dconf_is_path
>>> defined at dconf-paths.c:120 (../../source/dconf/common/dconf-paths.c:120)
>>>            dconf-paths.c.o:(dconf_is_path) in archive client/libdconf-client.a
>>> defined at dconf-paths.c:120 (../../source/dconf/common/dconf-paths.c:120)
>>>            dconf-paths.c.o:(.text+0x0) in archive common/libdconf-common.a

ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[83/92] Compiling C object 'tests/59830eb@@gdbus-filter-leak@exe/dbus-leak.c.o'.
ninja: build stopped: subcommand failed.

It seems to be due to the change in behavior of the link_whole argument in meson, which changed in 0.52.

Wayne originally reported it here: http://lists.linuxfromscratch.org/pipermail/blfs-dev/2019-October/036935.html

I found the gitlab issue and commented on it asking about workarounds on 10/23:

https://gitlab.gnome.org/GNOME/dconf/issues/59

A workaround has been found that involves disabling tests via modifying the meson.build file. I'll gen a patch for that.

Change History (3)

comment:1 by Douglas R. Reno, 5 years ago

Owner: changed from blfs-book to Douglas R. Reno
Status: newassigned

comment:2 by Bruce Dubbs, 4 years ago

Fix with:

sed -i "s|link_whole|link_with|" common/meson.build

It looks like the tests can be fixed with:

sed -i 's/module/& | grep -v mangle_path /' gsettings/abicheck.sh

comment:3 by Douglas R. Reno, 4 years ago

Resolution: fixed
Status: assignedclosed

Fixes confirmed to work on a machine with meson-0.52.0 installed. Tests also pass with that sed for gsettings/abicheck.sh. Thank you Bruce

Also, added optional dependency on bash-completion.

Fixed at r22349

Note: See TracTickets for help on using tickets.