| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 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 import argparse | 6 import argparse |
| 7 import logging | 7 import logging |
| 8 import os | 8 import os |
| 9 import sys | 9 import sys |
| 10 import subprocess | 10 import subprocess |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 except: | 37 except: |
| 38 return None | 38 return None |
| 39 return cache.get(path) | 39 return cache.get(path) |
| 40 | 40 |
| 41 | 41 |
| 42 def compute_path_to_app_id_map(paths, cache, cache_mtime): | 42 def compute_path_to_app_id_map(paths, cache, cache_mtime): |
| 43 path_to_app_id_map = {} | 43 path_to_app_id_map = {} |
| 44 for path in paths: | 44 for path in paths: |
| 45 app_id = get_cached_app_id(path, cache, cache_mtime) | 45 app_id = get_cached_app_id(path, cache, cache_mtime) |
| 46 if not app_id: | 46 if not app_id: |
| 47 logging.info('md5sum %s' % path) | 47 logging.info('sha256sum %s' % path) |
| 48 # Example output: | 48 # Example output: |
| 49 # f82a3551478a9a0e010adccd675053b9 png_viewer.mojo | 49 # f82a3551478a9a0e010adccd675053b9 png_viewer.mojo |
| 50 output = subprocess.check_output(['md5sum', path]) | 50 output = subprocess.check_output(['sha256sum', path]) |
| 51 app_id = output.strip().split()[0] | 51 app_id = output.strip().split()[0] |
| 52 path_to_app_id_map[path] = app_id | 52 path_to_app_id_map[path] = app_id |
| 53 return path_to_app_id_map | 53 return path_to_app_id_map |
| 54 | 54 |
| 55 | 55 |
| 56 def read_app_id_cache(cache_path): | 56 def read_app_id_cache(cache_path): |
| 57 try: | 57 try: |
| 58 with open(cache_path, 'r') as cache_file: | 58 with open(cache_path, 'r') as cache_file: |
| 59 return json.load(cache_file), os.path.getmtime(cache_path) | 59 return json.load(cache_file), os.path.getmtime(cache_path) |
| 60 except: | 60 except: |
| (...skipping 10 matching lines...) Expand all Loading... |
| 71 | 71 |
| 72 | 72 |
| 73 # TODO(eseidel): Share logic with tools/android_stack_parser/stack | 73 # TODO(eseidel): Share logic with tools/android_stack_parser/stack |
| 74 def main(): | 74 def main(): |
| 75 logging.basicConfig(level=logging.WARN) | 75 logging.basicConfig(level=logging.WARN) |
| 76 parser = argparse.ArgumentParser( | 76 parser = argparse.ArgumentParser( |
| 77 description='Builds a directory of app_id symlinks to symbols' | 77 description='Builds a directory of app_id symlinks to symbols' |
| 78 ' to match expected dlopen names from mojo_shell\'s NetworkLoader.') | 78 ' to match expected dlopen names from mojo_shell\'s NetworkLoader.') |
| 79 parser.add_argument('links_dir', type=str) | 79 parser.add_argument('links_dir', type=str) |
| 80 parser.add_argument('build_dir', type=str) | 80 parser.add_argument('build_dir', type=str) |
| 81 parser.add_argument('-f', '--force', action='store_true') |
| 82 parser.add_argument('-v', '--verbose', action='store_true') |
| 81 args = parser.parse_args() | 83 args = parser.parse_args() |
| 82 | 84 |
| 85 if args.verbose: |
| 86 logging.getLogger().setLevel(logging.INFO) |
| 87 |
| 83 if not os.path.isdir(args.links_dir): | 88 if not os.path.isdir(args.links_dir): |
| 84 logging.fatal('links_dir: %s is not a directory' % args.links_dir) | 89 logging.fatal('links_dir: %s is not a directory' % args.links_dir) |
| 85 sys.exit(1) | 90 sys.exit(1) |
| 86 | 91 |
| 87 # Some of the .so files are 100s of megabytes. Cache the md5s to save time. | 92 # Some of the .so files are 100s of megabytes. Cache the md5s to save time. |
| 88 cache_path = os.path.join(args.build_dir, '.app_id_cache') | 93 cache_path = os.path.join(args.build_dir, '.app_id_cache') |
| 89 cache, cache_mtime = read_app_id_cache(cache_path) | 94 cache, cache_mtime = read_app_id_cache(cache_path) |
| 95 if args.force: |
| 96 cache_mtime = None |
| 90 | 97 |
| 91 paths = library_paths(args.build_dir) | 98 paths = library_paths(args.build_dir) |
| 92 path_to_app_id_map = compute_path_to_app_id_map(list(paths), | 99 path_to_app_id_map = compute_path_to_app_id_map(list(paths), |
| 93 cache, cache_mtime) | 100 cache, cache_mtime) |
| 94 | 101 |
| 95 # The cache contains unmodified app-ids. | 102 # The cache contains unmodified app-ids. |
| 96 write_app_id_cache(cache_path, path_to_app_id_map) | 103 write_app_id_cache(cache_path, path_to_app_id_map) |
| 97 | 104 |
| 98 for path, app_id in path_to_app_id_map.items(): | 105 for path, app_id in path_to_app_id_map.items(): |
| 99 basename = os.path.basename(path) | 106 basename = os.path.basename(path) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 113 | 120 |
| 114 if os.path.lexists(link_path): | 121 if os.path.lexists(link_path): |
| 115 logging.debug('link already exists %s, replacing' % path) | 122 logging.debug('link already exists %s, replacing' % path) |
| 116 os.unlink(link_path) | 123 os.unlink(link_path) |
| 117 | 124 |
| 118 os.symlink(path, link_path) | 125 os.symlink(path, link_path) |
| 119 | 126 |
| 120 | 127 |
| 121 if __name__ == '__main__': | 128 if __name__ == '__main__': |
| 122 main() | 129 main() |
| OLD | NEW |