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 %def_without и %def_enable %def_disable Первый набор управляется параметрами --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 --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 имеют приоритет перед теми, которые указаны в командной строке. Неконсистентно.