aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-01-02 22:25:24 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2018-02-08 00:33:44 +0200
commit54d78170876e7b762aa3452faa44ec1b7cd44372 (patch)
tree7c65bb478818a90fa3d3991da4c6ca8b2c641eb2 /mesonbuild/interpreter.py
parent0204895143d4aacf143be952f962dc47e415c187 (diff)
downloadmeson-54d78170876e7b762aa3452faa44ec1b7cd44372.zip
meson-54d78170876e7b762aa3452faa44ec1b7cd44372.tar.gz
meson-54d78170876e7b762aa3452faa44ec1b7cd44372.tar.bz2
User options can "yield to" a user option of the same name in superproject. Closes ##2853.
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r--mesonbuild/interpreter.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index f68e25f..31d7616 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1768,7 +1768,7 @@ external dependencies (including libraries) must go to "dependencies".''')
def func_get_option(self, nodes, args, kwargs):
if len(args) != 1:
raise InterpreterException('Argument required for get_option.')
- optname = args[0]
+ undecorated_optname = optname = args[0]
if ':' in optname:
raise InterpreterException('''Having a colon in option name is forbidden, projects are not allowed
to directly access options of other subprojects.''')
@@ -1787,7 +1787,11 @@ to directly access options of other subprojects.''')
if not coredata.is_builtin_option(optname) and self.is_subproject():
optname = self.subproject + ':' + optname
try:
- return self.environment.coredata.user_options[optname].value
+ opt = self.environment.coredata.user_options[optname]
+ if opt.yielding and ':' in optname:
+ # If option not present in superproject, keep the original.
+ opt = self.environment.coredata.user_options.get(undecorated_optname, opt)
+ return opt.value
except KeyError:
pass
if optname.endswith('_link_args'):