LINUX.ORG.RU

Как правильно создать deb-пакет приложения, чтобы он одновременно работал и в x11, и в wayland?

 , , , ,


1

1

Здравствуйте,

Toolkit-ы не использую.

Самый очевидный способ - это при сборке пускового файла поставить на компьютер все нужные библиотеки x11 и wayland одновременно. Это позволяет собрать результат, но это также требует в зависимостях пакета указывать runtime-версии всех нужных библиотек опять же и под x11, и под wayland. В результате при установке пакета в систему влетят библиотеки из другого дисплейного менеджера, что вроде бы некритично, но может и не очень красиво выглядит. Это правильный способ или можно всё решить как-то изящнее? Например, можно сделать экспорт функций из runtime-библиотек, тогда эти библиотеки не будут явно требоваться при старте приложения. Плюс вроде в этом есть, но как-то всё это стрёмно выглядит. И если экспорт функций в x11 прокатывает без проблем

void* handle=dlopen("libX11.so.6", RTLD_LAZY);
    if (!handle)
    {
        fprintf(stderr, "Failed to load libX11.so.6: %s\n", dlerror());
        return false;
    }
    exp_XConvertSelection=(PFN_XConvertSelection)dlsym(handle, "XConvertSelection");
    exp_XGetWindowAttributes=(PFN_XGetWindowAttributes)dlsym(handle, "XGetWindowAttributes");

, то wayland вообще обрубил меня на первой же функции:

uint32_t wlnd_proxy_get_version(struct wl_proxy *proxy)

Даже выбросив все обращения на функцию wlnd_proxy_get_version в программе я всё равно получаю на ней ошибку линковки, потому что wayland где-то внутри всё равно к ней обращается.

Таким образом мне нужно просто понять, стоит ли тут мудрить или просто кидаешь в пакет двойные зависимости и спишь спокойно ?



Последнее исправление: Dimez (всего исправлений: 2)

Как правильно создать deb-пакет приложения, чтобы он одновременно работал и в x11, и в wayland?

Возьми за основу пакет, например с bash, он работает и в x11 и в любом композиторе wayland. Вот серьёзно, прибивать гвоздями пакет к условному gnome, только потому, что нужно графическое окружение это идиотизм.

einhander ★★★★★
()

Это правильный способ

Да

В результате при установке пакета в систему влетят библиотеки из другого дисплейного менеджера

Например? Библиотека тулкита может продтянуть библиотеки иксов и вяленого, в обратную сторону сомнительно.

Например, можно сделать экспорт функций из runtime-библиотек, тогда эти библиотеки не будут явно требоваться при старте приложения

Тогда у бинарных пакетов в зависимостях библиотеки придется прописывать вручную, отнимая работу у хелпера

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

Да

Это как раз тот ответ, который меня вполне устраивает

Odin_KG
() автор топика

Toolkit-ы не использую.

Если хочешь переносимость, всё равно придётся тогда сделать свой.

Что-то вроде

void* handle=dlopen("libX11.so.6", RTLD_LAZY);
if (handle)
  graphics = dlopen("my-graphics-x11.so", RTLD_LAZY);
else
  graphics = dlopen("my-graphics-wayland.so", RTLD_LAZY);

И тогда можно в зависимостях указывать x11 или wayland, а не оба сразу.

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

Но у него нет зависимости и от иксов, и от вяленого. А работает он в эмуляторе терминала, который, в свою очередь, работает в иксах или в вяленом. Но и от эмулятора терминала bash не зависит.

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

Если верно помню, то у достаточного количества GUI программ в дебиане нет чёткой зависимости от исков или вейленда. Так как при удалении исков/вейленда они остаются в системе. Но твоя позиция понятна. ТСу можно включить зависимость типа или, деб пакеты позволяют сделать так:

foo [!i386] | bar [!amd64]

Или просто указать в рекомендуемых пакетах обе системы.

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

Т.е. вы предлагаете ввести «посредническую» so, её прибить намертво к тому же wayland и ссылаться из программы именно на неё. А ведь идея-то совсем неплоха - мне кажется, что это вполне может сработать.

Odin_KG
() автор топика
Ответ на: комментарий от kostik87

Собери два пакеты package_name-x11, package_name.

Не… ну понятно, что можно сделать одну версию для x11 и вторую для wayland.

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

На самом деле, это мало отличается от двух версий.

Потому что структурно всё равно зависимости выглядят так:

my-pack : my-pack-x11 | my-pack-wayland
my-pack-x11 : libx11
my-pack-wayland : libwayland

А является my-pack пакетом с бинарником, который дёргает одну из своих библиотек, или пустым пакетом, а бинарник в одном из его зависимостей, это уже неважно.

monk ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.