Итак, все оказалось не так уж и просто, и порт потребовал некоторых модификаций для того, чтобы заставить его работать. В этом разделе мы расскажем, шаг за шагом, как его модифицировать, чтобы он работал с нашей системой портов.
Во-первых, когда пользователь дает в своем каталоге с
портом команду 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-
в вашем файле somethingMakefile.
<<Основные>> цели (к примеру,
extract,
configure и так далее) не делают
ничего больше, чем проверяют успешность завершения всех
предыдущих шагов и вызывают настоящие цели или скрипты, и их
не нужно менять. Если вам нужно изменить распаковку,
исправляйте do-extract, но никогда
не меняйте способ работы extract!
Кроме того, цель post-deinstall
является недействительной и не выполняется инфраструктурой
портов.
Теперь, когда вы представляете, что происходит, когда
пользователь набирает команду make install,
давайте пройдемся через шаги, рекомендуемые для создания
настоящего порта.
Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.