Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 2 commits into from
Oct 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/cargo/core/compiler/custom_build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,10 @@ fn build_work(cx: &mut Context<'_, '_>, unit: &Unit) -> CargoResult<Job> {
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
// last piece of statically known information that we have.
for feat in &unit.features {
Expand Down
1 change: 1 addition & 0 deletions src/cargo/core/profiles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,7 @@ impl Profiles {
result.root = for_unit_profile.root;
result.debuginfo = for_unit_profile.debuginfo;
result.opt_level = for_unit_profile.opt_level;
result.trim_paths = for_unit_profile.trim_paths.clone();
result
}

Expand Down
17 changes: 15 additions & 2 deletions src/doc/src/reference/unstable.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ For the latest nightly, see the [nightly version] of this page.
* [per-package-target](#per-package-target) --- Sets the `--target` to use for each individual package.
* [artifact dependencies](#artifact-dependencies) --- Allow build artifacts to be included into other build artifacts and build them for different targets.
* [Edition 2024](#edition-2024) — Adds support for the 2024 Edition.
* [Profile `trim-paths` option](#profile-trim-paths-option) --- Control the sanitisation of file paths in build outputs.
* [Profile `trim-paths` option](#profile-trim-paths-option) --- Control the sanitization of file paths in build outputs.
* Information and metadata
* [Build-plan](#build-plan) --- Emits JSON information on which commands will be run.
* [unit-graph](#unit-graph) --- Emits JSON for Cargo's internal graph structure.
Expand Down Expand Up @@ -1292,7 +1292,7 @@ edition that may break your build.
* Tracking Issue: [rust-lang/cargo#12137](https://github.com/rust-lang/cargo/issues/12137)
* Tracking Rustc Issue: [rust-lang/rust#111540](https://github.com/rust-lang/rust/issues/111540)

This adds a new profile setting to control how paths are sanitised in the resulting binary.
This adds a new profile setting to control how paths are sanitized in the resulting binary.
This can be enabled like so:

```toml
Expand Down Expand Up @@ -1370,6 +1370,19 @@ Paths to all other source files will not be affected.

This will not affect any hard-coded paths in the source code, such as in strings.

#### Environment variable

*as a new entry of ["Environment variables Cargo sets for build scripts"](./environment-variables.md#environment-variables-cargo-sets-for-crates)*

* `CARGO_TRIM_PATHS` --- The value of `trim-paths` profile option.
`false`, `"none"`, and empty arrays would be converted to `none`.
`true` and `"all"` become `all`.
Values in a non-empty array would be joined into a comma-separated list.
If the build script introduces absolute paths to built artifacts (such as by invoking a compiler),
the user may request them to be sanitized in different types of artifacts.
Common paths requiring sanitization include `OUT_DIR` and `CARGO_MANIFEST_DIR`,
plus any other introduced by the build script, such as include directories.

# Stabilized and removed features

## Compile progress
Expand Down
66 changes: 66 additions & 0 deletions tests/testsuite/profile_trim_paths.rs
Original file line number Diff line number Diff line change
Expand Up @@ -511,3 +511,69 @@ fn object_works() {
assert!(memchr::memmem::find(&stdout, registry_src_bytes).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();
}
}