Используйте макросы, которые есть в файле
bsd.port.mk
для обеспечения правильных прав
доступа и владения файлов в своих целях
*-install
.
INSTALL_PROGRAM
- это команда для
установки бинарных выполнимых файлов.
INSTALL_SCRIPT
- это команда для установки
выполнимых скриптов.
INSTALL_LIB
- это команда для установки
динамических библиотек.
INSTALL_KLD
- это команда для установки
загружаемых модулей ядра. Некоторые архитектуры предпочитают,
чтобы для модулей сохранялись отладочные сведения, по этой
причине используйте эту команду вместо
INSTALL_PROGRAM
.
INSTALL_DATA
- это команда для установки
совместно используемых файлов данных.
INSTALL_MAN
- это команда для установки
страниц Справочника и другой документации (никаких файлов она не
сжимает).
В основе работы этих макросов лежит команда
install
со всеми соответствующими флагами.
Смотрите пример их использования ниже.
Не удаляйте отладочную информацию из бинарных файлов вручную,
если вы это делали. Во всех двоичных файлах отладочная информация
должна быть удалена, и макрос INSTALL_PROGRAM
выполнит установку и удаление отладочной информации одновременно
(обратитесь к следующему разделу). Макрос
INSTALL_LIB
делает то же самое для
динамических библиотек.
Если вам нужно удалить отладочную информацию из файла без
использования макросов INSTALL_PROGRAM
и
INSTALL_LIB
, то это можно сделать при помощи
${STRIP_CMD}
. Обычно это делается внутри цели
post-install
. К примеру:
Для проверки того, удалена ли отладочная информация из
установленного выполнимого файла, выполните команду file(1).
Если утилита не выдаст строку not stripped
, то
файл уже обработан. Кроме того, strip(1) не будет обрабатывать
программу, отладочная информация из которой уже удалена; вместо этого
утилита просто завершит свою работу.
Иногда существует необходимость в установке большого количества
файлов с сохранением их иерархической организации, т.е. в копировании
дерева каталогов целиком из WRKSRC
в целевой
каталог внутри PREFIX
.
Для этой ситуации существует два макроса. Преимущество от
использования этих макросов вместо команды cp
в том, что они гарантируют установку правильного владельца и прав
на конечные файлы. Первый макрос, COPYTREE_BIN
,
делает все устанавливаемые файлы исполняемыми, что подходит для
установки в
.
Второй макрос, PREFIX
/binCOPYTREE_SHARE
, не устанавливает
на файлы права исполнения, и, таким образом, подходит для установки
файлов внутри каталога
.PREFIX
/share
В этом примере устанавливается содержимое каталога
examples
из установочных файлов производителя
в надлежащее место для примеров вашего порта.
А в этом примере будут установлены данные летних месяцев в
подкаталог summer
каталога
.DATADIR
В качестве третьего параметра в макросе
COPYTREE_*
можно передать дополнительные
параметры find
. Например, чтобы в первом
примере установить все файлы кроме файлов Makefile, можно
использовать следующую команду.
Обратите внимание, что эти макросы не производят добавление
устанавливаемых файлов в pkg-plist
. Вам все
еще нужно их перечислить.
Если с вашим программным обеспечением поставляется некоторая
документация, отличающаяся от стандартных страниц Справочника и
файлов info, которая, как вы думаете, будет полезна пользователям,
установите ее в каталог
. Это может
быть сделано, как и в предыдущем разделе, в цели
PREFIX
/share/docpost-install
.
Создайте для вашего порта новый каталог. Имя каталога должно
соответствовать тому, что представляет из себя порт. Обычно это
означает PORTNAME
. Однако, если
вы думаете, что пользователь захочет иметь разные версии порта,
установленные одновременно, то вы можете использовать полное имя
PKGNAME
.
Сделайте установку документации зависящей от переменной
NOPORTDOCS
для того, чтобы пользователи могли
выключить это в файле /etc/make.conf
, как
здесь:
Вот несколько полезных переменных и то, как они преобразуются по
умолчанию при использовании в Makefile
:
DATADIR
преобразуется в
.PREFIX
/share/PORTNAME
DATADIR_REL
преобразуется в
share/
.PORTNAME
DOCSDIR
преобразуется в
.PREFIX
/share/doc/PORTNAME
DOCSDIR_REL
преобразуется в
share/doc/
.PORTNAME
EXAMPLESDIR
преобразуется в
.PREFIX
/share/examples/PORTNAME
EXAMPLESDIR_REL
преобразуется в
share/examples/
.PORTNAME
NOPORTDOCS
управляет установкой
дополнительной документации в DOCSDIR
. Это
не относится к стандартным страницам справочника и страницам info.
Все, что устанавливается в DATADIR
и
EXAMPLESDIR
, управляется через
NOPORTDATA
и NOPORTEXAMPLES
соответственно.
Эти переменные экспортируются в PLIST_SUB
.
Их значения появятся там в виде имён путей относительно
, если это возможно.
То есть PREFIX
share/doc/
в списке сборки по умолчанию будет заменен на
PORTNAME
%%DOCSDIR%%
, и так далее. (Дополнительную
информацию о подстановке в pkg-plist
можно
найти здесь.)
Все условно устанавливаемые файлы и каталоги с документацией
должны быть перечислены в файле pkg-plist
с
префиксом %%PORTDOCS%%
, например:
В качестве альтернативы перечислению файлов документации в файле
pkg-plist
, порт может указать в переменной
PORTDOCS
список имён файлов и глобальных шаблонов
командного процессора для добавления в окончательный список сборки.
Имена будут задаваться относительно DOCSDIR
.
Таким образом, порт, использующий PORTDOCS
и
нестандартное местоположение документации, должен задавать
соответствующим образом и DOCSDIR
. Если каталог
указан в PORTDOCS
или соответствует шаблону для
этой переменной, то полное поддерево с входящими в него файлами и
каталогами будет регистрироваться в окончательном списке сборки.
Если определена NOPORTDOCS
, то файлы и каталоги,
перечисленные в PORTDOCS
, не будут установлены и
добавлены в список сборки порта. Установка документации в
PORTDOCS
, как это показано выше, остаётся за
самим портом. Типичный пример использования
PORTDOCS
выглядит следующим образом:
Эквивалентами PORTDOCS
для файлов,
устанавливаемых в DATADIR
и
EXAMPLESDIR
являются PORTDATA
и PORTEXAMPLES
соответственно.
Кроме того, вы можете использовать файл
pkg-message
для вывода сообщений во
время установки. За подробной информацией обратитесь к разделу об использовании
pkg-message
.
Файл pkg-message
не нужно добавлять в
pkg-plist
.
Попробуйте поместить все файлы порта в правильных подкаталогах
каталога PREFIX
. Некоторые порты игнорируют все
установки и помещают все в подкаталог с именем порта, что
неправильно. Также многие порты помещают все, кроме бинарных файлов,
файлов заголовков и страниц Справочника, в подкаталог каталога
lib
, что не очень хорошо работает с подходом
BSD. Многие файлы должны быть перемещены в одно из следующих
местоположений: etc
(настроечные/конфигурационные файлы), libexec
(выполнимые файлы, запускаемые из других программ),
sbin
(исполнимые файлы для
администраторов/менеджеров системы), info
(документация в формате info для просмотрщика info) или
share
(независимые от архитектуры файлы).
Обратитесь к hier(7) для прояснения деталей; правила,
покрывающие /usr
, достаточно хорошо подходят
также и к /usr/local
. Исключением являются
порты, имеющие дело с «новостями» USENET. Они могут
использовать каталог
для установки
своих файлов.PREFIX
/news
Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.