Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Allow other libraries to react to the --help flag, too
authorMartin Quinson <martin.quinson@loria.fr>
Wed, 18 Jul 2018 23:08:10 +0000 (01:08 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Wed, 18 Jul 2018 23:13:34 +0000 (01:13 +0200)
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)

ChangeLog
include/simgrid/engine.h
src/simgrid/sg_config.cpp

index 38b1e5e..f556726 100644 (file)
--- 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
index 194e28c..4582699 100644 (file)
@@ -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_ */
index 2e2db7f..553d43f 100644 (file)
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf, "About the configuration of SimGrid");
 
+static simgrid::config::Flag<bool> 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();