EAPI-2: USE-зависимости
Это второй пост в серии постов описывающих EAPI 2.
USE-зависимостибыли востребованы очень давно. Они устраняют большинство built_with_use ошибок, которые происходят в pkg_setup, заменяя их на ошибки, которые видимы во время вычесления зависимостей.
Первыми кто использовал USE-зависимости были разработчики Exherbo в exheres-0 и Gentoo’s kdebuild-1. Казалось, что зависимости огромного можнество пакетов будут выглядеть как
blah? ( app-misc/foo[blah] ) !blah? ( app-misc/foo ) monkey? ( app-misc/foo[monkey] ) !monkey? ( app-misc/foo[-monkey] ) fnord? ( app-misc/foo ) !fnord? ( app-misc/foo[-fnord] )
Это ужасно неудобно. Для exheres-0 и kdebuild-1, мы добавили такой синтаксис:
[opt]- Флаг должен быть включен.
[opt=]- Флаг должен быть включен, если такой же флаг включен у устанавливаемого пакета, и выключен если он выключен.
[opt!=]- Флаг должен быть выключен, если такой же флаг включен у устанавливаемого пакета, и наоборот.
[opt?]- Флаг должен быть включен, если он включен у утанавливаемого пакета (но не обязательно должен быть выключен, если он выключен у устанавливаемого пакета).
[opt!?]- Флаг должен быть выключен, если он включен у утанавливаемого пакета (но не обязательно наоборот).
[-opt]- Флаг должен быть выключен.
[-opt?]- Флаг должен быть выключен, если такой же флаг включен у устанавливаемоого пакета.
[-opt!?]- Флаг должен быть выключен, если такой же флаг выключен у устанавливаемоого пакета.
USE-Зависимости могут быть скомбинированы, например так: foo/bar[baz][monkey?].
Для EAPI 2 в portage, Zac Решил использовать немного другой синтаксис:
[opt]- Флаг должен быть включен.
[opt=]- Флаг должен быть включен, если такой же флаг включен у устанавливаемого пакета, и выключен если он выключен.
[!opt=]- Флаг должен быть выключен, если такой же флаг включен у устанавливаемого пакета, и наоборот.
[opt?]- Флаг должен быть включен, если он включен у утанавливаемого пакета (но не обязательно должен быть выключен, если он выключен у устанавливаемого пакета).
[!opt?]- Флаг должен быть выключен, если он включен у утанавливаемого пакета (но не обязательно наоборот).
[-opt]- Флаг должен быть выключен.
Комбинирование USE-зависимостей осуществляется через запятую, например как тут: foo/bar[baz,monkey?].
В обоих случаях слот-зависимость должна идти до USE-зависимости, так что правильно foo/bar:1[baz], а не foo/bar[baz]:1. USE-зависимость узказывается после любых указаний версии, например >=foo/bar-2.1:2[baz].
Неправильно указывать на USE-флаг, который не используется пакетом (Включая USE_EXPAND флаги которые явно не указаны в IUSE). Так что неправильно использование foo/bar[opt] когда каая-либо версия foo/bar не имеет opt в IUSE, точно также и для foo/baz[opt?]. Для случаев когда только некоторые версии пакетов имеют указаный флаг, USE-зависимости могут комбинироваться с указанием версии и/или слота.
Что касается реализации, менеждер пакетов не должен пытаться автоматически установить или убрать нехватающие флаги, т.к. он не знает последствия изменения флагов (изменения флагов в некоторых случаях может даже сломать систему).
Оригинал: http://ciaranm.wordpress.com/2008/09/28/eapi-2-use-dependencies/

Отправить комментарий