mirror of
https://github.com/rust-lang/cargo
synced 2024-10-12 02:32:20 +00:00
89f43938fe
This change ensures cargo will output file paths in the expected format (C:\foo\... on Windows, /foo/... elsewhere). Previously it would output file:// URLs instead. To support this change, additional changes were made to the test suite string processing such that [ROOT] is now replaced with the appropriate file path root for the platform. The CWD template was also updated to use [CWD] like other replacement templates and to do the replacement on the expected value rather than the actual value to avoid replacing things we don't expect with CWD.
359 lines
8.1 KiB
Rust
359 lines
8.1 KiB
Rust
use std::env;
|
|
|
|
use support::is_nightly;
|
|
use support::project;
|
|
|
|
#[test]
|
|
fn profile_overrides() {
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
|
|
name = "test"
|
|
version = "0.0.0"
|
|
authors = []
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
debug = false
|
|
rpath = true
|
|
"#,
|
|
).file("src/lib.rs", "")
|
|
.build();
|
|
p.cargo("build -v")
|
|
.with_stderr(
|
|
"\
|
|
[COMPILING] test v0.0.0 ([CWD])
|
|
[RUNNING] `rustc --crate-name test src/lib.rs --crate-type lib \
|
|
--emit=dep-info,link \
|
|
-C opt-level=1 \
|
|
-C debug-assertions=on \
|
|
-C metadata=[..] \
|
|
-C rpath \
|
|
--out-dir [..] \
|
|
-L dependency=[CWD]/target/debug/deps`
|
|
[FINISHED] dev [optimized] target(s) in [..]
|
|
",
|
|
).run();
|
|
}
|
|
|
|
#[test]
|
|
fn opt_level_override_0() {
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
|
|
name = "test"
|
|
version = "0.0.0"
|
|
authors = []
|
|
|
|
[profile.dev]
|
|
opt-level = 0
|
|
"#,
|
|
).file("src/lib.rs", "")
|
|
.build();
|
|
p.cargo("build -v")
|
|
.with_stderr(
|
|
"\
|
|
[COMPILING] test v0.0.0 ([CWD])
|
|
[RUNNING] `rustc --crate-name test src/lib.rs --crate-type lib \
|
|
--emit=dep-info,link \
|
|
-C debuginfo=2 \
|
|
-C metadata=[..] \
|
|
--out-dir [..] \
|
|
-L dependency=[CWD]/target/debug/deps`
|
|
[FINISHED] [..] target(s) in [..]
|
|
",
|
|
).run();
|
|
}
|
|
|
|
#[test]
|
|
fn debug_override_1() {
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "test"
|
|
version = "0.0.0"
|
|
authors = []
|
|
|
|
[profile.dev]
|
|
debug = 1
|
|
"#,
|
|
).file("src/lib.rs", "")
|
|
.build();
|
|
p.cargo("build -v")
|
|
.with_stderr(
|
|
"\
|
|
[COMPILING] test v0.0.0 ([CWD])
|
|
[RUNNING] `rustc --crate-name test src/lib.rs --crate-type lib \
|
|
--emit=dep-info,link \
|
|
-C debuginfo=1 \
|
|
-C metadata=[..] \
|
|
--out-dir [..] \
|
|
-L dependency=[CWD]/target/debug/deps`
|
|
[FINISHED] [..] target(s) in [..]
|
|
",
|
|
).run();
|
|
}
|
|
|
|
fn check_opt_level_override(profile_level: &str, rustc_level: &str) {
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
&format!(
|
|
r#"
|
|
[package]
|
|
|
|
name = "test"
|
|
version = "0.0.0"
|
|
authors = []
|
|
|
|
[profile.dev]
|
|
opt-level = {level}
|
|
"#,
|
|
level = profile_level
|
|
),
|
|
).file("src/lib.rs", "")
|
|
.build();
|
|
p.cargo("build -v")
|
|
.with_stderr(&format!(
|
|
"\
|
|
[COMPILING] test v0.0.0 ([CWD])
|
|
[RUNNING] `rustc --crate-name test src/lib.rs --crate-type lib \
|
|
--emit=dep-info,link \
|
|
-C opt-level={level} \
|
|
-C debuginfo=2 \
|
|
-C debug-assertions=on \
|
|
-C metadata=[..] \
|
|
--out-dir [..] \
|
|
-L dependency=[CWD]/target/debug/deps`
|
|
[FINISHED] [..] target(s) in [..]
|
|
",
|
|
level = rustc_level
|
|
)).run();
|
|
}
|
|
|
|
#[test]
|
|
fn opt_level_overrides() {
|
|
if !is_nightly() {
|
|
return;
|
|
}
|
|
|
|
for &(profile_level, rustc_level) in &[
|
|
("1", "1"),
|
|
("2", "2"),
|
|
("3", "3"),
|
|
("\"s\"", "s"),
|
|
("\"z\"", "z"),
|
|
] {
|
|
check_opt_level_override(profile_level, rustc_level)
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn top_level_overrides_deps() {
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
|
|
name = "test"
|
|
version = "0.0.0"
|
|
authors = []
|
|
|
|
[profile.release]
|
|
opt-level = 1
|
|
debug = true
|
|
|
|
[dependencies.foo]
|
|
path = "foo"
|
|
"#,
|
|
).file("src/lib.rs", "")
|
|
.file(
|
|
"foo/Cargo.toml",
|
|
r#"
|
|
[package]
|
|
|
|
name = "foo"
|
|
version = "0.0.0"
|
|
authors = []
|
|
|
|
[profile.release]
|
|
opt-level = 0
|
|
debug = false
|
|
|
|
[lib]
|
|
name = "foo"
|
|
crate_type = ["dylib", "rlib"]
|
|
"#,
|
|
).file("foo/src/lib.rs", "")
|
|
.build();
|
|
p.cargo("build -v --release")
|
|
.with_stderr(&format!(
|
|
"\
|
|
[COMPILING] foo v0.0.0 ([CWD]/foo)
|
|
[RUNNING] `rustc --crate-name foo foo/src/lib.rs \
|
|
--crate-type dylib --crate-type rlib \
|
|
--emit=dep-info,link \
|
|
-C prefer-dynamic \
|
|
-C opt-level=1 \
|
|
-C debuginfo=2 \
|
|
-C metadata=[..] \
|
|
--out-dir [CWD]/target/release/deps \
|
|
-L dependency=[CWD]/target/release/deps`
|
|
[COMPILING] test v0.0.0 ([CWD])
|
|
[RUNNING] `rustc --crate-name test src/lib.rs --crate-type lib \
|
|
--emit=dep-info,link \
|
|
-C opt-level=1 \
|
|
-C debuginfo=2 \
|
|
-C metadata=[..] \
|
|
--out-dir [..] \
|
|
-L dependency=[CWD]/target/release/deps \
|
|
--extern foo=[CWD]/target/release/deps/\
|
|
{prefix}foo[..]{suffix} \
|
|
--extern foo=[CWD]/target/release/deps/libfoo.rlib`
|
|
[FINISHED] release [optimized + debuginfo] target(s) in [..]
|
|
",
|
|
prefix = env::consts::DLL_PREFIX,
|
|
suffix = env::consts::DLL_SUFFIX
|
|
)).run();
|
|
}
|
|
|
|
#[test]
|
|
fn profile_in_non_root_manifest_triggers_a_warning() {
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[project]
|
|
name = "foo"
|
|
version = "0.1.0"
|
|
authors = []
|
|
|
|
[workspace]
|
|
members = ["bar"]
|
|
|
|
[profile.dev]
|
|
debug = false
|
|
"#,
|
|
).file("src/main.rs", "fn main() {}")
|
|
.file(
|
|
"bar/Cargo.toml",
|
|
r#"
|
|
[project]
|
|
name = "bar"
|
|
version = "0.1.0"
|
|
authors = []
|
|
workspace = ".."
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
"#,
|
|
).file("bar/src/main.rs", "fn main() {}")
|
|
.build();
|
|
|
|
p.cargo("build -v")
|
|
.cwd(p.root().join("bar"))
|
|
.with_stderr(
|
|
"\
|
|
[WARNING] profiles for the non root package will be ignored, specify profiles at the workspace root:
|
|
package: [..]
|
|
workspace: [..]
|
|
[COMPILING] bar v0.1.0 ([..])
|
|
[RUNNING] `rustc [..]`
|
|
[FINISHED] dev [unoptimized] target(s) in [..]",
|
|
).run();
|
|
}
|
|
|
|
#[test]
|
|
fn profile_in_virtual_manifest_works() {
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[workspace]
|
|
members = ["bar"]
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
debug = false
|
|
"#,
|
|
).file("src/main.rs", "fn main() {}")
|
|
.file(
|
|
"bar/Cargo.toml",
|
|
r#"
|
|
[project]
|
|
name = "bar"
|
|
version = "0.1.0"
|
|
authors = []
|
|
workspace = ".."
|
|
"#,
|
|
).file("bar/src/main.rs", "fn main() {}")
|
|
.build();
|
|
|
|
p.cargo("build -v")
|
|
.cwd(p.root().join("bar"))
|
|
.with_stderr(
|
|
"\
|
|
[COMPILING] bar v0.1.0 ([..])
|
|
[RUNNING] `rustc [..]`
|
|
[FINISHED] dev [optimized] target(s) in [..]",
|
|
).run();
|
|
}
|
|
|
|
#[test]
|
|
fn profile_panic_test_bench() {
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "foo"
|
|
version = "0.0.1"
|
|
|
|
[profile.test]
|
|
panic = "abort"
|
|
|
|
[profile.bench]
|
|
panic = "abort"
|
|
"#,
|
|
).file("src/lib.rs", "")
|
|
.build();
|
|
|
|
p.cargo("build")
|
|
.with_stderr_contains(
|
|
"\
|
|
[WARNING] `panic` setting is ignored for `test` profile
|
|
[WARNING] `panic` setting is ignored for `bench` profile
|
|
",
|
|
).run();
|
|
}
|
|
|
|
#[test]
|
|
fn profile_doc_deprecated() {
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "foo"
|
|
version = "0.0.1"
|
|
|
|
[profile.doc]
|
|
opt-level = 0
|
|
"#,
|
|
).file("src/lib.rs", "")
|
|
.build();
|
|
|
|
p.cargo("build")
|
|
.with_stderr_contains("[WARNING] profile `doc` is deprecated and has no effect")
|
|
.run();
|
|
}
|