[devel] rpm macros

Dmitry V. Levin =?iso-8859-1?q?ldv_=CE=C1_fandra=2Eorg?=
Пн Ноя 13 13:14:52 MSK 2000


On Mon, Nov 13, 2000 at 02:27:41AM +0300, Mikhail Zabaluev wrote:
> > > > $ rpm --eval='%embrace a b'
> > > > 
> > > > %embrace()          %brace
> > > > %brace()            begin %2 %1 end
> > > > результат: begin b a end
> > > 
> > > То есть %*, %1, %2 передаются как есть макросу "со скобочками", если он
> > > подставляется без параметров? Бред, так быть не должно. Эти параметры
> > > должны быть локальными.
> > 
> > Не совсем так: %*, %1, %2 и пр. создаются при каждом расширении по мере
> > надобности. Дело в том, что в rpm не существует понятия локальных
> > макросов. В результате, в область видимости попадают порой позиционные
> > параметры макроса, раскрытого уровнем выше.
> 
> Как бы это "порой" более четко сформулировать? Когда позиционные параметры
> не используются подчиненным макросом, их значения сохраняются теми, что
> были на уровень выше? Почему все-таки %* не инициализируется правильным
> образом для каждой подстановки параметризованного макроса?

Я недостаточно точно выразился: **, *, #, 0 переопределяются при каждом
расширении, а 1,2,3,4,... - как повезет.

> > Например, следующие макросы
> > %embrace()	%brace X %1
> > %brace()	%ONE %1 TWO %2 THREE %3 FOUR
> > 
> > по команде
> > $ rpm --eval='%embrace все что угодно'
> > 
> > раскрываются в
> > %ONE X TWO X THREE угодно FOUR
> 
> Даже по вышеописанной извращенной логике должно получаться
> 
> %ONE X TWO все THREE угодно FOUR

А вот и нет! Внимательней надо анализировать!

> > А если в процессе раскрытия парсер обнаружит, что %1 имеет значение %1,
> > или %2 - значение %2, и т.д., причем не обязательно на последнем уровне
> > раскрытия, то получается рекурсия.
> > 
> > Это все, конечно, плохо, однако именно так оно реализовано - это Вам не
> > cpp, где макрос, открытый один раз, выпадает из области видимости.
> > 
> > Какие будут предложения?
> 
> Считать обработку параметризованных макросов в rpm кривой,
> контр-интуитивной (если считать, что за образец взят механизм
> позиционных параметров shell) и не полагаться без крайней нужды на такие
> макросы.

Да, пожалуй что и так.

Насколько я помню, кагда jbj последний раз высказывался о TODO для rpm,
переписывание макросов туда не входило. Кто-нибудь хочет этим заняться?


Regards,
	Dmitry

+-------------------------------------------------------------------------+
Dmitry V. Levin     mailto://ldv@fandra.org
Software Engineer   PGP pubkey http://www.fandra.org/users/ldv/pgpkeys.html
IPLabs Linux Team   http://linux.iplabs.ru
Fandra Project      http://www.fandra.org
+-------------------------------------------------------------------------+
UNIX is user friendly. It's just very selective about who it's friends are.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 232 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20001113/742fad5b/attachment-0001.bin>


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