From 6c5723fc0b3197cca15c7607edfd042d4ba1c566 Mon Sep 17 00:00:00 2001 From: Sigurd Meldgaard Date: Wed, 14 Oct 2026 14:46:21 +0000 Subject: [PATCH] Locate Dart SDK and executable via package:cli_util --- webdev/CHANGELOG.md | 4 ++++ webdev/lib/src/util.dart | 22 ++++++++++------------ webdev/lib/src/version.dart | 2 +- webdev/pubspec.yaml | 3 ++- webdev/test/utils_test.dart | 6 ++++++ 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/webdev/CHANGELOG.md b/webdev/CHANGELOG.md index fc4ec9d78b..5ecc3b52b3 100644 --- a/webdev/CHANGELOG.md +++ b/webdev/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.0.4-wip + +- Locate the Dart SDK and `dart` executable via `package:cli_util` when running in AOT mode. + ## 4.0.3 - Fix failing debugger expression evaluation. diff --git a/webdev/lib/src/util.dart b/webdev/lib/src/util.dart index 47033d5469..58d9d6922e 100644 --- a/webdev/lib/src/util.dart +++ b/webdev/lib/src/util.dart @@ -5,6 +5,7 @@ import 'dart:async'; import 'dart:io'; +import 'package:cli_util/cli_util.dart'; import 'package:path/path.dart' as p; import 'package:shelf/shelf.dart'; import 'package:shelf/shelf_io.dart'; @@ -28,18 +29,15 @@ void serveHttpRequests( /// The path to the root directory of the SDK. final String _sdkDir = (() { - // The Dart executable is in "/path/to/sdk/bin/dart", so two levels up is - // "/path/to/sdk". - final String dartExecutable = Platform.isWindows - // Use 'where.exe' to support powershell as well - ? (Process.runSync('where.exe', ['dart.exe']).stdout as String) - .split(RegExp('(\r\n|\r|\n)')) - .first - : Process.runSync('which', ['dart']).stdout; - final aboveExecutable = p.dirname(p.dirname(dartExecutable)); - assert(FileSystemEntity.isFileSync(p.join(aboveExecutable, 'version'))); - return aboveExecutable; + final sdk = sdkPath; + if (sdk == null) { + throw StateError('Unable to locate the Dart SDK.'); + } + assert(FileSystemEntity.isFileSync(p.join(sdk, 'version'))); + return sdk; })(); -final String dartPath = p.join(_sdkDir, 'bin', 'dart'); +final String dartPath = + dartExecutable ?? + p.join(_sdkDir, 'bin', Platform.isWindows ? 'dart.exe' : 'dart'); final String devToolsPath = p.join(_sdkDir, 'bin', 'resources', 'devtools'); diff --git a/webdev/lib/src/version.dart b/webdev/lib/src/version.dart index ee7a14f006..47a4d7408f 100644 --- a/webdev/lib/src/version.dart +++ b/webdev/lib/src/version.dart @@ -1,2 +1,2 @@ // Generated code. Do not modify. -const packageVersion = '4.0.3'; +const packageVersion = '4.0.4-wip'; diff --git a/webdev/pubspec.yaml b/webdev/pubspec.yaml index 85a77bf775..cd1232092d 100644 --- a/webdev/pubspec.yaml +++ b/webdev/pubspec.yaml @@ -1,6 +1,6 @@ name: webdev # Every time this changes you need to run `dart run build_runner build`. -version: 4.0.3 +version: 4.0.4-wip # We should not depend on a dev SDK before publishing. # publish_to: none description: >- @@ -15,6 +15,7 @@ dependencies: async: ^2.9.0 build_daemon: ^4.1.4 browser_launcher: ^1.1.0 + cli_util: ^0.6.0 collection: ^1.15.0 crypto: ^3.0.2 dds: ^5.3.0 diff --git a/webdev/test/utils_test.dart b/webdev/test/utils_test.dart index 03e37d957f..046e2f88be 100644 --- a/webdev/test/utils_test.dart +++ b/webdev/test/utils_test.dart @@ -11,8 +11,14 @@ import 'dart:io'; import 'package:path/path.dart' as p; import 'package:test/test.dart'; import 'package:webdev/src/serve/utils.dart'; +import 'package:webdev/src/util.dart'; void main() { + test('dartPath and devToolsPath resolve via cli_util', () { + expect(File(dartPath).existsSync(), isTrue); + expect(Directory(devToolsPath).existsSync(), isTrue); + }); + late Directory from; late Directory to;