[dart] Support multi-root URIs in --packages option in kernel compiler
Test: changed dart_kernel build rule to always use multi-root filesystem URI in --packages option.
Change-Id: Ib8162582272e4e4fcb8b419bab345a26f0c2dfba
diff --git a/runtime/dart/compiler.dart b/runtime/dart/compiler.dart
index 570f109..0f74cd4 100644
--- a/runtime/dart/compiler.dart
+++ b/runtime/dart/compiler.dart
@@ -3,7 +3,7 @@
// found in the LICENSE file.
import 'dart:async';
-import 'dart:io';
+import 'dart:io' hide FileSystemException;
import 'package:args/args.dart';
@@ -134,12 +134,22 @@
// fuchsia-source:///x/y/main.dart -> file:///a/b/x/y/main.dart
String mainUriString = (await _asFileUri(fileSystem, mainUri)).toString();
// file:///a/b/x/y/main.dart -> package:x.y/main.dart
- for (var line in await new File(packagesUri.toFilePath()).readAsLines()) {
+ for (var line in await new File(
+ (await _asFileUri(fileSystem, packagesUri)).toFilePath())
+ .readAsLines()) {
var colon = line.indexOf(':');
if (colon == -1)
continue;
var packageName = line.substring(0, colon);
- var packagePath = line.substring(colon + 1);
+ String packagePath;
+ try {
+ packagePath = (await _asFileUri(
+ fileSystem, packagesUri.resolve(line.substring(colon + 1))))
+ .toString();
+ } on FileSystemException {
+ // Can't resolve package path.
+ continue;
+ }
if (mainUriString.startsWith(packagePath)) {
mainUri = Uri.parse('package:$packageName/${mainUriString.substring(packagePath.length)}');
break;
diff --git a/runtime/dart/dart_kernel.gni b/runtime/dart/dart_kernel.gni
index f8758b1..1e2b49d 100644
--- a/runtime/dart/dart_kernel.gni
+++ b/runtime/dart/dart_kernel.gni
@@ -103,7 +103,7 @@
dart_target_gen_dir =
get_label_info(":bogus($dart_toolchain)", "target_gen_dir")
rebased_packages_path =
- rebase_path("$dart_target_gen_dir/$dart_library_target_name.packages")
+ rebase_path("$dart_target_gen_dir/$dart_library_target_name.packages", "//")
multi_root_scheme = "fuchsia-source"
@@ -118,7 +118,7 @@
"--multi-root",
rebase_path("//"),
"--packages",
- rebased_packages_path,
+ "$multi_root_scheme:///$rebased_packages_path",
"--depfile",
rebase_path(depfile, root_build_dir),
"--output",