@@ -357,7 +357,9 @@ mod dirty_reason;
357
357
358
358
use std:: collections:: hash_map:: { Entry , HashMap } ;
359
359
360
+ use std:: collections:: BTreeMap ;
360
361
use std:: env;
362
+ use std:: ffi:: OsString ;
361
363
use std:: hash:: { self , Hash , Hasher } ;
362
364
use std:: io;
363
365
use std:: path:: { Path , PathBuf } ;
@@ -772,10 +774,20 @@ impl LocalFingerprint {
772
774
// TODO: This is allowed at this moment. Should figure out if it makes
773
775
// sense if permitting to read env from the config system.
774
776
#[ 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 {
776
781
let key = key. as_ref ( ) ;
777
782
let var = key. to_owned ( ) ;
778
- let val = env:: var ( key) . ok ( ) ;
783
+ let val = envs
784
+ . get ( key)
785
+ . and_then ( |opt| {
786
+ opt. as_ref ( )
787
+ . and_then ( |os_str| os_str. clone ( ) . into_string ( ) . ok ( ) )
788
+ } )
789
+ . or_else ( || env:: var_os ( key) . and_then ( |os_str| os_str. into_string ( ) . ok ( ) ) ) ;
790
+
779
791
LocalFingerprint :: RerunIfEnvChanged { var, val }
780
792
}
781
793
@@ -1608,6 +1620,13 @@ fn build_script_local_fingerprints(
1608
1620
bool ,
1609
1621
) {
1610
1622
assert ! ( unit. mode. is_run_custom_build( ) ) ;
1623
+ let envs = build_runner
1624
+ . bcx
1625
+ . target_data
1626
+ . info ( unit. kind )
1627
+ . get_target_envs ( )
1628
+ . unwrap ( )
1629
+ . clone ( ) ;
1611
1630
// First up, if this build script is entirely overridden, then we just
1612
1631
// return the hash of what we overrode it with. This is the easy case!
1613
1632
if let Some ( fingerprint) = build_script_override_fingerprint ( build_runner, unit) {
@@ -1660,7 +1679,12 @@ fn build_script_local_fingerprints(
1660
1679
// Ok so now we're in "new mode" where we can have files listed as
1661
1680
// dependencies as well as env vars listed as dependencies. Process
1662
1681
// them all here.
1663
- Ok ( Some ( local_fingerprints_deps ( deps, & target_dir, & pkg_root) ) )
1682
+ Ok ( Some ( local_fingerprints_deps (
1683
+ deps,
1684
+ & target_dir,
1685
+ & pkg_root,
1686
+ & envs,
1687
+ ) ) )
1664
1688
} ;
1665
1689
1666
1690
// Note that `false` == "not overridden"
@@ -1695,6 +1719,7 @@ fn local_fingerprints_deps(
1695
1719
deps : & BuildDeps ,
1696
1720
target_root : & Path ,
1697
1721
pkg_root : & Path ,
1722
+ envs : & BTreeMap < String , Option < OsString > > ,
1698
1723
) -> Vec < LocalFingerprint > {
1699
1724
debug ! ( "new local fingerprints deps {:?}" , pkg_root) ;
1700
1725
let mut local = Vec :: new ( ) ;
@@ -1719,7 +1744,7 @@ fn local_fingerprints_deps(
1719
1744
local. extend (
1720
1745
deps. rerun_if_env_changed
1721
1746
. iter ( )
1722
- . map ( LocalFingerprint :: from_env) ,
1747
+ . map ( |v| LocalFingerprint :: from_env ( v , & envs ) ) ,
1723
1748
) ;
1724
1749
1725
1750
local
0 commit comments