Я упаковываю внутренний продукт, который зависит от десятков библиотек второго уровня. В идеале эти библиотеки должны создаваться и управляться как независимые пакеты, но наша устаревшая система сборки затрудняет это.
Вместо этого у нас есть механизм (сценарий) развертывания, который выбирает необходимые зависимости и рекурсивно устанавливает их в файловую систему по мере необходимости. Итак ... мы создаем RPM, используя этот сценарий развертывания (это наша первая ошибка, но ее нелегко исправить). Файл спецификации RPM сообщает сценарию, что нужно установить его прямо в $ RPM_BUILD_ROOT, затем мы обрабатываем и упаковываем файлы по мере необходимости.
Это подводит меня к моему вопросу:
У меня есть десятки зависимостей, каждая из которых меняется с небольшой периодичностью. Отслеживание номеров версий библиотеки часто требует настройки файла .spec в полдюжине мест. Я бы хотел написать макрос, который мог бы называться:
%dependency -B libstrutil -M 1 -m 5 -p 0
который расширится до:
%define libstrutil libstrutil.so
%define libstrutil_m libstrutil.so.1
%define libstrutil_mm libstrutil.so.1.5
%define libstrutil_mmp libstrutil.so.1.5.0
Где опция «-B» - это базовое имя библиотеки, опция «-M» - это основной номер версии, «-m» - это дополнительный номер версии, а «-p» - это уровень исправления. Затем эти макросы можно использовать во всем файле спецификации, где могут потребоваться определенные версии (особенно в разделе% files).
Я просмотрел макросы, поставляемые с RHEL 6 (особенно / usr / lib / rpm / macros), но нашел очень мало примеров макросов с аргументами. Я нашел ОДИН% GNUconfigure, и это не совсем просто, учитывая, что в его определении используется много условной логики. Более актуально для непосредственного вопроса,% GNUconfigure сам по себе не определяет другие макросы.
Я подозреваю, что то, что я пытаюсь сделать, достигается с помощью% {expand: ...}, но я даже не приблизился к тому, чтобы заставить этот синтаксис работать.