From c2e6565029779b749dc3423291524115af1b2bd7 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 10 Nov 2019 09:26:55 -0500 Subject: 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 --- mesonbuild/interpreter.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'mesonbuild/interpreter.py') diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index e32e0a1..5e58b0e 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 | -- cgit v1.1 From 554d35c3f3eb8710d1a265dccd173cbf653258bf Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Wed, 13 Nov 2019 16:05:00 -0500 Subject: add get_external_property to replace get_cross_property --- mesonbuild/interpreter.py | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) (limited to 'mesonbuild/interpreter.py') diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 5e58b0e..df23b87 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -35,8 +35,11 @@ from .modules import ModuleReturnValue from .cmake import CMakeInterpreter from pathlib import Path, PurePath -import os, shutil, uuid -import re, shlex +import os +import shutil +import uuid +import re +import shlex import subprocess import collections from itertools import chain @@ -1845,7 +1848,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, + 'get_external_property': self.get_external_property_method, 'backend': self.backend_method, }) @@ -2018,7 +2021,7 @@ class MesonMain(InterpreterObject): @noArgsFlattening @permittedKwargs({}) - def get_cross_property_method(self, args, kwargs): + def get_cross_property_method(self, args, kwargs) -> str: if len(args) < 1 or len(args) > 2: raise InterpreterException('Must have one or two arguments.') propname = args[0] @@ -2033,21 +2036,33 @@ class MesonMain(InterpreterObject): raise InterpreterException('Unknown cross property: %s.' % propname) @noArgsFlattening - @permittedKwargs({}) - def get_native_property_method(self, args, kwargs): + @permittedKwargs({'native'}) + @FeatureNew('meson.get_external_property', '0.53.0') + def get_external_property_method(self, args: Sequence[str], kwargs: dict) -> str: if len(args) < 1 or len(args) > 2: - raise InterpreterException('Must have one or two arguments.') + raise InterpreterException('Must have one or two positional 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) + def _get_native() -> str: + 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) + if 'native' in kwargs: + if kwargs['native']: + return _get_native() + else: + return self.get_cross_property_method(args, {}) + else: # native: not specified + if self.build.environment.is_cross_build(): + return self.get_cross_property_method(args, kwargs) + else: + return _get_native() known_library_kwargs = ( build.known_shlib_kwargs | -- cgit v1.1 From a4e4d2e75a25d4254e13ce0d6e3486f87e2d027a Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Wed, 5 Feb 2020 13:26:35 -0500 Subject: doc --- mesonbuild/interpreter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mesonbuild/interpreter.py') diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index df23b87..74882b2 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -2037,8 +2037,8 @@ class MesonMain(InterpreterObject): @noArgsFlattening @permittedKwargs({'native'}) - @FeatureNew('meson.get_external_property', '0.53.0') - def get_external_property_method(self, args: Sequence[str], kwargs: dict) -> str: + @FeatureNew('meson.get_external_property', '0.54.0') + def get_external_property_method(self, args: T.Sequence[str], kwargs: dict) -> str: if len(args) < 1 or len(args) > 2: raise InterpreterException('Must have one or two positional arguments.') propname = args[0] -- cgit v1.1