about summary refs log tree commit diff
diff options
context:
space:
mode:
authorjyn <github@jyn.dev>2023-04-18 23:04:56 -0500
committerjyn <github@jyn.dev>2023-04-18 23:08:48 -0500
commitabf9cbcb69e485b56776112bc587f6166e7ac5c9 (patch)
tree33b3197b54697a4bc3441718e3fcf5d8d666f998
parentb3f13795093c3c6473fb88910947bf6a35bedb26 (diff)
downloadrust-abf9cbcb69e485b56776112bc587f6166e7ac5c9.tar.gz
rust-abf9cbcb69e485b56776112bc587f6166e7ac5c9.zip
Fix `x test lint-docs` when download-rustc is enabled
Bootstrap was setting LD_LIBRARY_PATH for bootstrap tools in `tool_cmd`,
and rustc inherited that environment. That broke when download-rustc was
enabled; see the new comment for details.
-rw-r--r--src/tools/lint-docs/src/groups.rs3
-rw-r--r--src/tools/lint-docs/src/lib.rs9
2 files changed, 11 insertions, 1 deletions
diff --git a/src/tools/lint-docs/src/groups.rs b/src/tools/lint-docs/src/groups.rs
index 2a923a61b0a..b11fb287cf4 100644
--- a/src/tools/lint-docs/src/groups.rs
+++ b/src/tools/lint-docs/src/groups.rs
@@ -39,11 +39,12 @@ impl<'a> LintExtractor<'a> {
     fn collect_groups(&self) -> Result<LintGroups, Box<dyn Error>> {
         let mut result = BTreeMap::new();
         let mut cmd = Command::new(self.rustc_path);
+        cmd.env_remove("LD_LIBRARY_PATH");
         cmd.arg("-Whelp");
         let output = cmd.output().map_err(|e| format!("failed to run command {:?}\n{}", cmd, e))?;
         if !output.status.success() {
             return Err(format!(
-                "failed to collect lint info: {:?}\n--- stderr\n{}--- stdout\n{}\n",
+                "failed to collect lint info: failed to run {cmd:?}: {:?}\n--- stderr\n{}--- stdout\n{}\n",
                 output.status,
                 std::str::from_utf8(&output.stderr).unwrap(),
                 std::str::from_utf8(&output.stdout).unwrap(),
diff --git a/src/tools/lint-docs/src/lib.rs b/src/tools/lint-docs/src/lib.rs
index 034c6aa0708..fe29b9abda3 100644
--- a/src/tools/lint-docs/src/lib.rs
+++ b/src/tools/lint-docs/src/lib.rs
@@ -403,6 +403,12 @@ impl<'a> LintExtractor<'a> {
         fs::write(&tempfile, source)
             .map_err(|e| format!("failed to write {}: {}", tempfile.display(), e))?;
         let mut cmd = Command::new(self.rustc_path);
+        // NOTE: bootstrap sets `LD_LIBRARY_PATH` for building lint-docs itself.
+        // Unfortunately, lint-docs is a bootstrap tool while rustc is built from source,
+        // and sometimes the paths conflict. In particular, when using `download-rustc`,
+        // the LLVM versions can differ between `ci-llvm` and `ci-rustc-sysroot`.
+        // Unset LD_LIBRARY_PATH here so it doesn't interfere with running the compiler.
+        cmd.env_remove("LD_LIBRARY_PATH");
         if options.contains(&"edition2015") {
             cmd.arg("--edition=2015");
         } else {
@@ -415,6 +421,9 @@ impl<'a> LintExtractor<'a> {
         }
         cmd.arg("lint_example.rs");
         cmd.current_dir(tempdir.path());
+        if self.verbose {
+            eprintln!("running: {cmd:?}");
+        }
         let output = cmd.output().map_err(|e| format!("failed to run command {:?}\n{}", cmd, e))?;
         let stderr = std::str::from_utf8(&output.stderr).unwrap();
         let msgs = stderr