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