Knobs

Материал из ALT Linux Wiki

Ручки при сборке

Бывает, что в зависимости от условий пакет требуется собирать по-разному -- в bootstrap-режиме или полноценно, с той библиотекой или с этой; для этого в RPM существуют "ручки", симметричные configure-овым --disable/--enable и --with/--without.

когда какие

Как правило, --disable/--enable применяются ко внутренней функциональности проекта (включить или выключить сборку/применение какой-либо части его кода), а --with/--without -- ко внешней (собираться ли с такой-то отдельной библиотекой).

как

Поведение по умолчанию задаётся макросами %def_*:

%def_with python3
%def_without bootstrap
%def_enable guile
%def_disable snapshot

Условные части spec-файла обрамляются так:

%if_with python3
BuildRequires(pre): rpm-build-python3
%endif

либо так (однострочная форма более кратка и менее читабельна):

%{?_with_python3:BuildPreReq: rpm-build-python3}

Условия могут быть вложенными, в этом случае следует внимательно следить за их своевременным закрытием.

архитектуры

Данностью является целевая архитектура сборки -- для неё существует особая форма %ifarch/%ifnarch, принимающая список архитектур:

%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

Ссылки