[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