bindgen::ParseCallbacks: support tracking env variable usage for cargo #2400
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
bindgen currently has a
bindgen/build.rs
which attempts to have cargo rebuild bindgen whenTARGET
specific env variables change, specificallyBINDGEN_EXTRA_CLANG_ARGS_<target>
. Unfortunately, this doesn't have the desired effect in most cases.Specifically, when a crate
A
hasbindgen
inbuild-dependencies
, and we're cross compilingA
for targetT
on a hostH
,bindgen
'sbuild.rs
will observeTARGET
set toH
(the host target name) instead ofT
(becausebindgen
itself is being built forH
and notT
). Then, within the build script of crateA
, one would usebindgen
to generate bindings, and nowTARGET
is set toT
, so different env variables are used.Allow crates using
bindgen
in build scripts to correctly handle env variable changes by addingParseCallbacks::read_env_var()
to track env var reads and adding a basic implimentation toCargoCallbacks
to emitcargo:rerun-if-env-changed
lines.