-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cannot override build scripts via environment variables #11041
Comments
Unfortunately tables with open-ended keys cannot be easily fetched via environment variables. #5416 contains a deeper discussion of the problem. This is generally a duplicate of #5416. However, I think it would be good to make the documentation a little clearer that there are some limitations. Any entry in the config page that doesn't explicitly list the the |
And #9301 discusses the issues with |
#5416 has a discussion about lists, and I can see how that wouldn't work, but I don't see open-ended keys being a huge problem. |
Problem
https://doc.rust-lang.org/cargo/reference/config.html#environment-variables says:
This unfortunately isn't true for e.g.
target.x86_64-unknown-linux-gnu.foo.rustc_flags
.Cc: @thomcc
Steps
cargo new testcase --lib
cd testcase
Cargo.toml
to addlinks = "foo"
echo "fn main() { panic!(); }" > build.rs
env CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_FOO_RUSTC_FLAGS="" cargo build
(assuming you're on x86_64-unknown-linux-gnu)The build script will still be executed.
The environment variable is recognized by
cargo config
, which could be a source of confusion.Obviously, setting the same variable via
.cargo/config.toml
works.Possible Solution(s)
cargo::util::config::load_config_table
callscargo::util::config::Config::get_table
, which explicitly leaves taking environment variables into account to its callers, but it doesn't. Making either of those handle environment variables would solve the problem. If I didn't miss anything, the only two other uses ofConfig::get_table
areConfigMapAccess::new_map
andConfigMapAccess::new_struct
, and the former handles environment variables. I'm not sure why the latter doesn't, but maybe it should, at which point it would seem likeget_table
should be doing it.Notes
No response
Version
No response
The text was updated successfully, but these errors were encountered: