Cannot override build scripts via environment variables #11041
Labels
A-configuration
Area: cargo config files and env vars
A-documenting-cargo-itself
Area: Cargo's documentation
C-bug
Category: bug
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: