diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2018-01-02 22:25:24 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2018-02-08 00:33:44 +0200 |
commit | 54d78170876e7b762aa3452faa44ec1b7cd44372 (patch) | |
tree | 7c65bb478818a90fa3d3991da4c6ca8b2c641eb2 /mesonbuild/interpreter.py | |
parent | 0204895143d4aacf143be952f962dc47e415c187 (diff) | |
download | meson-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.py | 8 |
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'): |