From: Martin Quinson Date: Wed, 18 Jul 2018 23:08:10 +0000 (+0200) Subject: Allow other libraries to react to the --help flag, too X-Git-Tag: v3_21~385 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/f934c17cc5f1cb03e8dda185651a800ad4caee1b Allow other libraries to react to the --help flag, too When finding --help on the command line, simgrid usually stops right after displaying its help message but some libraries using SimGrid want to display their own help message before the end of the world. Now, they can use the little sg_config_continue_after_help() function to have SimGrid not stopping after dealing with the --help flag. (fix #93) --- diff --git a/ChangeLog b/ChangeLog index 38b1e5e4eb..f556726820 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,7 @@ XBT: - Remove xbt_os_thread_yield() Fixed bugs: + - #93: simgrid should not eat --help - #264: Add ptask L07 resource tracing - #271: Dynamic and manual replay of SMPI traces - #279: Breakpoints option uses time deltas instead of absolute time diff --git a/include/simgrid/engine.h b/include/simgrid/engine.h index 194e28c4b0..4582699518 100644 --- a/include/simgrid/engine.h +++ b/include/simgrid/engine.h @@ -17,6 +17,8 @@ XBT_PUBLIC void simgrid_run(); XBT_PUBLIC void simgrid_register_function(const char* name, int (*code)(int, char**)); XBT_PUBLIC void simgrid_register_default(int (*code)(int, char**)); XBT_PUBLIC double simgrid_get_clock(); + +XBT_PUBLIC void sg_config_continue_after_help(); SG_END_DECL() #endif /* INCLUDE_SIMGRID_ENGINE_H_ */ diff --git a/src/simgrid/sg_config.cpp b/src/simgrid/sg_config.cpp index 2e2db7fd78..553d43f539 100644 --- a/src/simgrid/sg_config.cpp +++ b/src/simgrid/sg_config.cpp @@ -18,6 +18,21 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf, "About the configuration of SimGrid"); +static simgrid::config::Flag cfg_continue_after_help + {"help-nostop", "Do not stop the execution when --help is found", false}; + +/** @brief Allow other libraries to react to the --help flag, too + * + * When finding --help on the command line, simgrid usually stops right after displaying its help message. + * If you are writing a library using simgrid, you may want to display your own help message before everything stops. + * If so, just call this function before having simgrid parsing the command line, and you will be given the control + * even if the user is asking for help. + */ +void sg_config_continue_after_help() +{ + cfg_continue_after_help = true; +} + /* 0: beginning of time (config cannot be changed yet) * 1: initialized: cfg_set created (config can now be changed) * 2: configured: command line parsed and config part of platform file was @@ -73,7 +88,8 @@ static void sg_config_cmd_line(int *argc, char **argv) " --version to get SimGrid version information.\n" "\n" ); - shall_exit = true; + shall_exit = not cfg_continue_after_help; + argv[j++] = argv[i]; // Preserve the --help in argv just in case someone else wants to see it } else if (parse_args && not strcmp(argv[i], "--help-aliases")) { printf("Here is a list of all deprecated option names, with their replacement.\n"); simgrid::config::show_aliases();