[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