]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_codegen_cranelift/build_system/config.rs
Rollup merge of #103124 - ldm0:nohard_tests, r=Mark-Simulacrum
[rust.git] / compiler / rustc_codegen_cranelift / build_system / config.rs
1 use std::fs;
2 use std::process;
3
4 fn load_config_file() -> Vec<(String, Option<String>)> {
5     fs::read_to_string("config.txt")
6         .unwrap()
7         .lines()
8         .map(|line| if let Some((line, _comment)) = line.split_once('#') { line } else { line })
9         .map(|line| line.trim())
10         .filter(|line| !line.is_empty())
11         .map(|line| {
12             if let Some((key, val)) = line.split_once('=') {
13                 (key.trim().to_owned(), Some(val.trim().to_owned()))
14             } else {
15                 (line.to_owned(), None)
16             }
17         })
18         .collect()
19 }
20
21 pub(crate) fn get_bool(name: &str) -> bool {
22     let values = load_config_file()
23         .into_iter()
24         .filter(|(key, _)| key == name)
25         .map(|(_, val)| val)
26         .collect::<Vec<_>>();
27     if values.is_empty() {
28         false
29     } else {
30         if values.iter().any(|val| val.is_some()) {
31             eprintln!("Boolean config `{}` has a value", name);
32             process::exit(1);
33         }
34         true
35     }
36 }
37
38 pub(crate) fn get_value(name: &str) -> Option<String> {
39     let values = load_config_file()
40         .into_iter()
41         .filter(|(key, _)| key == name)
42         .map(|(_, val)| val)
43         .collect::<Vec<_>>();
44     if values.is_empty() {
45         None
46     } else if values.len() == 1 {
47         if values[0].is_none() {
48             eprintln!("Config `{}` missing value", name);
49             process::exit(1);
50         }
51         values.into_iter().next().unwrap()
52     } else {
53         eprintln!("Config `{}` given multiple values: {:?}", name, values);
54         process::exit(1);
55     }
56 }