interpreter: add fallback argument to subproject.get_variable()

pull/5437/head
Mathieu Duponchelle 6 years ago committed by Jussi Pakkanen
parent 20eb948b97
commit 12a82e763d
  1. 6
      docs/markdown/Reference-manual.md
  2. 13
      docs/markdown/snippets/add_fallback_argument_to_subproject_get_variable.md
  3. 19
      mesonbuild/interpreter.py
  4. 5
      test cases/common/46 subproject/meson.build

@ -2288,10 +2288,14 @@ opaque object representing it.
- `found()` *(added 0.48.0)* which returns whether the subproject was
successfully setup
- `get_variable(name)` fetches the specified variable from inside the
- `get_variable(name, fallback)` fetches the specified variable from inside the
subproject. This is useful to, for instance, get a [declared
dependency](#declare_dependency) from the [subproject](Subprojects.md).
If the variable does not exist, the variable `fallback` is returned.
If a fallback is not specified, then attempting to read a non-existing
variable will cause a fatal error.
### `run result` object
This object encapsulates the result of trying to compile and run a

@ -0,0 +1,13 @@
---
short-description: Add fallback argument to subproject.get_variable()
...
## subproject.get_variable() now accepts a `fallback` argument
Similar to `get_variable`, a fallback argument can now be passed to
`subproject.get_variable()`, it will be returned if the requested
variable name did not exist.
``` meson
var = subproject.get_variable('does-not-exist', 'fallback-value')
```

@ -917,18 +917,25 @@ class SubprojectHolder(InterpreterObject, ObjectHolder):
return self.held_object is not None
@permittedKwargs({})
@noArgsFlattening
def get_variable_method(self, args, kwargs):
if len(args) != 1:
raise InterpreterException('Get_variable takes one argument.')
if len(args) < 1 or len(args) > 2:
raise InterpreterException('Get_variable takes one or two arguments.')
if not self.found():
raise InterpreterException('Subproject "%s/%s" disabled can\'t get_variable on it.' % (
self.subproject_dir, self.name))
varname = args[0]
if not isinstance(varname, str):
raise InterpreterException('Get_variable takes a string argument.')
if varname not in self.held_object.variables:
raise InvalidArguments('Requested variable "{0}" not found.'.format(varname))
return self.held_object.variables[varname]
raise InterpreterException('Get_variable first argument must be a string.')
try:
return self.held_object.variables[varname]
except KeyError:
pass
if len(args) == 2:
return args[1]
raise InvalidArguments('Requested variable "{0}" not found.'.format(varname))
header_permitted_kwargs = set([
'required',

@ -21,3 +21,8 @@ e = executable('user', 'user.c', include_directories : inc, link_with : lib, ins
test('subdirtest', e)
meson.install_dependency_manifest('share/sublib/sublib.depmf')
unknown_var = sub.get_variable('does-not-exist', [])
if unknown_var != []
error ('unexpetced fallback value for subproject.get_variable()')
endif

Loading…
Cancel
Save