From db565938ef16282e93d6f2f98f9f1ee77e0ed4e7 Mon Sep 17 00:00:00 2001 From: Brian Quinlan Date: Thu, 17 Jul 2025 14:18:21 -0700 Subject: [PATCH 1/3] Add a generator script to regenerate native bindings. --- .github/workflows/io_file.yml | 5 +---- pkgs/io_file/pubspec.yaml | 1 + pkgs/io_file/tool/generate.dart | 35 +++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 pkgs/io_file/tool/generate.dart diff --git a/.github/workflows/io_file.yml b/.github/workflows/io_file.yml index 4288b57e..9fe0639e 100644 --- a/.github/workflows/io_file.yml +++ b/.github/workflows/io_file.yml @@ -47,10 +47,7 @@ jobs: with: sdk: dev - run: dart pub get - - run: dart run ffigen --config ffigen.yaml - - run: dart run ffigen --config constants-ffigen.yaml - - run: dart --enable-experiment=native-assets run tool/build_constants.dart - - run: dart format lib/src/*.dart + - run: dart --enable-experiment=native-assets run tool/generate.dart - run: git diff --exit-code desktop-vm-test: diff --git a/pkgs/io_file/pubspec.yaml b/pkgs/io_file/pubspec.yaml index 4752ebf0..ffcf8395 100644 --- a/pkgs/io_file/pubspec.yaml +++ b/pkgs/io_file/pubspec.yaml @@ -21,6 +21,7 @@ dev_dependencies: args: ^2.7.0 benchmark_harness: ^2.3.1 dart_flutter_team_lints: ^3.4.0 + dart_style: ^3.1.0 errno: ^1.4.1 ffigen: ^19.0.0 stdlibc: diff --git a/pkgs/io_file/tool/generate.dart b/pkgs/io_file/tool/generate.dart new file mode 100644 index 00000000..d5bfd6c5 --- /dev/null +++ b/pkgs/io_file/tool/generate.dart @@ -0,0 +1,35 @@ +// Copyright (c) 2025, 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:dart_style/dart_style.dart'; + +import 'package:ffigen/src/executables/ffigen.dart' as ffigen; +import 'build_constants.dart' as build_constants; + +void _formatFile(String path) { + final formatter = DartFormatter( + languageVersion: DartFormatter.latestLanguageVersion, + ); + final file = File(path); + file.writeAsStringSync(formatter.format(file.readAsStringSync(), uri: path)); +} + +void main() async { + build_constants.main(); + + await ffigen.main(['--no-format', '-v', 'severe', '--config', 'ffigen.yaml']); + await ffigen.main([ + '--no-format', + '-v', + 'severe', + '--config', + 'constants-ffigen.yaml', + ]); + + _formatFile('lib/src/constant_bindings.g.dart'); + _formatFile('lib/src/constants.g.dart'); + _formatFile('lib/src/libc_bindings.g.dart'); +} From cfda9637b8b4a5db4015f347e201e95227e9787c Mon Sep 17 00:00:00 2001 From: Brian Quinlan Date: Thu, 17 Jul 2025 14:36:42 -0700 Subject: [PATCH 2/3] Docs --- pkgs/io_file/constants-ffigen.yaml | 2 +- pkgs/io_file/ffigen.yaml | 2 +- pkgs/io_file/tool/generate.dart | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/io_file/constants-ffigen.yaml b/pkgs/io_file/constants-ffigen.yaml index becb49e9..1ab76307 100644 --- a/pkgs/io_file/constants-ffigen.yaml +++ b/pkgs/io_file/constants-ffigen.yaml @@ -3,7 +3,7 @@ name: NativeAddBindings description: | Bindings for `constants.g.h`. - Regenerate bindings with `dart run ffigen --config constants-ffigen.yaml`. + Regenerate bindings with `dart run tool/generate.dart`. output: 'lib/src/constant_bindings.g.dart' headers: entry-points: diff --git a/pkgs/io_file/ffigen.yaml b/pkgs/io_file/ffigen.yaml index 8b98b7f9..2d83623c 100644 --- a/pkgs/io_file/ffigen.yaml +++ b/pkgs/io_file/ffigen.yaml @@ -3,7 +3,7 @@ name: NativeAddBindings description: | Bindings for `src/libc_shim.h`. - Regenerate bindings with `dart run ffigen --config ffigen.yaml`. + Regenerate bindings with `dart run tool/generate.dart`. output: 'lib/src/libc_bindings.g.dart' headers: entry-points: diff --git a/pkgs/io_file/tool/generate.dart b/pkgs/io_file/tool/generate.dart index d5bfd6c5..c8abd4d9 100644 --- a/pkgs/io_file/tool/generate.dart +++ b/pkgs/io_file/tool/generate.dart @@ -2,6 +2,8 @@ // 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. +// Run all code generation and formatting steps. + import 'dart:io'; import 'package:dart_style/dart_style.dart'; From 5f6f82d9e35a26025c7216438edbc1f9c0b0f8c8 Mon Sep 17 00:00:00 2001 From: Brian Quinlan Date: Tue, 22 Jul 2025 10:49:57 -0700 Subject: [PATCH 3/3] Review fixes --- pkgs/io_file/pubspec.yaml | 1 - pkgs/io_file/tool/generate.dart | 15 ++++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) mode change 100644 => 100755 pkgs/io_file/tool/generate.dart diff --git a/pkgs/io_file/pubspec.yaml b/pkgs/io_file/pubspec.yaml index ffcf8395..4752ebf0 100644 --- a/pkgs/io_file/pubspec.yaml +++ b/pkgs/io_file/pubspec.yaml @@ -21,7 +21,6 @@ dev_dependencies: args: ^2.7.0 benchmark_harness: ^2.3.1 dart_flutter_team_lints: ^3.4.0 - dart_style: ^3.1.0 errno: ^1.4.1 ffigen: ^19.0.0 stdlibc: diff --git a/pkgs/io_file/tool/generate.dart b/pkgs/io_file/tool/generate.dart old mode 100644 new mode 100755 index c8abd4d9..370136d6 --- a/pkgs/io_file/tool/generate.dart +++ b/pkgs/io_file/tool/generate.dart @@ -4,19 +4,20 @@ // Run all code generation and formatting steps. +import 'dart:convert'; import 'dart:io'; -import 'package:dart_style/dart_style.dart'; - import 'package:ffigen/src/executables/ffigen.dart' as ffigen; import 'build_constants.dart' as build_constants; void _formatFile(String path) { - final formatter = DartFormatter( - languageVersion: DartFormatter.latestLanguageVersion, - ); - final file = File(path); - file.writeAsStringSync(formatter.format(file.readAsStringSync(), uri: path)); + final result = Process.runSync(Platform.executable, [ + 'format', + path, + ], stderrEncoding: utf8); + if (result.exitCode != 0) { + throw Exception('failed to format $path:\n${result.stderr}'); + } } void main() async {