135 строки
5.4 KiB
Python
Executable File
135 строки
5.4 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import argparse
|
|
import contextlib
|
|
import errno
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
import lib.filesystem as filesystem
|
|
import lib.git as git
|
|
|
|
from lib.config import PLATFORM_KEY, SOURCE_ROOT, TOOLS_DIR
|
|
|
|
SHARED_LIBRARY_FILENAME = 'libchromiumcontent.tar.bz2'
|
|
STATIC_LIBRARY_FILENAME = 'libchromiumcontent-static.tar.bz2'
|
|
|
|
|
|
class ProgramError(Exception):
|
|
pass
|
|
|
|
|
|
def main():
|
|
try:
|
|
args = parse_args()
|
|
if (args.libcc_source_path != None and
|
|
args.libcc_shared_library_path != None and
|
|
args.libcc_static_library_path != None):
|
|
if (not os.path.isdir(args.libcc_source_path)):
|
|
print "Error: Directory does not exist:", args.libcc_source_path
|
|
sys.exit(0)
|
|
generate_filenames_gypi(os.path.join(args.path, 'filenames.gypi'),
|
|
args.libcc_source_path,
|
|
args.libcc_shared_library_path,
|
|
args.libcc_static_library_path)
|
|
elif (args.libcc_source_path != None or
|
|
args.libcc_shared_library_path != None or
|
|
args.libcc_static_library_path != None):
|
|
print "Error: All options of libchromiumcontent are required OR let libchromiumcontent choose it"
|
|
sys.exit(0)
|
|
else:
|
|
if args.commit == 'HEAD':
|
|
commit = git.get_head_commit(SOURCE_ROOT)
|
|
else:
|
|
commit = args.commit
|
|
if os.environ.has_key('MAS_BUILD'):
|
|
platform = 'mas'
|
|
else:
|
|
platform = PLATFORM_KEY
|
|
base_url = '{0}/{1}/{2}'.format(args.url, platform, args.target_arch)
|
|
download_if_needed(args.path, base_url, commit, SHARED_LIBRARY_FILENAME,
|
|
args.force, args.verbose)
|
|
if (args.static and
|
|
not os.path.exists(os.path.join(args.path, 'static_library'))):
|
|
download(args.path, base_url, commit, STATIC_LIBRARY_FILENAME,
|
|
args.verbose)
|
|
generate_filenames_gypi(os.path.join(args.path, 'filenames.gypi'),
|
|
os.path.join(args.path, 'src'),
|
|
os.path.join(args.path, 'shared_library'),
|
|
os.path.join(args.path, 'static_library'))
|
|
with open(os.path.join(args.path, '.target_arch'), 'w') as f:
|
|
f.write(args.target_arch)
|
|
except ProgramError as e:
|
|
return e.message
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(description='Download and extract '
|
|
'libchromiumcontent')
|
|
parser.add_argument('-f', '--force', action='store_true',
|
|
help='Overwrite destination if it already exists.')
|
|
parser.add_argument('-c', '--commit', nargs='?', default='HEAD',
|
|
help='The commit of libchromiumcontent to download.')
|
|
parser.add_argument('-s', '--static', action='store_true',
|
|
help='Download static_library build')
|
|
parser.add_argument('--target_arch', required=True,
|
|
help='The arch of libchromiumcontent to download.')
|
|
parser.add_argument('url', help='The base URL from which to download '
|
|
'(i.e., the URL you passed to script/upload)')
|
|
parser.add_argument('path', help='The path to extract to')
|
|
parser.add_argument('--libcc_source_path', required=False,
|
|
help='The source path of libchromiumcontent. NOTE: All options of libchromiumcontent are required OR let libchromiumcontent choose it')
|
|
parser.add_argument('--libcc_shared_library_path', required=False,
|
|
help='The shared library path of libchromiumcontent. NOTE: All options of libchromiumcontent are required OR let libchromiumcontent choose it')
|
|
parser.add_argument('--libcc_static_library_path', required=False,
|
|
help='The static library path of libchromiumcontent. NOTE: All options of libchromiumcontent are required OR let libchromiumcontent choose it')
|
|
parser.add_argument('-v', '--verbose',
|
|
action='store_true',
|
|
help='Prints verbose download stats')
|
|
return parser.parse_args()
|
|
|
|
|
|
def download_if_needed(destination, base_url, commit, filename, force, verbose):
|
|
version_file = os.path.join(destination, '.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
|
|
if existing_version == commit:
|
|
return
|
|
|
|
if force:
|
|
filesystem.rm_rf(destination)
|
|
elif os.path.exists(destination):
|
|
raise ProgramError('Error: {0} already exists. Pass --force if you '
|
|
'want to overwrite it.'.format(destination))
|
|
|
|
download(destination, base_url, commit, filename, verbose)
|
|
|
|
with open(version_file, 'w') as f:
|
|
f.write('{0}\n'.format(commit))
|
|
|
|
|
|
def download(destination, base_url, commit, filename, verbose):
|
|
sys.stderr.write('Downloading {0}...\n'.format(filename))
|
|
sys.stderr.flush()
|
|
url = '{0}/{1}/{2}'.format(base_url, commit, filename)
|
|
filesystem.download_and_extract(destination, url, verbose)
|
|
|
|
|
|
def generate_filenames_gypi(target_file, libcc_source_path,
|
|
libcc_shared_library_path,
|
|
libcc_static_library_path):
|
|
generate = os.path.join(TOOLS_DIR, 'generate_filenames_gypi.py')
|
|
subprocess.check_call([sys.executable, generate] + [target_file,
|
|
libcc_source_path, libcc_shared_library_path,
|
|
libcc_static_library_path])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|