Index: chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py |
diff --git a/chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py b/chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py |
index c9248f9484f43a7ecf13f16721ab742d07116c92..a45e0a747e6b3909cd8e7892799ee8e6954ce5b1 100755 |
--- a/chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py |
+++ b/chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py |
@@ -41,8 +41,10 @@ SYSROOT_DIR_AMD64 = 'debian_wheezy_amd64-sysroot' |
SYSROOT_DIR_I386 = 'debian_wheezy_i386-sysroot' |
SYSROOT_DIR_ARM = 'debian_wheezy_arm-sysroot' |
+valid_archs = ('arm', 'i386', 'amd64') |
-def get_sha1(filename): |
+ |
+def GetSha1(filename): |
sha1 = hashlib.sha1() |
with open(filename, 'rb') as f: |
while True: |
@@ -54,83 +56,89 @@ def get_sha1(filename): |
return sha1.hexdigest() |
-def main(): |
- if options.arch not in ['amd64', 'i386', 'arm']: |
- print 'Unknown architecture: %s' % options.arch |
- return 1 |
+def DetectArch(gyp_defines): |
+ # Check for optional target_arch and only install for that architecture. |
+ # If target_arch is not specified, then only install for the host |
+ # architecture. |
+ if 'target_arch=x64' in gyp_defines: |
+ return 'amd64' |
+ elif 'target_arch=ia32' in gyp_defines: |
+ return 'i386' |
+ elif 'target_arch=arm' in gyp_defines: |
+ return 'arm' |
+ |
+ # Figure out host arch using build/detect_host_arch.py and |
+ # set target_arch to host arch |
+ SRC_DIR = os.path.abspath( |
+ os.path.join(SCRIPT_DIR, '..', '..', '..', '..')) |
+ sys.path.append(os.path.join(SRC_DIR, 'build')) |
+ import detect_host_arch |
+ |
+ detected_host_arch = detect_host_arch.HostArch() |
+ if detected_host_arch == 'x64': |
+ return 'amd64' |
+ elif detected_host_arch == 'ia32': |
+ return 'i386' |
+ elif detected_host_arch == 'arm': |
+ return 'arm' |
+ else: |
+ print "Unknown host arch: %s" % detected_host_arch |
+ return None |
+ |
+ |
+def main(): |
if options.linux_only: |
# This argument is passed when run from the gclient hooks. |
# In this case we return early on non-linux platforms. |
if not sys.platform.startswith('linux'): |
return 0 |
- gyp_defines = os.environ.get('GYP_DEFINES', '') |
- |
- # Only install the sysroot for an Official Chrome Linux build, except |
- # for ARM where we always use a sysroot. |
- if options.arch != 'arm': |
- defined = ['branding=Chrome', 'buildtype=Official'] |
- undefined = ['chromeos=1'] |
- for option in defined: |
- if option not in gyp_defines: |
- return 0 |
- for option in undefined: |
- if option in gyp_defines: |
- return 0 |
- |
- # Check for optional target_arch and only install for that architecture. |
- # If target_arch is not specified, then only install for the host |
- # architecture. |
- target_arch = '' |
- if 'target_arch=x64' in gyp_defines: |
- target_arch = 'amd64' |
- elif 'target_arch=ia32' in gyp_defines: |
- target_arch = 'i386' |
- elif 'target_arch=arm' in gyp_defines: |
- target_arch = 'arm' |
- else: |
- # Figure out host arch using build/detect_host_arch.py and |
- # set target_arch to host arch |
- SRC_DIR = os.path.abspath( |
- os.path.join(SCRIPT_DIR, '..', '..', '..', '..')) |
- sys.path.append(os.path.join(SRC_DIR, 'build')) |
- import detect_host_arch |
- |
- detected_host_arch = detect_host_arch.HostArch() |
- if detected_host_arch == 'x64': |
- target_arch = 'amd64' |
- elif detected_host_arch == 'ia32': |
- target_arch = 'i386' |
- elif detected_host_arch == 'arm': |
- target_arch = 'arm' |
- |
- if target_arch != options.arch: |
- return 0 |
+ gyp_defines = os.environ.get('GYP_DEFINES', '') |
+ |
+ if options.arch: |
+ target_arch = options.arch |
+ else: |
+ target_arch = DetectArch(gyp_defines) |
+ if not target_arch: |
+ print 'Unable to detect host architecture' |
+ return 1 |
+ |
+ if options.linux_only and target_arch != 'arm': |
+ # When run from runhooks, only install the sysroot for an Official Chrome |
+ # Linux build, except on ARM where we always use a sysroot. |
+ defined = ['branding=Chrome', 'buildtype=Official'] |
+ undefined = ['chromeos=1'] |
+ for option in defined: |
+ if option not in gyp_defines: |
+ return 0 |
+ for option in undefined: |
+ if option in gyp_defines: |
+ return 0 |
# The sysroot directory should match the one specified in build/common.gypi. |
# TODO(thestig) Consider putting this else where to avoid having to recreate |
# it on every build. |
linux_dir = os.path.dirname(SCRIPT_DIR) |
- if options.arch == 'amd64': |
+ if target_arch == 'amd64': |
sysroot = os.path.join(linux_dir, SYSROOT_DIR_AMD64) |
tarball_filename = TARBALL_AMD64 |
tarball_sha1sum = TARBALL_AMD64_SHA1SUM |
revision = REVISION_AMD64 |
- elif options.arch == 'arm': |
+ elif target_arch == 'arm': |
sysroot = os.path.join(linux_dir, SYSROOT_DIR_ARM) |
tarball_filename = TARBALL_ARM |
tarball_sha1sum = TARBALL_ARM_SHA1SUM |
revision = REVISION_ARM |
- elif options.arch == 'i386': |
+ elif target_arch == 'i386': |
sysroot = os.path.join(linux_dir, SYSROOT_DIR_I386) |
tarball_filename = TARBALL_I386 |
tarball_sha1sum = TARBALL_I386_SHA1SUM |
revision = REVISION_I386 |
else: |
+ print 'Unknown architecture: %s' % target_arch |
assert(False) |
- |
url = '%s/%s/%s/%s' % (URL_PREFIX, URL_PATH, revision, tarball_filename) |
stamp = os.path.join(sysroot, '.stamp') |
@@ -138,10 +146,10 @@ def main(): |
with open(stamp) as s: |
if s.read() == url: |
print 'Debian Wheezy %s root image already up-to-date: %s' % \ |
- (options.arch, sysroot) |
+ (target_arch, sysroot) |
return 0 |
- print 'Installing Debian Wheezy %s root image: %s' % (options.arch, sysroot) |
+ print 'Installing Debian Wheezy %s root image: %s' % (target_arch, sysroot) |
if os.path.isdir(sysroot): |
shutil.rmtree(sysroot) |
os.mkdir(sysroot) |
@@ -150,7 +158,7 @@ def main(): |
sys.stdout.flush() |
sys.stderr.flush() |
subprocess.check_call(['curl', '--fail', '-L', url, '-o', tarball]) |
- sha1sum = get_sha1(tarball) |
+ sha1sum = GetSha1(tarball) |
if sha1sum != tarball_sha1sum: |
print 'Tarball sha1sum is wrong.' |
print 'Expected %s, actual: %s' % (tarball_sha1sum, sha1sum) |
@@ -168,6 +176,7 @@ if __name__ == '__main__': |
parser.add_option('--linux-only', action='store_true', |
default=False, help='Only install sysroot for official ' |
'Linux builds') |
- parser.add_option('--arch', help='Sysroot architecture: i386, amd64 or arm') |
- options, args = parser.parse_args() |
+ parser.add_option('--arch', type='choice', choices=valid_archs, |
+ help='Sysroot architecture: %s' % ', '.join(valid_archs)) |
+ options, _ = parser.parse_args() |
sys.exit(main()) |