On 20 March 2012 21:28, John Baldwin <j...@freebsd.org> wrote: > On Tuesday, March 20, 2012 5:20:04 pm Chris Rees wrote: >> On 20 March 2012 14:19, John Baldwin <j...@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 _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"