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/

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

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
КАПЧА