aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ru/books/porters-handbook/order/_index.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/ru/books/porters-handbook/order/_index.adoc')
-rw-r--r--documentation/content/ru/books/porters-handbook/order/_index.adoc260
1 files changed, 260 insertions, 0 deletions
diff --git a/documentation/content/ru/books/porters-handbook/order/_index.adoc b/documentation/content/ru/books/porters-handbook/order/_index.adoc
new file mode 100644
index 0000000000..82869f5a85
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/order/_index.adoc
@@ -0,0 +1,260 @@
+---
+description: 'Порядок переменных в Makefile портов FreeBSD'
+next: books/porters-handbook/keeping-up
+params:
+ path: /books/porters-handbook/order/
+prev: books/porters-handbook/porting-samplem
+showBookMenu: true
+tags: ["order", "PORTNAME", "PATCHFILES", "MAINTAINER", "LICENSE", "dependencies", "USES"]
+title: 'Глава 15. Порядок переменных в Makefile портов'
+weight: 15
+---
+
+[[porting-order]]
+= Порядок переменных в Makefile портов
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 15
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/porters-handbook/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
+endif::[]
+ifndef::book[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+Первые разделы [.filename]#Makefile# всегда должны идти в одном и том же порядке. Это стандартное правило позволяет любому легко читать любой порт, не тратя время на поиск переменных в произвольном порядке.
+
+[NOTE]
+====
+Описаные здесь разделы и переменные являются обязательными в обычном порте. В подчиненном порте многие разделы и переменные могут быть пропущены.
+====
+
+[IMPORTANT]
+====
+Каждый следующий блок должен быть отделен от предыдущего одним пустым пробелом.
+
+В следующих блоках устанавливайте только переменные, которые требуются для порта. Определяйте эти переменные в порядке, указанном здесь.
+====
+
+[[porting-order-portname]]
+== Блок `PORTNAME`
+
+Этот блок является наиболее важным. Он определяет имя порта, версию, расположение файла дистрибутива и категорию. Переменные должны быть в следующем порядке:
+
+* crossref:makefiles[makefile-portname,`PORTNAME`] * crossref:makefiles[makefile-versions,`PORTVERSION`][crossref:order[portversion-footnote, 1]]
+* crossref:makefiles[makefile-versions,`DISTVERSIONPREFIX`] * crossref:makefiles[makefile-versions,`DISTVERSION`][crossref:order[portversion-footnote, 1]]
+* crossref:makefiles[makefile-versions,`DISTVERSIONSUFFIX`]
+* crossref:makefiles[makefile-portrevision,`PORTREVISION`]
+* crossref:makefiles[makefile-portepoch,`PORTEPOCH`]
+* crossref:makefiles[makefile-categories,`CATEGORIES`]
+* crossref:makefiles[makefile-master_sites,`MASTER_SITES`]
+* crossref:makefiles[makefile-master_sites-shorthand,`MASTER_SITE_SUBDIR`] (устарело)
+* crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`]
+* crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMESUFFIX`]
+* crossref:makefiles[makefile-distname,`DISTNAME`]
+* crossref:makefiles[makefile-extract_sufx,`EXTRACT_SUFX`]
+* crossref:makefiles[makefile-distfiles-definition,`DISTFILES`]
+* crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]
+* crossref:makefiles[makefile-extract_only,`EXTRACT_ONLY`]
+
+[[portversion-footnote]]
+[IMPORTANT]
+====
+Может быть использован только один из параметров — PORTVERSION или DISTVERSION.
+====
+
+[[porting-order-patch]]
+== Блок `PATCHFILES`
+
+Этот блок является необязательным. Переменные:
+
+* crossref:makefiles[porting-patchfiles,`PATCH_SITES`]
+* crossref:makefiles[porting-patchfiles,`PATCHFILES`]
+* crossref:makefiles[porting-patchfiles,`PATCH_DIST_STRIP`]
+
+[[porting-order-maintainer]]
+== Блок `MAINTAINER`
+
+Этот блок является обязательным. Переменные следующие:
+
+* crossref:makefiles[makefile-maintainer,`MAINTAINER`]
+* crossref:makefiles[makefile-comment,`COMMENT`]
+* crossref:makefiles[makefile-www,`WWW`]
+
+[[porting-order-license]]
+== Блок `LICENSE`
+
+Этот блок является необязательным, хотя настоятельно рекомендуется. Переменные:
+
+* crossref:makefiles[licenses-license,`LICENSE`]
+* crossref:makefiles[licenses-license_comb,`LICENSE_COMB`]
+* crossref:makefiles[licenses-license_groups,`LICENSE_GROUPS`] или `LICENSE_GROUPS_NAME`
+* crossref:makefiles[licenses-license_name,`LICENSE_NAME`] или `LICENSE_NAME_NAME`
+* crossref:makefiles[licenses-license_text,`LICENSE_TEXT`] или `LICENSE_TEXT_NAME`
+* crossref:makefiles[licenses-license_file,`LICENSE_FILE`] или `LICENSE_FILE_NAME`
+* crossref:makefiles[licenses-license_perms,`LICENSE_PERMS`] или `LICENSE_PERMS_NAME_`
+* crossref:makefiles[licenses-license_distfiles,`LICENSE_DISTFILES`] или `LICENSE_DISTFILES_NAME`
+
+Если имеется несколько лицензий, отсортируйте различные переменные LICENSE_VAR_NAME по названию лицензии.
+
+[[porting-order-broken]]
+== Общие сообщения `BROKEN`/`IGNORE`/`DEPRECATED`
+
+Этот блок необязателен. Переменные:
+
+* crossref:porting-dads[dads-deprecated,`DEPRECATED`]
+* crossref:porting-dads[dads-deprecated,`EXPIRATION_DATE`]
+* crossref:porting-dads[dads-noinstall,`FORBIDDEN`]
+* crossref:porting-dads[dads-noinstall,`BROKEN`]
+* crossref:porting-dads[dads-noinstall,`BROKEN_*`]
+* crossref:porting-dads[dads-noinstall,`IGNORE`]
+* crossref:porting-dads[dads-noinstall,`IGNORE_*`]
+* crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS`]
+* crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS_REASON*`]
+* crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS`]
+* crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS_REASON*`]
+
+[NOTE]
+====
+`BROKEN_*` и `IGNORE_*` могут быть любыми общими переменными, например, `IGNORE_amd64`, `BROKEN_FreeBSD_10` и т.д. За исключением переменных, которые зависят от crossref:uses[uses,`USES`], их следует размещать в crossref:order[porting-order-uses, `USES` и `USE_x`]. Например, `IGNORE_WITH_PHP` работает только если установлен crossref:uses[uses-php,`php`], а `BROKEN_SSL` — только если установлен crossref:uses[uses-ssl,`ssl`].
+
+Если порт помечен как BROKEN при выполнении определённых условий, и эти условия можно проверить только после включения [.filename]#bsd.port.options.mk# или [.filename]#bsd.port.pre.mk#, то такие переменные должны быть установлены позже, в crossref:order[porting-order-rest, Остальные Переменные].
+====
+
+[[porting-order-depends]]
+== Блок зависимостей
+
+Этот блок необязателен. Переменные:
+
+* crossref:makefiles[makefile-fetch_depends,`FETCH_DEPENDS`]
+* crossref:makefiles[makefile-extract_depends,`EXTRACT_DEPENDS`]
+* crossref:makefiles[makefile-patch_depends,`PATCH_DEPENDS`]
+* crossref:makefiles[makefile-build_depends,`BUILD_DEPENDS`]
+* crossref:makefiles[makefile-lib_depends,`LIB_DEPENDS`]
+* crossref:makefiles[makefile-run_depends,`RUN_DEPENDS`]
+* `TEST_DEPENDS`
+
+[[porting-order-flavors]]
+== Флейворы
+
+Этот блок необязателен.
+
+Начните этот раздел с определения `FLAVORS`. Затем рассмотрите возможные вспомогательные инструменты флейворов. Дополнительную информацию см. в разделе crossref:flavors[flavors-using,Использование флейворов (FLAVORS)].
+
+Конструкции, устанавливающие переменные, недоступные в виде помощников, с использованием `.if ${FLAVOR:U} == foo`, должны быть размещены в соответствующих разделах ниже.
+
+[[porting-order-uses]]
+== `USES` и `USE_x`
+
+Начните этот раздел с определения `USES`, а затем возможных `USE_x`.
+
+Держите связанные переменные рядом. Например, если используется crossref:makefiles[makefile-master_sites-github,`USE_GITHUB`], всегда размещайте переменные `GH_*` сразу после неё.
+
+[[porting-order-variables]]
+== Стандартные переменные bsd.port.mk
+
+Этот блок раздела предназначен для переменных, которые могут быть определены в [.filename]#bsd.port.mk# и не принадлежат ни к одному из предыдущих блоков разделов.
+
+Порядок не важен, однако старайтесь держать схожие переменные вместе. Например, переменные uid и gid `USERS` и `GROUPS`. Конфигурационные переменные `CONFIGURE_*` и `*_CONFIGURE`. Списки файлов и директорий `PORTDOCS` и `PORTEXAMPLES`.
+
+[[porting-order-options]]
+== Параметры и помощники
+
+Если порт использует crossref:makefiles[makefile-options,фреймворк опций], сначала определите `OPTIONS_DEFINE` и `OPTIONS_DEFAULT`, затем остальные переменные `OPTIONS_*`, далее описания `*_DESC`, а затем вспомогательные опции. Старайтесь сортировать их все в алфавитном порядке.
+
+[[porting-order-options-ex1]]
+.Пример порядка переменных-опций
+[example]
+====
+Опции `FOO` и `BAR` не имеют стандартного описания, поэтому его необходимо написать. Остальные опции уже имеют описание в [.filename]#Mk/bsd.options.desc.mk#, поэтому его создание не требуется. Переменные `DOCS` и `EXAMPLES` используют вспомогательные цели для установки своих файлов, они приведены здесь для полноты, хотя относятся к разделу crossref:order[porting-order-targets, Цели], поэтому перед ними могут быть вставлены другие переменные и цели.
+
+[.programlisting]
+....
+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}
+....
+
+====
+
+[[porting-order-rest]]
+== Остальные переменные
+
+И затем, остальные переменные, которые не упоминались в предыдущих блоках.
+
+[[porting-order-targets]]
+== Цели
+
+После определения всех переменных можно определить дополнительные цели man:make[1]. Следует располагать `pre-*` перед `post-*` и в том же порядке, в котором выполняются различные этапы:
+
+* `fetch`
+* `extract`
+* `patch`
+* `configure`
+* `build`
+* `install`
+* `test`
+
+[TIP]
+====
+При использовании опций `helpers` для цели `target` сохраняйте их в алфавитном порядке, но оставляйте `*-on` перед `*-off`. Если также используется основная цель, размещайте её перед дополнительными:
+
+[.programlisting]
+....
+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
+....
+====