91 lines
3.2 KiB
Python
91 lines
3.2 KiB
Python
|
"""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())
|