]> granicus.if.org Git - python/commitdiff
Merged revisions 76651 via svnmerge from
authorMartin v. Löwis <martin@v.loewis.de>
Thu, 3 Dec 2009 20:56:15 +0000 (20:56 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Thu, 3 Dec 2009 20:56:15 +0000 (20:56 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r76651 | martin.v.loewis | 2009-12-03 21:53:51 +0100 (Do, 03 Dez 2009) | 3 lines

  Issue #4120: Drop reference to CRT from manifest when building
  extensions with msvc9compiler.
........

Lib/distutils/msvc9compiler.py
Misc/NEWS

index 68b77758306c7cf1904362ad4402aad57e67e943..9bf54c102d34870f25d4a50b14fa156b61a8c316 100644 (file)
@@ -17,6 +17,7 @@ __revision__ = "$Id$"
 import os
 import subprocess
 import sys
+import re
 from distutils.errors import (DistutilsExecError, DistutilsPlatformError,
     CompileError, LibError, LinkError)
 from distutils.ccompiler import (CCompiler, gen_preprocess_options,
@@ -641,7 +642,32 @@ class MSVCCompiler(CCompiler) :
             # will still consider the DLL up-to-date, but it will not have a
             # manifest.  Maybe we should link to a temp file?  OTOH, that
             # implies a build environment error that shouldn't go undetected.
-            mfid = 1 if target_desc == CCompiler.EXECUTABLE else 2
+            if target_desc == CCompiler.EXECUTABLE:
+                mfid = 1
+            else:
+                mfid = 2
+                try:
+                    # Remove references to the Visual C runtime, so they will
+                    # fall through to the Visual C dependency of Python.exe.
+                    # This way, when installed for a restricted user (e.g.
+                    # runtimes are not in WinSxS folder, but in Python's own
+                    # folder), the runtimes do not need to be in every folder
+                    # with .pyd's.
+                    manifest_f = open(temp_manifest, "rb")
+                    manifest_buf = manifest_f.read()
+                    manifest_f.close()
+                    pattern = re.compile(
+                        r"""<assemblyIdentity.*?name=("|')Microsoft\."""\
+                        r"""VC\d{2}\.CRT("|').*?(/>|</assemblyIdentity>)""",
+                        re.DOTALL)
+                    manifest_buf = re.sub(pattern, "", manifest_buf)
+                    pattern = "<dependentAssembly>\s*</dependentAssembly>"
+                    manifest_buf = re.sub(pattern, "", manifest_buf)
+                    manifest_f = open(temp_manifest, "wb")
+                    manifest_f.write(manifest_buf)
+                    manifest_f.close()
+                except IOError:
+                    pass
             out_arg = '-outputresource:%s;%s' % (output_filename, mfid)
             try:
                 self.spawn(['mt.exe', '-nologo', '-manifest',
index 8df76747e871c6c37e515093aa3c284e007b26df..cd1d157fd6ca327c253d6199cb112e9fdda7b430 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -33,6 +33,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #4120: Drop reference to CRT from manifest when building extensions with
+  msvc9compiler.
+
 - Issue #7410: deepcopy of itertools.count() erroneously reset the count.
 
 - Issue #7403: logging: Fixed possible race condition in lock creation.