[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