Руководство FreeBSD по созданию портов
Пред. |  | След.

# Глава 7. Продвинутые практики `pkg-plist`

# 7.1. Изменение содержимого `pkg-plist` в зависимости от make-переменных

Некоторые порты, в частности, порты `p5-`, должны менять содержимое своих файлов `pkg-plist` в зависимости от того, с какими параметрами они были отконфигурированы (или в зависимости от версии языка `perl` в случае портов `p5-`). Чтобы облегчить этот процесс, любые вхождения ключевых слов `%%OSREL%%`, `%%PERL_VER%%` и `%%PERL_VERSION%%` в файле `pkg-plist` будут заменяться соответствующими значениями. Значением `%%OSREL%%` является номер версии операционной системы (например, `4.9`). `%%PERL_VERSION%%` и `%%PERL_VER%%` обозначают полный номер версии `perl` (например, `5.8.9`). Некоторые другие `%%`VARS`%%`, имеющие отношение к файлам документации порта, описаны в соответствующем разделе.

Если вам нужно сделать другие подстановки, вы можете указать в переменной `PLIST_SUB` список пар ``VAR`=`VALUE``, и все вхождения `%%`VAR`%%` в файле `pkg-plist` будут заменяться на значение `VALUE`.

Например, если у вас имеется порт, который устанавливает много файлов в каталог, зависящий от версии, вы можете задать нечто типа

    OCTAVE_VERSION= 2.0.13
    PLIST_SUB=	OCTAVE_VERSION=${OCTAVE_VERSION}

в файле `Makefile` и использовать `%%OCTAVE_VERSION%%` везде, где нужно указать номер версии в файле `pkg-plist`. Таким образом, при обновлении порта вам не нужно будет менять десятки (а в некоторых случаях и сотни) строк в файле `pkg-plist`.

Если ваш порт устанавливает файлы в соответствии с установленными в порту опциями, то обычным способом управления является добавление префиксов `%%TAG%%` для строк `pkg-plist` с добавлением этого `TAG` в переменную `PLIST_SUB` внутри `Makefile` со специальным значением `@comment`, которое указывает пакетным инструментам игнорировать эти строки:

    .if defined(WITH_X11)
    PLIST_SUB+=	X11=""
    .else
    PLIST_SUB+=	X11="@comment "
    .endif

и в самом `pkg-plist`:

    %%X11%%bin/foo-gui

Эта подстановка (также, как и добавление любых справочных страниц) будет сделана между выполнением целей `pre-install` и `do-install`, посредством чтения файла ``PLIST`` и записью в файл ``TMPPLIST`` (по умолчанию это файл ``WRKDIR`/.PLIST.mktmp`). Так что если ваш порт строит ``PLIST`` на лету, делайте это во время или до выполнения цели `pre-install`. Кроме того, если вашему порту требуется отредактировать получающийся файл, делайте это в цели `post-install` изменением файла ``TMPPLIST``.

Другой способ изменения списка сборки порта основан на определении значений переменных `PLIST_FILES` и `PLIST_DIRS`. Каждое из них рассматривается как перечень путей для записи в ``TMPPLIST`` содержимого ``PLIST``. Имена, перечисленные в `PLIST_FILES` и `PLIST_DIRS`, подвергаются подстановке `%%`VAR`%%`, как описано выше. За исключением этого, имена из `PLIST_FILES` будут появляться в окончательном варианте перечня сборки без изменений, когда как `@dirrm` будет предшествовать именам из `PLIST_DIRS`. Для того, чтобы возыметь действие, `PLIST_FILES` и `PLIST_DIRS` должны задаваться до того, как будет записываться ``TMPPLIST``, то есть в цели `pre-install` или ещё раньше.

Пред. | Начало | След.
Порты, требующие наличия исходных текстов ядра |  | Пустые каталоги

По вопросам связанным с системой портов для FreeBSD, пишите по адресу <ports@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите по адресу <doc@FreeBSD.org>.