# 7.2.0
- Added support for sharing bindings using `symbol-file` config. (See `README.md`
and examples/shared_bindings).

# 7.1.0
- Handle declarations with definition accessible from a different entry-point.

# 7.0.0

- Fix typedef include/exclude config.
- Return `ObjCBlock` wrapper instead of raw pointer in more cases.

# 7.0.0-dev

- Relative paths in ffigen config files are now assumed to be relative to the
  config file, rather than the working directory of the tool invocation.

# 6.1.2

- Fix bug where function bindings were not deduped correctly.

# 6.1.1

- _EXPERIMENTAL_ support for `FfiNative`. The API and output
  might change at any point.

# 6.1.0

- Added `exclude-all-by-default` config flag, which changes the default behavior
  of declaration filters to exclude everything, rather than include everything.

# 6.0.2

- Bump `package:ffi` to 2.0.1.

# 6.0.1

- Replace path separators in `include-directives` before matching file names.
- Add more ways to find `libclang`.

# 6.0.0
- Removed config `dart-bool`. Booleans are now always generated with `bool`
and `ffi.Bool` as it's Dart and C Type respectively.

# 5.0.1

- Add a the xcode tools llvm as default path on MacOS.

# 5.0.0

- Stable release targeting Dart 2.17, supporting ABI-specific integer types.
- _EXPERIMENTAL_ support for ObjectiveC on MacOS hosts. The API and output
  might change at any point. Feel free to report bugs if encountered.

# 5.0.0-dev.1
- Fixed invalid default dart types being generated for `size_t` and `wchar_t`.

# 5.0.0-dev.0
- Added support for generating ABI Specific integers.
- Breaking: removed config keys - `size-map` and `typedef-map`.
- Added config keys - `library-imports` and `type-map`.

# 4.1.3
- Analyzer fixes.

# 4.1.2
- Added fix for empty include list to exclude all

# 4.1.1
- Added fix for errors due to name collision between member name
and type name used internally in structs/unions.

# 4.1.0
- Add config key `functions -> leaf` for specifying `isLeaf:true` for functions.

# 4.0.0
- Release for Dart SDK `>=2.14`.

# 4.0.0-dev.2
- Added config key `functions -> expose-typedefs` to expose the typedef
to Native and Dart type.
- Config key `function`->`symbol-address` no longer exposes the typedef
to Native type. Use `expose-typedefs` to get the native type.

# 4.0.0-dev.1
- This package now targets package:lints for the generated code. The generated
code uses C symbol names as is. Use either `// ignore_for_file: lintRule1, lintRule2`
in the `preamble`, or rename the symbols to make package:lints happy.
- Name collisions are now resolved by suffixing `<int>` instead of `_<int>`.

# 4.0.0-dev.0
- Added support for generating typedefs (_referred_ typedefs only).
<table>
<tr>
<td>Example C Code</td>
<td>Generated Dart typedef</td>
</tr>
<tr>
<td>

```C++
typedef struct A{
    ...
} TA, *PA;

TA func(PA ptr);
```
</td>
<td>

```dart
class A extends ffi.Struct {...}
typedef TA = A;
typedef PA = ffi.Pointer<A>;
TA func(PA ptr){...}
```
</td>
</tr>
</table>

- All declarations that are excluded by the user are now only included if being
used somewhere.
- Improved struct/union include/exclude. These declarations can now be targetted
by their actual name, or if they are unnamed then by the name of the first
typedef that refers to them.

# 3.1.0-dev.1
- Users can now specify exact path to dynamic library in `llvm-path`.

# 3.1.0-dev.0
- Added support for generating unions.

# 3.0.0
- Release for dart sdk `>=2.13` (Support for packed structs and inline arrays).

# 3.0.0-beta.0
- Added support for inline arrays in `Struct`s.
- Remove config key `array-workaround`.
- Remove deprecated key `llvm-lib` from config, Use `llvm-path` instead.

# 2.5.0-beta.1
- Added support for `Packed` structs. Packed annotations are generated
automatically but can be overriden using `structs -> pack` config.
- Updated sdk constraints to `>=2.13.0-211.6.beta`.

# 2.4.2
- Fix issues due to declarations having duplicate names.
- Fix name conflict of declaration with ffi library prefix.
- Fix `char` not being recognized on platforms where it's unsigned by default.

# 2.4.1
- Added `/usr/lib` to default dynamic library location for linux.

# 2.4.0
- Added new config key `llvm-path` that accepts a list of `path/to/llvm`.
- Deprecated config key `llvm-lib`.

# 2.3.0
- Added config key `compiler-opts-automatic -> macos -> include-c-standard-library`
(default: true) to automatically find and add C standard library on macOS.
- Allow passing list of string to config key `compiler-opts`.

# 2.2.5
- Added new command line flag `--compiler-opts` to the command line tool.

# 2.2.4
- Fix `sort: true` not working.
- Fix extra `//` or `///` in comments when using `comments -> style`: `full`.

# 2.2.3
- Added new subkey `dependency-only` (options - `full (default) | opaque`) under `structs`.
When set to `opaque`, ffigen will generate empty `Opaque` structs if structs
were excluded in config (i.e added because they were a dependency) and
only passed by reference(pointer).

# 2.2.2
- Fixed generation of empty opaque structs due to forward declarations in header files.

# 2.2.1
- Fixed generation of duplicate constants suffixed with `_<int>` when using multiple entry points.

# 2.2.0
- Added subkey `symbol-address` to expose native symbol pointers for `functions` and `globals`.

# 2.1.0
- Added a new named constructor `NativeLibrary.fromLookup()` to support dynamic linking.
- Updated dart SDK constraints to latest stable version `2.12.0`.

# 2.0.3
- Ignore typedef to struct pointer when possible.
- Recursively create directories for output file.

# 2.0.2
- Fixed illegal use of `const` in name, crash due to unnamed inline structs and
structs having `Opaque` members.

# 2.0.1
- Switch to preview release of `package:quiver`.

# 2.0.0
- Upgraded all dependencies. `package:ffigen` now runs with sound null safety.

# 2.0.0-dev.6
- Functions marked `inline` are now skipped.

# 2.0.0-dev.5
- Use `Opaque` for representing empty `Struct`s.

# 2.0.0-dev.4
- Add support for parsing and generating globals.

# 2.0.0-dev.3
- Removed the usage of `--no-sound-null-safety` flag.

# 2.0.0-dev.2
- Removed setup phase for ffigen. Added new optional config key `llvm-lib`
to specify path to `llvm/lib` folder.

# 2.0.0-dev.1
- Added support for passing and returning struct by value in functions.

# 2.0.0-dev.0
- Added support for Nested structs.

# 2.0.0-nullsafety.1
- Removed the need for `--no-sound-null-safety` flag.

# 2.0.0-nullsafety.0
- Migrated to (unsound) null safety.

# 1.2.0
- Added support for `Dart_Handle` from `dart_api.h`.

# 1.1.0
- `typedef-map` can now be used to map a typedef name to a native type directly.

# 1.0.6
- Fixed missing typedefs nested in another typedef's return types.

# 1.0.5
- Fixed issues with generating macros of type `double.Infinity` and `double.NaN`.

# 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.

# 1.0.2
- Fix indentation for pub's readme.

# 1.0.1
- Fixed generation of `NativeFunction` parameters instead of `Pointer<NativeFunction>` in type signatures.

# 1.0.0
- Bump version to 1.0.0.
- Handle unimplememnted function pointers causing errors.
- Log lexical/semantic issues in headers as SEVERE.

# 0.3.0
- Added support for including/excluding/renaming _un-named enums_ using key `unnamed_enums`.

# 0.2.4+1
- Minor changes to dylib creation error log.

# 0.2.4
- Added support for C booleans as Uint8.
- Added config `dart-bool` (default: true) to use dart bool instead of int in function parameters and return type.

# 0.2.3+3
- Wrapper dynamic library version now uses ffigen version from its pubspec.yaml file.

# 0.2.3+2
- Handle code formatting using dartfmt by finding dart-sdk.

# 0.2.3+1
- Fixed missing typedefs of nested function pointers.

# 0.2.3
- Fixed parsing structs with bitfields, all members of structs with bit field members will now be removed. See [#84](https://github.com/dart-lang/ffigen/issues/84)

# 0.2.2+1
- Updated `package:meta` version to `^1.1.8` for compatibility with flutter sdk.

# 0.2.2
- Fixed multiple generation/skipping of typedef enclosed declarations.
- Typedef names are now given higher preference over inner names, See [#83](https://github.com/dart-lang/ffigen/pull/83).

# 0.2.1+1
- Added FAQ to readme.

# 0.2.1
- Fixed missing/duplicate typedef generation.

# 0.2.0
- Updated header config. Header `entry-points` and `include-directives` are now specified under `headers` key. Glob syntax is allowed.
- Updated declaration `include`/`exclude` config. These are now specified as a list.
- Added Regexp based declaration renaming using `rename` subkey.
- Added Regexp based member renaming for structs, enums and functions using `member-rename` subkey. `prefix` and `prefix-replacement` subkeys have been removed.

# 0.1.5
- Added support for parsing macros and anonymous unnamed enums. These are generated as top level constants.

# 0.1.4
- Comments config now has a style and length sub keys - `style: doxygen(default) | any`, `length: brief | full(default)`, and can be disabled by passing `comments: false`.

# 0.1.3
- Handled function arguments - dart keyword name collision
- Fix travis tests: the dynamic library is created using `pub run ffigen:setup` before running the tests.

# 0.1.2
- Fixed wrapper not found error when running `pub run ffigen`.

# 0.1.1
- Address pub score: follow dart File conventions, provide documentation, and pass static analysis.

# 0.1.0
- Support for Functions, Structs and Enums.
- Glob support for specifying headers.
- HeaderFilter - Include/Exclude declarations from specific header files using name matching.
- Filters - Include/Exclude function, structs and enum declarations using Regexp or Name matching.
- Prefixing - function, structs and enums can have a global prefix. Individual prefix Replacement support using Regexp.
- Comment extraction: full/brief/none
- Support for fixed size arrays in struct. `array-workaround` (if enabled) will generate helpers for accessing fixed size arrays in structs.
- Size for ints can be specified using `size-map` in config.
- Options to disable using supported typedefs (e.g `uint8_t => Uint8`), sort bindings.
- Option to add a raw `preamble` which is included as is in the generated file.
