Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Apr 2003 15:01:43 +0200
From:      Roman Neuhauser <neuhauser@bellavista.cz>
To:        freebsd-hackers <freebsd-hackers@freebsd.org>
Subject:   Re: make: variable expansion in .for/.endfor
Message-ID:  <20030429130143.GK13541@freepuppy.bellavista.cz>
In-Reply-To: <20030429103404.GA680@straylight.oblivion.bg>
References:  <20030425184400.GS13541@freepuppy.bellavista.cz> <20030426115336.GF761@straylight.oblivion.bg> <20030427124812.GU13541@freepuppy.bellavista.cz> <20030429103404.GA680@straylight.oblivion.bg>

next in thread | previous in thread | raw e-mail | index | archive | help
# 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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030429130143.GK13541>