Skip to content

Commit 2b610dc

Browse files
committed
Add environment variables for accessing the OUT_DIR
1 parent d3edfd7 commit 2b610dc

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

src/cargo/core/compiler/mod.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1704,12 +1704,22 @@ fn build_deps_args(
17041704

17051705
let mut unstable_opts = false;
17061706

1707+
// Add `OUT_DIR` environment variables for build scripts
1708+
let first_custom_build_dep = deps.iter().find(|dep| dep.unit.mode.is_run_custom_build());
1709+
if let Some(dep) = first_custom_build_dep {
1710+
let out_dir = &build_runner.files().build_script_out_dir(&dep.unit);
1711+
cmd.env("OUT_DIR", &out_dir);
1712+
}
1713+
17071714
for dep in deps {
17081715
if dep.unit.mode.is_run_custom_build() {
1709-
cmd.env(
1710-
"OUT_DIR",
1711-
&build_runner.files().build_script_out_dir(&dep.unit),
1712-
);
1716+
let out_dir = &build_runner.files().build_script_out_dir(&dep.unit);
1717+
let target_name = dep.unit.target.name();
1718+
let out_dir_prefix = target_name
1719+
.strip_prefix("build-script-")
1720+
.unwrap_or(target_name);
1721+
let out_dir_name = format!("{out_dir_prefix}_OUT_DIR");
1722+
cmd.env(&out_dir_name, &out_dir);
17131723
}
17141724
}
17151725

tests/testsuite/build_scripts_multiple.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ fn build_script_with_conflicting_out_dirs() {
549549
build = ["build1.rs", "build2.rs"]
550550
"#,
551551
)
552-
// OUT_DIR is set to the lexicographically largest build script's OUT_DIR by default
552+
// By default, OUT_DIR is set to that of the first build script in the array
553553
.file(
554554
"src/main.rs",
555555
r#"
@@ -603,7 +603,7 @@ fn build_script_with_conflicting_out_dirs() {
603603
.masquerade_as_nightly_cargo(&["multiple-build-scripts"])
604604
.with_status(0)
605605
.with_stdout_data(str![[r#"
606-
Hello, from Build Script 2!
606+
Hello, from Build Script 1!
607607
608608
"#]])
609609
.run();
@@ -628,7 +628,7 @@ fn build_script_with_conflicts_reverse_sorted() {
628628
build = ["build2.rs", "build1.rs"]
629629
"#,
630630
)
631-
// OUT_DIR is set to the lexicographically largest build script's OUT_DIR by default
631+
// By default, OUT_DIR is set to that of the first build script in the array
632632
.file(
633633
"src/main.rs",
634634
r#"
@@ -682,7 +682,7 @@ fn build_script_with_conflicts_reverse_sorted() {
682682
.masquerade_as_nightly_cargo(&["multiple-build-scripts"])
683683
.with_status(0)
684684
.with_stdout_data(str![[r#"
685-
Hello, from Build Script 1!
685+
Hello, from Build Script 2!
686686
687687
"#]])
688688
.run();
@@ -785,9 +785,11 @@ fn multiple_out_dirs() {
785785
.file(
786786
"src/main.rs",
787787
r#"
788-
include!(concat!(env!("OUT_DIR"), "/foo.rs"));
788+
include!(concat!(env!("build1_OUT_DIR"), "/foo.rs"));
789+
include!(concat!(env!("build2_OUT_DIR"), "/foo.rs"));
789790
fn main() {
790-
println!("{}", message());
791+
println!("{}", message1());
792+
println!("{}", message2());
791793
}
792794
"#,
793795
)
@@ -803,7 +805,7 @@ fn multiple_out_dirs() {
803805
let dest_path = Path::new(&out_dir).join("foo.rs");
804806
fs::write(
805807
&dest_path,
806-
"pub fn message() -> &'static str {
808+
"pub fn message1() -> &'static str {
807809
\"Hello, from Build Script 1!\"
808810
}
809811
"
@@ -822,7 +824,7 @@ fn multiple_out_dirs() {
822824
let dest_path = Path::new(&out_dir).join("foo.rs");
823825
fs::write(
824826
&dest_path,
825-
"pub fn message() -> &'static str {
827+
"pub fn message2() -> &'static str {
826828
\"Hello, from Build Script 2!\"
827829
}
828830
"
@@ -835,6 +837,7 @@ fn multiple_out_dirs() {
835837
.masquerade_as_nightly_cargo(&["multiple-build-scripts"])
836838
.with_status(0)
837839
.with_stdout_data(str![[r#"
840+
Hello, from Build Script 1!
838841
Hello, from Build Script 2!
839842
840843
"#]])

0 commit comments

Comments
 (0)