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

# 9.4. `PREFIX` и `DESTDIR`

Переменная `PREFIX` определяет, куда будет установлен порт. По умолчанию это `/usr/local`, но может меняться пользователем на собственный путь, такой как `/opt`. В вашем порту значение этой переменной должно учитываться.

Если пользователь установил переменную `DESTDIR`, то она определяет полное альтернативное окружение, обычно, это jail или установленная система, смонтированная в месте, отличном от `/`. На самом деле порт устанавливается в ``DESTDIR`/`PREFIX`` и регистрируется в базе данных пакетов в ``DESTDIR`/var/db/pkg`. Поскольку управление `DESTDIR` производится автоматически инфраструктурой портов с помощью chroot(8), вам не нужны никакие изменения или проявление особой осторожности при написании `DESTDIR`-совместимых портов.

Значение переменной `PREFIX` будет установлено в `LOCALBASE` (по умолчанию `/usr/local`). Если задана переменная `USE_LINUX_PREFIX`, то `PREFIX` примет значение `LINUXBASE` (по умолчанию `/compat/linux`).

Избегание явно прописываемых путей `/usr/local` в исходном коде сделает порт гораздо более гибким и способным удовлетворить потребности других серверов. Часто этого можно добиться простой заменой строк `/usr/local` в различных файлах `Makefile` внутри порта на `${PREFIX}`. Эта переменная автоматически передаётся далее на каждом этапе построения и установки.

Проверьте, что ваше приложение не устанавливает чего-либо в каталог `/usr/local` вместо `PREFIX`. Наличие явно указанных путей можно быстро проверить следующим образом:

    # make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`

Если что-то было установлено за пределами `PREFIX`, то процесс создания пакета сообщит об отсутствии файлов.

Этот тест не найдет явно указанных путей внутри файлов порта и не проверит корректность использования `LOCALBASE` в качестве ссылки на файлы из других портов. Порт, временно установленный в `/var/tmp/`make -V PORTNAME``, следует проверять на работоспособность, чтобы убедиться в отсутствии проблем с путями.

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

Обратитесь к программам/файлам из других портов с переменными, перечисленными выше, без указания явных маршрутов. Например, если ваш порт требует, чтобы макрос `PAGER` являлся полным путем утилиты `less`, не используйте строковый путь `/usr/local/bin/less`. Вместо этого используйте `${LOCALBASE}`:

    -DPAGER=\"${LOCALBASE}/bin/less\"

Путь с использованием `LOCALBASE` имеет больше шансов оставаться работоспособным, если системный администратор переместил всё дерево `/usr/local` куда-то в другое место.

Пред. | Начало | След.
Port Tools | Уровень выше | Tinderbox

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