mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	Merged revisions 76993-76994 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r76993 | tarek.ziade | 2009-12-22 00:12:41 +0100 (Tue, 22 Dec 2009) | 1 line Fixed #7556: editing the MSVC manifest file with a regexp was throwing an error ........ r76994 | tarek.ziade | 2009-12-22 00:16:09 +0100 (Tue, 22 Dec 2009) | 1 line forgot to add the win32 test in the unittest skip call ........
This commit is contained in:
		
							parent
							
								
									35ce4a07ee
								
							
						
					
					
						commit
						b7e82bb7dd
					
				
					 3 changed files with 113 additions and 29 deletions
				
			
		|  | @ -646,28 +646,8 @@ def link(self, | |||
|                 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 | ||||
|                 # Remove references to the Visual C runtime | ||||
|                 self._remove_visual_c_ref(temp_manifest) | ||||
|             out_arg = '-outputresource:%s;%s' % (output_filename, mfid) | ||||
|             try: | ||||
|                 self.spawn(['mt.exe', '-nologo', '-manifest', | ||||
|  | @ -677,6 +657,33 @@ def link(self, | |||
|         else: | ||||
|             log.debug("skipping %s (up-to-date)", output_filename) | ||||
| 
 | ||||
|     def _remove_visual_c_ref(self, manifest_file): | ||||
|         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(manifest_file) | ||||
|             try: | ||||
|                 manifest_buf = manifest_f.read() | ||||
|             finally: | ||||
|                 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(manifest_file, 'w') | ||||
|             try: | ||||
|                 manifest_f.write(manifest_buf) | ||||
|             finally: | ||||
|                 manifest_f.close() | ||||
|         except IOError: | ||||
|             pass | ||||
| 
 | ||||
|     # -- Miscellaneous methods ----------------------------------------- | ||||
|     # These are all used by the 'gen_lib_options() function, in | ||||
|  |  | |||
|  | @ -1,18 +1,73 @@ | |||
| """Tests for distutils.msvc9compiler.""" | ||||
| import sys | ||||
| import unittest | ||||
| import os | ||||
| 
 | ||||
| from distutils.errors import DistutilsPlatformError | ||||
| from distutils.tests import support | ||||
| 
 | ||||
| class msvc9compilerTestCase(unittest.TestCase): | ||||
| _MANIFEST = """\ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <assembly xmlns="urn:schemas-microsoft-com:asm.v1" | ||||
|           manifestVersion="1.0"> | ||||
|   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> | ||||
|     <security> | ||||
|       <requestedPrivileges> | ||||
|         <requestedExecutionLevel level="asInvoker" uiAccess="false"> | ||||
|         </requestedExecutionLevel> | ||||
|       </requestedPrivileges> | ||||
|     </security> | ||||
|   </trustInfo> | ||||
|   <dependency> | ||||
|     <dependentAssembly> | ||||
|       <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" | ||||
|          version="9.0.21022.8" processorArchitecture="x86" | ||||
|          publicKeyToken="XXXX"> | ||||
|       </assemblyIdentity> | ||||
|     </dependentAssembly> | ||||
|   </dependency> | ||||
|   <dependency> | ||||
|     <dependentAssembly> | ||||
|       <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" | ||||
|         version="9.0.21022.8" processorArchitecture="x86" | ||||
|         publicKeyToken="XXXX"></assemblyIdentity> | ||||
|     </dependentAssembly> | ||||
|   </dependency> | ||||
| </assembly> | ||||
| """ | ||||
| 
 | ||||
| _CLEANED_MANIFEST = """\ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <assembly xmlns="urn:schemas-microsoft-com:asm.v1" | ||||
|           manifestVersion="1.0"> | ||||
|   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> | ||||
|     <security> | ||||
|       <requestedPrivileges> | ||||
|         <requestedExecutionLevel level="asInvoker" uiAccess="false"> | ||||
|         </requestedExecutionLevel> | ||||
|       </requestedPrivileges> | ||||
|     </security> | ||||
|   </trustInfo> | ||||
|   <dependency> | ||||
| 
 | ||||
|   </dependency> | ||||
|   <dependency> | ||||
|     <dependentAssembly> | ||||
|       <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" | ||||
|         version="9.0.21022.8" processorArchitecture="x86" | ||||
|         publicKeyToken="XXXX"></assemblyIdentity> | ||||
|     </dependentAssembly> | ||||
|   </dependency> | ||||
| </assembly>""" | ||||
| 
 | ||||
| @unittest.skipUnless(sys.platform=="win32", "These tests are only for win32") | ||||
| class msvc9compilerTestCase(support.TempdirManager, | ||||
|                             unittest.TestCase): | ||||
| 
 | ||||
|     def test_no_compiler(self): | ||||
|         # makes sure query_vcvarsall throws | ||||
|         # a DistutilsPlatformError if the compiler | ||||
|         # is not found | ||||
|         if sys.platform != 'win32': | ||||
|             # this test is only for win32 | ||||
|             return | ||||
|         from distutils.msvccompiler import get_build_version | ||||
|         if get_build_version() < 8.0: | ||||
|             # this test is only for MSVC8.0 or above | ||||
|  | @ -31,9 +86,6 @@ def _find_vcvarsall(version): | |||
|             msvc9compiler.find_vcvarsall = old_find_vcvarsall | ||||
| 
 | ||||
|     def test_reg_class(self): | ||||
|         if sys.platform != 'win32': | ||||
|             # this test is only for win32 | ||||
|             return | ||||
|         from distutils.msvccompiler import get_build_version | ||||
|         if get_build_version() < 8.0: | ||||
|             # this test is only for MSVC8.0 or above | ||||
|  | @ -56,6 +108,27 @@ def test_reg_class(self): | |||
|         keys = Reg.read_keys(HKCU, r'Control Panel') | ||||
|         self.assertTrue('Desktop' in keys) | ||||
| 
 | ||||
|     def test_remove_visual_c_ref(self): | ||||
|         from distutils.msvc9compiler import MSVCCompiler | ||||
|         tempdir = self.mkdtemp() | ||||
|         manifest = os.path.join(tempdir, 'manifest') | ||||
|         f = open(manifest, 'w') | ||||
|         f.write(_MANIFEST) | ||||
|         f.close() | ||||
| 
 | ||||
|         compiler = MSVCCompiler() | ||||
|         compiler._remove_visual_c_ref(manifest) | ||||
| 
 | ||||
|         # see what we got | ||||
|         f = open(manifest) | ||||
|         # removing trailing spaces | ||||
|         content = '\n'.join([line.rstrip() for line in f.readlines()]) | ||||
|         f.close() | ||||
| 
 | ||||
|         # makes sure the manifest was properly cleaned | ||||
|         self.assertEquals(content, _CLEANED_MANIFEST) | ||||
| 
 | ||||
| 
 | ||||
| def test_suite(): | ||||
|     return unittest.makeSuite(msvc9compilerTestCase) | ||||
| 
 | ||||
|  |  | |||
|  | @ -58,6 +58,10 @@ Core and Builtins | |||
| Library | ||||
| ------- | ||||
| 
 | ||||
| - Issue #7556: Make sure Distutils' msvc9compile reads and writes the | ||||
|   MSVC XML Manifest file in text mode so string patterns can be used  | ||||
|   in regular expressions. | ||||
| 
 | ||||
| - Issue #7552: Removed line feed in the base64 Authorization header in | ||||
|   the Distutils upload command to avoid an error when PyPI reads it. | ||||
|   This occurs on long passwords. Initial patch by JP St. Pierre. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Tarek Ziadé
						Tarek Ziadé