Значительная часть конструкции системы RPM лежит в области системно-зависимых конфигураций. К системно-зависимым параметрам относится, например, информация о платформе, о совместимых платформах, о расположении различных файлов. Файлы настройки RPM - rc и macros поддерживают сотни опций, настраивающих RPM на определенную систему, и многие настройки не могут быть оставлены в значениях по умолчанию.
RPM программы на C нуждаются в доступе к системным настройкам RPM для проверки правильности установок, адекватных системной архитектуре и текущей инсталляции. Для запуска программы, системные установки должны быть считаны (возможно, из всех конфигурационных файлов). Для выполнения этой операции вызывается rpmReadConfigFiles :
| 
 int rpmReadConfigFiles(const char *files, const char *target);   | 
Параметр files содержит разделенный двоеточиями список файлов, которые отвечают за системную конфигурацию. Параметр target содержит целевую платформу. Для использования установок по умолчанию достаточно, чтобы оба параметра имели значение NULL .
Функция rpmReadConfigFiles возвращает 0 в случае успеха и -1 в случае ошибки.
Единожды считав конфигурационные файлы, мы можем получить доступ к значениям переменных конфигурации, или, например, распечатать их.
 15.1.5.1. Вывод конфигурации 
Для вывода конфигурации используется rpmShowRC :
| 
 int rpmShowRC(FILE* output);    | 
Чтобы задать выходной файл, устанавливается значение единственного параметра, например, для стандартного вывода:
| 
 rpmShowRC( stdout );    | 
Функция rpmShowRC всегда возвращает 0.
Для контролирования вывода rpmShowRC и других библиотечных функций используют установку уровня многословности вывода с помощью функции rpmSetVerbosity :
| 
 rpmSetVerbosity(RPMMESS_NORMAL);     | 
Возможные варианты многословности вывода:
| 
 Уровень  | 
 Что означает  | 
| 
 RPMMESS_FATALERROR  | 
 Сообщения о критических ошибках и все не менее значимое  | 
| 
 RPMMESS_ERROR  | 
 Сообщения об ошибках вообще и все не менее значимое  | 
| 
 RPMMESS_WARNING  | 
 Все предупреждения и все не менее значимое  | 
| 
 RPMMESS_QUIET  | 
 То же, что и RPMMESS_WARNING  | 
| 
 RPMMESS_NORMAL  | 
 Только существенные сообщения  | 
| 
 RPMMESS_VERBOSE  | 
 Все информационные сообщения  | 
| 
 RPMMESS_DEBUG  | 
 Вся отладочная информация и все не менее значимое  | 
Пример программы, использующей вышеописанные функции:
| 
  /* Show the rpmrc settings. */    | 
Скомпилируйте программу с помощью команды:
| 
 $ cc -I/usr/include/rpm -o rpm1 rpm1.c -lrpm -lrpmdb -lrpmio lpopt    | 
После запуска программы мы должны увидеть содержимое файлов конфигурации, выводимое на консоль.
 15.1.5.2. Разворачивание значений макросов 
В совокупности rc-файлы и файлы макросов содержат множество определений, которые можно использовать для обращения к значениям установок. Термин макроопределение или макрос используются потому, что значение может быть не просто строкой. Может быть макрос, ссылающийся на другие макросы, возможны и  другие сложноподчиненные случаи. Базовый синтаксис макросов:
| 
 %name_of_macro   | 
Например:
| 
 %_target    | 
Множество макросов начинаются с нижнего подчеркивания.
Всегда можно раскрыть макрос с помощью команды rpm --eval :
| 
 $ rpm --eval %_target   | 
Обратиться к значению макроса можно так:
| 
 %{_target}   | 
Такой синтаксис облегчает задачу включения макросов в комбинации с обычным текстом и другими макросами.
 15.1.5.2. Разворачивание макросов внутри кода 
Для получения значения макроса в C-программе используют rpmExpand. Функция rpmExpand может развернуть один или несколько макросов, возвращая развернутое значение. Функции можно передать различное число параметров. Список должен быть инициализирован значением NULL .
| 
 char* rpmExpand (const char *arg,...);    | 
Для очистки после возврата данных из rpmExpand следует использовать free .
Программа в примере ниже забирает из командной строки первый параметр и пытается его развернуть как макрос:
| 
  /* Show some macro settings. */    | 
Скомпилируйте программу как показано выше. При запуске после имени исполняемого файла введите имя макроса для разворачивания. Например:
| 
  $ ./rpmexpand %_target   | 
Можно задать несколько имен макросов в связке:
| 
 $ ./rpmexpand %_builddir/%_target   | 
Для проверки работы программы можно использовать rpm --eval :
| 
 $ rpm --eval %_builddir/%_target   | 
 Далее - Мощь popt 
 Назад - Компиляция и линковка RPM программ 
 Содержание