From 305b24dc9935f959cc040ab1469f3137477a71bd Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Mon, 13 Oct 2025 10:46:54 +0200 Subject: [PATCH 1/4] [ffigen] make logger optional --- .../lib/src/config_provider/config.dart | 5 +++- pkgs/ffigen/lib/src/ffigen.dart | 8 ++++-- pkgs/ffigen/lib/src/logger.dart | 27 +++++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 pkgs/ffigen/lib/src/logger.dart diff --git a/pkgs/ffigen/lib/src/config_provider/config.dart b/pkgs/ffigen/lib/src/config_provider/config.dart index 8b76cabb4..6afc39538 100644 --- a/pkgs/ffigen/lib/src/config_provider/config.dart +++ b/pkgs/ffigen/lib/src/config_provider/config.dart @@ -118,7 +118,10 @@ final class FfiGenerator { }); /// Run this generator. - void generate({required Logger? logger, Uri? libclangDylib}) { + /// + /// If provided, uses [logger] to output logs. Otherwise, uses a default + /// logger that streams [Level.WARNING] to stdout and higher levels to stderr. + void generate({Logger? logger, Uri? libclangDylib}) { return FfiGenGenerator( this, ).generate(logger: logger, libclangDylib: libclangDylib); diff --git a/pkgs/ffigen/lib/src/ffigen.dart b/pkgs/ffigen/lib/src/ffigen.dart index 95f2ed2bd..e2243d9e6 100644 --- a/pkgs/ffigen/lib/src/ffigen.dart +++ b/pkgs/ffigen/lib/src/ffigen.dart @@ -10,13 +10,17 @@ import 'package:logging/logging.dart'; import 'config_provider.dart' show Config, FfiGenerator; import 'context.dart'; import 'header_parser.dart' show parse; +import 'logger.dart'; final _ansi = Ansi(Ansi.terminalSupportsAnsi); extension FfiGenGenerator on FfiGenerator { /// Runs the entire generation pipeline for the given config. - void generate({required Logger? logger, Uri? libclangDylib}) { - logger ??= Logger.detached('dev/null')..level = Level.OFF; + /// + /// If provided, uses [logger] to output logs. Otherwise, uses a default + /// logger that streams [Level.WARNING] to stdout and higher levels to stderr. + void generate({Logger? logger, Uri? libclangDylib}) { + logger ??= createDefaultLogger(); final config = Config(this); final context = Context(logger, config, libclangDylib: libclangDylib); diff --git a/pkgs/ffigen/lib/src/logger.dart b/pkgs/ffigen/lib/src/logger.dart new file mode 100644 index 000000000..50c932182 --- /dev/null +++ b/pkgs/ffigen/lib/src/logger.dart @@ -0,0 +1,27 @@ +// 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:logging/logging.dart'; + +/// Creates a default logger that logs to stdout and stderr. +Logger createDefaultLogger() { + final logger = Logger.detached('FFIgen'); + logger.level = Level.INFO; + logger.onRecord.listen((record) { + if (record.level >= Level.WARNING) { + stderr.writeln(record.message); + } else { + stdout.writeln(record.message); + } + if (record.error != null) { + stderr.writeln(record.error); + } + if (record.stackTrace != null) { + stderr.writeln(record.stackTrace); + } + }); + return logger; +} From bfe32c58b019c08c286024116abe67d5eaca4489 Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Mon, 13 Oct 2025 10:52:26 +0200 Subject: [PATCH 2/4] changelog --- pkgs/ffigen/CHANGELOG.md | 5 +++++ pkgs/ffigen/pubspec.yaml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/ffigen/CHANGELOG.md b/pkgs/ffigen/CHANGELOG.md index be5348fc7..a5a3deae8 100644 --- a/pkgs/ffigen/CHANGELOG.md +++ b/pkgs/ffigen/CHANGELOG.md @@ -1,3 +1,8 @@ +## 20.0.0-dev.1-wip + +- Make the `Logger` argument of `FfiGenerator.generate` optional. It defaults to + a logger printing to stdout and stderr. + ## 20.0.0-dev.0 - __Breaking change__: Completely rewrite the public Dart API for FFIgen. diff --git a/pkgs/ffigen/pubspec.yaml b/pkgs/ffigen/pubspec.yaml index e4fa60a4e..683d7fc61 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: 20.0.0-dev.0 +version: 20.0.0-dev.1-wip description: > Generator for FFI bindings, using LibClang to parse C, Objective-C, and Swift files. From 64a5ae81cfac6c86315e9e832179a731caf5e757 Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Mon, 13 Oct 2025 11:05:11 +0200 Subject: [PATCH 3/4] fix version --- pkgs/ffigen/CHANGELOG.md | 2 +- pkgs/ffigen/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/ffigen/CHANGELOG.md b/pkgs/ffigen/CHANGELOG.md index a5a3deae8..a0ce5b794 100644 --- a/pkgs/ffigen/CHANGELOG.md +++ b/pkgs/ffigen/CHANGELOG.md @@ -1,4 +1,4 @@ -## 20.0.0-dev.1-wip +## 20.0.0-dev.1.wip - Make the `Logger` argument of `FfiGenerator.generate` optional. It defaults to a logger printing to stdout and stderr. diff --git a/pkgs/ffigen/pubspec.yaml b/pkgs/ffigen/pubspec.yaml index 683d7fc61..92657cded 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: 20.0.0-dev.1-wip +version: 20.0.0-dev.1.wip description: > Generator for FFI bindings, using LibClang to parse C, Objective-C, and Swift files. From 8d25b2b72ebd59a5cb32cdba381b187ac38bdb32 Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Mon, 13 Oct 2025 11:13:30 +0200 Subject: [PATCH 4/4] release as 20.0.0-dev.1 so we can migrate other examples --- pkgs/ffigen/CHANGELOG.md | 2 +- pkgs/ffigen/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/ffigen/CHANGELOG.md b/pkgs/ffigen/CHANGELOG.md index a0ce5b794..b2b5f7741 100644 --- a/pkgs/ffigen/CHANGELOG.md +++ b/pkgs/ffigen/CHANGELOG.md @@ -1,4 +1,4 @@ -## 20.0.0-dev.1.wip +## 20.0.0-dev.1 - Make the `Logger` argument of `FfiGenerator.generate` optional. It defaults to a logger printing to stdout and stderr. diff --git a/pkgs/ffigen/pubspec.yaml b/pkgs/ffigen/pubspec.yaml index 92657cded..9517c6925 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: 20.0.0-dev.1.wip +version: 20.0.0-dev.1 description: > Generator for FFI bindings, using LibClang to parse C, Objective-C, and Swift files.