1use crate::CargoResult;
2use crate::CliResult;
3
4pub fn run(
5 config: &cargo::Config,
6 manifest_path: &std::path::Path,
7 args: &[std::ffi::OsString],
8 release: bool,
9) -> CargoResult<()> {
10 let script = crate::util::script::RawScript::parse_from(manifest_path)?;
11 let ws = script.to_workspace(config)?;
12
13 let mut build_config = cargo::core::compiler::BuildConfig::new(
14 config,
15 None,
16 false,
17 &[],
18 cargo::core::compiler::CompileMode::Build,
19 )?;
20 build_config.requested_profile =
21 cargo::util::interning::InternedString::new(if release { "release" } else { "dev" });
22 let compile_opts = cargo::ops::CompileOptions {
23 build_config,
24 cli_features: cargo::core::resolver::features::CliFeatures::from_command_line(
25 &[],
26 false,
27 true,
28 )?,
29 spec: cargo::ops::Packages::Default,
30 filter: cargo::ops::CompileFilter::Default {
31 required_features_filterable: false,
32 },
33 target_rustdoc_args: None,
34 target_rustc_args: None,
35 target_rustc_crate_types: None,
36 rustdoc_document_private_items: false,
37 honor_rust_version: true,
38 };
39
40 cargo::ops::run(&ws, &compile_opts, args)
41}
42
43pub fn clean(config: &cargo::Config, manifest_path: &std::path::Path) -> CargoResult<()> {
44 let opts = cargo::ops::CleanOptions {
45 config,
46 spec: vec![],
47 targets: vec![],
48 requested_profile: cargo::util::interning::InternedString::new("dev"),
49 profile_specified: false,
50 doc: false,
51 };
52 let script = crate::util::script::RawScript::parse_from(manifest_path)?;
53 let ws = script.to_workspace(config)?;
54 cargo::ops::clean(&ws, &opts)?;
55 Ok(())
56}
57
58pub fn test(config: &cargo::Config, manifest_path: &std::path::Path) -> CliResult {
59 let script = crate::util::script::RawScript::parse_from(manifest_path)?;
60 let ws = script.to_workspace(config)?;
61
62 let mut build_config = cargo::core::compiler::BuildConfig::new(
63 config,
64 None,
65 false,
66 &[],
67 cargo::core::compiler::CompileMode::Test,
68 )?;
69 build_config.requested_profile = cargo::util::interning::InternedString::new("test");
70 let compile_opts = cargo::ops::CompileOptions {
71 build_config,
72 cli_features: cargo::core::resolver::features::CliFeatures::from_command_line(
73 &[],
74 false,
75 true,
76 )?,
77 spec: cargo::ops::Packages::Default,
78 filter: cargo::ops::CompileFilter::from_raw_arguments(
79 false,
80 vec![],
81 true,
82 vec![],
83 false,
84 vec![],
85 false,
86 vec![],
87 false,
88 false,
89 ),
90 target_rustdoc_args: None,
91 target_rustc_args: None,
92 target_rustc_crate_types: None,
93 rustdoc_document_private_items: false,
94 honor_rust_version: true,
95 };
96
97 let ops = cargo::ops::TestOptions {
98 no_run: false,
99 no_fail_fast: false,
100 compile_opts,
101 };
102
103 cargo::ops::run_tests(&ws, &ops, &[])
104}
105
106pub fn bench(config: &cargo::Config, manifest_path: &std::path::Path) -> CliResult {
107 let script = crate::util::script::RawScript::parse_from(manifest_path)?;
108 let ws = script.to_workspace(config)?;
109
110 let mut build_config = cargo::core::compiler::BuildConfig::new(
111 config,
112 None,
113 false,
114 &[],
115 cargo::core::compiler::CompileMode::Bench,
116 )?;
117 build_config.requested_profile = cargo::util::interning::InternedString::new("bench");
118 let compile_opts = cargo::ops::CompileOptions {
119 build_config,
120 cli_features: cargo::core::resolver::features::CliFeatures::from_command_line(
121 &[],
122 false,
123 true,
124 )?,
125 spec: cargo::ops::Packages::Default,
126 filter: cargo::ops::CompileFilter::from_raw_arguments(
127 false,
128 vec![],
129 true,
130 vec![],
131 false,
132 vec![],
133 false,
134 vec![],
135 false,
136 false,
137 ),
138 target_rustdoc_args: None,
139 target_rustc_args: None,
140 target_rustc_crate_types: None,
141 rustdoc_document_private_items: false,
142 honor_rust_version: true,
143 };
144
145 let ops = cargo::ops::TestOptions {
146 no_run: false,
147 no_fail_fast: false,
148 compile_opts,
149 };
150
151 cargo::ops::run_benches(&ws, &ops, &[])
152}