OLD | NEW |
1 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 # for details. All rights reserved. Use of this source code is governed by a | 2 # for details. All rights reserved. Use of this source code is governed by a |
3 # BSD-style license that can be found in the LICENSE file. | 3 # BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 # This file contains a set of utilities functions used by other Python-based | 5 # This file contains a set of utilities functions used by other Python-based |
6 # scripts. | 6 # scripts. |
7 | 7 |
8 import commands | 8 import commands |
9 import os | 9 import os |
10 import platform | 10 import platform |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 def GuessCpus(): | 53 def GuessCpus(): |
54 if os.path.exists("/proc/cpuinfo"): | 54 if os.path.exists("/proc/cpuinfo"): |
55 return int(commands.getoutput("grep -E '^processor' /proc/cpuinfo | wc -l")) | 55 return int(commands.getoutput("grep -E '^processor' /proc/cpuinfo | wc -l")) |
56 if os.path.exists("/usr/bin/hostinfo"): | 56 if os.path.exists("/usr/bin/hostinfo"): |
57 return int(commands.getoutput('/usr/bin/hostinfo | grep "processors are logi
cally available." | awk "{ print \$1 }"')) | 57 return int(commands.getoutput('/usr/bin/hostinfo | grep "processors are logi
cally available." | awk "{ print \$1 }"')) |
58 win_cpu_count = os.getenv("NUMBER_OF_PROCESSORS") | 58 win_cpu_count = os.getenv("NUMBER_OF_PROCESSORS") |
59 if win_cpu_count: | 59 if win_cpu_count: |
60 return int(win_cpu_count) | 60 return int(win_cpu_count) |
61 return int(os.getenv("DART_NUMBER_OF_CORES", 2)) | 61 return int(os.getenv("DART_NUMBER_OF_CORES", 2)) |
62 | 62 |
| 63 def GetWindowsRegistryKeyName(name): |
| 64 import win32process |
| 65 # Check if python process is 64-bit or if it's 32-bit running in 64-bit OS. |
| 66 # We need to know whether host is 64-bit so that we are looking in right |
| 67 # registry for Visual Studio path. |
| 68 if sys.maxsize > 2**32 or win32process.IsWow64Process(): |
| 69 wow6432Node = 'Wow6432Node\\' |
| 70 else: |
| 71 wow6432Node = '' |
| 72 return r'SOFTWARE\%s%s' % (wow6432Node, name) |
| 73 |
| 74 # Try to guess Visual Studio location when buiding on Windows. |
| 75 def GuessVisualStudioPath(): |
| 76 defaultPath = r"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7" \ |
| 77 r"\IDE" |
| 78 defaultExecutable = "devenv.com" |
| 79 |
| 80 if not IsWindows(): |
| 81 return (defaultPath, defaultExecutable) |
| 82 |
| 83 keyNamesAndExecutables = [ |
| 84 # Pair for non-Express editions. |
| 85 (GetWindowsRegistryKeyName(r'Microsoft\VisualStudio'), 'devenv.com'), |
| 86 # Pair for 2012 Express edition. |
| 87 (GetWindowsRegistryKeyName(r'Microsoft\VSWinExpress'), 'VSWinExpress.exe'), |
| 88 # Pair for pre-2012 Express editions. |
| 89 (GetWindowsRegistryKeyName(r'Microsoft\VCExpress'), 'VCExpress.exe')] |
| 90 |
| 91 bestGuess = (0.0, (defaultPath, defaultExecutable)) |
| 92 |
| 93 import _winreg |
| 94 for (keyName, executable) in keyNamesAndExecutables: |
| 95 try: |
| 96 key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, keyName) |
| 97 except WindowsError: |
| 98 # Can't find this key - moving on the next one. |
| 99 continue |
| 100 |
| 101 try: |
| 102 subkeyCounter = 0 |
| 103 while True: |
| 104 try: |
| 105 subkeyName = _winreg.EnumKey(key, subkeyCounter) |
| 106 subkeyCounter = subkeyCounter + 1 |
| 107 except WindowsError: |
| 108 # Reached end of enumeration. Moving on the next key. |
| 109 break |
| 110 |
| 111 match = re.match(r'^\d+\.\d+$', subkeyName) |
| 112 if match: |
| 113 with _winreg.OpenKey(key, subkeyName) as subkey: |
| 114 try: |
| 115 (installDir, registrytype) = _winreg.QueryValueEx(subkey, |
| 116 'InstallDir') |
| 117 except WindowsError: |
| 118 # Can't find value under the key - continue to the next key. |
| 119 continue |
| 120 isExpress = executable != 'devenv.com' |
| 121 if not isExpress and subkeyName == '10.0': |
| 122 # Stop search since if we found non-Express VS2010 version |
| 123 # installed, which is preferred version. |
| 124 return (installDir, executable) |
| 125 else: |
| 126 version = float(subkeyName) |
| 127 # We prefer higher version of Visual Studio and given equal |
| 128 # version numbers we prefer non-Express edition. |
| 129 if version > bestGuess[0]: |
| 130 bestGuess = (version, (installDir, executable)) |
| 131 finally: |
| 132 _winreg.CloseKey(key) |
| 133 return bestGuess[1] |
| 134 |
63 | 135 |
64 # Returns true if we're running under Windows. | 136 # Returns true if we're running under Windows. |
65 def IsWindows(): | 137 def IsWindows(): |
66 return GuessOS() == 'win32' | 138 return GuessOS() == 'win32' |
67 | 139 |
68 | 140 |
69 # Reads a text file into an array of strings - one for each | 141 # Reads a text file into an array of strings - one for each |
70 # line. Strips comments in the process. | 142 # line. Strips comments in the process. |
71 def ReadLinesFrom(name): | 143 def ReadLinesFrom(name): |
72 result = [] | 144 result = [] |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 os.unlink(name) | 336 os.unlink(name) |
265 except OSError, e: | 337 except OSError, e: |
266 PrintError("os.unlink() " + str(e)) | 338 PrintError("os.unlink() " + str(e)) |
267 | 339 |
268 | 340 |
269 def Main(argv): | 341 def Main(argv): |
270 print "GuessOS() -> ", GuessOS() | 342 print "GuessOS() -> ", GuessOS() |
271 print "GuessArchitecture() -> ", GuessArchitecture() | 343 print "GuessArchitecture() -> ", GuessArchitecture() |
272 print "GuessCpus() -> ", GuessCpus() | 344 print "GuessCpus() -> ", GuessCpus() |
273 print "IsWindows() -> ", IsWindows() | 345 print "IsWindows() -> ", IsWindows() |
| 346 print "GuessVisualStudioPath() -> ", GuessVisualStudioPath() |
274 | 347 |
275 | 348 |
276 class Error(Exception): | 349 class Error(Exception): |
277 pass | 350 pass |
278 | 351 |
279 | 352 |
280 class ToolError(Exception): | 353 class ToolError(Exception): |
281 """Deprecated exception, use Error instead.""" | 354 """Deprecated exception, use Error instead.""" |
282 | 355 |
283 def __init__(self, value): | 356 def __init__(self, value): |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 | 394 |
322 def DartSdkBinary(): | 395 def DartSdkBinary(): |
323 tools_dir = os.path.dirname(os.path.realpath(__file__)) | 396 tools_dir = os.path.dirname(os.path.realpath(__file__)) |
324 dart_binary_prefix = os.path.join(tools_dir, '..', 'sdk' , 'bin') | 397 dart_binary_prefix = os.path.join(tools_dir, '..', 'sdk' , 'bin') |
325 return os.path.join(dart_binary_prefix, 'dart') | 398 return os.path.join(dart_binary_prefix, 'dart') |
326 | 399 |
327 | 400 |
328 if __name__ == "__main__": | 401 if __name__ == "__main__": |
329 import sys | 402 import sys |
330 Main(sys.argv) | 403 Main(sys.argv) |
OLD | NEW |