diff --git a/CHANGELOG.md b/CHANGELOG.md index eddda3f..3642abe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.4+4 + +* Linux: Also search lib/ sub directory for libargon so file. + ## 0.1.4+3 * Better error message for mac os when unable to load dylib. diff --git a/lib/src/argon2_ffi_impl.dart b/lib/src/argon2_ffi_impl.dart index 1e363bb..4a8b447 100644 --- a/lib/src/argon2_ffi_impl.dart +++ b/lib/src/argon2_ffi_impl.dart @@ -7,6 +7,7 @@ import 'package:argon2_ffi_base/src/argon2_ffi_base.dart'; import 'package:argon2_ffi_base/src/utils.dart'; import 'package:ffi/ffi.dart'; import 'package:logging/logging.dart'; +import 'package:path/path.dart' as path; final _logger = Logger('argon2_ffi_base'); @@ -90,7 +91,27 @@ class Argon2FfiFlutter extends Argon2Base { .asFunction(); } - static ResolveLibrary defaultResolveLibrary = (name) => name; + static ResolveLibrary defaultResolveLibrary = (name) { + if (Platform.isLinux) { + // on linux the library is put into a `lib` sub directory. + final appDir = File(Platform.executable).parent; + final appDirPath = appDir.path; + final f = File(path.join(appDirPath, name)); + _logger.finest('checking $appDirPath for $name'); + if (!f.existsSync()) { + _logger.finest('$name not found in current path, looking into $name'); + final f = File(path.join(appDirPath, 'lib', name)); + if (f.existsSync()) { + final ret = f.absolute.path; + _logger.finer('Loading from $ret'); + return ret; + } else { + _logger.severe('Unable to find $name in $appDirPath or ${f.path}'); + } + } + } + return name; + }; final ResolveLibrary resolveLibrary; diff --git a/pubspec.lock b/pubspec.lock index b23cf6c..96708ba 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -22,6 +22,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.2" + path: + dependency: "direct main" + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" pedantic: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index 6e8588e..3842f28 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: argon2_ffi_base description: Base package defining the interface for an Argon2 implementation. -version: 0.1.4+3 +version: 0.1.4+4 homepage: https://github.com/authpass/argon2_ffi_base environment: @@ -9,6 +9,7 @@ environment: dependencies: ffi: ^0.1.3 logging: ^0.11.4 + path: ">=1.7.0 <2.0.0" dev_dependencies: pedantic: ^1.9.2