http://bugzilla.opensuse.org/show_bug.cgi?id=1140614
Bug ID: 1140614 Summary: Error loading Applications menu extension in SLE-Classic Classification: openSUSE Product: openSUSE Tumbleweed Version: Current Hardware: x86-64 OS: openSUSE Factory Status: NEW Severity: Normal Priority: P5 - None Component: GNOME Assignee: qkzhu@suse.com Reporter: qkzhu@suse.com QA Contact: qa-bugs@suse.de CC: gwang@suse.com, xiaoguang.wang@suse.com, yfjiang@suse.com, zcjia@suse.com Found By: --- Blocker: ---
apps-menu disappeared in TW-20190704, and journalctl shows:
gnome-shell[2369]: Extension "apps-menu@gnome-shell-extensions.gcampax.github.com" had error: Error: Requiring GMenu, version none: Typelib file for namespace 'GMenu' (any version) not found
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c1
--- Comment #1 from QK ZHU qkzhu@suse.com --- According to https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/151 this issue could be resolved by:
zypper in typelib-1_0-GMenu-3_0
So we should figure out what happened to the dependency of typelib-1_0-GMenu-3_0 in TW, it should be installed by default
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c2
--- Comment #2 from QK ZHU qkzhu@suse.com --- The dependency comparison of gnome-shell-classic between Leap15 and TW
Leap 15 ------ ➜ rpm -q --requires gnome-shell-classic rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(PayloadIsXz) <= 5.2-1 typelib(Atk) typelib(Clutter) typelib(GLib) typelib(GMenu) typelib(GObject) typelib(Gio) typelib(Gtk) typelib(Pango) typelib(Shell) typelib(St)
TW ------ test@linux-ur2v:~> rpm -q --requires gnome-shell-classic gnome-shell-classic-session rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PartialHardlinkSets) <= 4.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(PayloadIsXz) <= 5.2-1 typelib(Clutter) typelib(GLib) typelib(GObject) typelib(Gio) typelib(Gtk) typelib(Shell) typelib(St)
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614
QK ZHU qkzhu@suse.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |dimstar@opensuse.org
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c3
QK ZHU qkzhu@suse.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Flags| |needinfo?(dimstar@opensuse. | |org)
--- Comment #3 from QK ZHU qkzhu@suse.com --- Hi Dominique,
typelib-1_0-GMenu-3_0 (which is needed by GNOME-Classic mode and SLE-Classic mode) was not installed by default on TW-20190704.
I can't find what requires this lib by
$ rpm -q --whatrequires typelib-1_0-GMenu-3_0 no package requires typelib-1_0-GMenu-3_0
but
# rpm -e --test typelib-1_0-GMenu-3_0 error: Failed dependencies: typelib(GMenu) is needed by (installed) gnome-shell-classic-3.26.2-lp151.7.1.noarch
shows it was depended by gnome-shell-classic, then I compared gnome-shell- extensions.spec of Leap15.1 and TW but still not sure which part defined the dependency.
Do you have any ideas about this? Thanks
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c4
Dominique Leuenberger dimstar@opensuse.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Flags|needinfo?(dimstar@opensuse. | |org) |
--- Comment #4 from Dominique Leuenberger dimstar@opensuse.org --- try rpm -q --what-requires "typelib(GMenu)"
NOTHing is supposed to require the package name typelib-1_0-GMenu-3_0; only the typelib() format should be used
The dependency should be auto detected, if the java script parser in gobject-introspection manages to identify it correctly. Sadly, in GNOME 3.32, upstream changed quite some of the constructs, which makes the parser 'too stupid'
The new code is:
const { Atk, Clutter, Gio, GLib, GMenu, GObject, Gtk, Meta, Shell, St } = imports.gi;
The simple fix is to 'add typelib(GMenu) as a requires go gnome-shell-classic, but even better would be if you can find the time to write a smarter parser for javascrip, that detects all those deps in this format.
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c5
--- Comment #5 from QK ZHU qkzhu@suse.com --- Hi Dominique,
I wrote a new line of shell script, could you have a review: - https://build.opensuse.org/package/rdiff/home:qkzhu:branches:GNOME:Factory/g...
I will submit it to GNOME:Factory if you think it's OK
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c6
--- Comment #6 from Dominique Leuenberger dimstar@opensuse.org --- (In reply to QK ZHU from comment #5)
Hi Dominique,
I wrote a new line of shell script, could you have a review:
https://build.opensuse.org/package/rdiff/home:qkzhu:branches:GNOME:Factory/ gobject-introspection?linkrev=base&rev=2
The patch must be wrong - there are now invalid dependencies showing up on libgjs0:
After extracting the gresources from libgjs0, it detects invalid deps in those files:
./org/gnome/gjs/modules/_bootstrap/debugger.js:
typelib();)
./org/gnome/gjs/modules/signals.js:
typelib(Name:'WithSignals') typelib(connect:_connect) typelib(disconnect:_disconnect) typelib(emit:_emit) typelib(signalHandlerIsConnected:_signalHandlerIsConnected) typelib(disconnectAll:_disconnectAll)
both files don't have any imports.gi statement at all.
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c7
--- Comment #7 from QK ZHU qkzhu@suse.com --- The script was revised: - https://build.opensuse.org/package/rdiff/home:qkzhu:branches:GNOME:Factory/g...
And I tested this script against gnome-shell, gnome-shell-extensions, gjs via:
#!/bin/bash
files=$(find ~/git/gnome-shell-extensions -name "*.js") #files=$(find ~/git/gjs -name "*.js") #files=$(find ~/git/gnome-shell -name "*.js")
for file in $files do echo "the requires of $file"; grep -r -h -A2 'const {' $file | paste -s -d ' ' | grep '} = imports.gi;' | sed 's/imports.gi;.*/imports.gi;/' | awk -F '[{}]' '{print $(NF>1?NF-1:"")}' | tr ',' '\n' | tr -d ' ' echo "----------" done
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c8
--- Comment #8 from Dominique Leuenberger dimstar@opensuse.org --- (In reply to QK ZHU from comment #7)
The script was revised:
https://build.opensuse.org/package/rdiff/home:qkzhu:branches:GNOME:Factory/ gobject-introspection?linkrev=base&rev=2
And I tested this script against gnome-shell, gnome-shell-extensions, gjs via:
#!/bin/bash
files=$(find ~/git/gnome-shell-extensions -name "*.js") #files=$(find ~/git/gjs -name "*.js") #files=$(find ~/git/gnome-shell -name "*.js")
Just to be sure: did you extract the gresources? libgjs0 embeds *.js files directly into the library
The best way to test is to extract libgjs0 into a temp dir (using unrpm) then
find /tmp/path/to/libgjs0-extraced | /path/to/your/gi-find-desp.sh -R
alternatively, you can branch gjs into your home: space and let it be inspected with your gobject-introspection change. If the resulting package is installable, we're a good step closer
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c9
--- Comment #9 from QK ZHU qkzhu@suse.com --- (In reply to Dominique Leuenberger from comment #8)
(In reply to QK ZHU from comment #7)
The script was revised:
And I tested this script against gnome-shell, gnome-shell-extensions, gjs
Just to be sure: did you extract the gresources? libgjs0 embeds *.js files directly into the library
Just extracted libgjs0 and tested: ➜ find ./libgjs0_extracted | ~/gi-find-deps.sh -R typelib(GLib) typelib(GLib) typelib(GjsPrivate) typelib(GLib) typelib(GObject) typelib(GLib) typelib(GIRepository) typelib(Gio) typelib(GObject) typelib(GLib) typelib(GjsPrivate) typelib(Gio) typelib(GjsPrivate) typelib(GObject) typelib(GjsPrivate) typelib(GLib) typelib(cairo) typelib(GjsPrivate)
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c11
--- Comment #11 from Dominique Leuenberger dimstar@opensuse.org --- nothing provides typelib(UPowerGlib:UPower) needed by gnome-shell, nothing provides typelib(TelepathyGLib:Tp) needed by polari
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c12
--- Comment #12 from Dominique Leuenberger dimstar@opensuse.org --- So at least two more packages that are getting invalid requires added now with the new gi-find-deps version
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c13
--- Comment #13 from QK ZHU qkzhu@suse.com --- (In reply to Dominique Leuenberger from comment #11)
nothing provides typelib(UPowerGlib:UPower) needed by gnome-shell, nothing provides typelib(TelepathyGLib:Tp) needed by polari
Strings after the colon were removed and I branch some of the JS related packages to my home project, those packages can be installed successfully. The dependency of gnome-shell-classic was fixed: - https://build.opensuse.org/project/show/home:qkzhu:branches:GNOME:Factory
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c14
QK ZHU qkzhu@suse.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |FIXED
--- Comment #14 from QK ZHU qkzhu@suse.com --- Request accepted.
http://bugzilla.opensuse.org/show_bug.cgi?id=1140614 http://bugzilla.opensuse.org/show_bug.cgi?id=1140614#c15
--- Comment #15 from OBSbugzilla Bot bwiedemann+obsbugzillabot@suse.com --- This is an autogenerated message for OBS integration: This bug (1140614) was mentioned in https://build.opensuse.org/request/show/1073225 Factory / gobject-introspection