Index: recipe_engine/third_party/setuptools/msvc9_support.py |
diff --git a/recipe_engine/third_party/setuptools/msvc9_support.py b/recipe_engine/third_party/setuptools/msvc9_support.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d0be70e2a9b98031224872907e5dc7275f6d06c9 |
--- /dev/null |
+++ b/recipe_engine/third_party/setuptools/msvc9_support.py |
@@ -0,0 +1,64 @@ |
+import sys |
+ |
+try: |
+ import distutils.msvc9compiler |
+except ImportError: |
+ pass |
+ |
+unpatched = dict() |
+ |
+def patch_for_specialized_compiler(): |
+ """ |
+ Patch functions in distutils.msvc9compiler to use the standalone compiler |
+ build for Python (Windows only). Fall back to original behavior when the |
+ standalone compiler is not available. |
+ """ |
+ if 'distutils' not in globals(): |
+ # The module isn't available to be patched |
+ return |
+ |
+ if unpatched: |
+ # Already patched |
+ return |
+ |
+ unpatched.update(vars(distutils.msvc9compiler)) |
+ |
+ distutils.msvc9compiler.find_vcvarsall = find_vcvarsall |
+ distutils.msvc9compiler.query_vcvarsall = query_vcvarsall |
+ |
+def find_vcvarsall(version): |
+ Reg = distutils.msvc9compiler.Reg |
+ VC_BASE = r'Software\%sMicrosoft\DevDiv\VCForPython\%0.1f' |
+ try: |
+ # Per-user installs register the compiler path here |
+ productdir = Reg.get_value(VC_BASE % ('', version), "installdir") |
+ except KeyError: |
+ try: |
+ # All-user installs on a 64-bit system register here |
+ productdir = Reg.get_value(VC_BASE % ('Wow6432Node\\', version), "installdir") |
+ except KeyError: |
+ productdir = None |
+ |
+ if productdir: |
+ import os |
+ vcvarsall = os.path.join(productdir, "vcvarsall.bat") |
+ if os.path.isfile(vcvarsall): |
+ return vcvarsall |
+ |
+ return unpatched['find_vcvarsall'](version) |
+ |
+def query_vcvarsall(version, *args, **kwargs): |
+ try: |
+ return unpatched['query_vcvarsall'](version, *args, **kwargs) |
+ except distutils.errors.DistutilsPlatformError: |
+ exc = sys.exc_info()[1] |
+ if exc and "vcvarsall.bat" in exc.args[0]: |
+ message = 'Microsoft Visual C++ %0.1f is required (%s).' % (version, exc.args[0]) |
+ if int(version) == 9: |
+ # This redirection link is maintained by Microsoft. |
+ # Contact vspython@microsoft.com if it needs updating. |
+ raise distutils.errors.DistutilsPlatformError( |
+ message + ' Get it from http://aka.ms/vcpython27' |
+ ) |
+ raise distutils.errors.DistutilsPlatformError(message) |
+ raise |