aboutsummaryrefslogtreecommitdiff
path: root/run_unittests.py
diff options
context:
space:
mode:
authorMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2019-07-08 09:19:08 -0400
committerMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2019-07-08 22:28:25 -0400
commit763b05e074c4eaad8e6b3124ea283d890f63d185 (patch)
treea88a1442696d924b0976c28a2908e6834fa188ef /run_unittests.py
parent8e0acae4390f13aa6ec4f8c5a07720e44c832e06 (diff)
downloadmeson-763b05e074c4eaad8e6b3124ea283d890f63d185.zip
meson-763b05e074c4eaad8e6b3124ea283d890f63d185.tar.gz
meson-763b05e074c4eaad8e6b3124ea283d890f63d185.tar.bz2
cleanup clang version minimum
Diffstat (limited to 'run_unittests.py')
-rwxr-xr-xrun_unittests.py82
1 files changed, 51 insertions, 31 deletions
diff --git a/run_unittests.py b/run_unittests.py
index 3357ed3..e596a34 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -279,6 +279,7 @@ class PatchModule:
Fancy monkey-patching! Whee! Can't use mock.patch because it only
patches in the local namespace.
'''
+
def __init__(self, func, name, impl):
self.func = func
assert(isinstance(name, str))
@@ -1483,6 +1484,7 @@ class AllPlatformTests(BasePlatformTests):
'''
Tests that should run on all platforms
'''
+
def test_default_options_prefix(self):
'''
Tests that setting a prefix in default_options in project() works.
@@ -4042,6 +4044,7 @@ class WindowsTests(BasePlatformTests):
'''
Tests that should run on Cygwin, MinGW, and MSVC
'''
+
def setUp(self):
super().setUp()
self.platform_test_dir = os.path.join(self.src_root, 'test cases/windows')
@@ -4156,6 +4159,7 @@ class DarwinTests(BasePlatformTests):
'''
Tests that should run on macOS
'''
+
def setUp(self):
super().setUp()
self.platform_test_dir = os.path.join(self.src_root, 'test cases/osx')
@@ -4255,6 +4259,7 @@ class LinuxlikeTests(BasePlatformTests):
'''
Tests that should run on Linux, macOS, and *BSD
'''
+
def test_basic_soname(self):
'''
Test that the soname is set correctly for shared libraries. This can't
@@ -4543,45 +4548,33 @@ class LinuxlikeTests(BasePlatformTests):
Oargs = [arg for arg in cmd if arg.startswith('-O')]
self.assertEqual(Oargs, [Oflag, '-O0'])
- def _test_stds_impl(self, testdir, compiler, p):
+ def _test_stds_impl(self, testdir, compiler, p: str):
lang_std = p + '_std'
- clangLT5 = (compiler.get_id() == 'clang' and
- (version_compare(compiler.version, '<5.0.0') or
- (compiler.compiler_type == mesonbuild.compilers.CompilerType.CLANG_OSX and version_compare(compiler.version, '<9.1'))))
- clangLT6 = (compiler.get_id() == 'clang' and
- (version_compare(compiler.version, '<6.0.0') or
- (compiler.compiler_type == mesonbuild.compilers.CompilerType.CLANG_OSX and version_compare(compiler.version, '<10.0'))))
- clangLT8 = (compiler.get_id() == 'clang' and
- (version_compare(compiler.version, '<8.0.0') or
- (compiler.compiler_type == mesonbuild.compilers.CompilerType.CLANG_OSX and version_compare(compiler.version, '<11.0'))))
+
+ has_cpp17 = (compiler.get_Id() not in {'clang', 'gcc'} or
+ compiler.get_id() == 'clang' and _clang_at_least(compiler, '>=5.0.0', '>=9.1') or
+ compiler.get_id() == 'gcc' and version_compare(compiler.version, '>=5.0.0'))
+ has_cpp2a_c17 = (compiler.get_Id() not in {'clang', 'gcc'} or
+ compiler.get_id() == 'clang' and _clang_at_least(compiler, '>=6.0.0', '>=10.0') or
+ compiler.get_id() == 'gcc' and version_compare(compiler.version, '>=8.0.0'))
+ has_c18 = (compiler.get_Id() not in {'clang', 'gcc'} or
+ compiler.get_id() == 'clang' and _clang_at_least(compiler, '>=8.0.0', '>=11.0') or
+ compiler.get_id() == 'gcc' and version_compare(compiler.version, '>=8.0.0'))
# Check that all the listed -std=xxx options for this compiler work just fine when used
# https://en.wikipedia.org/wiki/Xcode#Latest_versions
# https://www.gnu.org/software/gcc/projects/cxx-status.html
for v in compiler.get_options()[lang_std].choices:
# we do it like this to handle gnu++17,c++17 and gnu17,c17 cleanly
# thus, C++ first
- if '++17' in v:
- if clangLT5:
- continue
- if compiler.get_id() == 'gcc' and version_compare(compiler.version, '<5.0.0'):
- continue
- elif '++2a' in v:
- # https://en.cppreference.com/w/cpp/compiler_support
- if clangLT6:
- continue
- if compiler.get_id() == 'gcc' and version_compare(compiler.version, '<8.0.0'):
- continue
+ if '++17' in v and not has_cpp17:
+ continue
+ elif '++2a' in v and not has_cpp2a_c17: # https://en.cppreference.com/w/cpp/compiler_support
+ continue
# now C
- elif '17' in v:
- if clangLT6:
- continue
- if compiler.get_id() == 'gcc' and version_compare(compiler.version, '<8.0.0'):
- continue
- elif '18' in v:
- if clangLT8:
- continue
- if compiler.get_id() == 'gcc' and version_compare(compiler.version, '<8.0.0'):
- continue
+ elif '17' in v and not has_cpp2a_c17:
+ continue
+ elif '18' in v and not has_c18:
+ continue
std_opt = '{}={}'.format(lang_std, v)
self.init(testdir, extra_args=['-D' + std_opt])
cmd = self.get_compdb()[0]['command']
@@ -5337,6 +5330,7 @@ class LinuxCrossArmTests(BasePlatformTests):
'''
Tests that cross-compilation to Linux/ARM works
'''
+
def setUp(self):
super().setUp()
src_root = os.path.dirname(__file__)
@@ -5396,6 +5390,7 @@ class LinuxCrossMingwTests(BasePlatformTests):
'''
Tests that cross-compilation to Windows/MinGW works
'''
+
def setUp(self):
super().setUp()
src_root = os.path.dirname(__file__)
@@ -5449,6 +5444,7 @@ class PythonTests(BasePlatformTests):
'''
Tests that verify compilation of python extension modules
'''
+
def test_versions(self):
if self.backend is not Backend.ninja:
raise unittest.SkipTest('Skipping python tests with {} backend'.format(self.backend.name))
@@ -6493,6 +6489,30 @@ class TAPParserTests(unittest.TestCase):
self.assert_test(events, number=2, name='', result=TestResult.FAIL)
self.assert_last(events)
+
+def _clang_at_least(compiler, minver: str, apple_minver: str) -> bool:
+ """
+ check that Clang compiler is at least a specified version, whether AppleClang or regular Clang
+
+ Parameters
+ ----------
+ compiler:
+ Meson compiler object
+ minver: str
+ Clang minimum version
+ apple_minver: str
+ AppleCLang minimum version
+
+ Returns
+ -------
+ at_least: bool
+ Clang is at least the specified version
+ """
+ if compiler.compiler_type == mesonbuild.compilers.CompilerType.CLANG_OSX:
+ return version_compare(compiler.version, apple_minver)
+ return version_compare(compiler.version, minver)
+
+
def unset_envs():
# For unit tests we must fully control all command lines
# so that there are no unexpected changes coming from the