diff --git a/crates/rpl_interface/src/callbacks.rs b/crates/rpl_interface/src/callbacks.rs index 4f88dd68..f5ca069f 100644 --- a/crates/rpl_interface/src/callbacks.rs +++ b/crates/rpl_interface/src/callbacks.rs @@ -16,6 +16,7 @@ use rustc_span::Symbol; // use crate::passes::create_rpl_ctxt; pub static RPL_ARGS_ENV: &str = "RPL_ARGS"; +pub static RPL_PATS_ENV: &str = "RPL_PATS"; fn track_rpl_args(psess: &mut ParseSess, args_env_var: &Option) { psess.env_depinfo.get_mut().insert(( @@ -40,6 +41,20 @@ fn track_files(psess: &mut ParseSess) { } } +fn track_rpl_pats(psess: &mut ParseSess, pats_env_var: Option, pats: &[String]) { + let rpl_pats = pats_env_var; + psess + .env_depinfo + .get_mut() + .insert((Symbol::intern(RPL_PATS_ENV), rpl_pats.as_deref().map(Symbol::intern))); + + let pat_depinfo = psess.file_depinfo.get_mut(); + + for path in pats { + pat_depinfo.insert(Symbol::intern(path)); + } +} + /// This is different from `DefaultCallbacks` that it will inform Cargo to track the value of /// `RPL_ARGS` environment variable. pub struct RustcCallbacks { @@ -66,13 +81,15 @@ impl rustc_driver::Callbacks for DefaultCallbacks {} pub struct RplCallbacks { rpl_args_var: Option, + rpl_pats_var: Option, pattern_paths: Option>, } impl RplCallbacks { - pub fn new(rpl_args_var: Option, pattern_paths: Option>) -> Self { + pub fn new(rpl_args_var: Option, rpl_pats_var: Option, pattern_paths: Option>) -> Self { Self { rpl_args_var, + rpl_pats_var, pattern_paths, } } @@ -102,9 +119,12 @@ impl rustc_driver::Callbacks for RplCallbacks { #[allow(rustc::bad_opt_access)] fn config(&mut self, config: &mut interface::Config) { let rpl_args_var = self.rpl_args_var.take(); + let rpl_pats_var = self.rpl_pats_var.take(); + let rpl_pats = self.pattern_paths.clone(); config.psess_created = Some(Box::new(move |psess| { track_rpl_args(psess, &rpl_args_var); track_files(psess); + track_rpl_pats(psess, rpl_pats_var, rpl_pats.as_deref().unwrap_or(&[])); })); config.locale_resources = crate::default_locale_resources(); diff --git a/src/driver.rs b/src/driver.rs index 6139b1bd..34bb29ea 100644 --- a/src/driver.rs +++ b/src/driver.rs @@ -221,7 +221,8 @@ pub fn main() { let mut args: Vec = orig_args.clone(); pass_sysroot_env_if_given(&mut args, sys_root_env); - let pattern_paths = match env::var("RPL_PATS") { + let rpl_pats_var = env::var("RPL_PATS"); + let pattern_paths = match &rpl_pats_var { Ok(val) => Some(val.split(':').map(ToString::to_string).collect()), Err(env::VarError::NotPresent) => None, Err(env::VarError::NotUnicode(var)) => { @@ -261,7 +262,10 @@ pub fn main() { /* rustc_driver::RunCompiler::new(&args, &mut RplCallbacks::new(rpl_args_var)) .set_using_internal_features(using_internal_features) .run() */ - rustc_driver::run_compiler(&args, &mut RplCallbacks::new(rpl_args_var, pattern_paths)) + rustc_driver::run_compiler( + &args, + &mut RplCallbacks::new(rpl_args_var, rpl_pats_var.ok(), pattern_paths), + ) } else { rustc_driver::run_compiler(&args, &mut RustcCallbacks::new(rpl_args_var)) }