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 = (None, (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]: | |
kustermann
2013/02/19 08:38:23
The first time we hit this comparision, we compare
aam-me
2013/02/19 11:58:53
Done. Thanks, didn't know that.
| |
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 |