Age | Commit message (Collapse) | Author |
|
|
|
|
|
Before repr(align), we could only safely guarantee up to 8-bytes of alignment (I
think the pointer-width check is a more conservative way of doing that, in
practice, because I _think_ u64 is 8-byte aligned even for smaller targets).
So when we may generate a potentially-under-aligned struct, we always used to
pad it so as to guarantee that at least the size (and thus reads from rust for
C-allocated structs) was fine.
But if we support repr(align), then the above is always unneeded.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rustdoc was treating doc comments containing `#[non_exhaustive]`
as links and warning, so mark that as code to avoid the warning.
|
|
Always building with `deny(warnings)` leads to messups such as
https://docs.rs/crate/bindgen/0.52.0/builds/199624
|
|
|
|
This adds an enum style similar to the existing bitfield style, without
the bitwise operator impls.
Closes: #1669
|
|
When a #defined token was used before a namespace, like so (#1676):
#define nssv_inline_ns inline
nssv_inline_ns namespace literals {}
bindgen would crash when encountering the unknown token preceding the
namespace token. This is because we don't get to see "past" the ifdef to
the underlying token. The true fix to this is to find a way to extract
ifdef info through clang, but for the time being we simply change the
panic into a warning when such a token is encountered, and then proceed
as if it were empty.
Fixes #1676.
|
|
|
|
|
|
|
|
Flexible array members are represented in the generated binding by a
struct __IncompleteArrayField<T>. Since such members do not contain any
information about how big they are, it is impossible to automatically
clone or copy them, either in C or rust.
Fixes #1431.
|
|
|
|
The following structs have different names for C and C++. In case of C
they are visible as `foo` and `bar`. In case of C++ they are visible as
`foo` and `foo::bar`. By default bindgen follows C++ naming to avoid
generating duplicate names.
With this option the following structs will be named as `foo`
and `bar` instead of `foo` and `foo_bar`.
```
struct foo {
struct bar {
} b;
};
```
In case of an unnamed definition we build the canonical name from
the inner most named definition. For example the following will
generate `baz__bindgen_ty_1`:
```
struct foo {
struct bar {
struct baz {
struct {
} u;
} z;
} b;
};
```
This option should be used only for C headers. It is needed in some
rare situations where user used another code generator that already
mangled nested definitions.
A real life example is [asn1c] with `-fcompound-names` option.
[asn1c]: https://github.com/vlm/asn1c
|
|
Opaque types don't use the path to their aliased type but an opaque type like an
array or primitive with the right alignment.
Fixes #1599.
|
|
|
|
Currently bindgen always uses clang-sys with the "runtime" feature -
that is, load libclang at runtime with dlopen (or similar)
at runtime. This PR keeps this default, but also
- adds "static" to statically link libclang
- without either "runtime" or "static", link with the shared library
Many distributions don't ship with a static libclang, but linking with the dynamic
library will use normal ld.so mechanisms to define where the .so file should be found.
(Ditto for the Mac and Windows equivalents.)
|
|
|
|
|
|
|
|
|
|
|
|
Fixes #1639.
|
|
|
|
It's slightly neater.
|
|
|
|
As the clang_File_tryGetRealPathName function is only exposed by
clang_sys for clang >= 7.0, this raises the clang dependency.
Closes: https://github.com/rust-lang/rust-bindgen/issues/1635
The book example code for creating a builder to run inside Cargo is
extended by using the rereun-if-changed headers.
|
|
|
|
|
|
For the remaining named parts of Context::gen.
|
|
`c_void` is available as `::std::os::raw::c_void` and
`::core::ffi::c_void`. If the "--use-core" option is specified (but no
--ctypes-prefix is provided), we should emit `::core::ffi::c_void`
rather than the `std` one.
|
|
If the `which-rustfmt` feature isn't enabled, assume that the binary is
called "rustfmt" and that it is in the user's PATH, instead of returning
an error.
|
|
See https://github.com/rust-lang/rust/issues/64710.
Bogus implementations were introduced in 230545e7c, d3e39dc62, and 379bb1663.
|
|
fixes #1616
|
|
|
|
|
|
|
|
This commit changes the API of rustfmt_path to return Result<Option<Cow<PathBuf>>>.
Ok(None) is returned in the case where which is disabled and no rustfmt command is
supplied explicitly either via configuration or env variable.
Downstream code checks for the presence of None to directly return the source without
emitting an error.
|
|
|
|
Fixes #1598
|
|
Fixes #1601
|
|
This is a breaking cheange since WChar is exposed, but should be no behavior
change otherwise.
|
|
|