diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index 12f7838a4..da9a5dc07 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -1674,6 +1674,9 @@ class VisualStudioCCompiler(CCompiler): return '14.0' # (Visual Studio 2015) elif version < 1920: return '14.1' # (Visual Studio 2017) + elif version < 1930: + return '14.2' # (Visual Studio 2019) + mlog.warning('Could not find toolset for version {!r}'.format(self.version)) return None def get_default_include_dirs(self): diff --git a/run_unittests.py b/run_unittests.py index aa93ee39e..b28eab287 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -958,6 +958,22 @@ class InternalTests(unittest.TestCase): self.assertEqual(ver_a.__cmp__(ver_b), result) self.assertEqual(ver_b.__cmp__(ver_a), -result) + def test_msvc_toolset_version(self): + ''' + Ensure that the toolset version returns the correct value for this MSVC + ''' + env = get_fake_env() + cc = env.detect_c_compiler(False) + if cc.get_argument_syntax() != 'msvc': + raise unittest.SkipTest('Test only applies to MSVC-like compilers') + toolset_ver = cc.get_toolset_version() + self.assertIsNotNone(toolset_ver) + self.assertIn('VCToolsVersion', os.environ) + vctools_ver = os.environ['VCToolsVersion'] + self.assertTrue(vctools_ver.startswith(toolset_ver), + msg='{!r} does not start with {!r}'.format(vctools_ver, toolset_ver)) + + @unittest.skipIf(is_tarball(), 'Skipping because this is a tarball release') class DataTests(unittest.TestCase):