summaryrefslogtreecommitdiffstats
path: root/debian/patches/u-fix-get-toml-when-test.patch
blob: a9dd0fee0ab564b3dabbadb4dd7d90a5eb2ff9f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Description: Fix get_toml() when cfg(test)
 When cfg(test), Config::parse doesn't parse a config.toml but uses default
 values, failing when the initial rustc is needed. This is a workaround before
 upstream issue gets solved.
Bug: https://github.com/rust-lang/rust/issues/105766
Last-Update: 2023-03-29
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -907,9 +907,9 @@
 
         config.stage0_metadata = t!(serde_json::from_slice::<Stage0Metadata>(&stage0_json));
 
-        #[cfg(test)]
+        /*#[cfg(test)]
         let get_toml = |_| TomlConfig::default();
-        #[cfg(not(test))]
+        #[cfg(not(test))]*/
         let get_toml = |file: &Path| {
             let contents =
                 t!(fs::read_to_string(file), format!("config file {} not found", file.display()));
@@ -907,7 +907,22 @@
             match toml::from_str(&contents)
                 .and_then(|table: toml::Value| TomlConfig::deserialize(table))
             {
-                Ok(table) => table,
+                /// Debian: We use previous version as a custom rustc, which unfortunately won't be
+                /// picked up because config.toml isn't read when cfg!(test). Making tests use the
+                /// entirety of our config.toml isn't feasible either as it panicks on GitRepo::Llvm
+                /// (d-bootstrap-custom-debuginfo-path.patch), so only give paths of initial rustc
+                /// and cargo.
+                Ok(table) => if !cfg!(test) || table.build.is_none() {
+                    table
+                } else {
+                    let mut config = TomlConfig::default();
+                    let mut build = Build::default();
+                    let cbuild = table.build.unwrap();
+                    build.rustc = cbuild.rustc;
+                    build.cargo = cbuild.cargo;
+                    config.build = Some(build);
+                    config
+                },
                 Err(err) => {
                     eprintln!("failed to parse TOML configuration '{}': {}", file.display(), err);
                     crate::detail_exit(2);