EBUILD (5)

НАЗВАНИЕ

ebuild - внутренний формат, переменные и функции в сценарии ebuild

ОПИСАНИЕ

Программа ebuild (1) может принять в качестве аргумента только один сценарий ebuild. Сценарий ebuild содержит переменные и команды, которые определяют, каким образом следует загружать исходный код того или иного программного пакета, распаковывать его, накладывать патчи, компилировать, устанавливать и включать в дерево. Кроме того, в сценарий также входят команды, которые должны выполняться до и после установки/удаления пакетов. Все сценарии ebuild написаны на bash.

ПРИМЕРЫ

Вот простой пример ебилда:

# Copyright 1999-2009 Gentoo Foundation 
# Distributed under the terms of the GNU General Public License v2 
# $Header: $ 

EAPI="4" 

inherit some_eclass another_eclass 

DESCRIPTION="Super-useful stream editor (sed)" 
HOMEPAGE="http://www.gnu.org/software/sed/sed.html" 
SRC_URI="ftp://alpha.gnu.org/pub/gnu/${PN}/${P}.tar.gz" 

LICENSE="GPL-2" 
SLOT="0" 
KEYWORDS="~x86" 
IUSE="" 

RDEPEND="" 
DEPEND="nls? ( sys-devel/gettext )" 

src_configure() { 
    econf \ 
        --bindir="${EPREFIX}"/bin 
} 

src_install() { 
    emake DESTDIR="${D}" install 
    dodoc NEWS README* THANKS AUTHORS BUGS ChangeLog 
} 

ПЕРЕМЕННЫЕ

НЕКОТОРЫЕ ЗАМЕЧАНИЯ ПО СИНТАКСИСУ

- В сценариях ebuild можно использовать все переменные, определенные в make.conf(5) (такие как PORTAGE* и PORTDIR*)
- Присваивая значения переменным в сценарии, нельзя оставлять пробел между именем переменной и знаком равенства.
- Значения переменных могут содержать только символы из таблицы ascii(7). Это требование GLEP 31.

P

Эта переменная содержит имя пакета без указания ревизии сценария. Ее НЕЛЬЗЯ изменять.
xfree-4.2.1-r2.ebuild --> $P=='xfree-4.2.1'

PN

Содержит имя сценария без номера версии.
xfree-4.2.1-r2.ebuild --> $PN=='xfree'

PV

Содержит номер версии без указания ревизии.
xfree-4.2.1-r2.ebuild --> $PV=='4.2.1'

PR

Содержит номер ревизии или, если его не существует, 'r0'.
xfree-4.2.1-r2.ebuild --> $PR=='r2'

PVR

Содержит номер версии с указанием ревизии.
xfree-4.2.1-r2.ebuild --> $PVR=='4.2.1-r2'

PF

Содержит полное имя пакета [PN]-[PVR]
xfree-4.2.1-r2.ebuild --> $PF=='xfree-4.2.1-r2'

CATEGORY

Содержит имя категории пакета.

A

Содержит все исходные файлы, необходимые пакету. Эта переменная не должна определяться: она генерируется автоматически на основе переменных SRC_URI.

WORKDIR = "${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/work"

Содержит путь доступа к корневому каталогу сборки пакета. Не изменяйте эту переменную.

FILESDIR = "${PORTDIR}/${CATEGORY}/${PN}/files"

Содержит путь доступа к подкаталогу 'files' в каталоге пакета в дереве портежей. Не изменяйте эту переменную.

EPREFIX

Начиная с EAPI 3 для этой переменной определено смещение, для которого был конфигурирован данный portage в ходе установки. Смещение иногда необходимо в ебилдах и еклассах; в этом случае оно задается в ${EPREFIX}. EPREFIX не содержит слэша, поэтому отсутствию смещения соответствует пустая строка. Не изменяйте эту переменную.

S = "${WORKDIR}/${P}"

Содержит путь доступа к временному каталогу сборки. Эта переменная используется функциями src_compile и src_install. Обе они выполняются в каталоге S. Данная переменная может быть изменена, если необходимо указать другой каталог для распаковки архива пакета.

T = "${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/temp"

Содержит путь доступа к временному каталогу. Может использоваться в любых целях.

D = "${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/image/"

Содержит путь доступа к временному каталогу для установки. Каждая операция записи, выполняемая не через вспомогательные утилиты и функции (они описаны ниже), должна выполняться в каталоге ${D}. Начиная с EAPI 3 здесь, как правило, приходится учитывать префикс смещения, для которого отведена переменная ${ED} (см.ниже). Не изменяйте эту переменную.

ED = "${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/image/${EPREFIX}/"

Начиная с EAPI 3 для удобства содержит путь "${D%/}${EPREFIX}/". Для версий EAPI ниже EAPI 3, не поддерживающих ${ED}, в тех случаях, когда в новых версиях используется ${ED}, вспомогательные функции обращаются к ${D}. Не изменяйте эту переменную.

MERGE_TYPE

Начиная с EAPI 4 переменная MERGE_TYPE может использоваться для запроса текущего типа установки. Для нее запустимы следующие значения:

Value Значение
binary прекомпилированный пакет назначен для установки
buildonly пакет будет скомпилирован из исходного кода, но не назначен для установки
source пакет будет скомпилирован из исходного кода и назначен для установки

PORTAGE_LOG_FILE

Содержит путь доступа к журналу сборки. Если переменная PORT_LOGDIR не установлена, то PORTAGE_LOG_FILE="${T}/build.log".

REPLACED_BY_VERSION

Начиная с EAPI 4 переменная REPLACED_BY_VERSION может использоваться pkg_prerm и pkg_postrm для запроса версии пакета, которая заменит текущую. Переменная пуста, если нет нового пакета; если же такой пакет имеется, переменная будет содержать только номер версии.

REPLACING_VERSIONS

Начиная с EAPI 4 переменная REPLACING_VERSIONS может использоваться pkg_pretend, pkg_setup, pkg_preinst и pkg_postinst для запроса версии (версий) пакета, которую (которые) заменит данный пакет. Переменная пуста, если нет пакетов, которые подлежат замене; если есть хотя бы один такой пакет, переменная содержит, через пробел, номера версии (версий) пакета, которые будет/-ут заменена/-ы. Как правило, эта переменная не содержит более одной версии, хотя, согласно PMS, может содержать несколько их.

ROOT = "/"

Содержит путь, по которому portage обращается к корневому каталогу текущей файловой системы. Когда пакеты вносят изменения в эту файловую систему, они должны использовать для этого дерево с префиксом ${ROOT}. Часто при этом необходимо учитывать префикс смещения, за который отвечает переменная ${EROOT} (см. ниже). Не изменяйте эту переменную.

EROOT = "${ROOT%/}${EPREFIX}/"

Начиная с EAPI 3 для удобства содержит "${ROOT%/}${EPREFIX}/". Не изменяйте эту переменную.

DESCRIPTION = "A happy little package"

Содержит краткое описание пакета.

EAPI = "0"

Определяет версию API ебилда, которой соответствует данный пакет. Если значение не определено, то по умолчанию выставляется "0". Если portage не распознал значение EAPI, пакет будет замаскирован и какие-либо операции над ним будут невозможны; в этом случае сначала необходимо обновить portage. Для максимальной обратной совместимости пакет должен соответствовать как можно более ранней версии EAPI. Обратите внимание, что использование команд ebuild(1) и repoman(1) с пакетом требует версии portage, которая умеет работать с соответствующей данному пакету версией EAPI.

SRC_URI = "http://happy.com/little/${P}.tar.gz"

Содержит перечень URI необходимых файлов исходного кода. Одному файлу при этом могут соответствовать несколько URI. Список обрабатывается в порядке следования элементов: если элемент не удается найти ни на одном из зеркал _GENTOO_MIRRORS, система переходит к следующему элементу. Начиная с EAPI 2 имя файла вывода определенного URI может быть изменено по вашему желанию: для этого справа ставится оператор "->" и, вслед за ним, имя файла вывода, какое вы предпочитаете. Все элементы, в частности, оператор и имя файла вывода, разделяются пробелом.

HOMEPAGE = "http://happy.com/"

Эта переменная должна содержать URI основных сайтов, с которых берутся исходные коды, и другую дополнительную информацию, в зависимости от пакета.

KEYWORDS = [-~][x86,ppc,sparc,mips,alpha,arm,hppa]

Эта переменная должна содержать корректный список архитектур, под которыми работает/не работает ебилд. По умолчанию, если неизвестно, требует ли ебилд определенной архитектуры, соответствующее значение KEYWORD просто не указывается. Если известно, что ебилд не работает под той или иной архитектурой, укажите ее с минусом, например, -ppc. Если ебилд посылается для включения в дерево, он должен иметь ключ ~arch для архитектур, на которых он ПРЕДПОЛОЖИТЕЛЬНО РАБОТАЕТ. (Чтобы размаскировать для тестирования пакеты, помеченные такими ключевыми словами, укажите ACCEPT_KEYWORDS="~arch" в командной строке или непосредственно в файле make.conf(5)) Полный список архитектур см. в /usr/portage/profiles/arch.list. Старайтесь соблюдать алфавитный порядок списка.

SLOT

Устанавливает слот для пакетов, для работы которых может понадобиться сосуществование несколько версий. Значение по умолчанию - SLOT="0". Если вы не вполне уверены в своих действиях, не пытайтесь экспериментировать с этой переменной. В любом случае, ее значение НИКОГДА не должно оставаться неопределенным.

LICENSE

Представляет собой перечень, через пробел, лицензий, под которые подпадает пакет. Этот список должен соответствовать содержимому /usr/portage/licenses/. Если той или иной лицензии нет в portage, следует добавить ее явно.

IUSE

Представляет собой практически исчерпывающий список USE-флагов, которые используются в вашем сценарии ebuild. Здесь не фигурируют только те USE-флаги, которые описывают архитектуру (см. KEYWORDS). Начиная с EAPI 1 можно создавать настройки по умолчанию, включая или отключая USE -флаги путем выставления перед именами флагов соответственно + и - . Более подробно о порядке помещения в стек USE -флагов см. в разделе, посвященном переменной USE_ORDER в make.conf(5). С учетом значения по умолчанию USE_ORDER, отрицательные настройки IUSE по умолчанию действуют на USE только на уровне репозитория, поскольку параметры профиля и пользовательские настройки имеют над ними приоритет.

DEPEND

Эта переменная содержит перечень пакетов, без которых программа не может быть скомпилирована.

Атомы зависимости

Атомы зависимости представляют собой не что иное как зависимости, к которым будет обращаться portage, выявляя отношения между пакетами. Обратите внимание, что если атом еще не в дереве пакетов, значение переменной совпадает с последней доступной версией.

Базовые атомы

Базовый атом - это полное имя пакета: категория/пакет. Вот примеры базовых атомов:

sys-apps/sed 
sys-libs/zlib 
net-misc/dhcp 

Версии атомов

Иногда необходимо уточнение, что подойдут лишь определенные версии атомов. Обратите внимание, что в этом случае их нужно указывать с префиксом (см. ниже). Иными словами, номер версии просто добавляется как суффикс к базовому атому:

sys-apps/sed-4.0.5 
sys-libs/zlib-1.1.4-r1 
net-misc/dhcp-3.0_p2 

Номера версий обычно состоят из двух или трех чисел, разделенных точками, например, 1.2 или 4.5.2. После этой строки может идти буква - например, возможны такие номера версий как 1.2a или 4.5.2z. Имейте в виду, что эта буква *не обозначает" альфа- или бета-версию. Для этого используется специальный необязательный суффикс: _alpha, _beta, _pre (предрелиз), _rc (кандидат в релизы) или _p (патч). Таким образом, третий предрелиз пакета будет обозначен, например, как 1.2_pre3. Суффиксы можно добавлять один за другим в неограниченном количестве.

Префиксные операторы атома [> >= = <= <]

Иногда необходимо задать зависимость от группы версий, не указывая явно каждую из них. Для этого удобно использовать стандартные булевы операторы:

>media-libs/libgd-1.6 
>=media-libs/libgd-1.6 
=media-libs/libgd-1.6 
<=media-libs/libgd-1.6 
<media-libs/libgd-1.6 

Расширенные префиксы [!~] и суффиксы [*] атома

Для большей точности возможно указывать блокирующие пакеты и соответствующие им диапазоны версий. Обратите внимание, что эти дополнительные префиксы/суффиксы можно сочетать любым способом с классами атомов, о которых шла речь выше. Вот ряд типичных примеров из дерева портежей:

!app-text/dos2unix 
=dev-libs/glib-2* 
!=net-fs/samba-2* 
~net-libs/libnet-1.0.2a 
!!<sys-apps/portage-2.1.4_rc1 

! предотвращает одновременную установку пакетов.
!! предотвращает одновременную установку пакетов и при этом явно запрещает их одновременную временную установку в серии обновлений. Данный синтаксис поддерживается в EAPI 2 и выше.
* означает любую версию пакета при условии совпадения указанного префикса строки. Таким образом, если в качестве версии указано '2*', будут учитываться версии '2.1', '2.2', '2.2.1' и т.п., но не '1.0', '3.0', '4.1' и т.д. Не забудьте: в силу того, что вы используете подстановочный знак, шаблону '2*' будет соответствовать и '20'. Часть версии перед '*' должна быть корректным номером версии, без '*'.. Например, '2' - корректный номер версии, а '2.' - нет. Иными словами, вы можете использовать обозначение '2*', но не '2.*'.
~ означает любую ревизию указанной базовой версии. Так, в приведенном выше примере в выборке окажутся версии '1.0.2a', '1.0.2a-r1', '1.0.2a-r2' и т.д.

Слоты атомов

Начиная с EAPI 1 может быть задан слот любого атома. Для этого необходимо указать имя слота, через двоеточие:

x11-libs/qt:3 
~x11-libs/qt-3.3.8:3 
>=x11-libs/qt-3.3.8:3 
=x11-libs/qt-3.3*:3 

USE-флаги атомов

Начиная с EAPI 2 для любого атома могут быть заданы USE -флаги. Если при этом вы также указываете слоты, то зависимости USE -флагов будут выводится справа от зависимостей слотов.

Безусловные USE-зависимости

Пример Расшифровка
foo[bar] foo требует, чтобы был включен bar
foo[bar,baz] foo требует, чтобы были включены и bar, и baz
foo[-bar,baz] foo требует, чтобы bar был отключен, а baz включен

Условные USE-зависимости

Краткая запись Развернутая запись
foo[bar?] bar? ( foo[bar] ) !bar? ( foo )
foo[!bar?] bar? ( foo ) !bar? ( foo[-bar] )
foo[bar=] bar? ( foo[bar] ) !bar? ( foo[-bar] )
foo[!bar=] bar? ( foo[-bar] ) !bar? ( foo[bar] )

USE-флаги атомов по умолчанию

Начиная с EAPI 4 USE- зависимости умеют устанавливать значения по умолчанию для флагов, которые могут быть не прописаны в IUSE для данного пакета. Для этого непосредственно вслед за флагом поставьте соответственно (+) или (-): (+) указывает системе вести себя так, словно отсутствующий флаг присутствует и включен, (-) - так, словно отсутствующий флаг присутствует, но отключен.

media-video/ffmpeg[threads(+)] 
media-video/ffmpeg[threads(-)] 

Динамические зависимости

Система портежей предлагает несколько опций для учета этого. Заметьте, что каждая синтаксическая конструкция из числа описанных ниже каждая конструкция рассматривается как один атом в соответствующем контексте. Таким образом, каждый атом за счет задания условий может включать несколько атомов, и эта вложенность может быть любой глубины.

переменная USE? ( Атом зависимости )

Чтобы включить библиотеку jpeg, при указании пользователем jpeg в переменной USE, используйте следующую конструкцию:
jpeg? ( media-libs/jpeg )

!переменная USE? ( Атом )

Если пакет необходимо включать только при отсутствии определенной опции в пользовательском значении переменной USE, используйте следующую конструкцию:
!nophysfs? ( dev-games/physfs )
Это удобно в том случае, если вы хотите добавить необязательную поддержку той или иной возможности и установливать ее по умолчанию.

переменная USE? ( Атом, если истинно ) !переменная USE? ( Атом, если ложно )

Для обработки аналогично тернарному оператору языка C используйте два утверждения, одно прямое, другое обратное. Так, если пакет использует GTK2 или GTK1, но не оба вместе, это можно выразить следующим образом:
gtk2? ( =x11-libs/gtk+-2* ) !gtk2? ( =x11-libs/gtk+-1* )
В результате по умолчанию будет использоваться более новая библиотека, GTK2.

|| ( Атом Атом ... )

Если пакет может работать с несколькими различными пакетами, но категория virtual не подходит, может быть использован следующий синтаксис:

|| ( 
    app-games/unreal-tournament 
    app-games/unreal-tournament-goty 
) 

В приведенном примере мы видим, что пакет unreal-tournament существует в обычной версии и в версии goty. Поскольку обе они предоставляют один и тот же базовый набор файлов, другой пакет может использовать любой из них. Добавление категории virtual не подходит, поскольку она не охватывает соответствующие файлы.
Другой уместный случай использования данной конструкции - это когда пакет может быть собран с различными видео-интерфейсами, но не может использовать их одновременно.

|| ( 
    sdl? ( media-libs/libsdl ) 
    svga? ( media-libs/svgalib ) 
    opengl? ( virtual/opengl ) 
    ggi? ( media-libs/libggi ) 
    virtual/x11 
) 

В данном случае будет выбран только один из пакетов, а приоритет определяется порядком их перечисления. Поэтому наиболее вероятным кандидатом является библиотека sdl, далее идут svga, opengl, ggi - и, наконец, по умолчанию, если пользователь не задал явно одну из предлагаемых библиотек, будет использоваться X.
Имейте в виду, что, если один из перечисленных пакетов уже установлен, менеджер пакетов будет руководствоваться этим для удовлетворения зависимости.

RDEPEND

Эта переменная должна содержать перечень всех пакетов, необходимых для работы данной программы (иными словами, зависимые подключаемые библиотеки). В EAPI 3 и ниже, если она не установлена, по умолчанию будет использовано значение переменной DEPEND. В EAPI 4 и выше переменная RDEPEND никогда не задается явно.
Для задания динамических зависимостей вы можете использовать синтаксис, аналогичный описанному ниже для переменной DEPEND.

PDEPEND

Эта переменная должна содержать перечень всех пакетов, которые следует установить после установки данного пакета, но фактически они могут быть установлены раньше, чем это потребуется.
Для задания динамических зависимостей можно использовать синтаксис, аналогичный описанному ниже для переменной DEPEND.

REQUIRED_USE

Начиная с EAPI 4 используется переменная REQUIRED_USE, позволяющая указывать допустимые и недопустимые комбинации USE- флагов. При необходимости можно использовать вложения.

Действие Выражение
Если флаг1 включен, то флаг2 отключен флаг1? ( !флаг2 )
Если флаг1 включен, то флаг2 включен флаг1? ( флаг2 )
Если флаг1 отключен, то флаг2 включен !флаг1? ( флаг2 )
Если флаг1 отключен, то флаг2 отключен !флаг1? ( !флаг2 )
Следует включить любой из флагов (включающее ИЛИ) || ( флаг1 флаг2 флаг3 )
Следует включить только один определенный флаг (исключающее ИЛИ) ^^ ( флаг1 флаг2 флаг3 )

RESTRICT = [strip,mirror,fetch,userpriv]

Задает ограничения возможностей системы портежей, через пробел. Для задания динамических ограничений можно использовать условные конструкции, аналогичные описанным выше для переменной DEPEND.

binchecks

Отключает проверку бинарных файлов. Используйте это значение ТОЛЬКО в том случае, если такая проверка не имеет смысла (например, для оригинальных заголовков и исходных кодов ядра, которые не имеют бинарных версий). Если опрос бинарных файлов следует пропустить по другим причинам (например, если речь идет о проприетарных бинарных компонентах), см. подробнее в разделе УПРАВЛЯЮЩИЕ QA-ПЕРЕМЕННЫЕ.

bindist

Ограничение по собранным пакетам.

fetch

Аналогично mirror, но файлы не будут выбираться и через переменную SRC_URI.

installsources

Отключает installsources для определенных пакетов. Предназначено для пакетов, имеющих бинарные файлы, которые не совместимы с debugedit.

mirror

Файлы, указанные в переменной SRC_URI, не будут загружаться с зеркал GENTOO_MIRRORS

primaryuri

Файлы будут загружаться сначала с URI, указанных в переменной SRC_URI, и лишь потом с зеркал GENTOO_MIRRORS.

strip

Из результирующих двоичных модулей/библиотек не будет удаляться отладочная информация.

test

src_test не будет запускаться, даже если пользовательское значение FEATURES=test.

userpriv

Отключает userpriv для определенных пакетов.

PROPERTIES = [interactive]

Список параметров через пробел; поддерживается синтаксис условных конструкций.

interactive

На одной или нескольких фазах ебилда пользователю будет предложено ввести данные.

PROVIDE = "virtual/ЦЕЛЬ"

Эту переменную следует использовать, только если пакет имеет виртуальную цель. Например, blackdown-jdk и sun-jdk предоставляют virtual/jdk. Это позволяет пакетам задавать зависимости от virtual/jdk, а не явно от реализации blackdown или sun.

DOCS

Начиная с EAPI 4 эта переменная содержит массив или разделенный пробелами список документационных файлов для функции src_install по умолчанию для установки с помощью dodoc. Если она не определена, будет использован разумный список по умолчанию. См. ниже справку по src_install.

УПРАВЛЯЮЩИЕ QA-ПЕРЕМЕННЫЕ

ЗАМЕЧАНИЯ ПО *СИНТАКСИСУ

Существует ряд QA-переменных, которые позволяют сценарию управлять некоторыми QA-тестами, выполняемыми portage. В ебилдах к ним следует прибегать как можно реже, поскольку в противном случае теряет смысл сам контроль качества. QA-переменные предназначены прежде всего для сценариев, которые устанавливают бинарные объекты из закрытых исходных кодов, которые не могут быть изменены.
Обратите внимание, что объекты, которые не соответствуют данным правилам, могут выдавать ошибку на некоторых архитектурах.

QA_PREBUILT

Содержит перечень путей доступа к прекомпилированным, бинарным файлам в каталоге образа. Указанные здесь пути добавляются к каждой из перечисленных ниже переменных QA_. Пути могут включать fnmatch-подобные шаблоны, которые встроенными средствами переводятся в регулярные выражения для переменных QA_: последние не поддерживают такие шаблоны, а регулярные выражения - поддерживают. Переводчик просто заменяет "*" на ".*".

QA_TEXTRELS

Может содержать перечень путей доступа к файлам в каталоге образа, которые содержат неустранимые text relocation. Пути могут включать шаблоны fnmatch.
Эта переменная предназначена для использования с бинарными объектами, установленными из закрытых исходных кодов, которые не могут быть изменены.

QA_EXECSTACK

Содержит список путей доступа к объектам в каталоге образа, которые для запуска требуют исполняемый стек. Пути могут включать шаблоны fnmatch.
Эта переменная предназначена для использования с объектами, которым действительно нужен исполняемый стек (а не с теми, которые лишь маркированы соответствующим образом).

QA_WX_LOAD

Эта переменная должна содержать список путей доступа к файлам в каталоге образа, которые содержат перезаписываемые и исполняемые сегменты - что случается редко. Пути могут содержать шаблоны fnmatch.

QA_DT_HASH

Содержит список путей доступа к файлам в каталоге образа, которые содержат .hash-секции. Пути могут включать регулярные выражения с экранированными символами, заключенными в управляющие кавычки.
Эта переменная предназначена для использования с файлами бинарных пакетов, которые игнорируют переменную LDFLAGS.

QA_PRESTRIPPED

Эта переменная должна содержать список путей доступа к бинарным файлам в каталоге образа, не содержащим отладочной информации. Пути могут включать регулярные выражения с экранированными символами, заключенными в управляющие кавычки.

QA_SONAME

Эта переменная должна содержать список путей доступа к файлам общедоступных библиотек в каталоге образа, не имеющих SONAME. Пути могут включать регулярные выражения с экранированными символами, заключенными в управляющие кавычки.

QA_SONAME_NO_SYMLINK

Эта переменная должна содержать список путей доступа к файлам общедоступных библиотек в каталоге образа, имеющим SONAME, но символической ссылки на SONAME в том же каталоге быть не должно. Пути могут включать регулярные выражения с экранированными символами, заключенными в управляющие кавычки.

QA_DT_NEEDED

Эта переменная должна содержать список путей доступа к файлам общедоступных библиотек в каталоге образа, не имеющим записей NEEDED. Пути могут включать регулярные выражения с экранированными символами, заключенными в управляющие кавычки.

ОБЪЯВЛЕНИЯ PORTAGE

inherit

Inherit обеспечивает поддержку в portage т.н. еклассов функций, внешних по отношению к ебилдам и обладающих наследуемыми методами и данными. Они определяют функции и устанавливают типы данных как drop-in-замены, расширенные, упрощенные подпрограммы для самых обычных задач, с целью упорядочения процесса сборки. Вызов inherit не может зависеть от условий, которые могут меняться в пределах одного ебилда. Спецификация еклассов содержит только их имена, без расширения .eclass. Обратите также внимание, что оператор inherit должен предшествовать объявлению других переменных, если только эти переменные не используются в глобальном контексте еклассов.

ФАЗОВЫЕ ФУНКЦИИ

pkg_pretend

Эта функция может быть определена начиная с EAPI 4; она используется для проверки выполнения различных требований. Она должна вызываться как можно раньше, до того, как будет предпринята попытка удовлетворить зависимости. Если функция обнаружит проблему, она должна вызвать eerror и die. Окружение (переменные, функции, временные каталоги и т.д.), используемое для выполнения pkg_pretend, не сохраняется и, следовательно, не будет доступно на последующих фазах.

pkg_nofetch

Если в переменной RESTRICT указано fetch, эта функция будет запущена, если не удается найти файлы в SRC_URI. Таким образом удобно сообщать пользователю, как получить данные файлы. Достаточно выдать сообщение и нормально завершить работу функции; не завершайте ее вызовом die.

pkg_setup

Эта функция может использоваться в том случае, если пакету требуется особая настройка или проверка, прежде чем будут выполняться другие действия.
Исходный рабочий каталог ${PORTAGE_TMPDIR}.

src_unpack

Эта функция используется для распаковки всех исходных текстов, указанных в A, в каталог WORKDIR. Если эта функция в сценарии ebuild не определена, вызывается unpack ${A}. В этой функции производится наложение патчей и выполняются все остальные изменения, необходимые перед конфигурированием/компиляцией.
Исходный рабочий каталог $WORKDIR.

src_prepare

Все действия по подготовке исходного кода, в частности, наложение патчей, должны выполняться в этой функции. Она поддерживается в версиях EAPI начиная с EAPI 2.
Исходный рабочий каталог $S.

src_configure

Все необходимые действия по конфигурированию должны выполняться в этой функции. Она поддерживается в версиях EAPI начиная с EAPI 2.
Исходный рабочий каталог $S.

src_compile

В EAPI 2 и ниже все необходимые шаги по конфигурированию и компиляции должны выполняться в этой функции; начиная с EAPI 2 она отвечает лишь за компиляцию.
Исходный рабочий каталог $S.

src_test

Запускает все тест-кейсы, определенные для данного пакета. По умолчанию будет выполнено 'make check', а затем 'make test'.
Исходный рабочий каталог $S.

src_install

Должна содержать все необходимое для установки пакета во временном каталоге установки.
Исходный рабочий каталог $S.

Начиная с EAPI 4, если src_install не определена, используется следующее умолчание:

src_install() { 
    if [[ -f Makefile || -f GNUmakefile || -f makefile ]] ; then 
        emake DESTDIR="${D}" install 
    fi 

    if ! declare -p DOCS &>/dev/null ; then 
        local d 
        for d in README* ChangeLog AUTHORS NEWS TODO CHANGES \ 
                THANKS BUGS FAQ CREDITS CHANGELOG ; do 
            [[ -s "${d}" ]] && dodoc "${d}" 
        done 
    elif [[ $(declare -p DOCS) == "declare -a "* ]] ; then 
        dodoc "${DOCS[@]}" 
    else 
        dodoc ${DOCS} 
    fi 
} 

pkg_preinst pkg_postinst

В этих функциях должны выполняться все модификации текущей файловой системы, необходимые до и после включения пакета в дерево. Здесь также необходимо помещать комментарий для пользователя, выводимый в конце выполнения функции.
Исходный рабочий каталог $PWD.

pkg_prerm pkg_postrm

Аналогично функциям pkg_*inst, но для исключения пакета из дерева.
Исходный рабочий каталог $PWD.

pkg_config

Эта функция должна содержать необязательные основные шаги по конфигурированию.
Исходный рабочий каталог $PWD.

ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ: ФАЗЫ

default

Вызывает фазовые функции по умолчанию для текущей фазы выполнения. Эта функция поддерживается начиная с EAPI 2.

default_*

Начиная с EAPI 2 функции pkg_nofetch и src_* с параметрами по умолчанию доступны через функцию с именем, начинающимся с default_ и заканчивающимся соответствующим именем фазовой функции. Например, вызвав функцию default_src_compile, вы фактически запускаете функцию src_compile с параметрами по умолчанию.

Фазовые функции по умолчанию
default_pkg_nofetch
default_src_unpack
default_src_prepare
default_src_configure
default_src_compile
default_src_test

ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ: РАЗНОЕ

die [причина]

Вызывает прекращение работы текущего процесса emerge. Выводимая при этом информация будет включать причину.

Начиная с EAPI 4 все вспомогательные функции автоматически вызывают die при любой ошибке. Вызывы вспомогательных функций могут иметь префиксом функцию nonfatal, дабы ошибки не рассматривались системой как фатальные:

nonfatal <вспомогательная функция>

Выполняет вспомогательную функцию, но в случае ошибки не вызывает die. Функция nonfatal доступна начиная с EAPI 4.

use <элемент USE>

Если элемент USE указан в переменной USE, функция без дополнительных сообщений возвращает 0 ("истинно"). Если же элемент USE в переменной USE не указан, функция без дополнительных сообщений возвращает 1 ("ложно"). Если вам нужен подробный вывод use, используйте вспомогательную функцию usev.

Пример:

if use gnome ; then 
    guiconf="--enable-gui=gnome --with-x" 
elif use gtk ; then 
    guiconf="--enable-gui=gtk --with-x" 
elif use X ; then 
    guiconf="--enable-gui=athena --with-x" 
else 
    # gui-версия собираться не будет 
    guiconf="" 
fi 

use_with <элемент USE> [имя configure] [опция configure]

Эта функция удобна для создания специфических опций, передаваемых сценарию configure. Если элемент USE указан в переменной USE, будет выведена строка --with-[имя configure]=[опция configure]. Если опция configure не указана, будет выведено только --with-[имя configure]. Если элемент USE не указан в переменной USE, будет выведена строка --without-[имя configure]. Если имя configure не указано, вместо него будет использоваться элемент USE. Начиная с EAPI 4 добавлено распознавание пустого аргумента опция configure. В EAPI 3 и ниже пустая опция configure обрабатывается так, как если бы она не была указана.

Примеры:

USE="opengl" 
myconf=$(use_with opengl) 
(новое значение myconf - "--with-opengl") 

USE="jpeg" 
myconf=$(use_with jpeg libjpeg) 
(новое значение myconf - "--with-libjpeg") 

USE="" 
myconf=$(use_with jpeg libjpeg) 
(новое значение myconf - "--without-libjpeg") 

USE="sdl" 
myconf=$(use_with sdl SDL all-plugins) 
(новое значение myconf - "--with-SDL=all-plugins") 

use_enable <USE> [имя configure] [опция configure]

Аналогична описанной выше use_with, но с опциями configure --enable- вместо --with- и --disable- вместо --without-. Начиная с EAPI 4 добавлено распознавание пустого аргумента опция configure. В EAPI 3 и ниже пустая опция configure обрабатывается так, как если бы она не была указана.

hasv <элемент> <список элементов>

Если элемент входит в список элементов, он выводится и функция hasv возвращает 0; в противном случае не выводится ничего, а функция возвращает 1. Как говорилось выше для use, существует версия этой фукции, которая ничего не выводит, has. Используйте has во всех случаях, когда вывод информации не нужен. В частности, никогда не используйте вывод для вычислений.
Разделитель списка элементов определяется переменной IFS. По умолчанию значение этой переменной - ' ' или пробел. Это переменная bash(1).

has_version <категория/пакет-версия>

Проверяет, установлен ли в системе пакет категория/пакет-версия. Параметр может принимать любые значения, допустимые для переменной DEPEND. Функция возвращает 0 если пакет, указанный аргументом, установлен, иначе возвращает 1.

best_version <пакет>

Эта функция ищет пакет в текущей базе данных установленных программ и выдает "лучшую версию" устанавливаемого пакета.

Пример:

VERINS="$(best_version net-ftp/glftpd)"
(теперь VERINS имеет значение "net-ftp/glftpd-1.27", если установлен glftpd-1.27)

ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ: ЛОВУШКИ

register_die_hook [имена функций]

Привязывает вызов одной или более функций к ошибке ебилда, в том числе в случае конфликта с другими пакетами.

register_success_hook [имена функций]

Привязывает вызов одной или более функций к успешной сборке и/или установке ебилда.

ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ: ВЫВОД

einfo "текущее сообщение"

Функция аналогична elog, но должна использоваться применительно к сообщениям, не критичным для пользователя (таким как сообщение о ходе сборки или вывод состояния операции).

elog "важная информация"

Если необходимо вывести важное сообщение, которое пользователь обязательно должен прочитать, используйте функцию elog. Она работает так же, как echo(1), но предоставляет более подробный вывод, привлекающий внимание пользователя. Кроме того, portage внесет данное сообщение в журнал, чтобы можно было к нему вернуться.

ewarn "предупреждение"

Аналогична einfo, но должна использоваться для вывода пользователю предупреждающих сообщений.

eqawarn "предупреждение QA"

Аналогична einfo, но должна использоваться для вывода пользователю предупреждающих сообщений по QA.

eerror "сообщение об ошибке"

Аналогична einfo, но должна использоваться для вывода пользователю сообщений об ошибках.

ebegin "полезное сообщение"

Аналогично функции einfo, выводит полезное сообщение и сообщает о том, что выполнение последующей операции может занять некоторое время. По завершении должна вызываться функция eend.

eend <состояние> ["сообщение об ошибке"]

После того, как отработала функция ebegin, выводит сообщение, маркированное либо "OK" (при успешном завершении), либо "!!" (в случае ошибки). Если состояние не равно нулю, будет выведено дополнительное сообщение об ошибке.

ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ: РАСПАКОВКА

unpack <исходный код> [другие исходные коды]

Эта функция распаковывает и/или разархивирует исходный код в текущий каталог. Он будет добавлен в переменную DISTDIR.

ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ: КОМПИЛЯЦИЯ

econf [опции configure]

Эта функция используется вместо configure. Она выполняет следующее:

${ECONF_SOURCE:-.}/configure \ 
    ${CBUILD:+--build=${CBUILD}} \ 
    --datadir="${EPREFIX}"/usr/share \ 
    --host=${CHOST} \ 
    --infodir="${EPREFIX}"/usr/share/info \ 
    --localstatedir="${EPREFIX}"/var/lib \ 
    --prefix="${EPREFIX}"/usr \ 
    --mandir="${EPREFIX}"/usr/share/man \ 
    --sysconfdir="${EPREFIX}"/etc \ 
    ${CTARGET:+--target=${CTARGET}} \ 
    --disable-dependency-tracking \ 
    ${EXTRA_ECONF} \ 
    опции configure || die "econf failed" 

Обратите внимание, что переменная EXTRA_ECONF отведена для пользователей и не предназначена для написания ebuild-сценариев. Если небходимо передать configure дополнительные опции, делайте это с помощью econf. Заметьте также, что, если сценарий configure выдает ошибку, econf автоматически вызывает функцию die. Начиная с EAPI 3 функция econf обращается к переменной ${EPREFIX}, которая в предыдущих версиях EAPI не использовалась, а начиная с EAPI 4 - добавляет --disable-dependency-tracking к аргументам, если в выводе команды configure --help встречается строка disable-dependency-tracking.

emake [опции make]

Эта функция используется вместо make. Она выполняет 'make ${MAKEOPTS} опции make' (согласно настройкам в make.globals); по умолчанию выставлено MAKEOPTS="-j2".

***внимание***
Прежде чем использовать emake, убедитесь, что сборка возможна при распараллеливании (make -j2). Важно знать это наверняка, поскольку распараллеливание хотя и не всегда, но может приводить к ошибкам. Если при параллельной сборке пакет выдает ошибку, которую не удается разрешить, вместо 'make' воспользуйтесь 'emake -j1'.

ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ: УСТАНОВКА

einstall [опции make]

Эта функция используется вместо make install. Она выполняет следующее:

make \ 
    prefix=${ED}/usr \ 
    datadir=${ED}/usr/share \ 
    infodir=${ED}/usr/share/info \ 
    localstatedir=${ED}/var/lib \ 
    mandir=${ED}/usr/share/man \ 
    sysconfdir=${ED}/etc \ 
    ${EXTRA_EINSTALL} \ 
    опции make \ 
    install 

Не используйте эту функцию вместо 'emake install DESTDIR=${D}': данный способ установки предназначен преимущественно для пакетов, собираемых с помощью make. Не используйте также переменную EXTRA_EINSTALL, так как она зарезервирована для пользователей.

prepall

prepalldocs

prepallinfo

prepallman

prepallstrip

Эти функции удобны в случае, когда пакет устанавливается в каталог ${D} с помощью сценариев (например, make-файлов). Если необходимо гарантировать, что библиотеки являются выполняемыми, файлы aclocal установлены правильно, все файлы doc/info/man упакованы, из выполняемых файлов удалена отладочная информация, используйте этот набор функций.

prepall:

Запускает функции prepallman, prepallinfo, prepallstrip, устанавливает для библиотек +x, а затем проверяет каталоги aclocal.
Обратите внимание, что функция prepalldocs при этом *не вызывается*.

prepalldocs:

Упаковывает все doc-файлы в каталоге ${ED}/usr/share/doc.

prepallinfo:

Упаковывает все info-файлы в каталоге ${ED}/usr/share/info.

prepallman:

Упаковывает все man-файлы в каталоге ${ED}/usr/share/man.

prepallstrip:

Удаляет отладочную инфомацию из всех выполняемых файлов - в частности, из библиотек.

prepinfo [директория]

prepman [директория]

prepstrip [директория]

Аналогична функциям prepall, но с небольшими различиями.

prepinfo:

Если директория не указана аргументом, то prepinfo принимает за директорию usr. Затем prepinfo упакует все файлы в каталоге ${ED}/dir/info.

prepman:

Если директория не указана аргументом, то prepman принимает за директорию usr. Затем prepman упакует все файлы в каталоге ${ED}/dir/man/*/.

prepstrip:

Из всех файлов в каталоге ${ED}/dir удаляется отладочная информация. Можно указывать несколько каталогов.

docompress <путь> [другие пути]

Начиная с EAPI 4 вспомогательная функция docompress используется для управления списками файлов на включение или исключение для необязательной упаковки. Если первый аргумент - -x, каждый из последующих аргументов будет добавлен в список на исключение. Без -x все аргументы будут добавлены в список на включение. Изначально список на включение содержит каталоги /usr/share/doc, /usr/share/info, and /usr/share/man. Изначальный список на исключение содержит каталог_/usr/share/doc/${PF}/html_.

Необязательная упаковка выполняется после того, как отработала функция src_install, но до того, как начнет выполняться любая последующая фазовая функция. Для каждого элемента списка на включение временно принимается префиксом значение переменной D. Далее:

Если это директория, система будет действовать так, как если бы каждый файл или каталог, находящийся непосредственно в этой директории, состоял в списке на включение.

Если это файл, он может быть упакован, если только он не был исключен (см. ниже).

Если элемент не существует, он будет проигнорирован.

Подлежит ли элемент исключению, определяется следующим образом: для каждого элемента списка на исключение временно принимается префиксом значение переменной D. Далее:

Если это директория, система будет действовать так, как если бы каждый файл или каталог, находящийся непосредственно в данном каталоге, состоял в списке на исключение.

Если это файл, он не будет упакован.

Если элемент не существует, то он будет проигнорирован.

dosed "s:orig:change:g" <имя файла>

Начиная с EAPI 4, вспомогательная функция dosed не существует. Ебилды должны вызывать команду sed(1) напрямую (принимая, что это sed GNU).

Выполняет команду sed для файла имя файла в каталоге ${ED}. Если никакого выражения не задано, то "s:${D}::g" выступает как выражение по умолчанию. Обратите внимание, что для этого выражения НЕ ИСПОЛЬЗУЕТСЯ префикс смещения.
'dosed\ s:/usr/local:/usr:g \ /usr/bin/some-script' выполняет команду для файла ${ED}/usr/bin/сценарий.

dodir <путь>

Создает каталог в ${ED}.
'dodir\ /usr/lib/apache' создает ${ED}/usr/lib/apache. Обратите внимание, что функции do* будут вызывать функцию dodir.

diropts [опции для install(1)]

Может использоваться для задания опций утилиты install, к которым обращается функция dodir. Значение по умолчанию - -m0755.

into <путь>

Назначает корневой каталог (DESTTREE) для других функций, таких как dobin, dosbin, doman, doinfo, dolib.
Корневой каталог по умолчанию - /usr.

keepdir <путь>

Заставляет portage оставить каталог, даже если он пуст. Работает аналогично функции dodir.

dobin <бинарный файл> [другие бинарные файлы]

Устанавливает один или несколько бинарных файлов в каталог DESTTREE/bin. Функция создает все необходимые каталоги.

dosbin <бинарный файл> [другие бинарные файлы]

Устанавливает один или несколько бинарных файлов в каталог DESTTREE/sbin. Функция создает все необходимые каталоги.

doinitd <сценарий init.d> [другие сценарии init.d]

Устанавливает сценарии init.d для Gentoo по стандартному для init.d пути (/etc/init.d/). Функция создает все необходимые каталоги.

doconfd <файл conf.d> [другие файлы conf.d]

Устанавливает файлы conf.d для Gentoo по стандартному для conf.d пути (/etc/conf.d/). Функция создает все необходимые каталоги.

doenvd <запись env.d> [другие записи env.d]

Устанавливает записи env.d для Gentoo по стандартному для env.d пути (/etc/env.d/). Функция создает все необходимые каталоги.

dolib <библиотека> [другие библиотеки]

dolib.a <библиотека> [другие библиотеки]

dolib.so <библиотека> [другие библиотеки]

Устанавливает одну или несколько библиотек в каталог DESTTREE/lib. Функция создает все необходимые каталоги.

libopts [опции для install(1)]

Может использоваться для задания опций утилите install, к которым обращаются функции dolib. Значение по умолчанию - -m0644.

doman [-i18n=<локаль>] <man-файл> [другие man-файлы]

Устанавливает файлы man-руководств в каталог /usr/share/man/man[0-9], в зависимости от суффикса файла. Если это необходимо, файлы будут упакованы. Опция -i18n позволяет устанавливать руководства на определенном языке. Затем man-файлы будут установлены в каталог /usr/share/man/<локаль>/man[0-9]. Начиная с EAPI 2 man-страницы для определенной локали, в имени которых содержится суффикс локали, устанавливаются в каталог /usr/share/man/<локаль>/man[0-9], причем часть имени файла, обозначающая локаль, удаляется, а опция -i18n будет проигнорирована. Например, если используется EAPI 2, man-страница с именем foo.<локаль>.1 будет установлена как /usr/share/man/<локаль>/man1/foo.1. Начиная с EAPI 4 атрибут опции -i18n имеет приоритет перед суффиксом локали в имени файла.

dohard <имя файла> <имя ссылки>

Начиная с EAPI 4 вспомогательная функция dohard не существует. Ебилды должны вызывать утилиту ln(1) напрямую.

dosym <имя файла> <имя ссылки>

Выполняет команду ln, создавая тем самым символическую ссылку.

dohtml _ [-a типы-файлов] [-r] [-x игнорируемые-каталоги] [файлы-и-каталоги]_

Устанавливает файлы из списка файлов (разделяются пробелом) в каталог /usr/share/doc/${PF}/html, если файлы имеют расширение .htm, .html, .css, .js, .gif, .jpeg, .jpg или .png. Опция -a позволяет ограничить действие определенными типами файлов, опция -A добавляет типы к перечню по умолчанию, -x определяет каталоги, которые необходимо пропустить (по умолчанию пропускается CVS), -p определяет префикс документа, с опцией -r каталоги обрабатываются рекурсивно.

doinfo <info-файл> [другие info-файлы]

Устанавливает info-файлы в каталог DESTDIR/info. Все они автоматически архивируются с помощью gzip. Функция создает все необходимые каталоги.

domo _<файл локали> [другие файлы локали] _

Устанавливает файлы локали в каталог DESTDIR/usr/share/locale/[ЯЗЫК], исходя из их суффикса. Функция создает все необходимые каталоги.

fowners <права доступа> <файл> [файлы]

fperms <права доступа> <файл> [файлы]

Выполняет chown (fowners) или chmod (fperms), назначая тем самым права доступа к файлам.

insinto [путь]

Устанавливает корневой каталог для функции doins.
По умолчанию им является /.

insopts [опции для install(1)]

Может быть использована для задания опций утилите install, используемой в функции doins. Значение по умолчанию - -m0644.

doins <файл> [другие файлы]

Устанавливает файлы по пути, который управляется функцией insinto. Эта функция использует утилиту install(1). Все необходимые каталоги будут созданы. Опция -r устанавливает рекурсивный режим. Начиная с EAPI 4 и doins, и newins сохраняют символические ссылки, тогда как в EAPI 3 и более ранних версиях символические ссылки не сохранялись, а происходило разыменование.

exeinto [путь]

Устанавливает корневой каталог для функции doexe.
По умолчанию им является /.

exeopts [опции для install(1)]

Может использоваться для задания опций утилите install, используемых в функции doexe. Значение по умолчанию - -m0755.

doexe <исполняемый файл> [другие исполняемые файлы]

Устанавливает исполняемые файлы в каталог, управляемый exeinto. Эта функция использует утилиту install(1). Функция создает все необходимые каталоги.

docinto [путь]

Назначает подкаталог, используемый функциями dodoc и dohtml при установке в дерево документов (на основе /usr/share/doc/${PF}/). По умолчанию подкаталога либо нет, либо установлено значение "".

dodoc <документ> [другие документы]

Устанавливает один или несколько документов в каталог /usr/share/doc/${PF}/<путь docinto>. Документы помечаются для упаковки. Функция создает все необходимые каталоги. Начиная с EAPI 4 поддерживается рекурсивная обработка подкаталогов; чтобы включить ее, используйте опцию -r.

newbin <прежний файл> <новое имя файла>

newsbin <прежний файл> <новое имя файла>

newinitd <прежний файл> <новое имя файла>

newconfd <прежний файл> <новое имя файла>

newenvd <прежний файл> <новое имя файла>

newlib.so <прежний файл> <новое имя файла>

newlib.a <прежний файл> <новое имя файла>

newman <прежний файл> <новое имя файла>

newinfo <прежний файл> <новое имя файла>

newins <прежний файл> <новое имя файла>

newexe <прежний файл> <новое имя файла>

newdoc <прежний файл> <новое имя файла>

Все эти функции работают аналогично функциям do*, но только с одним файлом, который устанавливается с [новым именем].

БАГТРЕКЕР

Об обнаруженных ошибках сообщайте на http://bugs.gentoo.org/.

АВТОРЫ

ФАЙЛЫ

Сценарий /usr/sbin/ebuild.sh.

Вспомогательные приложения в каталоге /usr/lib/portage/bin.

/etc/make.conf

Содержит переменные для процесса сборки; они имеют приоритет над заданными в make.defaults.

/usr/share/portage/config/make.globals

Содержит переменные по умолчанию для процесса сборки. Редактировать значения следует не здесь, а в файле /etc/make.conf.

/etc/portage/color.map

Содержит переменные для пользовательских настроек цветного вывода.

СМ. ТАКЖЕ

ebuild (1), make.conf (5), color.map (5)

ПЕРЕВОД

 
 

Июль 2011

Спасибо!