On Sat, Jan 26, 2013 at 06:17:00PM +0400, Dmitry V. Levin wrote: > On Sat, Jan 26, 2013 at 05:30:40PM +0400, Sergey Vlasov wrote: [...] > > На мой взгляд, это неправильно - если в зависимости явно указано имя > > виртуального пакета, скорее всего, это сделано намеренно, и такую > > зависимость необходимо оставлять в том виде, как она есть. > > А если неявно? Если это find-requires нашел зависимость на soname, > ее ведь надо превращать в строгую зависимость на пакет. Да, действительно (причём это как раз наиболее опасные нестрогие зависимости, поскольку компоненты, собираемые из одного пакета, с наибольшей вероятностью могут использовать недокументированные ABI и особенности реализации компонентов, вынесенных в соседние подпакеты). Но для явно указанных в spec-файле зависимостей, выраженных через виртуальные пакеты, не нужно усиливать их автоматически. Правда, можно представить такую ситуацию, когда мантейнер переименовал один из подпакетов, добавив туда соответствующие Provides и Obsoletes, но забыл обновить зависимость на этот подпакет - в этом случае такая зависимость превратится в явную зависимость на виртуальный пакет и не будет усилена автоматически. Можно попробовать отлавливать подобные ошибки по наличию Obsoletes для указанного в зависимостях имени пакета. > Другими словами, предлагается модифицировать алгоритм, чтобы он работал > следующим образом: подпакет A исходного пакета S автоматически получает > строгую зависимость от подпакета B исходного пакета S, если выполнено любое > из следующих условий: > - у A есть зависимость от B; > - у A есть такая зависимость X с атрибутом RPMSENSE_FIND_REQUIRES, что B > является единственным подпакетом S, удовлетворяющим эту зависимость X. Это уже похоже на правильный вариант (в случае, если мантейнер по каким-то причинам хочет разрешить смешивать подпакеты разных версий, ему достаточно сделать для этих подпакетов виртуальные пакеты с зависимостями нужной строгости - например, с чем-то типа %abi_version в версии таких виртуальных пакетов).