1 use cargo::util::command_prelude::*;
2 use cargo::CliResult;
3 use cargo::Config;
4
5 use cargo_c::build::*;
6 use cargo_c::cli::run_cargo_fallback;
7 use cargo_c::cli::subcommand_test;
8 use cargo_c::config::*;
9
10 use structopt::clap::*;
11
main() -> CliResult12 fn main() -> CliResult {
13 let mut config = Config::default()?;
14
15 let subcommand = subcommand_test("ctest");
16
17 let mut app = app_from_crate!()
18 .settings(&[
19 AppSettings::UnifiedHelpMessage,
20 AppSettings::DeriveDisplayOrder,
21 AppSettings::VersionlessSubcommands,
22 AppSettings::AllowExternalSubcommands,
23 ])
24 .subcommand(subcommand);
25
26 let args = app.clone().get_matches();
27
28 let subcommand_args = match args.subcommand() {
29 ("ctest", Some(args)) => args,
30 (cmd, Some(args)) => {
31 return run_cargo_fallback(cmd, args);
32 }
33 _ => {
34 // No subcommand provided.
35 app.print_help()?;
36 return Ok(());
37 }
38 };
39
40 if subcommand_args.is_present("version") {
41 println!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"));
42 return Ok(());
43 }
44
45 config_configure(&mut config, subcommand_args)?;
46
47 let mut ws = subcommand_args.workspace(&config)?;
48
49 let (packages, compile_opts) = cbuild(&mut ws, &config, subcommand_args, "dev")?;
50
51 ctest(&ws, &config, subcommand_args, &packages, compile_opts)
52 }
53