| Summary: | Нет зависимости wine ot libpng15 | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Andrey Cherepanov <cas> |
| Component: | wine | Assignee: | Vitaly Lipatov <lav> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P3 | CC: | lav |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
| Bug Depends on: | 38856 | ||
| Bug Blocks: | 40797, 31991 | ||
Была такая проблема. В Сизифе исправлена в wine-vanilla-2.14 (Requires уже libpng16), но я не уверен, что это повлияет на 32-битую версию. В wine-2.14 также будет добавлено. $ apt-cache depends libwine-vanilla | grep libpng Требует: libpng16 при этом пакет после arepo не имеет зависимостей: $ apt-cache depends i586-libwine-vanilla <i586-libwine-vanilla> Что тут можно сделать? (В ответ на комментарий №2) > $ apt-cache depends libwine-vanilla | grep libpng > Требует: libpng16 > > при этом пакет после arepo не имеет зависимостей: > $ apt-cache depends i586-libwine-vanilla > <i586-libwine-vanilla> > > Что тут можно сделать? Для этого есть трюк: симлинк на системную библиотеку под 32-битной сборкой. После этого в arepo форируется ссылка на arepную библиотеку. Для примеры: skype-preinstall. На данный момент зависимости не теряются:
$ rpm -q --requires i586-libwine
i586-libpng16
Но для обеспечения идентичности пакетов i586-*wine и оригинальных 32-битных *wine я бы перешёл на преобразование в путь к библиотеке.
Насколько я понимаю, создание ссылки, которая при упаковке породит зависимость на файл, на который она ссылается, ничем не отличается от добавления зависимости на файл.
План такой:
Название библиотеки, указываемое при линковке превращать в зависимость на файл, который будет реально линковаться при запуске.
То есть
# png -> /usr/lib/libpng16.so.16
а не /usr/lib/libpng16.so.16.37.0
Пример кода:
get_linking_lib()
{
# get full path to lib.so
local ll=%_libdir/lib$1.so
test -f "$ll" || return 1
# real lib file (WHY it links not to linked file??)
local ee=$(readlink -e $ll)
test -f "$ee" || return 1
# get third file (not last, not just .so) in a hope there are only one file
local ee1=${ee/.so*/.so}
test -f "$ee1" || return 1
local ee2=$(ls -1 $ee1.* | grep -v "^$ee")
# if there are no third file, just return one
if [ "$ee" = "$ee2" ] ; then
echo "$ee"
test -f "$ee"
else
echo "$ee2"
test -f "$ee2"
fi
}
L=$(get_linking_lib png) || exit
ln -s $L %buildroot%_libdir/%name/$(basename $L)
%files
%_libdir/%name/
Начиная с wine 7.5 используется встроенный libpng, внешняя зависимость больше не нужна. |
+++ Данная ошибка создана размножением ошибки 31991 +++ Установил i586-wine Когда запускаю "wine cmd", вижу ошибки: err:wincodecs:PngEncoder_CreateInstance Failed writing PNG because unable to find libpng15.so.15 fixme:ole:CoCreateInstanceEx no instance created for interface {00000103-a8f2-4877-ba0a-fd2b6645fb94} of class {27949969-876a-41d7-9447-568f6a35a4dc}, hres is 0x80004005 err:menubuilder:convert_to_native_icon error 0x80004005 creating bitmap encoder После установки пакета i586-libpng15 ошибки прекратились. (Если б не понадобилось проверить одну мелочь, так бы и не заметил. Ошибки видны только в консоли и только с 32-битным wine в 64-битном Linux, потому что пакет libpng15 устанавливается вместе с, наверное, любым desktop manager)