OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 Google Inc. All rights reserved. | 2 # Copyright (c) 2012 Google Inc. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 | 6 |
7 """Argument-less script to select what to run on the buildbots.""" | 7 """Argument-less script to select what to run on the buildbots.""" |
8 | 8 |
9 | 9 |
10 import os | 10 import os |
11 import shutil | 11 import shutil |
12 import subprocess | 12 import subprocess |
13 import sys | 13 import sys |
14 | 14 |
15 | 15 |
16 if sys.platform in ['win32', 'cygwin']: | 16 if sys.platform in ['win32', 'cygwin']: |
17 EXE_SUFFIX = '.exe' | 17 EXE_SUFFIX = '.exe' |
18 else: | 18 else: |
19 EXE_SUFFIX = '' | 19 EXE_SUFFIX = '' |
20 | 20 |
21 | 21 |
22 BUILDBOT_DIR = os.path.dirname(os.path.abspath(__file__)) | 22 BUILDBOT_DIR = os.path.dirname(os.path.abspath(__file__)) |
23 TRUNK_DIR = os.path.dirname(BUILDBOT_DIR) | 23 TRUNK_DIR = os.path.dirname(BUILDBOT_DIR) |
24 ROOT_DIR = os.path.dirname(TRUNK_DIR) | 24 ROOT_DIR = os.path.dirname(TRUNK_DIR) |
25 ANDROID_DIR = os.path.join(ROOT_DIR, 'android') | 25 ANDROID_DIR = os.path.join(ROOT_DIR, 'android') |
| 26 CMAKE_DIR = os.path.join(ROOT_DIR, 'cmake') |
| 27 CMAKE_BIN_DIR = os.path.join(CMAKE_DIR, 'bin') |
26 OUT_DIR = os.path.join(TRUNK_DIR, 'out') | 28 OUT_DIR = os.path.join(TRUNK_DIR, 'out') |
27 | 29 |
28 | 30 |
29 def CallSubProcess(*args, **kwargs): | 31 def CallSubProcess(*args, **kwargs): |
30 """Wrapper around subprocess.call which treats errors as build exceptions.""" | 32 """Wrapper around subprocess.call which treats errors as build exceptions.""" |
31 retcode = subprocess.call(*args, **kwargs) | 33 retcode = subprocess.call(*args, **kwargs) |
32 if retcode != 0: | 34 if retcode != 0: |
33 print '@@@STEP_EXCEPTION@@@' | 35 print '@@@STEP_EXCEPTION@@@' |
34 sys.exit(1) | 36 sys.exit(1) |
35 | 37 |
36 | 38 |
| 39 def PrepareCmake(): |
| 40 """Build CMake 2.8.8 since the version in Precise is 2.8.7.""" |
| 41 if os.environ['BUILDBOT_CLOBBER'] == '1': |
| 42 print '@@@BUILD_STEP Clobber CMake checkout@@@' |
| 43 shutil.rmtree(CMAKE_DIR) |
| 44 |
| 45 # We always build CMake 2.8.8, so no need to do anything |
| 46 # if the directory already exists. |
| 47 if os.path.isdir(CMAKE_DIR): |
| 48 return |
| 49 |
| 50 print '@@@BUILD_STEP Initialize CMake checkout@@@' |
| 51 os.mkdir(CMAKE_DIR) |
| 52 CallSubProcess(['git', 'config', '--global', 'user.name', 'trybot']) |
| 53 CallSubProcess(['git', 'config', '--global', |
| 54 'user.email', 'chrome-bot@google.com']) |
| 55 CallSubProcess(['git', 'config', '--global', 'color.ui', 'false']) |
| 56 |
| 57 print '@@@BUILD_STEP Sync CMake@@@' |
| 58 CallSubProcess( |
| 59 ['git', 'clone', |
| 60 '--depth', '1', |
| 61 '--single-branch', |
| 62 '--branch', 'v2.8.8', |
| 63 '--', |
| 64 'git://cmake.org/cmake.git', |
| 65 CMAKE_DIR], |
| 66 cwd=CMAKE_DIR) |
| 67 |
| 68 print '@@@BUILD_STEP Build CMake@@@' |
| 69 CallSubProcess( |
| 70 ['/bin/bash', 'bootstrap', '--prefix=%s' % CMAKE_DIR], |
| 71 cwd=CMAKE_DIR) |
| 72 |
| 73 CallSubProcess( ['make', 'cmake'], cwd=CMAKE_DIR) |
| 74 |
| 75 |
37 def PrepareAndroidTree(): | 76 def PrepareAndroidTree(): |
38 """Prepare an Android tree to run 'android' format tests.""" | 77 """Prepare an Android tree to run 'android' format tests.""" |
39 if os.environ['BUILDBOT_CLOBBER'] == '1': | 78 if os.environ['BUILDBOT_CLOBBER'] == '1': |
40 print '@@@BUILD_STEP Clobber Android checkout@@@' | 79 print '@@@BUILD_STEP Clobber Android checkout@@@' |
41 shutil.rmtree(ANDROID_DIR) | 80 shutil.rmtree(ANDROID_DIR) |
42 | 81 |
43 # The release of Android we use is static, so there's no need to do anything | 82 # The release of Android we use is static, so there's no need to do anything |
44 # if the directory already exists. | 83 # if the directory already exists. |
45 if os.path.isdir(ANDROID_DIR): | 84 if os.path.isdir(ANDROID_DIR): |
46 return | 85 return |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 print '@@@BUILD_STEP ' + title + '@@@' | 123 print '@@@BUILD_STEP ' + title + '@@@' |
85 sys.stdout.flush() | 124 sys.stdout.flush() |
86 env = os.environ.copy() | 125 env = os.environ.copy() |
87 if msvs_version: | 126 if msvs_version: |
88 env['GYP_MSVS_VERSION'] = msvs_version | 127 env['GYP_MSVS_VERSION'] = msvs_version |
89 command = ' '.join( | 128 command = ' '.join( |
90 [sys.executable, 'trunk/gyptest.py', | 129 [sys.executable, 'trunk/gyptest.py', |
91 '--all', | 130 '--all', |
92 '--passed', | 131 '--passed', |
93 '--format', format, | 132 '--format', format, |
| 133 '--path', CMAKE_BIN_DIR, |
94 '--chdir', 'trunk']) | 134 '--chdir', 'trunk']) |
95 if format == 'android': | 135 if format == 'android': |
96 # gyptest needs the environment setup from envsetup/lunch in order to build | 136 # gyptest needs the environment setup from envsetup/lunch in order to build |
97 # using the 'android' backend, so this is done in a single shell. | 137 # using the 'android' backend, so this is done in a single shell. |
98 retcode = subprocess.call( | 138 retcode = subprocess.call( |
99 ['/bin/bash', | 139 ['/bin/bash', |
100 '-c', 'source build/envsetup.sh && lunch full-eng && cd %s && %s' | 140 '-c', 'source build/envsetup.sh && lunch full-eng && cd %s && %s' |
101 % (ROOT_DIR, command)], | 141 % (ROOT_DIR, command)], |
102 cwd=ANDROID_DIR, env=env) | 142 cwd=ANDROID_DIR, env=env) |
103 else: | 143 else: |
(...skipping 13 matching lines...) Expand all Loading... |
117 print 'Done.' | 157 print 'Done.' |
118 | 158 |
119 retcode = 0 | 159 retcode = 0 |
120 # The Android gyp bot runs on linux so this must be tested first. | 160 # The Android gyp bot runs on linux so this must be tested first. |
121 if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-android': | 161 if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-android': |
122 PrepareAndroidTree() | 162 PrepareAndroidTree() |
123 retcode += GypTestFormat('android') | 163 retcode += GypTestFormat('android') |
124 elif sys.platform.startswith('linux'): | 164 elif sys.platform.startswith('linux'): |
125 retcode += GypTestFormat('ninja') | 165 retcode += GypTestFormat('ninja') |
126 retcode += GypTestFormat('make') | 166 retcode += GypTestFormat('make') |
| 167 PrepareCmake() |
| 168 retcode += GypTestFormat('cmake') |
127 elif sys.platform == 'darwin': | 169 elif sys.platform == 'darwin': |
128 retcode += GypTestFormat('ninja') | 170 retcode += GypTestFormat('ninja') |
129 retcode += GypTestFormat('xcode') | 171 retcode += GypTestFormat('xcode') |
130 retcode += GypTestFormat('make') | 172 retcode += GypTestFormat('make') |
131 elif sys.platform == 'win32': | 173 elif sys.platform == 'win32': |
132 retcode += GypTestFormat('ninja') | 174 retcode += GypTestFormat('ninja') |
133 if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-win64': | 175 if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-win64': |
134 retcode += GypTestFormat('msvs-2010', format='msvs', msvs_version='2010') | 176 retcode += GypTestFormat('msvs-2010', format='msvs', msvs_version='2010') |
135 retcode += GypTestFormat('msvs-2012', format='msvs', msvs_version='2012') | 177 retcode += GypTestFormat('msvs-2012', format='msvs', msvs_version='2012') |
136 else: | 178 else: |
137 raise Exception('Unknown platform') | 179 raise Exception('Unknown platform') |
138 if retcode: | 180 if retcode: |
139 # TODO(bradnelson): once the annotator supports a postscript (section for | 181 # TODO(bradnelson): once the annotator supports a postscript (section for |
140 # after the build proper that could be used for cumulative failures), | 182 # after the build proper that could be used for cumulative failures), |
141 # use that instead of this. This isolates the final return value so | 183 # use that instead of this. This isolates the final return value so |
142 # that it isn't misattributed to the last stage. | 184 # that it isn't misattributed to the last stage. |
143 print '@@@BUILD_STEP failures@@@' | 185 print '@@@BUILD_STEP failures@@@' |
144 sys.exit(retcode) | 186 sys.exit(retcode) |
145 | 187 |
146 | 188 |
147 if __name__ == '__main__': | 189 if __name__ == '__main__': |
148 GypBuild() | 190 GypBuild() |
OLD | NEW |