Skip to content

Commit

Permalink
Can query pkg-config variables from the system. Closes #726.
Browse files Browse the repository at this point in the history
  • Loading branch information
jpakkane committed Oct 15, 2016
1 parent b6b8d56 commit ff0551c
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 6 deletions.
8 changes: 5 additions & 3 deletions mesonbuild/dependencies.py
Expand Up @@ -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__()
Expand Down Expand Up @@ -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:
Expand All @@ -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):
Expand Down
14 changes: 13 additions & 1 deletion mesonbuild/interpreter.py
Expand Up @@ -278,14 +278,26 @@ 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()

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)
Expand Down
4 changes: 2 additions & 2 deletions mesonbuild/modules/gnome.py
Expand Up @@ -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)):
Expand Down Expand Up @@ -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, )]

Expand Down
4 changes: 4 additions & 0 deletions test cases/linuxlike/1 pkg-config/meson.build
Expand Up @@ -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)
Expand Down

0 comments on commit ff0551c

Please sign in to comment.