feat(trim-paths): set env CARGO_TRIM_PATHS for build scripts

This commit is contained in:
Weihang Lo 2023-10-31 00:42:37 -04:00
parent 4aee12c1f8
commit dd0aea350c
No known key found for this signature in database
GPG Key ID: D7DBF189825E82E7
3 changed files with 71 additions and 0 deletions

View File

@ -307,6 +307,10 @@ fn build_work(cx: &mut Context<'_, '_>, unit: &Unit) -> CargoResult<Job> {
cmd.env("CARGO_MANIFEST_LINKS", links); cmd.env("CARGO_MANIFEST_LINKS", links);
} }
if let Some(trim_paths) = unit.profile.trim_paths.as_ref() {
cmd.env("CARGO_TRIM_PATHS", trim_paths.to_string());
}
// Be sure to pass along all enabled features for this package, this is the // Be sure to pass along all enabled features for this package, this is the
// last piece of statically known information that we have. // last piece of statically known information that we have.
for feat in &unit.features { for feat in &unit.features {

View File

@ -327,6 +327,7 @@ impl Profiles {
result.root = for_unit_profile.root; result.root = for_unit_profile.root;
result.debuginfo = for_unit_profile.debuginfo; result.debuginfo = for_unit_profile.debuginfo;
result.opt_level = for_unit_profile.opt_level; result.opt_level = for_unit_profile.opt_level;
result.trim_paths = for_unit_profile.trim_paths.clone();
result result
} }

View File

@ -511,3 +511,69 @@ fn object_works() {
assert!(memchr::memmem::find(&stdout, registry_src_bytes).is_none()); assert!(memchr::memmem::find(&stdout, registry_src_bytes).is_none());
assert!(memchr::memmem::find(&stdout, pkg_root).is_none()); assert!(memchr::memmem::find(&stdout, pkg_root).is_none());
} }
// TODO: might want to move to test/testsuite/build_script.rs once stabilized.
#[cargo_test(nightly, reason = "-Zremap-path-scope is unstable")]
fn custom_build_env_var_trim_paths() {
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
"#,
)
.file("src/lib.rs", "")
.file("build.rs", "")
.build();
let test_cases = [
("[]", "none"),
("\"all\"", "all"),
("\"diagnostics\"", "diagnostics"),
("\"macro\"", "macro"),
("\"none\"", "none"),
("\"object\"", "object"),
("false", "none"),
("true", "all"),
(
r#"["diagnostics", "macro", "object"]"#,
"diagnostics,macro,object",
),
];
for (opts, expected) in test_cases {
p.change_file(
"Cargo.toml",
&format!(
r#"
[package]
name = "foo"
version = "0.0.1"
[profile.dev]
trim-paths = {opts}
"#
),
);
p.change_file(
"build.rs",
&format!(
r#"
fn main() {{
assert_eq!(
std::env::var("CARGO_TRIM_PATHS").unwrap().as_str(),
"{expected}",
);
}}
"#
),
);
p.cargo("build -Ztrim-paths")
.masquerade_as_nightly_cargo(&["-Ztrim-paths"])
.run();
}
}