diff options
Diffstat (limited to 'documentation/content/ru/books/porters-handbook/order/_index.adoc')
-rw-r--r-- | documentation/content/ru/books/porters-handbook/order/_index.adoc | 260 |
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 +.... +==== |