mirror of
https://github.com/rust-lang/cargo
synced 2024-10-13 03:02:45 +00:00
fix: set OUT_DIR for all units with build scripts
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
This commit is contained in:
parent
8bba4f48c4
commit
6739c7e95e
|
@ -12,6 +12,7 @@ use crate::util::errors::CargoResult;
|
|||
use crate::util::profile;
|
||||
use anyhow::{bail, Context as _};
|
||||
use filetime::FileTime;
|
||||
use itertools::Itertools;
|
||||
use jobserver::Client;
|
||||
|
||||
use super::build_plan::BuildPlan;
|
||||
|
@ -185,6 +186,32 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
|
|||
plan.output_plan(self.bcx.config);
|
||||
}
|
||||
|
||||
// Add `OUT_DIR` to env vars if unit has a build script.
|
||||
let units_with_build_script = &self
|
||||
.bcx
|
||||
.roots
|
||||
.iter()
|
||||
.filter(|unit| self.build_scripts.contains_key(unit))
|
||||
.dedup_by(|x, y| x.pkg.package_id() == y.pkg.package_id())
|
||||
.collect::<Vec<_>>();
|
||||
for unit in units_with_build_script {
|
||||
for dep in &self.bcx.unit_graph[unit] {
|
||||
if dep.unit.mode.is_run_custom_build() {
|
||||
let out_dir = self
|
||||
.files()
|
||||
.build_script_out_dir(&dep.unit)
|
||||
.display()
|
||||
.to_string();
|
||||
let script_meta = self.get_run_build_script_metadata(&dep.unit);
|
||||
self.compilation
|
||||
.extra_env
|
||||
.entry(script_meta)
|
||||
.or_insert_with(Vec::new)
|
||||
.push(("OUT_DIR".to_string(), out_dir));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Collect the result of the build into `self.compilation`.
|
||||
for unit in &self.bcx.roots {
|
||||
// Collect tests and executables.
|
||||
|
@ -213,26 +240,6 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
|
|||
}
|
||||
}
|
||||
|
||||
// If the unit has a build script, add `OUT_DIR` to the
|
||||
// environment variables.
|
||||
if unit.target.is_lib() {
|
||||
for dep in &self.bcx.unit_graph[unit] {
|
||||
if dep.unit.mode.is_run_custom_build() {
|
||||
let out_dir = self
|
||||
.files()
|
||||
.build_script_out_dir(&dep.unit)
|
||||
.display()
|
||||
.to_string();
|
||||
let script_meta = self.get_run_build_script_metadata(&dep.unit);
|
||||
self.compilation
|
||||
.extra_env
|
||||
.entry(script_meta)
|
||||
.or_insert_with(Vec::new)
|
||||
.push(("OUT_DIR".to_string(), out_dir));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Collect information for `rustdoc --test`.
|
||||
if unit.mode.is_doc_test() {
|
||||
let mut unstable_opts = false;
|
||||
|
|
|
@ -4941,7 +4941,5 @@ fn cargo_test_set_out_dir_env_var() {
|
|||
|
||||
p.cargo("test").run();
|
||||
p.cargo("test --package foo --test case -- tests::test_add --exact --nocapture")
|
||||
.with_stdout_contains("test tests::test_add ... FAILED")
|
||||
.with_status(101)
|
||||
.run();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue