search static method

List<String> search(
  1. List<String> programs,
  2. List<String> directories, [
  3. bool canStartProcesses = false
])

Looks for the programs in the systems path variable. If there isn't a match, it will be tried to start up a process of the program in the command line if canStartProcesses is set to false.

Ignores all programs in skippable. Returns a List with programs that were not found.

Implementation

static List<String> search(
  List<String> programs,
  List<String> directories, [
  bool canStartProcesses = false,
]) {
  final List<String> notAvailable = [];
  for (final String program in programs) {
    bool found = false;

    for (final String directory in directories) {
      final File programFile = File(
        path.join(directory, program + executableExtension),
      );
      if (programFile.existsSync()) {
        found = true;
        break;
      }
    }

    if (found) continue;

    for (final String pathEntry in _pathEntries) {
      final File programFile = File(
        path.join(pathEntry, program + executableExtension),
      );
      found = programFile.existsSync();
      if (found) break;
    }

    if (found) continue;
    if (!canStartProcesses) {
      notAvailable.add(program);
      continue;
    }

    final ProcessResult result = Process.runSync(
      path.basename(program),
      [],
      workingDirectory: path.dirname(program),
      runInShell: true,
      includeParentEnvironment: true,
    );
    if (result.stderr.isEmpty) continue;
    notAvailable.add(program);
  }
  return notAvailable;
}