Глава 15. Порядок переменных в Makefile портов | FreeBSD Documentation Portal
Description: Порядок переменных в Makefile портов FreeBSD
Keywords: order,PORTNAME,PATCHFILES,MAINTAINER,LICENSE,dependencies,USES

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

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

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

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

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

## 15.1. Блок `PORTNAME`

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

- `PORTNAME` * `PORTVERSION`[1]

- `DISTVERSIONPREFIX` * `DISTVERSION`[1]

- `DISTVERSIONSUFFIX`

- `PORTREVISION`

- `PORTEPOCH`

- `CATEGORIES`

- `MASTER_SITES`

- `MASTER_SITE_SUBDIR` (устарело)

- `PKGNAMEPREFIX`

- `PKGNAMESUFFIX`

- `DISTNAME`

- `EXTRACT_SUFX`

- `DISTFILES`

- `DIST_SUBDIR`

- `EXTRACT_ONLY`

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

## 15.2. Блок `PATCHFILES`

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

- `PATCH_SITES`

- `PATCHFILES`

- `PATCH_DIST_STRIP`

## 15.3. Блок `MAINTAINER`

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

- `MAINTAINER`

- `COMMENT`

- `WWW`

## 15.4. Блок `LICENSE`

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

- `LICENSE`

- `LICENSE_COMB`

- `LICENSE_GROUPS` или `LICENSE_GROUPS_NAME`

- `LICENSE_NAME` или `LICENSE_NAME_NAME`

- `LICENSE_TEXT` или `LICENSE_TEXT_NAME`

- `LICENSE_FILE` или `LICENSE_FILE_NAME`

- `LICENSE_PERMS` или `LICENSE_PERMS_NAME_`

- `LICENSE_DISTFILES` или `LICENSE_DISTFILES_NAME`

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

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

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

- `DEPRECATED`

- `EXPIRATION_DATE`

- `FORBIDDEN`

- `BROKEN`

- `BROKEN_*`

- `IGNORE`

- `IGNORE_*`

- `ONLY_FOR_ARCHS`

- `ONLY_FOR_ARCHS_REASON*`

- `NOT_FOR_ARCHS`

- `NOT_FOR_ARCHS_REASON*`

| `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. Блок зависимостей

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

- `FETCH_DEPENDS`

- `EXTRACT_DEPENDS`

- `PATCH_DEPENDS`

- `BUILD_DEPENDS`

- `LIB_DEPENDS`

- `RUN_DEPENDS`

- `TEST_DEPENDS`

## 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

Назад
Главная
Далее