Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 1 Sep 2023 16:54:53 GMT
From:      Brooks Davis <brooks@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: ce5fa47cf02a - main - share/mk: support for "single" group options
Message-ID:  <202309011654.381GsraB070587@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=ce5fa47cf02ae97844a826d967d122cc8171dd58

commit ce5fa47cf02ae97844a826d967d122cc8171dd58
Author:     Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2023-09-01 16:41:07 +0000
Commit:     Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2023-09-01 16:52:28 +0000

    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
---
 share/mk/bsd.mkopt.mk | 38 +++++++++++++++++++++++++++++++++++++-
 sys/conf/kern.opts.mk | 27 +++++++++++++++++++++++++++
 2 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/share/mk/bsd.mkopt.mk b/share/mk/bsd.mkopt.mk
index 7d43e91b042d..043a41212064 100644
--- a/share/mk/bsd.mkopt.mk
+++ b/share/mk/bsd.mkopt.mk
@@ -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
diff --git a/sys/conf/kern.opts.mk b/sys/conf/kern.opts.mk
index 178a4db61cb2..bad5e218a5b0 100644
--- a/sys/conf/kern.opts.mk
+++ b/sys/conf/kern.opts.mk
@@ -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.
 
 #



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202309011654.381GsraB070587>