compiledExe method

Future<DartPackageIoCompiledExe> compiledExe({
  1. String? script,
  2. bool force = false,
  3. Version? minVersion,
  4. bool verbose = false,
})

Simple exe compiler

Implementation

Future<DartPackageIoCompiledExe> compiledExe({
  String? script,
  bool force = false,
  Version? minVersion,
  bool verbose = false,
}) async {
  script = normalize(
    absolute(
      joinAll([
        path,
        if (script != null) script else ...['bin', 'main.dart'],
      ]),
    ),
  );
  var scriptBasename = basenameWithoutExtension(script);
  var folder =
      Platform.isWindows ? 'windows' : (Platform.isMacOS ? 'macos' : 'linux');
  var exeExtension = Platform.isWindows ? '.exe' : '';
  var exe = join(path, 'build', folder, '$scriptBasename$exeExtension');
  var exeDir = dirname(exe);

  var shell = Shell(verbose: verbose);
  var file = File(exe);

  var needCompile = force || !file.existsSync();

  if (!needCompile && minVersion == null) {
    return DartPackageIoCompiledExe(exe, null);
  }
  if (!needCompile && file.existsSync()) {
    if (minVersion != null) {
      var version = await _getVersion(exe);
      if (version != null && version >= minVersion) {
        if (verbose) {
          stdout.writeln('found version $version exe $exe');
        }
        return DartPackageIoCompiledExe(exe, version);
      } else {
        needCompile = true;
      }
    }
  }
  if (needCompile) {
    Directory(exeDir).createSync(recursive: true);
    await shell.run(
      'dart compile exe ${shellArgument(script)} -o ${shellArgument(exe)}',
    );
  }
  var version = await _getVersion(exe);
  if (verbose) {
    stdout.writeln('version $version exe $exe');
  }
  return DartPackageIoCompiledExe(exe, version);
}