@@ -357,7 +357,9 @@ mod dirty_reason;
357357
358358use std:: collections:: hash_map:: { Entry , HashMap } ;
359359
360+ use std:: collections:: BTreeMap ;
360361use std:: env;
362+ use std:: ffi:: OsString ;
361363use std:: hash:: { self , Hash , Hasher } ;
362364use std:: io;
363365use std:: path:: { Path , PathBuf } ;
@@ -772,10 +774,18 @@ impl LocalFingerprint {
772774 // TODO: This is allowed at this moment. Should figure out if it makes
773775 // sense if permitting to read env from the config system.
774776 #[ allow( clippy:: disallowed_methods) ]
775- fn from_env < K : AsRef < str > > ( key : K ) -> LocalFingerprint {
777+ fn from_env < K : AsRef < str > > (
778+ key : K ,
779+ envs : & BTreeMap < String , Option < OsString > > ,
780+ ) -> LocalFingerprint {
776781 let key = key. as_ref ( ) ;
777782 let var = key. to_owned ( ) ;
778- let val = env:: var ( key) . ok ( ) ;
783+ let val = envs
784+ . get ( key)
785+ . map ( |v| v. to_owned ( ) )
786+ . or_else ( || Some ( env:: var_os ( key) ) )
787+ . and_then ( |os_str| os_str?. into_string ( ) . ok ( ) ) ;
788+
779789 LocalFingerprint :: RerunIfEnvChanged { var, val }
780790 }
781791
@@ -1608,6 +1618,12 @@ fn build_script_local_fingerprints(
16081618 bool ,
16091619) {
16101620 assert ! ( unit. mode. is_run_custom_build( ) ) ;
1621+ let envs = build_runner
1622+ . bcx
1623+ . target_data
1624+ . info ( unit. kind )
1625+ . get_target_envs ( )
1626+ . clone ( ) ;
16111627 // First up, if this build script is entirely overridden, then we just
16121628 // return the hash of what we overrode it with. This is the easy case!
16131629 if let Some ( fingerprint) = build_script_override_fingerprint ( build_runner, unit) {
@@ -1660,7 +1676,12 @@ fn build_script_local_fingerprints(
16601676 // Ok so now we're in "new mode" where we can have files listed as
16611677 // dependencies as well as env vars listed as dependencies. Process
16621678 // them all here.
1663- Ok ( Some ( local_fingerprints_deps ( deps, & target_dir, & pkg_root) ) )
1679+ Ok ( Some ( local_fingerprints_deps (
1680+ deps,
1681+ & target_dir,
1682+ & pkg_root,
1683+ & envs,
1684+ ) ) )
16641685 } ;
16651686
16661687 // Note that `false` == "not overridden"
@@ -1695,6 +1716,7 @@ fn local_fingerprints_deps(
16951716 deps : & BuildDeps ,
16961717 target_root : & Path ,
16971718 pkg_root : & Path ,
1719+ envs : & BTreeMap < String , Option < OsString > > ,
16981720) -> Vec < LocalFingerprint > {
16991721 debug ! ( "new local fingerprints deps {:?}" , pkg_root) ;
17001722 let mut local = Vec :: new ( ) ;
@@ -1719,7 +1741,7 @@ fn local_fingerprints_deps(
17191741 local. extend (
17201742 deps. rerun_if_env_changed
17211743 . iter ( )
1722- . map ( LocalFingerprint :: from_env) ,
1744+ . map ( |v| LocalFingerprint :: from_env ( v , & envs ) ) ,
17231745 ) ;
17241746
17251747 local
0 commit comments