parseImpellerCDepfileDependencies function
Parses dependency paths from an impellerc depfile.
impellerc emits a Ninja-style single-line depfile:
<target>: <dep1> <dep2> .... The target is ignored. Dependency paths are
converted to file URIs; relative paths are resolved against relativeTo
when it is provided.
Implementation
List<Uri> parseImpellerCDepfileDependencies(
String depfileContents, {
Uri? relativeTo,
}) {
final separator = RegExp(r':(?:\s|$)').firstMatch(depfileContents);
if (separator == null) {
return const [];
}
final dependencies = depfileContents.substring(separator.end).trim();
if (dependencies.isEmpty) {
return const [];
}
return dependencies
.split(RegExp(r'\s+'))
.where((dependency) => dependency.isNotEmpty)
.map((dependency) {
if (_isAbsoluteFilePath(dependency)) {
return Uri.file(dependency);
}
return relativeTo?.resolve(dependency) ?? Uri.file(dependency);
})
.toList();
}