aboutsummaryrefslogtreecommitdiff
path: root/run_unittests.py
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2021-06-02 19:30:55 +0200
committerDaniel Mensinger <daniel@mensinger-ka.de>2021-06-25 19:34:48 +0200
commit3f889606c7debafacd3da9c9e74caa61b45a13ff (patch)
tree2bc4821baebd6e50bfd2999d034328d60c596ff2 /run_unittests.py
parent0f237b8d1d84e4906c758bbef44d81e93207f8e4 (diff)
downloadmeson-3f889606c7debafacd3da9c9e74caa61b45a13ff.zip
meson-3f889606c7debafacd3da9c9e74caa61b45a13ff.tar.gz
meson-3f889606c7debafacd3da9c9e74caa61b45a13ff.tar.bz2
Split compiler detection from Environment
This moves all the compiler detection logic into the new compilers.detect module. This dramatically reduces the size and complexity of Environment.
Diffstat (limited to 'run_unittests.py')
-rwxr-xr-xrun_unittests.py156
1 files changed, 78 insertions, 78 deletions
diff --git a/run_unittests.py b/run_unittests.py
index 7f74e91..f1ff2b4 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -59,7 +59,13 @@ from mesonbuild.mesonlib import (
BuildDirLock, LibType, MachineChoice, PerMachine, Version, is_windows,
is_osx, is_cygwin, is_dragonflybsd, is_openbsd, is_haiku, is_sunos,
windows_proof_rmtree, windows_proof_rm, python_command,
- version_compare, split_args, quote_arg, relpath, is_linux, git
+ version_compare, split_args, quote_arg, relpath, is_linux, git,
+ search_version
+)
+from mesonbuild.compilers import (
+ detect_static_linker, detect_c_compiler, detect_cpp_compiler,
+ detect_objc_compiler, detect_objcpp_compiler, detect_d_compiler,
+ detect_swift_compiler, compiler_from_language
)
from mesonbuild.environment import detect_ninja
from mesonbuild.mesonlib import MesonException, EnvironmentException, OptionKey
@@ -140,7 +146,7 @@ def _git_init(project_dir):
# If a user has git configuration init.defaultBranch set we want to override that
with tempfile.TemporaryDirectory() as d:
out = git(['--version'], str(d))[1]
- if version_compare(mesonbuild.environment.search_version(out), '>= 2.28'):
+ if version_compare(search_version(out), '>= 2.28'):
extra_cmd = ['--initial-branch', 'master']
else:
extra_cmd = []
@@ -226,14 +232,12 @@ def skip_if_no_cmake(f):
return f(*args, **kwargs)
return wrapped
-def skip_if_not_language(lang):
+def skip_if_not_language(lang: str):
def wrapper(func):
@functools.wraps(func)
def wrapped(*args, **kwargs):
try:
- env = get_fake_env()
- f = getattr(env, f'detect_{lang}_compiler')
- f(MachineChoice.HOST)
+ compiler_from_language(get_fake_env(), lang, MachineChoice.HOST)
except EnvironmentException:
raise unittest.SkipTest(f'No {lang} compiler found.')
return func(*args, **kwargs)
@@ -269,7 +273,7 @@ def skip_if_not_base_option(feature):
@functools.wraps(f)
def wrapped(*args, **kwargs):
env = get_fake_env()
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
key = OptionKey(feature)
if key not in cc.base_options:
raise unittest.SkipTest(
@@ -327,18 +331,17 @@ def no_pkgconfig():
class InternalTests(unittest.TestCase):
def test_version_number(self):
- searchfunc = mesonbuild.environment.search_version
- self.assertEqual(searchfunc('foobar 1.2.3'), '1.2.3')
- self.assertEqual(searchfunc('1.2.3'), '1.2.3')
- self.assertEqual(searchfunc('foobar 2016.10.28 1.2.3'), '1.2.3')
- self.assertEqual(searchfunc('2016.10.28 1.2.3'), '1.2.3')
- self.assertEqual(searchfunc('foobar 2016.10.128'), '2016.10.128')
- self.assertEqual(searchfunc('2016.10.128'), '2016.10.128')
- self.assertEqual(searchfunc('2016.10'), '2016.10')
- self.assertEqual(searchfunc('2016.10 1.2.3'), '1.2.3')
- self.assertEqual(searchfunc('oops v1.2.3'), '1.2.3')
- self.assertEqual(searchfunc('2016.oops 1.2.3'), '1.2.3')
- self.assertEqual(searchfunc('2016.x'), 'unknown version')
+ self.assertEqual(search_version('foobar 1.2.3'), '1.2.3')
+ self.assertEqual(search_version('1.2.3'), '1.2.3')
+ self.assertEqual(search_version('foobar 2016.10.28 1.2.3'), '1.2.3')
+ self.assertEqual(search_version('2016.10.28 1.2.3'), '1.2.3')
+ self.assertEqual(search_version('foobar 2016.10.128'), '2016.10.128')
+ self.assertEqual(search_version('2016.10.128'), '2016.10.128')
+ self.assertEqual(search_version('2016.10'), '2016.10')
+ self.assertEqual(search_version('2016.10 1.2.3'), '1.2.3')
+ self.assertEqual(search_version('oops v1.2.3'), '1.2.3')
+ self.assertEqual(search_version('2016.oops 1.2.3'), '1.2.3')
+ self.assertEqual(search_version('2016.x'), 'unknown version')
def test_mode_symbolic_to_bits(self):
modefunc = mesonbuild.mesonlib.FileMode.perms_s_to_bits
@@ -837,7 +840,7 @@ class InternalTests(unittest.TestCase):
'{}.dll.a', '{}.lib', '{}.dll'),
'static': msvc_static}}
env = get_fake_env()
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if is_osx():
self._test_all_naming(cc, env, patterns, 'darwin')
elif is_cygwin():
@@ -881,7 +884,7 @@ class InternalTests(unittest.TestCase):
with tempfile.TemporaryDirectory() as tmpdir:
pkgbin = ExternalProgram('pkg-config', command=['pkg-config'], silent=True)
env = get_fake_env()
- compiler = env.detect_c_compiler(MachineChoice.HOST)
+ compiler = detect_c_compiler(env, MachineChoice.HOST)
env.coredata.compilers.host = {'c': compiler}
env.coredata.options[OptionKey('link_args', lang='c')] = FakeCompilerOptions()
p1 = Path(tmpdir) / '1'
@@ -1063,7 +1066,7 @@ class InternalTests(unittest.TestCase):
Ensure that the toolset version returns the correct value for this MSVC
'''
env = get_fake_env()
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_argument_syntax() != 'msvc':
raise unittest.SkipTest('Test only applies to MSVC-like compilers')
toolset_ver = cc.get_toolset_version()
@@ -1752,8 +1755,8 @@ class DataTests(unittest.TestCase):
self.assertIsNotNone(md)
env = get_fake_env()
# FIXME: Support other compilers
- cc = env.detect_c_compiler(MachineChoice.HOST)
- cpp = env.detect_cpp_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
+ cpp = detect_cpp_compiler(env, MachineChoice.HOST)
for comp in (cc, cpp):
for opt in comp.get_options():
self.assertIn(str(opt), md)
@@ -2556,7 +2559,7 @@ class AllPlatformTests(BasePlatformTests):
def test_clike_get_library_dirs(self):
env = get_fake_env()
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
for d in cc.get_library_dirs(env):
self.assertTrue(os.path.exists(d))
self.assertTrue(os.path.isdir(d))
@@ -2572,8 +2575,8 @@ class AllPlatformTests(BasePlatformTests):
'''
testdir = os.path.join(self.common_test_dir, '3 static')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
- static_linker = env.detect_static_linker(cc)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
+ static_linker = detect_static_linker(env, cc)
if is_windows():
raise unittest.SkipTest('https://github.com/mesonbuild/meson/issues/1526')
if not isinstance(static_linker, mesonbuild.linkers.ArLinker):
@@ -3041,9 +3044,9 @@ class AllPlatformTests(BasePlatformTests):
for lang, evar in langs:
# Detect with evar and do sanity checks on that
if evar in os.environ:
- ecc = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST)
+ ecc = compiler_from_language(env, lang, MachineChoice.HOST)
self.assertTrue(ecc.version)
- elinker = env.detect_static_linker(ecc)
+ elinker = detect_static_linker(env, ecc)
# Pop it so we don't use it for the next detection
evalue = os.environ.pop(evar)
# Very rough/strict heuristics. Would never work for actual
@@ -3069,9 +3072,9 @@ class AllPlatformTests(BasePlatformTests):
# Check that we actually used the evalue correctly as the compiler
self.assertEqual(ecc.get_exelist(), split_args(evalue))
# Do auto-detection of compiler based on platform, PATH, etc.
- cc = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST)
+ cc = compiler_from_language(env, lang, MachineChoice.HOST)
self.assertTrue(cc.version)
- linker = env.detect_static_linker(cc)
+ linker = detect_static_linker(env, cc)
# Check compiler type
if isinstance(cc, gnu):
self.assertIsInstance(linker, ar)
@@ -3129,8 +3132,8 @@ class AllPlatformTests(BasePlatformTests):
# Need a new env to re-run environment loading
env = get_fake_env(testdir, self.builddir, self.prefix)
- wcc = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST)
- wlinker = env.detect_static_linker(wcc)
+ wcc = compiler_from_language(env, lang, MachineChoice.HOST)
+ wlinker = detect_static_linker(env, wcc)
# Pop it so we don't use it for the next detection
evalue = os.environ.pop('AR')
# Must be the same type since it's a wrapper around the same exelist
@@ -3148,7 +3151,7 @@ class AllPlatformTests(BasePlatformTests):
testdir = os.path.join(self.common_test_dir, '133 c cpp and asm')
# Skip if building with MSVC
env = get_fake_env(testdir, self.builddir, self.prefix)
- if env.detect_c_compiler(MachineChoice.HOST).get_id() == 'msvc':
+ if detect_c_compiler(env, MachineChoice.HOST).get_id() == 'msvc':
raise unittest.SkipTest('MSVC can\'t compile assembly')
self.init(testdir)
commands = {'c-asm': {}, 'cpp-asm': {}, 'cpp-c-asm': {}, 'c-cpp-asm': {}}
@@ -3309,7 +3312,7 @@ class AllPlatformTests(BasePlatformTests):
testdir = os.path.join(self.common_test_dir, '5 linkstatic')
env = get_fake_env(testdir, self.builddir, self.prefix)
- if env.detect_c_compiler(MachineChoice.HOST).get_id() == 'clang' and is_windows():
+ if detect_c_compiler(env, MachineChoice.HOST).get_id() == 'clang' and is_windows():
raise unittest.SkipTest('LTO not (yet) supported by windows clang')
self.init(testdir, extra_args='-Db_lto=true')
@@ -3321,7 +3324,7 @@ class AllPlatformTests(BasePlatformTests):
testdir = os.path.join(self.common_test_dir, '6 linkshared')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
extra_args: T.List[str] = []
if cc.get_id() == 'clang':
if is_windows():
@@ -3347,7 +3350,7 @@ class AllPlatformTests(BasePlatformTests):
testdir = os.path.join(self.common_test_dir, '6 linkshared')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_id() != 'clang':
raise unittest.SkipTest('Only clang currently supports thinLTO')
if cc.linker.id not in {'ld.lld', 'ld.gold', 'ld64', 'lld-link'}:
@@ -3615,8 +3618,8 @@ class AllPlatformTests(BasePlatformTests):
def detect_prebuild_env(self):
env = get_fake_env()
- cc = env.detect_c_compiler(MachineChoice.HOST)
- stlinker = env.detect_static_linker(cc)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
+ stlinker = detect_static_linker(env, cc)
if mesonbuild.mesonlib.is_windows():
object_suffix = 'obj'
shared_suffix = 'dll'
@@ -4060,7 +4063,7 @@ class AllPlatformTests(BasePlatformTests):
env = get_fake_env()
for l in ['cpp', 'cs', 'd', 'java', 'cuda', 'fortran', 'objc', 'objcpp', 'rust']:
try:
- comp = env.detect_compiler_for(l, MachineChoice.HOST)
+ comp = mesonbuild.compilers.detect_compiler_for(env, l, MachineChoice.HOST)
with tempfile.TemporaryDirectory() as d:
comp.sanity_check(d, env)
langs.append(l)
@@ -4170,7 +4173,7 @@ class AllPlatformTests(BasePlatformTests):
extra_args = None
libdir_flags = ['-L']
env = get_fake_env(testdirlib, self.builddir, self.prefix)
- if env.detect_c_compiler(MachineChoice.HOST).get_id() in {'msvc', 'clang-cl', 'intel-cl'}:
+ if detect_c_compiler(env, MachineChoice.HOST).get_id() in {'msvc', 'clang-cl', 'intel-cl'}:
# msvc-like compiler, also test it with msvc-specific flags
libdir_flags += ['/LIBPATH:', '-LIBPATH:']
else:
@@ -5562,7 +5565,7 @@ class AllPlatformTests(BasePlatformTests):
raise unittest.SkipTest('gcovr not found, or too old')
testdir = os.path.join(self.common_test_dir, '1 trivial')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_id() == 'clang':
if not mesonbuild.environment.detect_llvm_cov():
raise unittest.SkipTest('llvm-cov not found')
@@ -5582,7 +5585,7 @@ class AllPlatformTests(BasePlatformTests):
raise unittest.SkipTest('gcovr not found, or too old')
testdir = os.path.join(self.common_test_dir, '105 generatorcustom')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_id() == 'clang':
if not mesonbuild.environment.detect_llvm_cov():
raise unittest.SkipTest('llvm-cov not found')
@@ -5602,7 +5605,7 @@ class AllPlatformTests(BasePlatformTests):
raise unittest.SkipTest('gcovr not found, or too old')
testdir = os.path.join(self.common_test_dir, '1 trivial')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_id() == 'clang':
if not mesonbuild.environment.detect_llvm_cov():
raise unittest.SkipTest('llvm-cov not found')
@@ -5622,7 +5625,7 @@ class AllPlatformTests(BasePlatformTests):
raise unittest.SkipTest('gcovr not found, or too old')
testdir = os.path.join(self.common_test_dir, '1 trivial')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_id() == 'clang':
if not mesonbuild.environment.detect_llvm_cov():
raise unittest.SkipTest('llvm-cov not found')
@@ -5642,7 +5645,7 @@ class AllPlatformTests(BasePlatformTests):
raise unittest.SkipTest('gcovr not found, or too old')
testdir = os.path.join(self.common_test_dir, '1 trivial')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_id() == 'clang':
if not mesonbuild.environment.detect_llvm_cov():
raise unittest.SkipTest('llvm-cov not found')
@@ -5842,7 +5845,7 @@ class AllPlatformTests(BasePlatformTests):
'bar/barfile'
]
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_argument_syntax() == 'msvc':
main_expected.append('bin/foo.pdb')
bar_expected.append('bin/bar.pdb')
@@ -5936,18 +5939,18 @@ class AllPlatformTests(BasePlatformTests):
env = get_fake_env()
# Get the compiler so we know which compiler class to mock.
- cc = env.detect_compiler_for('c', MachineChoice.HOST)
+ cc = mesonbuild.compilers.detect_compiler_for(env, 'c', MachineChoice.HOST)
cc_type = type(cc)
# Test a compiler that acts as a linker
with mock.patch.object(cc_type, 'INVOKES_LINKER', True):
- cc = env.detect_compiler_for('c', MachineChoice.HOST)
+ cc = mesonbuild.compilers.detect_compiler_for(env, 'c', MachineChoice.HOST)
link_args = env.coredata.get_external_link_args(cc.for_machine, cc.language)
self.assertEqual(sorted(link_args), sorted(['-DCFLAG', '-flto']))
# And one that doesn't
with mock.patch.object(cc_type, 'INVOKES_LINKER', False):
- cc = env.detect_compiler_for('c', MachineChoice.HOST)
+ cc = mesonbuild.compilers.detect_compiler_for(env, 'c', MachineChoice.HOST)
link_args = env.coredata.get_external_link_args(cc.for_machine, cc.language)
self.assertEqual(sorted(link_args), sorted(['-flto']))
@@ -6141,8 +6144,8 @@ class FailureTests(BasePlatformTests):
'''
env = get_fake_env()
try:
- env.detect_objc_compiler(MachineChoice.HOST)
- env.detect_objcpp_compiler(MachineChoice.HOST)
+ detect_objc_compiler(env, MachineChoice.HOST)
+ detect_objcpp_compiler(env, MachineChoice.HOST)
except EnvironmentException:
code = "add_languages('objc')\nadd_languages('objcpp')"
self.assertMesonRaises(code, "Unknown compiler")
@@ -6362,7 +6365,7 @@ class WindowsTests(BasePlatformTests):
'''
testdir = os.path.join(self.platform_test_dir, '1 basic')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_argument_syntax() != 'msvc':
raise unittest.SkipTest('Not using MSVC')
# To force people to update this test, and also test
@@ -6375,7 +6378,7 @@ class WindowsTests(BasePlatformTests):
# resource compiler depfile generation is not yet implemented for msvc
env = get_fake_env(testdir, self.builddir, self.prefix)
- depfile_works = env.detect_c_compiler(MachineChoice.HOST).get_id() not in {'msvc', 'clang-cl', 'intel-cl'}
+ depfile_works = detect_c_compiler(env, MachineChoice.HOST).get_id() not in {'msvc', 'clang-cl', 'intel-cl'}
self.init(testdir)
self.build()
@@ -6406,7 +6409,7 @@ class WindowsTests(BasePlatformTests):
testdir = os.path.join(self.unit_test_dir, '45 vscpp17')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_argument_syntax() != 'msvc':
raise unittest.SkipTest('Test only applies to MSVC-like compilers')
@@ -6424,7 +6427,7 @@ class WindowsTests(BasePlatformTests):
testdir = os.path.join(self.platform_test_dir, '1 basic')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_argument_syntax() != 'msvc':
raise unittest.SkipTest('Test only applies to MSVC-like compilers')
@@ -6448,28 +6451,28 @@ class WindowsTests(BasePlatformTests):
with mock.patch.dict(os.environ, {envvar: name}):
env = get_fake_env()
try:
- comp = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST)
+ comp = compiler_from_language(env, lang, MachineChoice.HOST)
except EnvironmentException:
raise unittest.SkipTest(f'Could not find a compiler for {lang}')
self.assertEqual(comp.linker.id, expected)
def test_link_environment_variable_lld_link(self):
env = get_fake_env()
- comp = getattr(env, 'detect_c_compiler')(MachineChoice.HOST)
+ comp = detect_c_compiler(env, MachineChoice.HOST)
if isinstance(comp, mesonbuild.compilers.GnuLikeCompiler):
raise unittest.SkipTest('GCC cannot be used with link compatible linkers.')
self._check_ld('lld-link', 'c', 'lld-link')
def test_link_environment_variable_link(self):
env = get_fake_env()
- comp = getattr(env, 'detect_c_compiler')(MachineChoice.HOST)
+ comp = detect_c_compiler(env, MachineChoice.HOST)
if isinstance(comp, mesonbuild.compilers.GnuLikeCompiler):
raise unittest.SkipTest('GCC cannot be used with link compatible linkers.')
self._check_ld('link', 'c', 'link')
def test_link_environment_variable_optlink(self):
env = get_fake_env()
- comp = getattr(env, 'detect_c_compiler')(MachineChoice.HOST)
+ comp = detect_c_compiler(env, MachineChoice.HOST)
if isinstance(comp, mesonbuild.compilers.GnuLikeCompiler):
raise unittest.SkipTest('GCC cannot be used with link compatible linkers.')
self._check_ld('optlink', 'c', 'optlink')
@@ -6481,7 +6484,7 @@ class WindowsTests(BasePlatformTests):
@skip_if_not_language('d')
def test_link_environment_variable_d(self):
env = get_fake_env()
- comp = getattr(env, 'detect_d_compiler')(MachineChoice.HOST)
+ comp = detect_d_compiler(env, MachineChoice.HOST)
if comp.id == 'dmd':
raise unittest.SkipTest('meson cannot reliably make DMD use a different linker.')
self._check_ld('lld-link', 'd', 'lld-link')
@@ -6498,7 +6501,7 @@ class WindowsTests(BasePlatformTests):
self.build()
# Test that binaries have a non-zero checksum
env = get_fake_env()
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
cc_id = cc.get_id()
ld_id = cc.get_linker_id()
dll = glob(os.path.join(self.builddir, '*mycpplib.dll'))[0]
@@ -6520,7 +6523,7 @@ class WindowsTests(BasePlatformTests):
'''
# Verify that the `b_vscrt` option is available
env = get_fake_env()
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if OptionKey('b_vscrt') not in cc.base_options:
raise unittest.SkipTest('Compiler does not support setting the VS CRT')
# Verify that qmake is for Qt5
@@ -6546,7 +6549,7 @@ class WindowsTests(BasePlatformTests):
'''
# Verify that the `b_vscrt` option is available
env = get_fake_env()
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if OptionKey('b_vscrt') not in cc.base_options:
raise unittest.SkipTest('Compiler does not support setting the VS CRT')
@@ -6614,7 +6617,7 @@ class DarwinTests(BasePlatformTests):
'''
testdir = os.path.join(self.platform_test_dir, '7 bitcode')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.id != 'clang':
raise unittest.SkipTest('Not using Clang on OSX')
# Try with bitcode enabled
@@ -6794,7 +6797,7 @@ class LinuxlikeTests(BasePlatformTests):
self.assertEqual(libhello_nolib.get_pkgconfig_variable('escaped_var', {}), r'hello\ world')
self.assertEqual(libhello_nolib.get_pkgconfig_variable('unescaped_var', {}), 'hello world')
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
if cc.get_id() in {'gcc', 'clang'}:
for name in {'ct', 'ct0'}:
ct_dep = PkgConfigDependency(name, env, kwargs)
@@ -7069,7 +7072,7 @@ class LinuxlikeTests(BasePlatformTests):
'''
testdir = os.path.join(self.common_test_dir, '36 has function')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cpp = env.detect_cpp_compiler(MachineChoice.HOST)
+ cpp = detect_cpp_compiler(env, MachineChoice.HOST)
Oflag = '-O3'
OflagCPP = Oflag
if cpp.get_id() in ('clang', 'gcc'):
@@ -7161,7 +7164,7 @@ class LinuxlikeTests(BasePlatformTests):
'''
testdir = os.path.join(self.common_test_dir, '1 trivial')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
self._test_stds_impl(testdir, cc)
def test_compiler_cpp_stds(self):
@@ -7171,7 +7174,7 @@ class LinuxlikeTests(BasePlatformTests):
'''
testdir = os.path.join(self.common_test_dir, '2 cpp')
env = get_fake_env(testdir, self.builddir, self.prefix)
- cpp = env.detect_cpp_compiler(MachineChoice.HOST)
+ cpp = detect_cpp_compiler(env, MachineChoice.HOST)
self._test_stds_impl(testdir, cpp)
def test_unity_subproj(self):
@@ -8011,7 +8014,7 @@ class LinuxlikeTests(BasePlatformTests):
if is_cygwin() or is_osx():
raise unittest.SkipTest('Not applicable on Cygwin or OSX.')
env = get_fake_env()
- cc = env.detect_c_compiler(MachineChoice.HOST)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
linker = cc.linker
if not linker.export_dynamic_args(env):
raise unittest.SkipTest('Not applicable for linkers without --export-dynamic')
@@ -8124,7 +8127,7 @@ class LinuxlikeTests(BasePlatformTests):
for envvar in envvars:
with mock.patch.dict(os.environ, {envvar: name}):
env = get_fake_env()
- comp = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST)
+ comp = compiler_from_language(env, lang, MachineChoice.HOST)
if isinstance(comp, (mesonbuild.compilers.AppleClangCCompiler,
mesonbuild.compilers.AppleClangCPPCompiler,
mesonbuild.compilers.AppleClangObjCCompiler,
@@ -8910,8 +8913,7 @@ class NativeFileTests(BasePlatformTests):
with more than one implementation, such as C, C++, ObjC, ObjC++, and D.
"""
env = get_fake_env()
- getter = getattr(env, f'detect_{lang}_compiler')
- getter = functools.partial(getter, for_machine)
+ getter = lambda: compiler_from_language(env, lang, for_machine)
cc = getter()
binary, newid = cb(cc)
env.binaries[for_machine].binaries[lang] = binary
@@ -9115,10 +9117,8 @@ class NativeFileTests(BasePlatformTests):
"""
wrapper = self.helper_create_binary_wrapper(binary, version=version_str)
env = get_fake_env()
- getter = getattr(env, f'detect_{lang}_compiler')
- getter = functools.partial(getter, MachineChoice.HOST)
env.binaries.host.binaries[lang] = [wrapper]
- compiler = getter()
+ compiler = compiler_from_language(env, lang, MachineChoice.HOST)
self.assertEqual(compiler.version, version)
@skip_if_not_language('vala')
@@ -9145,7 +9145,7 @@ class NativeFileTests(BasePlatformTests):
extra_args={'Xlinker': 'macosx_version. PROJECT:ld - 1.2.3'})
env = get_fake_env()
env.binaries.host.binaries['swift'] = [wrapper]
- compiler = env.detect_swift_compiler(MachineChoice.HOST)
+ compiler = detect_swift_compiler(env, MachineChoice.HOST)
self.assertEqual(compiler.version, '1.2345')
def test_native_file_dirs(self):
@@ -10023,7 +10023,7 @@ class SubprojectsCommandTests(BasePlatformTests):
# If a user has git configuration init.defaultBranch set we want to override that
with tempfile.TemporaryDirectory() as d:
out = git(['--version'], str(d))[1]
- if version_compare(mesonbuild.environment.search_version(out), '>= 2.28'):
+ if version_compare(search_version(out), '>= 2.28'):
extra_cmd = ['--initial-branch', 'master']
else:
extra_cmd = []