Bug 21559

Summary: libpng12(PNG12_0) broken after the transition from PNG_12
Product: Sisyphus Reporter: avm <avm>
Component: libpng12Assignee: placeholder <placeholder>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: glebfm, ldv, php-coder, placeholder
Version: unstable   
Hardware: all   
OS: Linux   

Description avm 2009-09-14 00:08:36 MSD
После исправления #12886 в libpng12 изменился интерфейс PNG12_0: до исправления он был пуст, а теперь содержит почти все символы библиотеки. Это ломает точечные обновления с бранчей. Пример:

$ rpm -q libpng12 libgtk+2-common
libpng12-1.2.27-alt1
libgtk+2-common-2.16.5-alt4
$ cd /usr/lib/gtk-2.0/2.10.0/loaders/
$ ldd -r libpixbufloader-png.so | cut -d' ' -f1-6 | head -5
symbol png_get_valid, version PNG12_0 not defined
symbol png_error, version PNG12_0 not defined
symbol png_write_info, version PNG12_0 not defined
symbol png_destroy_read_struct, version PNG12_0 not defined
symbol png_set_IHDR, version PNG12_0 not defined

Чтобы это обойти, можно попробовать поменять местами интерфейсы: PNG_12 сделать основным, а PNG12_0 добавить как compat. Надеюсь, новособранное будет цепляться на PNG_12 и пользоваться той библиотекой, которая есть. (Или можно все перевесить на PNG12_0_ALT, а compat'ами оставить PNG_12 и PNG12_0.)

Кроме того, в спеки пользователей libpng12, видимо, пока желательно добавлять что-то вроде

# Until libpng12.so.0 changes soname, work around a bug in symbol versioning
Requires: libpng >= 1.2.37-alt3
Comment 1 Dmitry V. Levin 2009-09-19 00:14:11 MSD
Ну хорошо, давайте попробуем снова поменять местами PNG_12 и PNG12_0.
Comment 2 Repository Robot 2009-09-19 01:47:55 MSD
libpng-1.2.40-alt2 -> sisyphus:

* Fri Sep 18 2009 Dmitry V. Levin <ldv@altlinux> 1.2.40-alt2

- libpng12: Swapped PNG_12 and PNG12_0 interfaces again (closes: #21559).
Comment 3 avm 2009-09-19 21:34:43 MSD
On second thought, второе решение (сделать новый интерфейс PNG12_0_ALT) было бы лучше: тогда вновь собранные пакеты вытягивали бы новый libpng12, с гарантированно хорошим PNG12_0.
Comment 4 Dmitry V. Levin 2009-09-19 22:19:11 MSD
Отчего же?  Вновь собранные пакеты будут вытягивать PNG_12, который всегда был хорошим.
Comment 5 avm 2009-09-19 22:37:19 MSD
Требовать хороший PNG12_0 полезно, чтобы обеспечить работоспособность непересобранных пакетов (которые пользуются PNG12_0, но не требуют, чтобы он был хорошим).

Собственно, я наткнулся на этот баг, обновляя evince. Он вытянул libgtk+2-common, у которого обломался файлтриггер (потому что gdk-pixbuf-query-loaders попытался подгрузить loader для PNG и упал с неразрешенными символами).

Представим себе теперь, что кто-то добрый пересобрал libqt3, и человек со старым libpng12 обновляет себе libqt3, а затем libgtk+2-common. В текущей ситуации файлтриггер в libgtk+2-common снова обломается. А вот если бы пересобранный libqt3 заботливо вытянул свежий libpng12, то файлтриггер сработал бы. (Представляете -- QT заботится о GTK! Практически как если бы волк и агнец паслись вместе.)