mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-24 03:37:16 +00:00
share/mk: support for "single" group options
Support group options where 1 of n values will be selected (or a default value will be used). After processing, an OPT_FOO will be set to one value from __FOO_OPTIONS for each FOO in __SINGLE_OPTIONS. If the user sets FOO that value will be used, otherwise __FOO_DEFAULT will be used. Options that don't work an a particular system can be remapped to an alternative using BROKEN_SINGLE_OPTIONS which can be set to a list of 3-tuples of the form: OPTION broken_value replacement_value This is somewhat inspired by OPTIONS_SINGLE from ports, but the structure is quite different with a per-option variable in the style of MK_FOO={yes,no}. Reviewed by: imp, emaste Differential Revision: https://reviews.freebsd.org/D41659
This commit is contained in:
parent
565c887a77
commit
ce5fa47cf0
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
#
|
||||
# Generic mechanism to deal with WITH and WITHOUT options and turn
|
||||
# them into MK_ options.
|
||||
# them into MK_ options. Also turn group options into OPT_ options.
|
||||
#
|
||||
# For each option FOO in __DEFAULT_YES_OPTIONS, MK_FOO is set to
|
||||
# "yes", unless WITHOUT_FOO is defined, in which case it is set to
|
||||
|
@ -31,6 +31,15 @@
|
|||
# system should use MK_FOO={yes,no} when it needs to override the
|
||||
# user's desires or default behavior.
|
||||
#
|
||||
# For each option in __SINGLE_OPTIONS, OPT_FOO is set to FOO if
|
||||
# defined and __FOO_DEFAULT if not. Valid values for FOO are specified
|
||||
# by __FOO_OPTIONS.
|
||||
#
|
||||
# Other parts of the build system will set BROKEN_SINGLE_OPTIONS to a
|
||||
# list of 3-tuples of the form: "OPTION broken_value replacment_value".
|
||||
# This will not be unset before returning. Clients are expected to
|
||||
# always += this variable.
|
||||
#
|
||||
|
||||
#
|
||||
# MK_* options which default to "yes".
|
||||
|
@ -93,6 +102,33 @@ MK_${var}:= no
|
|||
MK_${var}:= no
|
||||
.endfor
|
||||
|
||||
#
|
||||
# Group options set an OPT_FOO variable for each option.
|
||||
#
|
||||
.for opt in ${__SINGLE_OPTIONS}
|
||||
.if !defined(__${opt}_OPTIONS) || empty(__${opt}_OPTIONS)
|
||||
.error __${opt}_OPTIONS undefined or empty
|
||||
.endif
|
||||
.if !defined(__${opt}_DEFAULT) || empty(__${opt}_DEFAULT)
|
||||
.error __${opt}_DEFAULT undefined or empty
|
||||
.endif
|
||||
.if defined(${opt})
|
||||
OPT_${opt}:= ${${opt}}
|
||||
.else
|
||||
OPT_${opt}:= ${__${opt}_DEFAULT}
|
||||
.endif
|
||||
.if empty(OPT_${opt}) || ${__${opt}_OPTIONS:M${OPT_${opt}}} != ${OPT_${opt}}
|
||||
.error Invalid option OPT_${opt} (${OPT_${opt}}), must be one of: ${__${opt}_OPTIONS}
|
||||
.endif
|
||||
.endfor
|
||||
.undef __SINGLE_OPTIONS
|
||||
|
||||
.for opt val rep in ${BROKEN_SINGLE_OPTIONS}
|
||||
.if ${OPT_${opt}} == ${val}
|
||||
OPT_${opt}:= ${rep}
|
||||
.endif
|
||||
.endfor
|
||||
|
||||
.for vv in ${__DEFAULT_DEPENDENT_OPTIONS}
|
||||
.if defined(WITH_${vv:H}) && defined(WITHOUT_${vv:H})
|
||||
MK_${vv:H}?= no
|
||||
|
|
|
@ -141,6 +141,33 @@ MK_${var}:= no
|
|||
MK_${var}:= no
|
||||
.endfor
|
||||
.undef BROKEN_OPTIONS
|
||||
|
||||
#
|
||||
# Group options set an OPT_FOO variable for each option.
|
||||
#
|
||||
.for opt in ${__SINGLE_OPTIONS}
|
||||
.if !defined(__${opt}_OPTIONS) || empty(__${opt}_OPTIONS)
|
||||
.error __${opt}_OPTIONS not defined or empty
|
||||
.endif
|
||||
.if !defined(__${opt}_DEFAULT) || empty(__${opt}_DEFAULT)
|
||||
.error __${opt}_DEFAULT undefined or empty
|
||||
.endif
|
||||
.if defined(${opt})
|
||||
OPT_${opt}:= ${${opt}}
|
||||
.else
|
||||
OPT_${opt}:= ${__${opt}_DEFAULT}
|
||||
.endif
|
||||
.if empty(OPT_${opt}) || ${__${opt}_OPTIONS:M${OPT_${opt}}} != ${OPT_${opt}}
|
||||
.error Invalid option OPT_${opt} (${OPT_${opt}}), must be one of: ${__${opt}_OPTIONS}
|
||||
.endif
|
||||
.endfor
|
||||
.undef __SINGLE_OPTIONS
|
||||
|
||||
.for opt val rep in ${BROKEN_SINGLE_OPTIONS}
|
||||
.if ${OPT_${opt}} == ${val}
|
||||
OPT_${opt}:= ${rep}
|
||||
.endif
|
||||
.endfor
|
||||
#end of bsd.mkopt.mk expanded inline.
|
||||
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue