diff options
author | sivachandra@chromium.org <sivachandra@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-21 02:44:58 +0000 |
---|---|---|
committer | sivachandra@chromium.org <sivachandra@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-21 02:44:58 +0000 |
commit | ec069f72d0cd83823271e2e95ca94acc2e5d76ef (patch) | |
tree | b74c6829f6252a4fd89215bb4ae14f446abb71c5 /build/landmine_utils.py | |
parent | 717ee1c7b9581fcaf81e89183fc7187d57046d49 (diff) | |
download | chromium_src-ec069f72d0cd83823271e2e95ca94acc2e5d76ef.zip chromium_src-ec069f72d0cd83823271e2e95ca94acc2e5d76ef.tar.gz chromium_src-ec069f72d0cd83823271e2e95ca94acc2e5d76ef.tar.bz2 |
Refactor landmines.py so that it can be used downstream.
BUG=223636
Review URL: https://chromiumcodereview.appspot.com/22935010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218605 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'build/landmine_utils.py')
-rw-r--r-- | build/landmine_utils.py | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/build/landmine_utils.py b/build/landmine_utils.py new file mode 100644 index 0000000..021fc9b --- /dev/null +++ b/build/landmine_utils.py @@ -0,0 +1,114 @@ +# Copyright 2013 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. + + +import functools +import logging +import os +import shlex +import sys + + +def memoize(default=None): + """This decorator caches the return value of a parameterless pure function""" + def memoizer(func): + val = [] + @functools.wraps(func) + def inner(): + if not val: + ret = func() + val.append(ret if ret is not None else default) + if logging.getLogger().isEnabledFor(logging.INFO): + print '%s -> %r' % (func.__name__, val[0]) + return val[0] + return inner + return memoizer + + +@memoize() +def IsWindows(): + return sys.platform in ['win32', 'cygwin'] + + +@memoize() +def IsLinux(): + return sys.platform.startswith('linux') + + +@memoize() +def IsMac(): + return sys.platform == 'darwin' + + +@memoize() +def gyp_defines(): + """Parses and returns GYP_DEFINES env var as a dictionary.""" + return dict(arg.split('=', 1) + for arg in shlex.split(os.environ.get('GYP_DEFINES', ''))) + +@memoize() +def gyp_msvs_version(): + return os.environ.get('GYP_MSVS_VERSION', '') + +@memoize() +def distributor(): + """ + Returns a string which is the distributed build engine in use (if any). + Possible values: 'goma', 'ib', '' + """ + if 'goma' in gyp_defines(): + return 'goma' + elif IsWindows(): + if 'CHROME_HEADLESS' in os.environ: + return 'ib' # use (win and !goma and headless) as approximation of ib + + +@memoize() +def platform(): + """ + Returns a string representing the platform this build is targetted for. + Possible values: 'win', 'mac', 'linux', 'ios', 'android' + """ + if 'OS' in gyp_defines(): + if 'android' in gyp_defines()['OS']: + return 'android' + else: + return gyp_defines()['OS'] + elif IsWindows(): + return 'win' + elif IsLinux(): + return 'linux' + else: + return 'mac' + + +@memoize() +def builder(): + """ + Returns a string representing the build engine (not compiler) to use. + Possible values: 'make', 'ninja', 'xcode', 'msvs', 'scons' + """ + if 'GYP_GENERATORS' in os.environ: + # for simplicity, only support the first explicit generator + generator = os.environ['GYP_GENERATORS'].split(',')[0] + if generator.endswith('-android'): + return generator.split('-')[0] + elif generator.endswith('-ninja'): + return 'ninja' + else: + return generator + else: + if platform() == 'android': + # Good enough for now? Do any android bots use make? + return 'ninja' + elif platform() == 'ios': + return 'xcode' + elif IsWindows(): + return 'msvs' + elif IsLinux(): + return 'ninja' + elif IsMac(): + return 'xcode' + else: + assert False, 'Don\'t know what builder we\'re using!' |