From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ivan Zakharyaschev To: Subject: Re: [devel] rpm macros In-Reply-To: <20001112022905.A9081@LDV.fandra.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=koi8-r Content-Transfer-Encoding: 8BIT Sender: devel-admin@linux.iplabs.ru Errors-To: devel-admin@linux.iplabs.ru X-BeenThere: devel@linux.iplabs.ru X-Mailman-Version: 2.0beta6 Precedence: bulk Reply-To: devel@linux.iplabs.ru List-Help: List-Post: List-Subscribe: , List-Id: IPLabs Linux Team Developers mailing list List-Unsubscribe: , List-Archive: http://www.logic.ru/pipermail/devel/ X-Original-Date: Sun, 12 Nov 2000 12:46:04 +0300 (MSK) Date: Sun, 12 Nov 2000 12:46:04 +0300 (MSK) Archived-At: List-Archive: List-Post: 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