Skip to content

Commit

Permalink
Fix typo when fetching buildtype option for compiler checks
Browse files Browse the repository at this point in the history
This type happened in #7432
and wasn't noticed because I didn't add a test for it. Rectified now.

If we don't specify the CRT, MSVC will pick /MT by default (!?) and
link to `libcmt.lib`. This actually *breaks* UWP because `libcmt.lib`
is not available by default when building for UWP.

Was noticed here: cisco/libsrtp#505
  • Loading branch information
nirbheek committed Aug 27, 2020
1 parent 17439fa commit 6f74692
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 1 deletion.
2 changes: 1 addition & 1 deletion mesonbuild/compilers/mixins/clike.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ def _get_basic_compiler_args(self, env, mode: str):
# us in that case and will error out asking us to pick one.
try:
crt_val = env.coredata.base_options['b_vscrt'].value
buildtype = env.coredata.base_options['buildtype'].value
buildtype = env.coredata.builtins['buildtype'].value
cargs += self.get_crt_compile_args(crt_val, buildtype)
except (KeyError, AttributeError):
pass
Expand Down
53 changes: 53 additions & 0 deletions run_unittests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1780,6 +1780,15 @@ def get_meson_log_compiler_checks(self):
cmds = [l[len(prefix):].split() for l in log if l.startswith(prefix)]
return cmds

def get_meson_log_sanitychecks(self):
'''
Same as above, but for the sanity checks that were run
'''
log = self.get_meson_log()
prefix = 'Sanity check compiler command line:'
cmds = [l[len(prefix):].split() for l in log if l.startswith(prefix)]
return cmds

def introspect(self, args):
if isinstance(args, str):
args = [args]
Expand Down Expand Up @@ -5640,6 +5649,50 @@ def test_qt5dependency_vscrt(self):
m = re.search('build qt5core.exe: cpp_LINKER.*Qt5Cored.lib', contents)
self.assertIsNotNone(m, msg=contents)

def test_compiler_checks_vscrt(self):
'''
Test that the correct VS CRT is used when running compiler checks
'''
# Verify that the `b_vscrt` option is available
env = get_fake_env()
cc = env.detect_c_compiler(MachineChoice.HOST)
if 'b_vscrt' not in cc.base_options:
raise unittest.SkipTest('Compiler does not support setting the VS CRT')

def sanitycheck_vscrt(vscrt):
checks = self.get_meson_log_sanitychecks()
self.assertTrue(len(checks) > 0)
for check in checks:
self.assertIn(vscrt, check)

testdir = os.path.join(self.common_test_dir, '1 trivial')
self.init(testdir)
sanitycheck_vscrt('/MDd')

self.new_builddir()
self.init(testdir, extra_args=['-Dbuildtype=debugoptimized'])
sanitycheck_vscrt('/MD')

self.new_builddir()
self.init(testdir, extra_args=['-Dbuildtype=release'])
sanitycheck_vscrt('/MD')

self.new_builddir()
self.init(testdir, extra_args=['-Db_vscrt=md'])
sanitycheck_vscrt('/MD')

self.new_builddir()
self.init(testdir, extra_args=['-Db_vscrt=mdd'])
sanitycheck_vscrt('/MDd')

self.new_builddir()
self.init(testdir, extra_args=['-Db_vscrt=mt'])
sanitycheck_vscrt('/MT')

self.new_builddir()
self.init(testdir, extra_args=['-Db_vscrt=mtd'])
sanitycheck_vscrt('/MTd')


@unittest.skipUnless(is_osx(), "requires Darwin")
class DarwinTests(BasePlatformTests):
Expand Down

0 comments on commit 6f74692

Please # to comment.