| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 """Determine OS and various other system properties. | 6 """Determine OS and various other system properties. |
| 7 | 7 |
| 8 Determine the name of the platform used and other system properties such as | 8 Determine the name of the platform used and other system properties such as |
| 9 the location of Chrome. This is used, for example, to determine the correct | 9 the location of Chrome. This is used, for example, to determine the correct |
| 10 Toolchain to invoke. | 10 Toolchain to invoke. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 if name == "Chrome Revision": | 77 if name == "Chrome Revision": |
| 78 revision = value.strip() | 78 revision = value.strip() |
| 79 if name == "Chrome Commit Position": | 79 if name == "Chrome Commit Position": |
| 80 commit_position = value.strip() | 80 commit_position = value.strip() |
| 81 | 81 |
| 82 if revision is None or version is None or commit_position is None: | 82 if revision is None or version is None or commit_position is None: |
| 83 raise Error("error parsing SDK README: %s" % readme) | 83 raise Error("error parsing SDK README: %s" % readme) |
| 84 | 84 |
| 85 try: | 85 try: |
| 86 version = int(version) | 86 version = int(version) |
| 87 revision = int(revision) |
| 87 except ValueError: | 88 except ValueError: |
| 88 raise Error("error parsing SDK README: %s" % readme) | 89 raise Error("error parsing SDK README: %s" % readme) |
| 89 | 90 |
| 90 return (version, revision, commit_position) | 91 return (version, revision, commit_position) |
| 91 | 92 |
| 92 | 93 |
| 93 def GetSystemArch(platform): | 94 def GetSystemArch(platform): |
| 94 if platform == 'win': | 95 if platform == 'win': |
| 95 if UseWin64(): | 96 if UseWin64(): |
| 96 return 'x86_64' | 97 return 'x86_64' |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 | 177 |
| 177 arch = match.group(2) | 178 arch = match.group(2) |
| 178 if 'arm' in arch: | 179 if 'arm' in arch: |
| 179 return 'arm' | 180 return 'arm' |
| 180 if '64' in arch: | 181 if '64' in arch: |
| 181 return 'x86_64' | 182 return 'x86_64' |
| 182 return 'x86_32' | 183 return 'x86_32' |
| 183 | 184 |
| 184 | 185 |
| 185 def ParseVersion(version): | 186 def ParseVersion(version): |
| 187 """Parses a version number of the form '<major>.<position>'. |
| 188 |
| 189 <position> is the Cr-Commit-Position number. |
| 190 """ |
| 186 if '.' in version: | 191 if '.' in version: |
| 187 version = version.split('.') | 192 version = version.split('.') |
| 188 else: | 193 else: |
| 189 version = (version, '0') | 194 version = (version, '0') |
| 190 | 195 |
| 191 try: | 196 try: |
| 192 return tuple(int(x) for x in version) | 197 return tuple(int(x) for x in version) |
| 193 except ValueError: | 198 except ValueError: |
| 194 raise Error('error parsing SDK version: %s' % version) | 199 raise Error('error parsing SDK version: %s' % version) |
| 195 | 200 |
| 196 | 201 |
| 202 def CheckVersion(required_version): |
| 203 """Determines whether the current SDK version meets the required version. |
| 204 |
| 205 Args: |
| 206 required_version: (major, position) pair, where position is the |
| 207 Cr-Commit-Position number. |
| 208 |
| 209 Raises: |
| 210 Error: The SDK version is older than required_version. |
| 211 """ |
| 212 version = GetSDKVersion()[:2] |
| 213 if version < required_version: |
| 214 raise Error("SDK version too old (current: %d.%d, required: %d.%d)" |
| 215 % (version[0], version[1], required_version[0], required_version[1])) |
| 216 |
| 217 |
| 197 def main(args): | 218 def main(args): |
| 198 parser = optparse.OptionParser() | 219 parser = optparse.OptionParser() |
| 199 parser.add_option('--arch', action='store_true', | 220 parser.add_option('--arch', action='store_true', |
| 200 help='Print architecture of current machine (x86_32, x86_64 or arm).') | 221 help='Print architecture of current machine (x86_32, x86_64 or arm).') |
| 201 parser.add_option('--chrome', action='store_true', | 222 parser.add_option('--chrome', action='store_true', |
| 202 help='Print the path chrome (by first looking in $CHROME_PATH and ' | 223 help='Print the path chrome (by first looking in $CHROME_PATH and ' |
| 203 'then $PATH).') | 224 'then $PATH).') |
| 204 parser.add_option('--nacl-arch', action='store_true', | 225 parser.add_option('--nacl-arch', action='store_true', |
| 205 help='Print architecture used by NaCl on the current machine.') | 226 help='Print architecture used by NaCl on the current machine.') |
| 206 parser.add_option('--sdk-version', action='store_true', | 227 parser.add_option('--sdk-version', action='store_true', |
| 207 help='Print major version of the NaCl SDK.') | 228 help='Print major version of the NaCl SDK.') |
| 208 parser.add_option('--sdk-revision', action='store_true', | 229 parser.add_option('--sdk-revision', action='store_true', |
| 209 help='Print revision number of the NaCl SDK.') | 230 help='Print revision number of the NaCl SDK.') |
| 210 parser.add_option('--sdk-commit-position', action='store_true', | 231 parser.add_option('--sdk-commit-position', action='store_true', |
| 211 help='Print commit position of the NaCl SDK.') | 232 help='Print commit position of the NaCl SDK.') |
| 212 parser.add_option('--check-version', | 233 parser.add_option('--check-version', |
| 234 metavar='MAJOR.POSITION', |
| 213 help='Check that the SDK version is at least as great as the ' | 235 help='Check that the SDK version is at least as great as the ' |
| 214 'version passed in.') | 236 'version passed in. MAJOR is the major version number and POSITION ' |
| 237 'is the Cr-Commit-Position number.') |
| 215 | 238 |
| 216 options, _ = parser.parse_args(args) | 239 options, _ = parser.parse_args(args) |
| 217 | 240 |
| 218 platform = GetPlatform() | 241 platform = GetPlatform() |
| 219 | 242 |
| 220 if len(args) > 1: | 243 if len(args) > 1: |
| 221 parser.error('Only one option can be specified at a time.') | 244 parser.error('Only one option can be specified at a time.') |
| 222 | 245 |
| 223 if not args: | 246 if not args: |
| 224 print platform | 247 print platform |
| 225 return 0 | 248 return 0 |
| 226 | 249 |
| 227 if options.arch: | 250 if options.arch: |
| 228 out = GetSystemArch(platform) | 251 out = GetSystemArch(platform) |
| 229 elif options.nacl_arch: | 252 elif options.nacl_arch: |
| 230 out = GetNaClArch(platform) | 253 out = GetNaClArch(platform) |
| 231 elif options.chrome: | 254 elif options.chrome: |
| 232 out = GetChromePath(platform) | 255 out = GetChromePath(platform) |
| 233 elif options.sdk_version: | 256 elif options.sdk_version: |
| 234 out = GetSDKVersion()[0] | 257 out = GetSDKVersion()[0] |
| 235 elif options.sdk_revision: | 258 elif options.sdk_revision: |
| 236 out = GetSDKVersion()[1] | 259 out = GetSDKVersion()[1] |
| 237 elif options.sdk_commit_position: | 260 elif options.sdk_commit_position: |
| 238 out = GetSDKVersion()[2] | 261 out = GetSDKVersion()[2] |
| 239 elif options.check_version: | 262 elif options.check_version: |
| 240 required_version = ParseVersion(options.check_version) | 263 required_version = ParseVersion(options.check_version) |
| 241 version = GetSDKVersion() | 264 CheckVersion(required_version) |
| 242 # We currently ignore the revision and just check the major version number. | |
| 243 # Currently, version[1] is just a Git hash, which cannot be compared. | |
| 244 # TODO(mgiuca): Compare the minor revision numbers (which should be | |
| 245 # Cr-Commit-Position values), when http://crbug.com/406783 is fixed. | |
| 246 # Then Cr-Commit-Position should be available: see http://crbug.com/406993. | |
| 247 if version[0] < required_version[0]: | |
| 248 raise Error("SDK version too old (current: %s, required: %s)" | |
| 249 % (version[0], required_version[0])) | |
| 250 out = None | 265 out = None |
| 251 | 266 |
| 252 if out: | 267 if out: |
| 253 print out | 268 print out |
| 254 return 0 | 269 return 0 |
| 255 | 270 |
| 256 | 271 |
| 257 if __name__ == '__main__': | 272 if __name__ == '__main__': |
| 258 try: | 273 try: |
| 259 sys.exit(main(sys.argv[1:])) | 274 sys.exit(main(sys.argv[1:])) |
| 260 except Error as e: | 275 except Error as e: |
| 261 sys.stderr.write(str(e) + '\n') | 276 sys.stderr.write(str(e) + '\n') |
| 262 sys.exit(1) | 277 sys.exit(1) |
| OLD | NEW |