From ff0551c58b185c769ace0d8747a0e8a2985a1412 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sat, 15 Oct 2016 15:21:55 +0300 Subject: [PATCH] Can query pkg-config variables from the system. Closes #726. --- mesonbuild/dependencies.py | 8 +++++--- mesonbuild/interpreter.py | 14 +++++++++++++- mesonbuild/modules/gnome.py | 4 ++-- test cases/linuxlike/1 pkg-config/meson.build | 4 ++++ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py index 6a4c32c7a2b5..6f7af5842c12 100644 --- a/mesonbuild/dependencies.py +++ b/mesonbuild/dependencies.py @@ -59,6 +59,9 @@ def get_exe_args(self): def need_threads(self): return False + def get_pkgconfig_variable(self, variable_name): + raise MesonException('Tried to get a pkg-config variable from a non-pkgconfig dependency.') + class InternalDependency(Dependency): def __init__(self, version, incdirs, compile_args, link_args, libraries, sources, ext_deps): super().__init__() @@ -186,7 +189,7 @@ def _set_libs(self): self.is_libtool = True self.libs.append(lib) - def get_variable(self, variable_name): + def get_pkgconfig_variable(self, variable_name): ret, out = self._call_pkgbin(['--variable=' + variable_name, self.name]) variable = '' if ret != 0: @@ -195,8 +198,7 @@ def get_variable(self, variable_name): (self.type_string, self.name)) else: variable = out.strip() - mlog.debug('return of subprocess : %s' % variable) - + mlog.debug('Got pkgconfig variable %s : %s' % (variable_name, variable)) return variable def get_modversion(self): diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index e486ee980939..455c9302c0d2 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -278,7 +278,9 @@ def __init__(self, dep): InterpreterObject.__init__(self) self.held_object = dep self.methods.update({'found' : self.found_method, - 'version': self.version_method}) + 'version': self.version_method, + 'get_pkgconfig_variable': self.pkgconfig_method, + }) def found_method(self, args, kwargs): return self.held_object.found() @@ -286,6 +288,16 @@ def found_method(self, args, kwargs): def version_method(self, args, kwargs): return self.held_object.get_version() + def pkgconfig_method(self, args, kwargs): + if not isinstance(args, list): + args = [args] + if len(args) != 1: + raise InterpreterException('get_pkgconfig_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_pkgconfig_variable(varname) + class InternalDependencyHolder(InterpreterObject): def __init__(self, dep): InterpreterObject.__init__(self) diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index be111ea7dd60..a5181d3236f5 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -180,7 +180,7 @@ def get_dependencies_flags(self, deps, state, depends=None): ldflags.update([lib]) if isinstance(dep, dependencies.PkgConfigDependency): - girdir = dep.get_variable("girdir") + girdir = dep.get_pkgconfig_variable("girdir") if girdir: gi_includes.update([girdir]) elif isinstance(dep, (build.StaticLibrary, build.SharedLibrary)): @@ -335,7 +335,7 @@ def generate_gir(self, state, args, kwargs): ) ] elif isinstance(dep, dependencies.PkgConfigDependency): - girdir = dep.get_variable("girdir") + girdir = dep.get_pkgconfig_variable("girdir") if girdir: typelib_cmd += ["--includedir=%s" % (girdir, )] diff --git a/test cases/linuxlike/1 pkg-config/meson.build b/test cases/linuxlike/1 pkg-config/meson.build index a18acc5cee44..13361a7f36e4 100644 --- a/test cases/linuxlike/1 pkg-config/meson.build +++ b/test cases/linuxlike/1 pkg-config/meson.build @@ -9,6 +9,10 @@ assert(dep.version().version_compare('>=1.2.8'), 'Pkg-config version numbers exp 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.') + # Test that dependencies of dependencies work. dep2 = declare_dependency(dependencies : dep) exe2 = executable('zlibprog2', 'prog.c', dependencies : dep2)