Как передать переменные в spec-файлы?

Я пишу свой первый файл спецификации, и я не понимаю, как сделать его динамическим. Я использую другие файлы спецификаций в качестве справки и заметил, что у многих имя/версия загружаются динамически. Мне интересно, как это сделать? Вот пример:

http://svn.apache.org/repos/asf/hbase/branches/0.94/src/packages/rpm/spec/hbase.spec

В основном мне интересно, что означают эти разделы:

%define _source      @package.name@
%define _final_name  @final.name@ 
%define _prefix      @package.prefix@
%define _bin_dir     %{_prefix}/bin 
%define _conf_dir    @package.conf.dir@
%define _include_dir %{_prefix}/include
....

Также мне интересно, что такое {_prefix} на самом деле?

Извините за вопросы новичка. У меня необычное количество проблем с поиском информации об этом.


person catagon87    schedule 24.03.2014    source источник


Ответы (1)


%{_prefix} (и множество других макросов) определены в /usr/lib/rpm/macros. Они считываются rpmbuild и заменяются при анализе файла спецификации. %{_prefix} конкретно обозначает префикс установки, который используется при установке вещей в корневую файловую систему. Обычно это /usr. Макросы в /usr/lib/rpm/macros* определяют пути и многое другое в соответствии с расположением файловой системы и соглашениями об упаковке дистрибутива, на котором создается пакет. Например, дистрибутив может по какой-то причине захотеть, чтобы все двоичные файлы были установлены в /foo/bin, и в этом случае он отправил бы файл макроса с соответствующим набором макросов %{_bindir}.

Все ключи между @ (например, @package.name@) обычно обозначают заполнители для переменных autoconf, они заменяются при запуске autoconf, см. [1]. Они часто используются для автоматического создания соответствующего файла (в данном случае файла спецификаций) из шаблона (который включает указанные заполнители с разделителями @) при настройке исходного пакета.

Что касается передачи других переменных, вот несколько вариантов [2]. Их можно использовать, когда пользователь хочет иметь возможность динамически управлять определенными аспектами пакета.

[1] http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Setting-Output-Variables.html

[2] Как передать пользовательские параметры в rpmbuild для заполнения переменных

person smani    schedule 24.03.2014