Итак, все оказалось не так уж и просто, и порт потребовал некоторых модификаций для того, чтобы заставить его работать. В этом разделе мы расскажем, шаг за шагом, как его модифицировать, чтобы он работал с нашей системой портов.
Во-первых, когда пользователь дает в своем каталоге с портом
команду 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
Если задана переменная USE_IMAKE
,
то запускается команда XMKMF
(по умолчанию
это xmkmf -a
).
Выполняется цель build
. Она
отвечает за переход в собственный рабочий каталог порта
(WRKSRC
) и его построение. Если задана
переменная USE_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-
в вашем файле something
Makefile
.
«Основные» цели (к примеру,
extract
, configure
и так далее) не делают ничего больше,
чем проверяют успешность завершения всех предыдущих шагов и
вызывают настоящие цели или скрипты, и их не нужно менять. Если
вам нужно изменить распаковку, исправляйте
do-extract
, но никогда не меняйте способ
работы extract
! Кроме того, цель
post-deinstall
является недействительной
и не выполняется инфраструктурой портов.
Теперь вы представляете, что происходит, когда пользователь
набирает команду make
, теперь давайте пройдемся
через шаги, рекомендуемые для создания настоящего порта.
Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.