OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 The Chromium Authors. 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 """Downloads, builds (with instrumentation) and installs shared libraries.""" | 6 """Downloads, builds (with instrumentation) and installs shared libraries.""" |
7 | 7 |
8 import argparse | 8 import argparse |
9 import os | 9 import os |
10 import platform | 10 import platform |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 def build_and_install(parsed_arguments, environment, install_prefix): | 198 def build_and_install(parsed_arguments, environment, install_prefix): |
199 if parsed_arguments.build_method == 'destdir': | 199 if parsed_arguments.build_method == 'destdir': |
200 destdir_configure_make_install( | 200 destdir_configure_make_install( |
201 parsed_arguments, environment, install_prefix) | 201 parsed_arguments, environment, install_prefix) |
202 elif parsed_arguments.build_method == 'custom_nss': | 202 elif parsed_arguments.build_method == 'custom_nss': |
203 nss_make_and_copy(parsed_arguments, environment, install_prefix) | 203 nss_make_and_copy(parsed_arguments, environment, install_prefix) |
204 elif parsed_arguments.build_method == 'custom_libcap': | 204 elif parsed_arguments.build_method == 'custom_libcap': |
205 libcap2_make_install(parsed_arguments, environment, install_prefix) | 205 libcap2_make_install(parsed_arguments, environment, install_prefix) |
206 elif parsed_arguments.build_method == 'custom_libpci3': | 206 elif parsed_arguments.build_method == 'custom_libpci3': |
207 libpci3_make_install(parsed_arguments, environment, install_prefix) | 207 libpci3_make_install(parsed_arguments, environment, install_prefix) |
| 208 elif parsed_arguments.build_method == 'custom_libappindicator1': |
| 209 environment['CSC'] = '/usr/bin/mono-csc' |
| 210 destdir_configure_make_install( |
| 211 parsed_arguments, environment, install_prefix) |
208 else: | 212 else: |
209 raise Exception('Unrecognized build method: %s' % | 213 raise Exception('Unrecognized build method: %s' % |
210 parsed_arguments.build_method) | 214 parsed_arguments.build_method) |
211 | 215 |
212 | |
213 def unescape_flags(s): | 216 def unescape_flags(s): |
214 # GYP escapes the build flags as if they are going to be inserted directly | 217 # GYP escapes the build flags as if they are going to be inserted directly |
215 # into the command line. Since we pass them via CFLAGS/LDFLAGS, we must drop | 218 # into the command line. Since we pass them via CFLAGS/LDFLAGS, we must drop |
216 # the double quotes accordingly. | 219 # the double quotes accordingly. |
217 return ' '.join(shlex.split(s)) | 220 return ' '.join(shlex.split(s)) |
218 | 221 |
219 | 222 def download_build_install(parsed_arguments): |
220 def build_environment(parsed_arguments, install_prefix): | |
221 environment = os.environ.copy() | 223 environment = os.environ.copy() |
222 # The CC/CXX environment variables take precedence over the command line | 224 # The CC/CXX environment variables take precedence over the command line |
223 # flags. | 225 # flags. |
224 if 'CC' not in environment and parsed_arguments.cc: | 226 if 'CC' not in environment and parsed_arguments.cc: |
225 environment['CC'] = parsed_arguments.cc | 227 environment['CC'] = parsed_arguments.cc |
226 if 'CXX' not in environment and parsed_arguments.cxx: | 228 if 'CXX' not in environment and parsed_arguments.cxx: |
227 environment['CXX'] = parsed_arguments.cxx | 229 environment['CXX'] = parsed_arguments.cxx |
228 | 230 |
| 231 product_directory = os.path.normpath('%s/%s' % ( |
| 232 get_script_absolute_path(), |
| 233 parsed_arguments.product_directory)) |
| 234 |
229 cflags = unescape_flags(parsed_arguments.cflags) | 235 cflags = unescape_flags(parsed_arguments.cflags) |
230 if parsed_arguments.sanitizer_blacklist: | 236 if parsed_arguments.sanitizer_blacklist: |
231 cflags += ' -fsanitize-blacklist=%s/%s' % ( | 237 cflags += ' -fsanitize-blacklist=%s/%s' % ( |
232 product_directory, | 238 product_directory, |
233 parsed_arguments.sanitizer_blacklist) | 239 parsed_arguments.sanitizer_blacklist) |
234 environment['CFLAGS'] = cflags | 240 environment['CFLAGS'] = cflags |
235 environment['CXXFLAGS'] = cflags | 241 environment['CXXFLAGS'] = cflags |
236 | 242 |
| 243 install_prefix = '%s/instrumented_libraries/%s' % ( |
| 244 product_directory, |
| 245 parsed_arguments.sanitizer_type) |
| 246 |
237 ldflags = unescape_flags(parsed_arguments.ldflags) | 247 ldflags = unescape_flags(parsed_arguments.ldflags) |
238 # Make sure the linker searches the instrumented libraries dir for | 248 # Make sure the linker searches the instrumented libraries dir for |
239 # library dependencies. | 249 # library dependencies. |
240 environment['LDFLAGS'] = '%s -L%s/lib' % (ldflags, install_prefix) | 250 environment['LDFLAGS'] = '%s -L%s/lib' % (ldflags, install_prefix) |
241 | 251 |
242 if parsed_arguments.sanitizer_type == 'asan': | |
243 # Do not report leaks during the build process. | |
244 environment['ASAN_OPTIONS'] = '%s:detect_leaks=0' % \ | |
245 environment.get('ASAN_OPTIONS', '') | |
246 | |
247 # libappindicator1 needs this. | |
248 environment['CSC'] = '/usr/bin/mono-csc' | |
249 return environment | |
250 | |
251 | |
252 | |
253 def download_build_install(parsed_arguments): | |
254 product_directory = os.path.normpath('%s/%s' % ( | |
255 get_script_absolute_path(), | |
256 parsed_arguments.product_directory)) | |
257 | |
258 install_prefix = '%s/instrumented_libraries/%s' % ( | |
259 product_directory, | |
260 parsed_arguments.sanitizer_type) | |
261 | |
262 environment = build_environment(parsed_arguments, install_prefix) | |
263 | |
264 package_directory = '%s/%s' % (parsed_arguments.intermediate_directory, | 252 package_directory = '%s/%s' % (parsed_arguments.intermediate_directory, |
265 parsed_arguments.package) | 253 parsed_arguments.package) |
266 | 254 |
267 # Clobber by default, unless the developer wants to hack on the package's | 255 # Clobber by default, unless the developer wants to hack on the package's |
268 # source code. | 256 # source code. |
269 clobber = (environment.get('INSTRUMENTED_LIBRARIES_NO_CLOBBER', '') != '1') | 257 clobber = (environment.get('INSTRUMENTED_LIBRARIES_NO_CLOBBER', '') != '1') |
270 | 258 |
271 download_source = True | 259 download_source = True |
272 if os.path.exists(package_directory): | 260 if os.path.exists(package_directory): |
273 if clobber: | 261 if clobber: |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 os.chdir(get_script_absolute_path()) | 345 os.chdir(get_script_absolute_path()) |
358 # Ensure all build dependencies are installed. | 346 # Ensure all build dependencies are installed. |
359 if parsed_arguments.check_build_deps: | 347 if parsed_arguments.check_build_deps: |
360 check_package_build_dependencies(parsed_arguments.package) | 348 check_package_build_dependencies(parsed_arguments.package) |
361 | 349 |
362 download_build_install(parsed_arguments) | 350 download_build_install(parsed_arguments) |
363 | 351 |
364 | 352 |
365 if __name__ == '__main__': | 353 if __name__ == '__main__': |
366 main() | 354 main() |
OLD | NEW |