Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/usr.bin/make



In message: <huonge$v4t$1%dough.gmane.org@localhost>
            christos%astron.com@localhost (Christos Zoulas) writes:
: In article <20100609171621.GA23176%britannica.bec.de@localhost>,
: Joerg Sonnenberger  <joerg%britannica.bec.de@localhost> 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


Home | Main Index | Thread Index | Old Index