[devel] rpm macros
Mikhail Zabaluev
=?iso-8859-1?q?mookid_=CE=C1_sigent=2Eru?=
Пн Ноя 13 02:27:41 MSK 2000
Hello Dmitry,
On Sun, Nov 12, 2000 at 19:48 +0300, Dmitry V. Levin wrote:
>
> 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
Даже по вышеописанной извращенной логике должно получаться
%ONE X TWO все THREE угодно FOUR
> А если в процессе раскрытия парсер обнаружит, что %1 имеет значение %1,
> или %2 - значение %2, и т.д., причем не обязательно на последнем уровне
> раскрытия, то получается рекурсия.
>
> Это все, конечно, плохо, однако именно так оно реализовано - это Вам не
> cpp, где макрос, открытый один раз, выпадает из области видимости.
>
> Какие будут предложения?
Считать обработку параметризованных макросов в rpm кривой,
контр-интуитивной (если считать, что за образец взят механизм
позиционных параметров shell) и не полагаться без крайней нужды на такие
макросы.
--
Stay tuned,
MhZ mailto:mookid на sigent.ru
-----------
The world is coming to an end! Repent and return those library books!
_______________________________________________
Devel mailing list
Devel на linux.iplabs.ru
http://www.logic.ru/mailman/listinfo/devel
Подробная информация о списке рассылки Devel