2019-11-25 02:42:45 +00:00
|
|
|
//! Tests for the `cargo rustc` command.
|
|
|
|
|
2019-09-12 17:14:29 +00:00
|
|
|
use cargo_test_support::{basic_bin_manifest, basic_lib_manifest, basic_manifest, project};
|
2015-05-01 21:19:43 +00:00
|
|
|
|
2018-08-08 22:57:20 +00:00
|
|
|
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";
|
2015-05-06 10:08:43 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn build_lib_for_foo() {
|
2018-07-20 11:47:47 +00:00
|
|
|
let p = project()
|
2018-07-25 00:30:32 +00:00
|
|
|
.file("src/main.rs", "fn main() {}")
|
2017-07-22 03:12:21 +00:00
|
|
|
.file("src/lib.rs", r#" "#)
|
|
|
|
.build();
|
2015-05-01 21:19:43 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
p.cargo("rustc --lib -v")
|
2018-09-03 09:38:29 +00:00
|
|
|
.with_stderr(
|
2018-03-14 15:17:44 +00:00
|
|
|
"\
|
2018-09-08 02:42:26 +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 \
|
2023-05-31 10:09:35 +00:00
|
|
|
--emit=[..]link[..]-C debuginfo=2 [..]\
|
2016-08-02 06:22:29 +00:00
|
|
|
-C metadata=[..] \
|
Always build libraries into the same location
Previously Cargo would compile a library into a different location depending on
whether it was the "root crate" or not. In the ongoing saga of reducing Cargo's
reliance on the idea of a "root crate" this PR is the next step. With workspaces
the root crate of a compliation changes all the time, so the output needs to be
the same whether a crate is at the root or not.
Fixing this inconsistence in turn fixes bugs like #2855 and #2897 which arise
due to this discrepancy. Additionally, Cargo will no longer recompile a library
when it's used as a "root crate" or not.
This is fixed by taking a few steps:
* Everything is now compiled into the `deps` directory, regardless of whether
it's a root output or not.
* If a "root crate" is being compiled, then the relevant outputs are hard-linked
up one level to where they are today. This means that your binaries, dylibs,
staticlibs, etc, will all show up where they used to.
* The `-C metadata` flag is always omitted for path dependencies now. These
dependencies are always path dependencies and already all have unique crate
names. Additionally, they're the only crates in the DAG without metadata, so
there's no need to provide additional metadata. This in turn means that none
of the file names of the generated crates are mangled.
Closes #2855
2016-07-25 20:27:06 +00:00
|
|
|
--out-dir [..] \
|
2018-09-08 02:42:26 +00:00
|
|
|
-L dependency=[CWD]/target/debug/deps`
|
2017-01-12 01:03:36 +00:00
|
|
|
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
|
2018-03-14 15:17:44 +00:00
|
|
|
",
|
2018-12-08 11:19:47 +00:00
|
|
|
)
|
|
|
|
.run();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-05-01 23:01:30 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn lib() {
|
2018-07-20 11:47:47 +00:00
|
|
|
let p = project()
|
2018-07-25 00:30:32 +00:00
|
|
|
.file("src/main.rs", "fn main() {}")
|
2017-07-22 03:12:21 +00:00
|
|
|
.file("src/lib.rs", r#" "#)
|
|
|
|
.build();
|
2015-05-01 23:01:30 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
p.cargo("rustc --lib -v -- -C debug-assertions=off")
|
2018-09-03 09:38:29 +00:00
|
|
|
.with_stderr(
|
2018-03-14 15:17:44 +00:00
|
|
|
"\
|
2018-09-08 02:42:26 +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 \
|
2023-05-31 10:09:35 +00:00
|
|
|
--emit=[..]link[..]-C debuginfo=2 [..]\
|
2016-05-20 16:23:50 +00:00
|
|
|
-C debug-assertions=off \
|
2016-08-02 06:22:29 +00:00
|
|
|
-C metadata=[..] \
|
Always build libraries into the same location
Previously Cargo would compile a library into a different location depending on
whether it was the "root crate" or not. In the ongoing saga of reducing Cargo's
reliance on the idea of a "root crate" this PR is the next step. With workspaces
the root crate of a compliation changes all the time, so the output needs to be
the same whether a crate is at the root or not.
Fixing this inconsistence in turn fixes bugs like #2855 and #2897 which arise
due to this discrepancy. Additionally, Cargo will no longer recompile a library
when it's used as a "root crate" or not.
This is fixed by taking a few steps:
* Everything is now compiled into the `deps` directory, regardless of whether
it's a root output or not.
* If a "root crate" is being compiled, then the relevant outputs are hard-linked
up one level to where they are today. This means that your binaries, dylibs,
staticlibs, etc, will all show up where they used to.
* The `-C metadata` flag is always omitted for path dependencies now. These
dependencies are always path dependencies and already all have unique crate
names. Additionally, they're the only crates in the DAG without metadata, so
there's no need to provide additional metadata. This in turn means that none
of the file names of the generated crates are mangled.
Closes #2855
2016-07-25 20:27:06 +00:00
|
|
|
--out-dir [..] \
|
2018-09-08 02:42:26 +00:00
|
|
|
-L dependency=[CWD]/target/debug/deps`
|
2017-01-12 01:03:36 +00:00
|
|
|
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
|
2018-03-14 15:17:44 +00:00
|
|
|
",
|
2018-12-08 11:19:47 +00:00
|
|
|
)
|
|
|
|
.run();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-05-01 23:01:30 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn build_main_and_allow_unstable_options() {
|
2018-07-20 11:47:47 +00:00
|
|
|
let p = project()
|
2018-07-25 00:30:32 +00:00
|
|
|
.file("src/main.rs", "fn main() {}")
|
2017-07-22 03:12:21 +00:00
|
|
|
.file("src/lib.rs", r#" "#)
|
|
|
|
.build();
|
2015-05-01 23:01:30 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
p.cargo("rustc -v --bin foo -- -C debug-assertions")
|
2018-09-03 09:38:29 +00:00
|
|
|
.with_stderr(format!(
|
2018-03-14 15:17:44 +00:00
|
|
|
"\
|
2018-09-08 02:42:26 +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 \
|
2023-05-31 10:09:35 +00:00
|
|
|
--emit=[..]link[..]-C debuginfo=2 [..]\
|
2016-08-02 06:22:29 +00:00
|
|
|
-C metadata=[..] \
|
Always build libraries into the same location
Previously Cargo would compile a library into a different location depending on
whether it was the "root crate" or not. In the ongoing saga of reducing Cargo's
reliance on the idea of a "root crate" this PR is the next step. With workspaces
the root crate of a compliation changes all the time, so the output needs to be
the same whether a crate is at the root or not.
Fixing this inconsistence in turn fixes bugs like #2855 and #2897 which arise
due to this discrepancy. Additionally, Cargo will no longer recompile a library
when it's used as a "root crate" or not.
This is fixed by taking a few steps:
* Everything is now compiled into the `deps` directory, regardless of whether
it's a root output or not.
* If a "root crate" is being compiled, then the relevant outputs are hard-linked
up one level to where they are today. This means that your binaries, dylibs,
staticlibs, etc, will all show up where they used to.
* The `-C metadata` flag is always omitted for path dependencies now. These
dependencies are always path dependencies and already all have unique crate
names. Additionally, they're the only crates in the DAG without metadata, so
there's no need to provide additional metadata. This in turn means that none
of the file names of the generated crates are mangled.
Closes #2855
2016-07-25 20:27:06 +00:00
|
|
|
--out-dir [..] \
|
2018-09-08 02:42:26 +00:00
|
|
|
-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 \
|
2023-05-31 10:09:35 +00:00
|
|
|
--emit=[..]link[..]-C debuginfo=2 [..]\
|
2016-05-20 16:23:50 +00:00
|
|
|
-C debug-assertions \
|
2016-08-02 06:22:29 +00:00
|
|
|
-C metadata=[..] \
|
Always build libraries into the same location
Previously Cargo would compile a library into a different location depending on
whether it was the "root crate" or not. In the ongoing saga of reducing Cargo's
reliance on the idea of a "root crate" this PR is the next step. With workspaces
the root crate of a compliation changes all the time, so the output needs to be
the same whether a crate is at the root or not.
Fixing this inconsistence in turn fixes bugs like #2855 and #2897 which arise
due to this discrepancy. Additionally, Cargo will no longer recompile a library
when it's used as a "root crate" or not.
This is fixed by taking a few steps:
* Everything is now compiled into the `deps` directory, regardless of whether
it's a root output or not.
* If a "root crate" is being compiled, then the relevant outputs are hard-linked
up one level to where they are today. This means that your binaries, dylibs,
staticlibs, etc, will all show up where they used to.
* The `-C metadata` flag is always omitted for path dependencies now. These
dependencies are always path dependencies and already all have unique crate
names. Additionally, they're the only crates in the DAG without metadata, so
there's no need to provide additional metadata. This in turn means that none
of the file names of the generated crates are mangled.
Closes #2855
2016-07-25 20:27:06 +00:00
|
|
|
--out-dir [..] \
|
2018-09-08 02:42:26 +00:00
|
|
|
-L dependency=[CWD]/target/debug/deps \
|
|
|
|
--extern {name}=[CWD]/target/debug/deps/lib{name}-[..].rlib`
|
2017-01-12 01:03:36 +00:00
|
|
|
[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();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-05-02 14:30:16 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn fails_when_trying_to_build_main_and_lib_with_args() {
|
2018-07-20 11:47:47 +00:00
|
|
|
let p = project()
|
2018-07-25 00:30:32 +00:00
|
|
|
.file("src/main.rs", "fn main() {}")
|
2017-07-22 03:12:21 +00:00
|
|
|
.file("src/lib.rs", r#" "#)
|
|
|
|
.build();
|
2015-05-02 14:30:16 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
p.cargo("rustc -v -- -C debug-assertions")
|
|
|
|
.with_status(101)
|
|
|
|
.with_stderr(CARGO_RUSTC_ERROR)
|
|
|
|
.run();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn build_with_args_to_one_of_multiple_binaries() {
|
2018-07-20 11:47:47 +00:00
|
|
|
let p = project()
|
2018-07-25 00:30:32 +00:00
|
|
|
.file("src/bin/foo.rs", "fn main() {}")
|
|
|
|
.file("src/bin/bar.rs", "fn main() {}")
|
|
|
|
.file("src/bin/baz.rs", "fn main() {}")
|
2017-07-22 03:12:21 +00:00
|
|
|
.file("src/lib.rs", r#" "#)
|
|
|
|
.build();
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
p.cargo("rustc -v --bin bar -- -C debug-assertions")
|
2018-09-03 09:38:29 +00:00
|
|
|
.with_stderr(
|
2018-03-14 15:17:44 +00:00
|
|
|
"\
|
2018-09-08 02:42:26 +00:00
|
|
|
[COMPILING] foo v0.0.1 ([CWD])
|
2020-04-01 18:41:27 +00:00
|
|
|
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib --emit=[..]link[..]\
|
2023-05-31 10:09:35 +00:00
|
|
|
-C debuginfo=2 [..]-C metadata=[..] \
|
Always build libraries into the same location
Previously Cargo would compile a library into a different location depending on
whether it was the "root crate" or not. In the ongoing saga of reducing Cargo's
reliance on the idea of a "root crate" this PR is the next step. With workspaces
the root crate of a compliation changes all the time, so the output needs to be
the same whether a crate is at the root or not.
Fixing this inconsistence in turn fixes bugs like #2855 and #2897 which arise
due to this discrepancy. Additionally, Cargo will no longer recompile a library
when it's used as a "root crate" or not.
This is fixed by taking a few steps:
* Everything is now compiled into the `deps` directory, regardless of whether
it's a root output or not.
* If a "root crate" is being compiled, then the relevant outputs are hard-linked
up one level to where they are today. This means that your binaries, dylibs,
staticlibs, etc, will all show up where they used to.
* The `-C metadata` flag is always omitted for path dependencies now. These
dependencies are always path dependencies and already all have unique crate
names. Additionally, they're the only crates in the DAG without metadata, so
there's no need to provide additional metadata. This in turn means that none
of the file names of the generated crates are mangled.
Closes #2855
2016-07-25 20:27:06 +00:00
|
|
|
--out-dir [..]`
|
2020-04-01 18:41:27 +00:00
|
|
|
[RUNNING] `rustc --crate-name bar src/bin/bar.rs [..]--crate-type bin --emit=[..]link[..]\
|
2023-05-31 10:09:35 +00:00
|
|
|
-C debuginfo=2 [..]-C debug-assertions [..]`
|
2017-01-12 01:03:36 +00:00
|
|
|
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
|
2018-03-14 15:17:44 +00:00
|
|
|
",
|
2019-05-20 19:36:59 +00:00
|
|
|
)
|
|
|
|
.run();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn fails_with_args_to_all_binaries() {
|
2018-07-20 11:47:47 +00:00
|
|
|
let p = project()
|
2018-07-25 00:30:32 +00:00
|
|
|
.file("src/bin/foo.rs", "fn main() {}")
|
|
|
|
.file("src/bin/bar.rs", "fn main() {}")
|
|
|
|
.file("src/bin/baz.rs", "fn main() {}")
|
2017-07-22 03:12:21 +00:00
|
|
|
.file("src/lib.rs", r#" "#)
|
|
|
|
.build();
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
p.cargo("rustc -v -- -C debug-assertions")
|
|
|
|
.with_status(101)
|
|
|
|
.with_stderr(CARGO_RUSTC_ERROR)
|
|
|
|
.run();
|
2021-11-18 15:57:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[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();
|
|
|
|
|
2022-07-09 11:34:44 +00:00
|
|
|
p.cargo("rustc --crate-type lib")
|
2021-11-18 15:57:42 +00:00
|
|
|
.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();
|
|
|
|
|
2022-07-09 11:34:44 +00:00
|
|
|
p.cargo("rustc -v --example ex1 --example ex2 --crate-type lib,cdylib")
|
2021-11-18 15:57:42 +00:00
|
|
|
.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();
|
|
|
|
|
2022-07-09 11:34:44 +00:00
|
|
|
p.cargo("rustc --crate-type lib")
|
2021-11-18 15:57:42 +00:00
|
|
|
.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() {
|
2022-02-13 09:33:30 +00:00
|
|
|
let p = project().file("src/lib.rs", "").build();
|
2021-11-18 15:57:42 +00:00
|
|
|
|
2022-07-09 11:34:44 +00:00
|
|
|
p.cargo("rustc -v --crate-type cdylib")
|
2021-11-18 15:57:42 +00:00
|
|
|
.with_stderr(
|
|
|
|
"\
|
|
|
|
[COMPILING] foo v0.0.1 ([CWD])
|
2022-02-13 09:33:30 +00:00
|
|
|
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type cdylib [..]
|
2021-11-18 15:57:42 +00:00
|
|
|
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
|
|
|
|
",
|
|
|
|
)
|
|
|
|
.run();
|
|
|
|
}
|
|
|
|
|
2022-02-13 09:42:12 +00:00
|
|
|
#[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();
|
|
|
|
|
2022-07-09 11:34:44 +00:00
|
|
|
p.cargo("rustc -v --crate-type cdylib")
|
2022-02-13 09:42:12 +00:00
|
|
|
.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();
|
|
|
|
}
|
|
|
|
|
2021-11-18 15:57:42 +00:00
|
|
|
#[cargo_test]
|
|
|
|
fn build_with_crate_types_for_foo() {
|
2022-02-13 09:33:30 +00:00
|
|
|
let p = project().file("src/lib.rs", "").build();
|
2021-11-18 15:57:42 +00:00
|
|
|
|
2022-07-09 11:34:44 +00:00
|
|
|
p.cargo("rustc -v --crate-type lib,cdylib")
|
2021-11-18 15:57:42 +00:00
|
|
|
.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();
|
|
|
|
|
2022-07-09 11:34:44 +00:00
|
|
|
p.cargo("rustc -v --example ex --crate-type cdylib")
|
2021-11-18 15:57:42 +00:00
|
|
|
.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();
|
|
|
|
|
2022-07-09 11:34:44 +00:00
|
|
|
p.cargo("rustc -v --example ex --crate-type lib,cdylib")
|
2021-11-18 15:57:42 +00:00
|
|
|
.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();
|
|
|
|
|
2022-07-09 11:34:44 +00:00
|
|
|
p.cargo("rustc -v --example ex1 --crate-type lib,cdylib")
|
2021-11-18 15:57:42 +00:00
|
|
|
.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();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn build_with_args_to_one_of_multiple_tests() {
|
2018-07-20 11:47:47 +00:00
|
|
|
let p = project()
|
2015-05-02 23:11:46 +00:00
|
|
|
.file("tests/foo.rs", r#" "#)
|
|
|
|
.file("tests/bar.rs", r#" "#)
|
|
|
|
.file("tests/baz.rs", r#" "#)
|
2017-07-22 03:12:21 +00:00
|
|
|
.file("src/lib.rs", r#" "#)
|
|
|
|
.build();
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
p.cargo("rustc -v --test bar -- -C debug-assertions")
|
2018-09-03 09:38:29 +00:00
|
|
|
.with_stderr(
|
2018-03-14 15:17:44 +00:00
|
|
|
"\
|
2018-09-08 02:42:26 +00:00
|
|
|
[COMPILING] foo v0.0.1 ([CWD])
|
2020-04-01 18:41:27 +00:00
|
|
|
[RUNNING] `rustc --crate-name foo src/lib.rs [..]--crate-type lib --emit=[..]link[..]\
|
2023-05-31 10:09:35 +00:00
|
|
|
-C debuginfo=2 [..]-C metadata=[..] \
|
Always build libraries into the same location
Previously Cargo would compile a library into a different location depending on
whether it was the "root crate" or not. In the ongoing saga of reducing Cargo's
reliance on the idea of a "root crate" this PR is the next step. With workspaces
the root crate of a compliation changes all the time, so the output needs to be
the same whether a crate is at the root or not.
Fixing this inconsistence in turn fixes bugs like #2855 and #2897 which arise
due to this discrepancy. Additionally, Cargo will no longer recompile a library
when it's used as a "root crate" or not.
This is fixed by taking a few steps:
* Everything is now compiled into the `deps` directory, regardless of whether
it's a root output or not.
* If a "root crate" is being compiled, then the relevant outputs are hard-linked
up one level to where they are today. This means that your binaries, dylibs,
staticlibs, etc, will all show up where they used to.
* The `-C metadata` flag is always omitted for path dependencies now. These
dependencies are always path dependencies and already all have unique crate
names. Additionally, they're the only crates in the DAG without metadata, so
there's no need to provide additional metadata. This in turn means that none
of the file names of the generated crates are mangled.
Closes #2855
2016-07-25 20:27:06 +00:00
|
|
|
--out-dir [..]`
|
2023-05-31 10:09:35 +00:00
|
|
|
[RUNNING] `rustc --crate-name bar tests/bar.rs [..]--emit=[..]link[..]-C debuginfo=2 [..]\
|
2016-05-20 16:23:50 +00:00
|
|
|
-C debug-assertions [..]--test[..]`
|
2017-01-12 01:03:36 +00:00
|
|
|
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
|
2018-03-14 15:17:44 +00:00
|
|
|
",
|
2018-12-08 11:19:47 +00:00
|
|
|
)
|
|
|
|
.run();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn build_foo_with_bar_dependency() {
|
2018-07-20 11:47:47 +00:00
|
|
|
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 = []
|
2015-05-02 23:11:46 +00:00
|
|
|
|
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() }")
|
2017-07-22 03:12:21 +00:00
|
|
|
.build();
|
2018-08-28 09:20:03 +00:00
|
|
|
let _bar = project()
|
|
|
|
.at("bar")
|
2018-07-24 22:35:01 +00:00
|
|
|
.file("Cargo.toml", &basic_manifest("bar", "0.1.0"))
|
2018-07-25 00:30:32 +00:00
|
|
|
.file("src/lib.rs", "pub fn baz() {}")
|
2017-07-22 03:12:21 +00:00
|
|
|
.build();
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
foo.cargo("rustc -v -- -C debug-assertions")
|
2018-09-03 09:38:29 +00:00
|
|
|
.with_stderr(
|
2018-03-14 15:17:44 +00:00
|
|
|
"\
|
2016-05-11 16:55:43 +00:00
|
|
|
[COMPILING] bar v0.1.0 ([..])
|
2017-01-12 05:35:17 +00:00
|
|
|
[RUNNING] `[..] -C debuginfo=2 [..]`
|
2018-09-08 02:42:26 +00:00
|
|
|
[COMPILING] foo v0.0.1 ([CWD])
|
2023-05-31 10:09:35 +00:00
|
|
|
[RUNNING] `[..] -C debuginfo=2 [..]-C debug-assertions [..]`
|
2017-01-12 01:03:36 +00:00
|
|
|
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
|
2018-03-14 15:17:44 +00:00
|
|
|
",
|
2018-12-08 11:19:47 +00:00
|
|
|
)
|
|
|
|
.run();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn build_only_bar_dependency() {
|
2018-07-20 11:47:47 +00:00
|
|
|
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 = []
|
2015-05-02 23:11:46 +00:00
|
|
|
|
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() }")
|
2017-07-22 03:12:21 +00:00
|
|
|
.build();
|
2018-08-28 09:20:03 +00:00
|
|
|
let _bar = project()
|
|
|
|
.at("bar")
|
2018-07-24 22:35:01 +00:00
|
|
|
.file("Cargo.toml", &basic_manifest("bar", "0.1.0"))
|
2018-07-25 00:30:32 +00:00
|
|
|
.file("src/lib.rs", "pub fn baz() {}")
|
2017-07-22 03:12:21 +00:00
|
|
|
.build();
|
2015-05-02 23:11:46 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
foo.cargo("rustc -v -p bar -- -C debug-assertions")
|
|
|
|
.with_stderr(
|
2018-03-14 15:17:44 +00:00
|
|
|
"\
|
2016-05-11 16:55:43 +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 [..]`
|
2017-01-12 01:03:36 +00:00
|
|
|
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
|
2018-03-14 15:17:44 +00:00
|
|
|
",
|
2018-12-08 11:19:47 +00:00
|
|
|
)
|
|
|
|
.run();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-09-12 21:32:35 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2018-03-19 17:20:54 +00:00
|
|
|
fn targets_selected_default() {
|
2018-08-28 09:20:03 +00:00
|
|
|
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 \
|
2019-04-26 20:53:51 +00:00
|
|
|
--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 \
|
2023-05-31 10:09:35 +00:00
|
|
|
-C debuginfo=2 [..]--test [..]",
|
2018-12-08 11:19:47 +00:00
|
|
|
)
|
|
|
|
.run();
|
2018-03-19 17:20:54 +00:00
|
|
|
}
|
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2018-03-19 17:20:54 +00:00
|
|
|
fn targets_selected_all() {
|
2018-08-28 09:20:03 +00:00
|
|
|
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 \
|
2019-04-26 20:53:51 +00:00
|
|
|
--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(
|
2020-04-01 18:41:27 +00:00
|
|
|
"[RUNNING] `rustc --crate-name foo src/main.rs [..]--emit=[..]link[..]\
|
2023-05-31 10:09:35 +00:00
|
|
|
-C debuginfo=2 [..]--test [..]",
|
2018-12-08 11:19:47 +00:00
|
|
|
)
|
|
|
|
.run();
|
2018-03-15 15:20:15 +00:00
|
|
|
}
|
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn fail_with_multiple_packages() {
|
2018-07-20 11:47:47 +00:00
|
|
|
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 = []
|
2015-09-12 21:32:35 +00:00
|
|
|
|
2020-09-27 00:59:58 +00:00
|
|
|
[dependencies.bar]
|
|
|
|
path = "../bar"
|
2015-09-12 21:32:35 +00:00
|
|
|
|
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() {}")
|
2017-07-22 03:12:21 +00:00
|
|
|
.build();
|
2015-09-15 23:02:37 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
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();
|
2015-09-15 23:02:37 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
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();
|
2015-09-12 21:32:35 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
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();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2015-12-17 18:10:59 +00:00
|
|
|
|
2020-10-04 15:28:01 +00:00
|
|
|
#[cargo_test]
|
|
|
|
fn fail_with_glob() {
|
|
|
|
let p = project()
|
|
|
|
.file(
|
|
|
|
"Cargo.toml",
|
|
|
|
r#"
|
2020-10-09 23:44:57 +00:00
|
|
|
[workspace]
|
|
|
|
members = ["bar"]
|
|
|
|
"#,
|
2020-10-04 15:28:01 +00:00
|
|
|
)
|
|
|
|
.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();
|
|
|
|
}
|
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2016-05-25 20:55:42 +00:00
|
|
|
fn rustc_with_other_profile() {
|
2018-07-20 11:47:47 +00:00
|
|
|
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;
|
2015-12-17 18:10:59 +00:00
|
|
|
|
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"))
|
2017-07-22 03:12:21 +00:00
|
|
|
.file("a/src/lib.rs", "")
|
|
|
|
.build();
|
2015-12-17 18:10:59 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
p.cargo("rustc --profile test").run();
|
2016-05-25 20:55:42 +00:00
|
|
|
}
|
2018-04-22 00:21:42 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2018-04-22 00:21:42 +00:00
|
|
|
fn rustc_fingerprint() {
|
|
|
|
// Verify that the fingerprint includes the rustc args.
|
2018-07-20 11:47:47 +00:00
|
|
|
let p = project()
|
2018-04-22 00:21:42 +00:00
|
|
|
.file("Cargo.toml", &basic_lib_manifest("foo"))
|
|
|
|
.file("src/lib.rs", "")
|
|
|
|
.build();
|
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
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
|
|
|
|
2018-08-28 09:20:03 +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();
|
2018-08-28 09:20:03 +00:00
|
|
|
|
|
|
|
p.cargo("rustc -v")
|
|
|
|
.with_stderr_does_not_contain("-C debug-assertions")
|
|
|
|
.with_stderr(
|
|
|
|
"\
|
2022-11-21 17:39:02 +00:00
|
|
|
[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
|
|
|
|
2018-08-28 09:20:03 +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
|
|
|
}
|
2018-05-09 00:23:28 +00:00
|
|
|
|
2019-06-05 18:52:53 +00:00
|
|
|
#[cargo_test]
|
2018-05-09 00:23:28 +00:00
|
|
|
fn rustc_test_with_implicit_bin() {
|
2018-07-20 11:47:47 +00:00
|
|
|
let p = project()
|
2018-05-09 00:23:28 +00:00
|
|
|
.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(
|
2018-05-09 00:23:28 +00:00
|
|
|
"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();
|
2018-05-09 00:23:28 +00:00
|
|
|
|
2018-08-28 09:20:03 +00:00
|
|
|
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-05-09 00:23:28 +00:00
|
|
|
",
|
2018-12-08 11:19:47 +00:00
|
|
|
)
|
|
|
|
.with_stderr_contains(
|
2018-08-28 09:20:03 +00:00
|
|
|
"\
|
2018-08-02 09:18:48 +00:00
|
|
|
[RUNNING] `rustc --crate-name foo src/main.rs [..]
|
2018-05-09 00:23:28 +00:00
|
|
|
",
|
2018-12-08 11:19:47 +00:00
|
|
|
)
|
|
|
|
.run();
|
2018-05-09 00:23:28 +00:00
|
|
|
}
|
2021-02-22 00:35:33 +00:00
|
|
|
|
|
|
|
#[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")
|
2022-07-16 02:32:23 +00:00
|
|
|
.masquerade_as_nightly_cargo(&["print"])
|
Fix usage of assert methods
The `with_stdout_contains` was mis-used. Since some lines may or may not
appear for some compiler targets and environments (nightly, beta,
stable, etc.) the tests would fail because the output was not identical.
Instead of a using raw strings, each line with the arch, endian, env,
family, vendor, pointer_width, etc. that are known to always be
present (at least of the CI builds) are included. This should work for
the CI environments and my local environment.
2021-02-22 03:58:31 +00:00
|
|
|
.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")
|
2021-02-22 00:35:33 +00:00
|
|
|
.run();
|
|
|
|
}
|
2021-02-22 00:50:21 +00:00
|
|
|
|
|
|
|
#[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();
|
|
|
|
|
2022-06-17 11:53:12 +00:00
|
|
|
p.cargo("rustc -Z unstable-options --target x86_64-pc-windows-msvc --target i686-unknown-linux-gnu --print cfg")
|
|
|
|
.masquerade_as_nightly_cargo(&["print"])
|
Fix usage of assert methods
The `with_stdout_contains` was mis-used. Since some lines may or may not
appear for some compiler targets and environments (nightly, beta,
stable, etc.) the tests would fail because the output was not identical.
Instead of a using raw strings, each line with the arch, endian, env,
family, vendor, pointer_width, etc. that are known to always be
present (at least of the CI builds) are included. This should work for
the CI environments and my local environment.
2021-02-22 03:58:31 +00:00
|
|
|
.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")
|
2021-02-22 00:50:21 +00:00
|
|
|
.run();
|
|
|
|
}
|
2021-02-22 00:54:08 +00:00
|
|
|
|
|
|
|
#[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")
|
2022-07-16 02:32:23 +00:00
|
|
|
.masquerade_as_nightly_cargo(&["print"])
|
2021-02-22 00:58:19 +00:00
|
|
|
.env("RUSTFLAGS", "-C target-feature=+crt-static")
|
Fix usage of assert methods
The `with_stdout_contains` was mis-used. Since some lines may or may not
appear for some compiler targets and environments (nightly, beta,
stable, etc.) the tests would fail because the output was not identical.
Instead of a using raw strings, each line with the arch, endian, env,
family, vendor, pointer_width, etc. that are known to always be
present (at least of the CI builds) are included. This should work for
the CI environments and my local environment.
2021-02-22 03:58:31 +00:00
|
|
|
.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")
|
2021-02-22 00:58:19 +00:00
|
|
|
.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#"
|
2021-02-22 00:58:19 +00:00
|
|
|
[target.x86_64-pc-windows-msvc]
|
|
|
|
rustflags = ["-C", "target-feature=+crt-static"]
|
2021-02-22 01:00:28 +00:00
|
|
|
"#,
|
|
|
|
)
|
2021-02-22 00:58:19 +00:00
|
|
|
.file("src/main.rs", r#"fn main() {} "#)
|
|
|
|
.build();
|
|
|
|
|
|
|
|
p.cargo("rustc -Z unstable-options --target x86_64-pc-windows-msvc --print cfg")
|
2022-07-16 02:32:23 +00:00
|
|
|
.masquerade_as_nightly_cargo(&["print"])
|
2021-02-22 00:54:08 +00:00
|
|
|
.env("RUSTFLAGS", "-C target-feature=+crt-static")
|
Fix usage of assert methods
The `with_stdout_contains` was mis-used. Since some lines may or may not
appear for some compiler targets and environments (nightly, beta,
stable, etc.) the tests would fail because the output was not identical.
Instead of a using raw strings, each line with the arch, endian, env,
family, vendor, pointer_width, etc. that are known to always be
present (at least of the CI builds) are included. This should work for
the CI environments and my local environment.
2021-02-22 03:58:31 +00:00
|
|
|
.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")
|
2021-02-22 00:54:08 +00:00
|
|
|
.run();
|
|
|
|
}
|