Skip to content
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

Implement --env compiler flag (without tracked_env support) #118368

Merged
merged 4 commits into from
Dec 10, 2023

Conversation

GuillaumeGomez
Copy link
Member

@GuillaumeGomez GuillaumeGomez commented Nov 27, 2023

Part of #80792.
Implementation of rust-lang/compiler-team#653.
Not an implementation of rust-lang/rfcs#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

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Nov 27, 2023
Copy link
Member

@Urgau Urgau left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A part from the 2 nits I think this looks good.

Nit: could you also add a feature gate UI test in tests/ui/feature-gates

compiler/rustc_session/src/options.rs Outdated Show resolved Hide resolved
tests/ui/extenv/extenv-not-env.rs Show resolved Hide resolved
tests/ui/extenv/extenv-not-env.rs Outdated Show resolved Hide resolved
tests/ui/extenv/extenv-env-overload.rs Outdated Show resolved Hide resolved
compiler/rustc_session/src/options.rs Outdated Show resolved Hide resolved
compiler/rustc_session/src/config.rs Show resolved Hide resolved
@xclaesse
Copy link

Not an implementation of rust-lang/rfcs#2794.

My understanding is this is a subset of that RFC, implementing only --env-set part, right? If we later want to implement the rest of it, wouldn't it be better to already rename --env to --env-set? I don't personally see a need for --env-remove or --env-pass, but --env-clear seems likely to be added at some point.

@GuillaumeGomez
Copy link
Member Author

This flag will very likely remain unstable for quite some time (at least until the RFC is merged). We can always rename at this point. Not a big fan of --env-set but if people prefer, I can rename --env flag.

@GuillaumeGomez
Copy link
Member Author

Added the feature gate test, updated the UI test with rustc-env and set the feature as [TRACKED].

@ChrisDenton
Copy link
Member

Is there any documentation for this feature? Note that environment variables are case-insensitive but case-preserving on Windows so we might need to document that, for example, $env:Path = "..."; rustc ... is different from rustc ... --env Path="...".

@xclaesse
Copy link

This flag will very likely remain unstable for quite some time (at least until the RFC is merged). We can always rename at this point.

Fair enough. I don't have strong opinion either way tbh.

@GuillaumeGomez
Copy link
Member Author

Is there any documentation for this feature? Note that environment variables are case-insensitive but case-preserving on Windows so we might need to document that, for example, $env:Path = "..."; rustc ... is different from rustc ... --env Path="...".

Unlike rustdoc, rustc doesn't seem to have a chapter for unstable flags, so I didn't add documentation simply because I don't know where to add it. However, the information about Windows is super important, so that would definitely be nice to add it somewhere. If someone has an idea...

@Urgau
Copy link
Member

Urgau commented Nov 27, 2023

Is there any documentation for this feature?

Forgot about this. @GuillaumeGomez you should add the documentation under src/doc/unstable-book/src/compiler-flags/env.md with a tracking issue.

@GuillaumeGomez
Copy link
Member Author

Ah so there was a place where such documentation exists. Thanks @Urgau !

@GuillaumeGomez
Copy link
Member Author

Added the documentation.

@rust-log-analyzer

This comment has been minimized.

@GuillaumeGomez
Copy link
Member Author

The test passes locally. Weird... I rebased just in case, let's see if it works better...

@rust-log-analyzer

This comment has been minimized.

@GuillaumeGomez
Copy link
Member Author

CI fixed! \o/

@GuillaumeGomez
Copy link
Member Author

I applied both suggestions, thanks!

@GuillaumeGomez
Copy link
Member Author

Let's reroll reviewer.

r? rust-lang/compiler

@GuillaumeGomez
Copy link
Member Author

I applied suggestions. I'll add tracked_env support in a follow-up PR once this PR is merged. Thanks for the review!

Copy link
Member

@Noratrieb Noratrieb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

awesome, thanks!

@Noratrieb
Copy link
Member

@bors r+

@bors
Copy link
Contributor

bors commented Dec 10, 2023

📌 Commit dc2f77a has been approved by Nilstrieb

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Dec 10, 2023
@bors
Copy link
Contributor

bors commented Dec 10, 2023

⌛ Testing commit dc2f77a with merge d86d65b...

@WaffleLapkin
Copy link
Member

Why did rustbot assign this PR to me in #118368 (comment) ?... Did the title change re-trigger r? rust-lang/compiler in the description? I don't think that's right...

@GuillaumeGomez
Copy link
Member Author

GuillaumeGomez commented Dec 10, 2023

You're bors' chosen one! \o/

@bors
Copy link
Contributor

bors commented Dec 10, 2023

☀️ Test successful - checks-actions
Approved by: Nilstrieb
Pushing d86d65b to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Dec 10, 2023
@bors bors merged commit d86d65b into rust-lang:master Dec 10, 2023
12 checks passed
@rustbot rustbot added this to the 1.76.0 milestone Dec 10, 2023
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (d86d65b): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

This benchmark run did not return any relevant results for this metric.

Max RSS (memory usage)

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
5.5% [5.5%, 5.5%] 1
Regressions ❌
(secondary)
2.0% [2.0%, 2.0%] 1
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 5.5% [5.5%, 5.5%] 1

Cycles

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
1.2% [1.2%, 1.2%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 1.2% [1.2%, 1.2%] 1

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 670.824s -> 668.008s (-0.42%)
Artifact size: 314.10 MiB -> 314.06 MiB (-0.01%)

@GuillaumeGomez GuillaumeGomez deleted the env-flag branch December 12, 2023 10:25
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Dec 16, 2023
…Nilstrieb

Add support for `--env` on `tracked_env::var`

Follow-up of rust-lang#118368.
Part of Part of rust-lang#80792.

It adds support of the `--env` option for proc-macros through `tracked_env::var`.

r? `@Nilstrieb`
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Dec 16, 2023
…Nilstrieb

Add support for `--env` on `tracked_env::var`

Follow-up of rust-lang#118368.
Part of Part of rust-lang#80792.

It adds support of the `--env` option for proc-macros through `tracked_env::var`.

r? ``@Nilstrieb``
bors added a commit to rust-lang-ci/rust that referenced this pull request Dec 17, 2023
…lstrieb

Add support for `--env` on `tracked_env::var`

Follow-up of rust-lang#118368.
Part of Part of rust-lang#80792.

It adds support of the `--env` option for proc-macros through `tracked_env::var`.

r? `@Nilstrieb`
lnicola pushed a commit to lnicola/rust-analyzer that referenced this pull request Dec 18, 2023
Add support for `--env` on `tracked_env::var`

Follow-up of rust-lang/rust#118368.
Part of Part of rust-lang/rust#80792.

It adds support of the `--env` option for proc-macros through `tracked_env::var`.

r? `@Nilstrieb`
github-actions bot pushed a commit to rust-lang/miri that referenced this pull request Dec 19, 2023
Add support for `--env` on `tracked_env::var`

Follow-up of rust-lang/rust#118368.
Part of Part of rust-lang/rust#80792.

It adds support of the `--env` option for proc-macros through `tracked_env::var`.

r? `@Nilstrieb`
lnicola pushed a commit to lnicola/rust-analyzer that referenced this pull request Apr 7, 2024
Add support for `--env` on `tracked_env::var`

Follow-up of rust-lang/rust#118368.
Part of Part of rust-lang/rust#80792.

It adds support of the `--env` option for proc-macros through `tracked_env::var`.

r? `@Nilstrieb`
RalfJung pushed a commit to RalfJung/rust-analyzer that referenced this pull request Apr 27, 2024
Add support for `--env` on `tracked_env::var`

Follow-up of rust-lang/rust#118368.
Part of Part of rust-lang/rust#80792.

It adds support of the `--env` option for proc-macros through `tracked_env::var`.

r? `@Nilstrieb`
celinval added a commit to celinval/rust-dev that referenced this pull request Jun 4, 2024
Update Rust toolchain from nightly-2023-12-10 to nightly-2023-12-11
without any other source changes.
This is an automatically generated pull request. If any of the CI checks
fail, manual intervention is required. In such a case, review the
changes at https://github.com/rust-lang/rust from
rust-lang@06e02d5
up to
rust-lang@d86d65b.
The log for this commit range is:
rust-lang@d86d65bbc1 Auto merge of
rust-lang#118368 - GuillaumeGomez:env-flag, r=Nilstrieb
rust-lang@ec4176167b Auto merge of
rust-lang#118703 - Kobzol:bootstrap-config-unused, r=onur-ozkan
rust-lang@f1c5558edc Add ChangeInfo
record
rust-lang@ccbd88dc83 Remove unused
run_dsymutil and gpg_password_file config values
rust-lang@6badc0d840 Destructure TOML
configs
rust-lang@7e452c123c Auto merge of
rust-lang#118791 - saethlin:use-immediate-type, r=nikic
rust-lang@b9068315db Auto merge of
rust-lang#116952 - compiler-errors:lifetime_capture_rules_2024, r=TaKO8Ki
rust-lang@befd1eb4ec Auto merge of
rust-lang#116278 - Kobzol:bootstrap-lld-mode, r=albertlarsan68,petrochenkov
rust-lang@dc2f77aad6 Add (unstable)
documentation for `--env` command line option
rust-lang@d2b1f94f05 Add feature gate
test for `--env` flag
rust-lang@37d68093da Add ui tests for
`--env` option
rust-lang@486e55e547 Implement `--env`
compiler flag
rust-lang@53031b264e Review fixes
rust-lang@84f6130fe3 Auto merge of
rust-lang#118692 - surechen:remove_unused_imports, r=petrochenkov
rust-lang@4750e9de47 Produce an explicit
error when using a self-contained lld, but we don't add it to sysroot
rust-lang@ea769dbeb7 Add change tracker
entry
rust-lang@cbfe6327a1 Do not invoke
external lld to figure out thread flags in self-contained mode
rust-lang@50865745e1 Update
`config.example.toml`
rust-lang@40c3d351ad Use MCP510
rust-lang@48c1607bc6 Introduce `LldMode`
and generalize parsing of `use-lld`
rust-lang@d9f9e67bc1 Refactor rust(do)c
linker flags
rust-lang@b3c9ffdc77 Add `is_msvc`
function
rust-lang@c1a3919378 Auto merge of
rust-lang#118792 - naglis:fix-mutex-doc-typo, r=workingjubilee
rust-lang@42dfac5e08 Auto merge of
rust-lang#118788 - compiler-errors:const-pretty, r=fee1-dead
rust-lang@61afc9c928 Auto merge of
rust-lang#116949 - hamza1311:stablize-arc_unwrap_or_clone, r=dtolnay
rust-lang@c71c246876 Auto merge of
rust-lang#118550 - cjgillot:filecheck-const-prop, r=Mark-Simulacrum
rust-lang@40ae34194c remove redundant
imports
rust-lang@f7253f2317 Auto merge of
rust-lang#118787 - GuillaumeGomez:rollup-fj5wr3q, r=GuillaumeGomez
rust-lang@7d50a39763 Fix typo in
`std::sync::Mutex` example
rust-lang@8cd8d31369 Auto merge of
rust-lang#118069 - onur-ozkan:bypass_bootstrap_lock, r=Mark-Simulacrum
rust-lang@b0a580112b Use
immediate_backend_type when reading from a const alloc
rust-lang@afa35e90ef Print constness in
TraitPredPrintModifiersAndPath
rust-lang@7467c3a45c
s/const_effect/host_effect
rust-lang@f1bf874fb1 Don't print host
effect param in pretty path_generic_args
rust-lang@6860654d82 allow bypassing the
build directory lock
rust-lang@dd234696ed Rollup merge of
rust-lang#118782 - jyn514:powershell, r=ChrisDenton
rust-lang@034d73d6d7 Rollup merge of
rust-lang#118775 - Young-Flash:fix, r=compiler-errors
rust-lang@5b9e917b64 Rollup merge of
rust-lang#118774 - lcnr:region-refactor-uwu, r=compiler-errors
rust-lang@cc821d3ae6 Rollup merge of
rust-lang#118747 - Urgau:check-cfg-freebsd-cleanup, r=onur-ozkan
rust-lang@83e814f88c Rollup merge of
rust-lang#117966 - lxy19980601:safe_compilation_options, r=Mark-Simulacrum
rust-lang@2cf54e9f99 use `&` instead of
start-process in x.ps1
rust-lang@ef796db5f0 add test for
inductive cycle hangs
rust-lang@cb6984217f chore: add test case
for type with generic
rust-lang@0f40b6545d Remove extra
check-cfg handled by libc directly
rust-lang@803772e81d Enable new capture
rules by default on edition 2024
rust-lang@acba7efe1b Add test for
implicitly capturing late-bound var with new capture rules
rust-lang@0ad160a585 Add
lifetime_capture_rules_2024
rust-lang@3f8487a099 Add safe compilation
options
rust-lang@30a95b7c0a FileCheck
while_let_loops.
rust-lang@c00068e49f FileCheck
tuple_literal_propagation.
rust-lang@87522d0007 FileCheck
return_place.
rust-lang@a12027e128 FileCheck
switch_int.
rust-lang@19767eb7a6 FileCheck slice_len.
rust-lang@3e90c1b434 FileCheck
scalar_literal_propagation.
rust-lang@f3743aec51 FileCheck repeat.
rust-lang@343ef6a9cb FileCheck
reify_fn_ptr.
rust-lang@6baec3ccc2 FileCheck ref_deref.
rust-lang@c8c9207e4c FileCheck
read_immutable_static.
rust-lang@45dd5d6bf3 FileCheck
mutable_variable_unprop_assign.
rust-lang@6a8eea8f5b FileCheck
mutable_variable_aggregate_partial_read.
rust-lang@d91bb5074e FileCheck
mutable_variable_no_prop.
rust-lang@3e169abc1b FileCheck
mutable_variable_aggregate_mut_ref.
rust-lang@03c5ad1549 FileCheck
mutable_variable_aggregate.
rust-lang@ea9f968333 FileCheck
mutable_variable.
rust-lang@902a3e2e75 FileCheck
mult_by_zero.
rust-lang@8e9b912c4c FileCheck
issue_67019.
rust-lang@ce9b1e23a5 FileCheck
issue_66971.
rust-lang@218d8ccf43 FileCheck
inherit_overflow.
rust-lang@6086dd6766 FileCheck indirect.
rust-lang@bf5d114da8 FileCheck
discriminant.
rust-lang@043d29b58a FileCheck and rename
const_prop_fails_gracefully.
rust-lang@7f328d2a44 FileCheck
checked_add.
rust-lang@e6a1b77cd1 FileCheck cast.
rust-lang@b8f2f63931 FileCheck boxes.
rust-lang@3fc03948a8 FileCheck
boolean_identities.
rust-lang@e8e35c8127 FileCheck
bad_op_unsafe_oob_for_slices.
rust-lang@97f03cb898 FileCheck
bad_op_mod_by_zero.
rust-lang@0d5bc872a9 FileCheck
bad_op_div_by_zero.
rust-lang@9f01d9d1b6 FileCheck
array_index.
rust-lang@6564bac532 FileCheck aggregate.
rust-lang@378abbc604 FileCheck
address_of_pair.
rust-lang@540921e468 Stablize
arc_unwrap_or_clone

Co-authored-by: celinval <celinval@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
merged-by-bors This PR was explicitly merged by bors. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.