linkWindowsCppImplStubs function

void linkWindowsCppImplStubs(
  1. List<ModuleInfo> moduleInfos, {
  2. String baseDir = '.',
})

Creates Windows-specific C++ impl stub files for modules that target windows: WindowsNativeImpl.cpp. These stubs live in windows/src/ so windows/CMakeLists.txt can reference them via a relative path.

Implementation

void linkWindowsCppImplStubs(
  List<ModuleInfo> moduleInfos, {
  String baseDir = '.',
}) {
  final libDir = Directory(p.join(baseDir, 'lib'));
  final specFiles = libDir.existsSync()
      ? libDir
            .listSync(recursive: true)
            .whereType<File>()
            .where((f) => f.path.endsWith('.native.dart'))
            .toList()
      : <File>[];
  final windowsCppLibs = specFiles.where(isWindowsCppModule).map((f) {
    final stem = p.basename(f.path).replaceAll(RegExp(r'\.native\.dart$'), '');
    return extractLibNameFromSpec(f) ?? stem;
  }).toSet();

  for (final m in moduleInfos.where(
    (m) => m.isCpp && windowsCppLibs.contains(m.lib),
  )) {
    final className = _toPascalCase(m.lib);
    final winSrcDir = Directory(p.join(baseDir, 'windows', 'src'))
      ..createSync(recursive: true);
    final stubFile = File(p.join(winSrcDir.path, 'Hybrid$className.cpp'));
    if (stubFile.existsSync()) continue;
    stubFile.writeAsStringSync(
      t.windowsCppStubContent(lib: m.lib, className: className),
    );
  }
}