Subject: Re: arithmetic in make
To: None <tech-toolchain@NetBSD.org>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: tech-toolchain
Date: 02/25/2007 18:01:44
On Sun, Feb 25, 2007 at 11:12:29AM -0500, der Mouse wrote:
> > .for file in ${MYFILES}
> > cp ${file} dir/file{$n}
> > .endfor
>
> n := 1
> .for file in $(MYFILES)
> cp $(file) dir/file$(n)
> n != echo $(($(n)+1)) # or != expr $(n) + 1
> .endfor
>
> I don't know of any way to do the arithmetic itself within make. For
> general arithmetic, it's probably possible, but I suspect only with the
> help of an include file which implements recursion through re-including
> itself. However, incrementing is a special case:
>
> n := 1
> .for file in $(MYFILES)
> cp $(file) dir/file$(n)
> n1 := $(n:C/\(.*\)\(.\)\(9*\)/\1/)
> n2 := $(n:C/\(.*\)\(.\)\(9*\)/\2/)
> n3 := $(n:C/\(.*\)\(.\)\(9*\)/\3/)
> n := $(n1)$(n2:S/9/10/:S/8/9/:S/7/8/:S/6/7/:S/5/6/:S/4/5/:S/3/4/:S/2/3:S/1/2/:S/0/1/)$(n3:S/9/0/g)
> .endfor
>
> The three regex lines can probably be done with only one regex line,
> producing a string containing delimiters, picking apart the result
> separately.
The help of shell is probably the easiest for what I want to do,
but is echo $(($(n)+1)) portable enough ? This is for
distrib/common/Makefile.bootcd, so it has to be cross-compile friendly ...
--
Manuel Bouyer <bouyer@antioche.eu.org>
NetBSD: 26 ans d'experience feront toujours la difference
--