[devel] libopenobex-1.3 symbol versioning patch

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пт Авг 11 23:42:54 MSD 2006


On Fri, Aug 11, 2006 at 10:44:53PM +0400, Sergey Vlasov wrote:
> Hello!
> 
> Прошу высказать замечания по прилагаемому патчу, который добавляет
> symbol versioning в libopenobex-1.3 (сейчас в Сизифе лежит 1.0.1).

[ Перепутал сначала с openbox:

А что, кто-то ещё линкуется с libopenbox, кроме самого openbox?
В apt-cache пока не видно.

Теперь посмотрел внимательнее и вижу, что не openbox. ]

> Глубже версии 1.0.0 я копать не стал (это конец 2002 года, 1.0.1, где
> не сделали ничего существенного - октябрь 2003).  На то, что было в
> этих версиях, я поставил версию OPENOBEX_1.0 (можно было, конечно,
> написать 1.0.0, но позднее формат версий немного сменился).
> 
> Функции OBEX_SetUserCallBack, OBEX_SetTransportMTU, OBEX_ServerAccept,
> OBEX_ObjectReParseHeaders на самом деле были ещё в 1.0.0, но
> фактически не были доступны из-за фильтрации символов по lib/obex.sym,
> где они были пропущены (эта ошибка была исправлена уже после выхода
> 1.0.1, и первый релиз, в который попало исправление - 1.1), поэтому я
> поставил для этих символов версию OPENOBEX_1.1, как и для добавленных
> позднее в ходе разработки 1.1 OBEX_SuspendRequest, OBEX_ResumeRequest,
> OBEX_InterfaceConnect, OBEX_FindInterfaces, OBEX_FreeInterfaces.
> После 1.1 вроде бы изменений ABI больше не было (во всяком случае,
> файл lib/obex.sym больше не менялся).
> 
> Тест для autoconf самопальный - возможно, у кого-то есть варианты
> лучше?

Круто!

> --- openobex-1.3/lib/obex.ver.alt-symbol-versions	2006-08-11 22:05:23 +0400
> +++ openobex-1.3/lib/obex.ver	2006-08-11 22:05:23 +0400
> @@ -0,0 +1,57 @@
> +OPENOBEX_1.0 {
> +global:
> +
> +	OBEX_Init;
> +	OBEX_Cleanup;
> +	OBEX_RegisterCTransport;
> +	OBEX_SetCustomData;
> +	OBEX_GetCustomData;
> +	OBEX_TransportConnect;
> +	OBEX_TransportDisconnect;
> +	OBEX_CustomDataFeed;
> +	OBEX_GetFD;
> +	OBEX_HandleInput;
> +	OBEX_ServerRegister;
> +	OBEX_Request;
> +	OBEX_CancelRequest;
> +	OBEX_SetUserData;
> +	OBEX_GetUserData;
> +	OBEX_ObjectNew;
> +	OBEX_ObjectDelete;
> +	OBEX_ObjectAddHeader;
> +	OBEX_ObjectGetNextHeader;
> +	OBEX_ObjectReadStream;
> +	OBEX_ObjectSetRsp;
> +	OBEX_ObjectGetNonHdrData;
> +	OBEX_ObjectSetNonHdrData;
> +	OBEX_ObjectSetHdrOffset;
> +	OBEX_UnicodeToChar;
> +	OBEX_CharToUnicode;
> +	OBEX_ResponseToString;
> +	OBEX_GetResponseMessage;
> +	InOBEX_ServerRegister;
> +	InOBEX_TransportConnect;
> +	IrOBEX_ServerRegister;
> +	IrOBEX_TransportConnect;
> +	BtOBEX_ServerRegister;
> +	BtOBEX_TransportConnect;
> +	FdOBEX_TransportSetup;
> +
> +local:
> +	*;
> +};

Здесь вот что получается: "базовые" символы, у которых раньше интерфейса
не было, теперь получат интерфейс по умолчанию OPENOBEX_1.0; и при
линковке с этой библиотекой появится зависимость на OPENOBEX_1.0.  Это
может быть не очень желательно, но может быть и нормально.

Я в таких случаях для базовых символов отдельного интерфейса не делаю,
чтобы после добавления versioning при пересборке других пакетов не
появлялось новых зависимостей.  Но приходится более тщательно
контролировать секцию local: в первом блоке.

> +OPENOBEX_1.1 {
> +global:
> +
> +	OBEX_FindInterfaces;
> +	OBEX_FreeInterfaces;
> +	OBEX_InterfaceConnect;
> +	OBEX_ObjectReParseHeaders;
> +	OBEX_ResumeRequest;
> +	OBEX_ServerAccept;
> +	OBEX_SetTransportMTU;
> +	OBEX_SetUserCallBack;
> +	OBEX_SuspendRequest;

Т.е. OPENOBEX_1.0 можно было не писать, а вот здесь вот (т.е.
обязательно в первом блоке) написать секцию local: и перечислить все
символы, которые не относятся к базовым.  Это можно сделать паттерном
типа [^OIBF]*, но всё равно желательно каждый раз проверять, что там
получается.  В общем тут есть свои мелкие преимущества и свои мелкие
недостатки, я бы не рискнул дать однозначный совет.

> +} OPENOBEX_1.0;

Кстати список можно проверить с помощью rpmsodiff из пакета qa-robot.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20060811/90e9922c/attachment-0001.bin>


Подробная информация о списке рассылки Devel