[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freebsd-hackers
Subject:    Re: make: variable expansion in .for/.endfor
From:       Roman Neuhauser <neuhauser () bellavista ! cz>
Date:       2003-04-29 13:01:43
[Download RAW message or body]

# roam@ringlet.net / 2003-04-29 13:34:04 +0300:
> On Sun, Apr 27, 2003 at 02:48:12PM +0200, Roman Neuhauser wrote:
> > # roam@ringlet.net / 2003-04-26 14:53:36 +0300:
> > > On Fri, Apr 25, 2003 at 08:44:00PM +0200, Roman Neuhauser wrote:
> > > > Try the following makefile: it works if called with -DONE, but does not
> > > > if called with -DTWO. Should I treat it as a bug and file a PR?
> > > > 
> > > > LIST= foo bar baz
> > > > 
> > > > .if defined(ONE)
> > > > .  for v in ${LIST}
> > > > .    if !defined(WITHOUT_${v:U})
> > > > WITH_${v:U}=yes
> > > > .    endif
> > > > .  endfor
> > > > .endif
> > > > 
> > > > .if defined(TWO)
> > > > .  for v in ${LIST}
> > > > V=${v:U}
> > > > .    if !defined(WITHOUT_${V})
> > > > WITH_${V}=yes
> > > > .    endif
> > > > .  endfor
> > > > .endif
> > > > 
> > > > a:
> > > > 	@echo \$${WITH_FOO}: ${WITH_FOO}
> > > > 	@echo \$${WITH_BAR}: ${WITH_BAR}
> > > > 	@echo \$${WITH_BAZ}: ${WITH_BAZ}
> > > > 
> > > > .PHONY: a
> > > 
> > > I think this is a known bug, and it seems to even be documented
> > > in the BUGS section of -STABLE's make(1) manual page.
> > 
> >     I don't think this is covered. Can you point out the relevant text?
> 
> Looking at:
>   $FreeBSD: src/usr.bin/make/make.1,v 1.29.2.15 2002/12/17 19:01:18 seanc Exp $
> 
> The rendered version reads, right at the end of the BUGS section:
> 
>   For loops are expanded before tests, so a fragment such as:
> 
>   .for TMACHINE in ${SHARED_ARCHS}
>   .if ${TMACHINE} = ${MACHINE}
>        ...
>   .endif
>   .endfor
>   won't work, and should be rewritten the other way around.
> 
> This particular part of the manual page seems to have been there
> for the past three years, since Tim Vanderhoek's merge from OpenBSD
> in rev. 1.23.
> 
> At least, I think that this is similar (actually, nearly identical) to
> your Makefile fragment.

    both fragments are "nearly identical", and the first one works. it's
    the assignment (V=${v:U}) that breaks. so, where's the similarity
    (or identity), given that the snippet from the make man page is
    unrelated to assignments?

    again, the first version (wrapped in ifdef ONE) works just fine.

-- 
If you cc me or remove the list(s) completely I'll most likely ignore
your message.    see http://www.eyrie.org./~eagle/faqs/questions.html
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic