From: DongHun Kwak Date: Tue, 29 Dec 2020 22:07:34 +0000 (+0900) Subject: Imported Upstream version 49.2.1 X-Git-Tag: upstream/49.2.1^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eebcef94c92239e24ff24480acda3d1481fa5f99;p=platform%2Fupstream%2Fpython-setuptools.git Imported Upstream version 49.2.1 --- diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 9b3e408..b534af1 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 49.2.0 +current_version = 49.2.1 commit = True tag = True diff --git a/.github/ISSUE_TEMPLATE/blank.md b/.github/ISSUE_TEMPLATE/blank.md deleted file mode 100644 index e41fc74..0000000 --- a/.github/ISSUE_TEMPLATE/blank.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -name: Bug Report or Feature Request -about: Report a bug or request a feature ---- diff --git a/.github/ISSUE_TEMPLATE/setuptools-warns-about-python-2-incompatibility.md b/.github/ISSUE_TEMPLATE/setuptools-warns-about-python-2-incompatibility.md deleted file mode 100644 index 1a4f58f..0000000 --- a/.github/ISSUE_TEMPLATE/setuptools-warns-about-python-2-incompatibility.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -name: Setuptools warns about Python 2 incompatibility -about: Report the issue where setuptools 45 or later stops working on Python 2 -title: Incompatible install in (summarize your environment) -labels: Python 2 -assignees: '' - ---- - - - -## Prerequisites - - - -- [ ] Read [Python 2 Sunset docs](https://setuptools.readthedocs.io/en/latest/python%202%20sunset.html). -- [ ] Python 2 is required for this application. -- [ ] I maintain the software that installs Setuptools (if not, please contact that project). -- [ ] Setuptools installed with pip 9 or later. -- [ ] Pinning Setuptools to `setuptools<45` in the environment was unsuccessful. - -## Environment Details - -- Operating System and version: -- Python version: -- Python installed how: -- Virtualenv version (if using virtualenv): n/a - -Command(s) that triggered the warning/error (and output): - -``` -``` - -Command(s) used to install setuptools (and output): - -``` -``` - -Output of `pip --version` when installing setuptools: - -``` -``` - -## Other notes diff --git a/CHANGES.rst b/CHANGES.rst index 82e6ef6..519330e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,9 @@ +v49.2.1 +------- + +* #2257: Fixed two flaws in distutils._msvccompiler.MSVCCompiler.spawn. + + v49.2.0 ------- diff --git a/README.rst b/README.rst index dc2bf98..824a033 100644 --- a/README.rst +++ b/README.rst @@ -1,6 +1,3 @@ -.. image:: https://raw.githubusercontent.com/pypa/setuptools/master/docs/logo/banner%201%20line%20color.svg - - .. image:: https://img.shields.io/pypi/v/setuptools.svg :target: `PyPI link`_ @@ -27,7 +24,6 @@ .. image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme - See the `Installation Instructions `_ in the Python Packaging User's Guide for instructions on installing, upgrading, and uninstalling @@ -58,4 +54,4 @@ Code of Conduct Everyone interacting in the setuptools project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the -`PyPA Code of Conduct `_. +`PSF Code of Conduct `_. diff --git a/docs/distutils-legacy.txt b/docs/distutils-legacy.txt new file mode 100644 index 0000000..a5d9626 --- /dev/null +++ b/docs/distutils-legacy.txt @@ -0,0 +1,25 @@ +Porting from Distutils +====================== + +Setuptools and the PyPA have a `stated goal `_ to make Setuptools the reference API for distutils. + +Since the 49.1.2 release, Setuptools includes a local, vendored copy of distutils (from late copies of CPython) that is disabled by default. To enable the use of this copy of distutils when invoking setuptools, set the enviroment variable: + + SETUPTOOLS_USE_DISTUTILS=local + +This behavior is planned to become the default. + +Prefer Setuptools +----------------- + +As Distutils is deprecated, any usage of functions or objects from distutils is similarly discouraged, and Setuptools aims to replace or deprecate all such uses. This section describes the recommended replacements. + +``distutils.core.setup`` → ``setuptools.setup`` + +``distutils.cmd.Command`` → ``setuptools.Command`` + +``distutils.log`` → (no replacement yet) + +``distutils.version.*`` → ``packaging.version.*`` + +If a project relies on uses of ``distutils`` that do not have a suitable replacement above, please search the `Setuptools issue tracker `_ and file a request, describing the use-case so that Setuptools' maintainers can investigate. Please provide enough detail to help the maintainers understand how distutils is used, what value it provides, and why that behavior should be supported. diff --git a/docs/index.txt b/docs/index.txt index 228f97c..5ee17ea 100644 --- a/docs/index.txt +++ b/docs/index.txt @@ -1,6 +1,3 @@ -.. image:: https://raw.githubusercontent.com/pypa/setuptools/master/docs/logo/banner%201%20line%20color.svg - - Documentation ============= @@ -18,4 +15,5 @@ Documentation content: development roadmap Deprecated: Easy Install + distutils-legacy history diff --git a/docs/logo/README.md b/docs/logo/README.md deleted file mode 100644 index 74fadbf..0000000 --- a/docs/logo/README.md +++ /dev/null @@ -1,10 +0,0 @@ -![](setup_tools_logo_colour.svg) -### Design: - -Setuptools logo designed in 2020 by [C.Rogers](crogersmedia.com) for the Setuptools project using the Free Open Source graphics editor [Inkscape](inkscape.org). - -### Copyright: -Logo is (c) the Setuptools developers. - -### Font: -The font used is the Open Font "Josefin Sans", which is available for free under the Open Font License (OFL). diff --git a/docs/logo/banner 1 line color.png b/docs/logo/banner 1 line color.png deleted file mode 100644 index d160428..0000000 Binary files a/docs/logo/banner 1 line color.png and /dev/null differ diff --git a/docs/logo/banner 1 line color.svg b/docs/logo/banner 1 line color.svg deleted file mode 100644 index d6dc9aa..0000000 --- a/docs/logo/banner 1 line color.svg +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/docs/logo/banner 2 lines color.png b/docs/logo/banner 2 lines color.png deleted file mode 100644 index 89370a9..0000000 Binary files a/docs/logo/banner 2 lines color.png and /dev/null differ diff --git a/docs/logo/banner 2 lines color.svg b/docs/logo/banner 2 lines color.svg deleted file mode 100644 index 991577f..0000000 --- a/docs/logo/banner 2 lines color.svg +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/docs/logo/full color 1000px.png b/docs/logo/full color 1000px.png deleted file mode 100644 index c25a23b..0000000 Binary files a/docs/logo/full color 1000px.png and /dev/null differ diff --git a/docs/logo/full color.svg b/docs/logo/full color.svg deleted file mode 100644 index 7eae8fc..0000000 --- a/docs/logo/full color.svg +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/docs/logo/josefinsans/.uuid b/docs/logo/josefinsans/.uuid deleted file mode 100644 index d7e92c7..0000000 --- a/docs/logo/josefinsans/.uuid +++ /dev/null @@ -1 +0,0 @@ -922c129c-9f4c-4831-b632-c7f43be6feb0 \ No newline at end of file diff --git a/docs/logo/josefinsans/DESCRIPTION.en_us.html b/docs/logo/josefinsans/DESCRIPTION.en_us.html deleted file mode 100644 index 9364b24..0000000 --- a/docs/logo/josefinsans/DESCRIPTION.en_us.html +++ /dev/null @@ -1,9 +0,0 @@ -

-The idea of this typeface is to be geometric, elegant, with a vintage feeling, for use at larger sizes. -It is inspired by geometric sans serif designs from the 1920s. -The x-height is half way from baseline to cap height, an unusual proportion. -

-

-There is a sister family, Josefin Slab -

- diff --git a/docs/logo/josefinsans/JosefinSans-Bold.ttf b/docs/logo/josefinsans/JosefinSans-Bold.ttf deleted file mode 100644 index 12a7ad0..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-Bold.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/JosefinSans-BoldItalic.ttf b/docs/logo/josefinsans/JosefinSans-BoldItalic.ttf deleted file mode 100644 index 4a0fc91..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-BoldItalic.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/JosefinSans-Italic.ttf b/docs/logo/josefinsans/JosefinSans-Italic.ttf deleted file mode 100644 index 1cbe036..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-Italic.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/JosefinSans-Light.ttf b/docs/logo/josefinsans/JosefinSans-Light.ttf deleted file mode 100644 index 7fe3f7b..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-Light.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/JosefinSans-LightItalic.ttf b/docs/logo/josefinsans/JosefinSans-LightItalic.ttf deleted file mode 100644 index 8dc3538..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-LightItalic.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/JosefinSans-Regular.ttf b/docs/logo/josefinsans/JosefinSans-Regular.ttf deleted file mode 100644 index ed11900..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-Regular.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/JosefinSans-SemiBold.ttf b/docs/logo/josefinsans/JosefinSans-SemiBold.ttf deleted file mode 100644 index b67504a..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-SemiBold.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/JosefinSans-SemiBoldItalic.ttf b/docs/logo/josefinsans/JosefinSans-SemiBoldItalic.ttf deleted file mode 100644 index 24a27d1..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-SemiBoldItalic.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/JosefinSans-Thin.ttf b/docs/logo/josefinsans/JosefinSans-Thin.ttf deleted file mode 100644 index c54ca7f..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-Thin.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/JosefinSans-ThinItalic.ttf b/docs/logo/josefinsans/JosefinSans-ThinItalic.ttf deleted file mode 100644 index 6840b7c..0000000 Binary files a/docs/logo/josefinsans/JosefinSans-ThinItalic.ttf and /dev/null differ diff --git a/docs/logo/josefinsans/METADATA.pb b/docs/logo/josefinsans/METADATA.pb deleted file mode 100644 index 8b67716..0000000 --- a/docs/logo/josefinsans/METADATA.pb +++ /dev/null @@ -1,99 +0,0 @@ -name: "Josefin Sans" -designer: "Santiago Orozco" -license: "OFL" -category: "SANS_SERIF" -date_added: "2010-11-17" -fonts { - name: "Josefin Sans" - style: "normal" - weight: 100 - filename: "JosefinSans-Thin.ttf" - post_script_name: "JosefinSans-Thin" - full_name: "Josefin Sans Thin" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -fonts { - name: "Josefin Sans" - style: "italic" - weight: 100 - filename: "JosefinSans-ThinItalic.ttf" - post_script_name: "JosefinSans-ThinItalic" - full_name: "Josefin Sans Thin Italic" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -fonts { - name: "Josefin Sans" - style: "normal" - weight: 300 - filename: "JosefinSans-Light.ttf" - post_script_name: "JosefinSans-Light" - full_name: "Josefin Sans Light" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -fonts { - name: "Josefin Sans" - style: "italic" - weight: 300 - filename: "JosefinSans-LightItalic.ttf" - post_script_name: "JosefinSans-LightItalic" - full_name: "Josefin Sans Light Italic" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -fonts { - name: "Josefin Sans" - style: "normal" - weight: 400 - filename: "JosefinSans-Regular.ttf" - post_script_name: "JosefinSans-Regular" - full_name: "Josefin Sans Regular" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -fonts { - name: "Josefin Sans" - style: "italic" - weight: 400 - filename: "JosefinSans-Italic.ttf" - post_script_name: "JosefinSans-Italic" - full_name: "Josefin Sans Italic" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -fonts { - name: "Josefin Sans" - style: "normal" - weight: 600 - filename: "JosefinSans-SemiBold.ttf" - post_script_name: "JosefinSans-SemiBold" - full_name: "Josefin Sans SemiBold" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -fonts { - name: "Josefin Sans" - style: "italic" - weight: 600 - filename: "JosefinSans-SemiBoldItalic.ttf" - post_script_name: "JosefinSans-SemiBoldItalic" - full_name: "Josefin Sans SemiBold Italic" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -fonts { - name: "Josefin Sans" - style: "normal" - weight: 700 - filename: "JosefinSans-Bold.ttf" - post_script_name: "JosefinSans-Bold" - full_name: "Josefin Sans Bold" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -fonts { - name: "Josefin Sans" - style: "italic" - weight: 700 - filename: "JosefinSans-BoldItalic.ttf" - post_script_name: "JosefinSans-BoldItalic" - full_name: "Josefin Sans Bold Italic" - copyright: "Copyright 2010 The Josefin Sans Project Authors (https://github.com/ThomasJockin/JosefinSansFont-master), with Reserved Font Name \"Josefin Sans\"." -} -subsets: "latin" -subsets: "latin-ext" -subsets: "menu" -subsets: "vietnamese" diff --git a/docs/logo/josefinsans/OFL.txt b/docs/logo/josefinsans/OFL.txt deleted file mode 100644 index 6586a7e..0000000 --- a/docs/logo/josefinsans/OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2010, Santiago Orozco (hi@typemade.mx) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/logo/symbol color 1000px.png b/docs/logo/symbol color 1000px.png deleted file mode 100644 index e0c36fc..0000000 Binary files a/docs/logo/symbol color 1000px.png and /dev/null differ diff --git a/docs/logo/symbol color.svg b/docs/logo/symbol color.svg deleted file mode 100644 index 2936cbb..0000000 --- a/docs/logo/symbol color.svg +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/docs/logo/type.svg b/docs/logo/type.svg deleted file mode 100644 index dbb9c1d..0000000 --- a/docs/logo/type.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/setup.cfg b/setup.cfg index fa0e565..485714a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -16,7 +16,7 @@ formats = zip [metadata] name = setuptools -version = 49.2.0 +version = 49.2.1 description = Easily download, build, install, upgrade, and uninstall Python packages author = Python Packaging Authority author_email = distutils-sig@python.org diff --git a/setuptools/_distutils/_msvccompiler.py b/setuptools/_distutils/_msvccompiler.py index 0e98692..2d56ee0 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 b5ef143..57bb94e 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 b518d6a..88d912b 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)