| // Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:io'; |
| |
| import 'package:jni/jni.dart'; |
| import 'package:jni/src/build_util/build_util.dart'; |
| |
| typedef TestCaseCallback = void Function(); |
| typedef TestRunnerCallback = void |
| Function(String description, TestCaseCallback test, {Object? skip}); |
| |
| final currentDir = Directory.current.uri; |
| final dllSuffix = |
| Platform.isWindows ? "dll" : (Platform.isMacOS ? "dylib" : "so"); |
| final dllPrefix = Platform.isWindows ? '' : 'lib'; |
| final dllPath = |
| currentDir.resolve("build/jni_libs/${dllPrefix}dartjni.$dllSuffix"); |
| final srcPath = currentDir.resolve("src/"); |
| |
| /// Fail if dartjni dll is stale. |
| void checkDylibIsUpToDate() { |
| final dllFile = File.fromUri(dllPath); |
| if (needsBuild(File.fromUri(dllPath), Directory.fromUri(srcPath))) { |
| final cause = dllFile.existsSync() |
| ? 'not up-to-date with source modifications' |
| : 'not built'; |
| var message = '\nFatal: dartjni.$dllSuffix is $cause. Please run ' |
| '`dart run jni:setup` and try again.'; |
| if (stderr.supportsAnsiEscapes) { |
| message = ansiRed + message + ansiDefault; |
| } |
| stderr.writeln(message); |
| exit(1); |
| } |
| } |
| |
| void spawnJvm() { |
| Jni.spawnIfNotExists( |
| dylibDir: "build/jni_libs", jvmOptions: ["-Xmx128m", "-Xcheck:jni"]); |
| } |