OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env 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 """The frontend for the Mojo bindings system.""" | 6 """The frontend for the Mojo bindings system.""" |
7 | 7 |
8 | 8 |
9 import argparse | 9 import argparse |
10 import imp | 10 import imp |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 | 69 |
70 | 70 |
71 def MakeImportStackMessage(imported_filename_stack): | 71 def MakeImportStackMessage(imported_filename_stack): |
72 """Make a (human-readable) message listing a chain of imports. (Returned | 72 """Make a (human-readable) message listing a chain of imports. (Returned |
73 string begins with a newline (if nonempty) and does not end with one.)""" | 73 string begins with a newline (if nonempty) and does not end with one.)""" |
74 return ''.join( | 74 return ''.join( |
75 reversed(["\n %s was imported by %s" % (a, b) for (a, b) in \ | 75 reversed(["\n %s was imported by %s" % (a, b) for (a, b) in \ |
76 zip(imported_filename_stack[1:], imported_filename_stack)])) | 76 zip(imported_filename_stack[1:], imported_filename_stack)])) |
77 | 77 |
78 | 78 |
79 def FindImportFile(dir, file, search_dirs): | 79 def FindImportFile(dir_name, file_name, search_dirs): |
80 for search_dir in [dir] + search_dirs: | 80 for search_dir in [dir_name] + search_dirs: |
81 path = os.path.join(search_dir, file) | 81 path = os.path.join(search_dir, file_name) |
82 if os.path.isfile(path): | 82 if os.path.isfile(path): |
83 return path | 83 return path |
84 return os.path.join(dir, file); | 84 return os.path.join(dir_name, file_name) |
85 | 85 |
86 | 86 |
87 # Disable check for dangerous default arguments (they're "private" keyword | 87 # Disable check for dangerous default arguments (they're "private" keyword |
88 # arguments; note that we want |_processed_files| to memoize across invocations | 88 # arguments; note that we want |_processed_files| to memoize across invocations |
89 # of |ProcessFile()|): | 89 # of |ProcessFile()|): |
90 # pylint: disable=W0102 | 90 # pylint: disable=W0102 |
91 def ProcessFile(args, remaining_args, generator_modules, filename, | 91 def ProcessFile(args, remaining_args, generator_modules, filename, |
92 _processed_files={}, _imported_filename_stack=None): | 92 _processed_files={}, _imported_filename_stack=None): |
93 # Memoized results. | 93 # Memoized results. |
94 if filename in _processed_files: | 94 if filename in _processed_files: |
(...skipping 25 matching lines...) Expand all Loading... |
120 dirname, name = os.path.split(filename) | 120 dirname, name = os.path.split(filename) |
121 mojom = Translate(tree, name) | 121 mojom = Translate(tree, name) |
122 if args.debug_print_intermediate: | 122 if args.debug_print_intermediate: |
123 pprint.PrettyPrinter().pprint(mojom) | 123 pprint.PrettyPrinter().pprint(mojom) |
124 | 124 |
125 # Process all our imports first and collect the module object for each. | 125 # Process all our imports first and collect the module object for each. |
126 # We use these to generate proper type info. | 126 # We use these to generate proper type info. |
127 for import_data in mojom['imports']: | 127 for import_data in mojom['imports']: |
128 import_filename = FindImportFile(dirname, | 128 import_filename = FindImportFile(dirname, |
129 import_data['filename'], | 129 import_data['filename'], |
130 args.import_directories); | 130 args.import_directories) |
131 import_data['module'] = ProcessFile( | 131 import_data['module'] = ProcessFile( |
132 args, remaining_args, generator_modules, import_filename, | 132 args, remaining_args, generator_modules, import_filename, |
133 _processed_files=_processed_files, | 133 _processed_files=_processed_files, |
134 _imported_filename_stack=_imported_filename_stack + [filename]) | 134 _imported_filename_stack=_imported_filename_stack + [filename]) |
135 | 135 |
136 module = OrderedModuleFromData(mojom) | 136 module = OrderedModuleFromData(mojom) |
137 | 137 |
138 # Set the path as relative to the source root. | 138 # Set the path as relative to the source root. |
139 module.path = os.path.relpath(os.path.abspath(filename), | 139 module.path = os.path.relpath(os.path.abspath(filename), |
140 os.path.abspath(args.depth)) | 140 os.path.abspath(args.depth)) |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 os.makedirs(args.output_dir) | 183 os.makedirs(args.output_dir) |
184 | 184 |
185 for filename in args.filename: | 185 for filename in args.filename: |
186 ProcessFile(args, remaining_args, generator_modules, filename) | 186 ProcessFile(args, remaining_args, generator_modules, filename) |
187 | 187 |
188 return 0 | 188 return 0 |
189 | 189 |
190 | 190 |
191 if __name__ == "__main__": | 191 if __name__ == "__main__": |
192 sys.exit(main()) | 192 sys.exit(main()) |
OLD | NEW |