aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/backend/backends.py8
-rw-r--r--mesonbuild/envconfig.py17
-rw-r--r--mesonbuild/environment.py2
-rw-r--r--mesonbuild/interpreter.py12
-rw-r--r--mesonbuild/mintro.py1
5 files changed, 31 insertions, 9 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 512eeed..c0b2666 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -86,7 +86,7 @@ class TestSerialisation:
is_parallel: bool, cmd_args: typing.List[str],
env: build.EnvironmentVariables, should_fail: bool,
timeout: typing.Optional[int], workdir: typing.Optional[str],
- extra_paths: typing.List[str], protocol: str):
+ extra_paths: typing.List[str], protocol: str, priority: int):
self.name = name
self.project_name = project
self.suite = suite
@@ -103,6 +103,7 @@ class TestSerialisation:
self.workdir = workdir
self.extra_paths = extra_paths
self.protocol = protocol
+ self.priority = priority
class OptionProxy:
def __init__(self, value):
@@ -728,7 +729,7 @@ class Backend:
def create_test_serialisation(self, tests):
arr = []
- for t in tests:
+ for t in sorted(tests, key=lambda tst: -1 * tst.priority):
exe = t.get_exe()
if isinstance(exe, dependencies.ExternalProgram):
cmd = exe.get_command()
@@ -770,7 +771,8 @@ class Backend:
raise MesonException('Bad object in test command.')
ts = TestSerialisation(t.get_name(), t.project_name, t.suite, cmd, is_cross,
exe_wrapper, t.is_parallel, cmd_args, t.env,
- t.should_fail, t.timeout, t.workdir, extra_paths, t.protocol)
+ t.should_fail, t.timeout, t.workdir,
+ extra_paths, t.protocol, t.priority)
arr.append(ts)
return arr
diff --git a/mesonbuild/envconfig.py b/mesonbuild/envconfig.py
index 5889eb1..f7a43a0 100644
--- a/mesonbuild/envconfig.py
+++ b/mesonbuild/envconfig.py
@@ -201,13 +201,13 @@ class MachineInfo:
"""
Machine is windows?
"""
- return self.system in {'windows', 'mingw'}
+ return self.system == 'windows' or 'mingw' in self.system
def is_cygwin(self) -> bool:
"""
Machine is cygwin?
"""
- return self.system == 'cygwin'
+ return self.system.startswith('cygwin')
def is_linux(self) -> bool:
"""
@@ -245,6 +245,19 @@ class MachineInfo:
"""
return self.system == 'openbsd'
+ def is_dragonflybsd(self) -> bool:
+ """Machine is DragonflyBSD?"""
+ return self.system == 'dragonfly'
+
+ def is_freebsd(self) -> bool:
+ """Machine is FreeBSD?"""
+ return self.system == 'freebsd'
+
+ def is_sunos(self) -> bool:
+ """Machine is illumos or Solaris?"""
+ return self.system == 'sunos'
+
+
# Various prefixes and suffixes for import libraries, shared libraries,
# static libraries, and executables.
# Versioning is added to these names in the backends as-needed.
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index 892bba7..2675bca 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -853,7 +853,7 @@ class Environment:
else:
m = 'Failed to detect MSVC compiler version: stderr was\n{!r}'
raise EnvironmentException(m.format(err))
- match = re.search('.*(x86|x64|ARM|ARM64).*', lookat.split('\n')[0])
+ match = re.search(' for .*(x86|x64|ARM|ARM64)$', lookat.split('\n')[0])
if match:
target = match.group(1)
else:
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 5f69e22..03910b2 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -900,7 +900,8 @@ class Test(InterpreterObject):
def __init__(self, name: str, project: str, suite: List[str], exe: build.Executable,
depends: List[Union[build.CustomTarget, build.BuildTarget]],
is_parallel: bool, cmd_args: List[str], env: build.EnvironmentVariables,
- should_fail: bool, timeout: int, workdir: Optional[str], protocol: str):
+ should_fail: bool, timeout: int, workdir: Optional[str], protocol: str,
+ priority: int):
InterpreterObject.__init__(self)
self.name = name
self.suite = suite
@@ -914,6 +915,7 @@ class Test(InterpreterObject):
self.timeout = timeout
self.workdir = workdir
self.protocol = protocol
+ self.priority = priority
def get_exe(self):
return self.exe
@@ -2044,7 +2046,7 @@ permitted_kwargs = {'add_global_arguments': {'language', 'native'},
'subdir': {'if_found'},
'subproject': {'version', 'default_options', 'required'},
'test': {'args', 'depends', 'env', 'is_parallel', 'should_fail', 'timeout', 'workdir',
- 'suite', 'protocol'},
+ 'suite', 'protocol', 'priority'},
'vcs_tag': {'input', 'output', 'fallback', 'command', 'replace_string'},
}
@@ -3383,6 +3385,7 @@ This will become a hard error in the future.''' % kwargs['input'], location=self
self.add_test(node, args, kwargs, False)
@FeatureNewKwargs('test', '0.46.0', ['depends'])
+ @FeatureNewKwargs('test', '0.52.0', ['priority'])
@permittedKwargs(permitted_kwargs['test'])
def func_test(self, node, args, kwargs):
self.add_test(node, args, kwargs, True)
@@ -3453,8 +3456,11 @@ This will become a hard error in the future.''' % kwargs['input'], location=self
for dep in depends:
if not isinstance(dep, (build.CustomTarget, build.BuildTarget)):
raise InterpreterException('Depends items must be build targets.')
+ priority = kwargs.get('priority', 0)
+ if not isinstance(priority, int):
+ raise InterpreterException('Keyword argument priority must be an integer.')
t = Test(args[0], prj, suite, exe.held_object, depends, par, cmd_args,
- env, should_fail, timeout, workdir, protocol)
+ env, should_fail, timeout, workdir, protocol, priority)
if is_base_test:
self.build.tests.append(t)
mlog.debug('Adding test', mlog.bold(args[0], True))
diff --git a/mesonbuild/mintro.py b/mesonbuild/mintro.py
index 1d30149..49eef0a 100644
--- a/mesonbuild/mintro.py
+++ b/mesonbuild/mintro.py
@@ -321,6 +321,7 @@ def get_test_list(testdata):
to['timeout'] = t.timeout
to['suite'] = t.suite
to['is_parallel'] = t.is_parallel
+ to['priority'] = t.priority
result.append(to)
return result