mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
add unstable -Zroot-path flag to configure the path from which rustc should be invoked
This commit is contained in:
parent
573ff00fe6
commit
c2be327042
@ -121,6 +121,7 @@
|
|||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fmt::{self, Write};
|
use std::fmt::{self, Write};
|
||||||
|
use std::path::PathBuf;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use anyhow::{bail, Error};
|
use anyhow::{bail, Error};
|
||||||
@ -783,6 +784,7 @@ unstable_cli_options!(
|
|||||||
profile_rustflags: bool = ("Enable the `rustflags` option in profiles in .cargo/config.toml file"),
|
profile_rustflags: bool = ("Enable the `rustflags` option in profiles in .cargo/config.toml file"),
|
||||||
public_dependency: bool = ("Respect a dependency's `public` field in Cargo.toml to control public/private dependencies"),
|
public_dependency: bool = ("Respect a dependency's `public` field in Cargo.toml to control public/private dependencies"),
|
||||||
publish_timeout: bool = ("Enable the `publish.timeout` key in .cargo/config.toml file"),
|
publish_timeout: bool = ("Enable the `publish.timeout` key in .cargo/config.toml file"),
|
||||||
|
root_dir: Option<PathBuf> = ("Set the root directory relative to which paths are printed (defaults to workspace root)"),
|
||||||
rustdoc_map: bool = ("Allow passing external documentation mappings to rustdoc"),
|
rustdoc_map: bool = ("Allow passing external documentation mappings to rustdoc"),
|
||||||
rustdoc_scrape_examples: bool = ("Allows Rustdoc to scrape code examples from reverse-dependencies"),
|
rustdoc_scrape_examples: bool = ("Allows Rustdoc to scrape code examples from reverse-dependencies"),
|
||||||
script: bool = ("Enable support for single-file, `.rs` packages"),
|
script: bool = ("Enable support for single-file, `.rs` packages"),
|
||||||
@ -1287,6 +1289,7 @@ impl CliUnstable {
|
|||||||
"profile-rustflags" => self.profile_rustflags = parse_empty(k, v)?,
|
"profile-rustflags" => self.profile_rustflags = parse_empty(k, v)?,
|
||||||
"trim-paths" => self.trim_paths = parse_empty(k, v)?,
|
"trim-paths" => self.trim_paths = parse_empty(k, v)?,
|
||||||
"publish-timeout" => self.publish_timeout = parse_empty(k, v)?,
|
"publish-timeout" => self.publish_timeout = parse_empty(k, v)?,
|
||||||
|
"root-dir" => self.root_dir = v.map(|v| v.into()),
|
||||||
"rustdoc-map" => self.rustdoc_map = parse_empty(k, v)?,
|
"rustdoc-map" => self.rustdoc_map = parse_empty(k, v)?,
|
||||||
"rustdoc-scrape-examples" => self.rustdoc_scrape_examples = parse_empty(k, v)?,
|
"rustdoc-scrape-examples" => self.rustdoc_scrape_examples = parse_empty(k, v)?,
|
||||||
"separate-nightlies" => self.separate_nightlies = parse_empty(k, v)?,
|
"separate-nightlies" => self.separate_nightlies = parse_empty(k, v)?,
|
||||||
|
@ -4,6 +4,7 @@ use crate::core::{Target, Workspace};
|
|||||||
use crate::ops::CompileOptions;
|
use crate::ops::CompileOptions;
|
||||||
use crate::util::CargoResult;
|
use crate::util::CargoResult;
|
||||||
use anyhow::bail;
|
use anyhow::bail;
|
||||||
|
use cargo_util::paths::normalize_path;
|
||||||
use cargo_util::ProcessBuilder;
|
use cargo_util::ProcessBuilder;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
@ -109,15 +110,20 @@ pub fn print_available_tests(ws: &Workspace<'_>, options: &CompileOptions) -> Ca
|
|||||||
/// The first returned value here is the argument to pass to rustc, and the
|
/// The first returned value here is the argument to pass to rustc, and the
|
||||||
/// second is the cwd that rustc should operate in.
|
/// second is the cwd that rustc should operate in.
|
||||||
pub fn path_args(ws: &Workspace<'_>, unit: &Unit) -> (PathBuf, PathBuf) {
|
pub fn path_args(ws: &Workspace<'_>, unit: &Unit) -> (PathBuf, PathBuf) {
|
||||||
let ws_root = ws.root();
|
|
||||||
let src = match unit.target.src_path() {
|
let src = match unit.target.src_path() {
|
||||||
TargetSourcePath::Path(path) => path.to_path_buf(),
|
TargetSourcePath::Path(path) => path.to_path_buf(),
|
||||||
TargetSourcePath::Metabuild => unit.pkg.manifest().metabuild_path(ws.target_dir()),
|
TargetSourcePath::Metabuild => unit.pkg.manifest().metabuild_path(ws.target_dir()),
|
||||||
};
|
};
|
||||||
assert!(src.is_absolute());
|
assert!(src.is_absolute());
|
||||||
if unit.pkg.package_id().source_id().is_path() {
|
if unit.pkg.package_id().source_id().is_path() {
|
||||||
if let Ok(path) = src.strip_prefix(ws_root) {
|
// Determine which path we make this relative to: usually it's the workspace root,
|
||||||
return (path.to_path_buf(), ws_root.to_path_buf());
|
// but this can be overwritten with a `-Z` flag.
|
||||||
|
let root = match &ws.gctx().cli_unstable().root_dir {
|
||||||
|
None => ws.root().to_owned(),
|
||||||
|
Some(root_dir) => normalize_path(&ws.gctx().cwd().join(root_dir)),
|
||||||
|
};
|
||||||
|
if let Ok(path) = src.strip_prefix(&root) {
|
||||||
|
return (path.to_path_buf(), root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(src, unit.pkg.root().to_path_buf())
|
(src, unit.pkg.root().to_path_buf())
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<svg width="1230px" height="740px" xmlns="http://www.w3.org/2000/svg">
|
<svg width="1230px" height="758px" xmlns="http://www.w3.org/2000/svg">
|
||||||
<style>
|
<style>
|
||||||
.fg { fill: #AAAAAA }
|
.fg { fill: #AAAAAA }
|
||||||
.bg { background: #000000 }
|
.bg { background: #000000 }
|
||||||
@ -74,27 +74,29 @@
|
|||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="532px"><tspan> -Z publish-timeout Enable the `publish.timeout` key in .cargo/config.toml file</tspan>
|
<tspan x="10px" y="532px"><tspan> -Z publish-timeout Enable the `publish.timeout` key in .cargo/config.toml file</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="550px"><tspan> -Z rustdoc-map Allow passing external documentation mappings to rustdoc</tspan>
|
<tspan x="10px" y="550px"><tspan> -Z root-dir Set the root directory relative to which paths are printed (defaults to workspace root)</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="568px"><tspan> -Z rustdoc-scrape-examples Allows Rustdoc to scrape code examples from reverse-dependencies</tspan>
|
<tspan x="10px" y="568px"><tspan> -Z rustdoc-map Allow passing external documentation mappings to rustdoc</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="586px"><tspan> -Z script Enable support for single-file, `.rs` packages</tspan>
|
<tspan x="10px" y="586px"><tspan> -Z rustdoc-scrape-examples Allows Rustdoc to scrape code examples from reverse-dependencies</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="604px"><tspan> -Z target-applies-to-host Enable the `target-applies-to-host` key in the .cargo/config.toml file</tspan>
|
<tspan x="10px" y="604px"><tspan> -Z script Enable support for single-file, `.rs` packages</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="622px"><tspan> -Z trim-paths Enable the `trim-paths` option in profiles</tspan>
|
<tspan x="10px" y="622px"><tspan> -Z target-applies-to-host Enable the `target-applies-to-host` key in the .cargo/config.toml file</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="640px"><tspan> -Z unstable-options Allow the usage of unstable options</tspan>
|
<tspan x="10px" y="640px"><tspan> -Z trim-paths Enable the `trim-paths` option in profiles</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="658px">
|
<tspan x="10px" y="658px"><tspan> -Z unstable-options Allow the usage of unstable options</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="676px"><tspan>Run with `cargo -Z [FLAG] [COMMAND]`</tspan>
|
<tspan x="10px" y="676px">
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="694px">
|
<tspan x="10px" y="694px"><tspan>Run with `cargo -Z [FLAG] [COMMAND]`</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="712px"><tspan>See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html for more information about these flags.</tspan>
|
<tspan x="10px" y="712px">
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="730px">
|
<tspan x="10px" y="730px"><tspan>See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html for more information about these flags.</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="748px">
|
||||||
</tspan>
|
</tspan>
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.9 KiB |
@ -802,13 +802,17 @@ fn root_dir_diagnostics() {
|
|||||||
.file("ws_root/src/lib.rs", "invalid;")
|
.file("ws_root/src/lib.rs", "invalid;")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
// Crucially, the rustc error message below says `ws_root/...`, i.e.
|
||||||
|
// it is relative to our fake home, not to the workspace root.
|
||||||
p.cargo("check")
|
p.cargo("check")
|
||||||
|
.arg("-Zroot-dir=.")
|
||||||
.arg("--manifest-path=ws_root/Cargo.toml")
|
.arg("--manifest-path=ws_root/Cargo.toml")
|
||||||
|
.masquerade_as_nightly_cargo(&["-Zroot-dir"])
|
||||||
.with_status(101)
|
.with_status(101)
|
||||||
.with_stderr_data(str![[r#"
|
.with_stderr_data(str![[r#"
|
||||||
[CHECKING] foo v0.1.0 ([ROOT]/ws_root)
|
[CHECKING] foo v0.1.0 ([ROOT]/ws_root)
|
||||||
[ERROR] [..]
|
[ERROR] [..]
|
||||||
--> src/lib.rs:1:8
|
--> ws_root/src/lib.rs:1:8
|
||||||
|
|
|
|
||||||
1 | invalid;
|
1 | invalid;
|
||||||
| [..]
|
| [..]
|
||||||
@ -839,10 +843,23 @@ fn root_dir_file_macro() {
|
|||||||
)
|
)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
// Crucially, the path is relative to our fake home, not to the workspace root.
|
||||||
p.cargo("run")
|
p.cargo("run")
|
||||||
|
.arg("-Zroot-dir=.")
|
||||||
.arg("--manifest-path=ws_root/Cargo.toml")
|
.arg("--manifest-path=ws_root/Cargo.toml")
|
||||||
|
.masquerade_as_nightly_cargo(&["-Zroot-dir"])
|
||||||
.with_stdout_data(str![[r#"
|
.with_stdout_data(str![[r#"
|
||||||
src/main.rs
|
ws_root/src/main.rs
|
||||||
|
|
||||||
|
"#]])
|
||||||
|
.run();
|
||||||
|
// Try again with an absolute path for `root-dir`.
|
||||||
|
p.cargo("run")
|
||||||
|
.arg(format!("-Zroot-dir={}", p.root().display()))
|
||||||
|
.arg("--manifest-path=ws_root/Cargo.toml")
|
||||||
|
.masquerade_as_nightly_cargo(&["-Zroot-dir"])
|
||||||
|
.with_stdout_data(str![[r#"
|
||||||
|
ws_root/src/main.rs
|
||||||
|
|
||||||
"#]])
|
"#]])
|
||||||
.run();
|
.run();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user