Coder Social home page Coder Social logo

Comments (27)

Lokaltog avatar Lokaltog commented on June 18, 2024

I'm not able to reproduce the issue, can you explain a bit more about what happens?

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

i don't know i just installed today from the aur and now when i open wkline it just segfaults every time. if i would gess is that the config is not being passed to widgets threads. i started looking into 4a4c338 but i couldn't find the issue

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

Have you updated to the new config format?

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

i removed it from my user config dir

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

I just tried the exact same thing, I installed wkline-git from the AUR and removed my user config, it still starts without any issues. I think you'll have to help me out debugging this issue since I'm unable to reproduce it.

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

Do you receive any debug messages ("spawning widget", etc) before it segfaults?

from candybar.

tuftedocelot avatar tuftedocelot commented on June 18, 2024

I have no issues with newest commit and default/updated config file

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

yes. just pulled latest commits into my branch and rebuilt and now i am getting from ./build/wkline
(wkline:7050): GModule-CRITICAL **: g_module_symbol: assertion 'module != NULL' failed [18:08:27] wkline: loading of '/usr/local/lib/wkline/libwidget_desktops' (desktops) failed
for every widget
i checked and i am loading the system config file

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

That error message is a known "issue" but shouldn't affect wkline in any way. Basically, if you haven't built a specific widget (in this case the desktop widget) you should remove it from your config file, then that error will disappear as it won't try to load a shared object file that doesn't exist. We should probably remove widgets from config.json through the build script if specific widgets are disabled.

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

how do i build specific widgets as you say. as i understand your message i should disable all the widgets to fix the error

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

Currently the waf config script detects if you satisfy optional dependencies like XCB. If you don't have XCB, then the desktop and window title widgets won't be built, but wkline will still work. You should edit config.json and remove 'desktops' and 'window_title' from the widgets array to make sure that wkline doesn't try to load the non-existent shared libs for these widgets.

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

To clarify: waf detects all optional dependencies and builds as many widgets as possible. If you don't have a dependency like XCB, libcurl, etc. then those widgets simply won't be built, and won't be available for dynamic loading. The error message shouldn't matter, but if you want to get rid of the error message just remove the widgets you don't have from config.json.

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

output of waf configure
Setting top to : /home/ricardo/git/fork/wkline Setting out to : /home/ricardo/git/fork/wkline/build Checking for 'gcc' (c compiler) : /usr/bin/gcc Checking for program pkg-config : /usr/bin/pkg-config Checking for pkg-config version >= '0.0.0' : yes Checking for 'gtk+-3.0' : yes Checking for 'webkitgtk-3.0' : yes Checking for 'jansson' : yes Checking for 'alsa' : yes Checking for 'libcurl' : yes Checking for 'dbus-1 dbus-glib-1' : yes Checking for 'libmpdclient' : yes Checking for 'xcb-util xcb-ewmh xcb-icccm' : yes 'configure' finished successfully (0.208s)

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

If you aren't installing this to a system directory you need to follow the dev build guide in the readme (install with relative widget paths). Also see this comment. If possible we should make this process automatic so it won't matter if wkline is installed in a directory in /home or if it's installed into a system directory.

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

Installing wkline-git from AUR should work out-of-the-box since it installs the widget shared libs into /usr/lib/wkline. If you run waf configure without the libdir parameter it tells wkline that the libraries will be installed into $PREFIX/lib/wkline, and loading the libraries will fail if you don't run waf install afterwards.

Do you have any ideas to how this issue can be resolved?

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

ok it's working after waf install now i am confused

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

I apologize if I'm that bad at explaining the issue. I'll try to explain further:

At this line the library load path is determined. By default this path is $PREFIX/lib/wkline, or /usr/local/lib/wkline. This means that wkline looks for the widget shared objects (libwidget_desktops.so, etc) in this path, and this path only. If you do not install the widgets in this path (with waf install), wkline won't be able to find the widget libraries (they remain in the build directory) and you'll end up with error messages about missing widgets.

If you run waf install it will install the widgets globally by default, in /usr/local/lib/wkline, which is why it works after running sudo waf install.

This is not what you'd want for development though, as I think it's more useful to have these libraries available in the project directory instead of a system directory. You can run this command to build and install wkline into a out/ directory in the project folder instead:

waf clean configure build --debug --prefix=/ \
    --libdir=`pwd`/out/lib/wkline install --destdir=out

What this command does is:

  • configure wkline with the prefix /, which means it will install libraries in $destdir/lib/wkline and binaries in $destdir/bin
  • set the libdir to be $PWD/out/lib/wkline
  • set the installation/destdir to be out/

When you run out/bin/wkline it will now look for the shared libs in $PWD/out/lib/wkine instead of /usr/local/lib/wkline. I'm not sure if this makes any more sense, but I'm not sure how to explain it better :P

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

the problem is you are looking for widgets in /usr/local/lib/wkline but when you install it from the aur it installs it to /usr/lib/wkline/
also do i need to do that command every time i want to compile wkline?

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

this feature looks like a lot of effort for something that might never be used.

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

Yes, but when installing from aur it should install to /usr/lib/wkline since that's the lib folder on arch. It correctly loads the libraries from /usr/lib/wkline when installing wkline-git on my setup, what happens when you install wkline-git?

You need to do the waf command every time you compile with a relative lib search path. You can do it in two commands to avoid clean/configure every recompile: run waf configure --debug ... once, then run waf build install --destdir=out every time you want to recompile the changed files.

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

I think shared libs is a pretty good idea:

  • it allows you to disable widgets completely through config.json, disabled widgets won't be loaded and take up any resources
  • it makes the build process a lot simpler (no need for defines to disable building of widgets)
  • we no longer have to enumerate every single possible widget in widgets.h
  • it allows separate projects to install widgets into $prefix/usr/lib/wkline, which means we don't have to have every possible widget in the core repo (I'm planning to move lesser used widgets into a wkline-widgets-extras repo later)
  • it allows for features like dragging widgets onto the statusline to load them right away without even having to install them in a lib dir if users want to test a widget without installing a package

Do you think it's more hassle than it's worth? If so, please explain why, I may have misunderstood the situation and benefits of shared libs completely.

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

you have to change the LIBDIR define in the build script because it is setting LIBDIR to /usr/local/lib/ even when you give the option --prefix=/usr and it should be /usr/lib
actually it does change. i still think there is something wrong with the paths to the widgets

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

Are you sure? It defaults to ${PREFIX}/lib/wkline, so if you give the option --prefix=/usr it will install into /usr/lib/wkline. Here are the files that get installed with the wkline-git package, which sets --prefix=/usr:

kim@regiontog ~/p/w/w/p/wkline-git> find .
.
./.INSTALL
./.MTREE
./.PKGINFO
./etc
./etc/xdg
./etc/xdg/wkline
./etc/xdg/wkline/config.json
./usr
./usr/share
./usr/share/licenses
./usr/share/licenses/wkline-git
./usr/share/licenses/wkline-git/LICENSE
./usr/lib
./usr/lib/wkline
./usr/lib/wkline/libwidget_external_ip.so
./usr/lib/wkline/libwidget_now_playing_mpd.so
./usr/lib/wkline/libwidget_notifications.so
./usr/lib/wkline/libwidget_weather.so
./usr/lib/wkline/libwidget_battery.so
./usr/lib/wkline/libwidget_volume.so
./usr/lib/wkline/libwidget_window_title.so
./usr/lib/wkline/libwidget_desktops.so
./usr/bin
./usr/bin/wkline

It would be great if you could provide a concrete example of how this issue is present on your setup. I'm not able to reproduce it by running configure with --prefix=/usr.

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

yes it installs the files in the right place but when loading widgets the dont get the right place
just do sudo rm /usr/local/lib/wkline/ -R and run wkline

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

I don't have any libraries in /usr/local/lib/wkline when installing with the correct prefix, there aren't any files to remove with rm -r. If you've run waf install after running waf configure without a prefix then the libraries won't end up in the correct location on archlinux. The libraries should still load fine, as wkline should look for them in /usr/local/lib/wkline instead of /usr/lib/wkline.

I really don't understand the issue on your setup, and I'm not able to reproduce it on my setup. Could you post the exact commands you are running from start to finish that trigger this issue on your setup?

from candybar.

ricardomv avatar ricardomv commented on June 18, 2024

for some reason i had the binary in /usr/local/bin/wkline and it was loading that instead of /usr/bin/wkline so i was loading an old version.
We should print the version when we start wkline

from candybar.

Lokaltog avatar Lokaltog commented on June 18, 2024

That's a good idea. We could probably run something like git rev-list --count ${_gitbranch}).$(git rev-parse --short ${_gitbranch}) like in the PKGBUILD in wscript and assign it to a VERSION define that we can log when starting wkline, along with the executable path. We should probably also log which config file is being read.

from candybar.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.