aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Arnold <mat@FreeBSD.org>2015-08-18 11:00:57 +0000
committerMathieu Arnold <mat@FreeBSD.org>2015-08-18 11:00:57 +0000
commitbfbc1e51b7139d49dc1522a1da94b02b732232c1 (patch)
treeef2ac534a3ac13f5ed200a8d98a2c397a0db9dc2
parent23ee2a7d628e74980199fb95b27ce242a5f718a6 (diff)
downloadports-bfbc1e51b7139d49dc1522a1da94b02b732232c1.tar.gz
ports-bfbc1e51b7139d49dc1522a1da94b02b732232c1.zip
Notes
-rw-r--r--CHANGES14
-rw-r--r--Mk/bsd.options.mk13
-rw-r--r--Mk/bsd.port.mk20
3 files changed, 46 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 76cc764a9bef..45d5a784ed9c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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
diff --git a/Mk/bsd.options.mk b/Mk/bsd.options.mk
index 797fd8d27bdb..17de9d3af059 100644
--- a/Mk/bsd.options.mk
+++ b/Mk/bsd.options.mk
@@ -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}
diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk
index b6b82fa82f99..bfcc02fd8ce9 100644
--- a/Mk/bsd.port.mk
+++ b/Mk/bsd.port.mk
@@ -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