Skip to content

Commit d42476d

Browse files
committed
Fixes dart-lang#2095 - Move /D defines to a /FI (Name Forced Include) file.
1 parent 0cd2e55 commit d42476d

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'dart:math';
6+
import 'dart:io';
67

78
import 'package:logging/logging.dart';
89
import 'package:native_assets_cli/code_assets.dart';
@@ -348,6 +349,21 @@ class RunCBuilder {
348349
archiver_ = await archiver();
349350
}
350351

352+
// create temporary "Name Forced Include" file
353+
final nfiFile = File.fromUri(outDir.resolve('nfi.txt'));
354+
// add each preprocessor definition to the file
355+
for (final MapEntry(key: name, :value) in defines.entries) {
356+
(value == null)
357+
? await nfiFile.writeAsString(
358+
'#ifndef $name\n#define $name\n#endif\n',
359+
mode: FileMode.append,
360+
)
361+
: await nfiFile.writeAsString(
362+
'#ifndef $name\n#define $name $value\n#endif\n',
363+
mode: FileMode.append,
364+
);
365+
}
366+
351367
final result = await runProcess(
352368
executable: tool.uri,
353369
arguments: [
@@ -356,8 +372,7 @@ class RunCBuilder {
356372
if (std != null) '/std:$std',
357373
if (language == Language.cpp) '/TP',
358374
...flags,
359-
for (final MapEntry(key: name, :value) in defines.entries)
360-
if (value == null) '/D$name' else '/D$name=$value',
375+
...defines.isNotEmpty ? ['/FI${nfiFile.path}'] : [],
361376
for (final directory in includes) '/I${directory.toFilePath()}',
362377
if (executable != null) ...[
363378
...sources.map((e) => e.toFilePath()),

0 commit comments

Comments
 (0)