From c81c40281db4e7ad12eef2b7bb1872f2b4b6b2bf Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Tue, 6 Oct 2020 15:31:45 +0200
Subject: [PATCH] [kernel] allow -dump-config to also dump the list of options
 and values

---
 src/kernel_internals/runtime/dump_config.ml | 24 ++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/kernel_internals/runtime/dump_config.ml b/src/kernel_internals/runtime/dump_config.ml
index c97a98ca8f6..fa0c4ed1d51 100644
--- a/src/kernel_internals/runtime/dump_config.ml
+++ b/src/kernel_internals/runtime/dump_config.ml
@@ -20,6 +20,26 @@
 (*                                                                        *)
 (**************************************************************************)
 
+let list_plugins_names () =
+  Plugin.fold_on_plugins (fun p acc -> p.Plugin.p_name :: acc) []
+
+let dump_parameter tp =
+  let open Typed_parameter in
+  let json_value = match tp.accessor with
+    | Bool (accessor,_) -> `Bool (accessor.get ())
+    | Int (accessor,_) -> `Int (accessor.get ())
+    | String (accessor,_) -> `String (accessor.get ())
+  in
+  tp.name, json_value
+
+let dump_all_parameters () =
+  let add_category _ l acc =
+    List.fold_left (fun acc tp -> dump_parameter tp :: acc) acc l
+  in
+  let add_plugin plugin acc =
+    Hashtbl.fold add_category plugin.Plugin.p_parameters acc
+  in
+  Plugin.fold_on_plugins add_plugin []
 
 let dump_to_json () =
   let string s = `String s in
@@ -50,7 +70,9 @@ let dump_to_json () =
     "preprocessor_keep_comments", `Bool Fc_config.preprocessor_keep_comments ;
     "dot", (match Fc_config.dot with Some cmd -> `String cmd | None -> `Null) ;
     "current_machdep", `String (Kernel.Machdep.get ()) ;
-    "machdeps", list string (File.list_available_machdeps ())
+    "machdeps", list string (File.list_available_machdeps ()) ;
+    "plugins", list string (list_plugins_names ()) ;
+    "parameters", `Assoc (dump_all_parameters ()) ;
   ]
 
 let dump_to_stdout () =
-- 
GitLab