Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: win_toolchain/get_toolchain_if_necessary.py

Issue 1614663003: Locate appropriate "winreg" module under both native Win32 and CygWin. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Downloads and unpacks a toolchain for building on Windows. The contents are 6 """Downloads and unpacks a toolchain for building on Windows. The contents are
7 matched by sha1 which will be updated when the toolchain is updated. 7 matched by sha1 which will be updated when the toolchain is updated.
8 8
9 Having a toolchain script in depot_tools means that it's not versioned 9 Having a toolchain script in depot_tools means that it's not versioned
10 directly with the source code. That is, if the toolchain is upgraded, but 10 directly with the source code. That is, if the toolchain is upgraded, but
11 you're trying to build an historical version of Chromium from before the 11 you're trying to build an historical version of Chromium from before the
12 toolchain upgrade, this will cause you to build with a newer toolchain than 12 toolchain upgrade, this will cause you to build with a newer toolchain than
13 was available when that code was committed. This is done for a two main 13 was available when that code was committed. This is done for a two main
14 reasons: 1) it would likely be annoying to have the up-to-date toolchain 14 reasons: 1) it would likely be annoying to have the up-to-date toolchain
15 removed and replaced by one without a service pack applied); 2) it would 15 removed and replaced by one without a service pack applied); 2) it would
16 require maintaining scripts that can build older not-up-to-date revisions of 16 require maintaining scripts that can build older not-up-to-date revisions of
17 the toolchain. This is likely to be a poorly tested code path that probably 17 the toolchain. This is likely to be a poorly tested code path that probably
18 won't be properly maintained. See http://crbug.com/323300. 18 won't be properly maintained. See http://crbug.com/323300.
19 19
20 This does not extend to major versions of the toolchain however, on the 20 This does not extend to major versions of the toolchain however, on the
21 assumption that there are more likely to be source incompatibilities between 21 assumption that there are more likely to be source incompatibilities between
22 major revisions. This script calls a subscript (currently, toolchain2013.py) 22 major revisions. This script calls a subscript (currently, toolchain2013.py)
23 to do the main work. It is expected that toolchain2013.py will always be able 23 to do the main work. It is expected that toolchain2013.py will always be able
24 to acquire/build the most current revision of a VS2013-based toolchain. In the 24 to acquire/build the most current revision of a VS2013-based toolchain. In the
25 future when a hypothetical VS2015 is released, the 2013 script will be 25 future when a hypothetical VS2015 is released, the 2013 script will be
26 maintained, and a new 2015 script would be added. 26 maintained, and a new 2015 script would be added.
27 """ 27 """
28 28
29 import _winreg
30 import hashlib 29 import hashlib
31 import json 30 import json
32 import optparse 31 import optparse
33 import os 32 import os
34 import platform 33 import platform
35 import shutil 34 import shutil
36 import subprocess 35 import subprocess
37 import sys 36 import sys
38 import tempfile 37 import tempfile
39 import time 38 import time
40 import zipfile 39 import zipfile
41 40
41 # winreg isn't natively available under CygWin
42 if sys.platform == "win32":
43 try:
44 import winreg
brucedawson 2016/01/21 21:03:22 Why are you importing winreg? Why not just "import
45 except ImportError:
46 import _winreg as winreg
47 elif sys.platform == "cygwin":
48 try:
49 import cygwinreg as winreg
50 except ImportError:
51 print ''
52 print 'CygWin does not natively support winreg but a replacement exists.'
53 print 'https://pypi.python.org/pypi/cygwinreg/'
54 print ''
55 print 'Try: easy_install cygwinreg'
56 print ''
57 raise
42 58
43 BASEDIR = os.path.dirname(os.path.abspath(__file__)) 59 BASEDIR = os.path.dirname(os.path.abspath(__file__))
44 DEPOT_TOOLS_PATH = os.path.join(BASEDIR, '..') 60 DEPOT_TOOLS_PATH = os.path.join(BASEDIR, '..')
45 sys.path.append(DEPOT_TOOLS_PATH) 61 sys.path.append(DEPOT_TOOLS_PATH)
46 try: 62 try:
47 import download_from_google_storage 63 import download_from_google_storage
48 except ImportError: 64 except ImportError:
49 # Allow use of utility functions in this script from package_from_installed 65 # Allow use of utility functions in this script from package_from_installed
50 # on bare VM that doesn't have a full depot_tools. 66 # on bare VM that doesn't have a full depot_tools.
51 pass 67 pass
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 236
221 237
222 def GetInstallerName(): 238 def GetInstallerName():
223 """Return the name of the Windows 10 Universal C Runtime installer for the 239 """Return the name of the Windows 10 Universal C Runtime installer for the
224 current platform, or None if installer is not needed or not applicable. 240 current platform, or None if installer is not needed or not applicable.
225 The registry has to be used instead of sys.getwindowsversion() because 241 The registry has to be used instead of sys.getwindowsversion() because
226 Python 2.7 is only manifested as being compatible up to Windows 8, so the 242 Python 2.7 is only manifested as being compatible up to Windows 8, so the
227 version APIs helpfully return a maximum of 6.2 (Windows 8). 243 version APIs helpfully return a maximum of 6.2 (Windows 8).
228 """ 244 """
229 key_name = r'Software\Microsoft\Windows NT\CurrentVersion' 245 key_name = r'Software\Microsoft\Windows NT\CurrentVersion'
230 key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, key_name) 246 key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_name)
231 value, keytype = _winreg.QueryValueEx(key, "CurrentVersion") 247 value, keytype = winreg.QueryValueEx(key, "CurrentVersion")
232 key.Close() 248 key.Close()
233 if keytype != _winreg.REG_SZ: 249 if keytype != winreg.REG_SZ:
234 raise Exception("Unexpected type in registry") 250 raise Exception("Unexpected type in registry")
235 if value == '6.1': 251 if value == '6.1':
236 # Windows 7 and Windows Server 2008 R2 252 # Windows 7 and Windows Server 2008 R2
237 return 'Windows6.1-KB2999226-x64.msu' 253 return 'Windows6.1-KB2999226-x64.msu'
238 elif value == '6.2': 254 elif value == '6.2':
239 # Windows 8 and Windows Server 2012 255 # Windows 8 and Windows Server 2012
240 return 'Windows8-RT-KB2999226-x64.msu' 256 return 'Windows8-RT-KB2999226-x64.msu'
241 elif value == '6.3': 257 elif value == '6.3':
242 # Windows 8.1, Windows Server 2012 R2, and Windows 10. 258 # Windows 8.1, Windows Server 2012 R2, and Windows 10.
243 # The Windows 8.1 installer doesn't work on Windows 10, but it will never 259 # The Windows 8.1 installer doesn't work on Windows 10, but it will never
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 options.output_json) 424 options.output_json)
409 425
410 if os.environ.get('GYP_MSVS_VERSION') == '2015': 426 if os.environ.get('GYP_MSVS_VERSION') == '2015':
411 InstallUniversalCRTIfNeeded(abs_target_dir) 427 InstallUniversalCRTIfNeeded(abs_target_dir)
412 428
413 return 0 429 return 0
414 430
415 431
416 if __name__ == '__main__': 432 if __name__ == '__main__':
417 sys.exit(main()) 433 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698