cargo/tests/testsuite/rustc.rs

795 lines
22 KiB
Rust
Raw Normal View History

2019-11-25 02:42:45 +00:00
//! Tests for the `cargo rustc` command.
use cargo_test_support::{basic_bin_manifest, basic_lib_manifest, basic_manifest, project};
const CARGO_RUSTC_ERROR: &str =
2018-03-14 15:17:44 +00:00
"[ERROR] extra arguments to `rustc` can only be passed to one target, consider filtering
2019-02-03 04:01:23 +00:00
the package by passing, e.g., `--lib` or `--bin NAME` to specify a single target";
#[cargo_test]
fn build_lib_for_foo() {
let p = project()
.file("src/main.rs", "fn main() {}")
.file("src/lib.rs", r#" "#)
.build();
p.cargo("rustc --lib -v")
.with_stderr(
2018-03-14 15:17:44 +00:00
"\
[COMPILING] foo v0.0.1 ([CWD])
2019-09-25 01:17:36 +00:00
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib \
--emit=[..]link[..]-C debuginfo=2 [..]\
-C metadata=[..] \
--out-dir [..] \
-L dependency=[CWD]/target/debug/deps`
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
2018-03-14 15:17:44 +00:00
",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn lib() {
let p = project()
.file("src/main.rs", "fn main() {}")
.file("src/lib.rs", r#" "#)
.build();
p.cargo("rustc --lib -v -- -C debug-assertions=off")
.with_stderr(
2018-03-14 15:17:44 +00:00
"\
[COMPILING] foo v0.0.1 ([CWD])
2019-09-25 01:17:36 +00:00
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib \
--emit=[..]link[..]-C debuginfo=2 [..]\
-C debug-assertions=off \
-C metadata=[..] \
--out-dir [..] \
-L dependency=[CWD]/target/debug/deps`
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
2018-03-14 15:17:44 +00:00
",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn build_main_and_allow_unstable_options() {
let p = project()
.file("src/main.rs", "fn main() {}")
.file("src/lib.rs", r#" "#)
.build();
p.cargo("rustc -v --bin foo -- -C debug-assertions")
.with_stderr(format!(
2018-03-14 15:17:44 +00:00
"\
[COMPILING] {name} v{version} ([CWD])
2019-09-25 01:17:36 +00:00
[RUNNING] `rustc --crate-name {name} src/lib.rs [..]--crate-type lib \
--emit=[..]link[..]-C debuginfo=2 [..]\
-C metadata=[..] \
--out-dir [..] \
-L dependency=[CWD]/target/debug/deps`
2019-09-25 01:17:36 +00:00
[RUNNING] `rustc --crate-name {name} src/main.rs [..]--crate-type bin \
--emit=[..]link[..]-C debuginfo=2 [..]\
-C debug-assertions \
-C metadata=[..] \
--out-dir [..] \
-L dependency=[CWD]/target/debug/deps \
--extern {name}=[CWD]/target/debug/deps/lib{name}-[..].rlib`
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
2016-11-06 04:53:21 +00:00
",
2018-03-14 15:17:44 +00:00
name = "foo",
version = "0.0.1"
2018-12-08 11:19:47 +00:00
))
.run();
}
#[cargo_test]
fn fails_when_trying_to_build_main_and_lib_with_args() {
let p = project()
.file("src/main.rs", "fn main() {}")
.file("src/lib.rs", r#" "#)
.build();
p.cargo("rustc -v -- -C debug-assertions")
.with_status(101)
.with_stderr(CARGO_RUSTC_ERROR)
.run();
}
#[cargo_test]
fn build_with_args_to_one_of_multiple_binaries() {
let p = project()
.file("src/bin/foo.rs", "fn main() {}")
.file("src/bin/bar.rs", "fn main() {}")
.file("src/bin/baz.rs", "fn main() {}")
.file("src/lib.rs", r#" "#)
.build();
p.cargo("rustc -v --bin bar -- -C debug-assertions")
.with_stderr(
2018-03-14 15:17:44 +00:00
"\
[COMPILING] foo v0.0.1 ([CWD])
Add support for `-Cembed-bitcode=no` This commit is the Cargo half of support necessary for rust-lang/rust#70458. Today the compiler emits embedded bytecode in rlibs by default, but compresses it. This is both extraneous disk space and wasted build time for almost all builds, so the PR in question there is changing rustc to have a `-Cembed-bitcode` flag which, when enabled, places the bitcode in the object file rather than an auxiliary file (no extra compression), but also enables `-Cembed-bitcode=no` to disable bitcode emission entirely. This Cargo support changes Cargo to pass `-Cembed-bitcode=no` for almost all compilations. Cargo will keep `lto = true` and such working by not passing this flag (and thus allowing bitcode to get embedded), but by default `cargo build` and `cargo build --release` will no longer have any bitcode in rlibs which should result in speedier builds! Most of the changes here were around the test suite and various assertions about the `rustc` command lines we spit out. One test was hard-disabled until we can get `-Cembed-bitcode=no` into nightly, and then we can make it a nightly-only test. The test will then be stable again once `-Cembed-bitcode=no` hits stable. Note that this is intended to land before the upstream `-Cembed-bitcode` change. The thinking is that we'll land everything in rust-lang/rust all at once so there's no build time regressions for anyone. If we were to land the `-Cembed-bitcode` PR first then there would be a build time regression until we land Cargo changes because rustc would be emitting uncompressed bitcode by default and Cargo wouldn't be turning it off.
2020-04-01 18:41:27 +00:00
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib --emit=[..]link[..]\
-C debuginfo=2 [..]-C metadata=[..] \
--out-dir [..]`
Add support for `-Cembed-bitcode=no` This commit is the Cargo half of support necessary for rust-lang/rust#70458. Today the compiler emits embedded bytecode in rlibs by default, but compresses it. This is both extraneous disk space and wasted build time for almost all builds, so the PR in question there is changing rustc to have a `-Cembed-bitcode` flag which, when enabled, places the bitcode in the object file rather than an auxiliary file (no extra compression), but also enables `-Cembed-bitcode=no` to disable bitcode emission entirely. This Cargo support changes Cargo to pass `-Cembed-bitcode=no` for almost all compilations. Cargo will keep `lto = true` and such working by not passing this flag (and thus allowing bitcode to get embedded), but by default `cargo build` and `cargo build --release` will no longer have any bitcode in rlibs which should result in speedier builds! Most of the changes here were around the test suite and various assertions about the `rustc` command lines we spit out. One test was hard-disabled until we can get `-Cembed-bitcode=no` into nightly, and then we can make it a nightly-only test. The test will then be stable again once `-Cembed-bitcode=no` hits stable. Note that this is intended to land before the upstream `-Cembed-bitcode` change. The thinking is that we'll land everything in rust-lang/rust all at once so there's no build time regressions for anyone. If we were to land the `-Cembed-bitcode` PR first then there would be a build time regression until we land Cargo changes because rustc would be emitting uncompressed bitcode by default and Cargo wouldn't be turning it off.
2020-04-01 18:41:27 +00:00
[RUNNING] `rustc --crate-name bar src/bin/bar.rs [..]--crate-type bin --emit=[..]link[..]\
-C debuginfo=2 [..]-C debug-assertions [..]`
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
2018-03-14 15:17:44 +00:00
",
2019-05-20 19:36:59 +00:00
)
.run();
}
#[cargo_test]
fn fails_with_args_to_all_binaries() {
let p = project()
.file("src/bin/foo.rs", "fn main() {}")
.file("src/bin/bar.rs", "fn main() {}")
.file("src/bin/baz.rs", "fn main() {}")
.file("src/lib.rs", r#" "#)
.build();
p.cargo("rustc -v -- -C debug-assertions")
.with_status(101)
.with_stderr(CARGO_RUSTC_ERROR)
.run();
}
#[cargo_test]
fn fails_with_crate_type_to_multi_binaries() {
let p = project()
.file("src/bin/foo.rs", "fn main() {}")
.file("src/bin/bar.rs", "fn main() {}")
.file("src/bin/baz.rs", "fn main() {}")
.file("src/lib.rs", r#" "#)
.build();
p.cargo("rustc --crate-type lib")
.with_status(101)
.with_stderr(
"[ERROR] crate types to rustc can only be passed to one target, consider filtering
the package by passing, e.g., `--lib` or `--example` to specify a single target",
)
.run();
}
#[cargo_test]
fn fails_with_crate_type_to_multi_examples() {
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
authors = []
[[example]]
name = "ex1"
crate-type = ["rlib"]
[[example]]
name = "ex2"
crate-type = ["rlib"]
"#,
)
.file("src/lib.rs", "")
.file("examples/ex1.rs", "")
.file("examples/ex2.rs", "")
.build();
p.cargo("rustc -v --example ex1 --example ex2 --crate-type lib,cdylib")
.with_status(101)
.with_stderr(
"[ERROR] crate types to rustc can only be passed to one target, consider filtering
the package by passing, e.g., `--lib` or `--example` to specify a single target",
)
.run();
}
#[cargo_test]
fn fails_with_crate_type_to_binary() {
let p = project().file("src/bin/foo.rs", "fn main() {}").build();
p.cargo("rustc --crate-type lib")
.with_status(101)
.with_stderr(
"[ERROR] crate types can only be specified for libraries and example libraries.
Binaries, tests, and benchmarks are always the `bin` crate type",
)
.run();
}
#[cargo_test]
fn build_with_crate_type_for_foo() {
let p = project().file("src/lib.rs", "").build();
p.cargo("rustc -v --crate-type cdylib")
.with_stderr(
"\
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type cdylib [..]
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
",
)
.run();
}
#[cargo_test]
fn build_with_crate_type_for_foo_with_deps() {
let p = project()
.file(
"src/lib.rs",
r#"
extern crate a;
pub fn foo() { a::hello(); }
"#,
)
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
authors = []
[dependencies]
a = { path = "a" }
"#,
)
.file("a/Cargo.toml", &basic_manifest("a", "0.1.0"))
.file("a/src/lib.rs", "pub fn hello() {}")
.build();
p.cargo("rustc -v --crate-type cdylib")
.with_stderr(
"\
[COMPILING] a v0.1.0 ([CWD]/a)
[RUNNING] `rustc --crate-name a a/src/lib.rs [..]--crate-type lib [..]
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type cdylib [..]
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
",
)
.run();
}
#[cargo_test]
fn build_with_crate_types_for_foo() {
let p = project().file("src/lib.rs", "").build();
p.cargo("rustc -v --crate-type lib,cdylib")
.with_stderr(
"\
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib,cdylib [..]
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
",
)
.run();
}
#[cargo_test]
fn build_with_crate_type_to_example() {
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
authors = []
[[example]]
name = "ex"
crate-type = ["rlib"]
"#,
)
.file("src/lib.rs", "")
.file("examples/ex.rs", "")
.build();
p.cargo("rustc -v --example ex --crate-type cdylib")
.with_stderr(
"\
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib [..]
[RUNNING] `rustc --crate-name ex examples/ex.rs [..]--crate-type cdylib [..]
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
",
)
.run();
}
#[cargo_test]
fn build_with_crate_types_to_example() {
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
authors = []
[[example]]
name = "ex"
crate-type = ["rlib"]
"#,
)
.file("src/lib.rs", "")
.file("examples/ex.rs", "")
.build();
p.cargo("rustc -v --example ex --crate-type lib,cdylib")
.with_stderr(
"\
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib [..]
[RUNNING] `rustc --crate-name ex examples/ex.rs [..]--crate-type lib,cdylib [..]
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
",
)
.run();
}
#[cargo_test]
fn build_with_crate_types_to_one_of_multi_examples() {
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.0.1"
authors = []
[[example]]
name = "ex1"
crate-type = ["rlib"]
[[example]]
name = "ex2"
crate-type = ["rlib"]
"#,
)
.file("src/lib.rs", "")
.file("examples/ex1.rs", "")
.file("examples/ex2.rs", "")
.build();
p.cargo("rustc -v --example ex1 --crate-type lib,cdylib")
.with_stderr(
"\
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib [..]
[RUNNING] `rustc --crate-name ex1 examples/ex1.rs [..]--crate-type lib,cdylib [..]
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
",
)
.run();
}
#[cargo_test]
fn build_with_args_to_one_of_multiple_tests() {
let p = project()
.file("tests/foo.rs", r#" "#)
.file("tests/bar.rs", r#" "#)
.file("tests/baz.rs", r#" "#)
.file("src/lib.rs", r#" "#)
.build();
p.cargo("rustc -v --test bar -- -C debug-assertions")
.with_stderr(
2018-03-14 15:17:44 +00:00
"\
[COMPILING] foo v0.0.1 ([CWD])
Add support for `-Cembed-bitcode=no` This commit is the Cargo half of support necessary for rust-lang/rust#70458. Today the compiler emits embedded bytecode in rlibs by default, but compresses it. This is both extraneous disk space and wasted build time for almost all builds, so the PR in question there is changing rustc to have a `-Cembed-bitcode` flag which, when enabled, places the bitcode in the object file rather than an auxiliary file (no extra compression), but also enables `-Cembed-bitcode=no` to disable bitcode emission entirely. This Cargo support changes Cargo to pass `-Cembed-bitcode=no` for almost all compilations. Cargo will keep `lto = true` and such working by not passing this flag (and thus allowing bitcode to get embedded), but by default `cargo build` and `cargo build --release` will no longer have any bitcode in rlibs which should result in speedier builds! Most of the changes here were around the test suite and various assertions about the `rustc` command lines we spit out. One test was hard-disabled until we can get `-Cembed-bitcode=no` into nightly, and then we can make it a nightly-only test. The test will then be stable again once `-Cembed-bitcode=no` hits stable. Note that this is intended to land before the upstream `-Cembed-bitcode` change. The thinking is that we'll land everything in rust-lang/rust all at once so there's no build time regressions for anyone. If we were to land the `-Cembed-bitcode` PR first then there would be a build time regression until we land Cargo changes because rustc would be emitting uncompressed bitcode by default and Cargo wouldn't be turning it off.
2020-04-01 18:41:27 +00:00
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib --emit=[..]link[..]\
-C debuginfo=2 [..]-C metadata=[..] \
--out-dir [..]`
[RUNNING] `rustc --crate-name bar tests/bar.rs [..]--emit=[..]link[..]-C debuginfo=2 [..]\
-C debug-assertions [..]--test[..]`
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
2018-03-14 15:17:44 +00:00
",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn build_foo_with_bar_dependency() {
let foo = project()
2018-03-14 15:17:44 +00:00
.file(
"Cargo.toml",
r#"
2020-09-27 00:59:58 +00:00
[package]
name = "foo"
version = "0.0.1"
authors = []
2020-09-27 00:59:58 +00:00
[dependencies.bar]
path = "../bar"
"#,
2018-12-08 11:19:47 +00:00
)
.file("src/main.rs", "extern crate bar; fn main() { bar::baz() }")
.build();
let _bar = project()
.at("bar")
2018-07-24 22:35:01 +00:00
.file("Cargo.toml", &basic_manifest("bar", "0.1.0"))
.file("src/lib.rs", "pub fn baz() {}")
.build();
foo.cargo("rustc -v -- -C debug-assertions")
.with_stderr(
2018-03-14 15:17:44 +00:00
"\
[COMPILING] bar v0.1.0 ([..])
[RUNNING] `[..] -C debuginfo=2 [..]`
[COMPILING] foo v0.0.1 ([CWD])
[RUNNING] `[..] -C debuginfo=2 [..]-C debug-assertions [..]`
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
2018-03-14 15:17:44 +00:00
",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn build_only_bar_dependency() {
let foo = project()
2018-03-14 15:17:44 +00:00
.file(
"Cargo.toml",
r#"
2020-09-27 00:59:58 +00:00
[package]
name = "foo"
version = "0.0.1"
authors = []
2020-09-27 00:59:58 +00:00
[dependencies.bar]
path = "../bar"
"#,
2018-12-08 11:19:47 +00:00
)
.file("src/main.rs", "extern crate bar; fn main() { bar::baz() }")
.build();
let _bar = project()
.at("bar")
2018-07-24 22:35:01 +00:00
.file("Cargo.toml", &basic_manifest("bar", "0.1.0"))
.file("src/lib.rs", "pub fn baz() {}")
.build();
foo.cargo("rustc -v -p bar -- -C debug-assertions")
.with_stderr(
2018-03-14 15:17:44 +00:00
"\
[COMPILING] bar v0.1.0 ([..])
2019-09-25 01:17:36 +00:00
[RUNNING] `rustc --crate-name bar [..]--crate-type lib [..] -C debug-assertions [..]`
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
2018-03-14 15:17:44 +00:00
",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn targets_selected_default() {
let p = project().file("src/main.rs", "fn main() {}").build();
p.cargo("rustc -v")
2018-03-15 15:20:15 +00:00
// bin
2018-12-08 11:19:47 +00:00
.with_stderr_contains(
2019-09-25 01:17:36 +00:00
"[RUNNING] `rustc --crate-name foo src/main.rs [..]--crate-type bin \
--emit=[..]link[..]",
2018-12-08 11:19:47 +00:00
)
2018-03-15 15:20:15 +00:00
// bench
2018-12-08 11:19:47 +00:00
.with_stderr_does_not_contain(
2019-09-25 01:17:36 +00:00
"[RUNNING] `rustc --crate-name foo src/main.rs [..]--emit=[..]link \
2018-12-08 11:19:47 +00:00
-C opt-level=3 --test [..]",
)
2018-03-15 15:20:15 +00:00
// unit test
2018-12-08 11:19:47 +00:00
.with_stderr_does_not_contain(
2019-09-25 01:17:36 +00:00
"[RUNNING] `rustc --crate-name foo src/main.rs [..]--emit=[..]link \
-C debuginfo=2 [..]--test [..]",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn targets_selected_all() {
let p = project().file("src/main.rs", "fn main() {}").build();
p.cargo("rustc -v --all-targets")
2018-03-15 15:20:15 +00:00
// bin
2018-12-08 11:19:47 +00:00
.with_stderr_contains(
2019-09-25 01:17:36 +00:00
"[RUNNING] `rustc --crate-name foo src/main.rs [..]--crate-type bin \
--emit=[..]link[..]",
2018-12-08 11:19:47 +00:00
)
2018-03-15 15:20:15 +00:00
// unit test
2018-12-08 11:19:47 +00:00
.with_stderr_contains(
Add support for `-Cembed-bitcode=no` This commit is the Cargo half of support necessary for rust-lang/rust#70458. Today the compiler emits embedded bytecode in rlibs by default, but compresses it. This is both extraneous disk space and wasted build time for almost all builds, so the PR in question there is changing rustc to have a `-Cembed-bitcode` flag which, when enabled, places the bitcode in the object file rather than an auxiliary file (no extra compression), but also enables `-Cembed-bitcode=no` to disable bitcode emission entirely. This Cargo support changes Cargo to pass `-Cembed-bitcode=no` for almost all compilations. Cargo will keep `lto = true` and such working by not passing this flag (and thus allowing bitcode to get embedded), but by default `cargo build` and `cargo build --release` will no longer have any bitcode in rlibs which should result in speedier builds! Most of the changes here were around the test suite and various assertions about the `rustc` command lines we spit out. One test was hard-disabled until we can get `-Cembed-bitcode=no` into nightly, and then we can make it a nightly-only test. The test will then be stable again once `-Cembed-bitcode=no` hits stable. Note that this is intended to land before the upstream `-Cembed-bitcode` change. The thinking is that we'll land everything in rust-lang/rust all at once so there's no build time regressions for anyone. If we were to land the `-Cembed-bitcode` PR first then there would be a build time regression until we land Cargo changes because rustc would be emitting uncompressed bitcode by default and Cargo wouldn't be turning it off.
2020-04-01 18:41:27 +00:00
"[RUNNING] `rustc --crate-name foo src/main.rs [..]--emit=[..]link[..]\
-C debuginfo=2 [..]--test [..]",
2018-12-08 11:19:47 +00:00
)
.run();
2018-03-15 15:20:15 +00:00
}
#[cargo_test]
fn fail_with_multiple_packages() {
let foo = project()
2018-03-14 15:17:44 +00:00
.file(
"Cargo.toml",
r#"
2020-09-27 00:59:58 +00:00
[package]
name = "foo"
version = "0.0.1"
authors = []
2020-09-27 00:59:58 +00:00
[dependencies.bar]
path = "../bar"
2020-09-27 00:59:58 +00:00
[dependencies.baz]
path = "../baz"
"#,
2018-12-08 11:19:47 +00:00
)
.file("src/main.rs", "fn main() {}")
.build();
let _bar = project()
.at("bar")
2018-07-24 22:35:01 +00:00
.file("Cargo.toml", &basic_manifest("bar", "0.1.0"))
2018-03-14 15:17:44 +00:00
.file(
"src/main.rs",
r#"
2020-09-27 00:59:58 +00:00
fn main() {
if cfg!(flag = "1") { println!("Yeah from bar!"); }
}
"#,
2018-12-08 11:19:47 +00:00
)
.build();
let _baz = project()
.at("baz")
2018-07-24 22:35:01 +00:00
.file("Cargo.toml", &basic_manifest("baz", "0.1.0"))
2018-03-14 15:17:44 +00:00
.file(
"src/main.rs",
r#"
2020-09-27 00:59:58 +00:00
fn main() {
if cfg!(flag = "1") { println!("Yeah from baz!"); }
}
"#,
2018-12-08 11:19:47 +00:00
)
.build();
foo.cargo("rustc -v -p bar -p baz")
.with_status(1)
.with_stderr_contains(
2018-03-14 15:17:44 +00:00
"\
2023-01-13 18:26:29 +00:00
error: the argument '--package [<SPEC>]' cannot be used multiple times
2018-03-14 15:17:44 +00:00
",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn fail_with_glob() {
let p = project()
.file(
"Cargo.toml",
r#"
[workspace]
members = ["bar"]
"#,
)
.file("bar/Cargo.toml", &basic_manifest("bar", "0.1.0"))
.file("bar/src/lib.rs", "pub fn bar() { break_the_build(); }")
.build();
p.cargo("rustc -p '*z'")
.with_status(101)
.with_stderr("[ERROR] Glob patterns on package selection are not supported.")
.run();
}
#[cargo_test]
fn rustc_with_other_profile() {
let p = project()
2018-03-14 15:17:44 +00:00
.file(
"Cargo.toml",
r#"
2020-09-27 00:59:58 +00:00
[package]
name = "foo"
version = "0.0.1"
authors = []
[dev-dependencies]
a = { path = "a" }
"#,
2018-12-08 11:19:47 +00:00
)
.file(
2018-03-14 15:17:44 +00:00
"src/main.rs",
r#"
2020-09-27 00:59:58 +00:00
#[cfg(test)] extern crate a;
2020-09-27 00:59:58 +00:00
#[test]
fn foo() {}
"#,
2018-12-08 11:19:47 +00:00
)
.file("a/Cargo.toml", &basic_manifest("a", "0.1.0"))
.file("a/src/lib.rs", "")
.build();
p.cargo("rustc --profile test").run();
}
2018-04-22 00:21:42 +00:00
#[cargo_test]
2018-04-22 00:21:42 +00:00
fn rustc_fingerprint() {
// Verify that the fingerprint includes the rustc args.
let p = project()
2018-04-22 00:21:42 +00:00
.file("Cargo.toml", &basic_lib_manifest("foo"))
.file("src/lib.rs", "")
.build();
p.cargo("rustc -v -- -C debug-assertions")
.with_stderr(
2018-04-22 00:21:42 +00:00
"\
[COMPILING] foo [..]
[RUNNING] `rustc [..]-C debug-assertions [..]
[FINISHED] [..]
",
2018-12-08 11:19:47 +00:00
)
.run();
2018-04-22 00:21:42 +00:00
p.cargo("rustc -v -- -C debug-assertions")
.with_stderr(
2018-04-22 00:21:42 +00:00
"\
[FRESH] foo [..]
[FINISHED] [..]
",
2018-12-08 11:19:47 +00:00
)
.run();
p.cargo("rustc -v")
.with_stderr_does_not_contain("-C debug-assertions")
.with_stderr(
"\
[DIRTY] foo [..]: the profile configuration changed
2018-04-22 00:21:42 +00:00
[COMPILING] foo [..]
[RUNNING] `rustc [..]
[FINISHED] [..]
",
2018-12-08 11:19:47 +00:00
)
.run();
2018-04-22 00:21:42 +00:00
p.cargo("rustc -v")
.with_stderr(
2018-04-22 00:21:42 +00:00
"\
[FRESH] foo [..]
[FINISHED] [..]
",
2018-12-08 11:19:47 +00:00
)
.run();
2018-04-22 00:21:42 +00:00
}
#[cargo_test]
fn rustc_test_with_implicit_bin() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file(
"src/main.rs",
r#"
2020-09-27 00:59:58 +00:00
#[cfg(foo)]
fn f() { compile_fail!("Foo shouldn't be set."); }
fn main() {}
"#,
2018-12-08 11:19:47 +00:00
)
.file(
"tests/test1.rs",
r#"
2020-09-27 00:59:58 +00:00
#[cfg(not(foo))]
fn f() { compile_fail!("Foo should be set."); }
"#,
2018-12-08 11:19:47 +00:00
)
.build();
p.cargo("rustc --test test1 -v -- --cfg foo")
.with_stderr_contains(
"\
2018-08-02 09:18:48 +00:00
[RUNNING] `rustc --crate-name test1 tests/test1.rs [..] --cfg foo [..]
",
2018-12-08 11:19:47 +00:00
)
.with_stderr_contains(
"\
2018-08-02 09:18:48 +00:00
[RUNNING] `rustc --crate-name foo src/main.rs [..]
",
2018-12-08 11:19:47 +00:00
)
.run();
}
#[cargo_test]
fn rustc_with_print_cfg_single_target() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file("src/main.rs", r#"fn main() {} "#)
.build();
p.cargo("rustc -Z unstable-options --target x86_64-pc-windows-msvc --print cfg")
.masquerade_as_nightly_cargo(&["print"])
.with_stdout_contains("debug_assertions")
.with_stdout_contains("target_arch=\"x86_64\"")
.with_stdout_contains("target_endian=\"little\"")
.with_stdout_contains("target_env=\"msvc\"")
.with_stdout_contains("target_family=\"windows\"")
.with_stdout_contains("target_os=\"windows\"")
.with_stdout_contains("target_pointer_width=\"64\"")
.with_stdout_contains("target_vendor=\"pc\"")
.with_stdout_contains("windows")
.run();
}
#[cargo_test]
fn rustc_with_print_cfg_multiple_targets() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file("src/main.rs", r#"fn main() {} "#)
.build();
p.cargo("rustc -Z unstable-options --target x86_64-pc-windows-msvc --target i686-unknown-linux-gnu --print cfg")
.masquerade_as_nightly_cargo(&["print"])
.with_stdout_contains("debug_assertions")
.with_stdout_contains("target_arch=\"x86_64\"")
.with_stdout_contains("target_endian=\"little\"")
.with_stdout_contains("target_env=\"msvc\"")
.with_stdout_contains("target_family=\"windows\"")
.with_stdout_contains("target_os=\"windows\"")
.with_stdout_contains("target_pointer_width=\"64\"")
.with_stdout_contains("target_vendor=\"pc\"")
.with_stdout_contains("windows")
.with_stdout_contains("target_env=\"gnu\"")
.with_stdout_contains("target_family=\"unix\"")
.with_stdout_contains("target_pointer_width=\"32\"")
.with_stdout_contains("target_vendor=\"unknown\"")
.with_stdout_contains("target_os=\"linux\"")
.with_stdout_contains("unix")
.run();
}
#[cargo_test]
fn rustc_with_print_cfg_rustflags_env_var() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
.file("src/main.rs", r#"fn main() {} "#)
.build();
p.cargo("rustc -Z unstable-options --target x86_64-pc-windows-msvc --print cfg")
.masquerade_as_nightly_cargo(&["print"])
.env("RUSTFLAGS", "-C target-feature=+crt-static")
.with_stdout_contains("debug_assertions")
.with_stdout_contains("target_arch=\"x86_64\"")
.with_stdout_contains("target_endian=\"little\"")
.with_stdout_contains("target_env=\"msvc\"")
.with_stdout_contains("target_family=\"windows\"")
.with_stdout_contains("target_feature=\"crt-static\"")
.with_stdout_contains("target_os=\"windows\"")
.with_stdout_contains("target_pointer_width=\"64\"")
.with_stdout_contains("target_vendor=\"pc\"")
.with_stdout_contains("windows")
.run();
}
#[cargo_test]
fn rustc_with_print_cfg_config_toml() {
let p = project()
.file("Cargo.toml", &basic_bin_manifest("foo"))
2021-02-22 01:00:28 +00:00
.file(
".cargo/config.toml",
r#"
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]
2021-02-22 01:00:28 +00:00
"#,
)
.file("src/main.rs", r#"fn main() {} "#)
.build();
p.cargo("rustc -Z unstable-options --target x86_64-pc-windows-msvc --print cfg")
.masquerade_as_nightly_cargo(&["print"])
.env("RUSTFLAGS", "-C target-feature=+crt-static")
.with_stdout_contains("debug_assertions")
.with_stdout_contains("target_arch=\"x86_64\"")
.with_stdout_contains("target_endian=\"little\"")
.with_stdout_contains("target_env=\"msvc\"")
.with_stdout_contains("target_family=\"windows\"")
.with_stdout_contains("target_feature=\"crt-static\"")
.with_stdout_contains("target_os=\"windows\"")
.with_stdout_contains("target_pointer_width=\"64\"")
.with_stdout_contains("target_vendor=\"pc\"")
.with_stdout_contains("windows")
.run();
}