OLD | NEW |
1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 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 """Configuration for the shell abstraction. | 5 """Configuration for the shell abstraction. |
6 | 6 |
7 This module declares ShellConfig and knows how to compute it from command-line | 7 This module declares ShellConfig and knows how to compute it from command-line |
8 arguments, applying any default paths inferred from the checkout, configuration | 8 arguments, applying any default paths inferred from the checkout, configuration |
9 file, etc. | 9 file, etc. |
10 """ | 10 """ |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 'These arguments apply only when running on desktop.') | 83 'These arguments apply only when running on desktop.') |
84 desktop_group.add_argument('--use-osmesa', action='store_true', | 84 desktop_group.add_argument('--use-osmesa', action='store_true', |
85 help='Configure the native viewport service ' | 85 help='Configure the native viewport service ' |
86 'for off-screen rendering.') | 86 'for off-screen rendering.') |
87 | 87 |
88 config_file_group = parser.add_argument_group('Configuration file', | 88 config_file_group = parser.add_argument_group('Configuration file', |
89 'These arguments allow to modify the behavior regarding the mojoconfig ' | 89 'These arguments allow to modify the behavior regarding the mojoconfig ' |
90 'file.') | 90 'file.') |
91 config_file_group.add_argument('--config-file', type=file, | 91 config_file_group.add_argument('--config-file', type=file, |
92 help='Path of the configuration file to use.') | 92 help='Path of the configuration file to use.') |
| 93 config_file_group.add_argument('--no-config-file', action='store_true', |
| 94 help='Pass to skip automatic discovery of the ' |
| 95 'mojoconfig file.') |
93 | 96 |
94 # Arguments allowing to indicate the build directory we are targeting when | 97 # Arguments allowing to indicate the build directory we are targeting when |
95 # running within a Chromium-like checkout (e.g. Mojo checkout). These will go | 98 # running within a Chromium-like checkout (e.g. Mojo checkout). These will go |
96 # away once we have devtools config files, see | 99 # away once we have devtools config files, see |
97 # https://github.com/domokit/devtools/issues/28. | 100 # https://github.com/domokit/devtools/issues/28. |
98 chromium_checkout_group = parser.add_argument_group( | 101 chromium_checkout_group = parser.add_argument_group( |
99 'Chromium-like checkout configuration', | 102 'Chromium-like checkout configuration', |
100 'These arguments allow to infer paths to tools and build results ' | 103 'These arguments allow to infer paths to tools and build results ' |
101 'when running within a Chromium-like checkout') | 104 'when running within a Chromium-like checkout') |
102 debug_group = chromium_checkout_group.add_mutually_exclusive_group() | 105 debug_group = chromium_checkout_group.add_mutually_exclusive_group() |
103 debug_group.add_argument('--debug', help='Debug build (default)', | 106 debug_group.add_argument('--debug', help='Debug build (default)', |
104 default=True, action='store_true') | 107 default=True, action='store_true') |
105 debug_group.add_argument('--release', help='Release build', default=False, | 108 debug_group.add_argument('--release', help='Release build', default=False, |
106 dest='debug', action='store_false') | 109 dest='debug', action='store_false') |
107 chromium_checkout_group.add_argument('--target-cpu', | 110 chromium_checkout_group.add_argument('--target-cpu', |
108 help='CPU architecture to run for.', | 111 help='CPU architecture to run for.', |
109 choices=['x64', 'x86', 'arm']) | 112 choices=['x64', 'x86', 'arm']) |
110 | 113 |
111 | 114 |
| 115 def _discover_config_file(): |
| 116 config_file_path = paths.find_within_ancestors('mojoconfig') |
| 117 if not config_file_path: |
| 118 return None |
| 119 return open(config_file_path, 'r') |
| 120 |
| 121 |
112 def _read_config_file(config_file, aliases): | 122 def _read_config_file(config_file, aliases): |
113 spec = config_file.read() | 123 spec = config_file.read() |
114 for alias_pattern, alias_value in aliases: | 124 for alias_pattern, alias_value in aliases: |
115 spec = spec.replace(alias_pattern, alias_value) | 125 spec = spec.replace(alias_pattern, alias_value) |
116 return ast.literal_eval(spec) | 126 return ast.literal_eval(spec) |
117 | 127 |
118 | 128 |
119 def get_shell_config(script_args): | 129 def get_shell_config(script_args): |
120 """Processes command-line options defined in add_shell_arguments(), applying | 130 """Processes command-line options defined in add_shell_arguments(), applying |
121 any inferred default paths and produces an instance of ShellConfig. | 131 any inferred default paths and produces an instance of ShellConfig. |
(...skipping 22 matching lines...) Expand all Loading... |
144 shell_config.logcat_tags = script_args.logcat_tags | 154 shell_config.logcat_tags = script_args.logcat_tags |
145 | 155 |
146 # Desktop-only. | 156 # Desktop-only. |
147 shell_config.use_osmesa = script_args.use_osmesa | 157 shell_config.use_osmesa = script_args.use_osmesa |
148 | 158 |
149 if (shell_config.android and not shell_config.origin and | 159 if (shell_config.android and not shell_config.origin and |
150 inferred_paths['build_dir_path']): | 160 inferred_paths['build_dir_path']): |
151 shell_config.origin = inferred_paths['build_dir_path'] | 161 shell_config.origin = inferred_paths['build_dir_path'] |
152 | 162 |
153 # Read the mojoconfig file. | 163 # Read the mojoconfig file. |
154 if script_args.config_file: | 164 config_file = script_args.config_file |
155 config_file_aliases = [] | 165 if not script_args.no_config_file: |
156 if inferred_paths['build_dir_path']: | 166 config_file = config_file or _discover_config_file() |
157 config_file_aliases.append(('@{BUILD_DIR}', | |
158 inferred_paths['build_dir_path'])) | |
159 | 167 |
160 mojoconfig = None | 168 if config_file: |
161 try: | 169 with config_file: |
162 mojoconfig = _read_config_file(script_args.config_file, | 170 config_file_aliases = [] |
163 config_file_aliases) | 171 if inferred_paths['build_dir_path']: |
164 except SyntaxError: | 172 config_file_aliases.append(('@{BUILD_DIR}', |
165 raise ShellConfigurationException('Failed to parse the mojoconfig file.') | 173 inferred_paths['build_dir_path'])) |
166 | 174 |
167 if 'dev_servers' in mojoconfig: | 175 config = None |
168 try: | 176 try: |
169 for dev_server_spec in mojoconfig['dev_servers']: | 177 if script_args.verbose: |
| 178 print 'Reading config file from: ' + config_file.name |
| 179 config = _read_config_file(config_file, config_file_aliases) |
| 180 except SyntaxError: |
| 181 raise ShellConfigurationException('Failed to parse the mojoconfig ' |
| 182 'file.') |
| 183 |
| 184 if 'dev_servers' in config: |
| 185 try: |
| 186 for dev_server_spec in config['dev_servers']: |
170 dev_server_config = DevServerConfig() | 187 dev_server_config = DevServerConfig() |
171 dev_server_config.host = dev_server_spec['host'] | 188 dev_server_config.host = dev_server_spec['host'] |
172 dev_server_config.mappings = [] | 189 dev_server_config.mappings = [] |
173 for prefix, path in dev_server_spec['mappings']: | 190 for prefix, path in dev_server_spec['mappings']: |
174 dev_server_config.mappings.append((prefix, path)) | 191 dev_server_config.mappings.append((prefix, path)) |
175 shell_config.dev_servers.append(dev_server_config) | 192 shell_config.dev_servers.append(dev_server_config) |
176 except (ValueError, KeyError): | 193 except (ValueError, KeyError): |
177 raise ShellConfigurationException('Failed to parse dev_servers in ' | 194 raise ShellConfigurationException('Failed to parse dev_servers in ' |
178 'the mojoconfig file.') | 195 'the mojoconfig file.') |
179 return shell_config | 196 return shell_config |
OLD | NEW |