make WITH[OUT]_* more useful?

Baptiste Daroussin bapt at FreeBSD.org
Tue Apr 1 06:43:35 UTC 2014


On Mon, Mar 31, 2014 at 10:13:27PM -0700, Simon Gerraty wrote:
> I really like the idea of WITH[OUT]_* knobs translating to MK_* knobs,
> but I find the current implementation much less useful than I think it
> could be.  Not the least of its problems is being implemented in
> bsd.own.mk which ties policy and mechanism together.
> 
> It is not always (rarely) safe  to include the in-tree bsd.own.mk which
> means that in many cases you cannot rely on MK_* at all, but have to
> re-implement the WITH_* vs WITHOUT_* logic repeatedly.
> 
> It is also generally bad to include bsd.own.mk from sys.mk, which means
> any knobs you need early must re-implement the WITH_* vs WITHOUT_* logic
> repeatedly.
> 
> contrib/bmake/mk/options.mk is an example of a more generic
> implementation with (I think) some advantages.
> 
> The key semantic changes are (DOMINANT_* is from a newer version
> than in contrib):
> 
> # NO_* takes precedence
> # If both WITH_* and WITHOUT_* are defined, WITHOUT_ wins unless
> # DOMINANT_* is set to "yes"
> # Otherwise WITH_* and WITHOUT_* override the default.
> and
> MK_* can be pre-set without causing an error.
> 
> The key advantage is that the mechanism is separate from the policy.
> You can thus have knobs that get set much earlier (eg during sys.mk)
> and other knobs that get set later. Ie. both sys.mk and bsd.own.mk can
> include options.mk to process options that they care about, allowing
> MK_* to be used more consistently - you could use different prefix to
> avoid overlap, but that's probably not necessary.
> 
> You can in fact have per-makefile option lists if you want (see
> contrib/bmake/Makefile) 
> 
> Thoughts?

I would be interested in having your opinion on what we did for ports.

Basically we have in the end a variable: PORT_OPTIONS that contains the the
options that are considered like "MK_*" = yes and all the one considerer as
are not it.

one can activate variables via make.conf:
OPTIONS_SET= OPT1 OPT2
OPTIONS_UNSET= OPT3

We added a couple of sugar so that options are not on yes/no but can be a
selection in a list etc.

Can be looked at here: http://svnweb.freebsd.org/ports/head/Mk/bsd.options.mk

Having it creating in the end the MK_* variables would be really realy easy.

regards,
Bapt
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20140401/2999c0f9/attachment.sig>


More information about the freebsd-arch mailing list