LINUX.ORG.RU

Sigil и его зависимости

 , ,


0

1

https://bugs.gentoo.org/721208

установил sigil командой emerge -GK sigil, запускаю, а он мне выдаёт:

$ sigil
/usr/lib64/sigil/sigil: /usr/lib64/libQt5Core.so.5: version `Qt_5.14' not found (required by /usr/lib64/sigil/sigil)

Это вообще что за нафиг такой? Зависимостями не я должен заниматься, а пакетный менеджер!

Читал страницу https://wiki.gentoo.org/wiki/Qt но там не написано, какой ebuild надо мёржить, чтобы появился Qt (зато, блин, написано как правильно читать! Очень, блин, нужно.)

[ebuild     U  ] dev-qt/qtcore-5.14.1-r1:5/5.14::gentoo [5.12.5-r1:5/5.12::gentoo] USE="icu systemd -debug -test" 0 KiB

А потом эти люди (генту-разработчики) приходят на LOR и начинают вещать, что я не понимаю, как работают сабслоты. У себя сначала сделайте, чтобы везде заработало!

Но даже если удалить версию 5.12 и установить версию 5.14, то всё равно не запускается, пишет:

$ sigil
/usr/lib64/sigil/sigil: relocation error: /usr/lib64/libQt5Network.so.5: symbol _ZN10QMutexPool17globalInstanceGetEPKv version Qt_5_PRIVATE_API not defined in file libQt5Core.so.5 with link time reference
★★☆

Последнее исправление: Einstok_Fair (всего исправлений: 5)
Ответ на: комментарий от linxon

Не интересно, это не исправит кривой .ebuild.

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Pinkbyte

Нет никакого несоответствия. Пакет просит qtcore в слоте 5, в системе установлен пакет qtcore в слоте 5. Всё отлично?

Я даже процитирую:

RDEPEND="
	${PYTHON_DEPS}
	app-text/hunspell:=
	dev-libs/libpcre:3=[pcre16]
	$(python_gen_cond_dep \
		'dev-python/css-parser[${PYTHON_USEDEP}]
		dev-python/lxml[${PYTHON_USEDEP}]
		dev-python/six[${PYTHON_USEDEP}]')
	>=dev-qt/qtconcurrent-5.12:5
	>=dev-qt/qtcore-5.12:5

Вот вам всем - https://bugs.gentoo.org/721208

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

Ну так, не находишь, что такой предметный разговор гораздо более интереснее абстрактного «кривой ебилд».

Отсутствие здесь сабслота - однозначно баг. Твой багрепорт я поправил и назначил на мэйнтэйнеров

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte
  1. Я неправильно там версию написал. Это в app-text/sigil-0.9.16-r1

  2. сабслот не нужен. Код требует 5.14, значит и в ebuild должна быть 5.14, а не 5.12

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

Код требует 5.14

Ты уверен? Sigil 0.9.16 вышел в июле 2019, Qt 5.14 начали разрабатывать в конце августа.

Не, я конечно допускаю что автор sigil мог хреначить линковку прямо с master-веткой qt, но что-то мне кажется что это больше похоже на твою ошибку с установкой бинарного пакета, слинкованного с Qt 5.14 в систему, где стояла предыдущая версия. А так как сабслот отсутствовал - никто не помешал тебе этого сделать. Мой комментарий насчет игнорирования зависимостей признаю ошибочным - мне показалось что ты использовал ключ -O вместо ключа -G.

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

абстрактного «кривой ебилд»

я не уверен, что именно криво в этой ситуации.

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Pinkbyte

это больше похоже на твою ошибку с установкой бинарного пакета, слинкованного с Qt 5.14 в систему, где стояла предыдущая версия

Верно. Но неправильная проверка версий это не моя ошибка, а пакетного менеджера.

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Pinkbyte

так как сабслот отсутствовал - никто не помешал тебе этого сделать.

Но там и не должно быть зависимости от сабслота. Потому что если бы на билд сервере собрано было с qtcore 5.12 всё бы установилось.

Т.е. проблема не в зависимости, а в том, что portage «не помешал». А должен был!

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

Т.е. проблема не в зависимости, а в том, что portage «не помешал»

Кажется ты не понимаешь как работают сабслоты в бинарных пакетах. Как раз именно из-за отсутствия сабслот-оператора ':=' в ебилде, сабслот(будь-то 5/5.12 или 5/5.14) явно не прописался в бинарный пакет на этапе сборки, отсюда - portage не помешал тебе поставить бинарный пакет при наличии установленного Qt с другим сабслотом.

Данное поведение описано в PMS, секция '8.3.3 Slot dependencies'

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

Почему так вышло? Почему portage записывает сабслот в бинарный пакет, только если он явно указан в ebuild?

Я думаю, что сабслоты не указаны в очень многих билдах. По-крайней мере, мне мысль прописывать их туда никогда не приходила в голову. Здесь ясно в билде сказано - неважно какая версия, если она больше 5.12. И тут вдруг внезапно бац, и оказывается, что нужно зафиксировать слот 5.12.

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

Почему так вышло? Почему portage записывает сабслот в бинарный пакет, только если он явно указан в ebuild?
Я думаю, что сабслоты не указаны в очень многих билдах. По-крайней мере, мне мысль прописывать их туда никогда не приходила в голову.

Все еще хуже, ты не понимаешь зачем были созданы сабслоты... Тэкс, ну давай тогда по порядку, читни-ка вот это для начала, секция «Real-world examples». Потом я думаю стоит заглянцевать документацией по autotools в части версионирования библиотек.

Как сможешь ответить на вопрос вида: «есть dev-util/boost. У него есть сабслоты. В каких случаях не будут прописаны сабслоты для boost в зависимостях у другого пакета, и это будет оправдано, так как прописывание сабслота вызовет лишнюю пересборку, в результате которой ничего не поменяется?», приходи, поговорим дальше. Хотя, сдаётся мне, что как только ты сможешь ответить на этот вопрос тебе разговор и не понадобится - ты сам всё поймешь.

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

есть dev-util/boost. У него есть сабслоты.

это решительно другой случай, не такой как в этом топике.

в приведённой тобой статье предлагается делать одинаковый SLOT=«0» и разные сабслоты, соответствующие мажорным версиям симлинков библиотеки.

Но в случае с qtcore мажорным версиям симлинков соответствует номер слота! (это моя непроверенная гипотеза) То есть, оба ебилда qtcore-5.12 и qtcore-5.14 устанавливают одну и ту же библиотеку libqtcore.so.5 (и поэтому у них слот №5)

А в статье на wiki, которую ты предлагаешь читать, там библиотека dev-libs/libfoo-1.0 устанавливает libfoo.so.1 а библиотека dev-libs/libfoo-2.0 устанавливает libfoo.so.2

В этом случае мне понятно, чем отличается прикладная программа - она ссылается на разные so.N

В случае же с sigil - libqtcore.so.5 не меняется.

# equery files qtcore | grep '\.so'
/usr/lib64/libQt5Core.so
/usr/lib64/libQt5Core.so.5
/usr/lib64/libQt5Core.so.5.14
/usr/lib64/libQt5Core.so.5.14.1

думаю стоит заглянцевать документацией по autotools в части версионирования библиотек.

Как это сделать (что именно прочитать)?

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

Но в случае с qtcore мажорным версиям симлинков соответствует номер слота! (это моя непроверенная гипотеза)

Номер слота(не сабслота, а именно слота) никак не связан с версиями .so-файлов. А вот сабслоты - связаны.

В случае же с sigil - libqtcore.so.5 не меняется.

Угу. А еще есть /usr/lib64/libQt5Core.so. Видимо вообще можно саблоты не менять - будет тишь, да благодать.

Как это сделать (что именно прочитать)?

https://autotools.io/libtool/version.html

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

Номер слота(не сабслота, а именно слота) никак не связан с версиями .so-файлов.

Это значит, что номер слота не нужен. Ничего бы не поменялось, если бы вместо «5» там был «0». И обусловлен номер 5 только «историческими причинами», то есть, упёртым нежеланием разработчиков использовать «0» для понятности, специально чтобы вводить других людей в заблуждение.

Видимо вообще можно саблоты не менять - будет тишь, да благодать.

Так и есть. Твой сарказм мешает ТЕБЕ увидеть очевидное: в данном конкретном случае вместо сабслотов можно использовать слоты. Есть неудобство - синтаксис слотов не поддерживает формат отличный от ‘[0-9]+’. Но можно было бы закостылить слоты 512, 514 и тогда «вообще можно сабслоты не менять».

Синтаксис зависимости может точно так же затребовать пересборку при изменении слота (и вообще это поведение по умолчанию), и может отменить пересборку при изменении слота (возможность такая есть для неких редких и странных случаев).

Итак, зачем же нужны сабслоты в данном случае? Они нужны только для «красоты» и для «исторической преемственности». То есть это заморочка portage ради самобытности. Т.е. portage - кривой, длина обучения пользователей необосновано увеличена введением ненужных концепций, а гентушники - вредители и замедляют всемирный прогресс по заказу Билла Гейтса.

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

https://devmanual.gentoo.org/general-concepts/slotting/index.html

Current versions of portage accept slot and sub-slot names that begin with an alphanumeric character or _, and contain alphanumerics and _, -, ., and + characters.

Ну тем более. Значит в качестве имени слота даже 5.14 писать можно.

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Pinkbyte

https://autotools.io/libtool/version.html

Причитал, ничего не понял.

На странице https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Subslots написано:

Qt libraries are considered ABI-stable for each major release, and therefore the slot is used to represent public ABI version. Subslots are used to expose ABI changes in private ABI and normally should not be used by revdeps.

Из этого следует, что ошибка в Sigil. Не должен он зависеть от private ABI без уважительной причины (которая пока не известна). Поэтому нельзя просто взять и затребовать конкретный subslot, надо сначала выяснить, не нужно ли пропатчить Sigil.

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

Я написал большую простыню в попытке объяснить тебе где ты не прав, но потом дочитал твое второе сообщение, а именно:

Прочитал, ничего не понял.

И желание писать дальше отпало. Ты уж извини, но в общении с тобой складывается ощущение что будто первокласник требует у меня объяснить основы дифференциального исчисления, при этом отказываясь научится простейшим арифметическим операциям. При этом рассказывая мне что «а чё там такого, там же всё просто, ну расскажи, зачем мне эти сложения да умножения». Более того - строя на основе своих обрывочных знаний мегатеории, от которых у знающих людей опухает лицо от фэйспалмов.

Сил моих больше нет. И лицо у меня уже сильно болит, прости.

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

У разработчика билда тоже возникли непонятки, о которых он написал в баге. А проблема есть - использование portage привело к возникновению неработающего сетапа. И её надо как-то решить.

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