summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
authordillo <dillo@pkgsrc.org>2005-07-26 09:00:42 +0000
committerdillo <dillo@pkgsrc.org>2005-07-26 09:00:42 +0000
commita6f3882d40a9ba8018a0bbf8580e50f3806dce20 (patch)
treecf1623a1c3195cf1068a45a82c00c5fc78acd4a6 /mk
parent1b312006162f9348d867ea18bc282608b000c462 (diff)
downloadpkgsrc-a6f3882d40a9ba8018a0bbf8580e50f3806dce20.tar.gz
Add support for sets of options where at least one option from each
set must be selected, requested and reviewed by wiz: PKG_OPTIONS_NONEMPTY_SETS This is a list of names of sets of options. At least one option from each set must be selected. The options in each set are listed in PKG_OPTIONS_SET.<setname>. Options from the sets will be automatically added to PKG_SUPPORTED_OPTIONS.
Diffstat (limited to 'mk')
-rw-r--r--mk/bsd.options.mk63
1 files changed, 53 insertions, 10 deletions
diff --git a/mk/bsd.options.mk b/mk/bsd.options.mk
index 3a1efc8f975..2920d78a2e6 100644
--- a/mk/bsd.options.mk
+++ b/mk/bsd.options.mk
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.options.mk,v 1.44 2005/07/19 10:30:22 dillo Exp $
+# $NetBSD: bsd.options.mk,v 1.45 2005/07/26 09:00:42 dillo Exp $
#
# This Makefile fragment provides boilerplate code for standard naming
# conventions for handling per-package build options.
@@ -16,7 +16,7 @@
# options specifically for this package.
#
# PKG_OPTIONS_OPTIONAL_GROUPS
-# This is a list names of groups of mutually exclusive
+# This is a list of names of groups of mutually exclusive
# options. The options in each group are listed in
# PKG_OPTIONS_GROUP.<groupname>. The most specific
# setting of any option from the group takes precedence
@@ -29,6 +29,13 @@
# the packages will fail if no option from the group
# is selected.
#
+# PKG_OPTIONS_NONEMPTY_SETS
+# This is a list of names of sets of options. At
+# least one option from each set must be selected.
+# The options in each set are listed in
+# PKG_OPTIONS_SET.<setname>. Options from the sets
+# will be automatically added to PKG_SUPPORTED_OPTIONS.
+#
# PKG_SUGGESTED_OPTIONS (defaults to empty)
# This is a list of build options which are enabled by default.
#
@@ -52,10 +59,10 @@
# A list of warnings about deprecated variables or
# options used, and what to use instead.
#
-# If none of PKG_SUPPORTED_OPTIONS, PKG_OPTIONS_OPTIONAL_GROUPS,
-# and PKG_OPTIONS_REQUIRED_GROUPS are defined, PKG_OPTIONS is
-# set to the empty list and the package is otherwise treated as
-# not using the options framework.
+# If none of PKG_SUPPORTED_OPTIONS, PKG_OPTIONS_OPTIONAL_GROUPS,
+# PKG_OPTIONS_REQUIRED_GROUPS, and PKG_OPTIONS_NONEMPTY_SETS are
+# defined, PKG_OPTIONS is set to the empty list and the package
+# is otherwise treated as not using the options framework.
#
#
# Optionally, the user may define the following variables in /etc/mk.conf:
@@ -145,7 +152,7 @@ PKG_OPTIONS= # empty
# Check for variable definitions required before including this file.
.if !defined(PKG_OPTIONS_VAR)
PKG_FAIL_REASON+= "bsd.options.mk: PKG_OPTIONS_VAR is not defined."
-.elif !defined(PKG_SUPPORTED_OPTIONS) && !defined(PKG_OPTIONS_OPTIONAL_GROUPS) && !defined(PKG_OPTIONS_REQUIRED_GROUPS)
+.elif !defined(PKG_SUPPORTED_OPTIONS) && !defined(PKG_OPTIONS_OPTIONAL_GROUPS) && !defined(PKG_OPTIONS_REQUIRED_GROUPS) && !defined(PKG_OPTIONS_NONEMPTY_SETS)
# no supported options: set PKG_OPTIONS to empty and skip rest of file
PKG_OPTIONS= #empty
.else # process the rest of the file
@@ -155,6 +162,9 @@ PKG_OPTIONS= #empty
#
.for _grp_ in ${PKG_OPTIONS_OPTIONAL_GROUPS} ${PKG_OPTIONS_REQUIRED_GROUPS}
_PKG_OPTIONS_GROUP_STACK.${_grp_}:=#empty
+.if !defined(PKT_OPTION_GROUP.${_grp_}) || empty(PKT_OPTION_GROUP.${_grp_})
+PKG_FAIL_REASON:="bsd.options.mk: PKG_OPTIONS_GROUP."${_grp_:Q}" must be non-empty."
+.endif
. for _opt_ in ${PKG_OPTIONS_GROUP.${_grp_}}
PKG_SUPPORTED_OPTIONS+= ${_opt_}
_PKG_OPTIONS_GROUP_MAP.${_opt_}=${_grp_}
@@ -162,12 +172,26 @@ _PKG_OPTIONS_GROUP_MAP.${_opt_}=${_grp_}
.endfor
#
+# add options from sets to PKG_SUPPORTED_OPTIONS
+#
+_PKG_OPTIONS_ALL_SETS:=#empty
+.for _set_ in ${PKG_OPTIONS_NONEMPTY_SETS}
+. if !defined(PKT_OPTIONS_SET.${_set_}) || empty(PKT_OPTIONS_SET.${_set_})
+PKG_FAIL_REASON:="bsd.options.mk: PKG_OPTIONS_SET."${_set_:Q}" must be non-empty."
+. endif
+. for _opt_ in ${PKG_OPTIONS_SET.${_set_}}
+PKG_SUPPORTED_OPTIONS+= ${_opt_}
+_PKG_OPTIONS_ALL_SETS+= ${_opt_}
+. endfor
+.endfor
+
+#
# include deprecated variable to options mapping
#
.include "${.CURDIR}/../../mk/defaults/obsolete.mk"
#
-# place options imlied by legacy variables in PKG_LEGACY_OPTIONS
+# place options implied by legacy variables in PKG_LEGACY_OPTIONS
#
.for _m_ in ${PKG_OPTIONS_LEGACY_VARS}
_var_:= ${_m_:C/:.*//}
@@ -278,6 +302,19 @@ PKG_OPTIONS:= ${PKG_OPTIONS} ${_opt_}
.endfor
.undef _opt_
+.for _set_ in ${PKG_OPTIONS_NONEMPTY_SETS}
+_ISEMPTY:=true
+. for _opt_ in ${PKG_OPTIONS_SET.${_set_}
+. if !empty(PKG_OPTIONS:M${_opt_})
+_ISEMPTY:=false
+. endif
+. endfor
+. if ${_ISEMPTY} == "true"
+PKG_FAIL_REASON:="At least one of the following options must be selected: "${PKG_OPTIONS_SET.${_set_}:O:u:Q}
+. endif
+.endfor
+.undef _ISEMPTY
+
.if !empty(_OPTIONS_UNSUPPORTED)
PKG_FAIL_REASON:= "The following selected options are not supported: "${_OPTIONS_UNSUPPORTED:O:u:Q}"."
.endif
@@ -304,9 +341,9 @@ _PKG_OPTIONS_WORDWRAP_FILTER= \
.PHONY: show-options
show-options:
- @${ECHO} The following options are supported by this package:
+ @${ECHO} Any of the following general options may be selected:
.for _opt_ in ${PKG_SUPPORTED_OPTIONS:O}
-. if !defined(_PKG_OPTIONS_GROUP_MAP.${_opt_})
+. if !defined(_PKG_OPTIONS_GROUP_MAP.${_opt_}) && empty(_PKG_OPTIONS_ALL_SETS:M${_opt_})
@${ECHO} " "${_opt_:Q}" "`${SED} -n "s/^"${_opt_:Q}" //p" ../../mk/defaults/options.description`
. endif
.endfor
@@ -322,6 +359,12 @@ show-options:
@${ECHO} " "${_opt_:Q}" "`${SED} -n "s/^"${_opt_:Q}" //p" ../../mk/defaults/options.description`
. endfor
.endfor
+.for _set_ in ${PKG_OPTIONS_NONEMPTY_SETS}
+ @${ECHO} "At least one of the following "${_set_:Q}" options must be selected:"
+. for _opt_ in ${PKG_OPTIONS_SET.${_set_}:O}
+ @${ECHO} " "${_opt_:Q}" "`${SED} -n "s/^"${_opt_:Q}" //p" ../../mk/defaults/options.description`
+. endfor
+.endfor
@${ECHO}
@${ECHO} "These options are enabled by default: "${PKG_SUGGESTED_OPTIONS:O:Q}
@${ECHO} "These options are currently enabled: "${PKG_OPTIONS:O:Q}