[devel] version scripts
Igor Zubkov
=?iso-8859-1?q?igor=2Ezubkov_=CE=C1_gmail=2Ecom?=
Пт Май 30 21:19:37 MSD 2008
29.05.08, Alexander Bokovoy<ab на altlinux.org> написал(а):
> >> > > > Так вот, я прав:
> >> > > > 1) что нужны только символы с пометкой T?
> >> > > > 2) что T _fini и T _init не нужно добавлять в version script?
> >> > > Для начального списка я бы посмотрел в include-файлы.
> >> > А если проект весит 10 mb? А если ещё больше? Предлагаешь читать все
> >> > исходники? Зачем делать работу за nm?
> >> Не все символы, полученные nm, могут быть во внешнем API.
> >
> > Вот я лю этом и спрашиваю. Только "T" или ещё какие-то?
>
> поэтому и говорят: "Смотрите в include-файлы". API определяется именно
> там и различия в коде между двумя версиями могут приводить к разнице в
> API даже если символы в ELF не поменялись. В частности, могут
> поменяться структуры данных, которые в ELF не отражены.
Понятно.
> К тому же, не все публичные символы в ELF публичны с точки зрения API.
Ага. Есть различная внутреняя кухня которую лучше не выставалять наружу.
> В некоторых особых случаях правила использования символов, отраженных
> в ABI, определены лицензией. Например, распространено использование
> LGPL+ограничения по плагинам (они могут использовать только символы
> официального API, в противном случае лицензия GNU GPL).
>
> Поэтому в любом случае нужно смотреть и анализировать реальное API для
> того, чтобы делать выводы по версионированию ABI.
Спасибо за советы, когда буду писать страницу на вики, надо будет это
всё туда добавить.
Итак, я сделал тестовый version script для libasyncns-0.3-alt2.
[icesik на iceberg SOURCES]$ cat libasyncns-0.3-vers.sym
LIBASYNCNS_0_3
{
global:
asyncns_cancel;
asyncns_fd;
asyncns_free;
asyncns_freeaddrinfo;
asyncns_getaddrinfo;
asyncns_getaddrinfo_done;
asyncns_getnameinfo;
asyncns_getnameinfo_done;
asyncns_getnext;
asyncns_getnqueries;
asyncns_getuserdata;
asyncns_isdone;
asyncns_new;
asyncns_res_done;
asyncns_res_query;
asyncns_res_search;
asyncns_setuserdata;
asyncns_wait;
local:
*;
};
[icesik на iceberg SOURCES]$
Из этого списка убраны A символы и служебные (T _fini и T _init).
После сборки у libasyncns появляется новый интерфейс LIBASYNCNS_0_3
(это ведь так называется?) и новый Provides
libasyncns.so.0(LIBASYNCNS_0_3). Единственное приложение которое
линкуется с libasyncns pulseaudio после пересборки получает новую
бинарную зависимость на libasyncns.so.0(LIBASYNCNS_0_3). Ну и вопрос,
я всё правильно сделал? Если да, то я занесу это всё в вику для
потомков.
P.S.: нужные файлы для воспроизведение приложены.
--
icesik
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : libasyncns.spec.bz2
Тип : application/x-bzip2
Размер : 1106 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20080530/80999e9c/attachment-0006.bin>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : libasyncns-0.3-alt-vers.patch.bz2
Тип : application/x-bzip2
Размер : 336 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20080530/80999e9c/attachment-0007.bin>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : libasyncns-0.3-vers.sym.bz2
Тип : application/x-bzip2
Размер : 199 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20080530/80999e9c/attachment-0008.bin>
Подробная информация о списке рассылки Devel