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/X11R6 в исходном коде сделает порт гораздо более гибким и способным удовлетворить потребности других серверов. Для портов, которые используют X, это происходит автоматически; в противном случае зачастую это может быть сделано простой заменой строк /usr/local (или /usr/X11R6 для портов X, не использующих imake) в различных файлах Makefile внутри порта на использование ${PREFIX}, так как эта переменная автоматически передаётся далее на каждом этапе построения и установки.

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

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

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

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

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

Кроме того, обратитесь к программам/файлам из других портов с переменными, перечисленными выше, без указания явных маршрутов. Например, если ваш порт требует, чтобы макрос PAGER являлся полным путем утилиты less, используйте флаг компилятора:

-DPAGER=\"${PREFIX}/bin/less\"
   
или
-DPAGER=\"${LOCALBASE}/bin/less\"
   
если это порт X, вместо того, чтобы задавать -DPAGER=\"/usr/local/bin/less\". Этот способ имеет больше шансов на работу, если системный администратор переместил всё дерево /usr/local куда-то в другое место.

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