Файл pkg-descr
Как уже говорилось выше, это просто текстовый файл с небольшим описанием того, что делает данная программа. Чтобы не сочинять самому описание, в нашем случае мы просто берем описание, приведенное автором на странице kde-apps и заносим его в этот файл, сопровождая ссылкой на собственно страницу программы (файл см. на сайте журнала в разделе «Исходный код»).
На этом этап первоначального формирования файлов можно считать законченным. Мы еще не сформировали distinfo, но он формируется автоматически после того, как порт будет проверен. Переходим к проверке порта.
Для проверки правильности написания файлов порта существует специальная программа portlint, которую необходимо установить каждому, кто собирается заниматься разработкой собственных портов. Это небольшой скрипт, написанный на языке Perl, устанавливается он из devel/portlint:
cd /usr/ports/devel/portlint
make all install
После установки запускаем portlint в текущем каталоге с ключами, которые включают все возможные проверки:
# portlint -abvtAN
. . .
WARN: /usr/ports/mail/contactsmenu/pkg-plist [4]: installing gettext translation files, please define USE_GETTEXT as appropriate
. . .
0 fatal errors and 9 warnings found.
Здесь приведена часть вывода portlint, в которой выводится замечание. В последней строке приводится итог - сколько ошибок и сколько замечаний было обнаружено. Отмечу сразу, что необходимо добиться устранения всех ошибок и желательно всех замечаний. В данном случае portlint предупреждает о том, что устанавливаются файлы сообщений gettext, но в порт не включено неявной зависимости от devel/gettext (это может привести к невозможности работы с данными файлами). Для исправления данной ситуации добавляем в секцию USE_* строку «USE_GETTEXT=YES» и повторно запускаем portlint.
# portlint -abvtAN
. . .
WARN: Makefile: Consider adding support for a WITHOUT_NLS knob to conditionally disable gettext support.
. . .
WARN: Makefile: only one MASTER_SITE configured. Consider adding additional mirrors.
. . .
0 fatal errors and 2 warnings found.
Что нам советуют сейчас? Добавить поддержку параметра WITHOUT_NLS для тех, кто не хочет устанавливать файлы языковых сообщений и увеличить количество зеркал, на которых размещен данный файл. Здесь надо заметить, что любой дистрибутив порта после его принятия в систему дополнительно зеркалится на сайте проекта FreeBSD, так что замечание о дополнительных зеркалах мы игнорируем, а вот замечание о WITHOUT_NLS исправим. Для этого добавим в Makefile следующий код:
.if defined(WITHOUT_NLS)
PLIST_SUB+= NLS="@comment "
.else
USE_GETTEXT= yes
PLIST_SUB+= NLS=""
.endif
а в файле pkg-plist изменим строки, описывающие файлы языковой поддержки таким образом:
%%NLS%%share/locale/bg/LC_MESSAGES/libkickermenu_contactsmenu. mo
%%NLS%%share/locale/br/LC_MESSAGES/libkickermenu_contactsmenu. mo
%%NLS%%share/locale/da/LC_MESSAGES/libkickermenu_contactsmenu. mo
%%NLS%%share/locale/de/LC_MESSAGES/libkickermenu_contactsmenu. mo
%%NLS%%share/locale/ga/LC_MESSAGES/libkickermenu_contactsmenu. mo
%%NLS%%share/locale/fr/LC_MESSAGES/libkickermenu_contactsmenu. mo
%%NLS%%share/locale/pt/LC_MESSAGES/libkickermenu_contactsmenu. mo
%%NLS%%share/locale/sv/LC_MESSAGES/libkickermenu_contactsmenu. mo
Как это будет работать? Параметр PLIST_SUB содержит список подстановок, которые выполняются, когда система обрабатывает файл pkg-plist. Если при сборке порта будет задан параметр «WITHOUT_NLS=yes», то в pkg-plist будет подставлено значение, превращающее строки с «%%NLS%%» в строки комментария. Обратите внимание, что в этом случае зависимость от devel/gettext не вставляется. В противном случае NLS принимает значение пустой строки, и зависимость от devel/gettext вставляется. Этот прием (модификация pkg-plist в зависимости от параметров сборки порта) является очень широко распространенным.