| """Tests for distutils._msvccompiler.""" |
| import sys |
| import unittest |
| import os |
| |
| from distutils.errors import DistutilsPlatformError |
| from distutils.tests import support |
| from test.support import run_unittest |
| |
| |
| SKIP_MESSAGE = (None if sys.platform == "win32" else |
| "These tests are only for win32") |
| |
| @unittest.skipUnless(SKIP_MESSAGE is None, SKIP_MESSAGE) |
| class msvccompilerTestCase(support.TempdirManager, |
| unittest.TestCase): |
| |
| def test_no_compiler(self): |
| import distutils._msvccompiler as _msvccompiler |
| # makes sure query_vcvarsall raises |
| # a DistutilsPlatformError if the compiler |
| # is not found |
| def _find_vcvarsall(plat_spec): |
| return None, None |
| |
| old_find_vcvarsall = _msvccompiler._find_vcvarsall |
| _msvccompiler._find_vcvarsall = _find_vcvarsall |
| try: |
| self.assertRaises(DistutilsPlatformError, |
| _msvccompiler._get_vc_env, |
| 'wont find this version') |
| finally: |
| _msvccompiler._find_vcvarsall = old_find_vcvarsall |
| |
| def test_compiler_options(self): |
| import distutils._msvccompiler as _msvccompiler |
| # suppress path to vcruntime from _find_vcvarsall to |
| # check that /MT is added to compile options |
| old_find_vcvarsall = _msvccompiler._find_vcvarsall |
| def _find_vcvarsall(plat_spec): |
| return old_find_vcvarsall(plat_spec)[0], None |
| _msvccompiler._find_vcvarsall = _find_vcvarsall |
| try: |
| compiler = _msvccompiler.MSVCCompiler() |
| compiler.initialize() |
| |
| self.assertIn('/MT', compiler.compile_options) |
| self.assertNotIn('/MD', compiler.compile_options) |
| finally: |
| _msvccompiler._find_vcvarsall = old_find_vcvarsall |
| |
| def test_vcruntime_copy(self): |
| import distutils._msvccompiler as _msvccompiler |
| # force path to a known file - it doesn't matter |
| # what we copy as long as its name is not in |
| # _msvccompiler._BUNDLED_DLLS |
| old_find_vcvarsall = _msvccompiler._find_vcvarsall |
| def _find_vcvarsall(plat_spec): |
| return old_find_vcvarsall(plat_spec)[0], __file__ |
| _msvccompiler._find_vcvarsall = _find_vcvarsall |
| try: |
| tempdir = self.mkdtemp() |
| compiler = _msvccompiler.MSVCCompiler() |
| compiler.initialize() |
| compiler._copy_vcruntime(tempdir) |
| |
| self.assertTrue(os.path.isfile(os.path.join( |
| tempdir, os.path.basename(__file__)))) |
| finally: |
| _msvccompiler._find_vcvarsall = old_find_vcvarsall |
| |
| def test_vcruntime_skip_copy(self): |
| import distutils._msvccompiler as _msvccompiler |
| |
| tempdir = self.mkdtemp() |
| compiler = _msvccompiler.MSVCCompiler() |
| compiler.initialize() |
| dll = compiler._vcruntime_redist |
| self.assertTrue(os.path.isfile(dll)) |
| |
| compiler._copy_vcruntime(tempdir) |
| |
| self.assertFalse(os.path.isfile(os.path.join( |
| tempdir, os.path.basename(dll)))) |
| |
| def test_suite(): |
| return unittest.makeSuite(msvccompilerTestCase) |
| |
| if __name__ == "__main__": |
| run_unittest(test_suite()) |