Итак, все оказалось не так уж и просто, и порт потребовал некоторых модификаций для того, чтобы заставить его работать. В этом разделе мы расскажем, шаг за шагом, как его модифицировать, чтобы он работал с нашей системой портов.
Во-первых, когда пользователь дает в своем каталоге с
портом команду make
, происходит целая череда
событий. Во время чтения этого текста может оказаться полезным
иметь файл bsd.port.mk
открытым в другом
окне, что сильно поможет в их понимании.
Но не волнуйтесь сильно, если вы не до конца понимаете, что
делается в bsd.port.mk
, не так уж много
людей его понимает... :->
Запускается цель fetch
.
Цель fetch
отвечает за то, что
архив исходных текстов имеется в наличии локально в
каталоге DISTDIR
. Если цель
fetch
не может найти требуемые
файлы в каталоге DISTDIR
, то они будут
искаться по указателю URL MASTER_SITES
,
который устанавливается в Makefile, а также на наших FTP
зеркалах, куда мы по возможности помещаем дистрибутивные
файлы для архива. Затем она попытается сгрузить указанный
файл с помощью FETCH
, полагая, что
запрашивающая машина имеет прямое подключение к Интернет.
Если файл скачается удачно, то он будет помещен в каталог
DISTDIR
для последующего использования и
обработки.
Выполняется цель extract
.
Она ищет дистрибутивный файл порта (как правило, tar-архив
gzip
) в каталоге
DISTDIR
и распаковывает его во временный
каталог, задаваемый переменной WRKDIR
(по умолчанию work
).
Выполняется цель patch
.
Во-первых, применяются все патчи, заданные переменной
PATCHFILES
. Во-вторых, если какие-либо
файлы с патчами, носящие имена
patch-*
, имеются в подкаталоге
PATCHDIR
(по умолчанию это каталог
files
), то они применяются в этот
момент в алфавитном порядке.
Запускается цель configure
.
Здесь может выполняться любая из многих различных
вещей.
Если существует скрипт
scripts/configure
, то он
запускается.
Если задана переменная
HAS_CONFIGURE
или
GNU_CONFIGURE
, то запускается скрипт
WRKSRC/configure
.
Выполняется цель build
. Она
отвечает за переход в собственный рабочий каталог порта
(WRKSRC
) и его построение.
Выполняется цель stage
.
Конечный набор построенных файлов помещается во временный
каталог (STAGEDIR
, смотрите Раздел 6.1, <
Выполняется цель install
.
В систему копируются файлы, перечисленные в pkg-plist
порта.
Выше перечислены стандартные действия. Кроме того, вы сами
можете определить цели
pre-
или
что-то
post-
,
или создать скрипты с такими именами в подкаталоге
что-то
scripts
, и они будут запущены до или после
выполнения действий по умолчанию.
Например, если у вас есть цель
post-extract
, определённая в вашем
файле Makefile
и файл
pre-build
в подкаталоге
scripts
, то после выполнения обычных
действий по распаковке, будет вызвана цель
post-extract
а скрипт
pre-build
будет выполнен перед запуском
стандартных правил построения. Рекомендуется использовать цели
из Makefile
, если действия достаточно
просты, потому что в дальнейшем будет проще определить, какие
нестандартные действия требует порт.
Действия по умолчанию выполняются целями
do-
из что-то
bsd.port.mk
. Например, команды для
распаковки порта находятся в цели
do-extract
. Если вам не хватает
цели по умолчанию, вы можете ее исправить, переопределив цель
do-
в вашем файле something
Makefile
.
<<Основные>> цели (к примеру,
extract
,
configure
и так далее) не делают
ничего больше, чем проверяют успешность завершения всех
предыдущих шагов и вызывают настоящие цели или скрипты, и их
не нужно менять. Если вам нужно изменить распаковку,
исправляйте do-extract
, но никогда
не меняйте способ работы extract
!
Кроме того, цель post-deinstall
является недействительной и не выполняется инфраструктурой
портов.
Теперь, когда вы представляете, что происходит, когда
пользователь набирает команду make install
,
давайте пройдемся через шаги, рекомендуемые для создания
настоящего порта.
Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.