| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 # Copyright 2015 The Chromium Authors. All rights reserved. | |
| 3 # Use of this source code is governed by a BSD-style license that can be | |
| 4 # found in the LICENSE file. | |
| 5 | |
| 6 import argparse | |
| 7 import logging | |
| 8 import os | |
| 9 import re | |
| 10 import sys | |
| 11 | |
| 12 # TODO(eseidel): This should be shared with tools/android_stack_parser/stack | |
| 13 # TODO(eseidel): This could be replaced by using build-ids on Android | |
| 14 # TODO(eseidel): mojo_shell should write out a cache mapping file. | |
| 15 def main(): | |
| 16 logging.basicConfig(level=logging.INFO) | |
| 17 parser = argparse.ArgumentParser( | |
| 18 description='Watches mojo_shell logcat output and builds a directory ' | |
| 19 'of symlinks to symboled binaries for seen cache names.') | |
| 20 parser.add_argument('links_dir', type=str) | |
| 21 parser.add_argument('symbols_dir', type=str) | |
| 22 parser.add_argument('base_url', type=str) | |
| 23 args = parser.parse_args() | |
| 24 | |
| 25 regex = re.compile('Caching mojo app (?P<url>\S+) at (?P<path>\S+)') | |
| 26 | |
| 27 if not os.path.isdir(args.links_dir): | |
| 28 logging.fatal('links_dir: %s is not a directory' % args.links_dir) | |
| 29 sys.exit(1) | |
| 30 | |
| 31 for line in sys.stdin: | |
| 32 result = regex.search(line) | |
| 33 if not result: | |
| 34 continue | |
| 35 | |
| 36 url = result.group('url') | |
| 37 if not url.startswith(args.base_url): | |
| 38 logging.debug('%s does not match base %s' % (url, args.base_url)) | |
| 39 continue | |
| 40 full_name = os.path.basename(url) | |
| 41 name, ext = os.path.splitext(full_name) | |
| 42 if ext != '.mojo': | |
| 43 logging.debug('%s is not a .mojo library' % url) | |
| 44 continue | |
| 45 | |
| 46 symboled_name = 'lib%s_library.so' % name | |
| 47 cache_link_path = os.path.join(args.links_dir, | |
| 48 os.path.basename(result.group('path'))) | |
| 49 symboled_path = os.path.realpath( | |
| 50 os.path.join(args.symbols_dir, symboled_name)) | |
| 51 if not os.path.isfile(symboled_path): | |
| 52 logging.warn('symboled path %s does not exist' % symboled_path) | |
| 53 continue | |
| 54 | |
| 55 print "%s -> %s" % (cache_link_path, symboled_path) | |
| 56 | |
| 57 if os.path.lexists(cache_link_path): | |
| 58 logging.debug('link already exists %s, replacing' % symboled_path) | |
| 59 os.unlink(cache_link_path) | |
| 60 | |
| 61 os.symlink(symboled_path, cache_link_path) | |
| 62 | |
| 63 if __name__ == '__main__': | |
| 64 main() | |
| OLD | NEW |