Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / build / landmine_utils.py
1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5
6 import functools
7 import logging
8 import os
9 import shlex
10 import sys
11
12
13 def memoize(default=None):
14   """This decorator caches the return value of a parameterless pure function"""
15   def memoizer(func):
16     val = []
17     @functools.wraps(func)
18     def inner():
19       if not val:
20         ret = func()
21         val.append(ret if ret is not None else default)
22         if logging.getLogger().isEnabledFor(logging.INFO):
23           print '%s -> %r' % (func.__name__, val[0])
24       return val[0]
25     return inner
26   return memoizer
27
28
29 @memoize()
30 def IsWindows():
31   return sys.platform in ['win32', 'cygwin']
32
33
34 @memoize()
35 def IsLinux():
36   return sys.platform.startswith(('linux', 'freebsd'))
37
38
39 @memoize()
40 def IsMac():
41   return sys.platform == 'darwin'
42
43
44 @memoize()
45 def gyp_defines():
46   """Parses and returns GYP_DEFINES env var as a dictionary."""
47   return dict(arg.split('=', 1)
48       for arg in shlex.split(os.environ.get('GYP_DEFINES', '')))
49
50 @memoize()
51 def gyp_msvs_version():
52   return os.environ.get('GYP_MSVS_VERSION', '')
53
54 @memoize()
55 def distributor():
56   """
57   Returns a string which is the distributed build engine in use (if any).
58   Possible values: 'goma', 'ib', ''
59   """
60   if 'goma' in gyp_defines():
61     return 'goma'
62   elif IsWindows():
63     if 'CHROME_HEADLESS' in os.environ:
64       return 'ib' # use (win and !goma and headless) as approximation of ib
65
66
67 @memoize()
68 def platform():
69   """
70   Returns a string representing the platform this build is targetted for.
71   Possible values: 'win', 'mac', 'linux', 'ios', 'android'
72   """
73   if 'OS' in gyp_defines():
74     if 'android' in gyp_defines()['OS']:
75       return 'android'
76     else:
77       return gyp_defines()['OS']
78   elif IsWindows():
79     return 'win'
80   elif IsLinux():
81     return 'linux'
82   else:
83     return 'mac'
84
85
86 @memoize()
87 def builder():
88   """
89   Returns a string representing the build engine (not compiler) to use.
90   Possible values: 'make', 'ninja', 'xcode', 'msvs', 'scons'
91   """
92   if 'GYP_GENERATORS' in os.environ:
93     # for simplicity, only support the first explicit generator
94     generator = os.environ['GYP_GENERATORS'].split(',')[0]
95     if generator.endswith('-android'):
96       return generator.split('-')[0]
97     elif generator.endswith('-ninja'):
98       return 'ninja'
99     else:
100       return generator
101   else:
102     if platform() == 'android':
103       # Good enough for now? Do any android bots use make?
104       return 'ninja'
105     elif platform() == 'ios':
106       return 'xcode'
107     elif IsWindows():
108       return 'ninja'
109     elif IsLinux():
110       return 'ninja'
111     elif IsMac():
112       return 'ninja'
113     else:
114       assert False, 'Don\'t know what builder we\'re using!'