]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_codegen_cranelift/build_system/rustc_info.rs
New upstream version 1.66.0+dfsg1
[rustc.git] / compiler / rustc_codegen_cranelift / build_system / rustc_info.rs
CommitLineData
136023e0
XL
1use std::path::{Path, PathBuf};
2use std::process::{Command, Stdio};
3
4pub(crate) fn get_rustc_version() -> String {
5 let version_info =
6 Command::new("rustc").stderr(Stdio::inherit()).args(&["-V"]).output().unwrap().stdout;
7 String::from_utf8(version_info).unwrap()
8}
9
10pub(crate) fn get_host_triple() -> String {
11 let version_info =
12 Command::new("rustc").stderr(Stdio::inherit()).args(&["-vV"]).output().unwrap().stdout;
13 String::from_utf8(version_info)
14 .unwrap()
15 .lines()
16 .to_owned()
17 .find(|line| line.starts_with("host"))
18 .unwrap()
19 .split(":")
20 .nth(1)
21 .unwrap()
22 .trim()
23 .to_owned()
24}
25
26pub(crate) fn get_rustc_path() -> PathBuf {
27 let rustc_path = Command::new("rustup")
28 .stderr(Stdio::inherit())
29 .args(&["which", "rustc"])
30 .output()
31 .unwrap()
32 .stdout;
33 Path::new(String::from_utf8(rustc_path).unwrap().trim()).to_owned()
34}
35
36pub(crate) fn get_default_sysroot() -> PathBuf {
37 let default_sysroot = Command::new("rustc")
38 .stderr(Stdio::inherit())
39 .args(&["--print", "sysroot"])
40 .output()
41 .unwrap()
42 .stdout;
43 Path::new(String::from_utf8(default_sysroot).unwrap().trim()).to_owned()
44}
45
46pub(crate) fn get_file_name(crate_name: &str, crate_type: &str) -> String {
47 let file_name = Command::new("rustc")
48 .stderr(Stdio::inherit())
49 .args(&[
50 "--crate-name",
51 crate_name,
52 "--crate-type",
53 crate_type,
54 "--print",
55 "file-names",
56 "-",
57 ])
58 .output()
59 .unwrap()
60 .stdout;
61 let file_name = String::from_utf8(file_name).unwrap().trim().to_owned();
62 assert!(!file_name.contains('\n'));
63 assert!(file_name.contains(crate_name));
64 file_name
65}
f2b60f7d
FG
66
67/// Similar to `get_file_name`, but converts any dashes (`-`) in the `crate_name` to
2b03887a 68/// underscores (`_`). This is specially made for the rustc and cargo wrappers
f2b60f7d
FG
69/// which have a dash in the name, and that is not allowed in a crate name.
70pub(crate) fn get_wrapper_file_name(crate_name: &str, crate_type: &str) -> String {
71 let crate_name = crate_name.replace('-', "_");
72 let wrapper_name = get_file_name(&crate_name, crate_type);
73 wrapper_name.replace('_', "-")
74}