aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-03-02 20:39:28 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2016-03-12 17:00:55 +0200
commit6b548a1c7587238415e32cde6121b071ebee490c (patch)
tree70a1268cfcab89aac3fb27ea9160d1caac8d7c69 /mesonbuild
parent0d5eaa27218573f887013fb5bb40f435d34f745e (diff)
downloadmeson-6b548a1c7587238415e32cde6121b071ebee490c.zip
meson-6b548a1c7587238415e32cde6121b071ebee490c.tar.gz
meson-6b548a1c7587238415e32cde6121b071ebee490c.tar.bz2
Added find_library method and deprecated the standalone version. Closes #396.
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/compilers.py13
-rw-r--r--mesonbuild/dependencies.py11
-rw-r--r--mesonbuild/interpreter.py20
3 files changed, 42 insertions, 2 deletions
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py
index 9b753dd..aba4b95 100644
--- a/mesonbuild/compilers.py
+++ b/mesonbuild/compilers.py
@@ -190,6 +190,9 @@ class Compiler():
def unix_compile_flags_to_native(self, args):
return args
+ def find_library(self, libname):
+ raise EnvironmentException('Language {} does not support library finding.'.format(self.language))
+
class CCompiler(Compiler):
def __init__(self, exelist, version, is_cross, exe_wrapper=None):
super().__init__(exelist, version)
@@ -563,6 +566,16 @@ void bar() {
'''
return self.compiles(templ % (prefix, typename), extra_args)
+ def find_library(self, libname):
+ code = '''int main(int argc, char **argv) {
+ return 0;
+}
+ '''
+ linkarg = '-l' + libname
+ if self.links(code, extra_args=[linkarg]):
+ return linkarg
+ return None
+
def thread_flags(self):
return ['-pthread']
diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py
index 70486dc..ee2dd62 100644
--- a/mesonbuild/dependencies.py
+++ b/mesonbuild/dependencies.py
@@ -388,7 +388,14 @@ class ExternalLibrary(Dependency):
def __init__(self, name, fullpath=None, silent=False):
super().__init__()
self.name = name
- self.fullpath = fullpath
+ # Rename fullpath to link_args once standalone find_library() gets removed.
+ if fullpath is not None:
+ if isinstance(fullpath, list):
+ self.fullpath = fullpath
+ else:
+ self.fullpath = [fullpath]
+ else:
+ self.fullpath = fullpath
if not silent:
if self.found():
mlog.log('Library', mlog.bold(name), 'found:', mlog.green('YES'),
@@ -401,7 +408,7 @@ class ExternalLibrary(Dependency):
def get_link_args(self):
if self.found():
- return [self.fullpath]
+ return self.fullpath
return []
class BoostDependency(Dependency):
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 14f20e7..2ade18a 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -27,6 +27,8 @@ from functools import wraps
import importlib
+find_lib_deprecation_printed = False
+
class InterpreterException(coredata.MesonException):
pass
@@ -581,6 +583,7 @@ class CompilerHolder(InterpreterObject):
'alignment' : self.alignment_method,
'version' : self.version_method,
'cmd_array' : self.cmd_array_method,
+ 'find_library': self.find_library_method,
})
def version_method(self, args, kwargs):
@@ -750,6 +753,19 @@ class CompilerHolder(InterpreterObject):
mlog.log('Has header "%s":' % string, h)
return haz
+ def find_library_method(self, args, kwargs):
+ if len(args) != 1:
+ raise InterpreterException('find_library method takes one argument.')
+ libname = args[0]
+ if not isinstance(libname, str):
+ raise InterpreterException('Library name not a string.')
+ required = kwargs.get('required', True)
+ if not isinstance(required, bool):
+ raise InterpreterException('required must be boolean.')
+ linkarg = self.compiler.find_library(libname)
+ lib = dependencies.ExternalLibrary(libname, linkarg)
+ return ExternalLibraryHolder(lib)
+
class ModuleState:
pass
@@ -1526,6 +1542,10 @@ class Interpreter():
return progobj
def func_find_library(self, node, args, kwargs):
+ global find_lib_deprecation_printed
+ if not find_lib_deprecation_printed:
+ find_lib_deprecation_printed = True
+ mlog.log(mlog.red('DEPRECATION:'), 'find_library() is deprecated, use the corresponding method in compiler object instead.')
self.validate_arguments(args, 1, [str])
required = kwargs.get('required', True)
if not isinstance(required, bool):