Knobs: различия между версиями
(нач) |
Vt (обсуждение | вклад) Нет описания правки |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 1: | Строка 1: | ||
= Ручки при сборке = | = Ручки при сборке = | ||
Бывает, что | Бывает, что пакет требуется собирать по-разному -- в [[bootstrap]]-режиме или полноценно, с той библиотекой или с этой; для этого в [[RPM]] существуют "ручки", соответствующие configure-овым опциям <tt>--disable</tt>/<tt>--enable</tt> и <tt>--with</tt>/<tt>--without</tt>. | ||
== когда какие == | == когда какие == | ||
Как правило, <tt>--disable</tt>/<tt>--enable</tt> применяются ко внутренней функциональности проекта (включить или выключить сборку/применение какой-либо части его кода), а <tt>--with</tt>/<tt>--without</tt> -- ко внешней (собираться ли с такой-то отдельной библиотекой). | Как правило, в configure, <tt>--disable</tt>/<tt>--enable</tt> применяются ко внутренней функциональности проекта (включить или выключить сборку/применение какой-либо части его кода), а <tt>--with</tt>/<tt>--without</tt> -- ко внешней (собираться ли с такой-то отдельной библиотекой). | ||
== как == | == как == | ||
Поведение по умолчанию задаётся макросами <tt>%def_*</tt>: | Поведение по умолчанию задаётся макросами <tt>%def_*</tt> (обычно в начале спека для лучшей видимости), при этом, задавать умолчание обязательно: | ||
%def_with python3 | %def_with python3 | ||
%def_without bootstrap | %def_without bootstrap | ||
%def_enable guile | %def_enable guile | ||
%def_disable snapshot | %def_disable snapshot | ||
На эти параметры можно влиять во время сборки через --disable/--enable/--with/--without опции rpmbuild, это удобно для временного или глобального их отключения/включения без изменения спека (например <tt>--disable check</tt>). | |||
Условные части spec-файла обрамляются так: | Условные части spec-файла обрамляются так: | ||
Строка 16: | Строка 18: | ||
%if_with python3 | %if_with python3 | ||
BuildRequires(pre): rpm-build-python3 | BuildRequires(pre): rpm-build-python3 | ||
%endif | |||
%if_enable guile | |||
BuildRequires: guile-devel | |||
%endif | %endif | ||
либо | либо как условное раскрытие макроса (однострочная форма более кратка и менее читабельна): | ||
%{?_with_python3:BuildPreReq: rpm-build-python3} | %{?_with_python3:BuildPreReq: rpm-build-python3} | ||
%{?_enabled_guile:BuildPreReq: guile-devel} | |||
Условия могут быть вложенными, в этом случае следует внимательно следить за их своевременным закрытием. | Условия могут быть вложенными, в этом случае следует внимательно следить за их своевременным закрытием. | ||
Затем, в <tt>configure</tt> эти параметры передаются так: | |||
%configure \ | |||
%{subst_with python3} \ | |||
%{subst_enable guile} | |||
== архитектуры == | == архитектуры == | ||
Данностью является целевая архитектура сборки -- для неё существует особая форма <tt>%ifarch</tt>/<tt>%ifnarch</tt>, принимающая список архитектур: | Данностью является целевая архитектура сборки -- для неё существует особая форма <tt>%ifarch</tt>/<tt>%ifnarch</tt>, принимающая список архитектур. Если вы в зависимости от архитектуры включаете или выкроючаете <tt>%def_</tt> опцию, то необходимо задать и включающий, и выключающий вариант через <tt>%else</tt>, так как задание %def_enable/%def_with не подразумевает определение %def_disable/%def_without. Пример: | ||
%ifarch %e2k ppc64le | %ifarch %e2k ppc64le | ||
Строка 38: | Строка 50: | ||
# ... | # ... | ||
%ifarch %qt5_qtwebengine_arches | %ifarch %qt5_qtwebengine_arches | ||
В некоторой мере повлиять на эту данность (в случае совместимости сверху вниз -- i586 может выполнять код для i486) можно явным заданием версии архитектуры, например: | |||
$ rpm -bb --define '_target_cpu e2kv4' *.spec | |||
= Ссылки = | = Ссылки = |
Текущая версия от 17:43, 6 марта 2024
Ручки при сборке
Бывает, что пакет требуется собирать по-разному -- в bootstrap-режиме или полноценно, с той библиотекой или с этой; для этого в RPM существуют "ручки", соответствующие configure-овым опциям --disable/--enable и --with/--without.
когда какие
Как правило, в configure, --disable/--enable применяются ко внутренней функциональности проекта (включить или выключить сборку/применение какой-либо части его кода), а --with/--without -- ко внешней (собираться ли с такой-то отдельной библиотекой).
как
Поведение по умолчанию задаётся макросами %def_* (обычно в начале спека для лучшей видимости), при этом, задавать умолчание обязательно:
%def_with python3 %def_without bootstrap %def_enable guile %def_disable snapshot
На эти параметры можно влиять во время сборки через --disable/--enable/--with/--without опции rpmbuild, это удобно для временного или глобального их отключения/включения без изменения спека (например --disable check).
Условные части spec-файла обрамляются так:
%if_with python3 BuildRequires(pre): rpm-build-python3 %endif %if_enable guile BuildRequires: guile-devel %endif
либо как условное раскрытие макроса (однострочная форма более кратка и менее читабельна):
%{?_with_python3:BuildPreReq: rpm-build-python3} %{?_enabled_guile:BuildPreReq: guile-devel}
Условия могут быть вложенными, в этом случае следует внимательно следить за их своевременным закрытием.
Затем, в configure эти параметры передаются так:
%configure \ %{subst_with python3} \ %{subst_enable guile}
архитектуры
Данностью является целевая архитектура сборки -- для неё существует особая форма %ifarch/%ifnarch, принимающая список архитектур. Если вы в зависимости от архитектуры включаете или выкроючаете %def_ опцию, то необходимо задать и включающий, и выключающий вариант через %else, так как задание %def_enable/%def_with не подразумевает определение %def_disable/%def_without. Пример:
%ifarch %e2k ppc64le %def_enable webkit %else %def_disable webkit %endif
Для некоторых ходовых компонентов, состояние поддержки которых по архитектурам может меняться со временем (причём в любую сторону), сделаны макропакеты rpm-macros-*; например:
BuildRequires(pre): rpm-macros-qt5-webengine # ... %ifarch %qt5_qtwebengine_arches
В некоторой мере повлиять на эту данность (в случае совместимости сверху вниз -- i586 может выполнять код для i486) можно явным заданием версии архитектуры, например:
$ rpm -bb --define '_target_cpu e2kv4' *.spec