"Создаем порт для FreeBSD своими руками" - читать интересную книгу автора (Ачилов Рашид)


Первый параметр задает имя опции, которое потом будет использовано в
переменной WITH_*. Например, для первого параметра имя переменной будет
WITH_LDAP. Второй параметр задает текст комментария, который будет выведен
справа от соответствующей опции, и третий - значение по умолчанию. При
указании "on" опция по умолчанию включена, при указании "off" - выключена.
Хорошо, опции заданы. Как их обработать?
Прежде всего необходимо отметить, что при использовании OPTIONS
включение файла bsd.port.mk следует заменить на:

.include "bsd.port.pre.mk·
# processing WITH_SOMEWHERE here
.include "bsd.port.post.mk·

иначе ни одна переменная WITH_SOMEWHERE распознана не будет. Обработка
же переменных выполняется стандартным образом - с помощью условия if
задаются дополнительные параметры для configure, зависимости, подстановки
для pkg-plist и т. д.

.if defined(WITH_SAM_XML)
LIB_DEPENDS+= xml2.5:${PORTSDIR}/textproc/libxml2
CONFIGURE_ARGS+= -with-xml-prefix=${LOCALBASE}
WANT_EXPSAM_MODULES+= xml


PLIST_SUB+= SAMXML=""

.else
PLIST_SUB+= SAMXML="@comment "
.endif

Комбинация проверяемых условий может быть довольно сложной. В качестве
примера того, как могут использоваться значения опции, лучше всего
рассматривать порт net/samba3 - в нем очень много опций, есть на что
посмотреть.
Ну и наконец самый интересный раздел - замена/дополнение стандартных
обработчиков Makefile при сборке порта. Как уже было сказано в [1], сборка
порта состоит из последовательности выполнения ряда мишеней, которые в свою
очередь делятся на подмишени pre-something, do-something и post-something
(есть еще специальные мишени, описание их см .в bsd.port.mk). Для чего это
было сделано? Для того чтобы иметь возможность воздействия на процесс
создания порта - что-нибудь изменить, вывести сообщение, создать файл или
каталог и т. д. Как следует из названия, подмишени pre-somethnig и
post-something выполняются соответственно до и после мишени something.
Например, последовательность распаковки будет такова: pre-extract,
do-extract, post-extract. При этом, если подмишень do-something не описана,
будет выполняться стандартная системная обработка. Обратите внимание, что,
если мишень do-something описана, она замещает стандартную мишень и вся
ответственность за выполнение данного шага ложится на майнтайнера порта, то
есть, например, даже если в Makefile, идущем с программой, есть мишень