Introduce <opt>_IMPLIES and <opt>_PREVENTS to register dependencies, or

conflicts, between options.

PR:		191144
Submitted by:	adamw
Sponsored by:	Absolight
This commit is contained in:
Mathieu Arnold 2015-08-18 11:00:57 +00:00
parent 23ee2a7d62
commit bfbc1e51b7
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=394573
3 changed files with 46 additions and 1 deletions

14
CHANGES
View File

@ -10,6 +10,20 @@ in the release notes and/or placed into UPDATING.
All ports committers are allowed to commit to this file.
20150818:
AUTHOR: mat@FreeBSD.org
<opt>_IMPLIES and <opt>_PREVENTS have been introduced to register dependency,
or conflicts between options.
OPTIONS_DEFINE= FOO BAR BAZ
FOO_IMPLIES= BAR
BAZ_PREVENTS= BAR
If the FOO option is selected, the BAR option will be enabled as well. If
the BAZ and BAR options are both enabled, an error will be given.
20150817:
AUTHOR: mat@FreeBSD.org

View File

@ -96,6 +96,11 @@
# ${opt}_QMAKE_OFF When option is disabled, it will add its content to
# the QMAKE_ARGS.
#
# ${opt}_IMPLIES When opt is enabled, options named in IMPLIES will
# get enabled too.
# ${opt}_PREVENTS When opt is enabled, if any options in PREVENTS are
# also enabled, it will produce an error.
#
# ${opt}_USE= FOO=bar When option is enabled, it will enable
# USE_FOO+= bar
# If you need more than one option, you can do
@ -366,6 +371,14 @@ PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
.endfor
## Enable options implied by other options
# _PREVENTS is handled in bsd.port.mk:pre-check-config
.for count in ${PORT_OPTIONS}
. for opt in ${PORT_OPTIONS}
PORT_OPTIONS+= ${${opt}_IMPLIES}
. endfor
.endfor
# Finally, add options required by slave ports
PORT_OPTIONS+= ${OPTIONS_SLAVE}

View File

@ -5019,6 +5019,18 @@ OPTIONS_WRONG_MULTI+= ${multi}
. undef OPTNOCHECK
.endfor
.undef multi
.for opt in ${PORT_OPTIONS}
. for conflict in ${${opt}_PREVENTS}
. if ${PORT_OPTIONS:M${conflict}}
. if empty(OPTIONS_WRONG_PREVENTS:M${opt})
OPTIONS_WRONG_PREVENTS+= ${opt}
. endif
OPTIONS_WRONG_PREVENTS_${opt}+= ${conflict}
. endif
. endfor
.endfor
.undef conflict
.undef opt
.endif #pre-check-config
@ -5033,7 +5045,13 @@ _check-config: pre-check-config
.for radio in ${OPTIONS_WRONG_RADIO}
@${ECHO_MSG} "====> You cannot select multiple options from the ${radio} radio"
.endfor
.if !empty(OPTIONS_WRONG_MULTI) || !empty(OPTIONS_WRONG_SINGLE) || !empty(OPTIONS_WRONG_RADIO)
.if defined(OPTIONS_WRONG_PREVENTS)
@${ECHO_MSG} "====> Two or more enabled options conflict with each other"
. for prevents in ${OPTIONS_WRONG_PREVENTS}
@${ECHO_MSG} "=====> Option ${prevents} conflicts with ${OPTIONS_WRONG_PREVENTS_${prevents}} (select only one)"
. endfor
.endif
.if !empty(OPTIONS_WRONG_MULTI) || !empty(OPTIONS_WRONG_SINGLE) || !empty(OPTIONS_WRONG_RADIO) || !empty(OPTIONS_WRONG_PREVENTS)
_CHECK_CONFIG_ERROR= true
.endif
.endif # _check-config