[devel] rpm macros

Dmitry V. Levin =?iso-8859-1?q?ldv_=CE=C1_fandra=2Eorg?=
Вс Ноя 12 19:48:32 MSK 2000


On Sun, Nov 12, 2000 at 01:55:03PM +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 не существует понятия локальных
макросов. В результате, в область видимости попадают порой позиционные
параметры макроса, раскрытого уровнем выше.

Например, следующие макросы
%embrace()	%brace X %1
%brace()	%ONE %1 TWO %2 THREE %3 FOUR

по команде
$ rpm --eval='%embrace все что угодно'

раскрываются в
%ONE X TWO X THREE угодно FOUR

А если в процессе раскрытия парсер обнаружит, что %1 имеет значение %1,
или %2 - значение %2, и т.д., причем не обязательно на последнем уровне
раскрытия, то получается рекурсия.

Это все, конечно, плохо, однако именно так оно реализовано - это Вам не
cpp, где макрос, открытый один раз, выпадает из области видимости.

Какие будут предложения?


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/20001112/fddafc9d/attachment-0001.bin>


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