]> git.lizzy.rs Git - rust.git/commitdiff
rustc: Allow the crate linked to as 'std' to be customized
authorBrian Anderson <banderson@mozilla.com>
Sun, 20 Jul 2014 05:40:39 +0000 (22:40 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Mon, 21 Jul 2014 16:54:27 +0000 (09:54 -0700)
This adds the alt_std_name field to the Session's Options type.
I'm using this in an external tool to control which libraries
a crate links to.

src/librustc/driver/config.rs
src/librustc/front/std_inject.rs

index 4752997a3fcea080bb5206aad3c99ee309b19f86..890093a10ecc75d4f1f7b7baecd86bddfdddc6b9 100644 (file)
@@ -97,6 +97,7 @@ pub struct Options {
     pub color: ColorConfig,
     pub externs: HashMap<String, Vec<String>>,
     pub crate_name: Option<String>,
+    pub alt_std_name: Option<String>
 }
 
 /// Some reasonable defaults
@@ -124,6 +125,7 @@ pub fn basic_options() -> Options {
         color: Auto,
         externs: HashMap::new(),
         crate_name: None,
+        alt_std_name: None,
     }
 }
 
@@ -787,6 +789,7 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options {
         color: color,
         externs: externs,
         crate_name: crate_name,
+        alt_std_name: None
     }
 }
 
index 351c9a6b771672c6506c4c95f04d1419a8c71b87..940112325fdf42d61040a431d81518d573a2edca 100644 (file)
@@ -60,9 +60,16 @@ struct StandardLibraryInjector<'a> {
 
 impl<'a> fold::Folder for StandardLibraryInjector<'a> {
     fn fold_crate(&mut self, mut krate: ast::Crate) -> ast::Crate {
+
+        // The name to use in `extern crate std = "name";`
+        let actual_crate_name = match self.sess.opts.alt_std_name {
+            Some(ref s) => token::intern_and_get_ident(s.as_slice()),
+            None => token::intern_and_get_ident("std"),
+        };
+
         let mut vis = vec!(ast::ViewItem {
             node: ast::ViewItemExternCrate(token::str_to_ident("std"),
-                                           None,
+                                           Some((actual_crate_name, ast::CookedStr)),
                                            ast::DUMMY_NODE_ID),
             attrs: vec!(
                 attr::mk_attr_outer(attr::mk_attr_id(), attr::mk_list_item(