macro expansion problems

Adrian Reber adrian at lisas.de
Mon Jul 30 12:15:28 UTC 2018


On Mon, Jul 30, 2018 at 01:30:41PM +0300, Panu Matilainen wrote:
> On 07/09/2018 12:42 PM, Adrian Reber wrote:
> > I am trying to define a macro and it seems I do not understand the macro
> > expansion correctly.
> > 
> > The macro I want to use, uses a variable which is defined later and I
> > cannot get it right. The following is a short example of what I would
> > like to do:
> > 
> > %global debug_package %{nil}
> > %global newname %(eval echo %{extname} | tr [a-z] [A-Z])
> > %global extname lower
> > Name: %{extname}
> > Version: 1
> > Release: 1
> > Summary: Summary
> > License: yes
> > %description
> > %{newname}
> > 
> > # rpmspec -q test.spec --parse
> > Name: lower
> > Version: 1
> > Release: 1
> > Summary: Summary
> > License: yes
> > %description
> > %{EXTNAME}
> > 
> > 
> > I understand the result but I tried many variants with expand to get it
> > working, but I failed. This is on CentOS 7.
> > 
> > Is it possible to change the value of a variable in a macro with a
> > variable which is defined later?
> 
> Yes, you just need to use %define to get lazy macro expansion, %global
> expands the body at time of definition. Using %define for "newname" macro
> definition gives you:
> 
> Name: lower
> Version: 1
> Release: 1
> Summary: Summary
> License: yes
> %description
> LOWER
> 
> ...which I suppose is the behavior you're after here.

Yes, perfect. Thanks.

> Yet another victim of Fedora's "%define is evil, use %global" misguided
> guidelines.

I guess you are right.

		Adrian


More information about the Rpm-list mailing list