Skip to content

Commit 8107f37

Browse files
authored
[native_toolchain_c] Export environmentFromBatchFile (#864)
* #856 (comment)
1 parent 2b1fbf8 commit 8107f37

File tree

6 files changed

+30
-17
lines changed

6 files changed

+30
-17
lines changed

pkgs/native_toolchain_c/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
## 0.3.3-wip
1+
## 0.3.3
22

3+
- Export `environmentFromBatchFile`.
34
- Bump `package:native_assets_cli` to 0.3.2.
45

56
## 0.3.2

pkgs/native_toolchain_c/lib/native_toolchain_c.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
library;
77

88
export 'src/cbuilder/cbuilder.dart';
9+
export 'src/utils/env_from_bat.dart';

pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,8 @@ class RunCBuilder {
232232
Future<void> runCl({required ToolInstance compiler}) async {
233233
final vcvars = (await _resolver.toolchainEnvironmentScript(compiler))!;
234234
final vcvarsArgs = _resolver.toolchainEnvironmentScriptArguments();
235-
final environment = await envFromBat(vcvars, arguments: vcvarsArgs ?? []);
235+
final environment =
236+
await environmentFromBatchFile(vcvars, arguments: vcvarsArgs ?? []);
236237

237238
final isStaticLib = staticLibrary != null;
238239
Uri? archiver_;

pkgs/native_toolchain_c/lib/src/utils/env_from_bat.dart

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@
44

55
import 'dart:io';
66

7-
Future<Map<String, String>> envFromBat(
7+
/// Extracts the environment variables set by [batchFile].
8+
///
9+
/// If provided, passes [arguments] to the batch file invocation.
10+
///
11+
/// Note: needs to run [batchFile] to extract the modifications to the
12+
/// environment variables.
13+
Future<Map<String, String>> environmentFromBatchFile(
814
Uri batchFile, {
915
List<String> arguments = const [],
1016
}) async {
@@ -20,8 +26,8 @@ Future<Map<String, String>> envFromBat(
2026
assert(processResult.exitCode == 0);
2127
final resultSplit = (processResult.stdout as String).split(separator);
2228
assert(resultSplit.length == 2);
23-
final unmodifiedParsed = parseDefines(resultSplit.first.trim());
24-
final modifiedParsed = parseDefines(resultSplit[1].trim());
29+
final unmodifiedParsed = _parseDefines(resultSplit.first.trim());
30+
final modifiedParsed = _parseDefines(resultSplit[1].trim());
2531
final result = <String, String>{};
2632
for (final entry in modifiedParsed.entries) {
2733
final key = entry.key;
@@ -33,8 +39,12 @@ Future<Map<String, String>> envFromBat(
3339
return result;
3440
}
3541

36-
// Ensures it doesn't return empty keys.
37-
Map<String, String> parseDefines(String defines) {
42+
/// Parses a string of defines.
43+
///
44+
/// Expected format is separate lines of `KEY=value`.
45+
///
46+
/// Ensures it doesn't return empty keys.
47+
Map<String, String> _parseDefines(String defines) {
3848
final result = <String, String>{};
3949
final lines = defines.trim().split('\r\n');
4050
for (final line in lines) {

pkgs/native_toolchain_c/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: native_toolchain_c
22
description: >-
33
A library to invoke the native C compiler installed on the host machine.
4-
version: 0.3.3-wip
4+
version: 0.3.3
55
repository: https://github.com/dart-lang/native/tree/main/pkgs/native_toolchain_c
66

77
topics:
@@ -12,7 +12,7 @@ topics:
1212
- native-toolchain
1313

1414
environment:
15-
sdk: '>=3.1.0 <4.0.0'
15+
sdk: ">=3.1.0 <4.0.0"
1616

1717
dependencies:
1818
cli_config: ^0.1.1

pkgs/native_toolchain_c/test/native_toolchain/msvc_test.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ void main() {
9898
expect(instances.isNotEmpty, true);
9999
final instance = instances.first;
100100
expect(instance.tool, vcvars32);
101-
final env = await envFromBat(instance.uri);
101+
final env = await environmentFromBatchFile(instance.uri);
102102
expect(env['INCLUDE'] != null, true);
103103
expect(env['WindowsSdkDir'] != null, true); // stdio.h
104104
});
@@ -113,7 +113,7 @@ void main() {
113113
expect(instances.isNotEmpty, true);
114114
final instance = instances.first;
115115
expect(instance.tool, vcvars64);
116-
final env = await envFromBat(instance.uri);
116+
final env = await environmentFromBatchFile(instance.uri);
117117
expect(env['INCLUDE'] != null, true);
118118
expect(env['WindowsSdkDir'] != null, true); // stdio.h
119119
});
@@ -128,7 +128,7 @@ void main() {
128128
expect(instances.isNotEmpty, true);
129129
final instance = instances.first;
130130
expect(instance.tool, vcvarsarm64);
131-
final env = await envFromBat(instance.uri);
131+
final env = await environmentFromBatchFile(instance.uri);
132132
expect(env['INCLUDE'] != null, true);
133133
expect(env['WindowsSdkDir'] != null, true); // stdio.h
134134
});
@@ -137,7 +137,7 @@ void main() {
137137
final instances = await vcvars32.defaultResolver!.resolve(logger: logger);
138138
expect(instances.isNotEmpty, true);
139139
final instance = instances.first;
140-
final env = await envFromBat(instance.uri);
140+
final env = await environmentFromBatchFile(instance.uri);
141141
expect(env['INCLUDE'] != null, true);
142142
expect(env['WindowsSdkDir'] != null, true); // stdio.h
143143
});
@@ -146,7 +146,7 @@ void main() {
146146
final instances = await vcvars64.defaultResolver!.resolve(logger: logger);
147147
expect(instances.isNotEmpty, true);
148148
final instance = instances.first;
149-
final env = await envFromBat(instance.uri);
149+
final env = await environmentFromBatchFile(instance.uri);
150150
expect(env['INCLUDE'] != null, true);
151151
expect(env['WindowsSdkDir'] != null, true); // stdio.h
152152
});
@@ -156,7 +156,7 @@ void main() {
156156
await vcvarsarm64.defaultResolver!.resolve(logger: logger);
157157
expect(instances.isNotEmpty, true);
158158
final instance = instances.first;
159-
final env = await envFromBat(instance.uri);
159+
final env = await environmentFromBatchFile(instance.uri);
160160
expect(env['INCLUDE'] != null, true);
161161
expect(env['WindowsSdkDir'] != null, true); // stdio.h
162162
});
@@ -165,7 +165,7 @@ void main() {
165165
final instances = await vcvarsall.defaultResolver!.resolve(logger: logger);
166166
expect(instances.isNotEmpty, true);
167167
final instance = instances.first;
168-
final env = await envFromBat(
168+
final env = await environmentFromBatchFile(
169169
instance.uri,
170170
arguments: [
171171
'x64',
@@ -181,7 +181,7 @@ void main() {
181181
final instances = await vsDevCmd.defaultResolver!.resolve(logger: logger);
182182
expect(instances.isNotEmpty, true);
183183
final instance = instances.first;
184-
final env = await envFromBat(instance.uri);
184+
final env = await environmentFromBatchFile(instance.uri);
185185
expect(env['INCLUDE'] != null, true);
186186
expect(env['WindowsSdkDir'] != null, true); // stdio.h
187187
});

0 commit comments

Comments
 (0)