| OLD | NEW | 
|    1 # Copyright 2014 The Chromium Authors. All rights reserved. |    1 # Copyright 2014 The Chromium Authors. All rights reserved. | 
|    2 # Use of this source code is governed by a BSD-style license that can be |    2 # Use of this source code is governed by a BSD-style license that can be | 
|    3 # found in the LICENSE file. |    3 # found in the LICENSE file. | 
|    4  |    4  | 
|    5 """ |    5 """ | 
|    6 From a system-installed copy of the toolchain, packages all the required bits |    6 From a system-installed copy of the toolchain, packages all the required bits | 
|    7 into a .zip file. |    7 into a .zip file. | 
|    8  |    8  | 
|    9 It assumes default install locations for tools, in particular: |    9 It assumes default install locations for tools, in particular: | 
|   10 - C:\Program Files (x86)\Microsoft Visual Studio 12.0\... |   10 - C:\Program Files (x86)\Microsoft Visual Studio 12.0\... | 
|   11 - C:\Program Files (x86)\Windows Kits\10\... |   11 - C:\Program Files (x86)\Windows Kits\10\... | 
|   12  |   12  | 
|   13 1. Start from a fresh Win7 VM image. |   13 1. Start from a fresh Win7 VM image. | 
|   14 2. Install VS Pro. Deselect everything except MFC. |   14 2. Install VS Pro. Deselect everything except MFC. | 
|   15 3. Install Windows 10 SDK. Select only the Windows SDK and Debugging Tools for |   15 3. Install Windows 10 SDK. Select only the Windows SDK and Debugging Tools for | 
|   16 Windows. |   16 Windows. | 
|   17 4. Run this script, which will build a <sha1>.zip. |   17 4. Run this script, which will build a <sha1>.zip. | 
|   18  |   18  | 
|   19 Express is not yet supported by this script, but patches welcome (it's not too |   19 Express is not yet supported by this script, but patches welcome (it's not too | 
|   20 useful as the resulting zip can't be redistributed, and most will presumably |   20 useful as the resulting zip can't be redistributed, and most will presumably | 
|   21 have a Pro license anyway). |   21 have a Pro license anyway). | 
|   22 """ |   22 """ | 
|   23  |   23  | 
 |   24 import glob | 
|   24 import optparse |   25 import optparse | 
|   25 import os |   26 import os | 
|   26 import platform |   27 import platform | 
|   27 import shutil |   28 import shutil | 
|   28 import sys |   29 import sys | 
|   29 import tempfile |   30 import tempfile | 
|   30 import zipfile |   31 import zipfile | 
|   31  |   32  | 
|   32 import get_toolchain_if_necessary |   33 import get_toolchain_if_necessary | 
|   33  |   34  | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
|   60         ('VC/redist/Debug_NonRedist/x86/Microsoft.VC120.DebugCRT', 'sys32'), |   61         ('VC/redist/Debug_NonRedist/x86/Microsoft.VC120.DebugCRT', 'sys32'), | 
|   61         ('VC/redist/Debug_NonRedist/x86/Microsoft.VC120.DebugMFC', 'sys32'), |   62         ('VC/redist/Debug_NonRedist/x86/Microsoft.VC120.DebugMFC', 'sys32'), | 
|   62         ('VC/redist/x64/Microsoft.VC120.CRT', 'sys64'), |   63         ('VC/redist/x64/Microsoft.VC120.CRT', 'sys64'), | 
|   63         ('VC/redist/x64/Microsoft.VC120.MFC', 'sys64'), |   64         ('VC/redist/x64/Microsoft.VC120.MFC', 'sys64'), | 
|   64         ('VC/redist/Debug_NonRedist/x64/Microsoft.VC120.DebugCRT', 'sys64'), |   65         ('VC/redist/Debug_NonRedist/x64/Microsoft.VC120.DebugCRT', 'sys64'), | 
|   65         ('VC/redist/Debug_NonRedist/x64/Microsoft.VC120.DebugMFC', 'sys64'), |   66         ('VC/redist/Debug_NonRedist/x64/Microsoft.VC120.DebugMFC', 'sys64'), | 
|   66     ] |   67     ] | 
|   67   elif VS_VERSION == '2015': |   68   elif VS_VERSION == '2015': | 
|   68     paths += [ |   69     paths += [ | 
|   69         ('VC/redist/x86/Microsoft.VC140.CRT', 'sys32'), |   70         ('VC/redist/x86/Microsoft.VC140.CRT', 'sys32'), | 
 |   71         ('VC/redist/x86/Microsoft.VC140.CRT', 'win_sdk/bin/x86'), | 
|   70         ('VC/redist/x86/Microsoft.VC140.MFC', 'sys32'), |   72         ('VC/redist/x86/Microsoft.VC140.MFC', 'sys32'), | 
|   71         ('VC/redist/debug_nonredist/x86/Microsoft.VC140.DebugCRT', 'sys32'), |   73         ('VC/redist/debug_nonredist/x86/Microsoft.VC140.DebugCRT', 'sys32'), | 
|   72         ('VC/redist/debug_nonredist/x86/Microsoft.VC140.DebugMFC', 'sys32'), |   74         ('VC/redist/debug_nonredist/x86/Microsoft.VC140.DebugMFC', 'sys32'), | 
|   73         ('VC/redist/x64/Microsoft.VC140.CRT', 'sys64'), |   75         ('VC/redist/x64/Microsoft.VC140.CRT', 'sys64'), | 
 |   76         ('VC/redist/x64/Microsoft.VC140.CRT', 'VC/bin/amd64_x86'), | 
 |   77         ('VC/redist/x64/Microsoft.VC140.CRT', 'VC/bin/amd64'), | 
 |   78         ('VC/redist/x64/Microsoft.VC140.CRT', 'win_sdk/bin/x64'), | 
|   74         ('VC/redist/x64/Microsoft.VC140.MFC', 'sys64'), |   79         ('VC/redist/x64/Microsoft.VC140.MFC', 'sys64'), | 
|   75         ('VC/redist/debug_nonredist/x64/Microsoft.VC140.DebugCRT', 'sys64'), |   80         ('VC/redist/debug_nonredist/x64/Microsoft.VC140.DebugCRT', 'sys64'), | 
|   76         ('VC/redist/debug_nonredist/x64/Microsoft.VC140.DebugMFC', 'sys64'), |   81         ('VC/redist/debug_nonredist/x64/Microsoft.VC140.DebugMFC', 'sys64'), | 
|   77     ] |   82     ] | 
|   78   else: |   83   else: | 
|   79     raise ValueError('VS_VERSION %s' % VS_VERSION) |   84     raise ValueError('VS_VERSION %s' % VS_VERSION) | 
|   80  |   85  | 
|   81   if VS_VERSION == '2013': |   86   if VS_VERSION == '2013': | 
|   82     vs_path = r'C:\Program Files (x86)\Microsoft Visual Studio 12.0' |   87     vs_path = r'C:\Program Files (x86)\Microsoft Visual Studio 12.0' | 
|   83   else: |   88   else: | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  144         'Windows6.1-KB2999226-x64.msu', |  149         'Windows6.1-KB2999226-x64.msu', | 
|  145         'Windows8-RT-KB2999226-x64.msu', |  150         'Windows8-RT-KB2999226-x64.msu', | 
|  146         'Windows8.1-KB2999226-x64.msu', |  151         'Windows8.1-KB2999226-x64.msu', | 
|  147     ] |  152     ] | 
|  148  |  153  | 
|  149     for installer in universal_runtime_installers: |  154     for installer in universal_runtime_installers: | 
|  150       result.append((os.path.join(os.environ['userprofile'], 'downloads', |  155       result.append((os.path.join(os.environ['userprofile'], 'downloads', | 
|  151                                   installer), |  156                                   installer), | 
|  152                      os.path.join('installers', installer))) |  157                      os.path.join('installers', installer))) | 
|  153  |  158  | 
|  154     system_crt_files = [ |  159     if VS_VERSION == '2015': | 
|  155         # Needed to let debug binaries run. |  160       # Copy the x86 ucrt DLLs to all directories with 32-bit binaries that are | 
|  156         'ucrtbased.dll', |  161       # added to the path by SetEnv.cmd, and to sys32. | 
|  157     ] |  162       ucrt_paths = glob.glob(os.path.join(sdk_path, r'redist\ucrt\dlls\x86\*')) | 
|  158     bitness = platform.architecture()[0] |  163       for ucrt_path in ucrt_paths: | 
|  159     # When running 64-bit python the x64 DLLs will be in System32 |  164         ucrt_file = os.path.split(ucrt_path)[1] | 
|  160     x64_path = 'System32' if bitness == '64bit' else 'Sysnative' |  165         for dest_dir in [ r'win_sdk\bin\x86', 'sys32' ]: | 
|  161     x64_path = os.path.join(r'C:\Windows', x64_path) |  166           result.append((ucrt_path, os.path.join(dest_dir, ucrt_file))) | 
|  162     for system_crt_file in system_crt_files: |  167  | 
|  163         result.append((os.path.join(r'C:\Windows\SysWOW64', system_crt_file), |  168       # Copy the x64 ucrt DLLs to all directories with 64-bit binaries that are | 
|  164                        os.path.join('sys32', system_crt_file))) |  169       # added to the path by SetEnv.cmd, and to sys64. | 
|  165         result.append((os.path.join(x64_path, system_crt_file), |  170       ucrt_paths = glob.glob(os.path.join(sdk_path, r'redist\ucrt\dlls\x64\*')) | 
|  166                        os.path.join('sys64', system_crt_file))) |  171       for ucrt_path in ucrt_paths: | 
 |  172         ucrt_file = os.path.split(ucrt_path)[1] | 
 |  173         for dest_dir in [ r'VC\bin\amd64_x86', r'VC\bin\amd64', | 
 |  174                           r'win_sdk\bin\x64', 'sys64']: | 
 |  175           result.append((ucrt_path, os.path.join(dest_dir, ucrt_file))) | 
 |  176  | 
 |  177       system_crt_files = [ | 
 |  178           # Needed to let debug binaries run. | 
 |  179           'ucrtbased.dll', | 
 |  180       ] | 
 |  181       bitness = platform.architecture()[0] | 
 |  182       # When running 64-bit python the x64 DLLs will be in System32 | 
 |  183       x64_path = 'System32' if bitness == '64bit' else 'Sysnative' | 
 |  184       x64_path = os.path.join(r'C:\Windows', x64_path) | 
 |  185       for system_crt_file in system_crt_files: | 
 |  186           result.append((os.path.join(r'C:\Windows\SysWOW64', system_crt_file), | 
 |  187                          os.path.join('sys32', system_crt_file))) | 
 |  188           result.append((os.path.join(x64_path, system_crt_file), | 
 |  189                          os.path.join('sys64', system_crt_file))) | 
|  167  |  190  | 
|  168   # Generically drop all arm stuff that we don't need, and |  191   # Generically drop all arm stuff that we don't need, and | 
|  169   # drop .msi files because we don't need installers. |  192   # drop .msi files because we don't need installers. | 
|  170   return [(f, t) for f, t in result if 'arm\\' not in f.lower() and |  193   return [(f, t) for f, t in result if 'arm\\' not in f.lower() and | 
|  171                                        'arm64\\' not in f.lower() and |  194                                        'arm64\\' not in f.lower() and | 
|  172                                        not f.lower().endswith('.msi')] |  195                                        not f.lower().endswith('.msi')] | 
|  173  |  196  | 
|  174  |  197  | 
|  175 def GenerateSetEnvCmd(target_dir): |  198 def GenerateSetEnvCmd(target_dir): | 
|  176   """Generate a batch file that gyp expects to exist to set up the compiler |  199   """Generate a batch file that gyp expects to exist to set up the compiler | 
|  177   environment. |  200   environment. | 
|  178  |  201  | 
|  179   This is normally generated by a full install of the SDK, but we |  202   This is normally generated by a full install of the SDK, but we | 
|  180   do it here manually since we do not do a full install.""" |  203   do it here manually since we do not do a full install.""" | 
|  181   with open(os.path.join( |  204   with open(os.path.join( | 
|  182         target_dir, r'win_sdk\bin\SetEnv.cmd'), 'w') as f: |  205         target_dir, r'win_sdk\bin\SetEnv.cmd'), 'w') as f: | 
|  183     f.write('@echo off\n' |  206     f.write('@echo off\n' | 
|  184             ':: Generated by win_toolchain\\package_from_installed.py.\n' |  207             ':: Generated by win_toolchain\\package_from_installed.py.\n' | 
|  185             # Common to x86 and x64 |  208             # Common to x86 and x64 | 
|  186             'set VSINSTALLDIR=%~dp0..\\..\\\n' |  209             'set VSINSTALLDIR=%~dp0..\\..\\\n' | 
|  187             'set VCINSTALLDIR=%~dp0..\\..\\VC\\\n' |  210             'set VCINSTALLDIR=%~dp0..\\..\\VC\\\n' | 
|  188             'set PATH=%~dp0..\\..\\Common7\\IDE;%PATH%\n' |  | 
|  189             'set INCLUDE=%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\um;' |  211             'set INCLUDE=%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\um;' | 
|  190             '%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\shared;' |  212             '%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\shared;' | 
|  191             '%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\winrt;'.replace( |  213             '%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\winrt;'.replace( | 
|  192                 'WINVERSION', WIN_VERSION)) |  214                 'WINVERSION', WIN_VERSION)) | 
|  193     if VS_VERSION == '2015': |  215     if VS_VERSION == '2015': | 
|  194       f.write('%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\ucrt;'.replace( |  216       f.write('%~dp0..\\..\\win_sdk\\Include\\WINVERSION\\ucrt;'.replace( | 
|  195                   'WINVERSION', WIN_VERSION)) |  217                   'WINVERSION', WIN_VERSION)) | 
|  196     f.write('%~dp0..\\..\\VC\\include;' |  218     f.write('%~dp0..\\..\\VC\\include;' | 
|  197             '%~dp0..\\..\\VC\\atlmfc\\include\n') |  219             '%~dp0..\\..\\VC\\atlmfc\\include\n') | 
|  198  |  220  | 
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  321   sys.stdout.write('\rWrote to %s.%s\n' % (output, ' '*50)) |  343   sys.stdout.write('\rWrote to %s.%s\n' % (output, ' '*50)) | 
|  322   sys.stdout.flush() |  344   sys.stdout.flush() | 
|  323  |  345  | 
|  324   RenameToSha1(output) |  346   RenameToSha1(output) | 
|  325  |  347  | 
|  326   return 0 |  348   return 0 | 
|  327  |  349  | 
|  328  |  350  | 
|  329 if __name__ == '__main__': |  351 if __name__ == '__main__': | 
|  330   sys.exit(main()) |  352   sys.exit(main()) | 
| OLD | NEW |