Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2700)

Unified Diff: build/mac_toolchain.py

Issue 1759793003: Scripts to upload and update the mac toolchain. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change data file name Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « DEPS ('k') | build/package_mac_toolchain.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/mac_toolchain.py
diff --git a/build/mac_toolchain.py b/build/mac_toolchain.py
new file mode 100755
index 0000000000000000000000000000000000000000..f12d49a4054af813c3f045b0d6f8478b22803055
--- /dev/null
+++ b/build/mac_toolchain.py
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""This script is used to download necessary mac toolchain files."""
+
+import os
+import shutil
+import subprocess
+import sys
+import tarfile
+import time
+import tempfile
+import urllib2
+
+# Update sys.path to import gyp.
+script_dir = os.path.dirname(os.path.realpath(__file__))
+chrome_src = os.path.abspath(os.path.join(script_dir, os.pardir))
+sys.path.insert(0, os.path.join(chrome_src, 'tools', 'gyp', 'pylib'))
+import gyp
+
+TOOLCHAIN_REVISION = '7C68'
+TOOLCHAIN_SUB_REVISION = 1
+TOOLCHAIN_VERSION = "%s-%s" % (TOOLCHAIN_REVISION, TOOLCHAIN_SUB_REVISION)
+
+BASE_DIR = os.path.abspath(os.path.dirname(__file__))
+TOOLCHAIN_BUILD_DIR = os.path.join(BASE_DIR, 'mac_files', 'Xcode.app')
+STAMP_FILE = os.path.join(BASE_DIR, 'mac_files', 'toolchain_build_revision')
+TOOLCHAIN_URL = 'gs://chrome-mac-sdk/'
+
+def ReadStampFile():
+ """Return the contents of the stamp file, or '' if it doesn't exist."""
+ try:
+ with open(STAMP_FILE, 'r') as f:
+ return f.read().rstrip()
+ except IOError:
+ return ''
+
+
+def WriteStampFile(s):
+ """Write s to the stamp file."""
+ EnsureDirExists(os.path.dirname(STAMP_FILE))
+ with open(STAMP_FILE, 'w') as f:
+ f.write(s)
+ f.write('\n')
+
+
+def EnsureDirExists(path):
+ if not os.path.exists(path):
+ os.makedirs(path)
+
+
+def DownloadAndUnpack(url, output_dir):
+ temp_name = tempfile.mktemp(prefix='mac_toolchain')
+ print 'Downloading new toolchain.'
+ subprocess.check_call(['gsutil.py', 'cp', url, temp_name])
+ if os.path.exists(output_dir):
+ print 'Deleting old toolchain.'
+ shutil.rmtree(output_dir)
+ EnsureDirExists(output_dir)
+ print 'Unpacking new toolchain.'
+ tarfile.open(mode='r:gz', name=temp_name).extractall(path=output_dir)
+ os.unlink(temp_name)
+
+
+def CanAccessToolchainBucket():
+ """Checks whether the user has access to |TOOLCHAIN_URL|."""
+ proc = subprocess.Popen(['gsutil.py', 'ls', TOOLCHAIN_URL],
+ stdout=subprocess.PIPE)
+ proc.communicate()
+ return proc.returncode == 0
+
+
+def SwitchToolchain(directory):
+ print 'Setting xcode-select to %s.' % directory
+ subprocess.check_call(['sudo', '/usr/bin/xcode-select', '-s', directory])
+ subprocess.check_call(['sudo', '/usr/bin/xcodebuild', '-license', 'accept'])
+
+
+def main():
+ gyp_defines = gyp.NameValueListToDict(gyp.ShlexEnv('GYP_DEFINES'))
+ force_pull = 'force_mac_toolchain' in gyp_defines
+ toolchain_revision = gyp_defines.get('mac_toolchain_revision',
+ TOOLCHAIN_VERSION)
+
+ proc = subprocess.Popen(['xcode-select', '-p'], stdout=subprocess.PIPE)
+ xcode_select_dir = proc.communicate()[0]
+ rc = proc.returncode
+ if not force_pull and rc == 0 and TOOLCHAIN_BUILD_DIR not in xcode_select_dir:
+ print 'Using local toolchain.'
+ return 0
+
+ if ReadStampFile() == toolchain_revision:
+ print 'Toolchain (%s) is already up to date.' % toolchain_revision
+ SwitchToolchain(TOOLCHAIN_BUILD_DIR)
erikchen 2016/03/03 22:43:12 if the toolchain is already up to date, why do we
+ return 0
+
+ if not CanAccessToolchainBucket():
+ print 'Cannot access toolchain bucket.'
+ return 0
+
+ # Reset the stamp file in case the build is unsuccessful.
+ WriteStampFile('')
+
+ toolchain_file = "%s.tgz" % toolchain_revision
+ toolchain_full_url = TOOLCHAIN_URL + toolchain_file
+
+ print 'Updating toolchain to %s...' % toolchain_revision
+ try:
+ toolchain_file = "toolchain-%s.tgz" % toolchain_revision
+ toolchain_full_url = TOOLCHAIN_URL + toolchain_file
+ DownloadAndUnpack(toolchain_full_url, TOOLCHAIN_BUILD_DIR)
+ SwitchToolchain(TOOLCHAIN_BUILD_DIR)
+
+ print 'Toolchain %s unpacked.' % toolchain_revision
+ WriteStampFile(toolchain_revision)
+
+ return 0
+ except:
+ print 'Failed to download toolchain %s.' % toolchain_file
+ print 'Exiting.'
+ return 1
+
+if __name__ == '__main__':
+ sys.exit(main())
« no previous file with comments | « DEPS ('k') | build/package_mac_toolchain.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698