let gen_topic target_basename dline t =
Printf.printf " (rule (with-stdout-to %s-%s.0
(echo
(rule (targets %s-%s.1 %s-%s.err) (deps
using-built-opam) (action (progn (with-stderr-to
%s-%s.err (with-stdout-to %s-%s.1 (run %s %s
--help=groff))) (diff %s-%s.err %%{dep:%s-%s.0})))
(package opam)) "
target_basename t target_basename t target_basename t
target_basename t target_basename t dline t target_basename
t target_basename t
let () =
let cmd,args = match Array.to_list Sys.argv with
| _::cmd::args -> cmd, args
| [] | [_] -> invalid_arg "Missing command
argument"
in
let cline = String.concat " " (cmd :: args) ˆ
" help topics" in
let topics =
let ic = Unix.open_process_in cline in
set_binary_mode_in ic false;
let rec aux () =
match input_line ic with
| "" -> aux ()
| s -> s :: aux ()
| exception _ -> close_in ic; []
in
aux ()
in
let target_basename = String.concat "-"
("opam" :: args) in
let dline = String.concat " "
("%{bin:opam}" :: args) in
print_string ";; Generated by dune_man0;
List.iter (gen_topic target_basename dline) topics;
Printf.printf " (install (section man)
(package opam) (files%s))0
(String.concat ""
(List.map (Printf.sprintf " %s-%s.1"
target_basename) topics))