Как да предавам променливи в спецификационни файлове?

Пиша първия си спецификационен файл и едно нещо не разбирам е как да го направя динамичен. Използвам други спецификационни файлове като справка и забелязах, че много от тях имат динамично заредено име/версия. Чудя се как да направя това? Ето един пример:

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