OLD | NEW |
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 |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 # Windows 8.1, Windows Server 2012 R2, and Windows 10. | 347 # Windows 8.1, Windows Server 2012 R2, and Windows 10. |
348 # The Windows 8.1 installer doesn't work on Windows 10, but it will never | 348 # The Windows 8.1 installer doesn't work on Windows 10, but it will never |
349 # be used because the UCRT is always installed on Windows 10. | 349 # be used because the UCRT is always installed on Windows 10. |
350 return 'Windows8.1-KB2999226-x64.msu' | 350 return 'Windows8.1-KB2999226-x64.msu' |
351 else: | 351 else: |
352 # Some future OS. | 352 # Some future OS. |
353 return None | 353 return None |
354 | 354 |
355 | 355 |
356 def InstallUniversalCRTIfNeeded(abs_target_dir): | 356 def InstallUniversalCRTIfNeeded(abs_target_dir): |
357 installer_name = GetInstallerName() | 357 return |
358 if not installer_name: | |
359 return | |
360 | |
361 bitness = platform.architecture()[0] | |
362 # When running 64-bit python the x64 DLLs will be in System32 | |
363 x64_path = 'System32' if bitness == '64bit' else 'Sysnative' | |
364 x64_path = os.path.join(r'C:\Windows', x64_path) | |
365 sample_crt_file = os.path.join(x64_path, 'ucrtbase.dll') | |
366 | |
367 if os.path.exists(sample_crt_file): | |
368 # Nothing to do. | |
369 return | |
370 | |
371 print ('%s does not exist - installing Windows 10 Universal C Runtime' % | |
372 sample_crt_file) | |
373 | |
374 installer = os.path.join(abs_target_dir, "installers", installer_name) | |
375 command = r'wusa.exe /quiet "%s"' % installer | |
376 print 'Running %s' % command | |
377 | |
378 try: | |
379 subprocess.check_call(command) | |
380 # Trap OSError instead of WindowsError so pylint will succeed on Linux. | |
381 except OSError as e: | |
382 if e.winerror == 740: # The requested operation requires elevation | |
383 print 'Elevation required. You can manually install this update:' | |
384 print ' %s' % installer | |
385 return | |
386 raise e | |
387 | 358 |
388 | 359 |
389 def main(): | 360 def main(): |
390 parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) | 361 parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) |
391 parser.add_option('--output-json', metavar='FILE', | 362 parser.add_option('--output-json', metavar='FILE', |
392 help='write information about toolchain to FILE') | 363 help='write information about toolchain to FILE') |
393 parser.add_option('--force', action='store_true', | 364 parser.add_option('--force', action='store_true', |
394 help='force script to run on non-Windows hosts') | 365 help='force script to run on non-Windows hosts') |
395 options, args = parser.parse_args() | 366 options, args = parser.parse_args() |
396 | 367 |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 if os.environ.get('GYP_MSVS_VERSION') == '2015': | 474 if os.environ.get('GYP_MSVS_VERSION') == '2015': |
504 InstallUniversalCRTIfNeeded(abs_toolchain_target_dir) | 475 InstallUniversalCRTIfNeeded(abs_toolchain_target_dir) |
505 | 476 |
506 RemoveUnusedToolchains(target_dir) | 477 RemoveUnusedToolchains(target_dir) |
507 | 478 |
508 return 0 | 479 return 0 |
509 | 480 |
510 | 481 |
511 if __name__ == '__main__': | 482 if __name__ == '__main__': |
512 sys.exit(main()) | 483 sys.exit(main()) |
OLD | NEW |