ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@altlinux.ru>
To: ALT Devel discussion list <devel@lists.altlinux.org>
Subject: Re: [devel] libopenobex-1.3 symbol versioning patch
Date: Sat, 12 Aug 2006 14:43:52 +0400
Message-ID: <20060812104352.GB15159@procyon.home> (raw)
In-Reply-To: <20060811194254.GC15751@localhost.localdomain>

[-- Attachment #1: Type: text/plain, Size: 4802 bytes --]

On Fri, Aug 11, 2006 at 11:42:54PM +0400, Alexey Tourbin wrote:
> On Fri, Aug 11, 2006 at 10:44:53PM +0400, Sergey Vlasov wrote:
> > Прошу высказать замечания по прилагаемому патчу, который добавляет
> > symbol versioning в libopenobex-1.3 (сейчас в Сизифе лежит 1.0.1).
[...]
> > Глубже версии 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.0; и при
> линковке с этой библиотекой появится зависимость на OPENOBEX_1.0.  Это
> может быть не очень желательно, но может быть и нормально.

Но использованию старых бинарников, слинкованных ещё с libopenobex без
версий, в любом случае ничего мешать не будет?

Конечно, сейчас получится, что новые пакеты будут в любом случае
тащить за собой новую библиотеку, даже если на самом деле им хватает
ABI, предоставляемого версией 1.0 (т.е., полностью преимущества symbol
versioning проявятся только при расширении ABI в будущем).  Однако
предложенный ниже вариант мне нравится меньше...

> Я в таких случаях для базовых символов отдельного интерфейса не делаю,
> чтобы после добавления 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]*, но всё равно желательно каждый раз проверять, что там
> получается.  В общем тут есть свои мелкие преимущества и свои мелкие
> недостатки, я бы не рискнул дать однозначный совет.

В данном случае upstream уже использует ограничение набора
экспортируемых из библиотеки символов средствами libtool
(-export-symbols obex.sym, в файле obex.sym находится список символов,
образующих ABI библиотеки).  Хотелось бы, чтобы старый и новый способы
всегда давали одинаковый набор доступных символов.  В случае
использования [^OIBF]* это условие может не выполняться, например,
если в библиотеку добавили новую функцию, но забыли обновить файлы со
списком символов.  Такая функция при использовании -export-symbols
obex.sym, где содержится явный список всех символов, просто не будет
доступна, что не повлияет на ранее собранные программы, но немедленно
обнаружится при сборке новых программ, использующих эту функцию, и
может быть исправлено без необходимости пересборки всего, что
использует эту библиотеку; то же самое произойдёт и при использовании
obex.ver с явным указанием всех символов.  В случае же, если все
символы вида OBEX_* по умолчанию попадают в библиотеку без
присваивания версии, подобная ошибка может долгое время оставаться
незамеченной, а её исправление потребует пересборки всего, что было
слинковано с библиотекой (чтобы получить правильные зависимости на
версии).

Можно было бы попытаться при отсутствии полного списка символов в
obex.ver как-то сравнивать результат сборки с содержимым файла
obex.sym, чтобы обнаружить лишние символы, но не уверен, что это можно
сделать переносимым способом, пригодным для upstream.

Кстати, при использовании явного списка можно будет попробовать
сделать obex.ver основным файлом, а obex.sym генерировать из него,
например, с помощью sed (но в этом случае придётся наложить на формат
obex.ver дополнительные ограничения).

[-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --]

  reply	other threads:[~2006-08-12 10:43 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-11 18:44 [devel] [RFC] " Sergey Vlasov
2006-08-11 19:42 ` [devel] " Alexey Tourbin
2006-08-12 10:43   ` Sergey Vlasov [this message]
2006-08-12 11:19     ` Alexey Tourbin
2006-08-12 13:00       ` Sergey Vlasov
2006-08-12 13:32         ` Alexey Tourbin
2006-08-12 13:46           ` Alexey Tourbin
2006-08-12 14:08           ` Sergey Vlasov
2006-08-15 17:19         ` Dmitry V. Levin
2006-08-12 13:50 ` [devel] [RFC] " Sergey Vlasov
2006-08-12 14:05   ` [devel] " Alexey Tourbin
2006-08-12 14:36     ` Alexey Tourbin
2006-08-12 15:49       ` Sergey Vlasov
2006-08-13  7:51         ` Alexey Tourbin
2006-08-13 12:13           ` Sergey Vlasov
2006-08-13 12:20             ` Alexey Tourbin
2006-08-13 14:55               ` Sergey Vlasov
2006-08-13 16:00                 ` Alexey Tourbin
2006-08-13 18:57                   ` Sergey Vlasov
2006-08-15 19:27 ` [devel] [RFC] " Sergey Vlasov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060812104352.GB15159@procyon.home \
    --to=vsu@altlinux.ru \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git