| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import os.path | 5 import os.path |
| 6 import sys | 6 import sys |
| 7 import optparse | 7 import optparse |
| 8 import collections | 8 import collections |
| 9 import functools | 9 import functools |
| 10 try: | 10 try: |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 if optional_key.find(".") == -1 and optional_key not in keys: | 45 if optional_key.find(".") == -1 and optional_key not in keys: |
| 46 keys.append(optional_key) | 46 keys.append(optional_key) |
| 47 values.append(defaults[optional]) | 47 values.append(defaults[optional]) |
| 48 return collections.namedtuple('X', keys)(*values) | 48 return collections.namedtuple('X', keys)(*values) |
| 49 | 49 |
| 50 try: | 50 try: |
| 51 cmdline_parser = optparse.OptionParser() | 51 cmdline_parser = optparse.OptionParser() |
| 52 cmdline_parser.add_option("--output_base") | 52 cmdline_parser.add_option("--output_base") |
| 53 cmdline_parser.add_option("--jinja_dir") | 53 cmdline_parser.add_option("--jinja_dir") |
| 54 cmdline_parser.add_option("--config") | 54 cmdline_parser.add_option("--config") |
| 55 cmdline_parser.add_option("--config_value", action="append", type="strin
g") |
| 55 arg_options, _ = cmdline_parser.parse_args() | 56 arg_options, _ = cmdline_parser.parse_args() |
| 56 jinja_dir = arg_options.jinja_dir | 57 jinja_dir = arg_options.jinja_dir |
| 57 if not jinja_dir: | 58 if not jinja_dir: |
| 58 raise Exception("jinja directory must be specified") | 59 raise Exception("jinja directory must be specified") |
| 59 output_base = arg_options.output_base | 60 output_base = arg_options.output_base |
| 60 if not output_base: | 61 if not output_base: |
| 61 raise Exception("Base output directory must be specified") | 62 raise Exception("Base output directory must be specified") |
| 62 config_file = arg_options.config | 63 config_file = arg_options.config |
| 63 if not config_file: | 64 if not config_file: |
| 64 raise Exception("Config file name must be specified") | 65 raise Exception("Config file name must be specified") |
| 65 config_base = os.path.dirname(config_file) | 66 config_base = os.path.dirname(config_file) |
| 67 config_values = arg_options.config_value |
| 66 except Exception: | 68 except Exception: |
| 67 # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.h
tml | 69 # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.h
tml |
| 68 exc = sys.exc_info()[1] | 70 exc = sys.exc_info()[1] |
| 69 sys.stderr.write("Failed to parse command-line arguments: %s\n\n" % exc) | 71 sys.stderr.write("Failed to parse command-line arguments: %s\n\n" % exc) |
| 70 exit(1) | 72 exit(1) |
| 71 | 73 |
| 72 try: | 74 try: |
| 73 config_json_file = open(config_file, "r") | 75 config_json_file = open(config_file, "r") |
| 74 config_json_string = config_json_file.read() | 76 config_json_string = config_json_file.read() |
| 75 config_partial = json_to_object(config_json_string, output_base, config_
base) | 77 config_partial = json_to_object(config_json_string, output_base, config_
base) |
| 76 config_json_file.close() | 78 config_json_file.close() |
| 77 defaults = { | 79 defaults = { |
| 78 ".imported": False, | 80 ".imported": False, |
| 79 ".imported.export_macro": "", | 81 ".imported.export_macro": "", |
| 80 ".imported.export_header": False, | 82 ".imported.export_header": False, |
| 81 ".imported.header": False, | 83 ".imported.header": False, |
| 82 ".imported.package": False, | 84 ".imported.package": False, |
| 83 ".protocol.export_macro": "", | 85 ".protocol.export_macro": "", |
| 84 ".protocol.export_header": False, | 86 ".protocol.export_header": False, |
| 85 ".protocol.options": False, | 87 ".protocol.options": False, |
| 86 ".exported": False, | 88 ".exported": False, |
| 87 ".exported.export_macro": "", | 89 ".exported.export_macro": "", |
| 88 ".exported.export_header": False, | 90 ".exported.export_header": False, |
| 89 ".lib": False, | 91 ".lib": False, |
| 90 ".lib.export_macro": "", | 92 ".lib.export_macro": "", |
| 91 ".lib.export_header": False, | 93 ".lib.export_header": False, |
| 92 } | 94 } |
| 95 for key_value in config_values: |
| 96 parts = key_value.split("=") |
| 97 if len(parts) == 2: |
| 98 defaults["." + parts[0]] = parts[1] |
| 93 return (jinja_dir, config_file, init_defaults(config_partial, "", defaul
ts)) | 99 return (jinja_dir, config_file, init_defaults(config_partial, "", defaul
ts)) |
| 94 except Exception: | 100 except Exception: |
| 95 # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.h
tml | 101 # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.h
tml |
| 96 exc = sys.exc_info()[1] | 102 exc = sys.exc_info()[1] |
| 97 sys.stderr.write("Failed to parse config file: %s\n\n" % exc) | 103 sys.stderr.write("Failed to parse config file: %s\n\n" % exc) |
| 98 exit(1) | 104 exit(1) |
| 99 | 105 |
| 100 | 106 |
| 101 def to_title_case(name): | 107 def to_title_case(name): |
| 102 return name[:1].upper() + name[1:] | 108 return name[:1].upper() + name[1:] |
| (...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 if up_to_date: | 540 if up_to_date: |
| 535 sys.exit() | 541 sys.exit() |
| 536 | 542 |
| 537 for file_name, content in outputs.iteritems(): | 543 for file_name, content in outputs.iteritems(): |
| 538 out_file = open(file_name, "w") | 544 out_file = open(file_name, "w") |
| 539 out_file.write(content) | 545 out_file.write(content) |
| 540 out_file.close() | 546 out_file.close() |
| 541 | 547 |
| 542 | 548 |
| 543 main() | 549 main() |
| OLD | NEW |