validateSpmSourcesStructure function
Validates the SPM Sources directory structure for a platform.
Implementation
SpmSourcesValidation validateSpmSourcesStructure(
String baseDir,
String platform,
String className,
) {
final platformDir = Directory(p.join(baseDir, platform));
if (!platformDir.existsSync()) {
return SpmSourcesValidation(isValid: false, issues: ['$platform/ directory not found']);
}
final sourcesDir = Directory(p.join(platformDir.path, 'Sources'));
if (!sourcesDir.existsSync()) {
return SpmSourcesValidation(isValid: false, issues: ['$platform/Sources/ directory not found']);
}
final swiftDir = Directory(p.join(sourcesDir.path, className));
final cppDir = Directory(p.join(sourcesDir.path, '${className}Cpp'));
final missingDirs = <String>[];
final missingSymlinks = <String>[];
final issues = <String>[];
if (!swiftDir.existsSync()) {
missingDirs.add('$platform/Sources/$className');
}
if (!cppDir.existsSync()) {
missingDirs.add('$platform/Sources/${className}Cpp');
}
// Check for include directory in Cpp target
if (cppDir.existsSync()) {
final includeDir = Directory(p.join(cppDir.path, 'include'));
final includeLink = Link(p.join(cppDir.path, 'include'));
if (!includeDir.existsSync() && !includeLink.existsSync()) {
missingSymlinks.add('$platform/Sources/${className}Cpp/include');
}
}
return SpmSourcesValidation(
isValid: missingDirs.isEmpty && issues.isEmpty,
missingDirs: missingDirs,
missingSymlinks: missingSymlinks,
issues: issues,
);
}