• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use std::path::{Path, PathBuf};
2 use std::process::{Command, Stdio};
3 
get_host_triple(rustc: &Path) -> String4 pub(crate) fn get_host_triple(rustc: &Path) -> String {
5     let version_info =
6         Command::new(rustc).stderr(Stdio::inherit()).args(&["-vV"]).output().unwrap().stdout;
7     String::from_utf8(version_info)
8         .unwrap()
9         .lines()
10         .to_owned()
11         .find(|line| line.starts_with("host"))
12         .unwrap()
13         .split(":")
14         .nth(1)
15         .unwrap()
16         .trim()
17         .to_owned()
18 }
19 
get_toolchain_name() -> String20 pub(crate) fn get_toolchain_name() -> String {
21     let active_toolchain = Command::new("rustup")
22         .stderr(Stdio::inherit())
23         .args(&["show", "active-toolchain"])
24         .output()
25         .unwrap()
26         .stdout;
27     String::from_utf8(active_toolchain).unwrap().trim().split_once(' ').unwrap().0.to_owned()
28 }
29 
get_cargo_path() -> PathBuf30 pub(crate) fn get_cargo_path() -> PathBuf {
31     if let Ok(cargo) = std::env::var("CARGO") {
32         return PathBuf::from(cargo);
33     }
34     let cargo_path = Command::new("rustup")
35         .stderr(Stdio::inherit())
36         .args(&["which", "cargo"])
37         .output()
38         .unwrap()
39         .stdout;
40     Path::new(String::from_utf8(cargo_path).unwrap().trim()).to_owned()
41 }
42 
get_rustc_path() -> PathBuf43 pub(crate) fn get_rustc_path() -> PathBuf {
44     if let Ok(rustc) = std::env::var("RUSTC") {
45         return PathBuf::from(rustc);
46     }
47     let rustc_path = Command::new("rustup")
48         .stderr(Stdio::inherit())
49         .args(&["which", "rustc"])
50         .output()
51         .unwrap()
52         .stdout;
53     Path::new(String::from_utf8(rustc_path).unwrap().trim()).to_owned()
54 }
55 
get_rustdoc_path() -> PathBuf56 pub(crate) fn get_rustdoc_path() -> PathBuf {
57     if let Ok(rustdoc) = std::env::var("RUSTDOC") {
58         return PathBuf::from(rustdoc);
59     }
60     let rustc_path = Command::new("rustup")
61         .stderr(Stdio::inherit())
62         .args(&["which", "rustdoc"])
63         .output()
64         .unwrap()
65         .stdout;
66     Path::new(String::from_utf8(rustc_path).unwrap().trim()).to_owned()
67 }
68 
get_default_sysroot(rustc: &Path) -> PathBuf69 pub(crate) fn get_default_sysroot(rustc: &Path) -> PathBuf {
70     let default_sysroot = Command::new(rustc)
71         .stderr(Stdio::inherit())
72         .args(&["--print", "sysroot"])
73         .output()
74         .unwrap()
75         .stdout;
76     Path::new(String::from_utf8(default_sysroot).unwrap().trim()).to_owned()
77 }
78 
79 // FIXME call once for each target and pass result around in struct
get_file_name(rustc: &Path, crate_name: &str, crate_type: &str) -> String80 pub(crate) fn get_file_name(rustc: &Path, crate_name: &str, crate_type: &str) -> String {
81     let file_name = Command::new(rustc)
82         .stderr(Stdio::inherit())
83         .args(&[
84             "--crate-name",
85             crate_name,
86             "--crate-type",
87             crate_type,
88             "--print",
89             "file-names",
90             "-",
91         ])
92         .output()
93         .unwrap()
94         .stdout;
95     let file_name = String::from_utf8(file_name).unwrap().trim().to_owned();
96     assert!(!file_name.contains('\n'));
97     assert!(file_name.contains(crate_name));
98     file_name
99 }
100