[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