From owner-freebsd-hackers@FreeBSD.ORG Tue Apr 29 06:01:49 2003 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B7EC637B401 for ; Tue, 29 Apr 2003 06:01:49 -0700 (PDT) Received: from mail.bellavista.cz (mail.bellavista.cz [213.235.167.218]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7AA1443F75 for ; Tue, 29 Apr 2003 06:01:48 -0700 (PDT) (envelope-from neuhauser@bellavista.cz) Received: from freepuppy.bellavista.cz (freepuppy.bellavista.cz [10.0.0.10]) by mail.bellavista.cz (Postfix) with ESMTP id 82540349 for ; Tue, 29 Apr 2003 15:01:45 +0200 (CEST) Received: by freepuppy.bellavista.cz (Postfix, from userid 1001) id 81DF62FDAB2; Tue, 29 Apr 2003 15:01:43 +0200 (CEST) Date: Tue, 29 Apr 2003 15:01:43 +0200 From: Roman Neuhauser To: freebsd-hackers Message-ID: <20030429130143.GK13541@freepuppy.bellavista.cz> Mail-Followup-To: freebsd-hackers References: <20030425184400.GS13541@freepuppy.bellavista.cz> <20030426115336.GF761@straylight.oblivion.bg> <20030427124812.GU13541@freepuppy.bellavista.cz> <20030429103404.GA680@straylight.oblivion.bg> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030429103404.GA680@straylight.oblivion.bg> User-Agent: Mutt/1.5.1i Subject: Re: make: variable expansion in .for/.endfor X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Apr 2003 13:01:50 -0000 # roam@ringlet.net / 2003-04-29 13:34:04 +0300: > On Sun, Apr 27, 2003 at 02:48:12PM +0200, Roman Neuhauser wrote: > > # roam@ringlet.net / 2003-04-26 14:53:36 +0300: > > > On Fri, Apr 25, 2003 at 08:44:00PM +0200, Roman Neuhauser wrote: > > > > Try the following makefile: it works if called with -DONE, but does not > > > > if called with -DTWO. Should I treat it as a bug and file a PR? > > > > > > > > LIST= foo bar baz > > > > > > > > .if defined(ONE) > > > > . for v in ${LIST} > > > > . if !defined(WITHOUT_${v:U}) > > > > WITH_${v:U}=yes > > > > . endif > > > > . endfor > > > > .endif > > > > > > > > .if defined(TWO) > > > > . for v in ${LIST} > > > > V=${v:U} > > > > . if !defined(WITHOUT_${V}) > > > > WITH_${V}=yes > > > > . endif > > > > . endfor > > > > .endif > > > > > > > > a: > > > > @echo \$${WITH_FOO}: ${WITH_FOO} > > > > @echo \$${WITH_BAR}: ${WITH_BAR} > > > > @echo \$${WITH_BAZ}: ${WITH_BAZ} > > > > > > > > .PHONY: a > > > > > > I think this is a known bug, and it seems to even be documented > > > in the BUGS section of -STABLE's make(1) manual page. > > > > I don't think this is covered. Can you point out the relevant text? > > Looking at: > $FreeBSD: src/usr.bin/make/make.1,v 1.29.2.15 2002/12/17 19:01:18 seanc Exp $ > > The rendered version reads, right at the end of the BUGS section: > > For loops are expanded before tests, so a fragment such as: > > .for TMACHINE in ${SHARED_ARCHS} > .if ${TMACHINE} = ${MACHINE} > ... > .endif > .endfor > won't work, and should be rewritten the other way around. > > This particular part of the manual page seems to have been there > for the past three years, since Tim Vanderhoek's merge from OpenBSD > in rev. 1.23. > > At least, I think that this is similar (actually, nearly identical) to > your Makefile fragment. both fragments are "nearly identical", and the first one works. it's the assignment (V=${v:U}) that breaks. so, where's the similarity (or identity), given that the snippet from the make man page is unrelated to assignments? again, the first version (wrapped in ifdef ONE) works just fine. -- If you cc me or remove the list(s) completely I'll most likely ignore your message. see http://www.eyrie.org./~eagle/faqs/questions.html