Better way to do conditional inclusion in make

Warner Losh imp at bsdimp.com
Fri Feb 6 03:30:52 UTC 2015


> On Feb 5, 2015, at 6:39 PM, NGie Cooper <yaneurabeya at gmail.com> wrote:
> 
> On Thu, Feb 5, 2015 at 5:26 PM, Simon J. Gerraty <sjg at juniper.net> wrote:
>> NGie Cooper <yaneurabeya at gmail.com> wrote:
>>>> how does it cope with the case where a single file is dependent on either of
>>>> two options.
>>>> (we have this in our tree.. not sure if it occurs in the FreeBSD tree.)
>>>> file could occur in both lists or twice in one list..
>>> 
>>> This is a good, valid point. I think that Warner's proposal will fix
>>> the simple case (using one knob), but not the more complex case.
>> 
>> FILES:= ${FILES:O:u}
>> 
>> should cover that case.
> 
> Yes, but not this:
> 
> .if ${MK_BAR} != "no" && ${MK_FOO} != "no"
> FILES+= a_lot_of_bar_in_my_foo
> .endif

There’s very few cases of this in the tree, so who cares :) You just add
the old school .if.

>>> What concerns me about the short description of the implementation,
>>> (and something that I'm going to add to the phabricator review) is
>>> that this will:
>>> 
>>> 1. Break using FILESGROUPS
>> 
>> Why?
> 
> The same reason why bsd.progs.mk didn't work with bsd.prog.mk on
> FreeBSD out of the box originally -- defaults:

bsd.progs.mk is evil and should die :) I tried to leave this line out, but couldn’t :)

> 10 FILESGROUPS?=   FILES
> 11
> 12 .for group in ${FILESGROUPS}
> 13 buildfiles: ${${group}}
> 14 .endfor
> 15
> 
> Warner's change (based on what I understand, again I haven't looked at
> the review yet…)

You should, it would answer why this isn’t an issue.

> would require setting FILESGROUPS explicitly. So if
> you had a Makefile snippet that defines the non-default FILESGROUPS
> already, it will break that usecase.

Why? I don’t set why it matters at all. This wouldn’t affect the FILES variable
expansion in line 13 at all. How would it break?

>>> 2. Requires creating snippets for dealing with magic in bsd.*.mk (I
>>> wouldn't want this magic going into the general purpose snippets
>>> because it would probably break backwards compatibility).
>> 
>> Not necessarily eg. if you clean/simplify the list after building it.
> 
> I'll delay my reply on this because my other replies might change my question.

OK.

Warner



More information about the freebsd-arch mailing list