summaryrefslogtreecommitdiff
path: root/bindgen
AgeCommit message (Collapse)Author
2023-02-27codegen: Don't generate conflicting packed() and align() representation hints.HEADmasterEmilio Cobos Álvarez
Fixes #2240
2023-02-16Also de-duplicate functions with wrapped static functions feature (#2416)Urgau
2023-02-16Add support for enums with the wrapped static functions feature (#2415)Urgau
2023-02-10 Disallow constant values that were changed in clang 15 (#2410)Christian Poveda Ruiz
* Disallow constant values that could cause problems with clang 15 * Fix clippy warnings
2023-02-09Remove unnecessary `./` (#2407)Christian Poveda Ruiz
2023-02-07Release 0.64.0 Request (#2399)v0.64.0Justin W Smith
Prepare 0.64.0 Release --------- Co-authored-by: Christian Poveda <christian.poveda@ferrous-systems.com>
2023-02-07Generate extern wrappers for inlined functions (#2335)Christian Poveda Ruiz
* Generate extern wrappers for inlined functions If bindgen finds an inlined function and the `--generate-extern-functions` options is enabled, then: - It will generate two new source and header files with external functions that wrap the inlined functions. - Rerun `Bindings::generate` using the new header file to include these wrappers in the generated bindings. The following additional options were added: - `--extern-function-suffix=<suffix>`: Adds <suffix> to the name of each external wrapper function (`__extern` is used by default). - `--extern-functions-file-name=<name>`: Uses <name> as the file name for the header and source files (`extern` is used by default). - `--extern-function-directory=<dir>`: Creates the source and header files inside <dir> (`/tmp/bindgen` is used by default). The C code serialization is experimental and only supports a very limited set of C functions. Fixes #1090. --------- Co-authored-by: Amanjeev Sethi <aj@amanjeev.com>
2023-01-25Add *-espidf target triple mappings (#2397)Josh Guilfoyle
Fixes #2396. This makes it possible to workaround cc/bindgen issues with esp-rs projects by using only environment varaibles (TARGET_CC, CLANG_PATH, etc). Without this, it requires modifying each crate's build.rs that you try to depend on to add a target option passed along to clang.
2023-01-20Implement cli option for custom derive (#2328)Dan Dumont
* custom derives after DeriveInfo * Introduce `TypeKind` instead of `CompKind` * Add tests * Emit CLI flags for callbacks * update changelog * run rustfmt * fix tests * fix features Co-authored-by: Christian Poveda <christian.poveda@ferrous-systems.com>
2023-01-12Update to clap 4. (#2380)Andrew Walbran
* Update to clap 4. * Bump MSRV to minimum required by clap 4. * Mention clap update in CHANGELOG.
2023-01-06codegen: Look through typedefs to detect void return type. (#2379)Emilio Cobos Álvarez
* codegen: Look through typedefs to detect void return type. And reuse a bit more code. Should fix #2377, but needs a test (can't run tests atm). * Add tests * Run rustfmt * Update changelog Co-authored-by: Christian Poveda <christian.poveda@ferrous-systems.com>
2022-12-15Extend documentation about deprecation of wildcard patterns (#2374)Christian Poveda Ruiz
2022-12-09Fix clippy warnings (#2371)Christian Poveda Ruiz
2022-12-07codegen: Do generate field offset checks for classes with multiple bases.Emilio Cobos Álvarez
The bug only affects virtual inheritance, so instead disable layout tests in the test that we know is broken. Not generating layout tests is wrong anyways, because the offset would be wrong.
2022-11-28Document callback changes and avoid static lifetime (#2366)Christian Poveda Ruiz
2022-11-28Extend `generated_name_override` callback to variables (#2351)Justin W Smith
* This change updates `ParseCallbacks::generated_name_override` to accept a second parameter indicating the kind of item the name applies to (currently, either `Function` or `Var`). * A `CallbackItemKind` enum was added to serve as the type for this second parameter. * Tests have been updated to verify that the names of both function and variable can be updated by this callback.
2022-11-28Fix name collision between C enum and typedef (#2326)David Tolnay
Fixes #2008. Example: ```c enum Enum { Variant }; typedef int16_t Enum; ``` This is valid and idiomatic C (though not valid C++). `cbindgen` uses this idiom as the default C translation of Rust enums, the equivalent of what would be `enum Enum : int16_t { Variant };` in C++. `bindgen header.h` before: ```rust pub const Enum_Variant: Enum = 0; pub type Enum = ::std::os::raw::c_uint; pub type Enum = i16; ``` ```console error[E0428]: the name `Enum` is defined multiple times --> generated.rs:3:1 | 2 | pub type Enum = ::std::os::raw::c_uint; | --------------------------------------- previous definition of the type `Enum` here 3 | pub type Enum = i16; | ^^^^^^^^^^^^^^^^^^^^ `Enum` redefined here | = note: `Enum` must be defined only once in the type namespace of this module ``` After: ```rust pub const Enum_Variant: Enum = 0; pub type Enum = i16; ```
2022-11-24Remove traits that have a single implementation (#2363)Christian Poveda Ruiz
2022-11-24Fix clippy warnings (#2362)Christian Poveda Ruiz
2022-11-23Escape method fragments that happen to be rust keywords (#2359)Christian Poveda Ruiz
2022-11-22Deprecate Rust targets lower or equal than `1.30` (#2356)Christian Poveda Ruiz
2022-11-22Add `--wrap-unsafe-ops` option (#2354)Christian Poveda Ruiz
This reverts commit e8ffb42ab66405ac56d04494a30e54b584f2d4dd and adds a new `--wrap-unsafe-ops` option as a workaround.
2022-11-22Add `ParseCallbacks::process_comment` (#2347)Christian Poveda Ruiz
This method can be used to process comments and replace them with whatever the user wants.
2022-11-21Introduce `DeriveInfo` (#2355)Christian Poveda Ruiz
This PR introduces a new non-exhaustive `struct` called `DeriveInfo` to be used as the sole argument of `ParseCallbacks::add_derives` with the purpose of being able to extend the information passed to this method in a backwards-compatible manner, meaning that adding new fields to `DeriveInfo` won't be a breaking change when releasing a new version.
2022-11-17Remove deprecated methods (#2346)Christian Poveda Ruiz
2022-11-17add LICENSE symlinks to all individually published cratesFabio Valentini
2022-11-14document regex arguments handling (#2345)Christian Poveda Ruiz
2022-11-11Document and test allowlisting and blocklisting methods (#2344)Christian Poveda Ruiz
2022-11-11Fix duplicated function names (#2341)Christian Poveda Ruiz
Even though this change does name deduplication in a slower way, it avoids name collisions without any breaking changes in the test suite. Fixes #2202
2022-11-10Handle the `const struct *` and `struct *` patterns (#2304)Christian Poveda Ruiz
Given that C keeps a different namespace for `struct`/`enum`/`union` and `typedef` aliases. The following patterns ```c typedef const struct foo { void *inner; } *foo; typedef struct bar { void *inner; } *bar; ``` are valid C code and produces both a `struct` and a pointer called `foo` and `bar` in different namespaces. Given that Rust does not make this distinction, we add the `_ptr` prefix to the pointer type aliases to avoid any name collisions.
2022-11-09Fix inline function identificationkohanis
2022-11-09ir: Don't crash with built-in unexposed types from libclang.Emilio Cobos Álvarez
This fixes #2325. The issue is that `__bf16` is not exposed at all by libclang, which causes us to crash. It's a bit of a shame libclang doesn't expose it but there's no rust equivalent I think, so this should be ok for now. Unfortunately no test because the header crashes older clang versions.
2022-11-04Wrap `unsafe` function's bodies in `unsafe` blocks (#2266)Christian Poveda Ruiz
This guarantees that bindings generated by `bindgen` compile even if the `unsafe_op_in_unsafe_fn` lint is denied.
2022-11-04Clean the implementation of `Default` for `BindgenOptions` (#2332)Christian Poveda Ruiz
* Clean the implementation of `Default` for `BindgenOptions`
2022-11-04Add support for the `"C-unwind"` ABI (#2334)Christian Poveda Ruiz
* Add support for the `"C-unwind"` ABI This allows using `"C-unwind"` as an ABI override if the rust target is nightly.
2022-11-02Add the `--override-abi` option (#2329)Christian Poveda Ruiz
* Add the `--override-abi` option. This option can be used from the CLI with the <abi>:<regex> syntax and it overrides the ABI of a function if it matches <regex>. Fixes #2257
2022-11-02Allow callback composition (#2330)Christian Poveda Ruiz
* Allow callback composition Store all the callbacks added to the builder in a `Vec` so bindgen invokes each one of them in a last-to-first manner.
2022-11-02Fix clippy warnings (#2331)Christian Poveda Ruiz
2022-11-01Add a mechanism to rerun bindgen with the same user options (#2292)Christian Poveda Ruiz
* Run `Bindings::generate` again if required. This adds a mechanism so `bindgen` is able to run `Bindings::generate` multiple times with the same user input if the `generate_static_inline` option is enabled and `GenerateResult::ShouldRestart` is returned by `Bindings::generate`. This is done to eventually solve #1090 which would require to check for any static inline functions and generate a new header file to be used as an extra input and run `Bindings::generate` again.
2022-10-24Sanitize RegexSet input so alternation is properly handled (#1756)Adam Gausmann
* tests: Avoid using globs as regexes * Sanitize regex set input to properly handle alternation * Add test case for alternates/anchors interaction * emit warning if wildcard pattern is used * update changelog and bump versions Co-authored-by: Darren Kulp <darren@kulp.ch> Co-authored-by: Christian Poveda <christian.poveda@ferrous-systems.com>
2022-10-22Remove Travis-CI badgesDarren Kulp
Travis-CI was fully removed as of faf8b3edbaeb591315fc6f370c1228b8caf9860f. The only badge now [mentioned in the Cargo book][1] is `maintenance`. The `travis-ci` badge reference was [removed from Cargo two years ago][2]. The Cargo book advises putting badges in README.md instead. [1]: https://doc.rust-lang.org/cargo/reference/manifest.html#the-badges-section [2]: https://github.com/rust-lang/cargo/commit/60779a006f98fba1680182c174134363d08e0a9b
2022-10-22clang: Detect anonymous items explicitly, rather than relying on empty names.Emilio Cobos Álvarez
In Clang 16, anonymous items may return names like `(anonymous union at ..)` rather than empty names. The right way to detect them is using clang_Cursor_isAnonymous. Fixes #2312 Closes #2316 Co-Authored-by: Patrick Walton <pcwalton@fb.com>
2022-10-22Use panic hooks instead of using `catch_unwind`Christian Poveda
One of the advantages of doing this is that `ParseCallbacks` no longer needs to implement `UnwindSafe` which means that users can rely on `RefCell` and `Cell` to extract information from the callbacks. Users relying on `catch_unwind` can still achieve similar behavior using `std::thread::spawn`. Fixes #2147.
2022-10-16Specify readme properly.Emilio Cobos Álvarez
2022-10-16v0.61.0Emilio Cobos Álvarez
2022-10-16ci: clippy fixes.Emilio Cobos Álvarez
The allowed casts are because c_longlong etc aren't guaranteed to map to i64 / etc. I believe c_double maps to f64 in all platforms tho.
2022-10-16Remove no-longer-correct include entry in Cargo.toml.Emilio Cobos Álvarez
2022-10-16Move the csmith-fuzzing directory to the top level.Emilio Cobos Álvarez
2022-10-16Handle incomplete external array constantsChristian Poveda
This adds a new special case for constants like: ```c extern const char some_static_string[]; ``` so `bindgen` emits a `static` instead of a `static mut` for them.
2022-10-12Merge pull request #2302 from ferrous-systems/clonable-builderChristian Poveda
Implement `Clone` for `Builder`