diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2018-12-06 15:03:46 -0500 |
---|---|---|
committer | Xavier Claessens <xavier.claessens@collabora.com> | 2018-12-27 23:06:28 -0500 |
commit | b6cede2928e80d6bd0512c82ad6787c03faae1e6 (patch) | |
tree | 19202bffbeef80c9c2116f5909fb9a078005ae99 /mesonbuild/interpreter.py | |
parent | ff2aa5a9ef48bc083e01d7af578799fc4eada764 (diff) | |
download | meson-b6cede2928e80d6bd0512c82ad6787c03faae1e6.zip meson-b6cede2928e80d6bd0512c82ad6787c03faae1e6.tar.gz meson-b6cede2928e80d6bd0512c82ad6787c03faae1e6.tar.bz2 |
find_library: Add 'has_headers' kwarg
A library without its headers is often useless, so it is common to check
them together.
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter.py | 70 |
1 files changed, 37 insertions, 33 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 6870fc1..0571eba 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -900,6 +900,23 @@ class SubprojectHolder(InterpreterObject, ObjectHolder): raise InvalidArguments('Requested variable "{0}" not found.'.format(varname)) return self.held_object.variables[varname] +header_permitted_kwargs = set([ + 'required', + 'prefix', + 'no_builtin_args', + 'include_directories', + 'args', + 'dependencies', +]) + +find_library_permitted_kwargs = set([ + 'has_headers', + 'required', + 'dirs', +]) + +find_library_permitted_kwargs |= set(['header_' + k for k in header_permitted_kwargs]) + class CompilerHolder(InterpreterObject): def __init__(self, compiler, env, subproject): InterpreterObject.__init__(self) @@ -1345,14 +1362,7 @@ class CompilerHolder(InterpreterObject): @FeatureNew('compiler.check_header', '0.47.0') @FeatureNewKwargs('compiler.check_header', '0.50.0', ['required']) - @permittedKwargs({ - 'required', - 'prefix', - 'no_builtin_args', - 'include_directories', - 'args', - 'dependencies', - }) + @permittedKwargs(header_permitted_kwargs) def check_header_method(self, args, kwargs): if len(args) != 1: raise InterpreterException('check_header method takes exactly one argument.') @@ -1380,14 +1390,7 @@ class CompilerHolder(InterpreterObject): return haz @FeatureNewKwargs('compiler.has_header', '0.50.0', ['required']) - @permittedKwargs({ - 'required', - 'prefix', - 'no_builtin_args', - 'include_directories', - 'args', - 'dependencies', - }) + @permittedKwargs(header_permitted_kwargs) def has_header_method(self, args, kwargs): if len(args) != 1: raise InterpreterException('has_header method takes exactly one argument.') @@ -1414,14 +1417,7 @@ class CompilerHolder(InterpreterObject): return haz @FeatureNewKwargs('compiler.has_header_symbol', '0.50.0', ['required']) - @permittedKwargs({ - 'required', - 'prefix', - 'no_builtin_args', - 'include_directories', - 'args', - 'dependencies', - }) + @permittedKwargs(header_permitted_kwargs) def has_header_symbol_method(self, args, kwargs): if len(args) != 2: raise InterpreterException('has_header_symbol method takes exactly two arguments.') @@ -1449,12 +1445,17 @@ class CompilerHolder(InterpreterObject): mlog.log('Header <{0}> has symbol'.format(hname), mlog.bold(symbol, True), msg, h) return haz + def notfound_library(self, libname): + lib = dependencies.ExternalLibrary(libname, None, + self.environment, + self.compiler.language, + silent=True) + return ExternalLibraryHolder(lib, self.subproject) + + @FeatureNewKwargs('compiler.find_library', '0.50.0', ['has_headers']) @FeatureNewKwargs('compiler.find_library', '0.49.0', ['disabler']) @disablerIfNotFound - @permittedKwargs({ - 'required', - 'dirs', - }) + @permittedKwargs(find_library_permitted_kwargs) def find_library_method(self, args, kwargs): # TODO add dependencies support? if len(args) != 1: @@ -1466,11 +1467,14 @@ class CompilerHolder(InterpreterObject): disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) if disabled: mlog.log('Library', mlog.bold(libname), 'skipped: feature', mlog.bold(feature), 'disabled') - lib = dependencies.ExternalLibrary(libname, None, - self.environment, - self.compiler.language, - silent=True) - return ExternalLibraryHolder(lib, self.subproject) + return self.notfound_library(libname) + + has_header_kwargs = {k[7:]: v for k, v in kwargs.items() if k.startswith('header_')} + has_header_kwargs['required'] = required + headers = mesonlib.stringlistify(kwargs.get('has_headers', [])) + for h in headers: + if not self.has_header_method([h], has_header_kwargs): + return self.notfound_library(libname) search_dirs = mesonlib.stringlistify(kwargs.get('dirs', [])) for i in search_dirs: |