[ffigen] Updated tool to use dart format when sdk >=2.10.0 (#110)
diff --git a/pkgs/ffigen/.travis.yml b/pkgs/ffigen/.travis.yml index cd06229..e535a1a 100644 --- a/pkgs/ffigen/.travis.yml +++ b/pkgs/ffigen/.travis.yml
@@ -21,7 +21,7 @@ - export PATH="/usr/lib/llvm-10/bin:$PATH" before_script: - - 'pub run ffigen:setup' + - 'dart pub run ffigen:setup' - cd test/native_test && dart build_test_dylib.dart && cd ../.. matrix:
diff --git a/pkgs/ffigen/CHANGELOG.md b/pkgs/ffigen/CHANGELOG.md index a59311b..7b452c5 100644 --- a/pkgs/ffigen/CHANGELOG.md +++ b/pkgs/ffigen/CHANGELOG.md
@@ -1,3 +1,6 @@ +# 1.0.4 +- Updated code to use `dart format` instead of `dartfmt` for sdk version `>= 2.10.0`. + # 1.0.3 - Fixed errors due to extended ASCII and control characters in macro strings.
diff --git a/pkgs/ffigen/lib/src/code_generator/library.dart b/pkgs/ffigen/lib/src/code_generator/library.dart index 978105e..e1d2390 100644 --- a/pkgs/ffigen/lib/src/code_generator/library.dart +++ b/pkgs/ffigen/lib/src/code_generator/library.dart
@@ -8,6 +8,7 @@ import 'package:logging/logging.dart'; import 'package:meta/meta.dart'; import 'package:path/path.dart' as p; +import 'package:pub_semver/pub_semver.dart'; import 'binding.dart'; import 'utils.dart'; import 'writer.dart'; @@ -96,15 +97,20 @@ /// Formats a file using `dartfmt`. void _dartFmt(String path) { - final dartFmt = p.join(getSdkPath(), 'bin', 'dartfmt'); - try { - final result = Process.runSync(dartFmt, ['-w', path], - runInShell: Platform.isWindows); - if (result.stderr.toString().isNotEmpty) { - _logger.severe(result.stderr); - } - } on ProcessException { - _logger.severe("Couldn't format bindings, unable to call $dartFmt."); + final sdkPath = getSdkPath(); + final versionAtleast2dot10 = Version.parse( + File(p.join(sdkPath, 'version')).readAsStringSync().trim()) >= + Version(2, 10, 0); + + /// Starting from version `>=2.10.0` the dart sdk has a unified `dart` tool + /// So we call `dart format` instead of `dartfmt`. + final result = versionAtleast2dot10 + ? Process.runSync(p.join(sdkPath, 'bin', 'dart'), ['format', path], + runInShell: Platform.isWindows) + : Process.runSync(p.join(sdkPath, 'bin', 'dartfmt'), ['-w', path], + runInShell: Platform.isWindows); + if (result.stderr.toString().isNotEmpty) { + _logger.severe(result.stderr); } }
diff --git a/pkgs/ffigen/pubspec.yaml b/pkgs/ffigen/pubspec.yaml index 578efe9..a03c62e 100644 --- a/pkgs/ffigen/pubspec.yaml +++ b/pkgs/ffigen/pubspec.yaml
@@ -3,7 +3,7 @@ # BSD-style license that can be found in the LICENSE file. name: ffigen -version: 1.0.3 +version: 1.0.4 homepage: https://github.com/dart-lang/ffigen description: Experimental generator for FFI bindings, using LibClang to parse C header files. @@ -20,6 +20,7 @@ glob: ^1.2.0 path: ^1.7.0 quiver: ^2.1.3 + pub_semver: ^1.4.4 dev_dependencies: pedantic: ^1.9.2