| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  | #!/usr/bin/env python | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  | import argparse | 
					
						
							| 
									
										
										
										
											2014-05-18 23:03:46 +08:00
										 |  |  | import errno | 
					
						
							| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  | import sys | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-21 14:40:06 -05:00
										 |  |  | from lib.config import PLATFORM, get_target_arch | 
					
						
							|  |  |  | from lib.util import add_exec_bit, download, extract_zip, rm_rf, \ | 
					
						
							|  |  |  |                      safe_mkdir, tempdir | 
					
						
							| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-01 22:27:14 +08:00
										 |  |  | SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) | 
					
						
							| 
									
										
										
										
											2014-04-29 02:03:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  | def parse_args(): | 
					
						
							|  |  |  |   parser = argparse.ArgumentParser( | 
					
						
							|  |  |  |       description='Download binaries for Electron build') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   parser.add_argument('-u', '--root-url', required=True, | 
					
						
							|  |  |  |                       help="Root URL for all downloads.") | 
					
						
							|  |  |  |   parser.add_argument('-v', '--version', required=True, | 
					
						
							|  |  |  |                       help="Version string, e.g. 'v1.0.0'.") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return parser.parse_args() | 
					
						
							| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  |   args = parse_args() | 
					
						
							|  |  |  |   url_prefix = "{root_url}/{version}".format(**vars(args)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  |   os.chdir(SOURCE_ROOT) | 
					
						
							| 
									
										
										
										
											2014-05-18 23:42:47 +08:00
										 |  |  |   version_file = os.path.join(SOURCE_ROOT, 'external_binaries', '.version') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  |   if (is_updated(version_file, args.version)): | 
					
						
							| 
									
										
										
										
											2014-05-18 23:42:47 +08:00
										 |  |  |     return | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-31 14:12:01 +08:00
										 |  |  |   rm_rf('external_binaries') | 
					
						
							|  |  |  |   safe_mkdir('external_binaries') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 23:03:46 +08:00
										 |  |  |   if sys.platform == 'darwin': | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  |     download_and_unzip(url_prefix, 'Mantle') | 
					
						
							|  |  |  |     download_and_unzip(url_prefix, 'ReactiveCocoa') | 
					
						
							|  |  |  |     download_and_unzip(url_prefix, 'Squirrel') | 
					
						
							| 
									
										
										
										
											2014-05-18 23:03:46 +08:00
										 |  |  |   elif sys.platform in ['cygwin', 'win32']: | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  |     download_and_unzip(url_prefix, 'directxsdk-' + get_target_arch()) | 
					
						
							| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-21 14:40:06 -05:00
										 |  |  |   # get sccache & set exec bit. https://bugs.python.org/issue15795 | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  |   download_and_unzip(url_prefix, 'sccache-{0}-x64'.format(PLATFORM)) | 
					
						
							| 
									
										
										
										
											2018-08-21 14:40:06 -05:00
										 |  |  |   appname = 'sccache' | 
					
						
							|  |  |  |   if sys.platform == 'win32': | 
					
						
							|  |  |  |     appname += '.exe' | 
					
						
							|  |  |  |   add_exec_bit(os.path.join('external_binaries', appname)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-06 23:16:42 +08:00
										 |  |  |   with open(version_file, 'w') as f: | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  |     f.write(args.version) | 
					
						
							| 
									
										
										
										
											2014-08-06 23:16:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 23:42:47 +08:00
										 |  |  | def is_updated(version_file, version): | 
					
						
							|  |  |  |   existing_version = '' | 
					
						
							|  |  |  |   try: | 
					
						
							|  |  |  |     with open(version_file, 'r') as f: | 
					
						
							|  |  |  |       existing_version = f.readline().strip() | 
					
						
							|  |  |  |   except IOError as e: | 
					
						
							|  |  |  |     if e.errno != errno.ENOENT: | 
					
						
							|  |  |  |       raise | 
					
						
							|  |  |  |   return existing_version == version | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  | def download_and_unzip(url_prefix, framework): | 
					
						
							|  |  |  |   zip_path = download_framework(url_prefix, framework) | 
					
						
							| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  |   if zip_path: | 
					
						
							| 
									
										
										
										
											2014-05-18 23:35:07 +08:00
										 |  |  |     extract_zip(zip_path, 'external_binaries') | 
					
						
							| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  | def download_framework(url_prefix, framework): | 
					
						
							| 
									
										
										
										
											2014-05-18 23:03:46 +08:00
										 |  |  |   filename = framework + '.zip' | 
					
						
							| 
									
										
										
										
											2018-10-06 00:21:46 +02:00
										 |  |  |   url = url_prefix + '/' + filename | 
					
						
							| 
									
										
										
										
											2015-04-12 22:10:46 +08:00
										 |  |  |   download_dir = tempdir(prefix='electron-') | 
					
						
							| 
									
										
										
										
											2013-06-20 23:23:22 +08:00
										 |  |  |   path = os.path.join(download_dir, filename) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   download('Download ' + framework, url, path) | 
					
						
							|  |  |  |   return path | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |   sys.exit(main()) |