From 2931e5609e3d7faf694d9b83e55985f379a916a3 Mon Sep 17 00:00:00 2001 From: Ian Chamberlain Date: Fri, 29 Sep 2023 08:47:24 -0400 Subject: [PATCH] Respect --no-run when using custom runner Also do some other small cleanups for minor optimizations --- Cargo.lock | 89 ++++++++++++++++++-------------------------------- src/command.rs | 65 ++++++++++++++++++++++-------------- src/lib.rs | 14 ++------ 3 files changed, 76 insertions(+), 92 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1b20b84..073a874 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,9 +18,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" +checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46" [[package]] name = "anstyle-parse" @@ -52,9 +52,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "camino" @@ -112,20 +112,19 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.1" +version = "4.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c8d502cbaec4595d2e7d5f61e318f05417bd2b66fdc3809498f0d3fdf0bea27" +checksum = "b1d7b8d5ec32af0fadc644bf1fd509a688c2103b185644bb1e29d164e0703136" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.4.1" +version = "4.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5891c7bc0edb3e1c2204fc5e94009affabeb1821c9e5fdc3959536c5c0bb984d" +checksum = "5179bb514e4d7c2051749d8fcefa2ed6d06a9f4e6d69faf3805f5d80b8cf8d56" dependencies = [ "anstream", "anstyle", @@ -136,9 +135,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fd1a5729c4548118d7d70ff234a44868d00489a4b6597b0b020918a0e91a1a" +checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" dependencies = [ "heck", "proc-macro2", @@ -160,9 +159,9 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "errno" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" dependencies = [ "errno-dragonfly", "libc", @@ -185,23 +184,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -[[package]] -name = "hermit-abi" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys", -] - [[package]] name = "itoa" version = "1.0.9" @@ -210,27 +192,21 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" [[package]] name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "once_cell" -version = "1.18.0" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" dependencies = [ "unicode-ident", ] @@ -255,13 +231,12 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.23" +version = "0.38.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f" dependencies = [ "bitflags", "errno", - "io-lifetimes", "libc", "linux-raw-sys", "windows-sys", @@ -275,9 +250,9 @@ checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "semver" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" dependencies = [ "serde", ] @@ -304,9 +279,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.105" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ "itoa", "ryu", @@ -315,9 +290,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "strsim" @@ -327,9 +302,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" -version = "2.0.29" +version = "2.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" dependencies = [ "proc-macro2", "quote", @@ -344,9 +319,9 @@ checksum = "37c12559dba7383625faaff75be24becf35bfc885044375bcab931111799a3da" [[package]] name = "terminal_size" -version = "0.2.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237" +checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" dependencies = [ "rustix", "windows-sys", @@ -363,9 +338,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "utf8parse" diff --git a/src/command.rs b/src/command.rs index 08a086c..7ee7256 100644 --- a/src/command.rs +++ b/src/command.rs @@ -160,30 +160,7 @@ impl CargoCmd { match self { CargoCmd::Build(build) => build.passthrough.cargo_args(), CargoCmd::Run(run) => run.build_args.passthrough.cargo_args(), - CargoCmd::Test(test) => { - let mut cargo_args = test.run_args.build_args.passthrough.cargo_args(); - - // We can't run 3DS executables on the host, but we want to respect - // the user's "runner" configuration if set. - // - // If doctests were requested, `--no-run` will be rejected on the - // command line and must be set with RUSTDOCFLAGS instead: - // https://github.com/rust-lang/rust/issues/87022 - if !test.run_args.use_custom_runner() && !test.doc { - cargo_args.push("--no-run".to_string()); - } - - if test.doc { - cargo_args.extend([ - "--doc".into(), - // https://github.com/rust-lang/cargo/issues/7040 - "-Z".into(), - "doctest-xcompile".into(), - ]); - } - - cargo_args - } + CargoCmd::Test(test) => test.cargo_args(), CargoCmd::New(new) => { // We push the original path in the new command (we captured it in [`New`] to learn about the context) let mut cargo_args = new.cargo_args.cargo_args(); @@ -493,6 +470,46 @@ impl Test { self.run_args.callback(config); } } + + fn should_run(&self) -> bool { + self.run_args.use_custom_runner() && !self.no_run + } + + /// The args to pass to the underlying `cargo test` command. + fn cargo_args(&self) -> Vec { + let mut cargo_args = self.run_args.build_args.passthrough.cargo_args(); + + // We can't run 3DS executables on the host, but we want to respect + // the user's "runner" configuration if set. + // + // If doctests were requested, `--no-run` will be rejected on the + // command line and must be set with RUSTDOCFLAGS instead: + // https://github.com/rust-lang/rust/issues/87022 + + if self.doc { + cargo_args.extend([ + "--doc".into(), + // https://github.com/rust-lang/cargo/issues/7040 + "-Z".into(), + "doctest-xcompile".into(), + ]); + } else if !self.should_run() { + cargo_args.push("--no-run".into()); + } + + cargo_args + } + + /// Flags to pass to rustdoc via RUSTDOCFLAGS + pub(crate) fn rustdocflags(&self) -> &'static str { + if self.should_run() { + "" + } else { + // We don't support running doctests by default, but cargo doesn't like + // --no-run for doctests, so we have to plumb it in via RUSTDOCFLAGS + " --no-run" + } + } } const TOML_CHANGES: &str = r#"ctru-rs = { git = "https://github.com/rust3ds/ctru-rs" } diff --git a/src/lib.rs b/src/lib.rs index f3b70ac..8311048 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,7 +10,6 @@ use cargo_metadata::{Message, MetadataCommand}; use command::{Input, Test}; use rustc_version::Channel; use semver::Version; -use serde::Deserialize; use tee::TeeReader; use crate::command::{CargoCmd, Run}; @@ -98,16 +97,8 @@ pub fn make_cargo_command(input: &Input, message_format: &Option) -> Com } if let CargoCmd::Test(test) = cargo_cmd { - let no_run_flag = if test.run_args.use_custom_runner() { - "" - } else { - // We don't support running doctests by default, but cargo doesn't like - // --no-run for doctests, so we have to plumb it in via RUSTDOCFLAGS - " --no-run" - }; - // RUSTDOCFLAGS is simply ignored if --doc wasn't passed, so we always set it. - let rustdoc_flags = std::env::var("RUSTDOCFLAGS").unwrap_or_default() + no_run_flag; + let rustdoc_flags = std::env::var("RUSTDOCFLAGS").unwrap_or_default() + test.rustdocflags(); command.env("RUSTDOCFLAGS", rustdoc_flags); } @@ -212,6 +203,7 @@ pub fn check_rust_version() { /// in [`build_smdh`], [`build_3dsx`], and [`link`]. pub fn get_metadata(messages: &[Message]) -> CTRConfig { let metadata = MetadataCommand::new() + .no_deps() .exec() .expect("Failed to get cargo metadata"); @@ -399,7 +391,7 @@ pub fn get_romfs_path(config: &CTRConfig) -> (PathBuf, bool) { (romfs_path, is_default) } -#[derive(Deserialize, Default)] +#[derive(Default)] pub struct CTRConfig { name: String, author: String,