diff options
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/environment.py | 1 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 38 | ||||
-rw-r--r-- | mesonbuild/mesonlib.py | 2 |
3 files changed, 37 insertions, 4 deletions
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index beaff76..554d79b 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 e32e0a1..74882b2 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,6 +1848,7 @@ class MesonMain(InterpreterObject): 'version': self.version_method, 'project_name': self.project_name_method, 'get_cross_property': self.get_cross_property_method, + 'get_external_property': self.get_external_property_method, 'backend': self.backend_method, }) @@ -2017,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] @@ -2031,6 +2035,34 @@ class MesonMain(InterpreterObject): return args[1] raise InterpreterException('Unknown cross property: %s.' % propname) + @noArgsFlattening + @permittedKwargs({'native'}) + @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] + if not isinstance(propname, str): + raise InterpreterException('Property name must be string.') + + 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 | diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 85d883b..891e7a1 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. |