rust-lang / rust-lang/rust-bindgen
Functional C macros are not expanded.
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 5.3k
- Forks
- 829
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 15
Description
So I'm generating bindings to <linux/uinput>. This works pretty well, but two c macros in particular do not produce any bindings in the output. Reduced input below:
Input C/C++ Header
#define UI_DEV_CREATE _IO(UINPUT_IOCTL_BASE, 1)
#define UI_DEV_DESTROY _IO(UINPUT_IOCTL_BASE, 2)
Bindgen Invocation
let bindings = bindgen::Builder::default()
.no_unstable_rust()
.header("wrapper/wrapper.h")
.expect("Unable to generate bindings").
wrapper.h looks like this:
#include <linux/uinput.h>
Actual Results
No constant UI_DEV_CREATE or UI_DEV_DESTROY generated in output.
Expected Results
Constants UI_DEV_CREATE and UI_DEV_DESTROY generated in output.
I'm not really that familiar with the kernel macro _IO and not sure if this is technically even possible, but I figured to report just to get a more professional opinion. If it's not possible, workarounds welcome.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the reduced macros in linux/uinput.h and the shown bindgen::Builder invocation, then trace bindgen's handling of functional C macros and ioctl-style expressions. Compare generated output with the expected UI_DEV_CREATE and UI_DEV_DESTROY constants; done means the constants are generated or the limitation and workaround are clearly documented.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, rust
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100