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 /// This library generates Mojo bindings for a Dart package. | 5 /// This library generates Mojo bindings for a Dart package. |
6 | 6 |
7 library generate; | 7 library generate; |
8 | 8 |
9 import 'dart:async'; | 9 import 'dart:async'; |
10 import 'dart:convert'; | 10 import 'dart:convert'; |
11 import 'dart:developer' as dev; | 11 import 'dart:developer' as dev; |
12 import 'dart:io'; | 12 import 'dart:io'; |
13 | 13 |
14 import 'package:mojom/src/utils.dart'; | 14 import 'package:mojom/src/utils.dart'; |
15 import 'package:path/path.dart' as path; | 15 import 'package:path/path.dart' as path; |
16 | 16 |
17 part 'mojom_finder.dart'; | 17 part 'mojom_finder.dart'; |
18 | 18 |
19 const String mojoTestPackage = '_mojo_for_test_only'; | |
20 | |
19 class MojomGenerator { | 21 class MojomGenerator { |
20 static dev.Counter _genMs; | 22 static dev.Counter _genMs; |
21 final bool _errorOnDuplicate; | 23 final bool _errorOnDuplicate; |
22 final bool _dryRun; | 24 final bool _dryRun; |
23 final bool _force; | 25 final bool _force; |
24 final Directory _mojoSdk; | 26 final Directory _mojoSdk; |
25 | 27 |
26 Map<String, String> _duplicateDetection; | 28 Map<String, String> _duplicateDetection; |
27 int _generationMs; | 29 int _generationMs; |
28 | 30 |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
154 | 156 |
155 final script = path.join( | 157 final script = path.join( |
156 _mojoSdk.path, 'tools', 'bindings', 'mojom_bindings_generator.py'); | 158 _mojoSdk.path, 'tools', 'bindings', 'mojom_bindings_generator.py'); |
157 final sdkInc = path.normalize(path.join(_mojoSdk.path, '..', '..')); | 159 final sdkInc = path.normalize(path.join(_mojoSdk.path, '..', '..')); |
158 final outputDir = await Directory.systemTemp.createTemp(); | 160 final outputDir = await Directory.systemTemp.createTemp(); |
159 try { | 161 try { |
160 final output = outputDir.path; | 162 final output = outputDir.path; |
161 | 163 |
162 final servicesPath = _sniffForMojoServicesInclude(mojom.path); | 164 final servicesPath = _sniffForMojoServicesInclude(mojom.path); |
163 | 165 |
166 final generateTypeInfoFlag = packageName == mojoTestPackage ? | |
zra
2016/01/27 18:15:12
Please add a TODO and file a bug to remove this ha
alexfandrianto
2016/01/28 03:45:12
Done.
| |
167 '--generate-type-info' : '--no-generate-type-info'; | |
168 | |
164 final arguments = [ | 169 final arguments = [ |
165 '--use_bundled_pylibs', | 170 '--use_bundled_pylibs', |
166 '-g', | 171 '-g', |
167 'dart', | 172 'dart', |
168 '-o', | 173 '-o', |
169 output, | 174 output, |
170 '-I', | 175 '-I', |
171 sdkInc, | 176 sdkInc, |
172 '-I', | 177 '-I', |
173 importDir.path, | 178 importDir.path, |
174 '--no-gen-imports' | 179 '--no-gen-imports', |
180 generateTypeInfoFlag | |
175 ]; | 181 ]; |
176 if (servicesPath != null) { | 182 if (servicesPath != null) { |
177 arguments.add('-I'); | 183 arguments.add('-I'); |
178 arguments.add(servicesPath); | 184 arguments.add(servicesPath); |
179 } | 185 } |
180 arguments.add(mojom.path); | 186 arguments.add(mojom.path); |
181 | 187 |
182 log.info('Generating $mojom'); | 188 log.info('Generating $mojom'); |
183 log.info('$script ${arguments.join(" ")}'); | 189 log.info('$script ${arguments.join(" ")}'); |
184 log.info('dryRun = $_dryRun'); | 190 log.info('dryRun = $_dryRun'); |
185 if (!_dryRun) { | 191 if (!_dryRun) { |
186 final result = await _runBindingsGeneration(script, arguments); | 192 final result = await _runBindingsGeneration(script, arguments); |
187 if (result.exitCode != 0) { | 193 if (result.exitCode != 0) { |
188 log.info("bindings generation result = ${result.exitCode}"); | 194 log.info("bindings generation result = ${result.exitCode}"); |
189 await outputDir.delete(recursive: true); | 195 await outputDir.delete(recursive: true); |
190 throw new GenerationError("$script failed:\n" | 196 throw new GenerationError("$script failed:\n" |
191 "code: ${result.exitCode}\n" | 197 "code: ${result.exitCode}\n" |
192 "stderr: ${result.stderr}\n" | 198 "stderr: ${result.stderr}\n" |
193 "stdout: ${result.stdout}"); | 199 "stdout: ${result.stdout}"); |
194 } else { | 200 } else { |
195 log.info("bindings generation result = 0"); | 201 log.info("bindings generation result = 0"); |
196 } | 202 } |
197 | 203 |
198 // Generated .mojom.dart is under $output/dart-gen/$PACKAGE/lib/$X | 204 // Generated .mojom.dart is under $output/dart-gen/$PACKAGE/lib/$X |
199 // Move $X to |destination|/lib/$X. | 205 // Move $X to |destination|/lib/$X. |
200 // Throw an exception if $PACKGE != [packageName]. | 206 // Throw an exception if $PACKAGE != [packageName]. |
201 final generatedDirName = path.join(output, 'dart-gen'); | 207 final generatedDirName = path.join(output, 'dart-gen'); |
202 final generatedDir = new Directory(generatedDirName); | 208 final generatedDir = new Directory(generatedDirName); |
203 log.info("generatedDir= $generatedDir"); | 209 log.info("generatedDir= $generatedDir"); |
204 assert(await generatedDir.exists()); | 210 assert(await generatedDir.exists()); |
205 await for (var genpack in generatedDir.list()) { | 211 await for (var genpack in generatedDir.list()) { |
206 if (genpack is! Directory) continue; | 212 if (genpack is! Directory) continue; |
207 log.info("genpack = $genpack"); | 213 log.info("genpack = $genpack"); |
208 var libDir = new Directory(path.join(genpack.path, 'lib')); | 214 var libDir = new Directory(path.join(genpack.path, 'lib')); |
209 var name = path.relative(genpack.path, from: generatedDirName); | 215 var name = path.relative(genpack.path, from: generatedDirName); |
210 log.info("Found generated lib dir: $libDir"); | 216 log.info("Found generated lib dir: $libDir"); |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
437 '\t$dart $packRoot $scriptPath single -m $mojoSdk -r $root ' | 443 '\t$dart $packRoot $scriptPath single -m $mojoSdk -r $root ' |
438 '-p $packagePath $skips'); | 444 '-p $packagePath $skips'); |
439 _errors++; | 445 _errors++; |
440 return; | 446 return; |
441 } | 447 } |
442 } | 448 } |
443 } | 449 } |
444 | 450 |
445 bool _shouldSkip(File f) => containsPrefix(f.path, _skip); | 451 bool _shouldSkip(File f) => containsPrefix(f.path, _skip); |
446 } | 452 } |
OLD | NEW |