In message: <huonge$v4...@dough.gmane.org> chris...@astron.com (Christos Zoulas) writes: : In article <20100609171621.ga23...@britannica.bec.de>, : Joerg Sonnenberger <jo...@britannica.bec.de> wrote: : >On Wed, Jun 09, 2010 at 12:58:23PM -0400, Christos Zoulas wrote: : >> Log Message: : >> Explain variable expansion better. Requested by Aleksey Cheusov : > : >This is wrong. Loop variables are not exapnded on each loop iteration. : >Each loop iteration effectively creates a new variable. The rest of his : >confusion comes from two simple facts: : >(1) += is lazy in bmake. This is different from FreeBSD, where it forces : >expansion. : >(2) The evaluation of j is lazy as well. That's why he sees the last : >loop iteration. : : Well, it was true when I wrote the "for" code (more than 16 years : ago!). I guess dsl re-wrote it, but the net effect is the same. : : When did FreeBSD changed += not to be lazy? That would break a lot : of existing Makefiles I presume.
It looks like it is lazy to me for all non-loop variables in FreeBSD: % uname FreeBSD % cat M FOO=1 BAR=2 .for j in a b c FOO+= ${BAR} ${j} .endfor BAR=3 all: @echo ${FOO} @echo ${BAR} % make -f M 1 3 a 3 b 3 c 3 % Not sure if this is "correct" or "expected" but it strikes me as "useful" and changes to this behavior would break things... Warner