22 {
24
25 std::string_view appType{ "Gaudi::Application" };
26 std::string_view optsFile;
27
28 gsl::span
args{
argv,
static_cast<std::remove_cv_t<decltype( gsl::dynamic_extent )
>>(
argc ) };
29
31 return out <<
"usage: " <<
name <<
" [options] option_file\n";
32 };
33
34 auto arg =
args.begin();
35 ++arg;
36 while ( arg !=
args.end() ) {
37 std::string_view opt{ *arg };
38 if ( opt == "--application" )
39 appType = *++arg;
40 else if ( opt == "-h" || opt == "--help" ) {
42 std::cout << R"(
43Options:
44 -h, --help show this help message and exit
45 --application APPLICATION
46 name of the application class to use [default: Gaudi::Application]
47)";
48 return EXIT_SUCCESS;
49 } else if ( opt[0] == '-' ) {
50 std::cerr << "error: unknown option " << opt << '\n';
52 return EXIT_FAILURE;
53 } else {
54 optsFile = *arg++;
55 break;
56 }
57 ++arg;
58 }
59 if ( arg !=
args.end() ) { std::cerr <<
"warning: ignoring extra positional arguments\n"; }
60 if ( optsFile.empty() ) {
61 std::cerr << "error: missing option file argument\n";
63 return EXIT_FAILURE;
64 }
65
66 if ( optsFile.size() > 3 && optsFile.substr( optsFile.size() - 3 ) == ".py" ) {
67 opts[
"ApplicationMgr.EvtSel"] =
"NONE";
68 opts[
"ApplicationMgr.JobOptionsType"] =
"NONE";
69 opts[
"ApplicationMgr.DLLs"] =
"['GaudiPython']";
70 opts[
"ApplicationMgr.Runable"] =
"PythonScriptingSvc";
71 } else {
72 opts[
"ApplicationMgr.JobOptionsPath"] = optsFile;
73 }
74
76 if ( !app ) {
77 std::cerr << "error: failure creating " << appType << '\n';
create(cls, appType, opts)
std::map< std::string, std::string > Options
void usage(const std::string &argv0)