diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index e54d9069e..6b62d756c 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -22,6 +22,7 @@ from . import optinterpreter from . import compilers from .wrap import wrap from . import mesonlib +from .dependencies import InternalDependency, Dependency from mesonbuild.interpreterbase import InterpreterBase from mesonbuild.interpreterbase import check_stringlist, noPosargs, noKwargs, stringArgs from mesonbuild.interpreterbase import InterpreterException, InvalidArguments, InvalidCode @@ -649,10 +650,8 @@ class CompilerHolder(InterpreterObject): args += mesonlib.stringlistify(kwargs.get('args', [])) return args - def determine_dependencies(self, kwargs, allowed_dep_types=None): + def determine_dependencies(self, kwargs): deps = kwargs.get('dependencies', None) - if allowed_dep_types is None: - allowed_dep_types = (dependencies.Dependency, dependencies.ExternalLibrary) if deps is not None: if not isinstance(deps, list): deps = [deps] @@ -662,8 +661,8 @@ class CompilerHolder(InterpreterObject): d = d.held_object except Exception: pass - if not isinstance(d, allowed_dep_types): - raise InterpreterException('Dependencies must be external deps') + if isinstance(d, InternalDependency) or not isinstance(d, Dependency): + raise InterpreterException('Dependencies must be external dependencies') final_deps.append(d) deps = final_deps return deps @@ -722,7 +721,7 @@ class CompilerHolder(InterpreterObject): if not isinstance(prefix, str): raise InterpreterException('Prefix argument of has_member must be a string.') extra_args = self.determine_args(kwargs) - deps = self.determine_dependencies(kwargs, allowed_dep_types=(dependencies.Dependency,)) + deps = self.determine_dependencies(kwargs) had = self.compiler.has_members(typename, [membername], prefix, self.environment, extra_args, deps) if had: @@ -741,7 +740,7 @@ class CompilerHolder(InterpreterObject): if not isinstance(prefix, str): raise InterpreterException('Prefix argument of has_members must be a string.') extra_args = self.determine_args(kwargs) - deps = self.determine_dependencies(kwargs, allowed_dep_types=(dependencies.Dependency,)) + deps = self.determine_dependencies(kwargs) had = self.compiler.has_members(typename, membernames, prefix, self.environment, extra_args, deps) if had: @@ -798,7 +797,7 @@ class CompilerHolder(InterpreterObject): if not isinstance(prefix, str): raise InterpreterException('Prefix argument of sizeof must be a string.') extra_args = self.determine_args(kwargs) - deps = self.determine_dependencies(kwargs, allowed_dep_types=(dependencies.Dependency,)) + deps = self.determine_dependencies(kwargs) esize = self.compiler.sizeof(element, prefix, self.environment, extra_args, deps) mlog.log('Checking for size of "%s": %d' % (element, esize)) return esize @@ -816,7 +815,7 @@ class CompilerHolder(InterpreterObject): if not isinstance(testname, str): raise InterpreterException('Testname argument must be a string.') extra_args = self.determine_args(kwargs) - deps = self.determine_dependencies(kwargs, allowed_dep_types=(dependencies.Dependency,)) + deps = self.determine_dependencies(kwargs) result = self.compiler.compiles(code, self.environment, extra_args, deps) if len(testname) > 0: if result: @@ -858,7 +857,7 @@ class CompilerHolder(InterpreterObject): if not isinstance(prefix, str): raise InterpreterException('Prefix argument of has_header must be a string.') extra_args = self.determine_args(kwargs) - deps = self.determine_dependencies(kwargs, allowed_dep_types=(dependencies.Dependency,)) + deps = self.determine_dependencies(kwargs) haz = self.compiler.has_header(hname, prefix, self.environment, extra_args, deps) if haz: h = mlog.green('YES') @@ -877,7 +876,7 @@ class CompilerHolder(InterpreterObject): if not isinstance(prefix, str): raise InterpreterException('Prefix argument of has_header_symbol must be a string.') extra_args = self.determine_args(kwargs) - deps = self.determine_dependencies(kwargs, allowed_dep_types=(dependencies.Dependency,)) + deps = self.determine_dependencies(kwargs) haz = self.compiler.has_header_symbol(hname, symbol, prefix, self.environment, extra_args, deps) if haz: h = mlog.green('YES') diff --git a/test cases/failing/38 has function external dependency/meson.build b/test cases/failing/38 has function external dependency/meson.build new file mode 100644 index 000000000..45a3bc246 --- /dev/null +++ b/test cases/failing/38 has function external dependency/meson.build @@ -0,0 +1,8 @@ +project('has function ext dep', 'c') + +cc = meson.get_compiler('c') + +mylib = shared_library('mylib', 'mylib.c') +mylib_dep = declare_dependency(link_with : mylib) +# Only external dependencies can work here +cc.has_function('malloc', dependencies : mylib_dep) diff --git a/test cases/failing/38 has function external dependency/mylib.c b/test cases/failing/38 has function external dependency/mylib.c new file mode 100644 index 000000000..d9fbd342b --- /dev/null +++ b/test cases/failing/38 has function external dependency/mylib.c @@ -0,0 +1 @@ +int testfunc(void) { return 0; }