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


Порт для FreeBSD состоит из нескольких файлов, которые сами по себе
ничего не делают. Даже несмотря на то, что один из них называется Makefile,
все они представляют из себя файлы данных - описания и определения некоторых
переменных, используемых системой портов в качестве исходных данных.
Механизм работы системы давным-давно отлажен, в простейшем случае необходимо
только задать исходные данные. Ниже приводится список файлов, которые
необходимы для порта (на самом деле порт может использовать и другие файлы,
но они не являются необходимыми):
∙ Makefile - основной файл порта. В нем задаются все необходимые
переменные, которые настраивают работу системы портов в том или ином режиме.
Также в этом файле может программироваться собственно поведение системы в
той или иной ситуации. Текстовый файл, стандартного формата, распознаваемого
программой BSD make (не путать с GNU make! О синтаксисе файлов BSD make см.
man make). Данный файл условно делится на четрые секции, которые должны идти
строго друг за другом, не нарушая порядка. Определения переменных, которые
должны появляться в данной секции, не должны появляться ни в предыдущей, ни
в последующей секции. Порядок секций таков: начальная секция -· секция
MAINTAINER -· секция USE_* -· секция доопределений.
∙ Начальная секция идет самой первой. В нее помещаются переменные
PORTNAME, PORTVERSION, CATEGORIES, MASTER_SITES и DISTNAME. Также в нее
могут быть помещены другие переменные, полный перечень которых приведен в
файле bsd.port.mk.
∙ Секция MAINTAINER идет непосредственно после начальной секции. Как
правило, она содержит только две переменные - MAINTAINER и COMMENT. Смысл
этой секции в том, что она определяет персону, отвечающую за данный порт, и
дает краткое описание этого порта. В целях безопасности все запросы на патчи
(да и сами патчи тоже), пришедшие для уже принятого порта не с адреса,
указанного в поле MAINTAINER, а с другого адреса, перенаправляются
MAINTAINER на утверждение и вносятся в порт только в том случае, если будут
им одобрены.
∙ Секция USE_* расположена после секции MAINTAINER. Она содержит
различные переменные, задающие явно или неявно зависимости для данного
порта. Например, "USE_GETTEXT=yes" задаст зависимость порта от
devel\gettext, "USE_KDEBASE_VER=3" задаст зави симость от x11\kdebase3 и т.
д. Список всех возможных переменных USE_* приведен в файле bsd.port.mk.
Может отсутствовать, но, как правило, присутствует - трудно найти порт,
который вообще ни от чего не зависит.
∙ Секция доопределений - последняя секция в файле. Может отсутствовать
и зачастую так и происходит. Содержит переопределения различных мишеней,
составляющих процесс сборки порта. При сборке порта последовательно
выполняются мишени fetch, extract, configure, build и install. Каждая из них
в свою очередь состоит из трех этапов: pre-sometarget, do-sometarget и
post-sometarget. Эти этапы предназначены для проведения дополнительной
предварительной или после дующей обработки, а также для замещения некоторого
этапа, если в этом есть необходимость. Например, этап do-extract может быть
переопределен для выполнения распаковки дистрибутива нестандартным образом.
Существуют и другие этапы, полный их перечень приведен в файле bsd.port.mk.
∙ distinfo - файл, описывающий все файлы, входящие в дистрибутив
программы. Его нет необходимости создавать вручную - после создания Makefile