[PATCH] Proposal for a new option framework

David Demelier demelier.david at gmail.com
Fri Feb 11 14:02:34 UTC 2011


On 17/11/2010 15:58, Baptiste Daroussin wrote:
> Hi all,
>
> I'd like to expose you a new proposal for the framework option.
>
> First the problem with the actual situation.
> the option framework has some problems :
> - for a given option we have two variable : WITH_OPT WITHOUT_OPT only
> having to check one will be great.
> - the option framework isn't consistent : if you set a WITH_BLA in
> /etc/make.conf, make config doesn't mind about it for example.
>
> So here is my proposal and a patch that implements it :
>
> for porters :
> 3 types of options : simple, group and list
> - simple options are the same as the current options (ie user can
> activate what ever they wants)
> - group options are options where at least one has to be set (1-N)
> - list options are options where only one has to be set and only one
> can be set (exclusive options)
>
> a maintainer can defined them it the ports and some can be defined system wide.
>
> every options can have a description but this is not mandatory.
>
> maintainer can set default options (DEFAULT_OPTS) and remove global
> options that the ports doesn't support yet OPTS_RM.
>
> in a ports how to define them like this
>
> OPTS= OPT1 OPT2 OPT3
>
> OPTS_GROUP= GRP1 GRP2
> OPTS_GROUP_GRP1= OPT4 OPT5
> OPTS_GROUP_GRP2= OPT6 OPT7
>
> OPTS_LIST= LIST1
> OPTS_LIST_LIST1= OPT8 OTP9 OPT10
>
>
> DEFAULT_OPTS= OPT2 OPT3 OPT9 OPT7 OPT8 OPT4
> OPTS_RM= NLS NOPORTDOCS
>
> to define a desciption for a given option :
> OPT1_DESC= "Description of my option"
>
> make showoptions will present all the options and their descriptions :
>
> ===>  The following configuration options are available:
> OPT1=off: Description of my option
> OPT2=on
> OPT3=on
> ====>  Options available for the group GRP1: you have to choose at
> least one of them
> OPT4=on
> OPT5=off
> ====>  Options available for the group GRP2: you have to choose at
> least one of them
> OPT6=off
> OPT7=on
> ====>  Options available for the group LIST1: you have to select only one of them
> OPT8=on
> OPT9=off
> OPT10=off
>
> a user can set in make.conf global options for the whole ports :
> OPTS_SET= OPT1 OPT3
> of unset them system wide
> OPTS_UNSET= OPT10 OPT15
>
> per port options can be specified in two ways for a given ports :
> through /etc/make.conf:
> ${UNIQUENAME}_OPTS_SET= OPT1
>
> ${UNIQUENAME}_OPTS_UNSET= OPT2
>
> for zsh it would be:
> zsh_OPTS_SET= OPT1
> zsh_OPTS_UNSET= OPT2
>
> through /var/db/ports/${UNIQUENAME}/opts (in case we add a dialog like feature)
> OPTS_SET= OPT1
> OPTS_UNSET= OPT2
>
> The framework check how the options are set in the following way :
> 1/ set the default options has wanted by the maintainer
> 2/ override them using the system wide options (OPTS_(UN)SET)
> 3/ the per ports defined options in /var/db/ports/${UNIQUENAME}/opts
> 4/ the per ports defined options in make.conf ${UNIQUENAME}_OPTS_(UN)SET
>
> We can maintain some generic options descriptions like it is done in the KNOBS
>
> for the maintainer to check if an option is set or not, we do not need
> to choose between WITHOUT ou WITH option the options as to be checked
> that way:
> if !empty(PORTS_OPTS:MOPT1)
> @${ECHO_CMD} " the options OPT1 is set"
> .else
> @${ECHO_CMD} "the options OPT2 is not set"
> .endif
>
> the framework check (check-options) for the consitency for the options
> set (exclusive options and 1-n option)
>
> In the patch nothing is activated by default (user has make
> check-options himself currently)
> there is nothing to create /var/db/ports/${UNIQUENAME}/opts it don't
> really like having a gui for that but I understand some prefers and I
> am checking how to make dialog4ports able to do the job.
>
> The new framework can live with the old one
> The implementation is really really simple.
> In the implementation I added 3 global options: NOPORTDOCS NOPORTDATA
> NOPORTEXAMPLES
> Variable names are temporary if you have better ideas :)
>
> I think it is quite easy to extend to add features later.
>
> http://people.freebsd.org/~bapt/ports-newopts.patch
>

This is the best thing that could happens to the FreeBSD ports. Now the 
ports OPTIONS framework lacks a lot of feature. We can't select "only 
one" option in a list of (like pkgsrc does) and this new framework may 
provides this feature !

The group feature may helps in a backend dependency too!

I really like this new framework and hope will be bring to ports before 
2026 :-).

Thanks bapt.

-- 
David Demelier


More information about the freebsd-ports mailing list