[sisyphus] разные сборки одного пакета

Alexey Morozov =?iso-8859-1?q?alex-altlinux_=CE=C1_idisys=2Eiae=2Ensk=2Esu?=
Чт Янв 15 03:23:33 MSK 2004


On Mon, Jan 12, 2004 at 04:13:46PM +0300, Ildar Mulyukov wrote:
> А теперь: внимание, вопрос!
> Как в спеках поддерживается сборка пакетов с альтернативным набором фич?
> То есть 
> 1. можно ли писать спек так, чтобы добавлением опций команде rpmbuild из
> того же src.rpm строился иной бинарник? Что-то вроде rpmbuild --rebuild
> --build-options="--with-alsa" esound.src.rpm ?
ну, собственно, четких правил еще нет. Зато есть два _непересекающихся_ 
набора макросов, которые позволяют указывать параметры при сборке
(в CLI или в настройках RPM). Макросы таковы:

%def_with <arg>
%def_without <arg>

и

%def_enable <arg>
%def_disable <arg>

Первый набор управляется параметрами --with или --without, а второй -
--enable/--disable. 

Использование %def_with в спеке разрешает по умолчанию некоторую опцию,
а %def_without - запрещает ее по умолчанию. С enable/disable -
аналогично.

Если некоторая опция smth была объявлена с with/without, то затем в спеке
можно написать:

%if_with smth
... do things if smth included
%endif
...
%if_without smth
... do things if smth excluded
%endif

Аналогично с enable/disable, только используются
%if_enabled/%if_disabled.

Соответственно, Вы можете, там где мэйнтейнер об этом подумал, управлять
параметрами пересборки. Вопрос только в том, что на данный момент _нет_
общепринятого набора допустимых опций, и каждый мэйнтейнер волен действовать
по своему усмотрению и, зачастую, опции сборки либо пересекаются
(--enable static vs --with static), либо вообще пробиваются в спек гвоздями:

%define smth 1

Таким образом стоят задачи:

1. Составить список наиболее употребимых опций сборки (alsa и esound туда
_точно_ должны попасть) и опубликовать его.
2. Добавить этот список куда-нибудь в rpm по аналогии с /usr/lib/rpm/GROUPS
3. Склонить каждого конкретного мэйнтэйнера на приведение каждого конкретного
спека в приемлемое в этом отношении  состояние.


> 2. менять Release: такой же опцией. Например, я хочу, чтобы построился
> пакет не версии 1.0.0-alt1 , а 1.0.0-alt1adv ?
Вообще-то c release в этом случае, видимо, все плохо. То есть, чаще всего,
он жестко пробивается в спек, причем, по АЛЬТовым правилам сборки,
видимо, требуется еще и изменение changelog'а. К тому же, у пакетов
периодически встречаются жесткие зависимости на версии других пакетов
(с точностью до release), поэтому есть опасность, что при механическом
переписывании release все просто сломается.

> В том же esound.spec я нашёл такую директиву: %def_without alsa . Можно
> ли в неё вмешаться снаружи? А в release?
rpmbuild -ba <spec> --with alsa

либо занести в ~/.rpmmacros или в любое другое место,
где его увидит rpm, строчки, подобные этим:

%_without_python_auto --without-python_auto
%_with_python22 --with-python22

(См. мои питоньи спеки на http://woland.iae.nsk.su/~alex/python/SPECS)

2ldv: похоже, я нашел баг в обработке with/without. Параметры, указанные
в ~/.rpmmacros имеют приоритет перед теми, которые указаны в командной
строке. Неконсистентно.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20040115/7475ed53/attachment-0009.bin>


Подробная информация о списке рассылки Sisyphus