20.1.1 Определение макросов

RPM допускает определение макросов в нескольких местах, включая spec-файл (возможно, наиболее общий случай использования), специальные файлы макросов, командную строку.

Во всех случаях синтаксис применения будет похожим.

20.1.1.1 Определение макроса в spec-файле
В spec-файле есть несколько мест, пригодных для задания макросов. Для этого используется директива %define и следующий синтаксис:

%define name(options) body

options являются необязательными параметрами и могут включать специальные значения, указанные в таблице ниже:

Опция

Содержит

%0

Имя макроса

%1

Первый аргумент после флагов, разобранных getopt

%2-%9

Дополнительные аргументы

%*

Все аргументы кроме флагов, которые должны быть разобраны

%#

Число агрументов

В целом эти опции сходны с таковыми в shell-скриптах.

В дополнение к возможности использовать эти опции можно использовать синтаксис %{-a}. Это выражение хранит -a, если опция -a передавалась. Синтаксис %{-a*} указывает на значение, следующее за -a.

Также можно придать макросу значение, которое возвращается shell-командой. Для этого используется такое выражение:

%(shell_command)

20.1.1.2 Определение макроса в файле инициализации макросов
Внутри файлов инициализации макросов используется следующий синтаксис:

%macro_name value

Макрос, предназначенный для управления системой RPM, начинается с нижнего подчеркивания. Такие макросы не экспортируются в хэдеры пакетов.

Встроенный макрос %expand каким-либо образом расширяет значение. Например, для расширения значения может использоваться shell-команда. В следующем примере задается домашний каталог пользователя для макроса %home:

%home %{expand:%%(cd; pwd)}

Возможно, прямое задание макроса %home в пользовательском файле инициализации макросов $HOME/.rpmmacros будет более простым ходом.

20.1.1.3 Определение макроса в командной строке
Утилита rpm позволяет задать макрос из командной строки:

$ rpm --define 'macro_name value'

Не предваряйте макрос символом процентов, если задаете его с помощью --define.

Раскрыть значение макроса можно командой с опцией --eval:

$ rpm --eval %_usrsrc

/usr/src

Далее - Пользовательские макросы
Назад - Настройка поведения через RPM-макросы
Содержание