[Libguestfs] [PATCH v6 29/41] daemon: Generate OCaml wrappers for optgroup_*_available functions.

Richard W.M. Jones
Thu, 15 Jun 2017 17:06:19 -0000

It is sometimes useful to be able to call these from OCaml code.
---
 generator/daemon.ml | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/generator/daemon.ml b/generator/daemon.ml
index fd01e5d8a..1d7461f8c 100644
--- a/generator/daemon.ml
+++ b/generator/daemon.ml
@@ -976,6 +976,10 @@ let generate_daemon_optgroups_c ()    generate_header
CStyle GPLv2plus;

   pr "#include <config.h>\n";
+  pr "#include <stdio.h>\n";
+  pr "#include <stdlib.h>\n";
+  pr "\n";
+  pr "#include <caml/mlvalues.h>\n";
   pr "\n";
   pr "#include \"daemon.h\"\n";
   pr "#include \"optgroups.h\"\n";
@@ -999,7 +1003,24 @@ let generate_daemon_optgroups_c ()          pr "  {
\"%s\", optgroup_%s_available },\n" group group
   ) optgroups_names_all;
   pr "  { NULL, NULL }\n";
-  pr "};\n"
+  pr "};\n";
+  pr "\n";
+  pr "/* Wrappers so these functions can be called from OCaml code.
*/\n";
+  List.iter (
+    fun group ->
+      if not (List.mem group optgroups_retired) then (
+        pr "extern value guestfs_int_daemon_optgroup_%s_available
(value);\n"
+           group;
+        pr "\n";
+        pr "/* NB: This is a \"noalloc\" call. */\n";
+        pr "value\n";
+        pr "guestfs_int_daemon_optgroup_%s_available (value unitv)\n"
group;
+        pr "{\n";
+        pr "  return Val_bool (optgroup_%s_available ());\n" group;
+        pr "}\n";
+        pr "\n"
+      )
+  ) optgroups_names_all

 let generate_daemon_optgroups_h ()    generate_header CStyle GPLv2plus;
--
2.13.0