Auto merge of #118368 - GuillaumeGomez:env-flag, r=Nilstrieb

Implement `--env` compiler flag (without `tracked_env` support)

Part of https://github.com/rust-lang/rust/issues/80792.
Implementation of https://github.com/rust-lang/compiler-team/issues/653.
Not an implementation of https://github.com/rust-lang/rfcs/pull/2794.

It adds the `--env` compiler flag option which allows to set environment values used by `env!` and `option_env!`.

Important to note: When trying to retrieve an environment variable value, it will first look into the ones defined with `--env`, and if there isn't one, then only it will look into the environment variables. So if you use `--env PATH=a`, then `env!("PATH")` will return `"a"` and not the actual `PATH` value.

As mentioned in the title, `tracked_env` support is not added here. I'll do it in a follow-up PR.

r? rust-lang/compiler
This commit is contained in:
bors 2023-12-10 21:48:53 +00:00
commit d86d65bbc1
9 changed files with 107 additions and 3 deletions

View file

@ -0,0 +1,9 @@
// run-pass
// rustc-env:MY_VAR=tadam
// compile-flags: --env MY_VAR=123abc -Zunstable-options
// This test ensures that variables provided with `--env` take precedence over
// variables from environment.
fn main() {
assert_eq!(env!("MY_VAR"), "123abc");
}

View file

@ -0,0 +1,5 @@
// compile-flags: --env FOO=123abc -Zunstable-options
// run-pass
fn main() {
assert_eq!(env!("FOO"), "123abc");
}

View file

@ -0,0 +1,7 @@
// run-pass
// rustc-env:MY_ENV=/
// Ensures that variables not defined through `--env` are still available.
fn main() {
assert!(!env!("MY_ENV").is_empty());
}

View file

@ -0,0 +1,3 @@
// compile-flags: --env A=B
fn main() {}

View file

@ -0,0 +1,2 @@
error: the `-Z unstable-options` flag must also be passed to enable the flag `env`