diff options
| author | Brian Anderson <banderson@mozilla.com> | 2014-07-19 22:40:39 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-07-21 09:54:27 -0700 |
| commit | ec0f1cb709cb59e160083cb95f99aa8fc851a9b8 (patch) | |
| tree | f311ac17cb2814651af83bdcfa6f96241840381f | |
| parent | c88bf10c37d32f18774cfa3ef480eb77df294565 (diff) | |
| download | rust-ec0f1cb709cb59e160083cb95f99aa8fc851a9b8.tar.gz rust-ec0f1cb709cb59e160083cb95f99aa8fc851a9b8.zip | |
rustc: Allow the crate linked to as 'std' to be customized
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.
| -rw-r--r-- | src/librustc/driver/config.rs | 3 | ||||
| -rw-r--r-- | src/librustc/front/std_inject.rs | 9 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/librustc/driver/config.rs b/src/librustc/driver/config.rs index 4752997a3fc..890093a10ec 100644 --- a/src/librustc/driver/config.rs +++ b/src/librustc/driver/config.rs @@ -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 } } diff --git a/src/librustc/front/std_inject.rs b/src/librustc/front/std_inject.rs index 351c9a6b771..940112325fd 100644 --- a/src/librustc/front/std_inject.rs +++ b/src/librustc/front/std_inject.rs @@ -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( |
