TeX Policy: различия между версиями
Bga (обсуждение | вклад) (Замечание про BuildRequires(pre)) |
|||
(не показано 9 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
{{h0|ALT TeX policy}} | {{h0|ALT TeX policy}} | ||
{{ | {{Policy | ||
|since_branch=5.1 | |||
|responsible=[[Участник:KirillMaslinsky|KirillMaslinsky]] | |responsible=[[Участник:KirillMaslinsky|KirillMaslinsky]] | ||
|discussion_link=none | |discussion_link=none | ||
|discussion_since=none | |discussion_since=none | ||
}} | }} | ||
[[en:TeXPolicy]] | |||
Данный документ содержит правила и рекомендации по упаковке пакетов, | Данный документ содержит правила и рекомендации по упаковке пакетов, | ||
Строка 61: | Строка 64: | ||
{| class="standard" | {| class="standard" | ||
|- | |- | ||
!Функциональность || tetex || texlive | !Функциональность || tetex || old texlive 2008 || texlive | ||
|- | |- | ||
|tex(LaTeX) -> dvi || {{pkg|tetex-latex}} || {{pkg|texlive-latex-base}} | |tex(LaTeX) -> dvi || {{pkg|tetex-latex}} || {{pkg|texlive-latex-base}} || {{pkg|texlive-collection-latex}} | ||
|- | |- | ||
|tex(LaTeX) -> pdf || {{pkg|tetex-latex}} || {{pkg|texlive-latex-base}} | |tex(LaTeX) -> pdf || {{pkg|tetex-latex}} || {{pkg|texlive-latex-base}} || {{pkg|texlive-collection-latex}} | ||
|- | |- | ||
|dvi -> ps || {{pkg|tetex-dvips}} || {{pkg|texlive-base-bin}} | |dvi -> ps || {{pkg|tetex-dvips}} || {{pkg|texlive-base-bin}} || {{pkg|texlive-collection-basic}} | ||
|- | |- | ||
|kpathsea (для линковки) || {{pkg|tetex-devel}} || {{pkg|libkpathsea-devel}} | |kpathsea (для линковки) || {{pkg|tetex-devel}} || {{pkg|libkpathsea-devel}} || {{pkg|libkpathsea-devel}} | ||
|} | |} | ||
Строка 141: | Строка 144: | ||
texmf-<program> | texmf-<program> | ||
Модули TEXMF, специфичные для конкретного дистрибутива TeX (см. выше), именуются по тем же правилам | |||
с заменой префикса texmf- на префикс соответствующего дистрибутива ТеХ. Например, | |||
tetex-<format>-<package> | |||
=== Зависимости === | === Зависимости === | ||
Строка 147: | Строка 155: | ||
<pre> | <pre> | ||
BuildRequires(pre): rpm-build- | BuildRequires(pre): rpm-build-tex | ||
</pre> | </pre> | ||
Все модули TEXMF должны иметь сборочную зависимость на {{pkg|rpm-build- | Все модули TEXMF должны иметь сборочную зависимость на {{pkg|rpm-build-tex}}. Наличие этого пакета в сборочной среде обеспечивает: | ||
* наличие необходимых RPM-макросов | * наличие необходимых RPM-макросов | ||
:Использование некоторых макросов (например, {{term|%add_texmf_req_skip}}) требует установки {{pkg|rpm-build- | :Использование некоторых макросов (например, {{term|%add_texmf_req_skip}}) требует установки {{pkg|rpm-build-tex}} в {{term|hasher}} ещё до начала сборки пакета, поэтому зависимость от него следует указывать в виде {{term|BuildRequires(pre)}}. | ||
* пакет, установивший файлы в TEXMFMAIN автоматически получит зависимость на каталог {{path|/usr/share/texmf}} (её предоставляет пакет | * пакет, установивший файлы в TEXMFMAIN автоматически получит зависимость на каталог {{path|/usr/share/texmf}} (её предоставляет пакет | ||
{{pkg|tex-common}}), что гарантирует наличие необходимой инфраструктуры (каталоги TEXMF-деревьев, файлтриггеры) при установке пакета в систему. | {{pkg|tex-common}}), что гарантирует наличие необходимой инфраструктуры (каталоги TEXMF-деревьев, файлтриггеры) при установке пакета в систему. | ||
Строка 212: | Строка 220: | ||
=== Примеры === | === Примеры === | ||
* Макропакет (стиль, класс) для LaTeX | * [[SampleSpecs/texmf-latex|Макропакет (стиль, класс) для LaTeX]] | ||
* Шрифты для использования в ТеХ/LaTeX | * Шрифты для использования в ТеХ/LaTeX | ||
Текущая версия от 18:30, 11 марта 2018
ALT TeX policy
Данный документ содержит правила и рекомендации по упаковке пакетов, предоставляющих компоненты подсистемы TeX или использующих ТеХ и его компоненты для сборки, а также имеющих установочные зависимости на те или иные части подсистемы ТеХ.
Определения
- Дистрибутив ТеХ — пакет или коллекция пакетов, предоставляющих исполняемые файлы оригинальной программ tex и metafont Дональда Кнута, а также совместимых с ним программ, и прочие файлы, необходимые для их работы. В настоящий момент в Сизифе имеется два дистрибутива TeX — texlive и tetex. Дистрибутивы ТеХ конфликтуют между собой и на настоящий момент нет возможности одновременно установить пакеты, относящиеся к разным дистрибутивам ТеХ.
- Дерево TEXMF — подкаталог файловой системы, организованный в соответствии с TDS. В контексте создания пакетов актуальны следующие деревья texmf:
- TEXMFMAIN — /usr/share/texmf
- TEXMFDIST — /usr/share/texmf-<tex_distro_name>
- TEXMFSYSCONFIG — /etc/texmf
См. также список других деревьев.
- Модуль TEXMF — любые файлы, предназначенные для использования ТеХ’ом и совместимыми с ним программами (размещаемые в одном из деревьев TEXMF и доступные средствами библиотеки libkpathsea). Модуль TEXMF может быть оформлен в качестве отдельного пакета, независимого от конкретного дистрибутива ТеХ, что позволяет использовать такие пакеты с любым из дистрибутивов ТеХ.
- Пакет, использующий подсистему ТеХ — любой пакет, который нуждается в сборочных либо установочных зависимостях на любые программы, входящие в дистрибутив ТеХ.
Упаковка пакетов, использующих подсистему ТеХ
Установочные зависимости
В общем случае (пакет не специфичен для конкретного дистрибутива ТеХ), зависимости на необходимые программы из состава дистрибутива ТеХ не следует указывать явно — они будут обнаружены автоматически. Выполнение этого правила позволит использовать такой пакет с любым из дистрибутивов ТеХ, не привязывая его без необходимости к одному из них.
В случае, если необходимая зависимость не была по каким-то причинам обнаружена автоматически, допускается явное указание зависимости на конкретный исполняемый файл, необходимый пакету, например:
Requires: /usr/bin/latex Requires: /usr/bin/dvips
Обо всех случаях, когда необходимые зависимости не были обнаружены автоматически, следует сообщать как об ошибке.
Возможны ситуации, когда пакет специфичен для конкретного дистрибутива ТеХ и либо не работает с другим дистрибутивом ТеХ, либо не имеет для него смысла. В этом случае допускается указание зависимости на имена пакетов конкретного дистрибутива TeX, например, tetex-latex.
Во всех остальных случаях указание в пакете зависимости на имена пакетов одного из дистрибутивов ТеХ считается ошибкой.
Сборочные зависимости
Пакетам, использующим программы из состава дистрибутива ТеХ для сборки, следует указывать сборочную зависимость на пакеты того дистрибутива ТеХ, который мейнтейнер считает нужным использовать для сборки.
Ниже в таблице приведены имена пакетов дистрибутивов ТеХ, соответствующих основным функциональностям, необходимым другим пакетам при сборке:
Функциональность | tetex | old texlive 2008 | texlive |
---|---|---|---|
tex(LaTeX) -> dvi | tetex-latex | texlive-latex-base | texlive-collection-latex |
tex(LaTeX) -> pdf | tetex-latex | texlive-latex-base | texlive-collection-latex |
dvi -> ps | tetex-dvips | texlive-base-bin | texlive-collection-basic |
kpathsea (для линковки) | tetex-devel | libkpathsea-devel | libkpathsea-devel |
В настоящее время дистрибутивы ТеХ неравноценны в отношении поддержки: tetex не поддерживается, texlive поддерживается и развивается. Поэтому мейнтейнерам рекомендуется по возможности использовать при сборке пакеты texlive.
Дистрибутивы ТеХ должны быть эквивалентны в своей основной функциональности, поэтому замена в сборочной среде пакетов одного дистрибутива ТеХ на эквивалентный набор пакетов другого не должна влиять на успешность и результат сборки. Если такое влияние обнаруживается, об этом следует сообщать как о возможной ошибке.
Нельзя одновременно указывать в сборочных зависимостях пакеты, относящиеся к разным дистрибутивам ТеХ, т.к. это приведёт к невозможности сформировать сборочную среду (дистрибутивы ТеХ конфликтуют между собой).
TeX input files
Если в пакете присутствуют файлы, предназначенные для использования ТеХом и совместимыми с ним программами (чаще всего *.sty, *.tex), к ним применяются правила раздела 3 настоящего документа.
Упаковка модулей TEXMF
Все файлы, предназначенные для использования ТеХом и совместимыми с ним программами, должны быть установлены в одном из деревьев TEXMF (подрбонее см. ниже). Не допускается размещение таких файлов вне деревьев TEXMF, за исключением %docdir.
Например, если в Вашем пакете присутствуют стилевые файлы для LaTeX (.sty, .cls), они предствляют собой модуль TEXMF и к ним применяются описанные в данном разделе правила. Во многих случаях будет оправданной упаковка содержащегося в Вашем пакете модуля TEXMF в отдельный подпакет.
Общие правила
Упаковка модулей TEXMF в отдельные пакеты руководствуется двумя основными идеями:
- Файлы отдельно упакованного модуля TEXMF имеют приоритет перед аналогичными файлами дистрибутивов ТеХ, «затеняют» их. Это позволяет как дополнять дистрибутивы ТеХ отсутствующими в нём пакетами, так и предоставлять более новые версии модулей, чем те, которые имеются в относительно стабильных и редко обновляющихся дистрибутивах ТеХ.
- Отдельно упакованные модули TEXMF должны быть «универсальными», доступными для использования с любым дистрибутивом ТеХ.
Отдельный пакет с модулем TEXMF имеет смысл только в том случае, если соответствующий модуль отсутствует в дистрибутиве ТеХ, либо в пакете предоставляется более новая версия модуля, чем та, которая присутствует в одном или во всех дистрибутивах ТеХ.
Мейнтейнеру отдельного пакета с модулем необходимо следить за тем, чтобы версия предоставляемого модуля была не ниже, чем хотя бы в одном из дистрибутивов ТеХ. В противном случае пакет следует удалить из репозитория.
В деревьях TEXMF не должны присутствовать архитектурно-зависимые файлы. (Под)пакет, содержащий только модуль TEXMF, должен иметь сборочную архитектуру noarch:
BuildArch: noarch
Именование пакетов
Модули TEXMF должны именоваться по следующей схеме:
texmf-<format>-<package>
где <format> — один из форматов TeX (в TDS каталоги TEXMF/tex/<format>/), например latex, plain, xetex, lambda и т.д; <package> — имя пакета (в TDS каталоги TEXMF/tex/<format>/<package>/ либо TEXMF/tex/<format>/{base,misc}/<package>.{sty,cls}).
Если пакет несёт в себе файлы для нескольких разных форматов ТеХ и/или одновременно специфичные
и неспецифичные для форматов файлы (generic), допускается упаковка их в единый пакет с именем:
texmf-<package>
Необходимость разбиения такого пакета на подпакеты по отдельным форматам ТеХ остаётся на усмотрение мейнтейнера.
Примечание: generic может также рассматриваться в качестве особого случая формата, т.е. допустимо разбиение на подпакеты texmf-{generic,latex...}-<package>.
Модули TEXMF, содержащие файлы, предназначенные для использования конкретной программой (в TDS каталоги TEXMF/<program>/), именуются по схеме
texmf-<program>
Модули TEXMF, специфичные для конкретного дистрибутива TeX (см. выше), именуются по тем же правилам с заменой префикса texmf- на префикс соответствующего дистрибутива ТеХ. Например,
tetex-<format>-<package>
Зависимости
- Сборочные
BuildRequires(pre): rpm-build-tex
Все модули TEXMF должны иметь сборочную зависимость на rpm-build-tex. Наличие этого пакета в сборочной среде обеспечивает:
- наличие необходимых RPM-макросов
- Использование некоторых макросов (например, %add_texmf_req_skip) требует установки rpm-build-tex в hasher ещё до начала сборки пакета, поэтому зависимость от него следует указывать в виде BuildRequires(pre).
- пакет, установивший файлы в TEXMFMAIN автоматически получит зависимость на каталог /usr/share/texmf (её предоставляет пакет
tex-common), что гарантирует наличие необходимой инфраструктуры (каталоги TEXMF-деревьев, файлтриггеры) при установке пакета в систему.
- Установочные
Применяются правила пункта 2.1 настоящего документа.
Размещение файлов
- TeX input files
Модули TEXMF размещают файлы, предназначенные для использования ТеХом и сопутствующими программами (TeX input files), в дереве TEXMFMAIN в соответствии со стандартом TDS.
- Документация
Файлы документации размещаются в подкаталогах TEXMFMAIN/doc в соответствии с TDS — это позволяет утилитам поиска ТеХ-документации (texdoc и пр.) обнаруживать эти файлы.
Допускается размещение файлов документации в каталоге /usr/share/doc/%name-%version, но в этом случае должны быть созданы необходимые символьные ссылки на файлы документации в иерархии TEXMFMAIN/doc, чтобы сделать их доступными для texdoc.
Файлы документации должны иметь содержательные названия, соответствующие тому пакету, который они документируют (не следует называть файлы общими именами manual, index и пр., так как это делает их недоступными для поиска средствами texdoc, использующими только имена файлов, но не каталогов, в которых эти файлы находятся).
- Конфигурационные файлы
Конфигурационные файлы пакеты размещают в дереве — TEXMFSYSCONFIG. Конкретные пути для размещения файлов (по типам):
- конфигурационные файлы для updmap — TEXMFSYSCONFIG/updmap.d
- конфигурационные файлы для настройки переносов — (фрагменты language.def и language.dat) TEXMFSYSCONFIG/language.d
- конфигурационные файлы для fmtutil — TEXMFSYSCONFIG/fmt.d, TEXMFSYSCONFIG/fmtutil
- прочие конфигурационные файлы — в соответствии с TDS.
- Владение каталогами
Пакет с модулем TEXMF не должен владеть каталогами, закреплёнными за пакетом tex-common.
# tex-common dirlist for /usr/lib/rpm/files.req /etc/tex-fonts.d tex-common /etc/texmf tex-common /etc/texmf/fmt.d tex-common /etc/texmf/language.d tex-common /etc/texmf/updmap.d tex-common /usr/share/texmf tex-common /usr/share/texmf/doc tex-common /var/cache/texmf tex-common
Все подкаталоги перечисленных каталогов, устанавливаемые пакетом, должны принадлежать этому пакету.
Регистрация установленного модуля TEXMF
После установки/удаления модуля TEXMF в системе выполняется ряд операций по (де)регистрации файлов в дереве TEXMF (texhash,updmap,fmtutil). Необходимость в этих операциях определяется автоматически в момент установки пакета при помощи файлтриггеров.
В %post и %postun-скриптах пакетов, содержащих модули TEXMF, не должно быть явных вызовов texhash, updmap, fmtutil.
Примеры
- Макропакет (стиль, класс) для LaTeX
- Шрифты для использования в ТеХ/LaTeX
Схема именования пакетов: fonts-<тип>-<имя_коллекции>-tex. См. также FontsPolicy
Упаковка дистрибутивов ТеХ
Общие правила
Дистрибутив ТеХ должен предоставлять:
- /usr/bin/tex и /usr/bin/mf — полностью совместимые с оригнальными программами ТеХ и METAFONT Дональда Кнута
- /usr/bin/latex
- /usr/bin/texhash — утилиту для обновления баз ls-R в деревьях TEXMF
- средства автоматического запуска обновления базы данных доступных векторных шрифтов при удалении/установке сторонними пакетами конфигурационных файлов в каталог TEXMFSYSCONFIG/updmap.d/ (реализуется при помощи rpm-файлтриггера).
Примечание: файлтриггер, обеспечивающий выполнение texhash при установке/удалении файлов в системных деревьях TEXMF
предоставляется пакетом tex-common. Пакетам дистрибутива TeX не следует вызывать texhash явно в %post(un)-скриптах.Именование пакетов
Пакеты дистрибутивов ТеХ именуются по схеме:
<distro_name>-<subpackage>
Сборочные зависимости
Дистрибутивы ТеХ должны иметь сборочную зависимость на rpm-build-texmf.
Размещение файлов
- TeX input files
Файлы, предназначенные для использования ТеХом и сопуствующими программами, дистрибутивы ТеХ размещают в дереве TEXMFDIST.
Допускается размещение в дереве TEXMFMAIN отдельных файлов, для которых принципиально важна согласованность с бинарными исполняемыми файлами в рамках дистрибутива (т.к. это исключает возможность их «затенения» файлами другого дистрибутива ТеХ или сторонних пакетов). Количество файлов, размещаемых в TEXMFMAIN, следует минимизировать, т.к. они порождают конфликты между дистрибутивами ТеХ и сторонними пакетами и затрудняют их совместное использование.
- Документация
Файлы документации дистрибутивы ТеХ размещают в поддереве TEXMFDIST/doc. Допускается размещение документации в %docdir, в этом случае TEXMFDIST/doc должен быть символьной ссылкой на %docdir.
- Конфигурационные файлы
Конфигурационные файлы дистрибутивы ТеХ размещают в дереве TEXMFSYSCONFIG. Применяются правила пункта «Конфигурационные файлы» раздела 3.4 настоящего документа.
Ссылки