LINUX.ORG.RU
ФорумTalks

DEADBEEF добавление нового плагина в builder с кастомными библиотеками

 


0

0

cast @waker

Появилось время, допилил плагин SNI (ссылку даю на свою репу, потом запатчу оригинальную). Т.к., как я понял, добавлять в static-deps библиотеку libdbusmenu считается проблематичным и нецелесообразным, то я сделал небольшой манёвр

  • сделал с ней бандл (в репе каталог bundle)
  • в процессе сборки он там же распаковывается и пути добавляются пути сборки линковки для GCC
  • (!пункт к которому у меня вопрос) на завершающем этапе сборки информации о библиотеке, как я понял, LD_LIBRARY_PATH не подставишь, поэтому я делаю симлинк прямо в каталог static-deps
PATH_BUNDLE ?= bundle
FILE_BUNDLE ?= $(PATH_BUNDLE)/bundle.tar.xz
FILE_DBUS_LIBRARY = $(PATH_BUNDLE)/libdbusmenu-glib.so.4
PATH_STATIC_DEPS = $(LIBDIR)/gtk-3.10.8/lib

all: deps gtk3
deps: $(abspath $(FILE_BUNDLE))
	@tar -xvf $^ -C $(abspath $(PATH_BUNDLE)) && ln -s $(abspath $(FILE_DBUS_LIBRARY)) $(PATH_STATIC_DEPS)

Вопрос: так можно делать, или это не считается правильным?

В остальном всё нормально собирается (gtk3-версия). Вроде-бы нормально работает (проверял последнюю Plasma, GNOME3/40, XFCE, Cinnamon) и как добавлять в DPB, в целом, понятно. Я попробую это сделать, если такой подход не является проблемой. Сейчас собирается так (docker): manifest.json, make.patch.

Собрать gtk2 версию в билдере не получится, потому что нужен GVariant, который ЕМНИП только с glib >=2.24, а в билдере для gtk2 только 2.16.

  • почему на лоре, а не в дискорде? :)
  • что такое «билдер»? deadbeef-plugin-builder?

Т.к., как я понял, добавлять в static-deps библиотеку libdbusmenu считается проблематичным и нецелесообразным

кем считается? это проблематично только если она не соберется в ubuntu14.04, которая требуется в данный момент.

(!пункт к которому у меня вопрос) на завершающем этапе сборки информации о библиотеке, как я понял, LD_LIBRARY_PATH не подставишь, поэтому я делаю симлинк прямо в каталог static-deps

хмммм. т.е. библиотека собирается как динамическая? и pluginfo не может ее найти? в этом случае, ее не сможет найти и deadbeef после распаковки плагина.

чтобы это заработало, нужно где-то указывать правильный rpath, но я подзабыл где именно это делается для другого похожего случая, и как это работает.

waker ★★★★★
()
Ответ на: комментарий от waker

кажется, эту ситуацию обрабатывает скрипт apgcc, и там прописан вполне конкретные пути

искать по этим словам:

our @linking = ('-Wl,--enable-new-dtags,-rpath,${ORIGIN},--rpath,${ORIGIN}/lib,-rpath,${ORIGIN}/../lib,-rpath,${ORIGIN}/..');
waker ★★★★★
()
Ответ на: комментарий от waker

deadbeef-plugin-builder?

Он

и pluginfo не может ее найти?

Так точно. Библиотека линкуется и нормально создаётся sni_gtk3.so. Но она в частности зависит от libdbusmenu-glib.so.4, которая в бандле в репе плагина и по стандартным путям поиска, очевидно, не находится. Можно было бы просто распаковать бандл в /usr, но это поломало бы системы тем, кто собирает не в докере. Поэтому я решил сделать симлинк на эту библиотеку (взято из архива здесь) по путям, которые указываются для pluginfo, т.е в каталог со static-build.

Я склонировал билдер к себе, собрал в докере и поставил полученный плагин на актуальную сборку deadbeef (проверил и на портативной). Вроде-бы всё работает. Скрин

SkyMaverick ★★★★★
() автор топика
Последнее исправление: SkyMaverick (всего исправлений: 1)
Ответ на: комментарий от SkyMaverick

нужно проверять на какой-нибудь свежеустановленной убунте, в которой нет системного libdbusmenu-glib.so.4. вот тогда можно будет точно быть уверенным, что оно работает :)

waker ★★★★★
()
Ответ на: комментарий от SkyMaverick

по поводу симлинка в static-libs, это конечно хак, но если работает то и ладно, я не вижу какого-то особого вреда от этого.

waker ★★★★★
()
Ответ на: комментарий от waker

Проверил на свежеустановленных Fedora 34, Mint 20, Kubuntu 20.10. Ну и на моей Ubuntu 20.04. Эта библиотека, вроде как, по-умолчанию идёт, иначе все эти меню в принципе работать не будут.

Вечером скачаю свежую Убунту (ну и 14.04, как крайнюю поддерживаемую, попробую), потестить. Если там всё нормально, то попробую в DPB добавить.

Возможно, надо добавить прямо в description плагина, чтобы было явно написано (и в пояснений на сайте тоже), что нужна эта зависимость? Так-то в README написано, но кто ж его читает.

SkyMaverick ★★★★★
() автор топика
Последнее исправление: SkyMaverick (всего исправлений: 2)
Ответ на: комментарий от SkyMaverick

Эта библиотека, вроде как, по-умолчанию идёт

тогда понятно почему оно работает. но в этом случае тогда и нет смысла распространять эту библиотеку вместе с плагином. он все равно не взлетит, если в системе чего-то не хватает :)

waker ★★★★★
()
Ответ на: комментарий от waker

Я её и не планирую распространять. Она нужна для сборки и для pluginfo, т.к. её ни в static-builds ни в docker-образе нет. Поэтому, чтобы никому не корячиться, я так забандлил. Вот результат работы DPB (делал docker-ом).

  • Fedora 34 (установлено расширение GNOME для поддержк appindictors)
  • Xubuntu 20.04 тут и новый вариант, и оригинальный работает, можно на лету переключать.
  • Ubuntu 20.04 работает, мой рабочий.

Доберусь до нормального интерента, внимательней проверю ещё старые Ubuntu и Kubuntu.

SkyMaverick ★★★★★
() автор топика
Ответ на: комментарий от waker

В общем, проверил на старых системах

Ubuntu 14.04/16.04: Штатная иконка не работает SNI работает при установке из deb. Cо static-build работает, но не отображает иконку (стандарую unknown). Видимо Unity умеет только зарегистрированные значки грузить. У SNI в Unity есть только одно действие (т.е. нет различия между левым-правым, одиночным и двойным кликом). Поэтому надо добавить пункт «Показать»

Kubuntu 14.04: Всё работает. В рамках реализации SNI в KDE (т.е. без тултипов и оверлейных иконок).

Kubuntu 21.04: Всё работает в рамках реализации протокола SNI (в тултипах убрали иконки)

Kubuntu 16.04: Всё работает. И даже coverart вместо значка грузится, как было задумано изначально автором.

Mint и последний MATE тоже подхватываются, но у МАТЕ, как и Unity, не может отобразить незарегистрированную иконку в portable-build. Дальше мне, честно говоря, надоело образы таскать.

В общем, думаю логичным добавить в меню кнопку «показать/скрыть окно». Это будет нужным для старых Unity и для GNOME (там и сейчас по-умолчанию не очень удобно, и неизвестно что ещё в голову ударит). И дальше уже сделать pull-request в DPB.

А в остальном, всё зависит от полноты реализации SNI в каждом конкретном DE (KDE в этом плане, конечно, впереди). В любом случае, у пользователя есть возможность, снять галку и использовать стандартный вариант или не использовать никакой. И остаются некоторые проблемы с Wayland-окнами (здесь писал).

SkyMaverick ★★★★★
() автор топика
Ответ на: комментарий от waker

Всё, допинал плагин. Собирается, работает. Работу с portable-build и под Unity (где только один action, и пришлось добавить пункт в меню) поправил. Пулл-реквест в builder послал.

SkyMaverick ★★★★★
() автор топика
Ответ на: комментарий от Hertz

по какой ссылке / с какой веб-страницы?

возможно где-то ссылку забыл обновить.

если MetaHertz в дискорде это ты, то видимо как-то получилось зайти?

waker ★★★★★
()
Ответ на: комментарий от waker

Со странички на гитхабе пытался зайти. Но потом скопировал ту же ссылку, потыкал в десктопном клиенте, и она сработала.

Hertz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.