Skip to content

Commit

Permalink
[vm/gen_kernel] Support package_config.json when converting main scri…
Browse files Browse the repository at this point in the history
…pt URI to package URI

Fixes #42614

Change-Id: I6253412677b6954be36f519a193bed34004a1ff3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153541
Reviewed-by: Jonah Williams <jonahwilliams@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
  • Loading branch information
alexmarkov authored and commit-bot@chromium.org committed Jul 8, 2020
1 parent 464641f commit 05003ab
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 34 deletions.
42 changes: 8 additions & 34 deletions pkg/vm/lib/kernel_front_end.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
library vm.kernel_front_end;

import 'dart:async';
import 'dart:io' show File, IOSink, IOException;
import 'dart:io' show File, IOSink;

import 'package:args/args.dart' show ArgParser, ArgResults;

Expand All @@ -28,7 +28,6 @@ import 'package:front_end/src/api_unstable/vm.dart'
ExperimentalFlag,
FileSystem,
FileSystemEntity,
FileSystemException,
NnbdMode,
ProcessedOptions,
Severity,
Expand All @@ -46,6 +45,7 @@ import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
import 'package:kernel/core_types.dart' show CoreTypes;
import 'package:kernel/kernel.dart' show loadComponentFromBinary;
import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget;
import 'package:package_config/package_config.dart' show loadPackageConfigUri;

import 'bytecode/bytecode_serialization.dart' show BytecodeSizeStatistics;
import 'bytecode/gen_bytecode.dart'
Expand Down Expand Up @@ -664,48 +664,22 @@ Future<Uri> asFileUri(FileSystem fileSystem, Uri uri) async {
}

/// Convert URI to a package URI if it is inside one of the packages.
/// TODO(alexmarkov) Remove this conversion after Fuchsia build rules are fixed.
Future<Uri> convertToPackageUri(
FileSystem fileSystem, Uri uri, Uri packagesUri) async {
if (uri.scheme == 'package') {
return uri;
}
// Convert virtual URI to a real file URI.
String uriString = (await asFileUri(fileSystem, uri)).toString();
List<String> packages;
final Uri fileUri = await asFileUri(fileSystem, uri);
try {
packages =
await new File((await asFileUri(fileSystem, packagesUri)).toFilePath())
.readAsLines();
} on IOException {
final packageConfig =
await loadPackageConfigUri(await asFileUri(fileSystem, packagesUri));
return packageConfig.toPackageUri(fileUri) ?? uri;
} catch (_) {
// Can't read packages file - silently give up.
return uri;
}
// file:///a/b/x/y/main.dart -> package:x.y/main.dart
for (var line in packages) {
if (line.isEmpty || line.startsWith("#")) {
continue;
}

final colon = line.indexOf(':');
if (colon == -1) {
continue;
}
final packageName = line.substring(0, colon);
String packagePath;
try {
packagePath = (await asFileUri(
fileSystem, packagesUri.resolve(line.substring(colon + 1))))
.toString();
} on FileSystemException {
// Can't resolve package path.
continue;
}
if (uriString.startsWith(packagePath)) {
return Uri.parse(
'package:$packageName/${uriString.substring(packagePath.length)}');
}
}
return uri;
}

/// Write a separate kernel binary for each package. The name of the
Expand Down
29 changes: 29 additions & 0 deletions pkg/vm/test/kernel_front_end_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ String platformPath() => computePlatformBinariesLocation()
const String mainScript = 'pkg/vm/bin/gen_kernel.dart';
const String mainScriptPackageUri = 'package:vm/kernel_front_end.dart';
const String packagesFile = '.packages';
const String packageConfigFile = '.dart_tool/package_config.json';

void testCompile(List<String> args) async {
final compilerExitCode =
Expand Down Expand Up @@ -132,4 +133,32 @@ main() {
'$sdkDir/$mainScript',
]);
}, timeout: Timeout.none);

test('compile-package-config', () async {
await testCompile([
'--platform',
platformPath(),
'--packages',
'$sdkDir/$packageConfigFile',
'--output',
outputDill(),
'$sdkDir/$mainScript',
]);
}, timeout: Timeout.none);

test('compile-multi-root-package-config', () async {
await testCompile([
'--platform',
platformPath(),
'--filesystem-scheme',
'test-filesystem-scheme',
'--filesystem-root',
sdkDir,
'--packages',
'test-filesystem-scheme:///$packageConfigFile',
'--output',
outputDill(),
'test-filesystem-scheme:///$mainScript',
]);
}, timeout: Timeout.none);
}

0 comments on commit 05003ab

Please sign in to comment.