From 7aadefc7b59c3c19b40ceb13c1c3802330e89c19 Mon Sep 17 00:00:00 2001 From: Aleksey Kulikov Date: Wed, 8 Jun 2022 15:12:42 +0300 Subject: [PATCH] fix: lookup library in correct locations --- README.md | 4 ++-- bin/setup.dart | 16 ++++++++++++---- lib/src/util.dart | 33 +++++++-------------------------- 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 575e785..8c17eb4 100644 --- a/README.md +++ b/README.md @@ -49,13 +49,13 @@ print(Libgit2.version); **Note**: The following steps only required if you are using package in Dart application (Flutter application will have libgit2 library bundled automatically when you build for release). -After compiling the application you should run: +After adding the package as dependency you should run: ```shell dart run libgit2dart:setup ``` -That'll copy the prebuilt libgit2 library for your platform into `.dart_tool/libgit2//` which you'll need to add to the same folder as your executable. +That'll copy the prebuilt libgit2 library for your platform into `.dart_tool/libgit2//` which you'll need to add to the same folder as your executable after compilation. If you upgrade the version of libgit2dart package in your dependencies you should run the following commands to have the latest libgit2 library for your platform to provide with your application: diff --git a/bin/setup.dart b/bin/setup.dart index 524d017..a71be0d 100644 --- a/bin/setup.dart +++ b/bin/setup.dart @@ -23,15 +23,23 @@ Future copyLibrary(String platform) async { ); } } else { - final pubCache = PubCache(); - final pubCacheDir = - pubCache.getLatestVersion('libgit2dart')!.resolve()!.location; + String? checkCache(PubCache pubCache) => + pubCache.getLatestVersion('libgit2dart')?.resolve()?.location.path; + + final libPath = checkCache(PubCache()) ?? + checkCache( + PubCache( + Directory( + path.join(Platform.environment['FLUTTER_ROOT']!, '.pub-cache'), + ), + ), + ); final libName = getLibName(); stdout.writeln('Copying libgit2 for $platform'); final destination = path.join(libDir, platform); Directory(destination).createSync(recursive: true); - File(path.join(pubCacheDir.path, platform, libName)).copySync( + File(path.join(libPath!, platform, libName)).copySync( path.join(destination, libName), ); diff --git a/lib/src/util.dart b/lib/src/util.dart index 11ae887..001e488 100644 --- a/lib/src/util.dart +++ b/lib/src/util.dart @@ -6,7 +6,6 @@ import 'dart:io'; import 'package:libgit2dart/src/bindings/libgit2_bindings.dart'; import 'package:libgit2dart/src/bindings/libgit2_opts_bindings.dart'; import 'package:path/path.dart' as path; -import 'package:pub_cache/pub_cache.dart'; const libgit2Version = '1.4.3'; final libDir = path.join('.dart_tool', 'libgit2'); @@ -32,13 +31,8 @@ bool _doesFileExist(String path) { /// Returns path to dynamic library if found. String? _resolveLibPath(String name) { - var libPath = path.join(Directory.current.path, name); - - // If lib is in Present Working Directory. - if (_doesFileExist(libPath)) return libPath; - // If lib is in Present Working Directory's '.dart_tool/libgit2/[platform]' folder. - libPath = path.join( + var libPath = path.join( Directory.current.path, libDir, Platform.operatingSystem, @@ -50,33 +44,20 @@ String? _resolveLibPath(String name) { libPath = path.join(Directory.current.path, Platform.operatingSystem, name); if (_doesFileExist(libPath)) return libPath; - String checkCache(PubCache pubCache) { - final pubCacheDir = - pubCache.getLatestVersion('libgit2dart')!.resolve()!.location; - return path.join(pubCacheDir.path, Platform.operatingSystem, name); - } - - // If lib is in Dart's '.pub_cache' folder. - libPath = checkCache(PubCache()); + // If lib is in executable's folder. + libPath = path.join(path.dirname(Platform.resolvedExecutable), name); if (_doesFileExist(libPath)) return libPath; - // If lib is in Flutter's '.pub_cache' folder. - final env = Platform.environment; - if (env.containsKey('FLUTTER_ROOT')) { - final flutterPubCache = - PubCache(Directory(path.join(env['FLUTTER_ROOT']!, '.pub-cache'))); - libPath = checkCache(flutterPubCache); - if (_doesFileExist(libPath)) return libPath; - } + // If lib is in executable's bundled 'lib' folder. + libPath = path.join(path.dirname(Platform.resolvedExecutable), 'lib', name); + if (_doesFileExist(libPath)) return libPath; return null; } DynamicLibrary loadLibrary(String name) { try { - return DynamicLibrary.open( - _resolveLibPath(name) ?? name, - ); + return DynamicLibrary.open(_resolveLibPath(name) ?? name); } catch (e) { stderr.writeln( 'Failed to open the library. Make sure that libgit2 library is bundled '