On Sun, May 09, 2010 at 07:11:51PM +0400, Денис Смирнов wrote: > On Sun, May 09, 2010 at 06:02:24PM +0400, Алексей Турбин wrote: > > AT> Я нарисовал предварительную (и пока весьма несовершенную) реализацию > AT> этого дела. Суть этого дела в том, что сонеймы (имена библиотек) > AT> будут предоставлять "множество символов", то есть функций (и переменных), > AT> которые из них можно загрузить. Соответственно при линковке можно > AT> требовать символы, которые туда разрешаются - и это делается > AT> автоматически в lib.req с помощью специальных возможностей ld.so/ldd. > AT> http://git.altlinux.org/people/at/packages/rpm.git?a=shortlog;h=refs/heads/libhash > AT> С целью тестирования я пересобрал (приватно) базовую систему; и теперь > AT> например у пакета librpm появилась зависимость > AT> Requires: libz.so.1()(64bit) >= set:gzclose;gzdopen;gzerror;gzflush;gzopen;gzread;gzseek;gzwrite > > А что будет, если, например: > > пакет A требует зависимость libabc.so.1 >= set:func1 > > а пакет B провайдит libabc.so.1 = set:func2 > ? > мне только так кажется, или при этом зависимость будет удовлетворена > формально (хотя в действительно, очевидно, это не так)? Зависимость удовлетворена не будет. set-зависимости обладают специальной семантикой: Requires-зависимость будет удовлетворена, только если requries-set является подмножеством provides-set. http://git.altlinux.org/people/at/packages/rpm.git?a=commitdiff;h=acd1dd03 То есть версии у зависимостей вида "set:*" обрабатываются специальным кодом который их "раскладывает" и дальше проверят вложение. Вообще оказалось что в таком ракурсе возможна декомпозиция: с одной стороны, как представить set-зависимости; с другой стороны, как их формировать. Оказывается это сводит сложную задачу к более простым задачам. :)