From c2e6565029779b749dc3423291524115af1b2bd7 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 10 Nov 2019 09:26:55 -0500 Subject: [PATCH] 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 --- docs/markdown/snippets/native_property.md | 16 ++++++++++++++++ mesonbuild/environment.py | 1 + mesonbuild/interpreter.py | 17 +++++++++++++++++ mesonbuild/mesonlib.py | 2 +- 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 docs/markdown/snippets/native_property.md diff --git a/docs/markdown/snippets/native_property.md b/docs/markdown/snippets/native_property.md new file mode 100644 index 000000000..6c49e8040 --- /dev/null +++ b/docs/markdown/snippets/native_property.md @@ -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. \ No newline at end of file diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index beaff767c..554d79b4f 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -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 diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index e32e0a1d9..5e58b0e08 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -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 | diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 85d883bef..891e7a12e 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -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.