From owner-svn-src-head@FreeBSD.ORG Tue Mar 20 21:20:44 2012 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7602F106564A; Tue, 20 Mar 2012 21:20:44 +0000 (UTC) (envelope-from utisoft@gmail.com) Received: from mail-bk0-f54.google.com (mail-bk0-f54.google.com [209.85.214.54]) by mx1.freebsd.org (Postfix) with ESMTP id 2011D8FC0A; Tue, 20 Mar 2012 21:20:42 +0000 (UTC) Received: by bkcjc3 with SMTP id jc3so557883bkc.13 for ; Tue, 20 Mar 2012 14:20:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; bh=hWOJpETowPFJFRGRMXGqfJXQXN4L9zLf73wgulMiVFQ=; b=zBtIpaxA6gPdWn3dwA+3PLcXyRfJB+Ta/a911suE+FKKX2YEYfoR8viKjcsB/jn/19 RL6x5b1gUM65qJN14qnz1d+01EHezmsY/8Esw0y2c4kw13ACswct1ov6Q4yIZl9Mix01 TWIp/HMMxctV7gptG9PzGhdK04ELhbwLSowi1PpCavZOmTX9+HA6UzcdXUm9yZR8qU45 hc3t4yda4pHta+VRUNi2X5w/RRfx/e3GkBgHozZAn/RWwALDfeK5oWct0iXu1dXZQnVQ KJKuCxGIS2aM45zQ/Tq19yf77CdorztASmoPFdb1751vJ0GCvE+OqJQUKJg3FYUAf+O9 W8Mw== Received: by 10.204.141.25 with SMTP id k25mr519805bku.72.1332278436109; Tue, 20 Mar 2012 14:20:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.204.202.142 with HTTP; Tue, 20 Mar 2012 14:20:04 -0700 (PDT) In-Reply-To: <201203201019.40486.jhb@freebsd.org> References: <201203162319.q2GNJjx5039482@svn.freebsd.org> <4F678B03.8050307@FreeBSD.org> <4F67A7A9.50003@FreeBSD.org> <201203201019.40486.jhb@freebsd.org> From: Chris Rees Date: Tue, 20 Mar 2012 21:20:04 +0000 Message-ID: To: John Baldwin Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: Doug Barton , svn-src-all@freebsd.org, Dimitry Andric , src-committers@freebsd.org, Bruce Evans , svn-src-head@freebsd.org Subject: Re: svn commit: r233052 - head/share/mk X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Mar 2012 21:20:44 -0000 On 20 March 2012 14:19, John Baldwin wrote: > On Monday, March 19, 2012 5:39:53 pm Doug Barton wrote: >> On 3/19/2012 12:37 PM, Dimitry Andric wrote: >> > It would be much nicer to be able to write: >> > >> > .if defined(FOO) >> > =A0 .if defined(BAR) >> > =A0 =A0 CFLAGS+=3D =A0 =A0 =A0 =A0-DFOO_BAR >> > =A0 .endif >> > .endif >> >> Take a look at /usr/ports/Mk/bsd.port.mk for how this can be done. > > Hmm, do yoo have a specific example? =A0The bits in I see in bsd.port.mk = suffer > from the limitation Dimitry raises, e.g.: > > .if defined(OPTIONS) > # include OPTIONSFILE first if exists > . =A0 =A0 =A0 if exists(${OPTIONSFILE}) && !make(rmconfig) > . =A0 =A0 =A0 include "${OPTIONSFILE}" > . =A0 =A0 =A0 endif > . =A0 =A0 =A0 if exists(${OPTIONSFILE}.local) > . =A0 =A0 =A0 include "${OPTIONSFILE}.local" > . =A0 =A0 =A0 endif > WITHOUT:=3D > WITH:=3D > . =A0 =A0 =A0 if defined(OPTIONS) > REALOPTIONS=3D${OPTIONS:C/".*"//g} > . =A0 =A0 =A0 for O in ${REALOPTIONS} > RO:=3D${O} > . =A0 =A0 =A0 if ${RO:L} =3D=3D off > WITHOUT:=3D =A0 =A0 =A0 ${WITHOUT} ${OPT} > . =A0 =A0 =A0 endif > . =A0 =A0 =A0 if ${RO:L} =3D=3D on > WITH:=3D =A0 =A0 =A0 =A0 =A0${WITH} ${OPT} > . =A0 =A0 =A0 endif > OPT:=3D${RO} > . =A0 =A0 =A0 endfor > . =A0 =A0 =A0 endif > > That is, all the lines that don't start with a . are not indented, and > even this indentation is rather horrible (it doesn't nest, and it > has the odd structure of 'if defined(OPTIONS) { if defined(OPTIONS) {} }'= . I don't see how it's any more horrible than the kernel style's rules on indented #ifs (though I can see the reasoning for that) It's an unfortunate consequence of the fact that any line starting with whitespace must be a shell command-- from before Makefiles were allowed conditionals etc. It's got to be an improvement on: .if defined(ONE) .if !defined(TWO) .for one in two three four .if ${VAR} =3D=3D ${one} .if defined(VERBOSE) .warning VAR =3D one .endif .endif .endfor .elif ${VAR} =3D=3D four .if defined(VERBOSE) .warning VAR =3D four .endif .else .warning VAR is not four, and VERBOSE is ignored .endif # XXXX Which one is this for?? .endif which is what a lot of the Makefiles look like... debugging if-less endifs etc is infinitely easier if we indent, however horrible it looks. We shouldn't be *trying* to make Makefiles hard to read ;) Chris