Chromium Code Reviews| 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 |