12#include "detray/utils/logging.hpp"
15#include "detray/options/boost_program_options.hpp"
23namespace detray::options {
27void add_options(boost::program_options::options_description& ,
31void configure_options(
const boost::program_options::variables_map& ,
35template <
typename... CONFIGS>
36auto parse_options(boost::program_options::options_description& desc,
int argc,
37 char* argv[], CONFIGS&... cfgs) {
38 static_assert(
sizeof...(CONFIGS) > 0,
"No commandline options configured");
41 throw std::invalid_argument(
"Invalid command line arguments passed");
44 desc.add_options()(
"help",
"Produce help message");
47 (add_options(desc, cfgs), ...);
50 boost::program_options::variables_map vm;
52 boost::program_options::store(
55 boost::program_options::command_line_style::unix_style ^
56 boost::program_options::command_line_style::allow_short),
59 boost::program_options::notify(vm);
60 }
catch (
const std::exception& ex) {
62 DETRAY_FATAL_HOST(ex.what() <<
"\n" << desc);
63 std::exit(EXIT_FAILURE);
67 if (vm.count(
"help") != 0u) {
68 std::clog << desc << std::endl;
69 std::exit(EXIT_SUCCESS);
73 (configure_options(vm, cfgs), ...);
75 (print_options(cfgs), ...);
81template <
typename... CONFIGS>
82auto parse_options(
const std::string& description,
int argc,
char* argv[],
85 boost::program_options::options_description desc(description);
88 return parse_options(desc, argc, argv, cfgs...);