diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2016-03-02 20:39:28 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2016-03-12 17:00:55 +0200 |
commit | 6b548a1c7587238415e32cde6121b071ebee490c (patch) | |
tree | 70a1268cfcab89aac3fb27ea9160d1caac8d7c69 /mesonbuild | |
parent | 0d5eaa27218573f887013fb5bb40f435d34f745e (diff) | |
download | meson-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.py | 13 | ||||
-rw-r--r-- | mesonbuild/dependencies.py | 11 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 20 |
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): |