diff options
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/dependencies/base.py | 14 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 10 |
2 files changed, 24 insertions, 0 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py index 84b20e7..682182c 100644 --- a/mesonbuild/dependencies/base.py +++ b/mesonbuild/dependencies/base.py @@ -132,6 +132,9 @@ class Dependency: def get_pkgconfig_variable(self, variable_name): raise NotImplementedError('{!r} is not a pkgconfig dependency'.format(self.name)) + def get_configtool_variable(self, variable_name): + raise NotImplementedError('{!r} is not a config-tool dependency'.format(self.name)) + class InternalDependency(Dependency): def __init__(self, version, incdirs, compile_args, link_args, libraries, sources, ext_deps): @@ -288,6 +291,17 @@ class ConfigToolDependency(ExternalDependency): def get_methods(self): return [DependencyMethods.AUTO, DependencyMethods.CONFIG_TOOL] + def get_configtool_variable(self, variable_name): + p, out, _ = Popen_safe([self.config, '--{}'.format(variable_name)]) + if p.returncode != 0: + if self.required: + raise DependencyException( + 'Could not get variable "{}" for dependency {}'.format( + variable_name, self.name)) + variable = out.strip() + mlog.debug('Got config-tool variable {} : {}'.format(variable_name, variable)) + return variable + class PkgConfigDependency(ExternalDependency): # The class's copy of the pkg-config path. Avoids having to search for it diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index fbf9a21..dd0e0e6 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -274,6 +274,7 @@ class DependencyHolder(InterpreterObject, ObjectHolder): 'type_name': self.type_name_method, 'version': self.version_method, 'get_pkgconfig_variable': self.pkgconfig_method, + 'get_configtool_variable': self.configtool_method, }) def type_name_method(self, args, kwargs): @@ -296,6 +297,15 @@ class DependencyHolder(InterpreterObject, ObjectHolder): raise InterpreterException('Variable name must be a string.') return self.held_object.get_pkgconfig_variable(varname) + def configtool_method(self, args, kwargs): + args = listify(args) + if len(args) != 1: + raise InterpreterException('get_configtool_variable takes exactly one argument.') + varname = args[0] + if not isinstance(varname, str): + raise InterpreterException('Variable name must be a string.') + return self.held_object.get_configtool_variable(varname) + class InternalDependencyHolder(InterpreterObject, ObjectHolder): def __init__(self, dep): InterpreterObject.__init__(self) |