/compiler/rustc_codegen_cranelift/build_system/rustc_info.rs

https://gitlab.com/rust-lang/rust · Rust · 65 lines · 60 code · 5 blank · 0 comment · 0 complexity · 082b56143c87aeaecd852794ab5a2238 MD5 · raw file

  1. use std::path::{Path, PathBuf};
  2. use std::process::{Command, Stdio};
  3. pub(crate) fn get_rustc_version() -> String {
  4. let version_info =
  5. Command::new("rustc").stderr(Stdio::inherit()).args(&["-V"]).output().unwrap().stdout;
  6. String::from_utf8(version_info).unwrap()
  7. }
  8. pub(crate) fn get_host_triple() -> String {
  9. let version_info =
  10. Command::new("rustc").stderr(Stdio::inherit()).args(&["-vV"]).output().unwrap().stdout;
  11. String::from_utf8(version_info)
  12. .unwrap()
  13. .lines()
  14. .to_owned()
  15. .find(|line| line.starts_with("host"))
  16. .unwrap()
  17. .split(":")
  18. .nth(1)
  19. .unwrap()
  20. .trim()
  21. .to_owned()
  22. }
  23. pub(crate) fn get_rustc_path() -> PathBuf {
  24. let rustc_path = Command::new("rustup")
  25. .stderr(Stdio::inherit())
  26. .args(&["which", "rustc"])
  27. .output()
  28. .unwrap()
  29. .stdout;
  30. Path::new(String::from_utf8(rustc_path).unwrap().trim()).to_owned()
  31. }
  32. pub(crate) fn get_default_sysroot() -> PathBuf {
  33. let default_sysroot = Command::new("rustc")
  34. .stderr(Stdio::inherit())
  35. .args(&["--print", "sysroot"])
  36. .output()
  37. .unwrap()
  38. .stdout;
  39. Path::new(String::from_utf8(default_sysroot).unwrap().trim()).to_owned()
  40. }
  41. pub(crate) fn get_file_name(crate_name: &str, crate_type: &str) -> String {
  42. let file_name = Command::new("rustc")
  43. .stderr(Stdio::inherit())
  44. .args(&[
  45. "--crate-name",
  46. crate_name,
  47. "--crate-type",
  48. crate_type,
  49. "--print",
  50. "file-names",
  51. "-",
  52. ])
  53. .output()
  54. .unwrap()
  55. .stdout;
  56. let file_name = String::from_utf8(file_name).unwrap().trim().to_owned();
  57. assert!(!file_name.contains('\n'));
  58. assert!(file_name.contains(crate_name));
  59. file_name
  60. }