make, list and M pattern
Boris Samorodov
bsam at ipt.ru
Wed Apr 8 02:37:12 PDT 2009
On Wed, 08 Apr 2009 00:09:43 +0300 Giorgos Keramidas wrote:
> On Tue, 07 Apr 2009 23:54:13 +0400, Boris Samorodov <bsam at ipt.ru> wrote:
> >
> > I need to create a list with some valid values and check an input
> > value. Should this makefile work?
> >
> > -----
> > LIST=f8 f9
> >
> > all:
> > @echo USE_LINUX=${USE_LINUX}, LIST=${LIST}
> > .if empty(LIST:M${USE_LINUX})
> > @echo The value is invalid
> > .else
> > @echo The value is valid
> > .endif
> > -----
> > % make USE_LINUX=f8
> > USE_LINUX=f8, LIST=f8 f9
> > The value is invalid
> > -----
> Hi Boris! :)
Hi Giorgos, Mel and list!
> This is not exactly what you asked for, but you can probably loop
> instead of trying to match regular expressions:
> keramida at kobe:/tmp$ cat -n Makefile
> 1 LIST= f8 f9
> 2 USE_LINUX?= f9
> 3
> 4 LINUX_VERSION= ${USE_LINUX:C/[ ]*([^ ]*)[ ]*/\1/}
> 5
> 6 .if defined(USE_LINUX)
> 7 .for item in ${LIST}
> 8 .if ${USE_LINUX} == ${item}
> 9 RESULT= ${item}
> 10 .endif
> 11 .endfor
> 12 .endif
> 13
> 14 all:
> 15 .if empty(RESULT)
> 16 @echo Version ${LINUX_VERSION} is not valid.
> 17 .else
> 18 @echo Valid version ${RESULT} selected.
> 19 .endif
> keramida at kobe:/tmp$ make
> Valid version f9 selected.
> keramida at kobe:/tmp$ make -e USE_LINUX=f10
> Version f10 is not valid.
> keramida at kobe:/tmp$
Hm, And what if I need to compare two lists and detect if they
have any common items?
VALID_LIST=f8 f9
INPUT_LIST=f6 f7 f8
Nested .for loops are not helpful since .if statement is not
useful here:
.for x in ${VALID_LIST}
. for y in ${INPUT_LIST}
. if $x == $y -- make error here
Thanks!
WBR
--
Boris Samorodov (bsam)
Research Engineer, http://www.ipt.ru Telephone & Internet SP
FreeBSD Committer, http://www.FreeBSD.org The Power To Serve
More information about the freebsd-questions
mailing list