aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-12-06 23:26:56 +0200
committerGitHub <noreply@github.com>2016-12-06 23:26:56 +0200
commit148a86330b59274f992020668782dc782de44c80 (patch)
tree292ede074f42d2c88051b02c4e87a75253109d38
parent541dd92ef7a10b0f657f3c8532ffb71a8d921f54 (diff)
parentb9a7c0cf39e31cc1954399ca8d2339e0b2b7ce20 (diff)
downloadmeson-148a86330b59274f992020668782dc782de44c80.zip
meson-148a86330b59274f992020668782dc782de44c80.tar.gz
meson-148a86330b59274f992020668782dc782de44c80.tar.bz2
Merge pull request #1149 from centricular/compiler_check_ext_deps_only
Compiler checks can only accept external dependencies
-rw-r--r--mesonbuild/backend/vs2010backend.py11
-rw-r--r--mesonbuild/interpreter.py29
-rw-r--r--mesonbuild/scripts/gettext.py2
-rwxr-xr-xmesonbuild/scripts/gtkdochelper.py4
-rwxr-xr-xmesonbuild/scripts/meson_install.py4
-rwxr-xr-xmesonbuild/scripts/regen_checker.py2
-rw-r--r--mesonbuild/scripts/yelphelper.py6
-rw-r--r--test cases/failing/38 has function external dependency/meson.build8
-rw-r--r--test cases/failing/38 has function external dependency/mylib.c1
9 files changed, 37 insertions, 30 deletions
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index 15bebba..0f67771 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -15,17 +15,16 @@
import os, sys
import pickle
import re
+import xml.dom.minidom
+import xml.etree.ElementTree as ET
-from mesonbuild import compilers
-from mesonbuild.build import BuildTarget
-from mesonbuild.mesonlib import File
from . import backends
from .. import build
from .. import dependencies
from .. import mlog
-import xml.etree.ElementTree as ET
-import xml.dom.minidom
-from ..mesonlib import MesonException
+from .. import compilers
+from ..build import BuildTarget
+from ..mesonlib import MesonException, File
from ..environment import Environment
def split_o_flags_args(args):
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index e54d906..ff67e0e 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -22,10 +22,11 @@ from . import optinterpreter
from . import compilers
from .wrap import wrap
from . import mesonlib
-from mesonbuild.interpreterbase import InterpreterBase
-from mesonbuild.interpreterbase import check_stringlist, noPosargs, noKwargs, stringArgs
-from mesonbuild.interpreterbase import InterpreterException, InvalidArguments, InvalidCode
-from mesonbuild.interpreterbase import InterpreterObject, MutableInterpreterObject
+from .dependencies import InternalDependency, Dependency
+from .interpreterbase import InterpreterBase
+from .interpreterbase import check_stringlist, noPosargs, noKwargs, stringArgs
+from .interpreterbase import InterpreterException, InvalidArguments, InvalidCode
+from .interpreterbase import InterpreterObject, MutableInterpreterObject
import os, sys, subprocess, shutil, uuid, re
@@ -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/mesonbuild/scripts/gettext.py b/mesonbuild/scripts/gettext.py
index be2f94b..8baf323 100644
--- a/mesonbuild/scripts/gettext.py
+++ b/mesonbuild/scripts/gettext.py
@@ -16,7 +16,7 @@ import os
import shutil
import argparse
import subprocess
-from mesonbuild.scripts import destdir_join
+from . import destdir_join
parser = argparse.ArgumentParser()
parser.add_argument('command')
diff --git a/mesonbuild/scripts/gtkdochelper.py b/mesonbuild/scripts/gtkdochelper.py
index e34b541..41a4efe 100755
--- a/mesonbuild/scripts/gtkdochelper.py
+++ b/mesonbuild/scripts/gtkdochelper.py
@@ -17,8 +17,8 @@ import sys, os
import subprocess
import shutil
import argparse
-from mesonbuild.mesonlib import MesonException
-from mesonbuild.scripts import destdir_join
+from ..mesonlib import MesonException
+from . import destdir_join
parser = argparse.ArgumentParser()
diff --git a/mesonbuild/scripts/meson_install.py b/mesonbuild/scripts/meson_install.py
index 5cf02e6..14539e0 100755
--- a/mesonbuild/scripts/meson_install.py
+++ b/mesonbuild/scripts/meson_install.py
@@ -16,8 +16,8 @@
import sys, pickle, os, shutil, subprocess, gzip, platform
from glob import glob
-from mesonbuild.scripts import depfixer
-from mesonbuild.scripts import destdir_join
+from . import depfixer
+from . import destdir_join
install_log_file = None
diff --git a/mesonbuild/scripts/regen_checker.py b/mesonbuild/scripts/regen_checker.py
index e8e1077..5077970 100755
--- a/mesonbuild/scripts/regen_checker.py
+++ b/mesonbuild/scripts/regen_checker.py
@@ -29,7 +29,7 @@ def need_regen(regeninfo, regen_timestamp):
# We must make sure to recreate it, even if we do not regenerate the solution.
# Otherwise, Visual Studio will always consider the REGEN project out of date.
print("Everything is up-to-date, regeneration of build files is not needed.")
- from mesonbuild.backend.vs2010backend import Vs2010Backend
+ from ..backend.vs2010backend import Vs2010Backend
Vs2010Backend.touch_regen_timestamp(regeninfo.build_dir)
return False
diff --git a/mesonbuild/scripts/yelphelper.py b/mesonbuild/scripts/yelphelper.py
index 524ef45..4eec425 100644
--- a/mesonbuild/scripts/yelphelper.py
+++ b/mesonbuild/scripts/yelphelper.py
@@ -16,9 +16,9 @@ import sys, os
import subprocess
import shutil
import argparse
-from mesonbuild import mlog
-from mesonbuild.mesonlib import MesonException
-from mesonbuild.scripts import destdir_join
+from .. import mlog
+from ..mesonlib import MesonException
+from . import destdir_join
parser = argparse.ArgumentParser()
parser.add_argument('command')
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 0000000..45a3bc2
--- /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 0000000..d9fbd34
--- /dev/null
+++ b/test cases/failing/38 has function external dependency/mylib.c
@@ -0,0 +1 @@
+int testfunc(void) { return 0; }