12auto main(
int argc,
char** argv) ->
int
14 auto cli_args = CLI::App{
"SRS system command line interface" };
17 argv = cli_args.ensure_utf8(argv);
21 auto spdlog_level = spdlog::level::info;
23 auto output_filenames = std::vector<std::string>{
"output.bin" };
24 auto is_version_print =
false;
25 auto is_root_version_print =
false;
26 auto is_dump_needed =
false;
27 const auto home_dir = std::string_view{ getenv(
"HOME") };
28 auto json_filepath = home_dir.empty() ?
"" : std::format(
"{}/.config/srs-control/config.json", getenv(
"HOME"));
29 auto dump_config_callback = [&json_filepath, &is_dump_needed](
const std::string& filename)
31 is_dump_needed =
true;
32 json_filepath = filename;
35 cli_args.add_flag(
"-v, --version", is_version_print,
"Show the current version");
36 cli_args.add_flag(
"--root-version", is_root_version_print,
"Show the ROOT version if used");
37 cli_args.add_option(
"-l, --log-level", spdlog_level,
"Set log level")
38 ->transform(CLI::CheckedTransformer(
spd_log_map, CLI::ignore_case))
39 ->capture_default_str();
40 cli_args.add_option(
"-p, --print-mode", print_mode,
"Set data print mode")
41 ->transform(CLI::CheckedTransformer(
print_mode_map, CLI::ignore_case))
42 ->capture_default_str();
43 cli_args.add_option(
"-c, --config-file", json_filepath,
"Set the path of the JSON config file")
44 ->capture_default_str();
46 .add_option_function<std::string>(
47 "--dump-config", dump_config_callback,
"Dump default configuration to the file")
48 ->default_val(json_filepath)
49 ->run_callback_for_default()
52 cli_args.add_option(
"-o, --output-files", output_filenames,
"Set output file (or socket) names")
53 ->capture_default_str()
55 cli_args.parse(argc, argv);
59 std::println(
"{}", SRS_PROJECT_VERSION);
69 if (is_root_version_print)
72 std::println(
"{}", gROOT->GetVersion());
74 std::println(
"ROOT is not built");
79 spdlog::set_level(spdlog_level);
84 app.set_options(std::move(app_config));
86 app.set_print_mode(print_mode);
87 app.set_output_filenames(output_filenames);
95 catch (
const CLI::ParseError& e)
99 catch (std::exception& ex)
101 spdlog::critical(
"Exception occured: {}", ex.what());