linkWindowsCppImplStubs function
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),
);
}
}