diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2020-08-02 09:56:57 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2020-08-02 09:56:57 -0400 |
commit | c2fcb01de1306ec7171bd4cd6c2db20be6011cbd (patch) | |
tree | a04e1838faa5085204f453e4153fa697b69a76c7 | |
parent | 5578b4466d236ba3516a9df726e0c08a2eea3f06 (diff) | |
parent | 51b75e95de717a7d37bd1915a104a9e830fe5651 (diff) | |
download | external_python_setuptools-c2fcb01de1306ec7171bd4cd6c2db20be6011cbd.tar.gz external_python_setuptools-c2fcb01de1306ec7171bd4cd6c2db20be6011cbd.tar.bz2 external_python_setuptools-c2fcb01de1306ec7171bd4cd6c2db20be6011cbd.zip |
Merge branch 'clean' of https://github.com/pypa/distutils into master
-rw-r--r-- | setuptools/_distutils/_msvccompiler.py | 6 | ||||
-rw-r--r-- | setuptools/_distutils/ccompiler.py | 4 | ||||
-rw-r--r-- | setuptools/_distutils/tests/test_msvccompiler.py | 37 |
3 files changed, 43 insertions, 4 deletions
diff --git a/setuptools/_distutils/_msvccompiler.py b/setuptools/_distutils/_msvccompiler.py index 0e98692e..2d56ee0a 100644 --- a/setuptools/_distutils/_msvccompiler.py +++ b/setuptools/_distutils/_msvccompiler.py @@ -15,7 +15,9 @@ for older versions in distutils.msvc9compiler and distutils.msvccompiler. import os import subprocess -import winreg +import contextlib +with contextlib.suppress(ImportError): + import winreg from distutils.errors import DistutilsExecError, DistutilsPlatformError, \ CompileError, LibError, LinkError @@ -501,7 +503,7 @@ class MSVCCompiler(CCompiler) : log.debug("skipping %s (up-to-date)", output_filename) def spawn(self, cmd): - env = dict(os.environ, path=self._paths) + env = dict(os.environ, PATH=self._paths) return super().spawn(cmd, env=env) # -- Miscellaneous methods ----------------------------------------- diff --git a/setuptools/_distutils/ccompiler.py b/setuptools/_distutils/ccompiler.py index b5ef143e..57bb94e8 100644 --- a/setuptools/_distutils/ccompiler.py +++ b/setuptools/_distutils/ccompiler.py @@ -906,8 +906,8 @@ int main (int argc, char **argv) { def execute(self, func, args, msg=None, level=1): execute(func, args, msg, self.dry_run) - def spawn(self, cmd): - spawn(cmd, dry_run=self.dry_run) + def spawn(self, cmd, **kwargs): + spawn(cmd, dry_run=self.dry_run, **kwargs) def move_file(self, src, dst): return move_file(src, dst, dry_run=self.dry_run) diff --git a/setuptools/_distutils/tests/test_msvccompiler.py b/setuptools/_distutils/tests/test_msvccompiler.py index b518d6a7..88d912b1 100644 --- a/setuptools/_distutils/tests/test_msvccompiler.py +++ b/setuptools/_distutils/tests/test_msvccompiler.py @@ -2,6 +2,7 @@ import sys import unittest import os +import threading from distutils.errors import DistutilsPlatformError from distutils.tests import support @@ -74,6 +75,42 @@ class msvccompilerTestCase(support.TempdirManager, else: raise unittest.SkipTest("VS 2015 is not installed") + +class CheckThread(threading.Thread): + exc_info = None + + def run(self): + try: + super().run() + except Exception: + self.exc_info = sys.exc_info() + + def __bool__(self): + return not self.exc_info + + +class TestSpawn(unittest.TestCase): + def test_concurrent_safe(self): + """ + Concurrent calls to spawn should have consistent results. + """ + import distutils._msvccompiler as _msvccompiler + compiler = _msvccompiler.MSVCCompiler() + compiler._paths = "expected" + inner_cmd = 'import os; assert os.environ["PATH"] == "expected"' + command = ['python', '-c', inner_cmd] + + threads = [ + CheckThread(target=compiler.spawn, args=[command]) + for n in range(100) + ] + for thread in threads: + thread.start() + for thread in threads: + thread.join() + assert all(threads) + + def test_suite(): return unittest.makeSuite(msvccompilerTestCase) |