open Generator_prepopts
open Generator_c
+let doc_opttype_of = function
+ | Bool n -> "true|false"
+ | Int n
+ | Int64 n -> "N"
+ | String n -> ".."
+ | _ -> assert false
+
(* Generate a lot of different functions for guestfish. *)
let generate_fish_cmds () =
generate_header CStyle GPLv2plus;
pr "#include <config.h>\n";
pr "\n";
+ pr "/* It is safe to call deprecated functions from this file. */\n";
+ pr "#undef GUESTFS_WARN_DEPRECATED\n";
+ pr "\n";
pr "#include <stdio.h>\n";
pr "#include <stdlib.h>\n";
pr "#include <string.h>\n";
pr "#include <inttypes.h>\n";
pr "\n";
- pr "#include <guestfs.h>\n";
pr "#include \"c-ctype.h\"\n";
pr "#include \"full-write.h\"\n";
pr "#include \"xstrtol.h\"\n";
+ pr "\n";
+ pr "#include <guestfs.h>\n";
pr "#include \"fish.h\"\n";
+ pr "#include \"fish-cmds.h\"\n";
pr "#include \"options.h\"\n";
pr "#include \"cmds_gperf.h\"\n";
pr "\n";
(String.concat ""
(List.map (fun arg -> " " ^ name_of_argt arg) args))
(String.concat ""
- (List.map (fun arg -> sprintf " [%s:..]" (name_of_argt arg)) optargs)) in
+ (List.map (fun arg ->
+ sprintf " [%s:%s]" (name_of_argt arg) (doc_opttype_of arg)
+ ) optargs)) in
let warnings =
if List.exists (function Key _ -> true | _ -> false) args then
("\n\n" ^ protocol_limit_warning)
else "" in
- (* For DangerWillRobinson commands, we should probably have
- * guestfish prompt before allowing you to use them (especially
- * in interactive mode). XXX
- *)
- let warnings =
- warnings ^
- if List.mem DangerWillRobinson flags then
- ("\n\n" ^ danger_will_robinson)
- else "" in
-
let warnings =
warnings ^
match deprecation_notice flags with
pr " if (%s == NULL) return -1;\n" name
| Key name ->
pr " %s = read_key (\"%s\");\n" name name;
+ pr " if (keys_from_stdin)\n";
+ pr " input_lineno++;\n";
pr " if (%s == NULL) return -1;\n" name
| Bool name ->
pr " %s = is_true (argv[i++]) ? 1 : 0;\n" name
pr " }\n";
pr "}\n"
+and generate_fish_cmds_h () =
+ generate_header CStyle GPLv2plus;
+
+ pr "#ifndef FISH_CMDS_H\n";
+ pr "#define FISH_CMDS_H\n";
+ pr "\n";
+
+ List.iter (
+ fun (shortname, _, _, _, _, _, _) ->
+ pr "extern int run_%s (const char *cmd, size_t argc, char *argv[]);\n"
+ shortname
+ ) fish_commands;
+
+ pr "\n";
+ pr "#endif /* FISH_CMDS_H */\n"
+
(* gperf code to do fast lookups of commands. *)
and generate_fish_cmds_gperf () =
generate_header CStyle GPLv2plus;
) args;
List.iter (
function
- | Bool n | Int n | Int64 n | String n -> pr " [%s:..]" n
+ | (Bool n | Int n | Int64 n | String n) as arg ->
+ pr " [%s:%s]" n (doc_opttype_of arg)
| _ -> assert false
) optargs;
pr "\n";
if List.mem ProtocolLimitWarning flags then
pr "%s\n\n" protocol_limit_warning;
- if List.mem DangerWillRobinson flags then
- pr "%s\n\n" danger_will_robinson;
-
match deprecation_notice flags with
| None -> ()
| Some txt -> pr "%s\n\n" txt