59 std::vector<ConfigParamSpec>
const& currentWorkflowOptions,
61 std::string
mode =
"full")
63 boost::program_options::options_description toplevel;
64 boost::program_options::options_description wo(
"Global workflow options");
68 std::string specOptionsDescription =
"Available data processors";
69 if (
mode ==
"short") {
70 specOptionsDescription +=
" (full info with '--help full')";
73 for (
const auto& spec : workflow) {
74 std::string
name =
"Data processor options: " + spec.name;
75 boost::program_options::options_description processorOptions(
name);
82 if (vetos.options().size() > 0) {
83 vetos.add(processorOptions);
86 specOptions.add(processorOptions);
87 }
else if (
mode == spec.name) {
88 toplevel.add(processorOptions);
92 if (
mode ==
"full" ||
mode ==
"short") {
95 help =
"Option groups by process name: --" + spec.name + R
"( "<processor options>")";
96 } else if (
mode ==
"short" && processorOptions.options().size() > 0) {
97 help =
"Use '--help " + spec.name +
"' to display processor options";
98 }
else if (
mode ==
"short" && processorOptions.options().size() == 0) {
99 help =
"No processor options";
101 specOptions.add_options()(spec.name.c_str(),
102 boost::program_options::value<std::string>(),
106 if (workflow.size() > 0 && (
mode ==
"full" ||
mode ==
"short")) {
107 toplevel.add(specOptions);
114 boost::program_options::options_description& options)
116 const char*
name = spec.
name.c_str();
119 if constexpr (isSimpleVariant<V>()) {
121 using BoostType =
typename std::conditional<V == VariantType::String, std::string, Type>::type;
122 auto value = boost::program_options::value<BoostType>();
134 options.add_options()(
name,
value, help);
135 }
else if constexpr (isArray<V>() || isArray2D<V>()) {
136 auto value = boost::program_options::value<std::string>();
142 options.add_options()(
name,
value, help);
143 }
else if constexpr (isLabeledArray<V>()) {
145 auto value = boost::program_options::value<std::string>();
148 options.add_options()(
name,
value, help);
151 using BoostType =
typename std::conditional<V == VariantType::String, std::string, Type>::type;
152 auto value = boost::program_options::value<BoostType>();
153 options.add_options()(
name,
value, help);