add meson.get_native_property for native files

This allows Meson native-file [properties] to be used.
This avoids the need to call meson from a script file or have a
long command line invocation of `meson setup`

The method meson.get_native_property('prop', 'fallback') is added.
The native file can contain properties like

```
[properties]
myprop1 = 'foo'
mydir2 = 'lib/custom'
```

Then from within `meson.build`

```meson
x1 = meson.get_native_property('myprop1')

thedir = meson.get_native_property('mydir2', 'libs')
```

fallback values are optional
pull/6161/head
Michael Hirsch, Ph.D 5 years ago
parent dc8d241583
commit c2e6565029
No known key found for this signature in database
GPG Key ID: 6D23CDADAB0294F9
  1. 16
      docs/markdown/snippets/native_property.md
  2. 1
      mesonbuild/environment.py
  3. 17
      mesonbuild/interpreter.py
  4. 2
      mesonbuild/mesonlib.py

@ -0,0 +1,16 @@
## Native file properties
As of Meson 0.53.0, the `--native-file foo.txt` can contain:
* binaries
* paths
* properties
which are defined and used the same way as in cross files.
The `properties` are new for Meson 0.53.0, and are read like:
```meson
x = meson.get_native_property('foobar', 'foo')
```
where `foobar` is the property name, and the optional `foo` is the fallback string value.

@ -538,6 +538,7 @@ class Environment:
coredata.load_configs(self.coredata.config_files))
binaries.build = BinaryTable(config.get('binaries', {}))
paths.build = Directories(**config.get('paths', {}))
properties.build = Properties(config.get('properties', {}))
## Read in cross file(s) to override host machine configuration

@ -1845,6 +1845,7 @@ class MesonMain(InterpreterObject):
'version': self.version_method,
'project_name': self.project_name_method,
'get_cross_property': self.get_cross_property_method,
'get_native_property': self.get_native_property_method,
'backend': self.backend_method,
})
@ -2031,6 +2032,22 @@ class MesonMain(InterpreterObject):
return args[1]
raise InterpreterException('Unknown cross property: %s.' % propname)
@noArgsFlattening
@permittedKwargs({})
def get_native_property_method(self, args, kwargs):
if len(args) < 1 or len(args) > 2:
raise InterpreterException('Must have one or two arguments.')
propname = args[0]
if not isinstance(propname, str):
raise InterpreterException('Property name must be string.')
try:
props = self.interpreter.environment.properties.build
return props[propname]
except Exception:
if len(args) == 2:
return args[1]
raise InterpreterException('Unknown native property: %s.' % propname)
known_library_kwargs = (
build.known_shlib_kwargs |

@ -1,4 +1,4 @@
# Copyright 2012-2015 The Meson development team
# Copyright 2012-2019 The Meson development team
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.

Loading…
Cancel
Save