[devel] rpm macros

Ivan Zakharyaschev =?iso-8859-1?q?vanyaz_=CE=C1_mccme=2Eru?=
Вс Ноя 12 12:46:04 MSK 2000


On Sun, 12 Nov 2000, Dmitry V. Levin wrote:

> On Sun, Nov 12, 2000 at 01:06:54AM +0300, Ivan Zakharyaschev wrote:
> > Объяснить не могу, могу сообщить, что следующие определения (не
> связанные
> > ни с чем больше) в ~/.rpmmacros тоже вызывают бесконечную рекурсию:
> >
> > %embrace()          %brace %1
> > %brace()            begin %1 end
> >
> > при попытке сделать
> >
> > $ rpm --eval='%embrace a b'
> >
> > У меня rpm-3.0.6-ipl4mdk. Может, ничего неправильно в такой обработке
> и
> > нет, надо понять, по каким правилам она происходит.
>
> Это странно, буду разбираться.

Могу предложить такую модель происходящего: Сначала в поле зрения rpm
(обработчика макросов) стоит

%embrace a b

потом производится подстановка по определению embrace, а прямо перед этим
определяются макросы-параметры (%1 %2 ...): %1 = a, %2 = b; в поле зрения
оказывается новое выражение:

%brace %1

Оно обрабатывается так же: делается подстановка по определению brace, а
перед этим определяются макросы-параметры, в данном случае занята только
первая позиция (на ней стоит %1), поэтому происходит отождествление только
%1 = %1. При этом остальные определения остаются в силе, уже определенный
%2 не трогается (%2 = b). На следующем шаге получаем:

begin %1 end

rpm пытается подставить %1 по известному определению %1 -> %1 и т.д.


Другие примеры набора определений и их применения для вичисления

$ rpm --eval='%embrace a b'

%embrace()          %brace
%brace()            begin %2 %1 end
результат: begin b a end

%embrace()          %brace %1
%brace()            begin %2 end
результат: begin b end

%embrace()          %brace %2 %1
%brace()            begin %3 end
результат: begin %3 end

%embrace()          %brace %2
%brace()            begin %1 end
результат: begin b end

%embrace()          %brace %2 %1
%brace()            begin %1 end
беск. рекурсия

%embrace()          %brace %2 %1
%brace()            begin %2 end
тоже беск. рекурсия

-- 
Best regards,
      Ivan Z.

_______________________________________________
Devel mailing list
Devel на linux.iplabs.ru
http://www.logic.ru/mailman/listinfo/devel



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