6.3. Механизмы построения

6.3.1. Параллельное построение портов

Инфраструктура портов FreeBSD поддерживает параллельное построение с использованием множественных подпроцессов make, что позволяет системам SMP задействовать всю доступную мощность CPU, тем самым делая построение портов более быстрым и эффективным.

Это достигается путем передачи флага -jX команде make(1). К сожалению, не все порты поддерживают параллельную сборку достаточно хорошо. Поэтому требуется включать этот механизм явным образом путем добавления строки MAKE_JOBS_SAFE=yes в Makefile где-нибудь после раздела с объявлениями зависимостей.

Другой опцией управления этим механизмом с точки зрения сопровождающего является MAKE_JOBS_UNSAFE=yes. Эта переменная используется в случае, когда известно, что порт ломается с -jX, и пользователь форсирует использование многопроцессорной компиляции для всех портов с переменной FORCE_MAKE_JOBS=yes в /etc/make.conf.

6.3.2. make, gmake и imake

Если ваш порт использует GNU make, то установите USE_GMAKE=yes.

Таблица 6-1. Переменные для портов, использующих gmake

Переменная Значение
USE_GMAKE Для сборки порта требуется gmake.
GMAKE Полный путь к команде gmake, если отсутствует в PATH.

Если ваш порт является приложением X, которое создает файлы Makefile из Imakefile, используя imake, то установите USE_IMAKE=yes. Это заставит стадию конфигурирования автоматически выполнить xmkmf -a. Если флаг -a представляет для вашего порта проблему, то установите XMKMF=xmkmf. Если порт использует imake, но не понимает цель install.man, то следует установить NO_INSTALL_MANPAGES=yes.

Если исходный Makefile вашего порта имеет что-нибудь помимо all в качестве основной цели построения, то задайте соответствующее значение ALL_TARGET. То же касается install и INSTALL_TARGET.

6.3.3. Сценарий configure

Если ваш порт использует сценарий configure для получения файлов Makefile из файлов Makefile.in, то установите GNU_CONFIGURE=yes. Если вы хотите дать дополнительные параметры сценарию configure (аргументом по умолчанию является --prefix=${PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man --build=${CONFIGURE_TARGET}), установите эти параметры в CONFIGURE_ARGS. Дополнительные переменные окружения можно передать, используя переменную CONFIGURE_ENV.

Таблица 6-2. Переменные для портов, использующих configure

Переменная
GNU_CONFIGURE Порт использует сценарий configure для подготовки построения.
HAS_CONFIGURE То же, что и GNU_CONFIGURE, кроме того, что цель configure по умолчанию не добавляется в CONFIGURE_ARGS.
CONFIGURE_ARGS Дополнительные параметры, передаваемые сценарию configure.
CONFIGURE_ENV Дополнительные переменные окружения, задаваемые для запуска сценария configure.
CONFIGURE_TARGET Переопределить цель configure по умолчанию. Значением по умолчанию является ${MACHINE_ARCH}-portbld-freebsd${OSREL}.

6.3.4. Использование scons

Если ваш порт использует SCons, определите USE_SCONS=yes.

Таблица 6-3. Переменные для портов, использующих scons

Переменная Значения
SCONS_ARGS Специфичные для порта флаги SCons, передаваемые окружению SCons.
SCONS_BUILDENV Переменные для установки в системном окружении.
SCONS_ENV Переменные для установки в окружении SCons.
SCONS_TARGET Последний параметр для передачи SCons, похожий на MAKE_TARGET.

Для того, чтобы сторонний SConstruct соответствовал всему, что передается SCons в переменной SCONS_ENV (самое главное, это CC/CXX/CFLAGS/CXXFLAGS), примените патч к SConstruct, так чтобы переменная построения Environment выглядела следующим образом:

env = Environment(**ARGUMENTS)

В дальнейшем ее можно изменить при помощи env.Append и env.Replace.

По вопросам связанным с системой портов для FreeBSD, пишите по адресу <ports@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите по адресу <doc@FreeBSD.org>.