rust-bindgen icon indicating copy to clipboard operation
rust-bindgen copied to clipboard

Improve troubleshooting experience

Open vchekan opened this issue 6 years ago • 4 comments

Bindgen documentation says to add -x c++ to parse c++ headers, so I've done what seems to be logical: .clang_arg("-x c++"). This caused quite unhelpful error:

--- stderr
thread 'main' panicked at 'libclang error; possible causes include:
- Invalid flag syntax
- Unrecognized flags
- Invalid flag arguments
- File I/O errors
If you encounter an error missing from this list, please file an issue or a PR!', libcore\option.rs:960:5

I've manually checked that clang takes this param without problem. So, it is bindgen doing something strange to this param. Unfortunately the exact clang command line is not shown in output, thus leaving me unable to troubleshoot. Googling did help to answer the mystery with advice to do .clang_arg("-x").clang_arg("c++"). but it should be documented.

Expected changes:

  1. Document in clang_arg (and clang_args?) that space separated arguments must be set in individual calls.
  2. Is it possible for clang_arg to behave with the principle of least surprise and work with spaces as expected?
  3. Amend tutorial's C++ section and provide code snippet how to add c++ support.
  4. Print clang command line to output so people could troubleshoot problems like this one.

vchekan avatar Nov 30 '18 19:11 vchekan

Yeah, I agree this is unfortunate. The right fix is fixing libclang so that we can get a diagnostic of why the translation unit creation failed.

But we should be able to detect at least a few common cases I guess.

The annoying bit of just using split_whitespace in clang_arg is that it would effectively break any kind of path with whitespace, which aren't common I guess, but are a possibility.

emilio avatar Dec 02 '18 14:12 emilio

what about adding a bindgen option to do this: --cpp? we already modify clang_args anyway?

pvdrz avatar Sep 08 '22 17:09 pvdrz

what about adding a bindgen option to do this: --cpp? we already modify clang_args anyway?

Personally I really think "cpp" should always mean "the C preprocessor" and not "C++", but I probably lost that battle.

I personally could imagine --cxx as a reasonable affordance for this papercut.

kulp avatar Sep 09 '22 02:09 kulp

yeah --cxx works for me.

pvdrz avatar Sep 09 '22 02:09 pvdrz

This issue probably overlaps #1855.

kulp avatar Sep 24 '22 00:09 kulp