From owner-freebsd-questions@FreeBSD.ORG Wed Apr 8 09:37:11 2009 Return-Path: Delivered-To: freebsd-questions@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 957C6106564A for ; Wed, 8 Apr 2009 09:37:11 +0000 (UTC) (envelope-from bsam@ipt.ru) Received: from services.ipt.ru (services.ipt.ru [194.62.233.110]) by mx1.freebsd.org (Postfix) with ESMTP id 500C68FC17 for ; Wed, 8 Apr 2009 09:37:11 +0000 (UTC) (envelope-from bsam@ipt.ru) Received: from bb.ipt.ru ([194.62.233.89]) by services.ipt.ru with esmtp (Exim 4.54 (FreeBSD)) id 1LrUDV-0005ih-FY; Wed, 08 Apr 2009 13:37:09 +0400 To: Giorgos Keramidas References: <37646522@h30.sp.ipt.ru> <871vs49nmw.fsf@kobe.laptop> From: Boris Samorodov Date: Wed, 08 Apr 2009 13:37:09 +0400 In-Reply-To: <871vs49nmw.fsf@kobe.laptop> (Giorgos Keramidas's message of "Wed\, 08 Apr 2009 00\:09\:43 +0300") Message-ID: <89475722@bb.ipt.ru> User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.3 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: freebsd-questions@FreeBSD.org Subject: Re: make, list and M pattern X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Apr 2009 09:37:12 -0000 On Wed, 08 Apr 2009 00:09:43 +0300 Giorgos Keramidas wrote: > On Tue, 07 Apr 2009 23:54:13 +0400, Boris Samorodov 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@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@kobe:/tmp$ make > Valid version f9 selected. > keramida@kobe:/tmp$ make -e USE_LINUX=f10 > Version f10 is not valid. > keramida@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