|
1 | 1 | use std::any::Any;
|
| 2 | +use std::env::VarError; |
2 | 3 | use std::ffi::OsString;
|
3 | 4 | use std::io::{self, BufWriter, Write};
|
4 | 5 | use std::path::{Path, PathBuf};
|
@@ -336,6 +337,20 @@ fn early_lint_checks(tcx: TyCtxt<'_>, (): ()) {
|
336 | 337 | )
|
337 | 338 | }
|
338 | 339 |
|
| 340 | +fn env_var(tcx: TyCtxt<'_>, key: Symbol) -> Option<Symbol> { |
| 341 | + let var = match std::env::var(key.as_str()) { |
| 342 | + Ok(var) => Some(Symbol::intern(&var)), |
| 343 | + Err(VarError::NotPresent) => None, |
| 344 | + Err(VarError::NotUnicode(var)) => { |
| 345 | + tcx.dcx().emit_err(errors::EnvVarNotUnicode { key, var }); |
| 346 | + None |
| 347 | + } |
| 348 | + }; |
| 349 | + // Also add the variable to Cargo's dependency tracking |
| 350 | + tcx.sess.psess.env_depinfo.borrow_mut().insert((key, var)); |
| 351 | + var |
| 352 | +} |
| 353 | + |
339 | 354 | // Returns all the paths that correspond to generated files.
|
340 | 355 | fn generated_output_paths(
|
341 | 356 | tcx: TyCtxt<'_>,
|
@@ -623,6 +638,7 @@ pub static DEFAULT_QUERY_PROVIDERS: LazyLock<Providers> = LazyLock::new(|| {
|
623 | 638 | |tcx, _| tcx.arena.alloc_from_iter(tcx.resolutions(()).stripped_cfg_items.steal());
|
624 | 639 | providers.resolutions = |tcx, ()| tcx.resolver_for_lowering_raw(()).1;
|
625 | 640 | providers.early_lint_checks = early_lint_checks;
|
| 641 | + providers.env_var = env_var; |
626 | 642 | proc_macro_decls::provide(providers);
|
627 | 643 | rustc_const_eval::provide(providers);
|
628 | 644 | rustc_middle::hir::provide(providers);
|
|
0 commit comments