diff options
author | Iñigo MartÃnez <inigomartinez@gmail.com> | 2017-11-20 22:00:25 +0100 |
---|---|---|
committer | Iñigo MartÃnez <inigomartinez@gmail.com> | 2017-11-20 22:00:25 +0100 |
commit | 935ca128220806911821c5694e7856c0d343806a (patch) | |
tree | 316f10425bf0b1a9f24057370992d4e1bdae6662 | |
parent | eba69723064325a8b7f25f5f6a099ebd60fa71e8 (diff) | |
download | meson-935ca128220806911821c5694e7856c0d343806a.zip meson-935ca128220806911821c5694e7856c0d343806a.tar.gz meson-935ca128220806911821c5694e7856c0d343806a.tar.bz2 |
dependencies: Allow pkg-config to define variables
pkg-config enables to define variables by using the define-variable
option. This allows some packages to redefine relative paths, so
files can be installed in the same relative paths but under prefix.
-rw-r--r-- | mesonbuild/dependencies/base.py | 18 | ||||
-rw-r--r-- | mesonbuild/dependencies/misc.py | 6 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 2 | ||||
-rw-r--r-- | test cases/linuxlike/1 pkg-config/meson.build | 2 |
4 files changed, 21 insertions, 7 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py index fcc74b5..38babfc 100644 --- a/mesonbuild/dependencies/base.py +++ b/mesonbuild/dependencies/base.py @@ -117,7 +117,7 @@ class Dependency: def need_threads(self): return False - def get_pkgconfig_variable(self, variable_name): + def get_pkgconfig_variable(self, variable_name, kwargs): raise NotImplementedError('{!r} is not a pkgconfig dependency'.format(self.name)) @@ -316,8 +316,20 @@ class PkgConfigDependency(ExternalDependency): self.is_libtool = True self.link_args.append(lib) - def get_pkgconfig_variable(self, variable_name): - ret, out = self._call_pkgbin(['--variable=' + variable_name, self.name]) + def get_pkgconfig_variable(self, variable_name, kwargs): + options = ['--variable=' + variable_name, self.name] + + if 'define_variable' in kwargs: + definition = kwargs.get('define_variable', []) + if not isinstance(definition, list): + raise MesonException('define_variable takes a list') + + if len(definition) != 2 or not all(isinstance(i, str) for i in definition): + raise MesonException('define_variable must be made up of 2 strings for VARIABLENAME and VARIABLEVALUE') + + options = ['--define-variable=' + '='.join(definition)] + options + + ret, out = self._call_pkgbin(options) variable = '' if ret != 0: if self.required: diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index 4a023e4..17f4b7f 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -677,11 +677,11 @@ class Python3Dependency(ExternalDependency): else: return [DependencyMethods.PKGCONFIG] - def get_pkgconfig_variable(self, variable_name): + def get_pkgconfig_variable(self, variable_name, kwargs): if self.pkgdep: - return self.pkgdep.get_pkgconfig_variable(variable_name) + return self.pkgdep.get_pkgconfig_variable(variable_name, kwargs) else: - return super().get_pkgconfig_variable(variable_name) + return super().get_pkgconfig_variable(variable_name, kwargs) class PcapDependency(ExternalDependency): diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index fbf9a21..41976af 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -294,7 +294,7 @@ class DependencyHolder(InterpreterObject, ObjectHolder): varname = args[0] if not isinstance(varname, str): raise InterpreterException('Variable name must be a string.') - return self.held_object.get_pkgconfig_variable(varname) + return self.held_object.get_pkgconfig_variable(varname, kwargs) class InternalDependencyHolder(InterpreterObject, ObjectHolder): def __init__(self, dep): diff --git a/test cases/linuxlike/1 pkg-config/meson.build b/test cases/linuxlike/1 pkg-config/meson.build index 7e43821..8a4940b 100644 --- a/test cases/linuxlike/1 pkg-config/meson.build +++ b/test cases/linuxlike/1 pkg-config/meson.build @@ -17,6 +17,8 @@ test('zlibtest', exe) zprefix = dep.get_pkgconfig_variable('prefix') # Always set but we can't be sure what the value is. # pkg-config returns empty string for not defined variables assert(dep.get_pkgconfig_variable('nonexisting') == '', 'Value of unknown variable is not empty.') +# pkg-config is able to replace variables +assert(dep.get_pkgconfig_variable('includedir', define_variable: ['prefix', '/tmp']) == '/tmp/include', 'prefix variable has not been replaced.') # Test that dependencies of dependencies work. dep2 = declare_dependency(dependencies : dep) |