Итак, все оказалось не так уж и просто, и порт потребовал некоторых модификаций для того, чтобы заставить его работать. В этом разделе мы расскажем, шаг за шагом, как его модифицировать, чтобы он работал с нашей системой портов.
Во-первых, когда пользователь дает в своем каталоге с портом
команду make, происходит целая череда событий.
Во время чтения этого текста может оказаться полезным иметь файл
bsd.port.mk открытым в другом окне, что сильно
поможет в их понимании.
Но не волнуйтесь сильно, если вы не до конца понимаете, что
делается в bsd.port.mk, не так уж много людей
его понимает... :->
Запускается цель fetch. Цель
fetch отвечает за то, что архив исходных
текстов имеется в наличии локально в каталоге
DISTDIR. Если цель
fetch не может найти требуемые файлы в
каталоге DISTDIR, то он будет искаться по
указателю URL MASTER_SITES, который
устанавливается в Makefile, а также на нашем основном FTP-сервере
по адресу ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/,
куда мы по возможности помещаем дистрибутивные файлы для архива.
Затем она попытается сгрузить указанный файл с помощью
FETCH, полагая, что запрашивающая машина имеет
прямое подключение к Интернет. Если файл скачается удачно, то
он будет помещен в каталог DISTDIR для
последующего использования и обработки.
Выполняется цель extract. Она ищет
дистрибутивный файл порта (как правило, tar-архив
gzip) в
каталоге DISTDIR и распаковывает его во
временный каталог, задаваемый переменной
WRKDIR (по умолчанию
work).
Выполняется цель patch. Во-первых,
применяются все патчи, заданные переменной
PATCHFILES. Во-вторых, если какие-либо файлы с
патчами, носящие имена
patch-*, имеются в
подкаталоге PATCHDIR (по умолчанию это каталог
files), то они применяются в этот момент в
алфавитном порядке.
Запускается цель configure. Здесь
может выполняться любая из многих различных вещей.
Если существует скрипт
scripts/configure, то он запускается.
Если задана переменная HAS_CONFIGURE
или GNU_CONFIGURE, то запускается скрипт
WRKSRC/configure.
Выполняется цель build. Она
отвечает за переход в собственный рабочий каталог порта
(WRKSRC) и его построение. Если задана
переменная USES= gmake, будет использоваться
GNU-версия утилиты make, в противном случае
будет использована системная утилита
make.
Выше перечислены стандартные действия. Кроме того, вы сами
можете определить цели
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, теперь давайте пройдемся
через шаги, рекомендуемые для создания настоящего порта.
Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.