Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Mar 2012 21:40:39 +0000
From:      Chris Rees <utisoft@gmail.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r233052 - head/share/mk
Message-ID:  <CADLo839N=N_yqQy1opR1b5%2B5S0O5a-sdxV-PG9DEGfESPTDhMA@mail.gmail.com>
In-Reply-To: <201203201728.21049.jhb@freebsd.org>
References:  <201203162319.q2GNJjx5039482@svn.freebsd.org> <201203201019.40486.jhb@freebsd.org> <CADLo839Ef3bu_14AdexOWapOacFLk3MM9HK-oNLmtA52Cc9C6w@mail.gmail.com> <201203201728.21049.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On 20 March 2012 21:28, John Baldwin <jhb@freebsd.org> wrote:
> On Tuesday, March 20, 2012 5:20:04 pm Chris Rees wrote:
>> On 20 March 2012 14:19, John Baldwin <jhb@freebsd.org> 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)
>> >> >   .if defined(BAR)
>> >> >     CFLAGS+=        -DFOO_BAR
>> >> >   .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?  The bits in I see in bsd.port.mk
> suffer
>> > from the limitation Dimitry raises, e.g.:
>> >
>> > .if defined(OPTIONS)
>> > # include OPTIONSFILE first if exists
>> > .       if exists(${OPTIONSFILE}) && !make(rmconfig)
>> > .       include "${OPTIONSFILE}"
>> > .       endif
>> > .       if exists(${OPTIONSFILE}.local)
>> > .       include "${OPTIONSFILE}.local"
>> > .       endif
>> > WITHOUT:=
>> > WITH:=
>> > .       if defined(OPTIONS)
>> > REALOPTIONS=${OPTIONS:C/".*"//g}
>> > .       for O in ${REALOPTIONS}
>> > RO:=${O}
>> > .       if ${RO:L} == off
>> > WITHOUT:=       ${WITHOUT} ${OPT}
>> > .       endif
>> > .       if ${RO:L} == on
>> > WITH:=          ${WITH} ${OPT}
>> > .       endif
>> > OPT:=${RO}
>> > .       endfor
>> > .       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} == ${one}
>> .if defined(VERBOSE)
>> .warning VAR = one
>> .endif
>> .endif
>> .endfor
>> .elif ${VAR} == four
>> .if defined(VERBOSE)
>> .warning VAR = 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 ;)
>
> Oh, it may be that I was reading it in less or some such and that bsd.port.mk
> requires 4 space tabs, so when viewed in things like less the indentation
> doesn't actually look like indentation.  In that respect, this is no better
> than the above (and is what bsd.ports.mk looks like to me at least):
>
> .      if defined(ONE)
> .      if !defined(TWO)
> .      for one in two three four
>
> etc.  To be worthwhile the spacing has to actually look like indentation:
>
> .if defined(ONE)
> .  if !defined(TWO)
> .    for one in two three four
>
> etc.

Yes-- it'd be nice if less could read the ex:ts=4 bit.

That can go on my todo list.

Chris



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CADLo839N=N_yqQy1opR1b5%2B5S0O5a-sdxV-PG9DEGfESPTDhMA>