Глава 15. Порядок переменных в Makefile портов

Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к Сервер переводов FreeBSD.

Первые разделы Makefile всегда должны идти в одном и том же порядке. Это стандартное правило позволяет любому легко читать любой порт, не тратя время на поиск переменных в произвольном порядке.

Описаные здесь разделы и переменные являются обязательными в обычном порте. В подчиненном порте многие разделы и переменные могут быть пропущены.

Каждый следующий блок должен быть отделен от предыдущего одним пустым пробелом.

В следующих блоках устанавливайте только переменные, которые требуются для порта. Определяйте эти переменные в порядке, указанном здесь.

15.1. Блок PORTNAME

Этот блок является наиболее важным. Он определяет имя порта, версию, расположение файла дистрибутива и категорию. Переменные должны быть в следующем порядке:

Может быть использован только один из параметров — PORTVERSION или DISTVERSION.

15.2. Блок PATCHFILES

Этот блок является необязательным. Переменные:

15.3. Блок MAINTAINER

Этот блок является обязательным. Переменные следующие:

15.4. Блок LICENSE

Этот блок является необязательным, хотя настоятельно рекомендуется. Переменные:

Если имеется несколько лицензий, отсортируйте различные переменные LICENSE_VAR_NAME по названию лицензии.

15.5. Общие сообщения BROKEN/IGNORE/DEPRECATED

Этот блок необязателен. Переменные:

BROKEN_* и IGNORE_* могут быть любыми общими переменными, например, IGNORE_amd64, BROKEN_FreeBSD_10 и т.д. За исключением переменных, которые зависят от USES, их следует размещать в USES и USE_x. Например, IGNORE_WITH_PHP работает только если установлен php, а BROKEN_SSL — только если установлен ssl.

Если порт помечен как BROKEN при выполнении определённых условий, и эти условия можно проверить только после включения bsd.port.options.mk или bsd.port.pre.mk, то такие переменные должны быть установлены позже, в Остальные Переменные.

15.6. Блок зависимостей

Этот блок необязателен. Переменные:

15.7. Флейворы

Этот блок необязателен.

Начните этот раздел с определения FLAVORS. Затем рассмотрите возможные вспомогательные инструменты флейворов. Дополнительную информацию см. в разделе Использование флейворов (FLAVORS).

Конструкции, устанавливающие переменные, недоступные в виде помощников, с использованием .if ${FLAVOR:U} == foo, должны быть размещены в соответствующих разделах ниже.

15.8. USES и USE_x

Начните этот раздел с определения USES, а затем возможных USE_x.

Держите связанные переменные рядом. Например, если используется USE_GITHUB, всегда размещайте переменные GH_* сразу после неё.

15.9. Стандартные переменные bsd.port.mk

Этот блок раздела предназначен для переменных, которые могут быть определены в bsd.port.mk и не принадлежат ни к одному из предыдущих блоков разделов.

Порядок не важен, однако старайтесь держать схожие переменные вместе. Например, переменные uid и gid USERS и GROUPS. Конфигурационные переменные CONFIGURE_* и *_CONFIGURE. Списки файлов и директорий PORTDOCS и PORTEXAMPLES.

15.10. Параметры и помощники

Если порт использует фреймворк опций, сначала определите OPTIONS_DEFINE и OPTIONS_DEFAULT, затем остальные переменные OPTIONS_*, далее описания *_DESC, а затем вспомогательные опции. Старайтесь сортировать их все в алфавитном порядке.

Пример 1. Пример порядка переменных-опций

Опции FOO и BAR не имеют стандартного описания, поэтому его необходимо написать. Остальные опции уже имеют описание в Mk/bsd.options.desc.mk, поэтому его создание не требуется. Переменные DOCS и EXAMPLES используют вспомогательные цели для установки своих файлов, они приведены здесь для полноты, хотя относятся к разделу Цели, поэтому перед ними могут быть вставлены другие переменные и цели.

OPTIONS_DEFINE=	DOCS EXAMPLES FOO BAR
OPTIONS_DEFAULT=	FOO
OPTIONS_RADIO=	SSL
OPTIONS_RADIO_SSL=    OPENSSL GNUTLS
OPTIONS_SUB=	yes

BAR_DESC=		Enable bar support
FOO_DESC=		Enable foo support

BAR_CONFIGURE_WITH=	bar=${LOCALBASE}
FOO_CONFIGURE_ENABLE=	foo
GNUTLS_CONFIGURE_ON=	--with-ssl=gnutls
OPENSSL_CONFIGURE_ON=	--with-ssl=openssl

post-install-DOCS-on:
      ${MKDIR} ${STAGEDIR}${DOCSDIR}
      cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}

post-install-EXAMPLES-on:
      ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
      cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}

15.11. Остальные переменные

И затем, остальные переменные, которые не упоминались в предыдущих блоках.

15.12. Цели

После определения всех переменных можно определить дополнительные цели make(1). Следует располагать pre- перед post- и в том же порядке, в котором выполняются различные этапы:

  • fetch

  • extract

  • patch

  • configure

  • build

  • install

  • test

При использовании опций helpers для цели target сохраняйте их в алфавитном порядке, но оставляйте -on перед -off. Если также используется основная цель, размещайте её перед дополнительными:

post-install:
	# install generic bits

post-install-DOCS-on:
	# Install documentation

post-install-X11-on:
	# Install X11 related bits

post-install-X11-off:
	# Install bits that should be there if X11 is disabled

Изменено: 18 сентября 2025 г. by Vladlen Popolitov